[{"data":1,"prerenderedAt":173044},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-mo-fa-ming-ling-timeit":3,"wiki-doc-nav":55},{"id":4,"title":5,"body":6,"description":47,"extension":48,"meta":49,"navigation":50,"path":51,"seo":52,"stem":53,"__hash__":54},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":8,"toc":44},"minimark",[9,13,17,20,23,26,29,32,39],[10,11,5],"h1",{"id":12},"_17魔法命令timeit",[14,15,16],"p",{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,18,19],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,21,22],{},"单元格模式：",[14,24,25],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,27,28],{},"初始化语句执行次数由轮数来决定",[14,30,31],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,33,34],{},[35,36],"img",{"alt":37,"src":38},"","\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,40,41],{},[35,42],{"alt":37,"src":43},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":37,"searchDepth":45,"depth":45,"links":46},2,[],null,"md",{},true,"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":5,"description":47},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",[56,5172,6280,7700,10689,12040,13529,14618,23381,23393,23992,24018,24142,24383,24448,24466,24479,24526,24650,24819,25018,25198,25403,25539,25634,25671,25684,25994,26735,27443,27464,28484,30115,30266,30279,30291,30592,50404,50419,50436,50469,53341,76689,92834,92855,92968,93089,93859,94522,94883,94921,95027,95127,95156,95182,95243,96897,96998,97023,97514,98014,99094,99377,100119,100621,100633,102649,104313,105816,107514,109431,111350,113372,116842,117274,117737,118486,121430,121778,121800,122156,125463,125475,125878,125901,126048,126215,126420,126721,127278,127935,129866,131464,132113,133607,135038,136273,137967,139719,142129,142245,143180,143391,144276,145511,145739,145752,146907,149319,151687,155008,157485,159129,160906,162919,165971,168151,170678,172872],{"id":57,"title":58,"body":59,"description":37,"extension":48,"meta":5167,"navigation":50,"path":5168,"seo":5169,"stem":5170,"__hash__":5171},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":60,"toc":5139},[61,64,69,72,76,89,93,98,101,104,107,110,113,148,152,155,158,161,164,217,221,240,242,256,259,267,270,1133,1140,1157,1161,1252,1256,1262,1351,1355,1393,1397,1461,1465,1469,1475,1486,1490,1495,1499,1504,1508,1513,1517,1521,1526,1796,1801,1939,1944,2201,2204,2212,2216,2221,2324,2327,2633,2642,2743,2746,2749,2752,2755,3015,3020,3160,3163,3342,3345,3473,3476,3628,3632,3637,3640,3651,3659,3662,3769,3773,3777,3782,3832,3837,3842,3866,3871,3924,3927,3932,4109,4114,4399,4404,4801,4805,4810,4867,4872,4880,4883,5023,5026,5135],[10,62,58],{"id":63},"_1基础入门",[65,66,68],"h2",{"id":67},"_11注释","1.1注释",[14,70,71],{},"\u002F\u002F或者\u002F* *\u002F",[65,73,75],{"id":74},"_12命名","1.2命名",[77,78,79,83,86],"ol",{},[80,81,82],"li",{},"字母数字下划线",[80,84,85],{},"开头必须是字母或_",[80,87,88],{},"不能使用关键词",[65,90,92],{"id":91},"_13数据类型","1.3数据类型",[94,95,97],"h3",{"id":96},"_131整形","1.3.1整形",[14,99,100],{},"short 短整形 2",[14,102,103],{},"int 整形 4",[14,105,106],{},"long 长整形 win4 linux32位4 linux64位8",[14,108,109],{},"long long 长长整形 8",[14,111,112],{},"利用sizeof可以求数据类型占用的内存空间大小",[114,115,119],"pre",{"className":116,"code":117,"language":118,"meta":37,"style":37},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[120,121,122,141],"code",{"__ignoreMap":37},[123,124,127,131,135,138],"span",{"class":125,"line":126},"line",1,[123,128,130],{"class":129},"szBVR","sizeof",[123,132,134],{"class":133},"sVt8B","(",[123,136,137],{"class":129},"int",[123,139,140],{"class":133},")\n",[123,142,143,145],{"class":125,"line":45},[123,144,130],{"class":129},[123,146,147],{"class":133},"(num)\n",[94,149,151],{"id":150},"_132浮点型","1.3.2浮点型",[14,153,154],{},"float 单精度 4节 7位有效数字",[14,156,157],{},"double 双精度 8节 15-16有效数字",[14,159,160],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,162,163],{},"注意点：",[114,165,167],{"className":116,"code":166,"language":118,"meta":37,"style":37},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[120,168,169,194],{"__ignoreMap":37},[123,170,171,174,177,180,184,187,190],{"class":125,"line":126},[123,172,173],{"class":129},"float",[123,175,176],{"class":133}," f1",[123,178,179],{"class":129},"=",[123,181,183],{"class":182},"sj4cs","3.14",[123,185,186],{"class":129},"f",[123,188,189],{"class":133},";",[123,191,193],{"class":192},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[123,195,196,198,201,203,206,209,212,214],{"class":125,"line":45},[123,197,173],{"class":129},[123,199,200],{"class":133}," f2",[123,202,179],{"class":129},[123,204,205],{"class":182},"3",[123,207,208],{"class":129},"e",[123,210,211],{"class":182},"2",[123,213,189],{"class":133},[123,215,216],{"class":192}," \u002F\u002F科学记数法\n",[94,218,220],{"id":219},"_133字符型","1.3.3字符型",[114,222,224],{"className":116,"code":223,"language":118,"meta":37,"style":37},"char ch='a'\n",[120,225,226],{"__ignoreMap":37},[123,227,228,231,234,236],{"class":125,"line":126},[123,229,230],{"class":129},"char",[123,232,233],{"class":133}," ch",[123,235,179],{"class":129},[123,237,239],{"class":238},"sZZnC","'a'\n",[14,241,163],{},[77,243,244,247,250,253],{},[80,245,246],{},"在显示字符型变量时，只能单引号，双引号x",[80,248,249],{},"单引号内只能一个字符，不能字符串",[80,251,252],{},"c和c++字符型变量只占用一个字符",[80,254,255],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,257,258],{},"ASCII码大致由以下两部分组成：",[77,260,261,264],{},[80,262,263],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[80,265,266],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,268,269],{},"ASCII码表格：",[271,272,273,317],"table",{},[274,275,276],"thead",{},[277,278,279,287,292,296,301,305,309,313],"tr",{},[280,281,282,286],"th",{},[283,284,285],"strong",{},"ASCII","值",[280,288,289],{},[283,290,291],{},"控制字符",[280,293,294,286],{},[283,295,285],{},[280,297,298],{},[283,299,300],{},"字符",[280,302,303,286],{},[283,304,285],{},[280,306,307],{},[283,308,300],{},[280,310,311,286],{},[283,312,285],{},[280,314,315],{},[283,316,300],{},[318,319,320,347,373,398,423,449,474,499,525,550,576,602,628,653,679,705,731,755,780,805,830,855,880,905,930,955,980,1006,1031,1056,1081,1107],"tbody",{},[277,321,322,326,329,332,335,338,341,344],{},[323,324,325],"td",{},"0",[323,327,328],{},"NUT",[323,330,331],{},"32",[323,333,334],{},"(space)",[323,336,337],{},"64",[323,339,340],{},"@",[323,342,343],{},"96",[323,345,346],{},"、",[277,348,349,352,355,358,361,364,367,370],{},[323,350,351],{},"1",[323,353,354],{},"SOH",[323,356,357],{},"33",[323,359,360],{},"!",[323,362,363],{},"65",[323,365,366],{},"A",[323,368,369],{},"97",[323,371,372],{},"a",[277,374,375,377,380,383,386,389,392,395],{},[323,376,211],{},[323,378,379],{},"STX",[323,381,382],{},"34",[323,384,385],{},"\"",[323,387,388],{},"66",[323,390,391],{},"B",[323,393,394],{},"98",[323,396,397],{},"b",[277,399,400,402,405,408,411,414,417,420],{},[323,401,205],{},[323,403,404],{},"ETX",[323,406,407],{},"35",[323,409,410],{},"#",[323,412,413],{},"67",[323,415,416],{},"C",[323,418,419],{},"99",[323,421,422],{},"c",[277,424,425,428,431,434,437,440,443,446],{},[323,426,427],{},"4",[323,429,430],{},"EOT",[323,432,433],{},"36",[323,435,436],{},"$",[323,438,439],{},"68",[323,441,442],{},"D",[323,444,445],{},"100",[323,447,448],{},"d",[277,450,451,454,457,460,463,466,469,472],{},[323,452,453],{},"5",[323,455,456],{},"ENQ",[323,458,459],{},"37",[323,461,462],{},"%",[323,464,465],{},"69",[323,467,468],{},"E",[323,470,471],{},"101",[323,473,208],{},[277,475,476,479,482,485,488,491,494,497],{},[323,477,478],{},"6",[323,480,481],{},"ACK",[323,483,484],{},"38",[323,486,487],{},"&",[323,489,490],{},"70",[323,492,493],{},"F",[323,495,496],{},"102",[323,498,186],{},[277,500,501,504,507,510,513,516,519,522],{},[323,502,503],{},"7",[323,505,506],{},"BEL",[323,508,509],{},"39",[323,511,512],{},",",[323,514,515],{},"71",[323,517,518],{},"G",[323,520,521],{},"103",[323,523,524],{},"g",[277,526,527,530,533,536,538,541,544,547],{},[323,528,529],{},"8",[323,531,532],{},"BS",[323,534,535],{},"40",[323,537,134],{},[323,539,540],{},"72",[323,542,543],{},"H",[323,545,546],{},"104",[323,548,549],{},"h",[277,551,552,555,558,561,564,567,570,573],{},[323,553,554],{},"9",[323,556,557],{},"HT",[323,559,560],{},"41",[323,562,563],{},")",[323,565,566],{},"73",[323,568,569],{},"I",[323,571,572],{},"105",[323,574,575],{},"i",[277,577,578,581,584,587,590,593,596,599],{},[323,579,580],{},"10",[323,582,583],{},"LF",[323,585,586],{},"42",[323,588,589],{},"*",[323,591,592],{},"74",[323,594,595],{},"J",[323,597,598],{},"106",[323,600,601],{},"j",[277,603,604,607,610,613,616,619,622,625],{},[323,605,606],{},"11",[323,608,609],{},"VT",[323,611,612],{},"43",[323,614,615],{},"+",[323,617,618],{},"75",[323,620,621],{},"K",[323,623,624],{},"107",[323,626,627],{},"k",[277,629,630,633,636,639,641,644,647,650],{},[323,631,632],{},"12",[323,634,635],{},"FF",[323,637,638],{},"44",[323,640,512],{},[323,642,643],{},"76",[323,645,646],{},"L",[323,648,649],{},"108",[323,651,652],{},"l",[277,654,655,658,661,664,667,670,673,676],{},[323,656,657],{},"13",[323,659,660],{},"CR",[323,662,663],{},"45",[323,665,666],{},"-",[323,668,669],{},"77",[323,671,672],{},"M",[323,674,675],{},"109",[323,677,678],{},"m",[277,680,681,684,687,690,693,696,699,702],{},[323,682,683],{},"14",[323,685,686],{},"SO",[323,688,689],{},"46",[323,691,692],{},".",[323,694,695],{},"78",[323,697,698],{},"N",[323,700,701],{},"110",[323,703,704],{},"n",[277,706,707,710,713,716,719,722,725,728],{},[323,708,709],{},"15",[323,711,712],{},"SI",[323,714,715],{},"47",[323,717,718],{},"\u002F",[323,720,721],{},"79",[323,723,724],{},"O",[323,726,727],{},"111",[323,729,730],{},"o",[277,732,733,736,739,742,744,747,750,753],{},[323,734,735],{},"16",[323,737,738],{},"DLE",[323,740,741],{},"48",[323,743,325],{},[323,745,746],{},"80",[323,748,749],{},"P",[323,751,752],{},"112",[323,754,14],{},[277,756,757,760,763,766,768,771,774,777],{},[323,758,759],{},"17",[323,761,762],{},"DCI",[323,764,765],{},"49",[323,767,351],{},[323,769,770],{},"81",[323,772,773],{},"Q",[323,775,776],{},"113",[323,778,779],{},"q",[277,781,782,785,788,791,793,796,799,802],{},[323,783,784],{},"18",[323,786,787],{},"DC2",[323,789,790],{},"50",[323,792,211],{},[323,794,795],{},"82",[323,797,798],{},"R",[323,800,801],{},"114",[323,803,804],{},"r",[277,806,807,810,813,816,818,821,824,827],{},[323,808,809],{},"19",[323,811,812],{},"DC3",[323,814,815],{},"51",[323,817,205],{},[323,819,820],{},"83",[323,822,823],{},"S",[323,825,826],{},"115",[323,828,829],{},"s",[277,831,832,835,838,841,843,846,849,852],{},[323,833,834],{},"20",[323,836,837],{},"DC4",[323,839,840],{},"52",[323,842,427],{},[323,844,845],{},"84",[323,847,848],{},"T",[323,850,851],{},"116",[323,853,854],{},"t",[277,856,857,860,863,866,868,871,874,877],{},[323,858,859],{},"21",[323,861,862],{},"NAK",[323,864,865],{},"53",[323,867,453],{},[323,869,870],{},"85",[323,872,873],{},"U",[323,875,876],{},"117",[323,878,879],{},"u",[277,881,882,885,888,891,893,896,899,902],{},[323,883,884],{},"22",[323,886,887],{},"SYN",[323,889,890],{},"54",[323,892,478],{},[323,894,895],{},"86",[323,897,898],{},"V",[323,900,901],{},"118",[323,903,904],{},"v",[277,906,907,910,913,916,918,921,924,927],{},[323,908,909],{},"23",[323,911,912],{},"TB",[323,914,915],{},"55",[323,917,503],{},[323,919,920],{},"87",[323,922,923],{},"W",[323,925,926],{},"119",[323,928,929],{},"w",[277,931,932,935,938,941,943,946,949,952],{},[323,933,934],{},"24",[323,936,937],{},"CAN",[323,939,940],{},"56",[323,942,529],{},[323,944,945],{},"88",[323,947,948],{},"X",[323,950,951],{},"120",[323,953,954],{},"x",[277,956,957,960,963,966,968,971,974,977],{},[323,958,959],{},"25",[323,961,962],{},"EM",[323,964,965],{},"57",[323,967,554],{},[323,969,970],{},"89",[323,972,973],{},"Y",[323,975,976],{},"121",[323,978,979],{},"y",[277,981,982,985,988,991,994,997,1000,1003],{},[323,983,984],{},"26",[323,986,987],{},"SUB",[323,989,990],{},"58",[323,992,993],{},":",[323,995,996],{},"90",[323,998,999],{},"Z",[323,1001,1002],{},"122",[323,1004,1005],{},"z",[277,1007,1008,1011,1014,1017,1019,1022,1025,1028],{},[323,1009,1010],{},"27",[323,1012,1013],{},"ESC",[323,1015,1016],{},"59",[323,1018,189],{},[323,1020,1021],{},"91",[323,1023,1024],{},"[",[323,1026,1027],{},"123",[323,1029,1030],{},"{",[277,1032,1033,1036,1039,1042,1045,1048,1050,1053],{},[323,1034,1035],{},"28",[323,1037,1038],{},"FS",[323,1040,1041],{},"60",[323,1043,1044],{},"\u003C",[323,1046,1047],{},"92",[323,1049,718],{},[323,1051,1052],{},"124",[323,1054,1055],{},"|",[277,1057,1058,1061,1064,1067,1069,1072,1075,1078],{},[323,1059,1060],{},"29",[323,1062,1063],{},"GS",[323,1065,1066],{},"61",[323,1068,179],{},[323,1070,1071],{},"93",[323,1073,1074],{},"]",[323,1076,1077],{},"125",[323,1079,1080],{},"}",[277,1082,1083,1086,1089,1092,1095,1098,1101,1104],{},[323,1084,1085],{},"30",[323,1087,1088],{},"RS",[323,1090,1091],{},"62",[323,1093,1094],{},">",[323,1096,1097],{},"94",[323,1099,1100],{},"^",[323,1102,1103],{},"126",[323,1105,1106],{},"`",[277,1108,1109,1112,1115,1118,1121,1124,1127,1130],{},[323,1110,1111],{},"31",[323,1113,1114],{},"US",[323,1116,1117],{},"63",[323,1119,1120],{},"?",[323,1122,1123],{},"95",[323,1125,1126],{},"_",[323,1128,1129],{},"127",[323,1131,1132],{},"DEL",[14,1134,1135,1136,1139],{},"ASCII 码大致由以下",[283,1137,1138],{},"两部分组","成：",[1141,1142,1143,1150],"ul",{},[80,1144,1145,1146,1149],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[283,1147,1148],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[80,1151,1152,1153,1156],{},"ASCII 打印字符：数字 ",[283,1154,1155],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[94,1158,1160],{"id":1159},"_134转义字符","1.3.4转义字符",[114,1162,1164],{"className":116,"code":1163,"language":118,"meta":37,"style":37},"\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",[120,1165,1166,1171,1187,1202,1208,1222,1228],{"__ignoreMap":37},[123,1167,1168],{"class":125,"line":126},[123,1169,1170],{"class":192},"\u002F\u002F换行符\n",[123,1172,1173,1176,1179,1182,1184],{"class":125,"line":45},[123,1174,1175],{"class":133},"cout ",[123,1177,1178],{"class":129},"\u003C\u003C",[123,1180,1181],{"class":238},"\"hello world\u002Fn\"",[123,1183,189],{"class":133},[123,1185,1186],{"class":192}," \u002F\u002F就等同于如下：\n",[123,1188,1190,1192,1194,1197,1199],{"class":125,"line":1189},3,[123,1191,1175],{"class":133},[123,1193,1178],{"class":129},[123,1195,1196],{"class":238},"\"hello world\"",[123,1198,1178],{"class":129},[123,1200,1201],{"class":133},"endl;\n",[123,1203,1205],{"class":125,"line":1204},4,[123,1206,1207],{"class":192},"\u002F\u002F反斜杠\n",[123,1209,1211,1213,1215,1218,1220],{"class":125,"line":1210},5,[123,1212,1175],{"class":133},[123,1214,1178],{"class":129},[123,1216,1217],{"class":238},"\"\u002F\u002F\"",[123,1219,1178],{"class":129},[123,1221,1201],{"class":133},[123,1223,1225],{"class":125,"line":1224},6,[123,1226,1227],{"class":192},"\u002F\u002F水平制表符\n",[123,1229,1231,1233,1235,1238,1241,1244,1246,1249],{"class":125,"line":1230},7,[123,1232,1175],{"class":133},[123,1234,1178],{"class":129},[123,1236,1237],{"class":238},"\"aaaa",[123,1239,1240],{"class":182},"\\t",[123,1242,1243],{"class":238},"helloworld\"",[123,1245,1178],{"class":129},[123,1247,1248],{"class":133},"endl;",[123,1250,1251],{"class":192}," \u002F\u002F输出窗口时有对齐效果\n",[94,1253,1255],{"id":1254},"_135字符串型","1.3.5字符串型",[14,1257,1258,1259,1261],{},"char 变量名",[123,1260],{},"=\"字符串值\"",[114,1263,1265],{"className":116,"code":1264,"language":118,"meta":37,"style":37},"\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",[120,1266,1267,1272,1277,1282,1287,1301,1314,1319,1325,1337],{"__ignoreMap":37},[123,1268,1269],{"class":125,"line":126},[123,1270,1271],{"class":192},"\u002F\u002Fc风格字符串\n",[123,1273,1274],{"class":125,"line":45},[123,1275,1276],{"class":192},"\u002F\u002F注意事项：\n",[123,1278,1279],{"class":125,"line":1189},[123,1280,1281],{"class":192},"\u002F\u002F1.char字符串名[]\n",[123,1283,1284],{"class":125,"line":1204},[123,1285,1286],{"class":192},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[123,1288,1289,1291,1294,1296,1298],{"class":125,"line":1210},[123,1290,230],{"class":129},[123,1292,1293],{"class":133}," str[]",[123,1295,179],{"class":129},[123,1297,1196],{"class":238},[123,1299,1300],{"class":133},";\n",[123,1302,1303,1305,1307,1310,1312],{"class":125,"line":1224},[123,1304,1175],{"class":133},[123,1306,1178],{"class":129},[123,1308,1309],{"class":133},"str",[123,1311,1178],{"class":129},[123,1313,1201],{"class":133},[123,1315,1316],{"class":125,"line":1230},[123,1317,1318],{"class":192},"\u002F\u002Fc++风格字符串\n",[123,1320,1322],{"class":125,"line":1321},8,[123,1323,1324],{"class":192},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[123,1326,1328,1331,1333,1335],{"class":125,"line":1327},9,[123,1329,1330],{"class":133},"string str2",[123,1332,179],{"class":129},[123,1334,1196],{"class":238},[123,1336,1300],{"class":133},[123,1338,1340,1342,1344,1347,1349],{"class":125,"line":1339},10,[123,1341,1175],{"class":133},[123,1343,1178],{"class":129},[123,1345,1346],{"class":133},"str2",[123,1348,1178],{"class":129},[123,1350,1201],{"class":133},[94,1352,1354],{"id":1353},"_136布尔类型bool","1.3.6布尔类型bool",[114,1356,1358],{"className":116,"code":1357,"language":118,"meta":37,"style":37},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[120,1359,1360,1375],{"__ignoreMap":37},[123,1361,1362,1365,1368,1370,1373],{"class":125,"line":126},[123,1363,1364],{"class":129},"bool",[123,1366,1367],{"class":133}," flag",[123,1369,179],{"class":129},[123,1371,1372],{"class":182},"true",[123,1374,1300],{"class":133},[123,1376,1377,1380,1383,1386,1388,1390],{"class":125,"line":45},[123,1378,1379],{"class":133},"cout",[123,1381,1382],{"class":129},"\u003C\u003Csizeof",[123,1384,1385],{"class":133},"(flag)",[123,1387,1178],{"class":129},[123,1389,1248],{"class":133},[123,1391,1392],{"class":192}," \u002F\u002F查看布尔占内存空间\n",[65,1394,1396],{"id":1395},"_14键盘输入cin","1.4键盘输入cin",[114,1398,1400],{"className":116,"code":1399,"language":118,"meta":37,"style":37},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[120,1401,1402,1415,1432,1443],{"__ignoreMap":37},[123,1403,1404,1406,1409,1411,1413],{"class":125,"line":126},[123,1405,137],{"class":129},[123,1407,1408],{"class":133}," a",[123,1410,179],{"class":129},[123,1412,325],{"class":182},[123,1414,1300],{"class":133},[123,1416,1417,1419,1421,1424,1426,1428,1430],{"class":125,"line":45},[123,1418,1379],{"class":133},[123,1420,1178],{"class":129},[123,1422,1423],{"class":238},"\"请给整型变量a赋值\"",[123,1425,1178],{"class":129},[123,1427,372],{"class":133},[123,1429,1178],{"class":129},[123,1431,1201],{"class":133},[123,1433,1434,1437,1440],{"class":125,"line":1189},[123,1435,1436],{"class":133},"cin ",[123,1438,1439],{"class":129},">>",[123,1441,1442],{"class":133}," a;\n",[123,1444,1445,1447,1449,1452,1455,1457,1459],{"class":125,"line":1204},[123,1446,1175],{"class":133},[123,1448,1178],{"class":129},[123,1450,1451],{"class":238}," \"整型变量a=\"",[123,1453,1454],{"class":129}," \u003C\u003C",[123,1456,372],{"class":133},[123,1458,1178],{"class":129},[123,1460,1201],{"class":133},[65,1462,1464],{"id":1463},"_15运算符","1.5运算符",[94,1466,1468],{"id":1467},"_151算术运算符","1.5.1算术运算符",[14,1470,1471,1474],{},[35,1472],{"alt":37,"src":1473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[77,1476,1477,1480,1483],{},[80,1478,1479],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[80,1481,1482],{},"两个小数不可以做取模运算",[80,1484,1485],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[94,1487,1489],{"id":1488},"_152赋值运算符","1.5.2赋值运算符",[14,1491,1492],{},[35,1493],{"alt":37,"src":1494},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[94,1496,1498],{"id":1497},"_153比较运算符","1.5.3比较运算符",[14,1500,1501],{},[35,1502],{"alt":37,"src":1503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[94,1505,1507],{"id":1506},"_154逻辑运算符","1.5.4逻辑运算符",[14,1509,1510],{},[35,1511],{"alt":37,"src":1512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[65,1514,1516],{"id":1515},"_16程序流程结构","1.6程序流程结构",[94,1518,1520],{"id":1519},"_161选择结构","1.6.1选择结构",[77,1522,1523],{},[80,1524,1525],{},"if语句\n单行、多行、多条件if语句",[114,1527,1529],{"className":116,"code":1528,"language":118,"meta":37,"style":37},"\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",[120,1530,1531,1536,1551,1556,1570,1575,1580,1589,1602,1606,1619,1624,1630,1635,1649,1654,1660,1681,1686,1700,1705,1734,1739,1756,1761,1766,1771,1785,1790],{"__ignoreMap":37},[123,1532,1533],{"class":125,"line":126},[123,1534,1535],{"class":192},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[123,1537,1538,1541,1544,1546,1549],{"class":125,"line":45},[123,1539,1540],{"class":129},"if",[123,1542,1543],{"class":133},"(score",[123,1545,1094],{"class":129},[123,1547,1548],{"class":182},"600",[123,1550,140],{"class":133},[123,1552,1553],{"class":125,"line":1189},[123,1554,1555],{"class":133},"{\n",[123,1557,1558,1561,1563,1566,1568],{"class":125,"line":1204},[123,1559,1560],{"class":133},"    cout",[123,1562,1178],{"class":129},[123,1564,1565],{"class":238},"'这是单行if语句'",[123,1567,1178],{"class":129},[123,1569,1201],{"class":133},[123,1571,1572],{"class":125,"line":1210},[123,1573,1574],{"class":133},"}\n",[123,1576,1577],{"class":125,"line":1224},[123,1578,1579],{"class":192},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[123,1581,1582,1584,1586],{"class":125,"line":1230},[123,1583,1436],{"class":133},[123,1585,1439],{"class":129},[123,1587,1588],{"class":133}," score\n",[123,1590,1591,1593,1595,1598,1600],{"class":125,"line":1321},[123,1592,1540],{"class":129},[123,1594,1543],{"class":133},[123,1596,1597],{"class":129},"\u003C=",[123,1599,1548],{"class":182},[123,1601,140],{"class":133},[123,1603,1604],{"class":125,"line":1327},[123,1605,1555],{"class":133},[123,1607,1608,1610,1612,1615,1617],{"class":125,"line":1339},[123,1609,1560],{"class":133},[123,1611,1439],{"class":129},[123,1613,1614],{"class":238},"\"小于等于600\"",[123,1616,1178],{"class":129},[123,1618,1201],{"class":133},[123,1620,1622],{"class":125,"line":1621},11,[123,1623,1574],{"class":133},[123,1625,1627],{"class":125,"line":1626},12,[123,1628,1629],{"class":129},"else\n",[123,1631,1633],{"class":125,"line":1632},13,[123,1634,1555],{"class":133},[123,1636,1638,1640,1642,1645,1647],{"class":125,"line":1637},14,[123,1639,1560],{"class":133},[123,1641,1439],{"class":129},[123,1643,1644],{"class":238},"\"大于600\"",[123,1646,1439],{"class":129},[123,1648,1201],{"class":133},[123,1650,1652],{"class":125,"line":1651},15,[123,1653,1574],{"class":133},[123,1655,1657],{"class":125,"line":1656},16,[123,1658,1659],{"class":192},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[123,1661,1663,1665,1668,1670,1672,1675,1677,1679],{"class":125,"line":1662},17,[123,1664,1540],{"class":129},[123,1666,1667],{"class":133}," (",[123,1669,325],{"class":182},[123,1671,1044],{"class":129},[123,1673,1674],{"class":133},"num",[123,1676,1044],{"class":129},[123,1678,445],{"class":182},[123,1680,140],{"class":133},[123,1682,1684],{"class":125,"line":1683},18,[123,1685,1555],{"class":133},[123,1687,1689,1691,1693,1696,1698],{"class":125,"line":1688},19,[123,1690,1560],{"class":133},[123,1692,1178],{"class":129},[123,1694,1695],{"class":238},"\"小于100\"",[123,1697,1178],{"class":129},[123,1699,1201],{"class":133},[123,1701,1703],{"class":125,"line":1702},20,[123,1704,1574],{"class":133},[123,1706,1708,1711,1714,1717,1720,1722,1725,1727,1729,1732],{"class":125,"line":1707},21,[123,1709,1710],{"class":129},"else",[123,1712,1713],{"class":129}," if",[123,1715,1716],{"class":133}," (nmu",[123,1718,1719],{"class":129},">=",[123,1721,445],{"class":182},[123,1723,1724],{"class":129},"&&",[123,1726,1674],{"class":133},[123,1728,1044],{"class":129},[123,1730,1731],{"class":182},"200",[123,1733,140],{"class":133},[123,1735,1737],{"class":125,"line":1736},22,[123,1738,1555],{"class":133},[123,1740,1742,1744,1746,1749,1751,1753],{"class":125,"line":1741},23,[123,1743,1560],{"class":133},[123,1745,1178],{"class":129},[123,1747,1748],{"class":238},"\"不小于100且小于200\"",[123,1750,1178],{"class":129},[123,1752,1248],{"class":133},[123,1754,1755],{"class":192}," \u002F\u002F可以无限else if,python中是elif：\n",[123,1757,1759],{"class":125,"line":1758},24,[123,1760,1574],{"class":133},[123,1762,1764],{"class":125,"line":1763},25,[123,1765,1629],{"class":129},[123,1767,1769],{"class":125,"line":1768},26,[123,1770,1555],{"class":133},[123,1772,1774,1776,1778,1781,1783],{"class":125,"line":1773},27,[123,1775,1560],{"class":133},[123,1777,1178],{"class":129},[123,1779,1780],{"class":238},"\"不小于200\"",[123,1782,1178],{"class":129},[123,1784,1201],{"class":133},[123,1786,1788],{"class":125,"line":1787},28,[123,1789,1574],{"class":133},[123,1791,1793],{"class":125,"line":1792},29,[123,1794,1795],{"class":192},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[77,1797,1798],{"start":45},[80,1799,1800],{},"三目运算符",[114,1802,1804],{"className":116,"code":1803,"language":118,"meta":37,"style":37},"\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",[120,1805,1806,1811,1816,1842,1864,1881,1886,1909,1924],{"__ignoreMap":37},[123,1807,1808],{"class":125,"line":126},[123,1809,1810],{"class":192},"\u002F\u002F创建三个变量a,b,c\n",[123,1812,1813],{"class":125,"line":45},[123,1814,1815],{"class":192},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[123,1817,1818,1820,1822,1824,1826,1829,1831,1833,1836,1838,1840],{"class":125,"line":1189},[123,1819,137],{"class":129},[123,1821,1408],{"class":133},[123,1823,179],{"class":129},[123,1825,834],{"class":182},[123,1827,1828],{"class":133},",b",[123,1830,179],{"class":129},[123,1832,580],{"class":182},[123,1834,1835],{"class":133},",c",[123,1837,179],{"class":129},[123,1839,325],{"class":182},[123,1841,1300],{"class":133},[123,1843,1844,1846,1848,1851,1853,1855,1857,1859,1861],{"class":125,"line":1204},[123,1845,422],{"class":133},[123,1847,179],{"class":129},[123,1849,1850],{"class":133},"(a",[123,1852,1094],{"class":129},[123,1854,397],{"class":133},[123,1856,1120],{"class":129},[123,1858,372],{"class":133},[123,1860,993],{"class":129},[123,1862,1863],{"class":133},"b)\n",[123,1865,1866,1868,1870,1873,1875,1877,1879],{"class":125,"line":1210},[123,1867,1379],{"class":133},[123,1869,1178],{"class":129},[123,1871,1872],{"class":238},"\"c=\"",[123,1874,1178],{"class":129},[123,1876,422],{"class":133},[123,1878,1178],{"class":129},[123,1880,1201],{"class":133},[123,1882,1883],{"class":125,"line":1224},[123,1884,1885],{"class":192},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[123,1887,1888,1890,1892,1894,1896,1898,1900,1903,1905,1907],{"class":125,"line":1230},[123,1889,1850],{"class":133},[123,1891,1094],{"class":129},[123,1893,397],{"class":133},[123,1895,1120],{"class":129},[123,1897,372],{"class":133},[123,1899,993],{"class":129},[123,1901,1902],{"class":133},"b)",[123,1904,179],{"class":129},[123,1906,445],{"class":182},[123,1908,1300],{"class":133},[123,1910,1911,1913,1915,1917,1919,1921],{"class":125,"line":1321},[123,1912,1379],{"class":133},[123,1914,1178],{"class":129},[123,1916,372],{"class":133},[123,1918,1178],{"class":129},[123,1920,1248],{"class":133},[123,1922,1923],{"class":192}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[123,1925,1926,1928,1930,1932,1934,1936],{"class":125,"line":1327},[123,1927,1379],{"class":133},[123,1929,1178],{"class":129},[123,1931,397],{"class":133},[123,1933,1178],{"class":129},[123,1935,1248],{"class":133},[123,1937,1938],{"class":192}," \u002F\u002F10   a>b,b还是原值\n",[77,1940,1941],{"start":1189},[80,1942,1943],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[114,1945,1947],{"className":116,"code":1946,"language":118,"meta":37,"style":37},"\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",[120,1948,1949,1954,1962,1976,1986,1990,2004,2017,2027,2035,2040,2065,2086,2108,2129,2151,2172,2192,2197],{"__ignoreMap":37},[123,1950,1951],{"class":125,"line":126},[123,1952,1953],{"class":192},"\u002F\u002F案例-电影打分\n",[123,1955,1956,1959],{"class":125,"line":45},[123,1957,1958],{"class":129},"#include",[123,1960,1961],{"class":238},"\u003Ciostream>\n",[123,1963,1964,1967,1970,1974],{"class":125,"line":1189},[123,1965,1966],{"class":129},"using",[123,1968,1969],{"class":129}," namespace",[123,1971,1973],{"class":1972},"sScJk"," std",[123,1975,1300],{"class":133},[123,1977,1978,1980,1983],{"class":125,"line":1204},[123,1979,137],{"class":129},[123,1981,1982],{"class":1972}," main",[123,1984,1985],{"class":133},"()\n",[123,1987,1988],{"class":125,"line":1210},[123,1989,1555],{"class":133},[123,1991,1992,1995,1998,2000,2002],{"class":125,"line":1224},[123,1993,1994],{"class":129},"    int",[123,1996,1997],{"class":133}," score",[123,1999,179],{"class":129},[123,2001,325],{"class":182},[123,2003,1300],{"class":133},[123,2005,2006,2008,2010,2013,2015],{"class":125,"line":1230},[123,2007,1560],{"class":133},[123,2009,1178],{"class":129},[123,2011,2012],{"class":238},"\"电影打分：\"",[123,2014,1178],{"class":129},[123,2016,1201],{"class":133},[123,2018,2019,2022,2024],{"class":125,"line":1321},[123,2020,2021],{"class":133},"    cin",[123,2023,1439],{"class":129},[123,2025,2026],{"class":133},"score;\n",[123,2028,2029,2032],{"class":125,"line":1327},[123,2030,2031],{"class":129},"    switch",[123,2033,2034],{"class":133},"(score)\n",[123,2036,2037],{"class":125,"line":1339},[123,2038,2039],{"class":133},"    {\n",[123,2041,2042,2045,2048,2051,2053,2056,2058,2060,2063],{"class":125,"line":1621},[123,2043,2044],{"class":129},"        case",[123,2046,2047],{"class":182}," 10",[123,2049,2050],{"class":133},":cout",[123,2052,1178],{"class":129},[123,2054,2055],{"class":238},"\"经典\"",[123,2057,1178],{"class":129},[123,2059,1248],{"class":133},[123,2061,2062],{"class":129},"break",[123,2064,1300],{"class":133},[123,2066,2067,2069,2072,2074,2076,2078,2080,2082,2084],{"class":125,"line":1626},[123,2068,2044],{"class":129},[123,2070,2071],{"class":182}," 9",[123,2073,2050],{"class":133},[123,2075,1178],{"class":129},[123,2077,2055],{"class":238},[123,2079,1178],{"class":129},[123,2081,1248],{"class":133},[123,2083,2062],{"class":129},[123,2085,1300],{"class":133},[123,2087,2088,2090,2093,2095,2097,2100,2102,2104,2106],{"class":125,"line":1632},[123,2089,2044],{"class":129},[123,2091,2092],{"class":182}," 8",[123,2094,2050],{"class":133},[123,2096,1178],{"class":129},[123,2098,2099],{"class":238},"\"非常好\"",[123,2101,1178],{"class":129},[123,2103,1248],{"class":133},[123,2105,2062],{"class":129},[123,2107,1300],{"class":133},[123,2109,2110,2112,2115,2117,2119,2121,2123,2125,2127],{"class":125,"line":1637},[123,2111,2044],{"class":129},[123,2113,2114],{"class":182}," 7",[123,2116,2050],{"class":133},[123,2118,1178],{"class":129},[123,2120,2099],{"class":238},[123,2122,1178],{"class":129},[123,2124,1248],{"class":133},[123,2126,2062],{"class":129},[123,2128,1300],{"class":133},[123,2130,2131,2133,2136,2138,2140,2143,2145,2147,2149],{"class":125,"line":1651},[123,2132,2044],{"class":129},[123,2134,2135],{"class":182}," 6",[123,2137,2050],{"class":133},[123,2139,1178],{"class":129},[123,2141,2142],{"class":238},"\"一般\"",[123,2144,1178],{"class":129},[123,2146,1248],{"class":133},[123,2148,2062],{"class":129},[123,2150,1300],{"class":133},[123,2152,2153,2155,2158,2160,2162,2164,2166,2168,2170],{"class":125,"line":1656},[123,2154,2044],{"class":129},[123,2156,2157],{"class":182}," 5",[123,2159,2050],{"class":133},[123,2161,1178],{"class":129},[123,2163,2142],{"class":238},[123,2165,1178],{"class":129},[123,2167,1248],{"class":133},[123,2169,2062],{"class":129},[123,2171,1300],{"class":133},[123,2173,2174,2177,2179,2181,2184,2186,2188,2190],{"class":125,"line":1662},[123,2175,2176],{"class":129},"        default",[123,2178,2050],{"class":133},[123,2180,1178],{"class":129},[123,2182,2183],{"class":238},"\"烂片\"",[123,2185,1178],{"class":129},[123,2187,1248],{"class":133},[123,2189,2062],{"class":129},[123,2191,1300],{"class":133},[123,2193,2194],{"class":125,"line":1683},[123,2195,2196],{"class":133},"    }\n",[123,2198,2199],{"class":125,"line":1688},[123,2200,1574],{"class":133},[14,2202,2203],{},"if和switch区别：",[1141,2205,2206,2209],{},[80,2207,2208],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[80,2210,2211],{},"switch优点：结构清晰，执行效率高",[94,2213,2215],{"id":2214},"_162循环结构","1.6.2循环结构",[77,2217,2218],{},[80,2219,2220],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[114,2222,2224],{"className":116,"code":2223,"language":118,"meta":37,"style":37},"\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",[120,2225,2226,2231,2239,2243,2256,2270,2274,2294,2304,2308,2320],{"__ignoreMap":37},[123,2227,2228],{"class":125,"line":126},[123,2229,2230],{"class":192},"\u002F\u002F打印0-9数字\n",[123,2232,2233,2235,2237],{"class":125,"line":45},[123,2234,137],{"class":129},[123,2236,1982],{"class":1972},[123,2238,1985],{"class":133},[123,2240,2241],{"class":125,"line":1189},[123,2242,1555],{"class":133},[123,2244,2245,2247,2250,2252,2254],{"class":125,"line":1204},[123,2246,1994],{"class":129},[123,2248,2249],{"class":133}," num",[123,2251,179],{"class":129},[123,2253,325],{"class":182},[123,2255,1300],{"class":133},[123,2257,2258,2261,2264,2266,2268],{"class":125,"line":1210},[123,2259,2260],{"class":129},"    while",[123,2262,2263],{"class":133},"(num",[123,2265,1044],{"class":129},[123,2267,580],{"class":182},[123,2269,140],{"class":133},[123,2271,2272],{"class":125,"line":1224},[123,2273,2039],{"class":133},[123,2275,2276,2279,2282,2284,2286,2288,2291],{"class":125,"line":1230},[123,2277,2278],{"class":1972},"       std",[123,2280,2281],{"class":133},"::cout",[123,2283,1178],{"class":129},[123,2285,1674],{"class":133},[123,2287,1178],{"class":129},[123,2289,2290],{"class":1972},"std",[123,2292,2293],{"class":133},"::endl;\n",[123,2295,2296,2299,2302],{"class":125,"line":1321},[123,2297,2298],{"class":133},"        num",[123,2300,2301],{"class":129},"++",[123,2303,1300],{"class":133},[123,2305,2306],{"class":125,"line":1327},[123,2307,2196],{"class":133},[123,2309,2310,2313,2315,2318],{"class":125,"line":1339},[123,2311,2312],{"class":1972},"    system",[123,2314,134],{"class":133},[123,2316,2317],{"class":238},"\"pause\"",[123,2319,140],{"class":133},[123,2321,2322],{"class":125,"line":1621},[123,2323,1574],{"class":133},[14,2325,2326],{},"注意：写好循环条件，避免死循环情况",[114,2328,2330],{"className":116,"code":2329,"language":118,"meta":37,"style":37},"\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",[120,2331,2332,2337,2344,2351,2361,2369,2373,2378,2405,2410,2415,2423,2450,2455,2460,2473,2483,2487,2497,2502,2515,2520,2534,2539,2554,2558,2571,2575,2580,2584,2598,2606,2611,2617,2623,2628],{"__ignoreMap":37},[123,2333,2334],{"class":125,"line":126},[123,2335,2336],{"class":192},"\u002F\u002F循环结构-猜数字\n",[123,2338,2339,2341],{"class":125,"line":45},[123,2340,1958],{"class":129},[123,2342,2343],{"class":238}," \u003Ciostream>\n",[123,2345,2346,2348],{"class":125,"line":1189},[123,2347,1958],{"class":129},[123,2349,2350],{"class":238}," \u003Cctime>\n",[123,2352,2353,2355,2357,2359],{"class":125,"line":1204},[123,2354,1966],{"class":129},[123,2356,1969],{"class":129},[123,2358,1973],{"class":1972},[123,2360,1300],{"class":133},[123,2362,2363,2365,2367],{"class":125,"line":1210},[123,2364,137],{"class":129},[123,2366,1982],{"class":1972},[123,2368,1985],{"class":133},[123,2370,2371],{"class":125,"line":1224},[123,2372,1555],{"class":133},[123,2374,2375],{"class":125,"line":1230},[123,2376,2377],{"class":192},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[123,2379,2380,2383,2386,2389,2392,2394,2397,2399,2402],{"class":125,"line":1321},[123,2381,2382],{"class":1972},"    srand",[123,2384,2385],{"class":133},"((",[123,2387,2388],{"class":129},"unsigned",[123,2390,2391],{"class":129}," int",[123,2393,563],{"class":133},[123,2395,2396],{"class":1972},"time",[123,2398,134],{"class":133},[123,2400,2401],{"class":182},"NULL",[123,2403,2404],{"class":133},"));\n",[123,2406,2407],{"class":125,"line":1327},[123,2408,2409],{"emptyLinePlaceholder":50},"\n",[123,2411,2412],{"class":125,"line":1339},[123,2413,2414],{"class":192},"    \u002F\u002F1.系统生成随机数\n",[123,2416,2417,2420],{"class":125,"line":1621},[123,2418,2419],{"class":192},"    \u002F\u002Frand()%100",[123,2421,2422],{"class":192}," \u002F\u002F生成0-99的随机数\n",[123,2424,2425,2427,2429,2431,2434,2437,2439,2441,2443,2445,2447],{"class":125,"line":1626},[123,2426,1994],{"class":129},[123,2428,2249],{"class":133},[123,2430,179],{"class":129},[123,2432,2433],{"class":1972},"rand",[123,2435,2436],{"class":133},"()",[123,2438,462],{"class":129},[123,2440,445],{"class":182},[123,2442,615],{"class":129},[123,2444,351],{"class":182},[123,2446,189],{"class":133},[123,2448,2449],{"class":192}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[123,2451,2452],{"class":125,"line":1632},[123,2453,2454],{"class":192},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[123,2456,2457],{"class":125,"line":1637},[123,2458,2459],{"class":192},"    \u002F\u002F2.玩家猜测\n",[123,2461,2462,2464,2467,2469,2471],{"class":125,"line":1651},[123,2463,1994],{"class":129},[123,2465,2466],{"class":133}," val",[123,2468,179],{"class":129},[123,2470,325],{"class":182},[123,2472,1300],{"class":133},[123,2474,2475,2477,2479,2481],{"class":125,"line":1656},[123,2476,2260],{"class":129},[123,2478,1667],{"class":133},[123,2480,351],{"class":182},[123,2482,140],{"class":133},[123,2484,2485],{"class":125,"line":1662},[123,2486,2039],{"class":133},[123,2488,2489,2492,2494],{"class":125,"line":1683},[123,2490,2491],{"class":133},"        cin",[123,2493,1439],{"class":129},[123,2495,2496],{"class":133},"val;\n",[123,2498,2499],{"class":125,"line":1688},[123,2500,2501],{"class":192},"        \u002F\u002F3.判断玩家猜测\n",[123,2503,2504,2507,2510,2512],{"class":125,"line":1702},[123,2505,2506],{"class":129},"        if",[123,2508,2509],{"class":133},"(val",[123,2511,1044],{"class":129},[123,2513,2514],{"class":133},"num) \n",[123,2516,2517],{"class":125,"line":1707},[123,2518,2519],{"class":133},"        {\n",[123,2521,2522,2525,2527,2530,2532],{"class":125,"line":1736},[123,2523,2524],{"class":133},"            cout",[123,2526,1178],{"class":129},[123,2528,2529],{"class":238},"\"猜小了！\"",[123,2531,1178],{"class":129},[123,2533,1201],{"class":133},[123,2535,2536],{"class":125,"line":1741},[123,2537,2538],{"class":133},"        }\n",[123,2540,2541,2544,2546,2549,2551],{"class":125,"line":1758},[123,2542,2543],{"class":129},"        else",[123,2545,1713],{"class":129},[123,2547,2548],{"class":133}," (val",[123,2550,1094],{"class":129},[123,2552,2553],{"class":133},"num)\n",[123,2555,2556],{"class":125,"line":1763},[123,2557,2519],{"class":133},[123,2559,2560,2562,2564,2567,2569],{"class":125,"line":1768},[123,2561,2524],{"class":133},[123,2563,1178],{"class":129},[123,2565,2566],{"class":238},"\"猜大了！\"",[123,2568,1178],{"class":129},[123,2570,1201],{"class":133},[123,2572,2573],{"class":125,"line":1773},[123,2574,2538],{"class":133},[123,2576,2577],{"class":125,"line":1787},[123,2578,2579],{"class":129},"        else\n",[123,2581,2582],{"class":125,"line":1792},[123,2583,2519],{"class":133},[123,2585,2587,2589,2591,2594,2596],{"class":125,"line":2586},30,[123,2588,2524],{"class":133},[123,2590,1178],{"class":129},[123,2592,2593],{"class":238},"\"猜对了！\"",[123,2595,1178],{"class":129},[123,2597,1201],{"class":133},[123,2599,2601,2604],{"class":125,"line":2600},31,[123,2602,2603],{"class":129},"            break",[123,2605,1300],{"class":133},[123,2607,2609],{"class":125,"line":2608},32,[123,2610,2538],{"class":133},[123,2612,2614],{"class":125,"line":2613},33,[123,2615,2616],{"class":192},"        \u002F\u002F猜对 退出游戏\n",[123,2618,2620],{"class":125,"line":2619},34,[123,2621,2622],{"class":192},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[123,2624,2626],{"class":125,"line":2625},35,[123,2627,2196],{"class":133},[123,2629,2631],{"class":125,"line":2630},36,[123,2632,1574],{"class":133},[77,2634,2635],{"start":45},[80,2636,2637,2638,2641],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[283,2639,2640],{},"do...while会先执行一次循环语句","，在判断循环语句",[114,2643,2645],{"className":116,"code":2644,"language":118,"meta":37,"style":37},"\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",[120,2646,2647,2652,2660,2664,2676,2684,2688,2705,2712,2716,2729,2739],{"__ignoreMap":37},[123,2648,2649],{"class":125,"line":126},[123,2650,2651],{"class":192},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[123,2653,2654,2656,2658],{"class":125,"line":45},[123,2655,137],{"class":129},[123,2657,1982],{"class":1972},[123,2659,1985],{"class":133},[123,2661,2662],{"class":125,"line":1189},[123,2663,1555],{"class":133},[123,2665,2666,2668,2670,2672,2674],{"class":125,"line":1204},[123,2667,1994],{"class":129},[123,2669,2249],{"class":133},[123,2671,179],{"class":129},[123,2673,325],{"class":182},[123,2675,1300],{"class":133},[123,2677,2678,2681],{"class":125,"line":1210},[123,2679,2680],{"class":129},"    do",[123,2682,2683],{"class":133}," \n",[123,2685,2686],{"class":125,"line":1224},[123,2687,2039],{"class":133},[123,2689,2690,2693,2695,2697,2699,2701,2703],{"class":125,"line":1230},[123,2691,2692],{"class":1972},"        std",[123,2694,2281],{"class":133},[123,2696,1178],{"class":129},[123,2698,1674],{"class":133},[123,2700,1178],{"class":129},[123,2702,2290],{"class":1972},[123,2704,2293],{"class":133},[123,2706,2707,2709],{"class":125,"line":1321},[123,2708,2298],{"class":133},[123,2710,2711],{"class":129},"++\n",[123,2713,2714],{"class":125,"line":1327},[123,2715,2196],{"class":133},[123,2717,2718,2720,2722,2724,2726],{"class":125,"line":1339},[123,2719,2260],{"class":129},[123,2721,2263],{"class":133},[123,2723,1044],{"class":129},[123,2725,580],{"class":182},[123,2727,2728],{"class":133},");\n",[123,2730,2731,2733,2735,2737],{"class":125,"line":1621},[123,2732,2312],{"class":1972},[123,2734,134],{"class":133},[123,2736,2317],{"class":238},[123,2738,2728],{"class":133},[123,2740,2741],{"class":125,"line":1626},[123,2742,1574],{"class":133},[14,2744,2745],{},"案例-水仙花数",[14,2747,2748],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,2750,2751],{},"例如：1^3+5^3+3^3=153",[14,2753,2754],{},"请用do...while语句，求出所有3位数的水仙花数",[114,2756,2758],{"className":116,"code":2757,"language":118,"meta":37,"style":37},"#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",[120,2759,2760,2766,2776,2784,2788,2793,2805,2811,2815,2820,2836,2852,2868,2883,2902,2917,2965,2969,2981,2985,2993,2997,3011],{"__ignoreMap":37},[123,2761,2762,2764],{"class":125,"line":126},[123,2763,1958],{"class":129},[123,2765,2343],{"class":238},[123,2767,2768,2770,2772,2774],{"class":125,"line":45},[123,2769,1966],{"class":129},[123,2771,1969],{"class":129},[123,2773,1973],{"class":1972},[123,2775,1300],{"class":133},[123,2777,2778,2780,2782],{"class":125,"line":1189},[123,2779,137],{"class":129},[123,2781,1982],{"class":1972},[123,2783,1985],{"class":133},[123,2785,2786],{"class":125,"line":1204},[123,2787,1555],{"class":133},[123,2789,2790],{"class":125,"line":1210},[123,2791,2792],{"class":192},"    \u002F\u002F1.先打印所有三位数字\n",[123,2794,2795,2797,2799,2801,2803],{"class":125,"line":1224},[123,2796,1994],{"class":129},[123,2798,2249],{"class":133},[123,2800,179],{"class":129},[123,2802,445],{"class":182},[123,2804,1300],{"class":133},[123,2806,2807,2809],{"class":125,"line":1230},[123,2808,2680],{"class":129},[123,2810,2683],{"class":133},[123,2812,2813],{"class":125,"line":1321},[123,2814,2039],{"class":133},[123,2816,2817],{"class":125,"line":1327},[123,2818,2819],{"class":192},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[123,2821,2822,2825,2827,2829,2831,2833],{"class":125,"line":1339},[123,2823,2824],{"class":129},"        int",[123,2826,1408],{"class":133},[123,2828,179],{"class":129},[123,2830,325],{"class":182},[123,2832,189],{"class":133},[123,2834,2835],{"class":192}," \u002F\u002F个位\n",[123,2837,2838,2840,2843,2845,2847,2849],{"class":125,"line":1621},[123,2839,2824],{"class":129},[123,2841,2842],{"class":133}," b",[123,2844,179],{"class":129},[123,2846,325],{"class":182},[123,2848,189],{"class":133},[123,2850,2851],{"class":192}," \u002F\u002F十位\n",[123,2853,2854,2856,2859,2861,2863,2865],{"class":125,"line":1626},[123,2855,2824],{"class":129},[123,2857,2858],{"class":133}," c",[123,2860,179],{"class":129},[123,2862,325],{"class":182},[123,2864,189],{"class":133},[123,2866,2867],{"class":192}," \u002F\u002F百位\n",[123,2869,2870,2873,2875,2877,2879,2881],{"class":125,"line":1632},[123,2871,2872],{"class":133},"        a",[123,2874,179],{"class":129},[123,2876,1674],{"class":133},[123,2878,462],{"class":129},[123,2880,580],{"class":182},[123,2882,1300],{"class":133},[123,2884,2885,2888,2890,2892,2894,2896,2898,2900],{"class":125,"line":1637},[123,2886,2887],{"class":133},"        b",[123,2889,179],{"class":129},[123,2891,1674],{"class":133},[123,2893,718],{"class":129},[123,2895,580],{"class":182},[123,2897,462],{"class":129},[123,2899,580],{"class":182},[123,2901,1300],{"class":133},[123,2903,2904,2907,2909,2911,2913,2915],{"class":125,"line":1651},[123,2905,2906],{"class":133},"        c",[123,2908,179],{"class":129},[123,2910,1674],{"class":133},[123,2912,718],{"class":129},[123,2914,445],{"class":182},[123,2916,1300],{"class":133},[123,2918,2919,2921,2923,2925,2927,2929,2931,2933,2935,2937,2939,2941,2943,2945,2947,2949,2951,2953,2956,2959,2962],{"class":125,"line":1656},[123,2920,2506],{"class":129},[123,2922,1850],{"class":133},[123,2924,589],{"class":129},[123,2926,372],{"class":133},[123,2928,589],{"class":129},[123,2930,372],{"class":133},[123,2932,615],{"class":129},[123,2934,397],{"class":133},[123,2936,589],{"class":129},[123,2938,397],{"class":133},[123,2940,589],{"class":129},[123,2942,397],{"class":133},[123,2944,615],{"class":129},[123,2946,422],{"class":133},[123,2948,589],{"class":129},[123,2950,422],{"class":133},[123,2952,589],{"class":129},[123,2954,2955],{"class":133},"c ",[123,2957,2958],{"class":129},"==",[123,2960,2961],{"class":133}," num)",[123,2963,2964],{"class":192}," \u002F\u002F如果是水仙花数，才打印\n",[123,2966,2967],{"class":125,"line":1662},[123,2968,2519],{"class":133},[123,2970,2971,2973,2975,2977,2979],{"class":125,"line":1683},[123,2972,2524],{"class":133},[123,2974,1178],{"class":129},[123,2976,1674],{"class":133},[123,2978,1178],{"class":129},[123,2980,1201],{"class":133},[123,2982,2983],{"class":125,"line":1688},[123,2984,2538],{"class":133},[123,2986,2987,2989,2991],{"class":125,"line":1702},[123,2988,2298],{"class":133},[123,2990,2301],{"class":129},[123,2992,1300],{"class":133},[123,2994,2995],{"class":125,"line":1707},[123,2996,2196],{"class":133},[123,2998,2999,3001,3004,3006,3009],{"class":125,"line":1736},[123,3000,2260],{"class":129},[123,3002,3003],{"class":133}," (num ",[123,3005,1044],{"class":129},[123,3007,3008],{"class":182}," 1000",[123,3010,2728],{"class":133},[123,3012,3013],{"class":125,"line":1741},[123,3014,1574],{"class":133},[77,3016,3017],{"start":1189},[80,3018,3019],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[114,3021,3023],{"className":116,"code":3022,"language":118,"meta":37,"style":37},"\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",[120,3024,3025,3030,3059,3063,3075,3079,3084,3095,3102,3106,3120,3124,3131,3135,3147,3156],{"__ignoreMap":37},[123,3026,3027],{"class":125,"line":126},[123,3028,3029],{"class":192},"\u002F\u002F从数字0-9打印\n",[123,3031,3032,3035,3037,3039,3042,3044,3046,3049,3051,3053,3055,3057],{"class":125,"line":45},[123,3033,3034],{"class":129},"for",[123,3036,134],{"class":133},[123,3038,137],{"class":129},[123,3040,3041],{"class":133}," i",[123,3043,179],{"class":129},[123,3045,325],{"class":182},[123,3047,3048],{"class":133},";i",[123,3050,1044],{"class":129},[123,3052,580],{"class":182},[123,3054,3048],{"class":133},[123,3056,2301],{"class":129},[123,3058,140],{"class":133},[123,3060,3061],{"class":125,"line":1189},[123,3062,1555],{"class":133},[123,3064,3065,3067,3069,3071,3073],{"class":125,"line":1204},[123,3066,1560],{"class":133},[123,3068,1178],{"class":129},[123,3070,575],{"class":133},[123,3072,1178],{"class":129},[123,3074,1201],{"class":133},[123,3076,3077],{"class":125,"line":1210},[123,3078,1574],{"class":133},[123,3080,3081],{"class":125,"line":1224},[123,3082,3083],{"class":192},"\u002F\u002F上式可以进行拆分\n",[123,3085,3086,3088,3090,3092],{"class":125,"line":1230},[123,3087,137],{"class":129},[123,3089,3041],{"class":133},[123,3091,179],{"class":129},[123,3093,3094],{"class":182},"0\n",[123,3096,3097,3099],{"class":125,"line":1321},[123,3098,3034],{"class":129},[123,3100,3101],{"class":133},"(;;;)\n",[123,3103,3104],{"class":125,"line":1327},[123,3105,1555],{"class":133},[123,3107,3108,3111,3114,3116,3118],{"class":125,"line":1339},[123,3109,3110],{"class":129},"    if",[123,3112,3113],{"class":133},"(i",[123,3115,1719],{"class":129},[123,3117,580],{"class":182},[123,3119,140],{"class":133},[123,3121,3122],{"class":125,"line":1621},[123,3123,2039],{"class":133},[123,3125,3126,3129],{"class":125,"line":1626},[123,3127,3128],{"class":129},"        break",[123,3130,1300],{"class":133},[123,3132,3133],{"class":125,"line":1632},[123,3134,2196],{"class":133},[123,3136,3137,3139,3141,3143,3145],{"class":125,"line":1637},[123,3138,1560],{"class":133},[123,3140,1178],{"class":129},[123,3142,575],{"class":133},[123,3144,1178],{"class":129},[123,3146,1201],{"class":133},[123,3148,3149,3152,3154],{"class":125,"line":1651},[123,3150,3151],{"class":133},"    i",[123,3153,2301],{"class":129},[123,3155,1300],{"class":133},[123,3157,3158],{"class":125,"line":1656},[123,3159,1574],{"class":133},[14,3161,3162],{},"小练习",[114,3164,3166],{"className":116,"code":3165,"language":118,"meta":37,"style":37},"#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",[120,3167,3168,3174,3184,3192,3196,3201,3206,3234,3238,3243,3248,3289,3293,3306,3310,3314,3318,3330,3334,3338],{"__ignoreMap":37},[123,3169,3170,3172],{"class":125,"line":126},[123,3171,1958],{"class":129},[123,3173,1961],{"class":238},[123,3175,3176,3178,3180,3182],{"class":125,"line":45},[123,3177,1966],{"class":129},[123,3179,1969],{"class":129},[123,3181,1973],{"class":1972},[123,3183,1300],{"class":133},[123,3185,3186,3188,3190],{"class":125,"line":1189},[123,3187,137],{"class":129},[123,3189,1982],{"class":1972},[123,3191,1985],{"class":133},[123,3193,3194],{"class":125,"line":1204},[123,3195,1555],{"class":133},[123,3197,3198],{"class":125,"line":1210},[123,3199,3200],{"class":192},"    \u002F\u002F敲桌子案例\n",[123,3202,3203],{"class":125,"line":1224},[123,3204,3205],{"class":192},"    \u002F\u002F1.先输出1-100的数字\n",[123,3207,3208,3211,3213,3215,3217,3219,3221,3224,3226,3228,3230,3232],{"class":125,"line":1230},[123,3209,3210],{"class":129},"    for",[123,3212,134],{"class":133},[123,3214,137],{"class":129},[123,3216,3041],{"class":133},[123,3218,179],{"class":129},[123,3220,351],{"class":182},[123,3222,3223],{"class":133},"; i",[123,3225,1597],{"class":129},[123,3227,445],{"class":182},[123,3229,3223],{"class":133},[123,3231,2301],{"class":129},[123,3233,140],{"class":133},[123,3235,3236],{"class":125,"line":1321},[123,3237,2039],{"class":133},[123,3239,3240],{"class":125,"line":1327},[123,3241,3242],{"class":192},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[123,3244,3245],{"class":125,"line":1339},[123,3246,3247],{"class":192},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[123,3249,3250,3252,3254,3256,3258,3260,3262,3265,3267,3269,3271,3273,3275,3277,3279,3281,3283,3285,3287],{"class":125,"line":1621},[123,3251,2506],{"class":129},[123,3253,3113],{"class":133},[123,3255,462],{"class":129},[123,3257,503],{"class":182},[123,3259,2958],{"class":129},[123,3261,325],{"class":182},[123,3263,3264],{"class":129}," ||",[123,3266,3041],{"class":133},[123,3268,462],{"class":129},[123,3270,580],{"class":182},[123,3272,2958],{"class":129},[123,3274,503],{"class":182},[123,3276,3264],{"class":129},[123,3278,3041],{"class":133},[123,3280,718],{"class":129},[123,3282,580],{"class":182},[123,3284,2958],{"class":129},[123,3286,503],{"class":182},[123,3288,140],{"class":133},[123,3290,3291],{"class":125,"line":1626},[123,3292,2519],{"class":133},[123,3294,3295,3297,3299,3302,3304],{"class":125,"line":1632},[123,3296,2524],{"class":133},[123,3298,1178],{"class":129},[123,3300,3301],{"class":238},"\"敲桌子\"",[123,3303,1178],{"class":129},[123,3305,1201],{"class":133},[123,3307,3308],{"class":125,"line":1637},[123,3309,2538],{"class":133},[123,3311,3312],{"class":125,"line":1651},[123,3313,2579],{"class":129},[123,3315,3316],{"class":125,"line":1656},[123,3317,2519],{"class":133},[123,3319,3320,3322,3324,3326,3328],{"class":125,"line":1662},[123,3321,2524],{"class":133},[123,3323,1178],{"class":129},[123,3325,575],{"class":133},[123,3327,1178],{"class":129},[123,3329,1201],{"class":133},[123,3331,3332],{"class":125,"line":1683},[123,3333,2538],{"class":133},[123,3335,3336],{"class":125,"line":1688},[123,3337,2196],{"class":133},[123,3339,3340],{"class":125,"line":1702},[123,3341,1574],{"class":133},[14,3343,3344],{},"嵌套实现星图",[114,3346,3348],{"className":116,"code":3347,"language":118,"meta":37,"style":37},"#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",[120,3349,3350,3356,3366,3374,3378,3404,3408,3437,3441,3452,3456,3465,3469],{"__ignoreMap":37},[123,3351,3352,3354],{"class":125,"line":126},[123,3353,1958],{"class":129},[123,3355,1961],{"class":238},[123,3357,3358,3360,3362,3364],{"class":125,"line":45},[123,3359,1966],{"class":129},[123,3361,1969],{"class":129},[123,3363,1973],{"class":1972},[123,3365,1300],{"class":133},[123,3367,3368,3370,3372],{"class":125,"line":1189},[123,3369,137],{"class":129},[123,3371,1982],{"class":1972},[123,3373,1985],{"class":133},[123,3375,3376],{"class":125,"line":1204},[123,3377,1555],{"class":133},[123,3379,3380,3382,3384,3386,3388,3390,3392,3394,3396,3398,3400,3402],{"class":125,"line":1210},[123,3381,3210],{"class":129},[123,3383,1667],{"class":133},[123,3385,137],{"class":129},[123,3387,3041],{"class":133},[123,3389,179],{"class":129},[123,3391,325],{"class":182},[123,3393,3048],{"class":133},[123,3395,1044],{"class":129},[123,3397,580],{"class":182},[123,3399,3048],{"class":133},[123,3401,2301],{"class":129},[123,3403,140],{"class":133},[123,3405,3406],{"class":125,"line":1224},[123,3407,2039],{"class":133},[123,3409,3410,3413,3415,3417,3420,3422,3424,3427,3429,3431,3433,3435],{"class":125,"line":1230},[123,3411,3412],{"class":129},"        for",[123,3414,1667],{"class":133},[123,3416,137],{"class":129},[123,3418,3419],{"class":133}," j",[123,3421,179],{"class":129},[123,3423,325],{"class":182},[123,3425,3426],{"class":133},";j",[123,3428,1044],{"class":129},[123,3430,580],{"class":182},[123,3432,3426],{"class":133},[123,3434,2301],{"class":129},[123,3436,140],{"class":133},[123,3438,3439],{"class":125,"line":1321},[123,3440,2519],{"class":133},[123,3442,3443,3445,3447,3450],{"class":125,"line":1327},[123,3444,2524],{"class":133},[123,3446,1178],{"class":129},[123,3448,3449],{"class":238},"\"*\"",[123,3451,1300],{"class":133},[123,3453,3454],{"class":125,"line":1339},[123,3455,2538],{"class":133},[123,3457,3458,3461,3463],{"class":125,"line":1621},[123,3459,3460],{"class":133},"        cout",[123,3462,1178],{"class":129},[123,3464,1201],{"class":133},[123,3466,3467],{"class":125,"line":1626},[123,3468,2196],{"class":133},[123,3470,3471],{"class":125,"line":1632},[123,3472,1574],{"class":133},[14,3474,3475],{},"乘法口诀表",[114,3477,3479],{"className":116,"code":3478,"language":118,"meta":37,"style":37},"#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",[120,3480,3481,3487,3497,3505,3509,3535,3539,3564,3568,3608,3612,3620,3624],{"__ignoreMap":37},[123,3482,3483,3485],{"class":125,"line":126},[123,3484,1958],{"class":129},[123,3486,2343],{"class":238},[123,3488,3489,3491,3493,3495],{"class":125,"line":45},[123,3490,1966],{"class":129},[123,3492,1969],{"class":129},[123,3494,1973],{"class":1972},[123,3496,1300],{"class":133},[123,3498,3499,3501,3503],{"class":125,"line":1189},[123,3500,137],{"class":129},[123,3502,1982],{"class":1972},[123,3504,1985],{"class":133},[123,3506,3507],{"class":125,"line":1204},[123,3508,1555],{"class":133},[123,3510,3511,3513,3515,3517,3519,3521,3523,3525,3527,3529,3531,3533],{"class":125,"line":1210},[123,3512,3210],{"class":129},[123,3514,134],{"class":133},[123,3516,137],{"class":129},[123,3518,3041],{"class":133},[123,3520,179],{"class":129},[123,3522,351],{"class":182},[123,3524,3048],{"class":133},[123,3526,1044],{"class":129},[123,3528,580],{"class":182},[123,3530,3048],{"class":133},[123,3532,2301],{"class":129},[123,3534,140],{"class":133},[123,3536,3537],{"class":125,"line":1224},[123,3538,2039],{"class":133},[123,3540,3541,3543,3545,3547,3549,3551,3553,3555,3557,3560,3562],{"class":125,"line":1230},[123,3542,3412],{"class":129},[123,3544,134],{"class":133},[123,3546,137],{"class":129},[123,3548,3419],{"class":133},[123,3550,179],{"class":129},[123,3552,351],{"class":182},[123,3554,3426],{"class":133},[123,3556,1597],{"class":129},[123,3558,3559],{"class":133},"i;j",[123,3561,2301],{"class":129},[123,3563,140],{"class":133},[123,3565,3566],{"class":125,"line":1321},[123,3567,2519],{"class":133},[123,3569,3570,3572,3574,3576,3578,3580,3582,3584,3586,3589,3591,3593,3595,3597,3599,3602,3604,3606],{"class":125,"line":1327},[123,3571,2524],{"class":133},[123,3573,1178],{"class":129},[123,3575,601],{"class":133},[123,3577,1178],{"class":129},[123,3579,3449],{"class":238},[123,3581,1178],{"class":129},[123,3583,575],{"class":133},[123,3585,1178],{"class":129},[123,3587,3588],{"class":238},"\"=\"",[123,3590,1178],{"class":129},[123,3592,575],{"class":133},[123,3594,589],{"class":129},[123,3596,601],{"class":133},[123,3598,1178],{"class":129},[123,3600,3601],{"class":238},"'",[123,3603,1240],{"class":182},[123,3605,3601],{"class":238},[123,3607,1300],{"class":133},[123,3609,3610],{"class":125,"line":1339},[123,3611,2538],{"class":133},[123,3613,3614,3616,3618],{"class":125,"line":1621},[123,3615,3460],{"class":133},[123,3617,1178],{"class":129},[123,3619,1201],{"class":133},[123,3621,3622],{"class":125,"line":1626},[123,3623,2196],{"class":133},[123,3625,3626],{"class":125,"line":1632},[123,3627,1574],{"class":133},[94,3629,3631],{"id":3630},"_163跳出语句","1.6.3跳出语句",[77,3633,3634],{},[80,3635,3636],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,3638,3639],{},"break使用时机：",[1141,3641,3642,3645,3648],{},[80,3643,3644],{},"出现在switch条件语句中，作用是终止case并跳出switch",[80,3646,3647],{},"出现在循环结构中，作用是跳出当前的循环结构",[80,3649,3650],{},"出现在嵌套循环中，跳出最近的内层循环语句",[77,3652,3653,3656],{"start":45},[80,3654,3655],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[80,3657,3658],{},"goto语句\n语法：goto 标记;",[14,3660,3661],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[114,3663,3665],{"className":116,"code":3664,"language":118,"meta":37,"style":37},"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",[120,3666,3667,3675,3679,3692,3702,3715,3728,3741,3749,3765],{"__ignoreMap":37},[123,3668,3669,3671,3673],{"class":125,"line":126},[123,3670,137],{"class":129},[123,3672,1982],{"class":1972},[123,3674,1985],{"class":133},[123,3676,3677],{"class":125,"line":45},[123,3678,1555],{"class":133},[123,3680,3681,3683,3685,3688,3690],{"class":125,"line":1189},[123,3682,1560],{"class":133},[123,3684,1178],{"class":129},[123,3686,3687],{"class":238},"\"1\"",[123,3689,1178],{"class":129},[123,3691,1201],{"class":133},[123,3693,3694,3697,3700],{"class":125,"line":1204},[123,3695,3696],{"class":129},"    goto",[123,3698,3699],{"class":1972}," FLAG",[123,3701,1300],{"class":133},[123,3703,3704,3706,3708,3711,3713],{"class":125,"line":1210},[123,3705,1560],{"class":133},[123,3707,1178],{"class":129},[123,3709,3710],{"class":238},"\"2\"",[123,3712,1178],{"class":129},[123,3714,1201],{"class":133},[123,3716,3717,3719,3721,3724,3726],{"class":125,"line":1224},[123,3718,1560],{"class":133},[123,3720,1178],{"class":129},[123,3722,3723],{"class":238},"\"3\"",[123,3725,1178],{"class":129},[123,3727,1201],{"class":133},[123,3729,3730,3732,3734,3737,3739],{"class":125,"line":1230},[123,3731,1560],{"class":133},[123,3733,1178],{"class":129},[123,3735,3736],{"class":238},"\"4\"",[123,3738,1178],{"class":129},[123,3740,1201],{"class":133},[123,3742,3743,3746],{"class":125,"line":1321},[123,3744,3745],{"class":1972},"    FLAG",[123,3747,3748],{"class":133},":\n",[123,3750,3751,3753,3755,3758,3760,3762],{"class":125,"line":1327},[123,3752,1560],{"class":133},[123,3754,1178],{"class":129},[123,3756,3757],{"class":238},"\"5\"",[123,3759,1178],{"class":129},[123,3761,1248],{"class":133},[123,3763,3764],{"class":192},"\u002F\u002F跳过了2,3,4,直接到5\n",[123,3766,3767],{"class":125,"line":1339},[123,3768,1574],{"class":133},[65,3770,3772],{"id":3771},"_17数组","1.7数组",[94,3774,3776],{"id":3775},"_171一维数组","1.7.1一维数组",[77,3778,3779],{},[80,3780,3781],{},"一维数组定义方式",[271,3783,3784,3794],{},[274,3785,3786],{},[277,3787,3788,3791],{},[280,3789,3790],{},"方式",[280,3792,3793],{},"注意事项",[318,3795,3796,3810,3820],{},[277,3797,3798,3804],{},[323,3799,3800,3801,189],{},"数据类型 数组名",[123,3802,3803],{},"数组长度",[323,3805,3806,3807,3809],{},"这种方式是先定义再arr",[123,3808,575],{},"赋值",[277,3811,3812,3817],{},[323,3813,3800,3814,3816],{},[123,3815,3803],{},"={值1,值2....};",[323,3818,3819],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[277,3821,3822,3826],{},[323,3823,3800,3824,3816],{},[123,3825],{},[323,3827,3828,3829,3831],{},"int arr",[123,3830],{},";这是不正确的，按照这样的方式定义必须有初始长度",[77,3833,3834],{"start":45},[80,3835,3836],{},"一维数组数组名\n用途：",[1141,3838,3839],{},[80,3840,3841],{},"1.可以统计整个数组在内存中的长度：",[114,3843,3845],{"className":116,"code":3844,"language":118,"meta":37,"style":37},"sizeof(arr);\nsizeof(arr[0]);\n",[120,3846,3847,3854],{"__ignoreMap":37},[123,3848,3849,3851],{"class":125,"line":126},[123,3850,130],{"class":129},[123,3852,3853],{"class":133},"(arr);\n",[123,3855,3856,3858,3861,3863],{"class":125,"line":45},[123,3857,130],{"class":129},[123,3859,3860],{"class":133},"(arr[",[123,3862,325],{"class":182},[123,3864,3865],{"class":133},"]);\n",[1141,3867,3868],{},[80,3869,3870],{},"2.可以获取数组在内存中的首地址:",[114,3872,3874],{"className":116,"code":3873,"language":118,"meta":37,"style":37},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[120,3875,3876,3881,3894,3899],{"__ignoreMap":37},[123,3877,3878],{"class":125,"line":126},[123,3879,3880],{"class":192},"\u002F\u002F查看16进制的首地址\n",[123,3882,3883,3885,3887,3890,3892],{"class":125,"line":45},[123,3884,1379],{"class":133},[123,3886,1178],{"class":129},[123,3888,3889],{"class":133},"arr",[123,3891,1178],{"class":129},[123,3893,1201],{"class":133},[123,3895,3896],{"class":125,"line":1189},[123,3897,3898],{"class":192},"\u002F\u002F看10进制数\n",[123,3900,3901,3903,3905,3907,3909,3911,3913,3916,3918,3920,3922],{"class":125,"line":1204},[123,3902,1379],{"class":133},[123,3904,1178],{"class":129},[123,3906,134],{"class":133},[123,3908,137],{"class":129},[123,3910,563],{"class":133},[123,3912,487],{"class":129},[123,3914,3915],{"class":133},"arr[",[123,3917,325],{"class":182},[123,3919,1074],{"class":133},[123,3921,1178],{"class":129},[123,3923,1201],{"class":133},[14,3925,3926],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1141,3928,3929],{},[80,3930,3931],{},"1️⃣五只小猪称体重",[114,3933,3935],{"className":116,"code":3934,"language":118,"meta":37,"style":37},"#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",[120,3936,3937,3943,3953,3961,3965,4005,4018,4044,4048,4060,4064,4074,4078,4082,4095,4105],{"__ignoreMap":37},[123,3938,3939,3941],{"class":125,"line":126},[123,3940,1958],{"class":129},[123,3942,1961],{"class":238},[123,3944,3945,3947,3949,3951],{"class":125,"line":45},[123,3946,1966],{"class":129},[123,3948,1969],{"class":129},[123,3950,1973],{"class":1972},[123,3952,1300],{"class":133},[123,3954,3955,3957,3959],{"class":125,"line":1189},[123,3956,137],{"class":129},[123,3958,1982],{"class":1972},[123,3960,1985],{"class":133},[123,3962,3963],{"class":125,"line":1204},[123,3964,1555],{"class":133},[123,3966,3967,3969,3972,3974,3976,3978,3980,3983,3985,3988,3990,3992,3994,3997,3999,4002],{"class":125,"line":1210},[123,3968,1994],{"class":129},[123,3970,3971],{"class":133}," arr[",[123,3973,453],{"class":182},[123,3975,1074],{"class":133},[123,3977,179],{"class":129},[123,3979,1030],{"class":133},[123,3981,3982],{"class":182},"300",[123,3984,512],{"class":133},[123,3986,3987],{"class":182},"350",[123,3989,512],{"class":133},[123,3991,1731],{"class":182},[123,3993,512],{"class":133},[123,3995,3996],{"class":182},"400",[123,3998,512],{"class":133},[123,4000,4001],{"class":182},"250",[123,4003,4004],{"class":133},"};\n",[123,4006,4007,4009,4012,4014,4016],{"class":125,"line":1224},[123,4008,1994],{"class":129},[123,4010,4011],{"class":133}," tmp",[123,4013,179],{"class":129},[123,4015,325],{"class":182},[123,4017,1300],{"class":133},[123,4019,4020,4022,4024,4026,4028,4030,4032,4034,4036,4038,4040,4042],{"class":125,"line":1230},[123,4021,3210],{"class":129},[123,4023,1667],{"class":133},[123,4025,137],{"class":129},[123,4027,3041],{"class":133},[123,4029,179],{"class":129},[123,4031,325],{"class":182},[123,4033,3048],{"class":133},[123,4035,1044],{"class":129},[123,4037,453],{"class":182},[123,4039,3048],{"class":133},[123,4041,2301],{"class":129},[123,4043,140],{"class":133},[123,4045,4046],{"class":125,"line":1321},[123,4047,2039],{"class":133},[123,4049,4050,4052,4055,4057],{"class":125,"line":1327},[123,4051,2506],{"class":129},[123,4053,4054],{"class":133},"(tmp",[123,4056,1044],{"class":129},[123,4058,4059],{"class":133},"arr[i])\n",[123,4061,4062],{"class":125,"line":1339},[123,4063,2519],{"class":133},[123,4065,4066,4069,4071],{"class":125,"line":1621},[123,4067,4068],{"class":133},"            tmp",[123,4070,179],{"class":129},[123,4072,4073],{"class":133},"arr[i];\n",[123,4075,4076],{"class":125,"line":1626},[123,4077,2538],{"class":133},[123,4079,4080],{"class":125,"line":1632},[123,4081,2196],{"class":133},[123,4083,4084,4086,4088,4091,4093],{"class":125,"line":1637},[123,4085,1560],{"class":133},[123,4087,1178],{"class":129},[123,4089,4090],{"class":133},"tmp",[123,4092,1178],{"class":129},[123,4094,1201],{"class":133},[123,4096,4097,4100,4103],{"class":125,"line":1651},[123,4098,4099],{"class":129},"    return",[123,4101,4102],{"class":182}," 0",[123,4104,1300],{"class":133},[123,4106,4107],{"class":125,"line":1656},[123,4108,1574],{"class":133},[1141,4110,4111],{},[80,4112,4113],{},"2️⃣数组元素逆置",[114,4115,4117],{"className":116,"code":4116,"language":118,"meta":37,"style":37},"\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",[120,4118,4119,4124,4130,4140,4148,4152,4187,4203,4235,4248,4253,4258,4270,4280,4290,4295,4304,4314,4319,4324,4351,4355,4371,4375,4386,4395],{"__ignoreMap":37},[123,4120,4121],{"class":125,"line":126},[123,4122,4123],{"class":192},"\u002F\u002F元素逆置\n",[123,4125,4126,4128],{"class":125,"line":45},[123,4127,1958],{"class":129},[123,4129,1961],{"class":238},[123,4131,4132,4134,4136,4138],{"class":125,"line":1189},[123,4133,1966],{"class":129},[123,4135,1969],{"class":129},[123,4137,1973],{"class":1972},[123,4139,1300],{"class":133},[123,4141,4142,4144,4146],{"class":125,"line":1204},[123,4143,137],{"class":129},[123,4145,1982],{"class":1972},[123,4147,1985],{"class":133},[123,4149,4150],{"class":125,"line":1210},[123,4151,1555],{"class":133},[123,4153,4154,4157,4159,4161,4163,4165,4167,4169,4171,4173,4175,4177,4179,4181,4183,4185],{"class":125,"line":1224},[123,4155,4156],{"class":129},"   int",[123,4158,3971],{"class":133},[123,4160,453],{"class":182},[123,4162,1074],{"class":133},[123,4164,179],{"class":129},[123,4166,1030],{"class":133},[123,4168,351],{"class":182},[123,4170,512],{"class":133},[123,4172,211],{"class":182},[123,4174,512],{"class":133},[123,4176,205],{"class":182},[123,4178,512],{"class":133},[123,4180,427],{"class":182},[123,4182,512],{"class":133},[123,4184,453],{"class":182},[123,4186,4004],{"class":133},[123,4188,4189,4191,4194,4196,4198,4200],{"class":125,"line":1230},[123,4190,4156],{"class":129},[123,4192,4193],{"class":133}," start",[123,4195,179],{"class":129},[123,4197,325],{"class":182},[123,4199,189],{"class":133},[123,4201,4202],{"class":192},"\u002F\u002F起始下标\n",[123,4204,4205,4207,4210,4213,4216,4219,4221,4223,4226,4228,4230,4232],{"class":125,"line":1321},[123,4206,4156],{"class":129},[123,4208,4209],{"class":133}," end",[123,4211,4212],{"class":129},"=sizeof",[123,4214,4215],{"class":133},"(arr)",[123,4217,4218],{"class":129},"\u002Fsizeof",[123,4220,3860],{"class":133},[123,4222,325],{"class":182},[123,4224,4225],{"class":133},"])",[123,4227,666],{"class":129},[123,4229,351],{"class":182},[123,4231,189],{"class":133},[123,4233,4234],{"class":192},"\u002F\u002F结束下标\n",[123,4236,4237,4240,4243,4245],{"class":125,"line":1327},[123,4238,4239],{"class":129},"   while",[123,4241,4242],{"class":133}," (start",[123,4244,1044],{"class":129},[123,4246,4247],{"class":133},"end)\n",[123,4249,4250],{"class":125,"line":1339},[123,4251,4252],{"class":133},"   {\n",[123,4254,4255],{"class":125,"line":1621},[123,4256,4257],{"class":192},"    \u002F\u002F实现元素互换代码\n",[123,4259,4260,4262,4265,4267],{"class":125,"line":1626},[123,4261,1994],{"class":129},[123,4263,4264],{"class":133}," temp",[123,4266,179],{"class":129},[123,4268,4269],{"class":133},"arr[start];\n",[123,4271,4272,4275,4277],{"class":125,"line":1632},[123,4273,4274],{"class":133},"    arr[start]",[123,4276,179],{"class":129},[123,4278,4279],{"class":133},"arr[end];\n",[123,4281,4282,4285,4287],{"class":125,"line":1637},[123,4283,4284],{"class":133},"    arr[end]",[123,4286,179],{"class":129},[123,4288,4289],{"class":133},"temp;\n",[123,4291,4292],{"class":125,"line":1651},[123,4293,4294],{"class":192},"    \u002F\u002F下标更新\n",[123,4296,4297,4300,4302],{"class":125,"line":1656},[123,4298,4299],{"class":133},"    start",[123,4301,2301],{"class":129},[123,4303,1300],{"class":133},[123,4305,4306,4309,4312],{"class":125,"line":1662},[123,4307,4308],{"class":133},"    end",[123,4310,4311],{"class":129},"--",[123,4313,1300],{"class":133},[123,4315,4316],{"class":125,"line":1683},[123,4317,4318],{"class":133},"   }\n",[123,4320,4321],{"class":125,"line":1688},[123,4322,4323],{"class":192},"   \u002F\u002F输出逆置后的数组\n",[123,4325,4326,4329,4331,4333,4335,4337,4339,4341,4343,4345,4347,4349],{"class":125,"line":1702},[123,4327,4328],{"class":129},"   for",[123,4330,1667],{"class":133},[123,4332,137],{"class":129},[123,4334,3041],{"class":133},[123,4336,179],{"class":129},[123,4338,325],{"class":182},[123,4340,3048],{"class":133},[123,4342,1044],{"class":129},[123,4344,453],{"class":182},[123,4346,3048],{"class":133},[123,4348,2301],{"class":129},[123,4350,140],{"class":133},[123,4352,4353],{"class":125,"line":1707},[123,4354,4252],{"class":133},[123,4356,4357,4359,4361,4364,4366,4369],{"class":125,"line":1736},[123,4358,1560],{"class":133},[123,4360,1178],{"class":129},[123,4362,4363],{"class":133},"arr[i]",[123,4365,1178],{"class":129},[123,4367,4368],{"class":238},"\" \"",[123,4370,1300],{"class":133},[123,4372,4373],{"class":125,"line":1741},[123,4374,4318],{"class":133},[123,4376,4377,4380,4382,4384],{"class":125,"line":1758},[123,4378,4379],{"class":1972},"   system",[123,4381,134],{"class":133},[123,4383,2317],{"class":238},[123,4385,2728],{"class":133},[123,4387,4388,4391,4393],{"class":125,"line":1763},[123,4389,4390],{"class":129},"   return",[123,4392,4102],{"class":182},[123,4394,1300],{"class":133},[123,4396,4397],{"class":125,"line":1768},[123,4398,1574],{"class":133},[1141,4400,4401],{},[80,4402,4403],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[114,4405,4407],{"className":116,"code":4406,"language":118,"meta":37,"style":37},"\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",[120,4408,4409,4414,4420,4430,4438,4442,4494,4507,4533,4537,4551,4555,4560,4565,4595,4599,4604,4638,4642,4647,4667,4672,4684,4700,4715,4720,4724,4728,4741,4767,4771,4785,4789,4797],{"__ignoreMap":37},[123,4410,4411],{"class":125,"line":126},[123,4412,4413],{"class":192},"\u002F\u002F冒泡排序,升序\n",[123,4415,4416,4418],{"class":125,"line":45},[123,4417,1958],{"class":129},[123,4419,1961],{"class":238},[123,4421,4422,4424,4426,4428],{"class":125,"line":1189},[123,4423,1966],{"class":129},[123,4425,1969],{"class":129},[123,4427,1973],{"class":1972},[123,4429,1300],{"class":133},[123,4431,4432,4434,4436],{"class":125,"line":1204},[123,4433,137],{"class":129},[123,4435,1982],{"class":1972},[123,4437,1985],{"class":133},[123,4439,4440],{"class":125,"line":1210},[123,4441,1555],{"class":133},[123,4443,4444,4446,4448,4450,4453,4455,4458,4460,4462,4464,4466,4468,4470,4472,4474,4476,4478,4480,4482,4484,4486,4488,4490,4492],{"class":125,"line":1224},[123,4445,1994],{"class":129},[123,4447,3971],{"class":133},[123,4449,554],{"class":182},[123,4451,4452],{"class":133},"] ",[123,4454,179],{"class":129},[123,4456,4457],{"class":133}," {",[123,4459,427],{"class":182},[123,4461,512],{"class":133},[123,4463,211],{"class":182},[123,4465,512],{"class":133},[123,4467,529],{"class":182},[123,4469,512],{"class":133},[123,4471,325],{"class":182},[123,4473,512],{"class":133},[123,4475,453],{"class":182},[123,4477,512],{"class":133},[123,4479,503],{"class":182},[123,4481,512],{"class":133},[123,4483,351],{"class":182},[123,4485,512],{"class":133},[123,4487,205],{"class":182},[123,4489,512],{"class":133},[123,4491,554],{"class":182},[123,4493,4004],{"class":133},[123,4495,4496,4498,4500,4503,4505],{"class":125,"line":1230},[123,4497,1560],{"class":133},[123,4499,1178],{"class":129},[123,4501,4502],{"class":238},"\"排序前：\"",[123,4504,1178],{"class":129},[123,4506,1201],{"class":133},[123,4508,4509,4511,4513,4515,4517,4519,4521,4523,4525,4527,4529,4531],{"class":125,"line":1321},[123,4510,3210],{"class":129},[123,4512,1667],{"class":133},[123,4514,137],{"class":129},[123,4516,3041],{"class":133},[123,4518,179],{"class":129},[123,4520,325],{"class":182},[123,4522,3048],{"class":133},[123,4524,1044],{"class":129},[123,4526,554],{"class":182},[123,4528,3048],{"class":133},[123,4530,2301],{"class":129},[123,4532,140],{"class":133},[123,4534,4535],{"class":125,"line":1327},[123,4536,2039],{"class":133},[123,4538,4539,4541,4543,4545,4547,4549],{"class":125,"line":1339},[123,4540,3460],{"class":133},[123,4542,1178],{"class":129},[123,4544,4363],{"class":133},[123,4546,1178],{"class":129},[123,4548,4368],{"class":238},[123,4550,1300],{"class":133},[123,4552,4553],{"class":125,"line":1621},[123,4554,2196],{"class":133},[123,4556,4557],{"class":125,"line":1626},[123,4558,4559],{"class":192},"    \u002F\u002F开始冒泡排序\n",[123,4561,4562],{"class":125,"line":1632},[123,4563,4564],{"class":192},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[123,4566,4567,4569,4571,4573,4575,4577,4579,4581,4583,4585,4587,4589,4591,4593],{"class":125,"line":1637},[123,4568,3210],{"class":129},[123,4570,1667],{"class":133},[123,4572,137],{"class":129},[123,4574,3041],{"class":133},[123,4576,179],{"class":129},[123,4578,325],{"class":182},[123,4580,3048],{"class":133},[123,4582,1044],{"class":129},[123,4584,554],{"class":182},[123,4586,666],{"class":129},[123,4588,351],{"class":182},[123,4590,3048],{"class":133},[123,4592,2301],{"class":129},[123,4594,140],{"class":133},[123,4596,4597],{"class":125,"line":1651},[123,4598,2039],{"class":133},[123,4600,4601],{"class":125,"line":1656},[123,4602,4603],{"class":192},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[123,4605,4606,4608,4610,4612,4614,4616,4618,4620,4622,4624,4626,4628,4630,4632,4634,4636],{"class":125,"line":1662},[123,4607,3412],{"class":129},[123,4609,1667],{"class":133},[123,4611,137],{"class":129},[123,4613,3419],{"class":133},[123,4615,179],{"class":129},[123,4617,325],{"class":182},[123,4619,3426],{"class":133},[123,4621,1044],{"class":129},[123,4623,554],{"class":182},[123,4625,666],{"class":129},[123,4627,575],{"class":133},[123,4629,666],{"class":129},[123,4631,351],{"class":182},[123,4633,3426],{"class":133},[123,4635,2301],{"class":129},[123,4637,140],{"class":133},[123,4639,4640],{"class":125,"line":1683},[123,4641,2519],{"class":133},[123,4643,4644],{"class":125,"line":1688},[123,4645,4646],{"class":192},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[123,4648,4649,4652,4655,4657,4660,4662,4664],{"class":125,"line":1702},[123,4650,4651],{"class":129},"            if",[123,4653,4654],{"class":133},"(arr[j]",[123,4656,1094],{"class":129},[123,4658,4659],{"class":133},"arr[j",[123,4661,615],{"class":129},[123,4663,351],{"class":182},[123,4665,4666],{"class":133},"])\n",[123,4668,4669],{"class":125,"line":1707},[123,4670,4671],{"class":133},"            {\n",[123,4673,4674,4677,4679,4681],{"class":125,"line":1736},[123,4675,4676],{"class":129},"                int",[123,4678,4264],{"class":133},[123,4680,179],{"class":129},[123,4682,4683],{"class":133},"arr[j];\n",[123,4685,4686,4689,4691,4693,4695,4697],{"class":125,"line":1741},[123,4687,4688],{"class":133},"                arr[j]",[123,4690,179],{"class":129},[123,4692,4659],{"class":133},[123,4694,615],{"class":129},[123,4696,351],{"class":182},[123,4698,4699],{"class":133},"];\n",[123,4701,4702,4705,4707,4709,4711,4713],{"class":125,"line":1758},[123,4703,4704],{"class":133},"                arr[j",[123,4706,615],{"class":129},[123,4708,351],{"class":182},[123,4710,1074],{"class":133},[123,4712,179],{"class":129},[123,4714,4289],{"class":133},[123,4716,4717],{"class":125,"line":1763},[123,4718,4719],{"class":133},"            }\n",[123,4721,4722],{"class":125,"line":1768},[123,4723,2538],{"class":133},[123,4725,4726],{"class":125,"line":1773},[123,4727,2196],{"class":133},[123,4729,4730,4732,4734,4737,4739],{"class":125,"line":1787},[123,4731,1560],{"class":133},[123,4733,1178],{"class":129},[123,4735,4736],{"class":238},"\"排序后：\"",[123,4738,1178],{"class":129},[123,4740,1201],{"class":133},[123,4742,4743,4745,4747,4749,4751,4753,4755,4757,4759,4761,4763,4765],{"class":125,"line":1792},[123,4744,3210],{"class":129},[123,4746,1667],{"class":133},[123,4748,137],{"class":129},[123,4750,3041],{"class":133},[123,4752,179],{"class":129},[123,4754,325],{"class":182},[123,4756,3048],{"class":133},[123,4758,1044],{"class":129},[123,4760,554],{"class":182},[123,4762,3048],{"class":133},[123,4764,2301],{"class":129},[123,4766,140],{"class":133},[123,4768,4769],{"class":125,"line":2586},[123,4770,2039],{"class":133},[123,4772,4773,4775,4777,4779,4781,4783],{"class":125,"line":2600},[123,4774,3460],{"class":133},[123,4776,1178],{"class":129},[123,4778,4363],{"class":133},[123,4780,1178],{"class":129},[123,4782,4368],{"class":238},[123,4784,1300],{"class":133},[123,4786,4787],{"class":125,"line":2608},[123,4788,2196],{"class":133},[123,4790,4791,4793,4795],{"class":125,"line":2613},[123,4792,4099],{"class":129},[123,4794,4102],{"class":182},[123,4796,1300],{"class":133},[123,4798,4799],{"class":125,"line":2619},[123,4800,1574],{"class":133},[94,4802,4804],{"id":4803},"_172二维数组","1.7.2二维数组",[77,4806,4807],{},[80,4808,4809],{},"二维数组的四种定义方式",[271,4811,4812,4821],{},[274,4813,4814],{},[277,4815,4816,4819],{},[280,4817,4818],{},"序号",[280,4820,3790],{},[318,4822,4823,4833,4842,4851,4860],{},[277,4824,4825,4827],{},[323,4826,351],{},[323,4828,4829,4830,189],{},"数据类型 数组名[行数]",[123,4831,4832],{},"列数",[277,4834,4835,4837],{},[323,4836,211],{},[323,4838,4829,4839,4841],{},[123,4840,4832],{},"={ {数据1,数据2}，{数据3，数据4}... }",[277,4843,4844,4846],{},[323,4845,205],{},[323,4847,4829,4848,4850],{},[123,4849,4832],{},"={数据1,数据2,数据3...}",[277,4852,4853,4855],{},[323,4854,427],{},[323,4856,4857,4858,4850],{},"数据类型 数组名[]",[123,4859,4832],{},[277,4861,4862,4865],{},[323,4863,4864],{},"注意：不能只省略列数",[323,4866],{},[77,4868,4869],{"start":45},[80,4870,4871],{},"二维数组数组名",[1141,4873,4874,4877],{},[80,4875,4876],{},"1.查看二维数组所占内存空间",[80,4878,4879],{},"2.获取二维数组首地址",[14,4881,4882],{},"已知二维数组，求二维数组的行数与列数",[114,4884,4886],{"className":116,"code":4885,"language":118,"meta":37,"style":37},"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",[120,4887,4888,4896,4900,4918,4922,4940,4956,4961,4986,5019],{"__ignoreMap":37},[123,4889,4890,4892,4894],{"class":125,"line":126},[123,4891,137],{"class":129},[123,4893,1982],{"class":1972},[123,4895,1985],{"class":133},[123,4897,4898],{"class":125,"line":45},[123,4899,1555],{"class":133},[123,4901,4902,4904,4906,4908,4911,4913,4915],{"class":125,"line":1189},[123,4903,1994],{"class":129},[123,4905,3971],{"class":133},[123,4907,211],{"class":182},[123,4909,4910],{"class":133},"][",[123,4912,205],{"class":182},[123,4914,1074],{"class":133},[123,4916,4917],{"class":129},"=\n",[123,4919,4920],{"class":125,"line":1204},[123,4921,2039],{"class":133},[123,4923,4924,4927,4929,4931,4933,4935,4937],{"class":125,"line":1210},[123,4925,4926],{"class":133},"        {",[123,4928,351],{"class":182},[123,4930,512],{"class":133},[123,4932,211],{"class":182},[123,4934,512],{"class":133},[123,4936,205],{"class":182},[123,4938,4939],{"class":133},"},\n",[123,4941,4942,4944,4946,4948,4950,4952,4954],{"class":125,"line":1224},[123,4943,4926],{"class":133},[123,4945,427],{"class":182},[123,4947,512],{"class":133},[123,4949,453],{"class":182},[123,4951,512],{"class":133},[123,4953,478],{"class":182},[123,4955,1574],{"class":133},[123,4957,4958],{"class":125,"line":1230},[123,4959,4960],{"class":133},"    };\n",[123,4962,4963,4965,4967,4970,4972,4974,4976,4978,4980,4982,4984],{"class":125,"line":1321},[123,4964,1560],{"class":133},[123,4966,1178],{"class":129},[123,4968,4969],{"class":238},"\"二维数组的行数\"",[123,4971,1382],{"class":129},[123,4973,4215],{"class":133},[123,4975,4218],{"class":129},[123,4977,3860],{"class":133},[123,4979,325],{"class":182},[123,4981,4225],{"class":133},[123,4983,1178],{"class":129},[123,4985,1201],{"class":133},[123,4987,4988,4990,4992,4995,4997,4999,5001,5003,5005,5007,5009,5011,5013,5015,5017],{"class":125,"line":1327},[123,4989,1560],{"class":133},[123,4991,1178],{"class":129},[123,4993,4994],{"class":238},"\"二维数组的列数\"",[123,4996,1382],{"class":129},[123,4998,3860],{"class":133},[123,5000,325],{"class":182},[123,5002,4225],{"class":133},[123,5004,4218],{"class":129},[123,5006,3860],{"class":133},[123,5008,325],{"class":182},[123,5010,4910],{"class":133},[123,5012,325],{"class":182},[123,5014,4225],{"class":133},[123,5016,1178],{"class":129},[123,5018,1201],{"class":133},[123,5020,5021],{"class":125,"line":1339},[123,5022,1574],{"class":133},[14,5024,5025],{},"查看二维数组首地址",[114,5027,5029],{"className":116,"code":5028,"language":118,"meta":37,"style":37},"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",[120,5030,5031,5048,5074,5099],{"__ignoreMap":37},[123,5032,5033,5035,5037,5040,5042,5044,5046],{"class":125,"line":126},[123,5034,1379],{"class":133},[123,5036,1178],{"class":129},[123,5038,5039],{"class":238},"\"二维数组首地址：\"",[123,5041,1178],{"class":129},[123,5043,3889],{"class":133},[123,5045,1178],{"class":129},[123,5047,1201],{"class":133},[123,5049,5050,5052,5054,5057,5059,5061,5063,5066,5068,5070,5072],{"class":125,"line":45},[123,5051,1379],{"class":133},[123,5053,1178],{"class":129},[123,5055,5056],{"class":238},"\"二维数组第一行的首地址：\"",[123,5058,1178],{"class":129},[123,5060,134],{"class":133},[123,5062,137],{"class":129},[123,5064,5065],{"class":133},")arr[",[123,5067,325],{"class":182},[123,5069,1074],{"class":133},[123,5071,1178],{"class":129},[123,5073,1201],{"class":133},[123,5075,5076,5078,5080,5083,5085,5087,5089,5091,5093,5095,5097],{"class":125,"line":1189},[123,5077,1379],{"class":133},[123,5079,1178],{"class":129},[123,5081,5082],{"class":238},"\"二维数组第二行的首地址：\"",[123,5084,1178],{"class":129},[123,5086,134],{"class":133},[123,5088,137],{"class":129},[123,5090,5065],{"class":133},[123,5092,351],{"class":182},[123,5094,1074],{"class":133},[123,5096,1178],{"class":129},[123,5098,1201],{"class":133},[123,5100,5101,5103,5105,5108,5110,5112,5114,5116,5118,5120,5122,5124,5126,5128,5130,5132],{"class":125,"line":1204},[123,5102,1379],{"class":133},[123,5104,1178],{"class":129},[123,5106,5107],{"class":238},"\"二维数组第一个元素的首地址:\"",[123,5109,1178],{"class":129},[123,5111,134],{"class":133},[123,5113,137],{"class":129},[123,5115,563],{"class":133},[123,5117,487],{"class":129},[123,5119,3915],{"class":133},[123,5121,325],{"class":182},[123,5123,4910],{"class":133},[123,5125,325],{"class":182},[123,5127,1074],{"class":133},[123,5129,1178],{"class":129},[123,5131,1248],{"class":133},[123,5133,5134],{"class":192},"\u002F\u002F对于数，要加取址符\n",[5136,5137,5138],"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":37,"searchDepth":45,"depth":45,"links":5140},[5141,5142,5143,5151,5152,5158,5163],{"id":67,"depth":45,"text":68},{"id":74,"depth":45,"text":75},{"id":91,"depth":45,"text":92,"children":5144},[5145,5146,5147,5148,5149,5150],{"id":96,"depth":1189,"text":97},{"id":150,"depth":1189,"text":151},{"id":219,"depth":1189,"text":220},{"id":1159,"depth":1189,"text":1160},{"id":1254,"depth":1189,"text":1255},{"id":1353,"depth":1189,"text":1354},{"id":1395,"depth":45,"text":1396},{"id":1463,"depth":45,"text":1464,"children":5153},[5154,5155,5156,5157],{"id":1467,"depth":1189,"text":1468},{"id":1488,"depth":1189,"text":1489},{"id":1497,"depth":1189,"text":1498},{"id":1506,"depth":1189,"text":1507},{"id":1515,"depth":45,"text":1516,"children":5159},[5160,5161,5162],{"id":1519,"depth":1189,"text":1520},{"id":2214,"depth":1189,"text":2215},{"id":3630,"depth":1189,"text":3631},{"id":3771,"depth":45,"text":3772,"children":5164},[5165,5166],{"id":3775,"depth":1189,"text":3776},{"id":4803,"depth":1189,"text":4804},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":58,"description":37},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5173,"title":5174,"body":5175,"description":37,"extension":48,"meta":6275,"navigation":50,"path":6276,"seo":6277,"stem":6278,"__hash__":6279},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5176,"toc":6267},[5177,5180,5184,5192,5200,5203,5269,5273,5276,5352,5356,5359,5362,5365,5578,5582,5587,5651,5656,5723,5728,5819,5822,5927,5931,5934,5940,6084,6088,6091,6105,6108,6153,6156,6264],[10,5178,5174],{"id":5179},"_2函数",[65,5181,5183],{"id":5182},"_21函数概述","2.1函数概述",[77,5185,5186,5189],{},[80,5187,5188],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[80,5190,5191],{},"语法：",[114,5193,5198],{"className":5194,"code":5196,"language":5197,"meta":37},[5195],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[120,5199,5196],{"__ignoreMap":37},[14,5201,5202],{},"小案例",[114,5204,5206],{"className":116,"code":5205,"language":118,"meta":37,"style":37},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[120,5207,5208,5213,5237,5241,5258,5265],{"__ignoreMap":37},[123,5209,5210],{"class":125,"line":126},[123,5211,5212],{"class":192},"\u002F\u002Fnum1,num2形参\n",[123,5214,5215,5217,5220,5222,5224,5228,5230,5232,5235],{"class":125,"line":45},[123,5216,137],{"class":129},[123,5218,5219],{"class":1972}," add",[123,5221,134],{"class":133},[123,5223,137],{"class":129},[123,5225,5227],{"class":5226},"s4XuR"," num1",[123,5229,512],{"class":133},[123,5231,137],{"class":129},[123,5233,5234],{"class":5226}," num2",[123,5236,140],{"class":133},[123,5238,5239],{"class":125,"line":1189},[123,5240,1555],{"class":133},[123,5242,5243,5245,5248,5250,5253,5255],{"class":125,"line":1204},[123,5244,1994],{"class":129},[123,5246,5247],{"class":133}," sum",[123,5249,179],{"class":129},[123,5251,5252],{"class":133},"num1",[123,5254,615],{"class":129},[123,5256,5257],{"class":133},"num2;\n",[123,5259,5260,5262],{"class":125,"line":1210},[123,5261,4099],{"class":129},[123,5263,5264],{"class":133}," sum;\n",[123,5266,5267],{"class":125,"line":1224},[123,5268,1574],{"class":133},[65,5270,5272],{"id":5271},"_22函数调用","2.2函数调用",[14,5274,5275],{},"调用刚刚写的求和函数",[114,5277,5279],{"className":116,"code":5278,"language":118,"meta":37,"style":37},"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",[120,5280,5281,5289,5293,5298,5310,5322,5331,5336,5348],{"__ignoreMap":37},[123,5282,5283,5285,5287],{"class":125,"line":126},[123,5284,137],{"class":129},[123,5286,1982],{"class":1972},[123,5288,1985],{"class":133},[123,5290,5291],{"class":125,"line":45},[123,5292,1555],{"class":133},[123,5294,5295],{"class":125,"line":1189},[123,5296,5297],{"class":192},"    \u002F\u002Fa,b实参\n",[123,5299,5300,5302,5304,5306,5308],{"class":125,"line":1204},[123,5301,1994],{"class":129},[123,5303,1408],{"class":133},[123,5305,179],{"class":129},[123,5307,325],{"class":182},[123,5309,1300],{"class":133},[123,5311,5312,5314,5316,5318,5320],{"class":125,"line":1210},[123,5313,1994],{"class":129},[123,5315,2842],{"class":133},[123,5317,179],{"class":129},[123,5319,325],{"class":182},[123,5321,1300],{"class":133},[123,5323,5324,5326,5328],{"class":125,"line":1224},[123,5325,2021],{"class":133},[123,5327,1439],{"class":129},[123,5329,5330],{"class":133},"a,b;\n",[123,5332,5333],{"class":125,"line":1230},[123,5334,5335],{"class":192},"    \u002F\u002F调用函数时，实参值传给了形参\n",[123,5337,5338,5340,5342,5345],{"class":125,"line":1321},[123,5339,1560],{"class":133},[123,5341,1178],{"class":129},[123,5343,5344],{"class":1972},"add",[123,5346,5347],{"class":133},"(a,b);\n",[123,5349,5350],{"class":125,"line":1327},[123,5351,1574],{"class":133},[65,5353,5355],{"id":5354},"_23值传递","2.3值传递",[14,5357,5358],{},"值传递就是函数调用时实参将数值传给形参",[14,5360,5361],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5363,5364],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[114,5366,5368],{"className":116,"code":5367,"language":118,"meta":37,"style":37},"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",[120,5369,5370,5392,5396,5409,5426,5444,5455,5464,5473,5486,5502,5518,5527,5531,5539,5543,5555,5567,5574],{"__ignoreMap":37},[123,5371,5372,5375,5378,5380,5382,5384,5386,5388,5390],{"class":125,"line":126},[123,5373,5374],{"class":129},"void",[123,5376,5377],{"class":1972}," swap",[123,5379,134],{"class":133},[123,5381,137],{"class":129},[123,5383,5227],{"class":5226},[123,5385,512],{"class":133},[123,5387,137],{"class":129},[123,5389,5234],{"class":5226},[123,5391,140],{"class":133},[123,5393,5394],{"class":125,"line":45},[123,5395,1555],{"class":133},[123,5397,5398,5400,5402,5405,5407],{"class":125,"line":1189},[123,5399,1560],{"class":133},[123,5401,1178],{"class":129},[123,5403,5404],{"class":238},"\"交换前：\"",[123,5406,1178],{"class":129},[123,5408,1201],{"class":133},[123,5410,5411,5413,5415,5418,5420,5422,5424],{"class":125,"line":1204},[123,5412,1560],{"class":133},[123,5414,1178],{"class":129},[123,5416,5417],{"class":238},"\"num1=\"",[123,5419,1178],{"class":129},[123,5421,5252],{"class":133},[123,5423,1178],{"class":129},[123,5425,1201],{"class":133},[123,5427,5428,5430,5432,5435,5437,5440,5442],{"class":125,"line":1210},[123,5429,1560],{"class":133},[123,5431,1178],{"class":129},[123,5433,5434],{"class":238},"\"num2=\"",[123,5436,1178],{"class":129},[123,5438,5439],{"class":133},"num2",[123,5441,1178],{"class":129},[123,5443,1201],{"class":133},[123,5445,5446,5448,5450,5452],{"class":125,"line":1224},[123,5447,1994],{"class":129},[123,5449,4264],{"class":133},[123,5451,179],{"class":129},[123,5453,5454],{"class":133},"num1;\n",[123,5456,5457,5460,5462],{"class":125,"line":1230},[123,5458,5459],{"class":133},"    num1",[123,5461,179],{"class":129},[123,5463,5257],{"class":133},[123,5465,5466,5469,5471],{"class":125,"line":1321},[123,5467,5468],{"class":133},"    num2",[123,5470,179],{"class":129},[123,5472,4289],{"class":133},[123,5474,5475,5477,5479,5482,5484],{"class":125,"line":1327},[123,5476,1560],{"class":133},[123,5478,1178],{"class":129},[123,5480,5481],{"class":238},"\"交换后：\"",[123,5483,1178],{"class":129},[123,5485,1201],{"class":133},[123,5487,5488,5490,5492,5494,5496,5498,5500],{"class":125,"line":1339},[123,5489,1560],{"class":133},[123,5491,1178],{"class":129},[123,5493,5417],{"class":238},[123,5495,1178],{"class":129},[123,5497,5252],{"class":133},[123,5499,1178],{"class":129},[123,5501,1201],{"class":133},[123,5503,5504,5506,5508,5510,5512,5514,5516],{"class":125,"line":1621},[123,5505,1560],{"class":133},[123,5507,1178],{"class":129},[123,5509,5434],{"class":238},[123,5511,1178],{"class":129},[123,5513,5439],{"class":133},[123,5515,1178],{"class":129},[123,5517,1201],{"class":133},[123,5519,5520,5522,5524],{"class":125,"line":1626},[123,5521,4099],{"class":129},[123,5523,189],{"class":133},[123,5525,5526],{"class":192},"\u002F\u002F或者不写\n",[123,5528,5529],{"class":125,"line":1632},[123,5530,1574],{"class":133},[123,5532,5533,5535,5537],{"class":125,"line":1637},[123,5534,137],{"class":129},[123,5536,1982],{"class":1972},[123,5538,1985],{"class":133},[123,5540,5541],{"class":125,"line":1651},[123,5542,1555],{"class":133},[123,5544,5545,5547,5549,5551,5553],{"class":125,"line":1656},[123,5546,1994],{"class":129},[123,5548,1408],{"class":133},[123,5550,179],{"class":129},[123,5552,580],{"class":182},[123,5554,1300],{"class":133},[123,5556,5557,5559,5561,5563,5565],{"class":125,"line":1662},[123,5558,1994],{"class":129},[123,5560,2842],{"class":133},[123,5562,179],{"class":129},[123,5564,834],{"class":182},[123,5566,1300],{"class":133},[123,5568,5569,5572],{"class":125,"line":1683},[123,5570,5571],{"class":1972},"    swap",[123,5573,5347],{"class":133},[123,5575,5576],{"class":125,"line":1688},[123,5577,1574],{"class":133},[65,5579,5581],{"id":5580},"_24函数的常见形式","2.4函数的常见形式",[77,5583,5584],{},[80,5585,5586],{},"无参无返",[114,5588,5590],{"className":116,"code":5589,"language":118,"meta":37,"style":37},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[120,5591,5592,5601,5605,5618,5622,5630,5634,5639,5647],{"__ignoreMap":37},[123,5593,5594,5596,5599],{"class":125,"line":126},[123,5595,5374],{"class":129},[123,5597,5598],{"class":1972}," test01",[123,5600,1985],{"class":133},[123,5602,5603],{"class":125,"line":45},[123,5604,1555],{"class":133},[123,5606,5607,5609,5611,5614,5616],{"class":125,"line":1189},[123,5608,1560],{"class":133},[123,5610,1178],{"class":129},[123,5612,5613],{"class":238},"\"你好\"",[123,5615,1178],{"class":129},[123,5617,1201],{"class":133},[123,5619,5620],{"class":125,"line":1204},[123,5621,1574],{"class":133},[123,5623,5624,5626,5628],{"class":125,"line":1210},[123,5625,137],{"class":129},[123,5627,1982],{"class":1972},[123,5629,1985],{"class":133},[123,5631,5632],{"class":125,"line":1224},[123,5633,1555],{"class":133},[123,5635,5636],{"class":125,"line":1230},[123,5637,5638],{"class":192},"    \u002F\u002F函数调用\n",[123,5640,5641,5644],{"class":125,"line":1321},[123,5642,5643],{"class":1972},"    test01",[123,5645,5646],{"class":133},"();\n",[123,5648,5649],{"class":125,"line":1327},[123,5650,1574],{"class":133},[77,5652,5653],{"start":45},[80,5654,5655],{},"有参无返",[114,5657,5659],{"className":116,"code":5658,"language":118,"meta":37,"style":37},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[120,5660,5661,5676,5680,5692,5696,5704,5708,5719],{"__ignoreMap":37},[123,5662,5663,5665,5668,5670,5672,5674],{"class":125,"line":126},[123,5664,5374],{"class":129},[123,5666,5667],{"class":1972}," test02",[123,5669,134],{"class":133},[123,5671,137],{"class":129},[123,5673,1408],{"class":5226},[123,5675,140],{"class":133},[123,5677,5678],{"class":125,"line":45},[123,5679,1555],{"class":133},[123,5681,5682,5684,5686,5688,5690],{"class":125,"line":1189},[123,5683,1560],{"class":133},[123,5685,1178],{"class":129},[123,5687,5613],{"class":238},[123,5689,1178],{"class":129},[123,5691,1201],{"class":133},[123,5693,5694],{"class":125,"line":1204},[123,5695,1574],{"class":133},[123,5697,5698,5700,5702],{"class":125,"line":1210},[123,5699,137],{"class":129},[123,5701,1982],{"class":1972},[123,5703,1985],{"class":133},[123,5705,5706],{"class":125,"line":1224},[123,5707,1555],{"class":133},[123,5709,5710,5713,5715,5717],{"class":125,"line":1230},[123,5711,5712],{"class":1972},"    test02",[123,5714,134],{"class":133},[123,5716,445],{"class":182},[123,5718,2728],{"class":133},[123,5720,5721],{"class":125,"line":1321},[123,5722,1574],{"class":133},[77,5724,5725],{"start":1189},[80,5726,5727],{},"无参有返",[114,5729,5731],{"className":116,"code":5730,"language":118,"meta":37,"style":37},"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",[120,5732,5733,5742,5746,5758,5767,5771,5779,5783,5796,5815],{"__ignoreMap":37},[123,5734,5735,5737,5740],{"class":125,"line":126},[123,5736,137],{"class":129},[123,5738,5739],{"class":1972}," test03",[123,5741,1985],{"class":133},[123,5743,5744],{"class":125,"line":45},[123,5745,1555],{"class":133},[123,5747,5748,5750,5752,5754,5756],{"class":125,"line":1189},[123,5749,1560],{"class":133},[123,5751,1178],{"class":129},[123,5753,5613],{"class":238},[123,5755,1178],{"class":129},[123,5757,1201],{"class":133},[123,5759,5760,5762,5765],{"class":125,"line":1204},[123,5761,4099],{"class":129},[123,5763,5764],{"class":182}," 100",[123,5766,1300],{"class":133},[123,5768,5769],{"class":125,"line":1210},[123,5770,1574],{"class":133},[123,5772,5773,5775,5777],{"class":125,"line":1224},[123,5774,137],{"class":129},[123,5776,1982],{"class":1972},[123,5778,1985],{"class":133},[123,5780,5781],{"class":125,"line":1230},[123,5782,1555],{"class":133},[123,5784,5785,5787,5789,5791,5794],{"class":125,"line":1321},[123,5786,1994],{"class":129},[123,5788,5227],{"class":133},[123,5790,179],{"class":129},[123,5792,5793],{"class":1972},"test03",[123,5795,5646],{"class":133},[123,5797,5798,5800,5802,5804,5806,5808,5810,5812],{"class":125,"line":1327},[123,5799,1560],{"class":133},[123,5801,1178],{"class":129},[123,5803,5417],{"class":238},[123,5805,1178],{"class":129},[123,5807,5252],{"class":133},[123,5809,1178],{"class":129},[123,5811,1248],{"class":133},[123,5813,5814],{"class":192}," \u002F\u002F100\n",[123,5816,5817],{"class":125,"line":1339},[123,5818,1574],{"class":133},[14,5820,5821],{},"4.有参有返",[114,5823,5825],{"className":116,"code":5824,"language":118,"meta":37,"style":37},"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",[120,5826,5827,5842,5846,5859,5865,5869,5878,5882,5894,5908,5923],{"__ignoreMap":37},[123,5828,5829,5831,5834,5836,5838,5840],{"class":125,"line":126},[123,5830,137],{"class":129},[123,5832,5833],{"class":1972}," test04",[123,5835,134],{"class":133},[123,5837,137],{"class":129},[123,5839,1408],{"class":5226},[123,5841,140],{"class":133},[123,5843,5844],{"class":125,"line":45},[123,5845,1555],{"class":133},[123,5847,5848,5850,5852,5855,5857],{"class":125,"line":1189},[123,5849,1560],{"class":133},[123,5851,1178],{"class":129},[123,5853,5854],{"class":238},"\"hello\"",[123,5856,1178],{"class":129},[123,5858,1201],{"class":133},[123,5860,5861,5863],{"class":125,"line":1204},[123,5862,4099],{"class":129},[123,5864,1442],{"class":133},[123,5866,5867],{"class":125,"line":1210},[123,5868,1574],{"class":133},[123,5870,5871,5873,5876],{"class":125,"line":1224},[123,5872,137],{"class":129},[123,5874,5875],{"class":1972}," mian",[123,5877,1985],{"class":133},[123,5879,5880],{"class":125,"line":1230},[123,5881,1555],{"class":133},[123,5883,5884,5886,5888,5890,5892],{"class":125,"line":1321},[123,5885,1994],{"class":129},[123,5887,2842],{"class":133},[123,5889,179],{"class":129},[123,5891,351],{"class":182},[123,5893,1300],{"class":133},[123,5895,5896,5898,5900,5902,5905],{"class":125,"line":1327},[123,5897,1994],{"class":129},[123,5899,2858],{"class":133},[123,5901,179],{"class":129},[123,5903,5904],{"class":1972},"test04",[123,5906,5907],{"class":133},"(b);\n",[123,5909,5910,5912,5914,5916,5918,5920],{"class":125,"line":1339},[123,5911,1560],{"class":133},[123,5913,1178],{"class":129},[123,5915,422],{"class":133},[123,5917,1178],{"class":129},[123,5919,1248],{"class":133},[123,5921,5922],{"class":192}," \u002F\u002F1\n",[123,5924,5925],{"class":125,"line":1621},[123,5926,1574],{"class":133},[65,5928,5930],{"id":5929},"_25函数的声明","2.5函数的声明",[14,5932,5933],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,5935,5936,5937],{},"函数的",[283,5938,5939],{},"声明可以多次，但是函数的定义只能有一次",[114,5941,5943],{"className":116,"code":5942,"language":118,"meta":37,"style":37},"\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",[120,5944,5945,5950,5955,5980,5989,5993,6005,6017,6033,6037,6057,6061,6080],{"__ignoreMap":37},[123,5946,5947],{"class":125,"line":126},[123,5948,5949],{"class":192},"\u002F\u002F函数声明\n",[123,5951,5952],{"class":125,"line":45},[123,5953,5954],{"class":192},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[123,5956,5957,5959,5962,5964,5966,5968,5970,5972,5974,5977],{"class":125,"line":1189},[123,5958,137],{"class":129},[123,5960,5961],{"class":1972}," max",[123,5963,134],{"class":133},[123,5965,137],{"class":129},[123,5967,1408],{"class":5226},[123,5969,512],{"class":133},[123,5971,137],{"class":129},[123,5973,2842],{"class":5226},[123,5975,5976],{"class":133},");",[123,5978,5979],{"class":192},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[123,5981,5982,5984,5986],{"class":125,"line":1204},[123,5983,137],{"class":129},[123,5985,1982],{"class":1972},[123,5987,5988],{"class":133},"() \n",[123,5990,5991],{"class":125,"line":1210},[123,5992,1555],{"class":133},[123,5994,5995,5997,5999,6001,6003],{"class":125,"line":1224},[123,5996,1994],{"class":129},[123,5998,1408],{"class":133},[123,6000,179],{"class":129},[123,6002,580],{"class":182},[123,6004,1300],{"class":133},[123,6006,6007,6009,6011,6013,6015],{"class":125,"line":1230},[123,6008,1994],{"class":129},[123,6010,2842],{"class":133},[123,6012,179],{"class":129},[123,6014,834],{"class":182},[123,6016,1300],{"class":133},[123,6018,6019,6021,6023,6026,6029,6031],{"class":125,"line":1321},[123,6020,1560],{"class":133},[123,6022,1178],{"class":129},[123,6024,6025],{"class":1972},"max",[123,6027,6028],{"class":133},"(a,b)",[123,6030,1178],{"class":129},[123,6032,1201],{"class":133},[123,6034,6035],{"class":125,"line":1327},[123,6036,1574],{"class":133},[123,6038,6039,6041,6043,6045,6047,6049,6051,6053,6055],{"class":125,"line":1339},[123,6040,137],{"class":129},[123,6042,5961],{"class":1972},[123,6044,134],{"class":133},[123,6046,137],{"class":129},[123,6048,1408],{"class":5226},[123,6050,512],{"class":133},[123,6052,137],{"class":129},[123,6054,2842],{"class":5226},[123,6056,140],{"class":133},[123,6058,6059],{"class":125,"line":1621},[123,6060,1555],{"class":133},[123,6062,6063,6065,6067,6069,6071,6073,6075,6077],{"class":125,"line":1626},[123,6064,4099],{"class":129},[123,6066,1408],{"class":133},[123,6068,1094],{"class":129},[123,6070,397],{"class":133},[123,6072,1120],{"class":129},[123,6074,372],{"class":133},[123,6076,993],{"class":129},[123,6078,6079],{"class":133},"b;\n",[123,6081,6082],{"class":125,"line":1632},[123,6083,1574],{"class":133},[65,6085,6087],{"id":6086},"_26函数的分文件编写","2.6函数的分文件编写",[14,6089,6090],{},"4个步骤：",[1141,6092,6093,6096,6099,6102],{},[80,6094,6095],{},"1.创建后缀名为.h的头文件",[80,6097,6098],{},"2.创建后缀名为.cpp的源文件",[80,6100,6101],{},"3.在头文件中写函数的定义",[80,6103,6104],{},"4.在源文件中写函数的定义\n示例：",[14,6106,6107],{},"头文件：swap.h",[114,6109,6111],{"className":116,"code":6110,"language":118,"meta":37,"style":37},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[120,6112,6113,6119,6129,6133],{"__ignoreMap":37},[123,6114,6115,6117],{"class":125,"line":126},[123,6116,1958],{"class":129},[123,6118,1961],{"class":238},[123,6120,6121,6123,6125,6127],{"class":125,"line":45},[123,6122,1966],{"class":129},[123,6124,1969],{"class":129},[123,6126,1973],{"class":1972},[123,6128,1300],{"class":133},[123,6130,6131],{"class":125,"line":1189},[123,6132,5949],{"class":192},[123,6134,6135,6137,6139,6141,6143,6145,6147,6149,6151],{"class":125,"line":1204},[123,6136,5374],{"class":129},[123,6138,5377],{"class":1972},[123,6140,134],{"class":133},[123,6142,137],{"class":129},[123,6144,1408],{"class":5226},[123,6146,512],{"class":133},[123,6148,137],{"class":129},[123,6150,2842],{"class":5226},[123,6152,2728],{"class":133},[14,6154,6155],{},"源文件：swap.cpp",[114,6157,6159],{"className":116,"code":6158,"language":118,"meta":37,"style":37},"#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",[120,6160,6161,6168,6173,6193,6197,6208,6217,6226,6243,6260],{"__ignoreMap":37},[123,6162,6163,6165],{"class":125,"line":126},[123,6164,1958],{"class":129},[123,6166,6167],{"class":238}," \"swap.h\"\n",[123,6169,6170],{"class":125,"line":45},[123,6171,6172],{"class":192},"\u002F\u002F函数的定义\n",[123,6174,6175,6177,6179,6181,6183,6185,6187,6189,6191],{"class":125,"line":1189},[123,6176,5374],{"class":129},[123,6178,5377],{"class":1972},[123,6180,134],{"class":133},[123,6182,137],{"class":129},[123,6184,1408],{"class":5226},[123,6186,512],{"class":133},[123,6188,137],{"class":129},[123,6190,2842],{"class":5226},[123,6192,140],{"class":133},[123,6194,6195],{"class":125,"line":1204},[123,6196,1555],{"class":133},[123,6198,6199,6201,6203,6205],{"class":125,"line":1210},[123,6200,1994],{"class":129},[123,6202,4264],{"class":133},[123,6204,179],{"class":129},[123,6206,6207],{"class":133},"a;\n",[123,6209,6210,6213,6215],{"class":125,"line":1224},[123,6211,6212],{"class":133},"    a",[123,6214,179],{"class":129},[123,6216,6079],{"class":133},[123,6218,6219,6222,6224],{"class":125,"line":1230},[123,6220,6221],{"class":133},"    b",[123,6223,179],{"class":129},[123,6225,4289],{"class":133},[123,6227,6228,6230,6232,6235,6237,6239,6241],{"class":125,"line":1321},[123,6229,1560],{"class":133},[123,6231,1178],{"class":129},[123,6233,6234],{"class":238},"\"a=\"",[123,6236,1178],{"class":129},[123,6238,372],{"class":133},[123,6240,1178],{"class":129},[123,6242,1201],{"class":133},[123,6244,6245,6247,6249,6252,6254,6256,6258],{"class":125,"line":1327},[123,6246,1560],{"class":133},[123,6248,1178],{"class":129},[123,6250,6251],{"class":238},"\"b=\"",[123,6253,1178],{"class":129},[123,6255,397],{"class":133},[123,6257,1178],{"class":129},[123,6259,1201],{"class":133},[123,6261,6262],{"class":125,"line":1339},[123,6263,1574],{"class":133},[5136,6265,6266],{},"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":37,"searchDepth":45,"depth":45,"links":6268},[6269,6270,6271,6272,6273,6274],{"id":5182,"depth":45,"text":5183},{"id":5271,"depth":45,"text":5272},{"id":5354,"depth":45,"text":5355},{"id":5580,"depth":45,"text":5581},{"id":5929,"depth":45,"text":5930},{"id":6086,"depth":45,"text":6087},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5174,"description":37},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6281,"title":6282,"body":6283,"description":6290,"extension":48,"meta":7695,"navigation":50,"path":7696,"seo":7697,"stem":7698,"__hash__":7699},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6284,"toc":7685},[6285,6288,6291,6295,6457,6461,6464,6467,6470,6473,6613,6617,6620,6623,6626,6691,6695,6700,6767,6770,6774,6777,6788,6793,6813,6816,6821,6840,6843,6847,6866,6869,6873,7108,7112,7115,7118,7121,7283,7286,7290,7293,7299,7682],[10,6286,6282],{"id":6287},"_3指针",[14,6289,6290],{},"通过指针保存一个地址，指针就是个地址",[65,6292,6294],{"id":6293},"_31定义指针","3.1定义指针",[114,6296,6298],{"className":116,"code":6297,"language":118,"meta":37,"style":37},"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",[120,6299,6300,6308,6312,6317,6329,6334,6342,6352,6370,6390,6394,6399,6404,6409,6423,6439,6453],{"__ignoreMap":37},[123,6301,6302,6304,6306],{"class":125,"line":126},[123,6303,137],{"class":129},[123,6305,1982],{"class":1972},[123,6307,1985],{"class":133},[123,6309,6310],{"class":125,"line":45},[123,6311,1555],{"class":133},[123,6313,6314],{"class":125,"line":1189},[123,6315,6316],{"class":192},"    \u002F\u002F1.定义指针\n",[123,6318,6319,6321,6323,6325,6327],{"class":125,"line":1204},[123,6320,1994],{"class":129},[123,6322,1408],{"class":133},[123,6324,179],{"class":129},[123,6326,580],{"class":182},[123,6328,1300],{"class":133},[123,6330,6331],{"class":125,"line":1210},[123,6332,6333],{"class":192},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[123,6335,6336,6339],{"class":125,"line":1224},[123,6337,6338],{"class":129},"    int*",[123,6340,6341],{"class":133},"p;\n",[123,6343,6344,6347,6350],{"class":125,"line":1230},[123,6345,6346],{"class":133},"    p",[123,6348,6349],{"class":129},"=&",[123,6351,6207],{"class":133},[123,6353,6354,6356,6358,6361,6364,6366,6368],{"class":125,"line":1321},[123,6355,1560],{"class":133},[123,6357,1178],{"class":129},[123,6359,6360],{"class":238},"\"a的地址为：\"",[123,6362,6363],{"class":129},"\u003C\u003C&",[123,6365,372],{"class":133},[123,6367,1178],{"class":129},[123,6369,1201],{"class":133},[123,6371,6372,6374,6376,6379,6381,6383,6385,6387],{"class":125,"line":1327},[123,6373,1560],{"class":133},[123,6375,1178],{"class":129},[123,6377,6378],{"class":238},"\"指针p为：\"",[123,6380,1178],{"class":129},[123,6382,14],{"class":133},[123,6384,1178],{"class":129},[123,6386,1248],{"class":133},[123,6388,6389],{"class":192},"\u002F\u002F指针p表示的就是a的地址\n",[123,6391,6392],{"class":125,"line":1339},[123,6393,2409],{"emptyLinePlaceholder":50},[123,6395,6396],{"class":125,"line":1621},[123,6397,6398],{"class":192},"    \u002F\u002F2.使用指针\n",[123,6400,6401],{"class":125,"line":1626},[123,6402,6403],{"class":192},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[123,6405,6406],{"class":125,"line":1632},[123,6407,6408],{"class":192},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[123,6410,6411,6414,6416,6418,6421],{"class":125,"line":1637},[123,6412,6413],{"class":129},"    *",[123,6415,14],{"class":133},[123,6417,179],{"class":129},[123,6419,6420],{"class":182},"1000",[123,6422,1300],{"class":133},[123,6424,6425,6427,6430,6432,6434,6436],{"class":125,"line":1651},[123,6426,1560],{"class":133},[123,6428,6429],{"class":129},"\u003C\u003C*",[123,6431,14],{"class":133},[123,6433,1178],{"class":129},[123,6435,1248],{"class":133},[123,6437,6438],{"class":192},"\u002F\u002F1000\n",[123,6440,6441,6443,6445,6447,6449,6451],{"class":125,"line":1656},[123,6442,1560],{"class":133},[123,6444,1178],{"class":129},[123,6446,372],{"class":133},[123,6448,1178],{"class":129},[123,6450,1248],{"class":133},[123,6452,6438],{"class":192},[123,6454,6455],{"class":125,"line":1662},[123,6456,1574],{"class":133},[65,6458,6460],{"id":6459},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6462,6463],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6465,6466],{},"在32位操作系统下：占用4个字节空间",[14,6468,6469],{},"在64位操作系统下：占用8个字节空间",[14,6471,6472],{},"上方是不管啥数据类型的",[114,6474,6476],{"className":116,"code":6475,"language":118,"meta":37,"style":37},"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",[120,6477,6478,6486,6490,6495,6507,6512,6517,6522,6535,6557,6583,6609],{"__ignoreMap":37},[123,6479,6480,6482,6484],{"class":125,"line":126},[123,6481,137],{"class":129},[123,6483,1982],{"class":1972},[123,6485,1985],{"class":133},[123,6487,6488],{"class":125,"line":45},[123,6489,1555],{"class":133},[123,6491,6492],{"class":125,"line":1189},[123,6493,6494],{"class":192},"    \u002F\u002F指针所占内存空间\n",[123,6496,6497,6499,6501,6503,6505],{"class":125,"line":1204},[123,6498,1994],{"class":129},[123,6500,1408],{"class":133},[123,6502,179],{"class":129},[123,6504,580],{"class":182},[123,6506,1300],{"class":133},[123,6508,6509],{"class":125,"line":1210},[123,6510,6511],{"class":192},"    \u002F\u002Fint *p;\n",[123,6513,6514],{"class":125,"line":1224},[123,6515,6516],{"class":192},"    \u002F\u002Fp=&a;\n",[123,6518,6519],{"class":125,"line":1230},[123,6520,6521],{"class":192},"    \u002F\u002F上述可以写为以下：\n",[123,6523,6524,6526,6529,6531,6533],{"class":125,"line":1321},[123,6525,1994],{"class":129},[123,6527,6528],{"class":129}," *",[123,6530,14],{"class":133},[123,6532,6349],{"class":129},[123,6534,6207],{"class":133},[123,6536,6537,6540,6542,6545,6547,6550,6552,6554],{"class":125,"line":1327},[123,6538,6539],{"class":133},"    cout ",[123,6541,1178],{"class":129},[123,6543,6544],{"class":238},"\"sizeof(int *)\"",[123,6546,1382],{"class":129},[123,6548,6549],{"class":133},"(p)",[123,6551,1178],{"class":129},[123,6553,1248],{"class":133},[123,6555,6556],{"class":192},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[123,6558,6559,6561,6563,6565,6567,6569,6571,6573,6575,6577,6580],{"class":125,"line":1339},[123,6560,6539],{"class":133},[123,6562,1178],{"class":129},[123,6564,6544],{"class":238},[123,6566,1382],{"class":129},[123,6568,134],{"class":133},[123,6570,137],{"class":129},[123,6572,6528],{"class":129},[123,6574,563],{"class":133},[123,6576,1178],{"class":129},[123,6578,6579],{"class":133},"endl",[123,6581,6582],{"class":192},"  \u002F\u002F4字节(32位的话)\n",[123,6584,6585,6587,6589,6592,6594,6596,6598,6600,6602,6604,6606],{"class":125,"line":1621},[123,6586,6539],{"class":133},[123,6588,1178],{"class":129},[123,6590,6591],{"class":238},"\"sizeof(char *)\"",[123,6593,1382],{"class":129},[123,6595,134],{"class":133},[123,6597,230],{"class":129},[123,6599,6528],{"class":129},[123,6601,563],{"class":133},[123,6603,1178],{"class":129},[123,6605,1248],{"class":133},[123,6607,6608],{"class":192}," \u002F\u002F4字节(32位的话)\n",[123,6610,6611],{"class":125,"line":1626},[123,6612,1574],{"class":133},[65,6614,6616],{"id":6615},"_33空指针","3.3空指针",[14,6618,6619],{},"空指针：指针变量指向内存中编号为0的空间",[14,6621,6622],{},"用途：初始化指针变量",[14,6624,6625],{},"注意：空指针指向的内存是不可以访问的",[114,6627,6629],{"className":116,"code":6628,"language":118,"meta":37,"style":37},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[120,6630,6631,6639,6643,6648,6662,6667,6682,6687],{"__ignoreMap":37},[123,6632,6633,6635,6637],{"class":125,"line":126},[123,6634,137],{"class":129},[123,6636,1982],{"class":1972},[123,6638,1985],{"class":133},[123,6640,6641],{"class":125,"line":45},[123,6642,1555],{"class":133},[123,6644,6645],{"class":125,"line":1189},[123,6646,6647],{"class":192},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[123,6649,6650,6652,6654,6656,6658,6660],{"class":125,"line":1204},[123,6651,1994],{"class":129},[123,6653,6528],{"class":129},[123,6655,14],{"class":133},[123,6657,179],{"class":129},[123,6659,2401],{"class":182},[123,6661,1300],{"class":133},[123,6663,6664],{"class":125,"line":1210},[123,6665,6666],{"class":192},"    \u002F\u002F2.空指针不能进行访问\n",[123,6668,6669,6671,6673,6675,6677,6679],{"class":125,"line":1224},[123,6670,6413],{"class":129},[123,6672,14],{"class":133},[123,6674,179],{"class":129},[123,6676,445],{"class":182},[123,6678,189],{"class":133},[123,6680,6681],{"class":192},"\u002F\u002F直接报错，压根不能访问\n",[123,6683,6684],{"class":125,"line":1230},[123,6685,6686],{"class":192},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[123,6688,6689],{"class":125,"line":1321},[123,6690,1574],{"class":133},[65,6692,6694],{"id":6693},"_34野指针","3.4野指针",[14,6696,6697],{},[283,6698,6699],{},"指针变量指向非法的内存空间",[114,6701,6703],{"className":116,"code":6702,"language":118,"meta":37,"style":37},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[120,6704,6705,6713,6717,6746,6751,6763],{"__ignoreMap":37},[123,6706,6707,6709,6711],{"class":125,"line":126},[123,6708,137],{"class":129},[123,6710,1982],{"class":1972},[123,6712,1985],{"class":133},[123,6714,6715],{"class":125,"line":45},[123,6716,1555],{"class":133},[123,6718,6719,6721,6723,6725,6727,6729,6731,6733,6735,6738,6741,6743],{"class":125,"line":1189},[123,6720,1994],{"class":129},[123,6722,6528],{"class":129},[123,6724,14],{"class":133},[123,6726,179],{"class":129},[123,6728,134],{"class":133},[123,6730,137],{"class":129},[123,6732,6528],{"class":129},[123,6734,563],{"class":133},[123,6736,6737],{"class":129},"0x",[123,6739,6740],{"class":182},"1100",[123,6742,189],{"class":133},[123,6744,6745],{"class":192}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[123,6747,6748],{"class":125,"line":1204},[123,6749,6750],{"class":192},"    \u002F\u002F访问野指针报错\n",[123,6752,6753,6755,6757,6759,6761],{"class":125,"line":1210},[123,6754,1560],{"class":133},[123,6756,6429],{"class":129},[123,6758,14],{"class":133},[123,6760,1178],{"class":129},[123,6762,1201],{"class":133},[123,6764,6765],{"class":125,"line":1224},[123,6766,1574],{"class":133},[14,6768,6769],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[65,6771,6773],{"id":6772},"_35const修饰指针","3.5const修饰指针",[14,6775,6776],{},"三种情况：",[1141,6778,6779,6782,6785],{},[80,6780,6781],{},"const修饰指针 常量指针",[80,6783,6784],{},"const修饰常量 指针常量",[80,6786,6787],{},"const即修饰指针，又修饰常量",[77,6789,6790],{},[80,6791,6792],{},"常量指针",[114,6794,6796],{"className":116,"code":6795,"language":118,"meta":37,"style":37},"const int *p=&a;\n",[120,6797,6798],{"__ignoreMap":37},[123,6799,6800,6803,6805,6807,6809,6811],{"class":125,"line":126},[123,6801,6802],{"class":129},"const",[123,6804,2391],{"class":129},[123,6806,6528],{"class":129},[123,6808,14],{"class":133},[123,6810,6349],{"class":129},[123,6812,6207],{"class":133},[14,6814,6815],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[77,6817,6818],{"start":45},[80,6819,6820],{},"指针常量",[114,6822,6824],{"className":116,"code":6823,"language":118,"meta":37,"style":37},"int *const p=&a;\n",[120,6825,6826],{"__ignoreMap":37},[123,6827,6828,6830,6833,6836,6838],{"class":125,"line":126},[123,6829,137],{"class":129},[123,6831,6832],{"class":129}," *const",[123,6834,6835],{"class":133}," p",[123,6837,6349],{"class":129},[123,6839,6207],{"class":133},[14,6841,6842],{},"指针的指向不可以改，指针指向的值可以改",[77,6844,6845],{"start":1189},[80,6846,6787],{},[114,6848,6850],{"className":116,"code":6849,"language":118,"meta":37,"style":37},"const int *const p=&a;\n",[120,6851,6852],{"__ignoreMap":37},[123,6853,6854,6856,6858,6860,6862,6864],{"class":125,"line":126},[123,6855,6802],{"class":129},[123,6857,2391],{"class":129},[123,6859,6832],{"class":129},[123,6861,6835],{"class":133},[123,6863,6349],{"class":129},[123,6865,6207],{"class":133},[14,6867,6868],{},"指针的指向和指针指向的值都不可以改变",[65,6870,6872],{"id":6871},"_36指针和数组","3.6指针和数组",[114,6874,6876],{"className":116,"code":6875,"language":118,"meta":37,"style":37},"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",[120,6877,6878,6886,6890,6895,6949,6970,6986,7002,7013,7030,7035,7049,7075,7079,7091,7100,7104],{"__ignoreMap":37},[123,6879,6880,6882,6884],{"class":125,"line":126},[123,6881,137],{"class":129},[123,6883,1982],{"class":1972},[123,6885,1985],{"class":133},[123,6887,6888],{"class":125,"line":45},[123,6889,1555],{"class":133},[123,6891,6892],{"class":125,"line":1189},[123,6893,6894],{"class":192},"    \u002F\u002F利用指针访问数组中的元素\n",[123,6896,6897,6899,6901,6903,6905,6907,6909,6911,6913,6915,6917,6919,6921,6923,6925,6927,6929,6931,6933,6935,6937,6939,6941,6943,6945,6947],{"class":125,"line":1204},[123,6898,1994],{"class":129},[123,6900,3971],{"class":133},[123,6902,580],{"class":182},[123,6904,1074],{"class":133},[123,6906,179],{"class":129},[123,6908,1030],{"class":133},[123,6910,351],{"class":182},[123,6912,512],{"class":133},[123,6914,211],{"class":182},[123,6916,512],{"class":133},[123,6918,205],{"class":182},[123,6920,512],{"class":133},[123,6922,427],{"class":182},[123,6924,512],{"class":133},[123,6926,453],{"class":182},[123,6928,512],{"class":133},[123,6930,478],{"class":182},[123,6932,512],{"class":133},[123,6934,503],{"class":182},[123,6936,512],{"class":133},[123,6938,529],{"class":182},[123,6940,512],{"class":133},[123,6942,554],{"class":182},[123,6944,512],{"class":133},[123,6946,580],{"class":182},[123,6948,4004],{"class":133},[123,6950,6951,6953,6955,6958,6960,6962,6964,6966,6968],{"class":125,"line":1210},[123,6952,1560],{"class":133},[123,6954,1178],{"class":129},[123,6956,6957],{"class":238},"\"数组的第一个元素为：\"",[123,6959,1178],{"class":129},[123,6961,3915],{"class":133},[123,6963,325],{"class":182},[123,6965,1074],{"class":133},[123,6967,1178],{"class":129},[123,6969,1201],{"class":133},[123,6971,6972,6974,6976,6978,6980,6983],{"class":125,"line":1224},[123,6973,1994],{"class":129},[123,6975,6528],{"class":129},[123,6977,14],{"class":133},[123,6979,179],{"class":129},[123,6981,6982],{"class":133},"arr;",[123,6984,6985],{"class":192},"\u002F\u002F注意数才要加取地址符号&\n",[123,6987,6988,6990,6992,6994,6996,6998,7000],{"class":125,"line":1230},[123,6989,1560],{"class":133},[123,6991,1178],{"class":129},[123,6993,6957],{"class":238},[123,6995,6429],{"class":129},[123,6997,14],{"class":133},[123,6999,1178],{"class":129},[123,7001,1201],{"class":133},[123,7003,7004,7006,7008,7010],{"class":125,"line":1321},[123,7005,6346],{"class":133},[123,7007,2301],{"class":129},[123,7009,189],{"class":133},[123,7011,7012],{"class":192}," \u002F\u002F让指针向后偏移4个字节\n",[123,7014,7015,7017,7019,7022,7024,7026,7028],{"class":125,"line":1327},[123,7016,1560],{"class":133},[123,7018,1178],{"class":129},[123,7020,7021],{"class":238},"\"数组的第二个元素为：\"",[123,7023,6429],{"class":129},[123,7025,14],{"class":133},[123,7027,1178],{"class":129},[123,7029,1201],{"class":133},[123,7031,7032],{"class":125,"line":1339},[123,7033,7034],{"class":192},"    \u002F\u002F利用指针遍历数组\n",[123,7036,7037,7039,7041,7044,7046],{"class":125,"line":1621},[123,7038,1994],{"class":129},[123,7040,6528],{"class":129},[123,7042,7043],{"class":133},"p2",[123,7045,179],{"class":129},[123,7047,7048],{"class":133},"arr;\n",[123,7050,7051,7053,7055,7057,7059,7061,7063,7065,7067,7069,7071,7073],{"class":125,"line":1626},[123,7052,3210],{"class":129},[123,7054,1667],{"class":133},[123,7056,137],{"class":129},[123,7058,3041],{"class":133},[123,7060,179],{"class":129},[123,7062,325],{"class":182},[123,7064,3048],{"class":133},[123,7066,1044],{"class":129},[123,7068,580],{"class":182},[123,7070,3048],{"class":133},[123,7072,2301],{"class":129},[123,7074,140],{"class":133},[123,7076,7077],{"class":125,"line":1632},[123,7078,2039],{"class":133},[123,7080,7081,7083,7085,7087,7089],{"class":125,"line":1637},[123,7082,3460],{"class":133},[123,7084,6429],{"class":129},[123,7086,7043],{"class":133},[123,7088,1178],{"class":129},[123,7090,1201],{"class":133},[123,7092,7093,7096,7098],{"class":125,"line":1651},[123,7094,7095],{"class":133},"        p2",[123,7097,2301],{"class":129},[123,7099,1300],{"class":133},[123,7101,7102],{"class":125,"line":1656},[123,7103,2196],{"class":133},[123,7105,7106],{"class":125,"line":1662},[123,7107,1574],{"class":133},[65,7109,7111],{"id":7110},"_37指针和函数","3.7指针和函数",[14,7113,7114],{},"利用指针做函数参数，可以修改实参的值",[14,7116,7117],{},"值传递：只改变形参，不改变实参",[14,7119,7120],{},"地址传递：",[114,7122,7124],{"className":116,"code":7123,"language":118,"meta":37,"style":37},"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",[120,7125,7126,7151,7155,7167,7178,7188,7192,7200,7204,7216,7228,7233,7249,7264,7279],{"__ignoreMap":37},[123,7127,7128,7130,7132,7134,7136,7138,7141,7143,7145,7147,7149],{"class":125,"line":126},[123,7129,5374],{"class":129},[123,7131,5377],{"class":1972},[123,7133,134],{"class":133},[123,7135,137],{"class":129},[123,7137,6528],{"class":129},[123,7139,7140],{"class":5226},"p1",[123,7142,512],{"class":133},[123,7144,137],{"class":129},[123,7146,6528],{"class":129},[123,7148,7043],{"class":5226},[123,7150,140],{"class":133},[123,7152,7153],{"class":125,"line":45},[123,7154,1555],{"class":133},[123,7156,7157,7159,7161,7164],{"class":125,"line":1189},[123,7158,1994],{"class":129},[123,7160,4264],{"class":133},[123,7162,7163],{"class":129},"=*",[123,7165,7166],{"class":133},"p1;\n",[123,7168,7169,7171,7173,7175],{"class":125,"line":1204},[123,7170,6413],{"class":129},[123,7172,7140],{"class":133},[123,7174,7163],{"class":129},[123,7176,7177],{"class":133},"p2;\n",[123,7179,7180,7182,7184,7186],{"class":125,"line":1210},[123,7181,6413],{"class":129},[123,7183,7043],{"class":133},[123,7185,179],{"class":129},[123,7187,4289],{"class":133},[123,7189,7190],{"class":125,"line":1224},[123,7191,1574],{"class":133},[123,7193,7194,7196,7198],{"class":125,"line":1230},[123,7195,137],{"class":129},[123,7197,1982],{"class":1972},[123,7199,1985],{"class":133},[123,7201,7202],{"class":125,"line":1321},[123,7203,1555],{"class":133},[123,7205,7206,7208,7210,7212,7214],{"class":125,"line":1327},[123,7207,1994],{"class":129},[123,7209,1408],{"class":133},[123,7211,179],{"class":129},[123,7213,580],{"class":182},[123,7215,1300],{"class":133},[123,7217,7218,7220,7222,7224,7226],{"class":125,"line":1339},[123,7219,1994],{"class":129},[123,7221,2842],{"class":133},[123,7223,179],{"class":129},[123,7225,834],{"class":182},[123,7227,1300],{"class":133},[123,7229,7230],{"class":125,"line":1621},[123,7231,7232],{"class":192},"    \u002F\u002F地址传递\n",[123,7234,7235,7237,7239,7241,7244,7246],{"class":125,"line":1626},[123,7236,5571],{"class":1972},[123,7238,134],{"class":133},[123,7240,487],{"class":129},[123,7242,7243],{"class":133},"a,",[123,7245,487],{"class":129},[123,7247,7248],{"class":133},"b);\n",[123,7250,7251,7253,7255,7257,7259,7261],{"class":125,"line":1632},[123,7252,1560],{"class":133},[123,7254,1178],{"class":129},[123,7256,372],{"class":133},[123,7258,1178],{"class":129},[123,7260,1248],{"class":133},[123,7262,7263],{"class":192},"\u002F\u002F20\n",[123,7265,7266,7268,7270,7272,7274,7276],{"class":125,"line":1637},[123,7267,1560],{"class":133},[123,7269,1178],{"class":129},[123,7271,397],{"class":133},[123,7273,1178],{"class":129},[123,7275,1248],{"class":133},[123,7277,7278],{"class":192},"\u002F\u002F10\n",[123,7280,7281],{"class":125,"line":1651},[123,7282,1574],{"class":133},[14,7284,7285],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[65,7287,7289],{"id":7288},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7291,7292],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7294,7295,7296,7298],{},"例如数组：int arr",[123,7297,580],{},"={4,3,6,9,1,2,10,8,7,5}",[114,7300,7302],{"className":116,"code":7301,"language":118,"meta":37,"style":37},"#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",[120,7303,7304,7310,7320,7344,7348,7379,7383,7417,7421,7439,7443,7454,7469,7484,7488,7492,7496,7500,7504,7512,7516,7521,7575,7587,7599,7604,7612,7616,7621,7646,7650,7665,7674,7678],{"__ignoreMap":37},[123,7305,7306,7308],{"class":125,"line":126},[123,7307,1958],{"class":129},[123,7309,1961],{"class":238},[123,7311,7312,7314,7316,7318],{"class":125,"line":45},[123,7313,1966],{"class":129},[123,7315,1969],{"class":129},[123,7317,1973],{"class":1972},[123,7319,1300],{"class":133},[123,7321,7322,7324,7327,7329,7331,7333,7335,7337,7339,7342],{"class":125,"line":1189},[123,7323,5374],{"class":129},[123,7325,7326],{"class":1972}," bubbleSort",[123,7328,134],{"class":133},[123,7330,137],{"class":129},[123,7332,6528],{"class":129},[123,7334,14],{"class":5226},[123,7336,512],{"class":133},[123,7338,137],{"class":129},[123,7340,7341],{"class":5226}," len",[123,7343,140],{"class":133},[123,7345,7346],{"class":125,"line":1204},[123,7347,1555],{"class":133},[123,7349,7350,7352,7354,7356,7358,7360,7362,7364,7366,7369,7371,7373,7375,7377],{"class":125,"line":1210},[123,7351,3210],{"class":129},[123,7353,134],{"class":133},[123,7355,137],{"class":129},[123,7357,3041],{"class":133},[123,7359,179],{"class":129},[123,7361,325],{"class":182},[123,7363,3048],{"class":133},[123,7365,1044],{"class":129},[123,7367,7368],{"class":133},"len",[123,7370,666],{"class":129},[123,7372,351],{"class":182},[123,7374,3048],{"class":133},[123,7376,2301],{"class":129},[123,7378,140],{"class":133},[123,7380,7381],{"class":125,"line":1224},[123,7382,2039],{"class":133},[123,7384,7385,7387,7389,7391,7393,7395,7397,7399,7401,7403,7405,7407,7409,7411,7413,7415],{"class":125,"line":1230},[123,7386,3412],{"class":129},[123,7388,134],{"class":133},[123,7390,137],{"class":129},[123,7392,3419],{"class":133},[123,7394,179],{"class":129},[123,7396,325],{"class":182},[123,7398,3426],{"class":133},[123,7400,1044],{"class":129},[123,7402,7368],{"class":133},[123,7404,666],{"class":129},[123,7406,575],{"class":133},[123,7408,666],{"class":129},[123,7410,351],{"class":182},[123,7412,3426],{"class":133},[123,7414,2301],{"class":129},[123,7416,140],{"class":133},[123,7418,7419],{"class":125,"line":1321},[123,7420,2519],{"class":133},[123,7422,7423,7425,7428,7430,7433,7435,7437],{"class":125,"line":1327},[123,7424,4651],{"class":129},[123,7426,7427],{"class":133},"(p[j]",[123,7429,1094],{"class":129},[123,7431,7432],{"class":133},"p[j",[123,7434,615],{"class":129},[123,7436,351],{"class":182},[123,7438,4666],{"class":133},[123,7440,7441],{"class":125,"line":1339},[123,7442,4671],{"class":133},[123,7444,7445,7447,7449,7451],{"class":125,"line":1621},[123,7446,4676],{"class":129},[123,7448,4264],{"class":133},[123,7450,179],{"class":129},[123,7452,7453],{"class":133},"p[j];\n",[123,7455,7456,7459,7461,7463,7465,7467],{"class":125,"line":1626},[123,7457,7458],{"class":133},"                p[j]",[123,7460,179],{"class":129},[123,7462,7432],{"class":133},[123,7464,615],{"class":129},[123,7466,351],{"class":182},[123,7468,4699],{"class":133},[123,7470,7471,7474,7476,7478,7480,7482],{"class":125,"line":1632},[123,7472,7473],{"class":133},"                p[j",[123,7475,615],{"class":129},[123,7477,351],{"class":182},[123,7479,1074],{"class":133},[123,7481,179],{"class":129},[123,7483,4289],{"class":133},[123,7485,7486],{"class":125,"line":1637},[123,7487,4719],{"class":133},[123,7489,7490],{"class":125,"line":1651},[123,7491,2538],{"class":133},[123,7493,7494],{"class":125,"line":1656},[123,7495,2196],{"class":133},[123,7497,7498],{"class":125,"line":1662},[123,7499,1574],{"class":133},[123,7501,7502],{"class":125,"line":1683},[123,7503,2409],{"emptyLinePlaceholder":50},[123,7505,7506,7508,7510],{"class":125,"line":1688},[123,7507,137],{"class":129},[123,7509,1982],{"class":1972},[123,7511,1985],{"class":133},[123,7513,7514],{"class":125,"line":1702},[123,7515,1555],{"class":133},[123,7517,7518],{"class":125,"line":1707},[123,7519,7520],{"class":192},"    \u002F\u002F 1.创建数组\n",[123,7522,7523,7525,7527,7529,7531,7533,7535,7537,7539,7541,7543,7545,7547,7549,7551,7553,7555,7557,7559,7561,7563,7565,7567,7569,7571,7573],{"class":125,"line":1736},[123,7524,1994],{"class":129},[123,7526,3971],{"class":133},[123,7528,580],{"class":182},[123,7530,1074],{"class":133},[123,7532,179],{"class":129},[123,7534,1030],{"class":133},[123,7536,427],{"class":182},[123,7538,512],{"class":133},[123,7540,205],{"class":182},[123,7542,512],{"class":133},[123,7544,478],{"class":182},[123,7546,512],{"class":133},[123,7548,554],{"class":182},[123,7550,512],{"class":133},[123,7552,351],{"class":182},[123,7554,512],{"class":133},[123,7556,211],{"class":182},[123,7558,512],{"class":133},[123,7560,580],{"class":182},[123,7562,512],{"class":133},[123,7564,529],{"class":182},[123,7566,512],{"class":133},[123,7568,503],{"class":182},[123,7570,512],{"class":133},[123,7572,453],{"class":182},[123,7574,4004],{"class":133},[123,7576,7577,7579,7581,7583,7585],{"class":125,"line":1741},[123,7578,1994],{"class":129},[123,7580,7341],{"class":133},[123,7582,179],{"class":129},[123,7584,580],{"class":182},[123,7586,1300],{"class":133},[123,7588,7589,7591,7593,7595,7597],{"class":125,"line":1758},[123,7590,1994],{"class":129},[123,7592,6528],{"class":129},[123,7594,14],{"class":133},[123,7596,179],{"class":129},[123,7598,7048],{"class":133},[123,7600,7601],{"class":125,"line":1763},[123,7602,7603],{"class":192},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[123,7605,7606,7609],{"class":125,"line":1768},[123,7607,7608],{"class":1972},"    bubbleSort",[123,7610,7611],{"class":133},"(p,len);\n",[123,7613,7614],{"class":125,"line":1773},[123,7615,2409],{"emptyLinePlaceholder":50},[123,7617,7618],{"class":125,"line":1787},[123,7619,7620],{"class":192},"    \u002F\u002F 3.打印排序后的数组\n",[123,7622,7623,7625,7627,7629,7631,7633,7635,7637,7639,7642,7644],{"class":125,"line":1792},[123,7624,3210],{"class":129},[123,7626,1667],{"class":133},[123,7628,137],{"class":129},[123,7630,3041],{"class":133},[123,7632,179],{"class":129},[123,7634,325],{"class":182},[123,7636,3223],{"class":133},[123,7638,1044],{"class":129},[123,7640,7641],{"class":133},"len; i",[123,7643,2301],{"class":129},[123,7645,140],{"class":133},[123,7647,7648],{"class":125,"line":2586},[123,7649,2039],{"class":133},[123,7651,7652,7654,7656,7658,7660,7663],{"class":125,"line":2600},[123,7653,3460],{"class":133},[123,7655,6429],{"class":129},[123,7657,14],{"class":133},[123,7659,1178],{"class":129},[123,7661,7662],{"class":238},"\"\"",[123,7664,1300],{"class":133},[123,7666,7667,7670,7672],{"class":125,"line":2608},[123,7668,7669],{"class":133},"        p",[123,7671,2301],{"class":129},[123,7673,1300],{"class":133},[123,7675,7676],{"class":125,"line":2613},[123,7677,2196],{"class":133},[123,7679,7680],{"class":125,"line":2619},[123,7681,1574],{"class":133},[5136,7683,7684],{},"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":37,"searchDepth":45,"depth":45,"links":7686},[7687,7688,7689,7690,7691,7692,7693,7694],{"id":6293,"depth":45,"text":6294},{"id":6459,"depth":45,"text":6460},{"id":6615,"depth":45,"text":6616},{"id":6693,"depth":45,"text":6694},{"id":6772,"depth":45,"text":6773},{"id":6871,"depth":45,"text":6872},{"id":7110,"depth":45,"text":7111},{"id":7288,"depth":45,"text":7289},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6282,"description":6290},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7701,"title":7702,"body":7703,"description":7710,"extension":48,"meta":10684,"navigation":50,"path":10685,"seo":10686,"stem":10687,"__hash__":10688},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7704,"toc":10675},[7705,7708,7711,7715,7718,7721,7732,8070,8073,8077,8080,8087,8342,8346,8349,8352,8507,8511,8514,8517,8723,8727,8730,9033,9036,9044,9048,9051,9202,9204,9215,9272,9276,9281,9938,9946,9949,10043,10046,10666,10672],[10,7706,7702],{"id":7707},"_4结构体",[14,7709,7710],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[65,7712,7714],{"id":7713},"_41结构体定义与使用","4.1结构体定义与使用",[14,7716,7717],{},"语法：struct 结构体名 {结构体成员列表}；",[14,7719,7720],{},"通过结构体创建变量的方式：",[1141,7722,7723,7726,7729],{},[80,7724,7725],{},"struct 结构体名 变量名",[80,7727,7728],{},"struct 结构体名 变量名={成员1值，成员2值...}",[80,7730,7731],{},"定义结构体时顺便创建变量",[114,7733,7735],{"className":116,"code":7734,"language":118,"meta":37,"style":37},"#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",[120,7736,7737,7743,7753,7760,7765,7773,7777,7782,7786,7791,7796,7801,7808,7813,7820,7824,7831,7835,7839,7843,7847,7851,7855,7861,7865,7871,7879,7887,7891,7896,7901,7912,7917,7929,7940,7951,7956,7980,7985,7991,8018,8023,8029,8041,8053,8065],{"__ignoreMap":37},[123,7738,7739,7741],{"class":125,"line":126},[123,7740,1958],{"class":129},[123,7742,1961],{"class":238},[123,7744,7745,7747,7749,7751],{"class":125,"line":45},[123,7746,1966],{"class":129},[123,7748,1969],{"class":129},[123,7750,1973],{"class":1972},[123,7752,1300],{"class":133},[123,7754,7755,7757],{"class":125,"line":1189},[123,7756,1958],{"class":129},[123,7758,7759],{"class":238},"\u003Cstring>\n",[123,7761,7762],{"class":125,"line":1204},[123,7763,7764],{"class":192},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[123,7766,7767,7770],{"class":125,"line":1210},[123,7768,7769],{"class":129},"struct",[123,7771,7772],{"class":1972}," Student\n",[123,7774,7775],{"class":125,"line":1224},[123,7776,1555],{"class":133},[123,7778,7779],{"class":125,"line":1230},[123,7780,7781],{"class":192},"    \u002F\u002F成员列表\n",[123,7783,7784],{"class":125,"line":1321},[123,7785,2409],{"emptyLinePlaceholder":50},[123,7787,7788],{"class":125,"line":1327},[123,7789,7790],{"class":192},"    \u002F\u002F姓名\n",[123,7792,7793],{"class":125,"line":1339},[123,7794,7795],{"class":133},"    string name;\n",[123,7797,7798],{"class":125,"line":1621},[123,7799,7800],{"class":192},"    \u002F\u002F年龄\n",[123,7802,7803,7805],{"class":125,"line":1626},[123,7804,1994],{"class":129},[123,7806,7807],{"class":133}," age;\n",[123,7809,7810],{"class":125,"line":1632},[123,7811,7812],{"class":192},"    \u002F\u002F分数\n",[123,7814,7815,7817],{"class":125,"line":1637},[123,7816,1994],{"class":129},[123,7818,7819],{"class":133}," score;\n",[123,7821,7822],{"class":125,"line":1651},[123,7823,4004],{"class":133},[123,7825,7826,7828],{"class":125,"line":1656},[123,7827,7769],{"class":129},[123,7829,7830],{"class":1972}," School\n",[123,7832,7833],{"class":125,"line":1662},[123,7834,1555],{"class":133},[123,7836,7837],{"class":125,"line":1683},[123,7838,7781],{"class":192},[123,7840,7841],{"class":125,"line":1688},[123,7842,2409],{"emptyLinePlaceholder":50},[123,7844,7845],{"class":125,"line":1702},[123,7846,7790],{"class":192},[123,7848,7849],{"class":125,"line":1707},[123,7850,7795],{"class":133},[123,7852,7853],{"class":125,"line":1736},[123,7854,7800],{"class":192},[123,7856,7857,7859],{"class":125,"line":1741},[123,7858,1994],{"class":129},[123,7860,7807],{"class":133},[123,7862,7863],{"class":125,"line":1758},[123,7864,7812],{"class":192},[123,7866,7867,7869],{"class":125,"line":1763},[123,7868,1994],{"class":129},[123,7870,7819],{"class":133},[123,7872,7873,7876],{"class":125,"line":1768},[123,7874,7875],{"class":133},"} s3;",[123,7877,7878],{"class":192}," \u002F\u002F创建结构体时就创建了变量\n",[123,7880,7881,7883,7885],{"class":125,"line":1773},[123,7882,137],{"class":129},[123,7884,1982],{"class":1972},[123,7886,1985],{"class":133},[123,7888,7889],{"class":125,"line":1787},[123,7890,1555],{"class":133},[123,7892,7893],{"class":125,"line":1792},[123,7894,7895],{"class":192},"    \u002F\u002F2.通过学生类型创建具体学生\n",[123,7897,7898],{"class":125,"line":2586},[123,7899,7900],{"class":192},"    \u002F\u002F2.1 struct Student s1;\n",[123,7902,7903,7906,7909],{"class":125,"line":2600},[123,7904,7905],{"class":129},"    struct",[123,7907,7908],{"class":1972}," Student",[123,7910,7911],{"class":133}," s1;\n",[123,7913,7914],{"class":125,"line":2608},[123,7915,7916],{"class":192},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[123,7918,7919,7922,7924,7927],{"class":125,"line":2613},[123,7920,7921],{"class":133},"    s1.name",[123,7923,179],{"class":129},[123,7925,7926],{"class":238},"\"张三\"",[123,7928,1300],{"class":133},[123,7930,7931,7934,7936,7938],{"class":125,"line":2619},[123,7932,7933],{"class":133},"    s1.age",[123,7935,179],{"class":129},[123,7937,784],{"class":182},[123,7939,1300],{"class":133},[123,7941,7942,7945,7947,7949],{"class":125,"line":2625},[123,7943,7944],{"class":133},"    s1.score",[123,7946,179],{"class":129},[123,7948,388],{"class":182},[123,7950,1300],{"class":133},[123,7952,7953],{"class":125,"line":2630},[123,7954,7955],{"class":192},"    \u002F\u002F输出结果\n",[123,7957,7959,7961,7963,7966,7968,7971,7973,7976,7978],{"class":125,"line":7958},37,[123,7960,1560],{"class":133},[123,7962,1178],{"class":129},[123,7964,7965],{"class":133},"s1.name",[123,7967,1178],{"class":129},[123,7969,7970],{"class":133},"s1.age",[123,7972,1178],{"class":129},[123,7974,7975],{"class":133},"s1.score",[123,7977,1178],{"class":129},[123,7979,1201],{"class":133},[123,7981,7983],{"class":125,"line":7982},38,[123,7984,2409],{"emptyLinePlaceholder":50},[123,7986,7988],{"class":125,"line":7987},39,[123,7989,7990],{"class":192},"    \u002F\u002F2.2 struct Student s2={...}\n",[123,7992,7994,7996,7998,8001,8003,8005,8008,8010,8012,8014,8016],{"class":125,"line":7993},40,[123,7995,7905],{"class":129},[123,7997,7908],{"class":1972},[123,7999,8000],{"class":133}," s2",[123,8002,179],{"class":129},[123,8004,1030],{"class":133},[123,8006,8007],{"class":238},"\"王五\"",[123,8009,512],{"class":133},[123,8011,784],{"class":182},[123,8013,512],{"class":133},[123,8015,388],{"class":182},[123,8017,4004],{"class":133},[123,8019,8021],{"class":125,"line":8020},41,[123,8022,2409],{"emptyLinePlaceholder":50},[123,8024,8026],{"class":125,"line":8025},42,[123,8027,8028],{"class":192},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[123,8030,8032,8035,8037,8039],{"class":125,"line":8031},43,[123,8033,8034],{"class":133},"    s3.name",[123,8036,179],{"class":129},[123,8038,3687],{"class":238},[123,8040,1300],{"class":133},[123,8042,8044,8047,8049,8051],{"class":125,"line":8043},44,[123,8045,8046],{"class":133},"    s3.age",[123,8048,179],{"class":129},[123,8050,784],{"class":182},[123,8052,1300],{"class":133},[123,8054,8056,8059,8061,8063],{"class":125,"line":8055},45,[123,8057,8058],{"class":133},"    s3.score",[123,8060,179],{"class":129},[123,8062,834],{"class":182},[123,8064,1300],{"class":133},[123,8066,8068],{"class":125,"line":8067},46,[123,8069,1574],{"class":133},[14,8071,8072],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[65,8074,8076],{"id":8075},"_42结构体数组","4.2结构体数组",[14,8078,8079],{},"将自定义的结构体放入到数组中方便维护",[14,8081,8082,8083,8086],{},"语法：struct 结构体名 数组名",[123,8084,8085],{},"元素个数","={ {}，{},...{} };",[114,8088,8090],{"className":116,"code":8089,"language":118,"meta":37,"style":37},"#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",[120,8091,8092,8098,8108,8114,8119,8125,8129,8133,8139,8145,8149,8153,8161,8165,8170,8185,8189,8205,8221,8225,8230,8246,8261,8276,8281,8307,8311,8334,8338],{"__ignoreMap":37},[123,8093,8094,8096],{"class":125,"line":126},[123,8095,1958],{"class":129},[123,8097,1961],{"class":238},[123,8099,8100,8102,8104,8106],{"class":125,"line":45},[123,8101,1966],{"class":129},[123,8103,1969],{"class":129},[123,8105,1973],{"class":1972},[123,8107,1300],{"class":133},[123,8109,8110,8112],{"class":125,"line":1189},[123,8111,1958],{"class":129},[123,8113,7759],{"class":238},[123,8115,8116],{"class":125,"line":1204},[123,8117,8118],{"class":192},"\u002F\u002F1.定义结构体\n",[123,8120,8121,8123],{"class":125,"line":1210},[123,8122,7769],{"class":129},[123,8124,7772],{"class":1972},[123,8126,8127],{"class":125,"line":1224},[123,8128,1555],{"class":133},[123,8130,8131],{"class":125,"line":1230},[123,8132,7795],{"class":133},[123,8134,8135,8137],{"class":125,"line":1321},[123,8136,1994],{"class":129},[123,8138,7807],{"class":133},[123,8140,8141,8143],{"class":125,"line":1327},[123,8142,1994],{"class":129},[123,8144,7819],{"class":133},[123,8146,8147],{"class":125,"line":1339},[123,8148,2409],{"emptyLinePlaceholder":50},[123,8150,8151],{"class":125,"line":1621},[123,8152,4004],{"class":133},[123,8154,8155,8157,8159],{"class":125,"line":1626},[123,8156,137],{"class":129},[123,8158,1982],{"class":1972},[123,8160,1985],{"class":133},[123,8162,8163],{"class":125,"line":1632},[123,8164,1555],{"class":133},[123,8166,8167],{"class":125,"line":1637},[123,8168,8169],{"class":192},"    \u002F\u002F2.创建结构体数组\n",[123,8171,8172,8174,8176,8179,8181,8183],{"class":125,"line":1651},[123,8173,7905],{"class":129},[123,8175,7908],{"class":1972},[123,8177,8178],{"class":133}," stuArray[",[123,8180,211],{"class":182},[123,8182,1074],{"class":133},[123,8184,4917],{"class":129},[123,8186,8187],{"class":125,"line":1656},[123,8188,2039],{"class":133},[123,8190,8191,8193,8195,8197,8199,8201,8203],{"class":125,"line":1662},[123,8192,4926],{"class":133},[123,8194,7926],{"class":238},[123,8196,512],{"class":133},[123,8198,784],{"class":182},[123,8200,512],{"class":133},[123,8202,445],{"class":182},[123,8204,4939],{"class":133},[123,8206,8207,8209,8211,8213,8215,8217,8219],{"class":125,"line":1683},[123,8208,4926],{"class":133},[123,8210,3687],{"class":238},[123,8212,512],{"class":133},[123,8214,709],{"class":182},[123,8216,512],{"class":133},[123,8218,709],{"class":182},[123,8220,1574],{"class":133},[123,8222,8223],{"class":125,"line":1688},[123,8224,2196],{"class":133},[123,8226,8227],{"class":125,"line":1702},[123,8228,8229],{"class":192},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[123,8231,8232,8235,8237,8240,8242,8244],{"class":125,"line":1707},[123,8233,8234],{"class":133},"    stuArray[",[123,8236,351],{"class":182},[123,8238,8239],{"class":133},"].name",[123,8241,179],{"class":129},[123,8243,3710],{"class":238},[123,8245,1300],{"class":133},[123,8247,8248,8250,8252,8255,8257,8259],{"class":125,"line":1736},[123,8249,8234],{"class":133},[123,8251,351],{"class":182},[123,8253,8254],{"class":133},"].age",[123,8256,179],{"class":129},[123,8258,211],{"class":182},[123,8260,1300],{"class":133},[123,8262,8263,8265,8267,8270,8272,8274],{"class":125,"line":1741},[123,8264,8234],{"class":133},[123,8266,351],{"class":182},[123,8268,8269],{"class":133},"].score",[123,8271,179],{"class":129},[123,8273,211],{"class":182},[123,8275,1300],{"class":133},[123,8277,8278],{"class":125,"line":1758},[123,8279,8280],{"class":192},"    \u002F\u002F4.遍历结构体数组\n",[123,8282,8283,8285,8287,8289,8291,8293,8295,8297,8299,8301,8303,8305],{"class":125,"line":1763},[123,8284,3210],{"class":129},[123,8286,1667],{"class":133},[123,8288,137],{"class":129},[123,8290,3041],{"class":133},[123,8292,179],{"class":129},[123,8294,325],{"class":182},[123,8296,3048],{"class":133},[123,8298,1044],{"class":129},[123,8300,211],{"class":182},[123,8302,3048],{"class":133},[123,8304,2301],{"class":129},[123,8306,140],{"class":133},[123,8308,8309],{"class":125,"line":1768},[123,8310,2039],{"class":133},[123,8312,8313,8315,8317,8320,8322,8325,8327,8330,8332],{"class":125,"line":1773},[123,8314,3460],{"class":133},[123,8316,1178],{"class":129},[123,8318,8319],{"class":133},"stuArray[i].name",[123,8321,1178],{"class":129},[123,8323,8324],{"class":133},"stuArray[i].age",[123,8326,1178],{"class":129},[123,8328,8329],{"class":133},"stuArray[i].score",[123,8331,1178],{"class":129},[123,8333,1201],{"class":133},[123,8335,8336],{"class":125,"line":1787},[123,8337,2196],{"class":133},[123,8339,8340],{"class":125,"line":1792},[123,8341,1574],{"class":133},[65,8343,8345],{"id":8344},"_43结构体指针","4.3结构体指针",[14,8347,8348],{},"作用：通过指针访问结构体中的成员",[14,8350,8351],{},"利用操作符->可以通过结构体指针访问结构体属性",[114,8353,8355],{"className":116,"code":8354,"language":118,"meta":37,"style":37},"#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",[120,8356,8357,8363,8373,8379,8383,8389,8393,8397,8403,8409,8413,8421,8425,8430,8455,8460,8475,8480,8503],{"__ignoreMap":37},[123,8358,8359,8361],{"class":125,"line":126},[123,8360,1958],{"class":129},[123,8362,1961],{"class":238},[123,8364,8365,8367,8369,8371],{"class":125,"line":45},[123,8366,1966],{"class":129},[123,8368,1969],{"class":129},[123,8370,1973],{"class":1972},[123,8372,1300],{"class":133},[123,8374,8375,8377],{"class":125,"line":1189},[123,8376,1958],{"class":129},[123,8378,7759],{"class":238},[123,8380,8381],{"class":125,"line":1204},[123,8382,8118],{"class":192},[123,8384,8385,8387],{"class":125,"line":1210},[123,8386,7769],{"class":129},[123,8388,7772],{"class":1972},[123,8390,8391],{"class":125,"line":1224},[123,8392,1555],{"class":133},[123,8394,8395],{"class":125,"line":1230},[123,8396,7795],{"class":133},[123,8398,8399,8401],{"class":125,"line":1321},[123,8400,1994],{"class":129},[123,8402,7807],{"class":133},[123,8404,8405,8407],{"class":125,"line":1327},[123,8406,1994],{"class":129},[123,8408,7819],{"class":133},[123,8410,8411],{"class":125,"line":1339},[123,8412,4004],{"class":133},[123,8414,8415,8417,8419],{"class":125,"line":1621},[123,8416,137],{"class":129},[123,8418,1982],{"class":1972},[123,8420,1985],{"class":133},[123,8422,8423],{"class":125,"line":1626},[123,8424,1555],{"class":133},[123,8426,8427],{"class":125,"line":1632},[123,8428,8429],{"class":192},"    \u002F\u002F创建学生结构体变量\n",[123,8431,8432,8434,8436,8439,8441,8443,8445,8447,8449,8451,8453],{"class":125,"line":1637},[123,8433,7905],{"class":129},[123,8435,7908],{"class":1972},[123,8437,8438],{"class":133}," s",[123,8440,179],{"class":129},[123,8442,1030],{"class":133},[123,8444,7926],{"class":238},[123,8446,512],{"class":133},[123,8448,784],{"class":182},[123,8450,512],{"class":133},[123,8452,1731],{"class":182},[123,8454,4004],{"class":133},[123,8456,8457],{"class":125,"line":1651},[123,8458,8459],{"class":192},"    \u002F\u002F通过指针指向结构体变量\n",[123,8461,8462,8464,8466,8468,8470,8472],{"class":125,"line":1656},[123,8463,7905],{"class":129},[123,8465,7908],{"class":1972},[123,8467,6528],{"class":129},[123,8469,14],{"class":133},[123,8471,6349],{"class":129},[123,8473,8474],{"class":133},"s\n",[123,8476,8477],{"class":125,"line":1662},[123,8478,8479],{"class":192},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[123,8481,8482,8484,8486,8489,8491,8494,8496,8499,8501],{"class":125,"line":1683},[123,8483,1560],{"class":133},[123,8485,1178],{"class":129},[123,8487,8488],{"class":133},"p->name",[123,8490,1178],{"class":129},[123,8492,8493],{"class":133},"p->age",[123,8495,1178],{"class":129},[123,8497,8498],{"class":133},"p->score",[123,8500,1178],{"class":129},[123,8502,1201],{"class":133},[123,8504,8505],{"class":125,"line":1688},[123,8506,1574],{"class":133},[65,8508,8510],{"id":8509},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8512,8513],{},"作用：结构体中的成员可以是另一个结构体",[14,8515,8516],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[114,8518,8520],{"className":116,"code":8519,"language":118,"meta":37,"style":37},"#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",[120,8521,8522,8528,8538,8544,8549,8557,8561,8565,8571,8577,8581,8586,8593,8597,8604,8608,8614,8619,8623,8631,8635,8640,8645,8650,8661,8673,8684,8697,8708,8719],{"__ignoreMap":37},[123,8523,8524,8526],{"class":125,"line":126},[123,8525,1958],{"class":129},[123,8527,1961],{"class":238},[123,8529,8530,8532,8534,8536],{"class":125,"line":45},[123,8531,1966],{"class":129},[123,8533,1969],{"class":129},[123,8535,1973],{"class":1972},[123,8537,1300],{"class":133},[123,8539,8540,8542],{"class":125,"line":1189},[123,8541,1958],{"class":129},[123,8543,7759],{"class":238},[123,8545,8546],{"class":125,"line":1204},[123,8547,8548],{"class":192},"\u002F\u002F定义学生结构体\n",[123,8550,8551,8553,8555],{"class":125,"line":1210},[123,8552,7769],{"class":129},[123,8554,7908],{"class":1972},[123,8556,2683],{"class":133},[123,8558,8559],{"class":125,"line":1224},[123,8560,1555],{"class":133},[123,8562,8563],{"class":125,"line":1230},[123,8564,7795],{"class":133},[123,8566,8567,8569],{"class":125,"line":1321},[123,8568,1994],{"class":129},[123,8570,7807],{"class":133},[123,8572,8573,8575],{"class":125,"line":1327},[123,8574,1994],{"class":129},[123,8576,7819],{"class":133},[123,8578,8579],{"class":125,"line":1339},[123,8580,1574],{"class":133},[123,8582,8583],{"class":125,"line":1621},[123,8584,8585],{"class":192},"\u002F\u002F定义老师结构体\n",[123,8587,8588,8590],{"class":125,"line":1626},[123,8589,7769],{"class":129},[123,8591,8592],{"class":1972}," Teacher\n",[123,8594,8595],{"class":125,"line":1632},[123,8596,1555],{"class":133},[123,8598,8599,8601],{"class":125,"line":1637},[123,8600,1994],{"class":129},[123,8602,8603],{"class":133}," id;\n",[123,8605,8606],{"class":125,"line":1651},[123,8607,7795],{"class":133},[123,8609,8610,8612],{"class":125,"line":1656},[123,8611,1994],{"class":129},[123,8613,7807],{"class":133},[123,8615,8616],{"class":125,"line":1662},[123,8617,8618],{"class":133},"    Student stu;\n",[123,8620,8621],{"class":125,"line":1683},[123,8622,1574],{"class":133},[123,8624,8625,8627,8629],{"class":125,"line":1688},[123,8626,137],{"class":129},[123,8628,1982],{"class":1972},[123,8630,5988],{"class":133},[123,8632,8633],{"class":125,"line":1702},[123,8634,1555],{"class":133},[123,8636,8637],{"class":125,"line":1707},[123,8638,8639],{"class":192},"    \u002F\u002F结构体嵌套结构体\n",[123,8641,8642],{"class":125,"line":1736},[123,8643,8644],{"class":192},"    \u002F\u002F创建老师\n",[123,8646,8647],{"class":125,"line":1741},[123,8648,8649],{"class":133},"    Teacher t;\n",[123,8651,8652,8655,8657,8659],{"class":125,"line":1758},[123,8653,8654],{"class":133},"    t.id",[123,8656,179],{"class":129},[123,8658,445],{"class":182},[123,8660,1300],{"class":133},[123,8662,8663,8666,8668,8671],{"class":125,"line":1763},[123,8664,8665],{"class":133},"    t.name",[123,8667,179],{"class":129},[123,8669,8670],{"class":238},"\"老王\"",[123,8672,1300],{"class":133},[123,8674,8675,8678,8680,8682],{"class":125,"line":1768},[123,8676,8677],{"class":133},"    t.age",[123,8679,179],{"class":129},[123,8681,784],{"class":182},[123,8683,1300],{"class":133},[123,8685,8686,8689,8691,8694],{"class":125,"line":1773},[123,8687,8688],{"class":133},"    t.stu.name",[123,8690,179],{"class":129},[123,8692,8693],{"class":238},"\"小王\"",[123,8695,8696],{"class":133},"；\n",[123,8698,8699,8702,8704,8706],{"class":125,"line":1787},[123,8700,8701],{"class":133},"    t.stu.age",[123,8703,179],{"class":129},[123,8705,834],{"class":182},[123,8707,1300],{"class":133},[123,8709,8710,8713,8715,8717],{"class":125,"line":1792},[123,8711,8712],{"class":133},"    t.stu.score",[123,8714,179],{"class":129},[123,8716,478],{"class":182},[123,8718,1300],{"class":133},[123,8720,8721],{"class":125,"line":2586},[123,8722,1574],{"class":133},[65,8724,8726],{"id":8725},"_45结构体做函数参数","4.5结构体做函数参数",[14,8728,8729],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[114,8731,8733],{"className":116,"code":8732,"language":118,"meta":37,"style":37},"#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",[120,8734,8735,8741,8751,8757,8763,8767,8771,8777,8783,8787,8792,8797,8814,8818,8851,8855,8860,8879,8883,8914,8918,8926,8930,8939,8951,8963,8975,8988,8996,9009,9021,9029],{"__ignoreMap":37},[123,8736,8737,8739],{"class":125,"line":126},[123,8738,1958],{"class":129},[123,8740,1961],{"class":238},[123,8742,8743,8745,8747,8749],{"class":125,"line":45},[123,8744,1966],{"class":129},[123,8746,1969],{"class":129},[123,8748,1973],{"class":1972},[123,8750,1300],{"class":133},[123,8752,8753,8755],{"class":125,"line":1189},[123,8754,1958],{"class":129},[123,8756,7759],{"class":238},[123,8758,8759,8761],{"class":125,"line":1204},[123,8760,7769],{"class":129},[123,8762,7772],{"class":1972},[123,8764,8765],{"class":125,"line":1210},[123,8766,1555],{"class":133},[123,8768,8769],{"class":125,"line":1224},[123,8770,7795],{"class":133},[123,8772,8773,8775],{"class":125,"line":1230},[123,8774,1994],{"class":129},[123,8776,7807],{"class":133},[123,8778,8779,8781],{"class":125,"line":1321},[123,8780,1994],{"class":129},[123,8782,7819],{"class":133},[123,8784,8785],{"class":125,"line":1327},[123,8786,4004],{"class":133},[123,8788,8789],{"class":125,"line":1339},[123,8790,8791],{"class":192},"\u002F\u002F打印学生信息的函数\n",[123,8793,8794],{"class":125,"line":1621},[123,8795,8796],{"class":192},"\u002F\u002F值传递\n",[123,8798,8799,8801,8804,8806,8808,8810,8812],{"class":125,"line":1626},[123,8800,5374],{"class":129},[123,8802,8803],{"class":1972}," printStudent1",[123,8805,134],{"class":133},[123,8807,7769],{"class":129},[123,8809,7908],{"class":1972},[123,8811,8438],{"class":5226},[123,8813,140],{"class":133},[123,8815,8816],{"class":125,"line":1632},[123,8817,1555],{"class":133},[123,8819,8820,8822,8824,8827,8829,8832,8834,8837,8839,8841,8843,8846,8848],{"class":125,"line":1637},[123,8821,6539],{"class":133},[123,8823,1178],{"class":129},[123,8825,8826],{"class":133}," s.name ",[123,8828,1178],{"class":129},[123,8830,8831],{"class":238}," \" \"",[123,8833,1454],{"class":129},[123,8835,8836],{"class":133}," s.age ",[123,8838,1178],{"class":129},[123,8840,8831],{"class":238},[123,8842,1454],{"class":129},[123,8844,8845],{"class":133}," s.score ",[123,8847,1178],{"class":129},[123,8849,8850],{"class":133}," endl;\n",[123,8852,8853],{"class":125,"line":1651},[123,8854,1574],{"class":133},[123,8856,8857],{"class":125,"line":1656},[123,8858,8859],{"class":192},"\u002F\u002F地址传递\n",[123,8861,8862,8864,8867,8869,8871,8873,8875,8877],{"class":125,"line":1662},[123,8863,5374],{"class":129},[123,8865,8866],{"class":1972}," printStudent2",[123,8868,134],{"class":133},[123,8870,7769],{"class":129},[123,8872,7908],{"class":1972},[123,8874,6528],{"class":129},[123,8876,829],{"class":5226},[123,8878,140],{"class":133},[123,8880,8881],{"class":125,"line":1683},[123,8882,1555],{"class":133},[123,8884,8885,8887,8889,8892,8894,8896,8898,8901,8903,8905,8907,8910,8912],{"class":125,"line":1688},[123,8886,6539],{"class":133},[123,8888,1178],{"class":129},[123,8890,8891],{"class":133}," s->name ",[123,8893,1178],{"class":129},[123,8895,8831],{"class":238},[123,8897,1454],{"class":129},[123,8899,8900],{"class":133}," s->age ",[123,8902,1178],{"class":129},[123,8904,8831],{"class":238},[123,8906,1454],{"class":129},[123,8908,8909],{"class":133}," s->score ",[123,8911,1178],{"class":129},[123,8913,8850],{"class":133},[123,8915,8916],{"class":125,"line":1702},[123,8917,1574],{"class":133},[123,8919,8920,8922,8924],{"class":125,"line":1707},[123,8921,137],{"class":129},[123,8923,1982],{"class":1972},[123,8925,1985],{"class":133},[123,8927,8928],{"class":125,"line":1736},[123,8929,1555],{"class":133},[123,8931,8932,8934,8936],{"class":125,"line":1741},[123,8933,7905],{"class":129},[123,8935,7908],{"class":1972},[123,8937,8938],{"class":133}," s;\n",[123,8940,8941,8944,8946,8949],{"class":125,"line":1758},[123,8942,8943],{"class":133},"    s.name ",[123,8945,179],{"class":129},[123,8947,8948],{"class":238}," \"张三\"",[123,8950,1300],{"class":133},[123,8952,8953,8956,8958,8961],{"class":125,"line":1763},[123,8954,8955],{"class":133},"    s.age ",[123,8957,179],{"class":129},[123,8959,8960],{"class":182}," 20",[123,8962,1300],{"class":133},[123,8964,8965,8968,8970,8973],{"class":125,"line":1768},[123,8966,8967],{"class":133},"    s.score ",[123,8969,179],{"class":129},[123,8971,8972],{"class":182}," 85",[123,8974,1300],{"class":133},[123,8976,8977,8979,8981,8984,8986],{"class":125,"line":1773},[123,8978,1560],{"class":133},[123,8980,1178],{"class":129},[123,8982,8983],{"class":238},"\"值传递:\"",[123,8985,1178],{"class":129},[123,8987,1201],{"class":133},[123,8989,8990,8993],{"class":125,"line":1787},[123,8991,8992],{"class":1972},"    printStudent1",[123,8994,8995],{"class":133},"(s);\n",[123,8997,8998,9000,9002,9005,9007],{"class":125,"line":1792},[123,8999,1560],{"class":133},[123,9001,1178],{"class":129},[123,9003,9004],{"class":238},"\"地址传递:\"",[123,9006,1178],{"class":129},[123,9008,1201],{"class":133},[123,9010,9011,9014,9016,9018],{"class":125,"line":2586},[123,9012,9013],{"class":1972},"    printStudent2",[123,9015,134],{"class":133},[123,9017,487],{"class":129},[123,9019,9020],{"class":133},"s); \n",[123,9022,9023,9025,9027],{"class":125,"line":2600},[123,9024,4099],{"class":129},[123,9026,4102],{"class":182},[123,9028,1300],{"class":133},[123,9030,9031],{"class":125,"line":2608},[123,9032,1574],{"class":133},[14,9034,9035],{},"注意：",[1141,9037,9038,9041],{},[80,9039,9040],{},"1.先定义结构体，不要在函数中写结构体的定义",[80,9042,9043],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[65,9045,9047],{"id":9046},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9049,9050],{},"用const防止误操作",[114,9052,9054],{"className":116,"code":9053,"language":118,"meta":37,"style":37},"#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",[120,9055,9056,9062,9072,9078,9083,9087,9091,9097,9103,9107,9123,9127,9150,9154,9162,9166,9187,9194,9198],{"__ignoreMap":37},[123,9057,9058,9060],{"class":125,"line":126},[123,9059,1958],{"class":129},[123,9061,1961],{"class":238},[123,9063,9064,9066,9068,9070],{"class":125,"line":45},[123,9065,1966],{"class":129},[123,9067,1969],{"class":129},[123,9069,1973],{"class":1972},[123,9071,1300],{"class":133},[123,9073,9074,9076],{"class":125,"line":1189},[123,9075,1958],{"class":129},[123,9077,7759],{"class":238},[123,9079,9080],{"class":125,"line":1204},[123,9081,9082],{"class":133},"sctuct Student\n",[123,9084,9085],{"class":125,"line":1210},[123,9086,1555],{"class":133},[123,9088,9089],{"class":125,"line":1224},[123,9090,7795],{"class":133},[123,9092,9093,9095],{"class":125,"line":1230},[123,9094,1994],{"class":129},[123,9096,7807],{"class":133},[123,9098,9099,9101],{"class":125,"line":1321},[123,9100,1994],{"class":129},[123,9102,7819],{"class":133},[123,9104,9105],{"class":125,"line":1327},[123,9106,4004],{"class":133},[123,9108,9109,9111,9114,9116,9119,9121],{"class":125,"line":1339},[123,9110,5374],{"class":129},[123,9112,9113],{"class":1972}," printStudents",[123,9115,134],{"class":133},[123,9117,9118],{"class":1972},"student",[123,9120,8438],{"class":5226},[123,9122,140],{"class":133},[123,9124,9125],{"class":125,"line":1621},[123,9126,1555],{"class":133},[123,9128,9129,9131,9133,9136,9138,9141,9143,9146,9148],{"class":125,"line":1626},[123,9130,1560],{"class":133},[123,9132,1178],{"class":129},[123,9134,9135],{"class":133},"s.name",[123,9137,1178],{"class":129},[123,9139,9140],{"class":133},"s.age",[123,9142,1178],{"class":129},[123,9144,9145],{"class":133},"s.score",[123,9147,1178],{"class":129},[123,9149,1201],{"class":133},[123,9151,9152],{"class":125,"line":1632},[123,9153,1574],{"class":133},[123,9155,9156,9158,9160],{"class":125,"line":1637},[123,9157,137],{"class":129},[123,9159,1982],{"class":1972},[123,9161,5988],{"class":133},[123,9163,9164],{"class":125,"line":1651},[123,9165,1555],{"class":133},[123,9167,9168,9171,9173,9175,9177,9179,9181,9183,9185],{"class":125,"line":1656},[123,9169,9170],{"class":133},"    Student s",[123,9172,179],{"class":129},[123,9174,1030],{"class":133},[123,9176,7926],{"class":238},[123,9178,512],{"class":133},[123,9180,784],{"class":182},[123,9182,512],{"class":133},[123,9184,784],{"class":182},[123,9186,4004],{"class":133},[123,9188,9189,9192],{"class":125,"line":1662},[123,9190,9191],{"class":1972},"    printStudent",[123,9193,8995],{"class":133},[123,9195,9196],{"class":125,"line":1683},[123,9197,2409],{"emptyLinePlaceholder":50},[123,9199,9200],{"class":125,"line":1688},[123,9201,1574],{"class":133},[14,9203,9035],{},[1141,9205,9206,9209,9212],{},[80,9207,9208],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[80,9210,9211],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[80,9213,9214],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[114,9216,9218],{"className":116,"code":9217,"language":118,"meta":37,"style":37},"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",[120,9219,9220,9239,9243,9248,9268],{"__ignoreMap":37},[123,9221,9222,9224,9226,9228,9230,9233,9235,9237],{"class":125,"line":126},[123,9223,5374],{"class":129},[123,9225,9113],{"class":1972},[123,9227,134],{"class":133},[123,9229,6802],{"class":129},[123,9231,9232],{"class":1972}," student",[123,9234,6528],{"class":129},[123,9236,829],{"class":5226},[123,9238,140],{"class":133},[123,9240,9241],{"class":125,"line":45},[123,9242,1555],{"class":133},[123,9244,9245],{"class":125,"line":1189},[123,9246,9247],{"class":192},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[123,9249,9250,9252,9254,9256,9258,9260,9262,9264,9266],{"class":125,"line":1204},[123,9251,1560],{"class":133},[123,9253,1178],{"class":129},[123,9255,9135],{"class":133},[123,9257,1178],{"class":129},[123,9259,9140],{"class":133},[123,9261,1178],{"class":129},[123,9263,9145],{"class":133},[123,9265,1178],{"class":129},[123,9267,1201],{"class":133},[123,9269,9270],{"class":125,"line":1210},[123,9271,1574],{"class":133},[65,9273,9275],{"id":9274},"_47案例","4.7案例",[77,9277,9278],{},[80,9279,9280],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[114,9282,9284],{"className":116,"code":9283,"language":118,"meta":37,"style":37},"#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",[120,9285,9286,9292,9302,9308,9315,9319,9325,9329,9334,9340,9346,9350,9354,9360,9364,9369,9374,9387,9391,9396,9422,9426,9438,9465,9469,9481,9491,9495,9500,9529,9533,9545,9554,9581,9592,9602,9606,9610,9614,9619,9643,9647,9671,9675,9694,9720,9724,9749,9772,9796,9801,9806,9811,9820,9825,9831,9852,9858,9872,9878,9905,9914,9920,9928,9933],{"__ignoreMap":37},[123,9287,9288,9290],{"class":125,"line":126},[123,9289,1958],{"class":129},[123,9291,1961],{"class":238},[123,9293,9294,9296,9298,9300],{"class":125,"line":45},[123,9295,1966],{"class":129},[123,9297,1969],{"class":129},[123,9299,1973],{"class":1972},[123,9301,1300],{"class":133},[123,9303,9304,9306],{"class":125,"line":1189},[123,9305,1958],{"class":129},[123,9307,7759],{"class":238},[123,9309,9310,9312],{"class":125,"line":1204},[123,9311,1958],{"class":129},[123,9313,9314],{"class":238},"\u003Cctime>\n",[123,9316,9317],{"class":125,"line":1210},[123,9318,8548],{"class":192},[123,9320,9321,9323],{"class":125,"line":1224},[123,9322,7769],{"class":129},[123,9324,7772],{"class":1972},[123,9326,9327],{"class":125,"line":1230},[123,9328,1555],{"class":133},[123,9330,9331],{"class":125,"line":1321},[123,9332,9333],{"class":133},"    string sName;\n",[123,9335,9336,9338],{"class":125,"line":1327},[123,9337,1994],{"class":129},[123,9339,7807],{"class":133},[123,9341,9342,9344],{"class":125,"line":1339},[123,9343,1994],{"class":129},[123,9345,7819],{"class":133},[123,9347,9348],{"class":125,"line":1621},[123,9349,4004],{"class":133},[123,9351,9352],{"class":125,"line":1626},[123,9353,8585],{"class":192},[123,9355,9356,9358],{"class":125,"line":1632},[123,9357,7769],{"class":129},[123,9359,8592],{"class":1972},[123,9361,9362],{"class":125,"line":1637},[123,9363,1555],{"class":133},[123,9365,9366],{"class":125,"line":1651},[123,9367,9368],{"class":133},"    string tName;\n",[123,9370,9371],{"class":125,"line":1656},[123,9372,9373],{"class":192},"    \u002F\u002F学生数组\n",[123,9375,9376,9378,9380,9383,9385],{"class":125,"line":1662},[123,9377,7905],{"class":129},[123,9379,7908],{"class":1972},[123,9381,9382],{"class":133}," sArray[",[123,9384,453],{"class":182},[123,9386,4699],{"class":133},[123,9388,9389],{"class":125,"line":1683},[123,9390,4004],{"class":133},[123,9392,9393],{"class":125,"line":1688},[123,9394,9395],{"class":192},"\u002F\u002F给老师和学生赋值的函数\n",[123,9397,9398,9400,9403,9405,9407,9410,9413,9416,9418,9420],{"class":125,"line":1702},[123,9399,5374],{"class":129},[123,9401,9402],{"class":1972}," allocateSpace",[123,9404,134],{"class":133},[123,9406,7769],{"class":129},[123,9408,9409],{"class":1972}," Teacher",[123,9411,9412],{"class":5226}," tArray",[123,9414,9415],{"class":133},"[],",[123,9417,137],{"class":129},[123,9419,7341],{"class":5226},[123,9421,140],{"class":133},[123,9423,9424],{"class":125,"line":1707},[123,9425,1555],{"class":133},[123,9427,9428,9431,9433,9436],{"class":125,"line":1736},[123,9429,9430],{"class":133},"    string nameSeed",[123,9432,179],{"class":129},[123,9434,9435],{"class":238},"\"ABCDE\"",[123,9437,1300],{"class":133},[123,9439,9440,9442,9444,9446,9449,9451,9453,9456,9458,9461,9463],{"class":125,"line":1741},[123,9441,3210],{"class":129},[123,9443,1667],{"class":133},[123,9445,137],{"class":129},[123,9447,9448],{"class":133}," i ",[123,9450,179],{"class":129},[123,9452,4102],{"class":182},[123,9454,9455],{"class":133},"; i ",[123,9457,1044],{"class":129},[123,9459,9460],{"class":133}," len; i",[123,9462,2301],{"class":129},[123,9464,140],{"class":133},[123,9466,9467],{"class":125,"line":1758},[123,9468,2039],{"class":133},[123,9470,9471,9474,9476,9479],{"class":125,"line":1763},[123,9472,9473],{"class":133},"        tArray[i].tName ",[123,9475,179],{"class":129},[123,9477,9478],{"class":238}," \"Teacher_\"",[123,9480,1300],{"class":133},[123,9482,9483,9485,9488],{"class":125,"line":1768},[123,9484,9473],{"class":133},[123,9486,9487],{"class":129},"+=",[123,9489,9490],{"class":133},"nameSeed[i];\n",[123,9492,9493],{"class":125,"line":1773},[123,9494,2409],{"emptyLinePlaceholder":50},[123,9496,9497],{"class":125,"line":1787},[123,9498,9499],{"class":192},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[123,9501,9502,9504,9506,9508,9511,9513,9515,9518,9520,9522,9525,9527],{"class":125,"line":1792},[123,9503,3412],{"class":129},[123,9505,1667],{"class":133},[123,9507,137],{"class":129},[123,9509,9510],{"class":133}," j ",[123,9512,179],{"class":129},[123,9514,4102],{"class":182},[123,9516,9517],{"class":133},"; j ",[123,9519,1044],{"class":129},[123,9521,2157],{"class":182},[123,9523,9524],{"class":133},"; j",[123,9526,2301],{"class":129},[123,9528,140],{"class":133},[123,9530,9531],{"class":125,"line":2586},[123,9532,2519],{"class":133},[123,9534,9535,9538,9540,9543],{"class":125,"line":2600},[123,9536,9537],{"class":133},"            tArray[i].sArray[j].sName ",[123,9539,179],{"class":129},[123,9541,9542],{"class":238}," \"Student_\"",[123,9544,1300],{"class":133},[123,9546,9547,9549,9551],{"class":125,"line":2608},[123,9548,9537],{"class":133},[123,9550,9487],{"class":129},[123,9552,9553],{"class":133}," nameSeed[j];\n",[123,9555,9556,9559,9562,9564,9566,9568,9570,9572,9574,9576,9578],{"class":125,"line":2613},[123,9557,9558],{"class":129},"            int",[123,9560,9561],{"class":133}," random",[123,9563,179],{"class":129},[123,9565,2433],{"class":1972},[123,9567,2436],{"class":133},[123,9569,462],{"class":129},[123,9571,1041],{"class":182},[123,9573,615],{"class":129},[123,9575,535],{"class":182},[123,9577,189],{"class":133},[123,9579,9580],{"class":192},"\u002F\u002F40~99\n",[123,9582,9583,9586,9588,9590],{"class":125,"line":2619},[123,9584,9585],{"class":133},"            tArray[i].sArray[j].age ",[123,9587,179],{"class":129},[123,9589,8960],{"class":182},[123,9591,1300],{"class":133},[123,9593,9594,9597,9599],{"class":125,"line":2625},[123,9595,9596],{"class":133},"            tArray[i].sArray[j].score ",[123,9598,179],{"class":129},[123,9600,9601],{"class":133}," random;\n",[123,9603,9604],{"class":125,"line":2630},[123,9605,2538],{"class":133},[123,9607,9608],{"class":125,"line":7958},[123,9609,2196],{"class":133},[123,9611,9612],{"class":125,"line":7982},[123,9613,1574],{"class":133},[123,9615,9616],{"class":125,"line":7987},[123,9617,9618],{"class":192},"\u002F\u002F打印所有信息的函数\n",[123,9620,9621,9623,9626,9628,9630,9632,9634,9637,9639,9641],{"class":125,"line":7993},[123,9622,5374],{"class":129},[123,9624,9625],{"class":1972}," printInfo",[123,9627,134],{"class":133},[123,9629,7769],{"class":129},[123,9631,9409],{"class":1972},[123,9633,9412],{"class":5226},[123,9635,9636],{"class":133},"[], ",[123,9638,137],{"class":129},[123,9640,7341],{"class":5226},[123,9642,140],{"class":133},[123,9644,9645],{"class":125,"line":8020},[123,9646,1555],{"class":133},[123,9648,9649,9651,9653,9655,9657,9659,9661,9663,9665,9667,9669],{"class":125,"line":8025},[123,9650,3210],{"class":129},[123,9652,1667],{"class":133},[123,9654,137],{"class":129},[123,9656,9448],{"class":133},[123,9658,179],{"class":129},[123,9660,4102],{"class":182},[123,9662,9455],{"class":133},[123,9664,1044],{"class":129},[123,9666,9460],{"class":133},[123,9668,2301],{"class":129},[123,9670,140],{"class":133},[123,9672,9673],{"class":125,"line":8031},[123,9674,2039],{"class":133},[123,9676,9677,9680,9682,9685,9687,9690,9692],{"class":125,"line":8043},[123,9678,9679],{"class":133},"        cout ",[123,9681,1178],{"class":129},[123,9683,9684],{"class":238}," \"Teacher: \"",[123,9686,1454],{"class":129},[123,9688,9689],{"class":133}," tArray[i].tName ",[123,9691,1178],{"class":129},[123,9693,8850],{"class":133},[123,9695,9696,9698,9700,9702,9704,9706,9708,9710,9712,9714,9716,9718],{"class":125,"line":8055},[123,9697,3412],{"class":129},[123,9699,1667],{"class":133},[123,9701,137],{"class":129},[123,9703,9510],{"class":133},[123,9705,179],{"class":129},[123,9707,4102],{"class":182},[123,9709,9517],{"class":133},[123,9711,1044],{"class":129},[123,9713,2157],{"class":182},[123,9715,9524],{"class":133},[123,9717,2301],{"class":129},[123,9719,140],{"class":133},[123,9721,9722],{"class":125,"line":8067},[123,9723,2519],{"class":133},[123,9725,9727,9730,9732,9735,9737,9740,9742,9745,9747],{"class":125,"line":9726},47,[123,9728,9729],{"class":133},"            cout ",[123,9731,1178],{"class":129},[123,9733,9734],{"class":238}," \"",[123,9736,1240],{"class":182},[123,9738,9739],{"class":238},"Student: \"",[123,9741,1454],{"class":129},[123,9743,9744],{"class":133}," tArray[i].sArray[j].sName",[123,9746,1178],{"class":129},[123,9748,1201],{"class":133},[123,9750,9752,9754,9756,9758,9760,9763,9765,9768,9770],{"class":125,"line":9751},48,[123,9753,9729],{"class":133},[123,9755,1178],{"class":129},[123,9757,9734],{"class":238},[123,9759,1240],{"class":182},[123,9761,9762],{"class":238},"Age: \"",[123,9764,1454],{"class":129},[123,9766,9767],{"class":133}," tArray[i].sArray[j].age ",[123,9769,1178],{"class":129},[123,9771,8850],{"class":133},[123,9773,9775,9777,9779,9781,9783,9786,9788,9791,9793],{"class":125,"line":9774},49,[123,9776,9729],{"class":133},[123,9778,1178],{"class":129},[123,9780,9734],{"class":238},[123,9782,1240],{"class":182},[123,9784,9785],{"class":238},"Score: \"",[123,9787,1454],{"class":129},[123,9789,9790],{"class":133}," tArray[i].sArray[j].score ",[123,9792,1178],{"class":129},[123,9794,9795],{"class":133}," endl;   \n",[123,9797,9799],{"class":125,"line":9798},50,[123,9800,2538],{"class":133},[123,9802,9804],{"class":125,"line":9803},51,[123,9805,2196],{"class":133},[123,9807,9809],{"class":125,"line":9808},52,[123,9810,1574],{"class":133},[123,9812,9814,9816,9818],{"class":125,"line":9813},53,[123,9815,137],{"class":129},[123,9817,1982],{"class":1972},[123,9819,1985],{"class":133},[123,9821,9823],{"class":125,"line":9822},54,[123,9824,1555],{"class":133},[123,9826,9828],{"class":125,"line":9827},55,[123,9829,9830],{"class":192},"    \u002F\u002F随机数种子\n",[123,9832,9834,9836,9838,9840,9842,9844,9846,9848,9850],{"class":125,"line":9833},56,[123,9835,2382],{"class":1972},[123,9837,2385],{"class":133},[123,9839,2388],{"class":129},[123,9841,2391],{"class":129},[123,9843,563],{"class":133},[123,9845,2396],{"class":1972},[123,9847,134],{"class":133},[123,9849,2401],{"class":182},[123,9851,2404],{"class":133},[123,9853,9855],{"class":125,"line":9854},57,[123,9856,9857],{"class":192},"    \u002F\u002F1.创建3名老师的数组\n",[123,9859,9861,9863,9865,9868,9870],{"class":125,"line":9860},58,[123,9862,7905],{"class":129},[123,9864,9409],{"class":1972},[123,9866,9867],{"class":133}," tArray[",[123,9869,205],{"class":182},[123,9871,4699],{"class":133},[123,9873,9875],{"class":125,"line":9874},59,[123,9876,9877],{"class":192},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[123,9879,9881,9883,9886,9888,9891,9894,9896,9898,9901,9903],{"class":125,"line":9880},60,[123,9882,1994],{"class":129},[123,9884,9885],{"class":133}," len ",[123,9887,179],{"class":129},[123,9889,9890],{"class":129}," sizeof",[123,9892,9893],{"class":133},"(tArray) ",[123,9895,718],{"class":129},[123,9897,9890],{"class":129},[123,9899,9900],{"class":133},"(tArray[",[123,9902,325],{"class":182},[123,9904,3865],{"class":133},[123,9906,9908,9911],{"class":125,"line":9907},61,[123,9909,9910],{"class":1972},"    allocateSpace",[123,9912,9913],{"class":133},"(tArray, len);\n",[123,9915,9917],{"class":125,"line":9916},62,[123,9918,9919],{"class":192},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[123,9921,9923,9926],{"class":125,"line":9922},63,[123,9924,9925],{"class":1972},"    printInfo",[123,9927,9913],{"class":133},[123,9929,9931],{"class":125,"line":9930},64,[123,9932,2409],{"emptyLinePlaceholder":50},[123,9934,9936],{"class":125,"line":9935},65,[123,9937,1574],{"class":133},[77,9939,9940],{"start":45},[80,9941,9942,9945],{},[283,9943,9944],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,9947,9948],{},"五名英雄信息如下：",[114,9950,9954],{"className":9951,"code":9952,"language":9953,"meta":37,"style":37},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[120,9955,9956,9974,9991,10008,10025],{"__ignoreMap":37},[123,9957,9958,9960,9963,9965,9967,9969,9972],{"class":125,"line":126},[123,9959,4926],{"class":133},[123,9961,9962],{"class":238},"\"刘备\"",[123,9964,512],{"class":133},[123,9966,909],{"class":182},[123,9968,512],{"class":133},[123,9970,9971],{"class":238},"\"男\"",[123,9973,4939],{"class":133},[123,9975,9976,9978,9981,9983,9985,9987,9989],{"class":125,"line":45},[123,9977,4926],{"class":133},[123,9979,9980],{"class":238},"\"关羽\"",[123,9982,512],{"class":133},[123,9984,884],{"class":182},[123,9986,512],{"class":133},[123,9988,9971],{"class":238},[123,9990,4939],{"class":133},[123,9992,9993,9995,9998,10000,10002,10004,10006],{"class":125,"line":1189},[123,9994,4926],{"class":133},[123,9996,9997],{"class":238},"\"张飞\"",[123,9999,512],{"class":133},[123,10001,834],{"class":182},[123,10003,512],{"class":133},[123,10005,9971],{"class":238},[123,10007,4939],{"class":133},[123,10009,10010,10012,10015,10017,10019,10021,10023],{"class":125,"line":1204},[123,10011,4926],{"class":133},[123,10013,10014],{"class":238},"\"赵云\"",[123,10016,512],{"class":133},[123,10018,859],{"class":182},[123,10020,512],{"class":133},[123,10022,9971],{"class":238},[123,10024,4939],{"class":133},[123,10026,10027,10029,10032,10034,10036,10038,10041],{"class":125,"line":1210},[123,10028,4926],{"class":133},[123,10030,10031],{"class":238},"\"貂蝉\"",[123,10033,512],{"class":133},[123,10035,809],{"class":182},[123,10037,512],{"class":133},[123,10039,10040],{"class":238},"\"女\"",[123,10042,4939],{"class":133},[14,10044,10045],{},"代码：",[114,10047,10049],{"className":116,"code":10048,"language":118,"meta":37,"style":37},"#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",[120,10050,10051,10057,10067,10073,10080,10084,10088,10094,10099,10103,10108,10131,10135,10160,10164,10197,10202,10231,10236,10251,10277,10297,10302,10307,10311,10315,10320,10342,10346,10370,10374,10436,10440,10444,10452,10456,10461,10472,10476,10492,10508,10524,10540,10556,10560,10580,10602,10607,10620,10627,10632,10638,10643,10656,10662],{"__ignoreMap":37},[123,10052,10053,10055],{"class":125,"line":126},[123,10054,1958],{"class":129},[123,10056,1961],{"class":238},[123,10058,10059,10061,10063,10065],{"class":125,"line":45},[123,10060,1966],{"class":129},[123,10062,1969],{"class":129},[123,10064,1973],{"class":1972},[123,10066,1300],{"class":133},[123,10068,10069,10071],{"class":125,"line":1189},[123,10070,1958],{"class":129},[123,10072,7759],{"class":238},[123,10074,10075,10077],{"class":125,"line":1204},[123,10076,7769],{"class":129},[123,10078,10079],{"class":1972}," Sanguo\n",[123,10081,10082],{"class":125,"line":1210},[123,10083,1555],{"class":133},[123,10085,10086],{"class":125,"line":1224},[123,10087,7795],{"class":133},[123,10089,10090,10092],{"class":125,"line":1230},[123,10091,1994],{"class":129},[123,10093,7807],{"class":133},[123,10095,10096],{"class":125,"line":1321},[123,10097,10098],{"class":133},"    string gender;\n",[123,10100,10101],{"class":125,"line":1327},[123,10102,4004],{"class":133},[123,10104,10105],{"class":125,"line":1339},[123,10106,10107],{"class":192},"\u002F\u002F定义排序函数\n",[123,10109,10110,10112,10114,10116,10119,10121,10123,10125,10127,10129],{"class":125,"line":1621},[123,10111,5374],{"class":129},[123,10113,7326],{"class":1972},[123,10115,134],{"class":133},[123,10117,10118],{"class":1972},"Sanguo",[123,10120,6528],{"class":129},[123,10122,829],{"class":5226},[123,10124,512],{"class":133},[123,10126,137],{"class":129},[123,10128,7341],{"class":5226},[123,10130,140],{"class":133},[123,10132,10133],{"class":125,"line":1626},[123,10134,1555],{"class":133},[123,10136,10137,10139,10141,10143,10145,10147,10149,10151,10153,10156,10158],{"class":125,"line":1632},[123,10138,3210],{"class":129},[123,10140,134],{"class":133},[123,10142,137],{"class":129},[123,10144,3041],{"class":133},[123,10146,179],{"class":129},[123,10148,325],{"class":182},[123,10150,3048],{"class":133},[123,10152,1044],{"class":129},[123,10154,10155],{"class":133},"len;i",[123,10157,2301],{"class":129},[123,10159,140],{"class":133},[123,10161,10162],{"class":125,"line":1637},[123,10163,2039],{"class":133},[123,10165,10166,10169,10171,10173,10175,10177,10179,10181,10183,10185,10187,10189,10191,10193,10195],{"class":125,"line":1651},[123,10167,10168],{"class":129},"     for",[123,10170,1667],{"class":133},[123,10172,137],{"class":129},[123,10174,3419],{"class":133},[123,10176,179],{"class":129},[123,10178,325],{"class":182},[123,10180,3426],{"class":133},[123,10182,1044],{"class":129},[123,10184,7368],{"class":133},[123,10186,666],{"class":129},[123,10188,351],{"class":182},[123,10190,666],{"class":129},[123,10192,3559],{"class":133},[123,10194,2301],{"class":129},[123,10196,140],{"class":133},[123,10198,10199],{"class":125,"line":1656},[123,10200,10201],{"class":133},"     {\n",[123,10203,10204,10207,10210,10212,10215,10217,10220,10222,10224,10226,10228],{"class":125,"line":1662},[123,10205,10206],{"class":129},"         if",[123,10208,10209],{"class":133}," ((s",[123,10211,615],{"class":129},[123,10213,10214],{"class":133},"j)->age ",[123,10216,1094],{"class":129},[123,10218,10219],{"class":133}," (s",[123,10221,615],{"class":129},[123,10223,601],{"class":133},[123,10225,615],{"class":129},[123,10227,351],{"class":182},[123,10229,10230],{"class":133},")->age)\n",[123,10232,10233],{"class":125,"line":1683},[123,10234,10235],{"class":133},"         {\n",[123,10237,10238,10241,10243,10246,10248],{"class":125,"line":1688},[123,10239,10240],{"class":133},"             Sanguo temp",[123,10242,7163],{"class":129},[123,10244,10245],{"class":133},"(s",[123,10247,615],{"class":129},[123,10249,10250],{"class":133},"j);\n",[123,10252,10253,10256,10258,10260,10263,10265,10267,10269,10271,10273,10275],{"class":125,"line":1702},[123,10254,10255],{"class":129},"             *",[123,10257,10245],{"class":133},[123,10259,615],{"class":129},[123,10261,10262],{"class":133},"j)",[123,10264,7163],{"class":129},[123,10266,10245],{"class":133},[123,10268,615],{"class":129},[123,10270,601],{"class":133},[123,10272,615],{"class":129},[123,10274,351],{"class":182},[123,10276,2728],{"class":133},[123,10278,10279,10281,10283,10285,10287,10289,10291,10293,10295],{"class":125,"line":1707},[123,10280,10255],{"class":129},[123,10282,10245],{"class":133},[123,10284,615],{"class":129},[123,10286,601],{"class":133},[123,10288,615],{"class":129},[123,10290,351],{"class":182},[123,10292,563],{"class":133},[123,10294,179],{"class":129},[123,10296,4289],{"class":133},[123,10298,10299],{"class":125,"line":1736},[123,10300,10301],{"class":133},"         }\n",[123,10303,10304],{"class":125,"line":1741},[123,10305,10306],{"class":133},"     }\n",[123,10308,10309],{"class":125,"line":1758},[123,10310,2196],{"class":133},[123,10312,10313],{"class":125,"line":1763},[123,10314,1574],{"class":133},[123,10316,10317],{"class":125,"line":1768},[123,10318,10319],{"class":192},"\u002F\u002F定义打印函数\n",[123,10321,10322,10324,10326,10328,10330,10332,10334,10336,10338,10340],{"class":125,"line":1773},[123,10323,5374],{"class":129},[123,10325,9625],{"class":1972},[123,10327,134],{"class":133},[123,10329,10118],{"class":1972},[123,10331,6528],{"class":129},[123,10333,829],{"class":5226},[123,10335,512],{"class":133},[123,10337,137],{"class":129},[123,10339,7341],{"class":5226},[123,10341,140],{"class":133},[123,10343,10344],{"class":125,"line":1787},[123,10345,1555],{"class":133},[123,10347,10348,10350,10352,10354,10356,10358,10360,10362,10364,10366,10368],{"class":125,"line":1792},[123,10349,3210],{"class":129},[123,10351,1667],{"class":133},[123,10353,137],{"class":129},[123,10355,3041],{"class":133},[123,10357,179],{"class":129},[123,10359,325],{"class":182},[123,10361,3048],{"class":133},[123,10363,1044],{"class":129},[123,10365,10155],{"class":133},[123,10367,2301],{"class":129},[123,10369,140],{"class":133},[123,10371,10372],{"class":125,"line":2586},[123,10373,2039],{"class":133},[123,10375,10376,10378,10380,10382,10384,10387,10389,10391,10393,10396,10398,10400,10402,10405,10407,10409,10411,10414,10416,10418,10420,10423,10425,10427,10429,10432,10434],{"class":125,"line":2600},[123,10377,3460],{"class":133},[123,10379,1178],{"class":129},[123,10381,385],{"class":238},[123,10383,1240],{"class":182},[123,10385,10386],{"class":238},"姓名：\"",[123,10388,1178],{"class":129},[123,10390,10245],{"class":133},[123,10392,615],{"class":129},[123,10394,10395],{"class":133},"i)->name",[123,10397,1178],{"class":129},[123,10399,385],{"class":238},[123,10401,1240],{"class":182},[123,10403,10404],{"class":238},"年龄：\"",[123,10406,1178],{"class":129},[123,10408,10245],{"class":133},[123,10410,615],{"class":129},[123,10412,10413],{"class":133},"i)->age",[123,10415,1178],{"class":129},[123,10417,385],{"class":238},[123,10419,1240],{"class":182},[123,10421,10422],{"class":238},"性别：\"",[123,10424,1178],{"class":129},[123,10426,10245],{"class":133},[123,10428,615],{"class":129},[123,10430,10431],{"class":133},"i)->gender",[123,10433,1178],{"class":129},[123,10435,1201],{"class":133},[123,10437,10438],{"class":125,"line":2608},[123,10439,2196],{"class":133},[123,10441,10442],{"class":125,"line":2613},[123,10443,1574],{"class":133},[123,10445,10446,10448,10450],{"class":125,"line":2619},[123,10447,137],{"class":129},[123,10449,1982],{"class":1972},[123,10451,1985],{"class":133},[123,10453,10454],{"class":125,"line":2625},[123,10455,1555],{"class":133},[123,10457,10458],{"class":125,"line":2630},[123,10459,10460],{"class":192},"    \u002F\u002F定义结构体变量\n",[123,10462,10463,10466,10468,10470],{"class":125,"line":7958},[123,10464,10465],{"class":133},"    Sanguo s1[",[123,10467,453],{"class":182},[123,10469,1074],{"class":133},[123,10471,4917],{"class":129},[123,10473,10474],{"class":125,"line":7982},[123,10475,2039],{"class":133},[123,10477,10478,10480,10482,10484,10486,10488,10490],{"class":125,"line":7987},[123,10479,4926],{"class":133},[123,10481,9962],{"class":238},[123,10483,512],{"class":133},[123,10485,909],{"class":182},[123,10487,512],{"class":133},[123,10489,9971],{"class":238},[123,10491,4939],{"class":133},[123,10493,10494,10496,10498,10500,10502,10504,10506],{"class":125,"line":7993},[123,10495,4926],{"class":133},[123,10497,9980],{"class":238},[123,10499,512],{"class":133},[123,10501,884],{"class":182},[123,10503,512],{"class":133},[123,10505,9971],{"class":238},[123,10507,4939],{"class":133},[123,10509,10510,10512,10514,10516,10518,10520,10522],{"class":125,"line":8020},[123,10511,4926],{"class":133},[123,10513,9997],{"class":238},[123,10515,512],{"class":133},[123,10517,834],{"class":182},[123,10519,512],{"class":133},[123,10521,9971],{"class":238},[123,10523,4939],{"class":133},[123,10525,10526,10528,10530,10532,10534,10536,10538],{"class":125,"line":8025},[123,10527,4926],{"class":133},[123,10529,10014],{"class":238},[123,10531,512],{"class":133},[123,10533,859],{"class":182},[123,10535,512],{"class":133},[123,10537,9971],{"class":238},[123,10539,4939],{"class":133},[123,10541,10542,10544,10546,10548,10550,10552,10554],{"class":125,"line":8031},[123,10543,4926],{"class":133},[123,10545,10031],{"class":238},[123,10547,512],{"class":133},[123,10549,809],{"class":182},[123,10551,512],{"class":133},[123,10553,10040],{"class":238},[123,10555,4939],{"class":133},[123,10557,10558],{"class":125,"line":8043},[123,10559,4960],{"class":133},[123,10561,10562,10564,10566,10568,10571,10573,10576,10578],{"class":125,"line":8055},[123,10563,1994],{"class":129},[123,10565,7341],{"class":133},[123,10567,4212],{"class":129},[123,10569,10570],{"class":133},"(s1)",[123,10572,4218],{"class":129},[123,10574,10575],{"class":133},"(s1[",[123,10577,325],{"class":182},[123,10579,3865],{"class":133},[123,10581,10582,10585,10587,10590,10592,10595,10598,10600],{"class":125,"line":8067},[123,10583,10584],{"class":133},"    Sanguo ",[123,10586,589],{"class":129},[123,10588,10589],{"class":133},"s ",[123,10591,179],{"class":129},[123,10593,10594],{"class":129}," &",[123,10596,10597],{"class":133},"s1[",[123,10599,325],{"class":182},[123,10601,4699],{"class":133},[123,10603,10604],{"class":125,"line":9726},[123,10605,10606],{"class":192},"    \u002F\u002F排序前：\n",[123,10608,10609,10611,10613,10616,10618],{"class":125,"line":9751},[123,10610,6539],{"class":133},[123,10612,1178],{"class":129},[123,10614,10615],{"class":238}," \"排序前：\"",[123,10617,1454],{"class":129},[123,10619,8850],{"class":133},[123,10621,10622,10624],{"class":125,"line":9774},[123,10623,9925],{"class":1972},[123,10625,10626],{"class":133},"(s,len);\n",[123,10628,10629],{"class":125,"line":9798},[123,10630,10631],{"class":192},"    \u002F\u002F调用排序函数\n",[123,10633,10634,10636],{"class":125,"line":9803},[123,10635,7608],{"class":1972},[123,10637,10626],{"class":133},[123,10639,10640],{"class":125,"line":9808},[123,10641,10642],{"class":192},"    \u002F\u002F排序后\n",[123,10644,10645,10647,10649,10652,10654],{"class":125,"line":9813},[123,10646,6539],{"class":133},[123,10648,1178],{"class":129},[123,10650,10651],{"class":238}," \"排序后：\"",[123,10653,1454],{"class":129},[123,10655,8850],{"class":133},[123,10657,10658,10660],{"class":125,"line":9822},[123,10659,9925],{"class":1972},[123,10661,10626],{"class":133},[123,10663,10664],{"class":125,"line":9827},[123,10665,1574],{"class":133},[14,10667,10668,10669,10671],{},"注意：使用指针时直接用传首地址**&s",[123,10670,325],{},"**",[5136,10673,10674],{},"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":37,"searchDepth":45,"depth":45,"links":10676},[10677,10678,10679,10680,10681,10682,10683],{"id":7713,"depth":45,"text":7714},{"id":8075,"depth":45,"text":8076},{"id":8344,"depth":45,"text":8345},{"id":8509,"depth":45,"text":8510},{"id":8725,"depth":45,"text":8726},{"id":9046,"depth":45,"text":9047},{"id":9274,"depth":45,"text":9275},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7702,"description":7710},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10690,"title":10691,"body":10692,"description":37,"extension":48,"meta":12035,"navigation":50,"path":12036,"seo":12037,"stem":12038,"__hash__":12039},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10693,"toc":12029},[10694,10697,10701,10707,10721,10726,10729,10733,10740,10746,10749,10756,10762,10767,10770,10773,10776,11340,11343,11357,11361,11366,11382,11522,11525,11531,11534,11539,11547,11655,11658,11663,11666,11671,11674,11680,11683,12026],[10,10695,10691],{"id":10696},"_5程序内存模型",[65,10698,10700],{"id":10699},"_51内存分区模型","5.1内存分区模型",[14,10702,10703,10704],{},"C++程序在执行时，将内存大方向划分为",[283,10705,10706],{},"4个区域",[1141,10708,10709,10712,10715,10718],{},[80,10710,10711],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[80,10713,10714],{},"全局区：存放全局变量和静态变量以及常量",[80,10716,10717],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[80,10719,10720],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,10722,10723],{},[283,10724,10725],{},"内存四区意义：",[14,10727,10728],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[94,10730,10732],{"id":10731},"_511程序运行前","5.1.1程序运行前",[14,10734,10735,10736,10739],{},"​\t在程序编译后，生成了exe可执行程序，",[283,10737,10738],{},"未执行该程序前","分为两个区域",[14,10741,10742,10743],{},"​\t",[283,10744,10745],{},"代码区：",[14,10747,10748],{},"​\t\t存放 CPU 执行的机器指令",[14,10750,10751,10752,10755],{},"​\t\t代码区是",[283,10753,10754],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,10757,10751,10758,10761],{},[283,10759,10760],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,10763,10742,10764],{},[283,10765,10766],{},"全局区：",[14,10768,10769],{},"​\t\t全局变量和静态变量存放在此.",[14,10771,10772],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,10774,10775],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[114,10777,10779],{"className":116,"code":10778,"language":118,"meta":37,"style":37},"\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",[120,10780,10781,10786,10799,10812,10816,10821,10836,10851,10855,10864,10868,10873,10886,10899,10903,10908,10934,10960,10964,10991,11017,11021,11026,11042,11057,11061,11087,11113,11117,11142,11167,11171,11197,11223,11227,11243,11258,11284,11310,11314,11324,11328,11336],{"__ignoreMap":37},[123,10782,10783],{"class":125,"line":126},[123,10784,10785],{"class":192},"\u002F\u002F全局变量\n",[123,10787,10788,10790,10793,10795,10797],{"class":125,"line":45},[123,10789,137],{"class":129},[123,10791,10792],{"class":133}," g_a ",[123,10794,179],{"class":129},[123,10796,2047],{"class":182},[123,10798,1300],{"class":133},[123,10800,10801,10803,10806,10808,10810],{"class":125,"line":1189},[123,10802,137],{"class":129},[123,10804,10805],{"class":133}," g_b ",[123,10807,179],{"class":129},[123,10809,2047],{"class":182},[123,10811,1300],{"class":133},[123,10813,10814],{"class":125,"line":1204},[123,10815,2409],{"emptyLinePlaceholder":50},[123,10817,10818],{"class":125,"line":1210},[123,10819,10820],{"class":192},"\u002F\u002F全局常量\n",[123,10822,10823,10825,10827,10830,10832,10834],{"class":125,"line":1224},[123,10824,6802],{"class":129},[123,10826,2391],{"class":129},[123,10828,10829],{"class":133}," c_g_a ",[123,10831,179],{"class":129},[123,10833,2047],{"class":182},[123,10835,1300],{"class":133},[123,10837,10838,10840,10842,10845,10847,10849],{"class":125,"line":1230},[123,10839,6802],{"class":129},[123,10841,2391],{"class":129},[123,10843,10844],{"class":133}," c_g_b ",[123,10846,179],{"class":129},[123,10848,2047],{"class":182},[123,10850,1300],{"class":133},[123,10852,10853],{"class":125,"line":1321},[123,10854,2409],{"emptyLinePlaceholder":50},[123,10856,10857,10859,10861],{"class":125,"line":1327},[123,10858,137],{"class":129},[123,10860,1982],{"class":1972},[123,10862,10863],{"class":133},"() {\n",[123,10865,10866],{"class":125,"line":1339},[123,10867,2409],{"emptyLinePlaceholder":50},[123,10869,10870],{"class":125,"line":1621},[123,10871,10872],{"class":192},"    \u002F\u002F局部变量\n",[123,10874,10875,10877,10880,10882,10884],{"class":125,"line":1626},[123,10876,1994],{"class":129},[123,10878,10879],{"class":133}," a ",[123,10881,179],{"class":129},[123,10883,2047],{"class":182},[123,10885,1300],{"class":133},[123,10887,10888,10890,10893,10895,10897],{"class":125,"line":1632},[123,10889,1994],{"class":129},[123,10891,10892],{"class":133}," b ",[123,10894,179],{"class":129},[123,10896,2047],{"class":182},[123,10898,1300],{"class":133},[123,10900,10901],{"class":125,"line":1637},[123,10902,2409],{"emptyLinePlaceholder":50},[123,10904,10905],{"class":125,"line":1651},[123,10906,10907],{"class":192},"    \u002F\u002F打印地址\n",[123,10909,10910,10912,10914,10917,10919,10921,10923,10925,10927,10930,10932],{"class":125,"line":1656},[123,10911,6539],{"class":133},[123,10913,1178],{"class":129},[123,10915,10916],{"class":238}," \"局部变量a地址为： \"",[123,10918,1454],{"class":129},[123,10920,1667],{"class":133},[123,10922,137],{"class":129},[123,10924,563],{"class":133},[123,10926,487],{"class":129},[123,10928,10929],{"class":133},"a ",[123,10931,1178],{"class":129},[123,10933,8850],{"class":133},[123,10935,10936,10938,10940,10943,10945,10947,10949,10951,10953,10956,10958],{"class":125,"line":1662},[123,10937,6539],{"class":133},[123,10939,1178],{"class":129},[123,10941,10942],{"class":238}," \"局部变量b地址为： \"",[123,10944,1454],{"class":129},[123,10946,1667],{"class":133},[123,10948,137],{"class":129},[123,10950,563],{"class":133},[123,10952,487],{"class":129},[123,10954,10955],{"class":133},"b ",[123,10957,1178],{"class":129},[123,10959,8850],{"class":133},[123,10961,10962],{"class":125,"line":1683},[123,10963,2409],{"emptyLinePlaceholder":50},[123,10965,10966,10968,10970,10973,10975,10978,10980,10982,10984,10987,10989],{"class":125,"line":1688},[123,10967,6539],{"class":133},[123,10969,1178],{"class":129},[123,10971,10972],{"class":238}," \"全局变量g_a地址为： \"",[123,10974,1454],{"class":129},[123,10976,10977],{"class":133},"  (",[123,10979,137],{"class":129},[123,10981,563],{"class":133},[123,10983,487],{"class":129},[123,10985,10986],{"class":133},"g_a ",[123,10988,1178],{"class":129},[123,10990,8850],{"class":133},[123,10992,10993,10995,10997,11000,11002,11004,11006,11008,11010,11013,11015],{"class":125,"line":1702},[123,10994,6539],{"class":133},[123,10996,1178],{"class":129},[123,10998,10999],{"class":238}," \"全局变量g_b地址为： \"",[123,11001,1454],{"class":129},[123,11003,10977],{"class":133},[123,11005,137],{"class":129},[123,11007,563],{"class":133},[123,11009,487],{"class":129},[123,11011,11012],{"class":133},"g_b ",[123,11014,1178],{"class":129},[123,11016,8850],{"class":133},[123,11018,11019],{"class":125,"line":1707},[123,11020,2409],{"emptyLinePlaceholder":50},[123,11022,11023],{"class":125,"line":1736},[123,11024,11025],{"class":192},"    \u002F\u002F静态变量\n",[123,11027,11028,11031,11033,11036,11038,11040],{"class":125,"line":1741},[123,11029,11030],{"class":129},"    static",[123,11032,2391],{"class":129},[123,11034,11035],{"class":133}," s_a ",[123,11037,179],{"class":129},[123,11039,2047],{"class":182},[123,11041,1300],{"class":133},[123,11043,11044,11046,11048,11051,11053,11055],{"class":125,"line":1758},[123,11045,11030],{"class":129},[123,11047,2391],{"class":129},[123,11049,11050],{"class":133}," s_b ",[123,11052,179],{"class":129},[123,11054,2047],{"class":182},[123,11056,1300],{"class":133},[123,11058,11059],{"class":125,"line":1763},[123,11060,2409],{"emptyLinePlaceholder":50},[123,11062,11063,11065,11067,11070,11072,11074,11076,11078,11080,11083,11085],{"class":125,"line":1768},[123,11064,6539],{"class":133},[123,11066,1178],{"class":129},[123,11068,11069],{"class":238}," \"静态变量s_a地址为： \"",[123,11071,1454],{"class":129},[123,11073,1667],{"class":133},[123,11075,137],{"class":129},[123,11077,563],{"class":133},[123,11079,487],{"class":129},[123,11081,11082],{"class":133},"s_a ",[123,11084,1178],{"class":129},[123,11086,8850],{"class":133},[123,11088,11089,11091,11093,11096,11098,11100,11102,11104,11106,11109,11111],{"class":125,"line":1773},[123,11090,6539],{"class":133},[123,11092,1178],{"class":129},[123,11094,11095],{"class":238}," \"静态变量s_b地址为： \"",[123,11097,1454],{"class":129},[123,11099,1667],{"class":133},[123,11101,137],{"class":129},[123,11103,563],{"class":133},[123,11105,487],{"class":129},[123,11107,11108],{"class":133},"s_b ",[123,11110,1178],{"class":129},[123,11112,8850],{"class":133},[123,11114,11115],{"class":125,"line":1787},[123,11116,2409],{"emptyLinePlaceholder":50},[123,11118,11119,11121,11123,11126,11128,11130,11132,11134,11136,11138,11140],{"class":125,"line":1792},[123,11120,6539],{"class":133},[123,11122,1178],{"class":129},[123,11124,11125],{"class":238}," \"字符串常量地址为： \"",[123,11127,1454],{"class":129},[123,11129,1667],{"class":133},[123,11131,137],{"class":129},[123,11133,563],{"class":133},[123,11135,487],{"class":129},[123,11137,1196],{"class":238},[123,11139,1454],{"class":129},[123,11141,8850],{"class":133},[123,11143,11144,11146,11148,11150,11152,11154,11156,11158,11160,11163,11165],{"class":125,"line":2586},[123,11145,6539],{"class":133},[123,11147,1178],{"class":129},[123,11149,11125],{"class":238},[123,11151,1454],{"class":129},[123,11153,1667],{"class":133},[123,11155,137],{"class":129},[123,11157,563],{"class":133},[123,11159,487],{"class":129},[123,11161,11162],{"class":238},"\"hello world1\"",[123,11164,1454],{"class":129},[123,11166,8850],{"class":133},[123,11168,11169],{"class":125,"line":2600},[123,11170,2409],{"emptyLinePlaceholder":50},[123,11172,11173,11175,11177,11180,11182,11184,11186,11188,11190,11193,11195],{"class":125,"line":2608},[123,11174,6539],{"class":133},[123,11176,1178],{"class":129},[123,11178,11179],{"class":238}," \"全局常量c_g_a地址为： \"",[123,11181,1454],{"class":129},[123,11183,1667],{"class":133},[123,11185,137],{"class":129},[123,11187,563],{"class":133},[123,11189,487],{"class":129},[123,11191,11192],{"class":133},"c_g_a ",[123,11194,1178],{"class":129},[123,11196,8850],{"class":133},[123,11198,11199,11201,11203,11206,11208,11210,11212,11214,11216,11219,11221],{"class":125,"line":2613},[123,11200,6539],{"class":133},[123,11202,1178],{"class":129},[123,11204,11205],{"class":238}," \"全局常量c_g_b地址为： \"",[123,11207,1454],{"class":129},[123,11209,1667],{"class":133},[123,11211,137],{"class":129},[123,11213,563],{"class":133},[123,11215,487],{"class":129},[123,11217,11218],{"class":133},"c_g_b ",[123,11220,1178],{"class":129},[123,11222,8850],{"class":133},[123,11224,11225],{"class":125,"line":2619},[123,11226,2409],{"emptyLinePlaceholder":50},[123,11228,11229,11232,11234,11237,11239,11241],{"class":125,"line":2625},[123,11230,11231],{"class":129},"    const",[123,11233,2391],{"class":129},[123,11235,11236],{"class":133}," c_l_a ",[123,11238,179],{"class":129},[123,11240,2047],{"class":182},[123,11242,1300],{"class":133},[123,11244,11245,11247,11249,11252,11254,11256],{"class":125,"line":2630},[123,11246,11231],{"class":129},[123,11248,2391],{"class":129},[123,11250,11251],{"class":133}," c_l_b ",[123,11253,179],{"class":129},[123,11255,2047],{"class":182},[123,11257,1300],{"class":133},[123,11259,11260,11262,11264,11267,11269,11271,11273,11275,11277,11280,11282],{"class":125,"line":7958},[123,11261,6539],{"class":133},[123,11263,1178],{"class":129},[123,11265,11266],{"class":238}," \"局部常量c_l_a地址为： \"",[123,11268,1454],{"class":129},[123,11270,1667],{"class":133},[123,11272,137],{"class":129},[123,11274,563],{"class":133},[123,11276,487],{"class":129},[123,11278,11279],{"class":133},"c_l_a ",[123,11281,1178],{"class":129},[123,11283,8850],{"class":133},[123,11285,11286,11288,11290,11293,11295,11297,11299,11301,11303,11306,11308],{"class":125,"line":7982},[123,11287,6539],{"class":133},[123,11289,1178],{"class":129},[123,11291,11292],{"class":238}," \"局部常量c_l_b地址为： \"",[123,11294,1454],{"class":129},[123,11296,1667],{"class":133},[123,11298,137],{"class":129},[123,11300,563],{"class":133},[123,11302,487],{"class":129},[123,11304,11305],{"class":133},"c_l_b ",[123,11307,1178],{"class":129},[123,11309,8850],{"class":133},[123,11311,11312],{"class":125,"line":7987},[123,11313,2409],{"emptyLinePlaceholder":50},[123,11315,11316,11318,11320,11322],{"class":125,"line":7993},[123,11317,2312],{"class":1972},[123,11319,134],{"class":133},[123,11321,2317],{"class":238},[123,11323,2728],{"class":133},[123,11325,11326],{"class":125,"line":8020},[123,11327,2409],{"emptyLinePlaceholder":50},[123,11329,11330,11332,11334],{"class":125,"line":8025},[123,11331,4099],{"class":129},[123,11333,4102],{"class":182},[123,11335,1300],{"class":133},[123,11337,11338],{"class":125,"line":8031},[123,11339,1574],{"class":133},[14,11341,11342],{},"总结：",[1141,11344,11345,11348,11351,11354],{},[80,11346,11347],{},"c++中程序运行前分为全局区和代码区",[80,11349,11350],{},"代码区特点是共享和只读",[80,11352,11353],{},"全局区中存放全局变量、静态变量、常量",[80,11355,11356],{},"常量区中存放const修饰的全局常量和字符串常量",[94,11358,11360],{"id":11359},"_512程序运行后","5.1.2程序运行后",[77,11362,11363],{},[80,11364,11365],{},"栈区：",[1141,11367,11368,11375],{},[80,11369,11370,11371,11374],{},"由编译器自动分配释放, 存放",[283,11372,11373],{},"函数的参数值,局部变量","等",[80,11376,11377,11378,11381],{},"注意事项：",[283,11379,11380],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[114,11383,11385],{"className":116,"code":11384,"language":118,"meta":37,"style":37},"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",[120,11386,11387,11398,11402,11417,11429,11433,11437,11445,11450,11465,11483,11500,11510,11518],{"__ignoreMap":37},[123,11388,11389,11391,11393,11396],{"class":125,"line":126},[123,11390,137],{"class":129},[123,11392,6528],{"class":129},[123,11394,11395],{"class":1972}," func",[123,11397,1985],{"class":133},[123,11399,11400],{"class":125,"line":45},[123,11401,1555],{"class":133},[123,11403,11404,11406,11408,11410,11412,11414],{"class":125,"line":1189},[123,11405,1994],{"class":129},[123,11407,10879],{"class":133},[123,11409,179],{"class":129},[123,11411,2047],{"class":182},[123,11413,189],{"class":133},[123,11415,11416],{"class":192}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[123,11418,11419,11421,11423,11426],{"class":125,"line":1204},[123,11420,4099],{"class":129},[123,11422,10594],{"class":129},[123,11424,11425],{"class":133},"a;",[123,11427,11428],{"class":192}," \u002F\u002F放回局部变量的地址\n",[123,11430,11431],{"class":125,"line":1210},[123,11432,1574],{"class":133},[123,11434,11435],{"class":125,"line":1224},[123,11436,2409],{"emptyLinePlaceholder":50},[123,11438,11439,11441,11443],{"class":125,"line":1230},[123,11440,137],{"class":129},[123,11442,1982],{"class":1972},[123,11444,10863],{"class":133},[123,11446,11447],{"class":125,"line":1321},[123,11448,11449],{"class":192},"    \u002F\u002F接受func的返回值\n",[123,11451,11452,11454,11456,11459,11461,11463],{"class":125,"line":1327},[123,11453,1994],{"class":129},[123,11455,6528],{"class":129},[123,11457,11458],{"class":133},"p ",[123,11460,179],{"class":129},[123,11462,11395],{"class":1972},[123,11464,5646],{"class":133},[123,11466,11467,11469,11471,11473,11475,11477,11480],{"class":125,"line":1339},[123,11468,6539],{"class":133},[123,11470,1178],{"class":129},[123,11472,6528],{"class":129},[123,11474,11458],{"class":133},[123,11476,1178],{"class":129},[123,11478,11479],{"class":133}," endl;",[123,11481,11482],{"class":192}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[123,11484,11485,11487,11489,11491,11493,11495,11497],{"class":125,"line":1621},[123,11486,6539],{"class":133},[123,11488,1178],{"class":129},[123,11490,6528],{"class":129},[123,11492,11458],{"class":133},[123,11494,1178],{"class":129},[123,11496,11479],{"class":133},[123,11498,11499],{"class":192}," \u002F\u002F第二次这个数据不再保留\n",[123,11501,11502,11504,11506,11508],{"class":125,"line":1626},[123,11503,2312],{"class":1972},[123,11505,134],{"class":133},[123,11507,2317],{"class":238},[123,11509,2728],{"class":133},[123,11511,11512,11514,11516],{"class":125,"line":1632},[123,11513,4099],{"class":129},[123,11515,4102],{"class":182},[123,11517,1300],{"class":133},[123,11519,11520],{"class":125,"line":1637},[123,11521,1574],{"class":133},[14,11523,11524],{},"输出结果：",[14,11526,11527],{},[35,11528],{"alt":11529,"src":11530},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11532,11533],{},"总结：不要返回局部变量的地址",[77,11535,11536],{"start":45},[80,11537,11538],{},"堆区",[1141,11540,11541,11544],{},[80,11542,11543],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[80,11545,11546],{},"在c++中主要利用new在堆区开辟内存",[114,11548,11550],{"className":116,"code":11549,"language":118,"meta":37,"style":37},"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",[120,11551,11552,11567,11571,11576,11597,11604,11608,11616,11620,11625,11639,11651],{"__ignoreMap":37},[123,11553,11554,11556,11559,11562,11564],{"class":125,"line":126},[123,11555,137],{"class":129},[123,11557,11558],{"class":129},"  *",[123,11560,11561],{"class":1972},"func",[123,11563,2436],{"class":133},[123,11565,11566],{"class":192},"  \u002F\u002F函数返回指针\n",[123,11568,11569],{"class":125,"line":45},[123,11570,1555],{"class":133},[123,11572,11573],{"class":125,"line":1189},[123,11574,11575],{"class":192},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[123,11577,11578,11580,11582,11584,11586,11589,11591,11593,11595],{"class":125,"line":1204},[123,11579,4156],{"class":129},[123,11581,6528],{"class":129},[123,11583,14],{"class":133},[123,11585,179],{"class":129},[123,11587,11588],{"class":129}," new",[123,11590,2391],{"class":129},[123,11592,134],{"class":133},[123,11594,580],{"class":182},[123,11596,2728],{"class":133},[123,11598,11599,11601],{"class":125,"line":1210},[123,11600,4390],{"class":129},[123,11602,11603],{"class":133}," p;\n",[123,11605,11606],{"class":125,"line":1224},[123,11607,1574],{"class":133},[123,11609,11610,11612,11614],{"class":125,"line":1230},[123,11611,137],{"class":129},[123,11613,1982],{"class":1972},[123,11615,1985],{"class":133},[123,11617,11618],{"class":125,"line":1321},[123,11619,1555],{"class":133},[123,11621,11622],{"class":125,"line":1327},[123,11623,11624],{"class":192},"    \u002F\u002F在堆区开辟数据\n",[123,11626,11627,11629,11631,11633,11635,11637],{"class":125,"line":1339},[123,11628,1994],{"class":129},[123,11630,6528],{"class":129},[123,11632,14],{"class":133},[123,11634,179],{"class":129},[123,11636,11561],{"class":1972},[123,11638,5646],{"class":133},[123,11640,11641,11643,11645,11647,11649],{"class":125,"line":1621},[123,11642,1560],{"class":133},[123,11644,6429],{"class":129},[123,11646,14],{"class":133},[123,11648,1178],{"class":129},[123,11650,1201],{"class":133},[123,11652,11653],{"class":125,"line":1626},[123,11654,1574],{"class":133},[14,11656,11657],{},"图片展示：",[14,11659,11660],{},[35,11661],{"alt":11529,"src":11662},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,11664,11665],{},"堆区内存由程序员管生死！！！",[77,11667,11668],{"start":1189},[80,11669,11670],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,11672,11673],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,11675,11676,11677],{},"​语法：",[120,11678,11679],{}," new 数据类型",[14,11681,11682],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[114,11684,11686],{"className":116,"code":11685,"language":118,"meta":37,"style":37},"\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",[120,11687,11688,11693,11703,11707,11712,11717,11739,11743,11751,11755,11769,11781,11793,11805,11810,11815,11826,11830,11835,11843,11847,11852,11874,11900,11904,11922,11926,11952,11956,11968,11972,11977,11982,11990,11994,11998,12006,12010,12016,12022],{"__ignoreMap":37},[123,11689,11690],{"class":125,"line":126},[123,11691,11692],{"class":192},"\u002F\u002F1.new的基本语法\n",[123,11694,11695,11697,11699,11701],{"class":125,"line":45},[123,11696,137],{"class":129},[123,11698,6528],{"class":129},[123,11700,11561],{"class":1972},[123,11702,1985],{"class":133},[123,11704,11705],{"class":125,"line":1189},[123,11706,1555],{"class":133},[123,11708,11709],{"class":125,"line":1204},[123,11710,11711],{"class":192},"    \u002F\u002F在堆区创建整型数据\n",[123,11713,11714],{"class":125,"line":1210},[123,11715,11716],{"class":192},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[123,11718,11719,11721,11723,11725,11728,11730,11732,11734,11736],{"class":125,"line":1224},[123,11720,1994],{"class":129},[123,11722,6528],{"class":129},[123,11724,14],{"class":133},[123,11726,11727],{"class":129},"=new",[123,11729,2391],{"class":129},[123,11731,134],{"class":133},[123,11733,580],{"class":182},[123,11735,5976],{"class":133},[123,11737,11738],{"class":192},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[123,11740,11741],{"class":125,"line":1230},[123,11742,1574],{"class":133},[123,11744,11745,11747,11749],{"class":125,"line":1321},[123,11746,5374],{"class":129},[123,11748,5598],{"class":1972},[123,11750,1985],{"class":133},[123,11752,11753],{"class":125,"line":1327},[123,11754,1555],{"class":133},[123,11756,11757,11759,11761,11763,11765,11767],{"class":125,"line":1339},[123,11758,1994],{"class":129},[123,11760,6528],{"class":129},[123,11762,14],{"class":133},[123,11764,179],{"class":129},[123,11766,11561],{"class":1972},[123,11768,5646],{"class":133},[123,11770,11771,11773,11775,11777,11779],{"class":125,"line":1621},[123,11772,1560],{"class":133},[123,11774,6429],{"class":129},[123,11776,14],{"class":133},[123,11778,1178],{"class":129},[123,11780,1201],{"class":133},[123,11782,11783,11785,11787,11789,11791],{"class":125,"line":1626},[123,11784,1560],{"class":133},[123,11786,6429],{"class":129},[123,11788,14],{"class":133},[123,11790,1178],{"class":129},[123,11792,1201],{"class":133},[123,11794,11795,11797,11799,11801,11803],{"class":125,"line":1632},[123,11796,1560],{"class":133},[123,11798,6429],{"class":129},[123,11800,14],{"class":133},[123,11802,1178],{"class":129},[123,11804,1201],{"class":133},[123,11806,11807],{"class":125,"line":1637},[123,11808,11809],{"class":192},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[123,11811,11812],{"class":125,"line":1651},[123,11813,11814],{"class":192},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[123,11816,11817,11820,11823],{"class":125,"line":1656},[123,11818,11819],{"class":129},"    delete",[123,11821,11822],{"class":133}," p;",[123,11824,11825],{"class":192},"\u002F\u002F删除这块地址\n",[123,11827,11828],{"class":125,"line":1662},[123,11829,1574],{"class":133},[123,11831,11832],{"class":125,"line":1683},[123,11833,11834],{"class":192},"\u002F\u002F2.在堆区利用new开辟数组\n",[123,11836,11837,11839,11841],{"class":125,"line":1688},[123,11838,5374],{"class":129},[123,11840,5667],{"class":1972},[123,11842,1985],{"class":133},[123,11844,11845],{"class":125,"line":1702},[123,11846,1555],{"class":133},[123,11848,11849],{"class":125,"line":1707},[123,11850,11851],{"class":192},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[123,11853,11854,11856,11858,11860,11862,11864,11866,11868,11871],{"class":125,"line":1736},[123,11855,1994],{"class":129},[123,11857,6528],{"class":129},[123,11859,3889],{"class":133},[123,11861,11727],{"class":129},[123,11863,2391],{"class":129},[123,11865,1024],{"class":133},[123,11867,580],{"class":182},[123,11869,11870],{"class":133},"];",[123,11872,11873],{"class":192},"\u002F\u002F10代表数组有10个元素\n",[123,11875,11876,11878,11880,11882,11884,11886,11888,11890,11892,11894,11896,11898],{"class":125,"line":1741},[123,11877,3210],{"class":129},[123,11879,1667],{"class":133},[123,11881,137],{"class":129},[123,11883,3041],{"class":133},[123,11885,179],{"class":129},[123,11887,325],{"class":182},[123,11889,3048],{"class":133},[123,11891,1044],{"class":129},[123,11893,580],{"class":182},[123,11895,3048],{"class":133},[123,11897,2301],{"class":129},[123,11899,140],{"class":133},[123,11901,11902],{"class":125,"line":1758},[123,11903,2039],{"class":133},[123,11905,11906,11909,11911,11913,11915,11917,11919],{"class":125,"line":1763},[123,11907,11908],{"class":133},"        arr[i]",[123,11910,179],{"class":129},[123,11912,575],{"class":133},[123,11914,615],{"class":129},[123,11916,445],{"class":182},[123,11918,189],{"class":133},[123,11920,11921],{"class":192},"\u002F\u002F给10个元素赋值100～109\n",[123,11923,11924],{"class":125,"line":1768},[123,11925,2196],{"class":133},[123,11927,11928,11930,11932,11934,11936,11938,11940,11942,11944,11946,11948,11950],{"class":125,"line":1773},[123,11929,3210],{"class":129},[123,11931,1667],{"class":133},[123,11933,137],{"class":129},[123,11935,3041],{"class":133},[123,11937,179],{"class":129},[123,11939,325],{"class":182},[123,11941,3048],{"class":133},[123,11943,1044],{"class":129},[123,11945,580],{"class":182},[123,11947,3048],{"class":133},[123,11949,2301],{"class":129},[123,11951,140],{"class":133},[123,11953,11954],{"class":125,"line":1787},[123,11955,2039],{"class":133},[123,11957,11958,11960,11962,11964,11966],{"class":125,"line":1792},[123,11959,3460],{"class":133},[123,11961,1178],{"class":129},[123,11963,4363],{"class":133},[123,11965,1178],{"class":129},[123,11967,1201],{"class":133},[123,11969,11970],{"class":125,"line":2586},[123,11971,2196],{"class":133},[123,11973,11974],{"class":125,"line":2600},[123,11975,11976],{"class":192},"    \u002F\u002F释放堆区数组\n",[123,11978,11979],{"class":125,"line":2608},[123,11980,11981],{"class":192},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[123,11983,11984,11987],{"class":125,"line":2613},[123,11985,11986],{"class":129},"    delete[]",[123,11988,11989],{"class":133}," arr;\n",[123,11991,11992],{"class":125,"line":2619},[123,11993,1574],{"class":133},[123,11995,11996],{"class":125,"line":2625},[123,11997,2409],{"emptyLinePlaceholder":50},[123,11999,12000,12002,12004],{"class":125,"line":2630},[123,12001,137],{"class":129},[123,12003,1982],{"class":1972},[123,12005,1985],{"class":133},[123,12007,12008],{"class":125,"line":7958},[123,12009,1555],{"class":133},[123,12011,12012,12014],{"class":125,"line":7982},[123,12013,5643],{"class":1972},[123,12015,5646],{"class":133},[123,12017,12018,12020],{"class":125,"line":7987},[123,12019,5712],{"class":1972},[123,12021,5646],{"class":133},[123,12023,12024],{"class":125,"line":7993},[123,12025,1574],{"class":133},[5136,12027,12028],{},"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":37,"searchDepth":45,"depth":45,"links":12030},[12031],{"id":10699,"depth":45,"text":10700,"children":12032},[12033,12034],{"id":10731,"depth":1189,"text":10732},{"id":11359,"depth":1189,"text":11360},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10691,"description":37},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12041,"title":12042,"body":12043,"description":37,"extension":48,"meta":13524,"navigation":50,"path":13525,"seo":13526,"stem":13527,"__hash__":13528},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12044,"toc":13516},[12045,12048,12052,12055,12058,12227,12231,12236,12253,12258,12410,12414,12417,12420,12814,12818,12821,12826,12829,13141,13145,13151,13311,13313,13321,13325,13328,13335,13513],[10,12046,12042],{"id":12047},"_6引用",[65,12049,12051],{"id":12050},"_61引用基本用法","6.1引用基本用法",[14,12053,12054],{},"引用的本质：给变量起别名",[14,12056,12057],{},"语法：数据类型 &别名=原名",[114,12059,12061],{"className":116,"code":12060,"language":118,"meta":37,"style":37},"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",[120,12062,12063,12071,12075,12087,12099,12103,12122,12141,12145,12156,12160,12179,12197,12201,12211,12215,12223],{"__ignoreMap":37},[123,12064,12065,12067,12069],{"class":125,"line":126},[123,12066,137],{"class":129},[123,12068,1982],{"class":1972},[123,12070,10863],{"class":133},[123,12072,12073],{"class":125,"line":45},[123,12074,2409],{"emptyLinePlaceholder":50},[123,12076,12077,12079,12081,12083,12085],{"class":125,"line":1189},[123,12078,1994],{"class":129},[123,12080,10879],{"class":133},[123,12082,179],{"class":129},[123,12084,2047],{"class":182},[123,12086,1300],{"class":133},[123,12088,12089,12091,12093,12095,12097],{"class":125,"line":1204},[123,12090,1994],{"class":129},[123,12092,10594],{"class":129},[123,12094,10955],{"class":133},[123,12096,179],{"class":129},[123,12098,1442],{"class":133},[123,12100,12101],{"class":125,"line":1210},[123,12102,2409],{"emptyLinePlaceholder":50},[123,12104,12105,12107,12109,12112,12114,12116,12118,12120],{"class":125,"line":1224},[123,12106,6539],{"class":133},[123,12108,1178],{"class":129},[123,12110,12111],{"class":238}," \"a = \"",[123,12113,1454],{"class":129},[123,12115,10879],{"class":133},[123,12117,1178],{"class":129},[123,12119,11479],{"class":133},[123,12121,7278],{"class":192},[123,12123,12124,12126,12128,12131,12133,12135,12137,12139],{"class":125,"line":1230},[123,12125,6539],{"class":133},[123,12127,1178],{"class":129},[123,12129,12130],{"class":238}," \"b = \"",[123,12132,1454],{"class":129},[123,12134,10892],{"class":133},[123,12136,1178],{"class":129},[123,12138,11479],{"class":133},[123,12140,7278],{"class":192},[123,12142,12143],{"class":125,"line":1321},[123,12144,2409],{"emptyLinePlaceholder":50},[123,12146,12147,12150,12152,12154],{"class":125,"line":1327},[123,12148,12149],{"class":133},"    b ",[123,12151,179],{"class":129},[123,12153,5764],{"class":182},[123,12155,1300],{"class":133},[123,12157,12158],{"class":125,"line":1339},[123,12159,2409],{"emptyLinePlaceholder":50},[123,12161,12162,12164,12166,12168,12170,12172,12174,12176],{"class":125,"line":1621},[123,12163,6539],{"class":133},[123,12165,1178],{"class":129},[123,12167,12111],{"class":238},[123,12169,1454],{"class":129},[123,12171,10879],{"class":133},[123,12173,1178],{"class":129},[123,12175,11479],{"class":133},[123,12177,12178],{"class":192},"\u002F\u002F100\n",[123,12180,12181,12183,12185,12187,12189,12191,12193,12195],{"class":125,"line":1626},[123,12182,6539],{"class":133},[123,12184,1178],{"class":129},[123,12186,12130],{"class":238},[123,12188,1454],{"class":129},[123,12190,10892],{"class":133},[123,12192,1178],{"class":129},[123,12194,11479],{"class":133},[123,12196,12178],{"class":192},[123,12198,12199],{"class":125,"line":1632},[123,12200,2409],{"emptyLinePlaceholder":50},[123,12202,12203,12205,12207,12209],{"class":125,"line":1637},[123,12204,2312],{"class":1972},[123,12206,134],{"class":133},[123,12208,2317],{"class":238},[123,12210,2728],{"class":133},[123,12212,12213],{"class":125,"line":1651},[123,12214,2409],{"emptyLinePlaceholder":50},[123,12216,12217,12219,12221],{"class":125,"line":1656},[123,12218,4099],{"class":129},[123,12220,4102],{"class":182},[123,12222,1300],{"class":133},[123,12224,12225],{"class":125,"line":1662},[123,12226,1574],{"class":133},[65,12228,12230],{"id":12229},"_62引用的注意事项","6.2引用的注意事项",[77,12232,12233],{},[80,12234,12235],{},"引用必须要初始化",[114,12237,12239],{"className":116,"code":12238,"language":118,"meta":37,"style":37},"int &b;\u002F\u002F非常错误！\n",[120,12240,12241],{"__ignoreMap":37},[123,12242,12243,12245,12247,12250],{"class":125,"line":126},[123,12244,137],{"class":129},[123,12246,10594],{"class":129},[123,12248,12249],{"class":133},"b;",[123,12251,12252],{"class":192},"\u002F\u002F非常错误！\n",[77,12254,12255],{"start":45},[80,12256,12257],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[114,12259,12261],{"className":116,"code":12260,"language":118,"meta":37,"style":37},"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",[120,12262,12263,12271,12283,12295,12303,12319,12332,12350,12368,12388,12398,12406],{"__ignoreMap":37},[123,12264,12265,12267,12269],{"class":125,"line":126},[123,12266,137],{"class":129},[123,12268,1982],{"class":1972},[123,12270,10863],{"class":133},[123,12272,12273,12275,12277,12279,12281],{"class":125,"line":45},[123,12274,1994],{"class":129},[123,12276,10879],{"class":133},[123,12278,179],{"class":129},[123,12280,2047],{"class":182},[123,12282,1300],{"class":133},[123,12284,12285,12287,12289,12291,12293],{"class":125,"line":1189},[123,12286,1994],{"class":129},[123,12288,10892],{"class":133},[123,12290,179],{"class":129},[123,12292,8960],{"class":182},[123,12294,1300],{"class":133},[123,12296,12297,12300],{"class":125,"line":1204},[123,12298,12299],{"class":192},"    \u002F\u002Fint &c;",[123,12301,12302],{"class":192}," \u002F\u002F错误，引用必须初始化\n",[123,12304,12305,12307,12309,12311,12313,12316],{"class":125,"line":1210},[123,12306,1994],{"class":129},[123,12308,10594],{"class":129},[123,12310,2955],{"class":133},[123,12312,179],{"class":129},[123,12314,12315],{"class":133}," a;",[123,12317,12318],{"class":192}," \u002F\u002F一旦初始化后，就不可以更改\n",[123,12320,12321,12324,12326,12329],{"class":125,"line":1224},[123,12322,12323],{"class":133},"    c ",[123,12325,179],{"class":129},[123,12327,12328],{"class":133}," b;",[123,12330,12331],{"class":192}," \u002F\u002F这是赋值操作，不是更改引用\n",[123,12333,12334,12336,12338,12340,12342,12344,12346,12348],{"class":125,"line":1230},[123,12335,6539],{"class":133},[123,12337,1178],{"class":129},[123,12339,12111],{"class":238},[123,12341,1454],{"class":129},[123,12343,10879],{"class":133},[123,12345,1178],{"class":129},[123,12347,11479],{"class":133},[123,12349,7263],{"class":192},[123,12351,12352,12354,12356,12358,12360,12362,12364,12366],{"class":125,"line":1321},[123,12353,6539],{"class":133},[123,12355,1178],{"class":129},[123,12357,12130],{"class":238},[123,12359,1454],{"class":129},[123,12361,10892],{"class":133},[123,12363,1178],{"class":129},[123,12365,11479],{"class":133},[123,12367,7263],{"class":192},[123,12369,12370,12372,12374,12377,12379,12382,12384,12386],{"class":125,"line":1327},[123,12371,6539],{"class":133},[123,12373,1178],{"class":129},[123,12375,12376],{"class":238}," \"c = \"",[123,12378,1454],{"class":129},[123,12380,12381],{"class":133}," c ",[123,12383,1178],{"class":129},[123,12385,11479],{"class":133},[123,12387,7263],{"class":192},[123,12389,12390,12392,12394,12396],{"class":125,"line":1339},[123,12391,2312],{"class":1972},[123,12393,134],{"class":133},[123,12395,2317],{"class":238},[123,12397,2728],{"class":133},[123,12399,12400,12402,12404],{"class":125,"line":1621},[123,12401,4099],{"class":129},[123,12403,4102],{"class":182},[123,12405,1300],{"class":133},[123,12407,12408],{"class":125,"line":1626},[123,12409,1574],{"class":133},[65,12411,12413],{"id":12412},"_63引用做函数参数","6.3引用做函数参数",[14,12415,12416],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12418,12419],{},"优点：可以简化指针修改实参",[114,12421,12423],{"className":116,"code":12422,"language":118,"meta":37,"style":37},"\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",[120,12424,12425,12430,12453,12464,12474,12483,12487,12491,12496,12518,12530,12542,12552,12556,12560,12565,12587,12597,12605,12613,12617,12621,12629,12633,12645,12657,12661,12672,12698,12702,12722,12746,12750,12760,12784,12788,12798,12802,12810],{"__ignoreMap":37},[123,12426,12427],{"class":125,"line":126},[123,12428,12429],{"class":192},"\u002F\u002F1. 值传递\n",[123,12431,12432,12434,12437,12439,12441,12443,12446,12448,12450],{"class":125,"line":45},[123,12433,5374],{"class":129},[123,12435,12436],{"class":1972}," mySwap01",[123,12438,134],{"class":133},[123,12440,137],{"class":129},[123,12442,1408],{"class":5226},[123,12444,12445],{"class":133},", ",[123,12447,137],{"class":129},[123,12449,2842],{"class":5226},[123,12451,12452],{"class":133},") {\n",[123,12454,12455,12457,12460,12462],{"class":125,"line":1189},[123,12456,1994],{"class":129},[123,12458,12459],{"class":133}," temp ",[123,12461,179],{"class":129},[123,12463,1442],{"class":133},[123,12465,12466,12469,12471],{"class":125,"line":1204},[123,12467,12468],{"class":133},"    a ",[123,12470,179],{"class":129},[123,12472,12473],{"class":133}," b;\n",[123,12475,12476,12478,12480],{"class":125,"line":1210},[123,12477,12149],{"class":133},[123,12479,179],{"class":129},[123,12481,12482],{"class":133}," temp;\n",[123,12484,12485],{"class":125,"line":1224},[123,12486,1574],{"class":133},[123,12488,12489],{"class":125,"line":1230},[123,12490,2409],{"emptyLinePlaceholder":50},[123,12492,12493],{"class":125,"line":1321},[123,12494,12495],{"class":192},"\u002F\u002F2. 地址传递\n",[123,12497,12498,12500,12503,12505,12508,12510,12512,12514,12516],{"class":125,"line":1327},[123,12499,5374],{"class":129},[123,12501,12502],{"class":1972}," mySwap02",[123,12504,134],{"class":133},[123,12506,12507],{"class":129},"int*",[123,12509,1408],{"class":5226},[123,12511,12445],{"class":133},[123,12513,12507],{"class":129},[123,12515,2842],{"class":5226},[123,12517,12452],{"class":133},[123,12519,12520,12522,12524,12526,12528],{"class":125,"line":1339},[123,12521,1994],{"class":129},[123,12523,12459],{"class":133},[123,12525,179],{"class":129},[123,12527,6528],{"class":129},[123,12529,6207],{"class":133},[123,12531,12532,12534,12536,12538,12540],{"class":125,"line":1621},[123,12533,6413],{"class":129},[123,12535,10929],{"class":133},[123,12537,179],{"class":129},[123,12539,6528],{"class":129},[123,12541,6079],{"class":133},[123,12543,12544,12546,12548,12550],{"class":125,"line":1626},[123,12545,6413],{"class":129},[123,12547,10955],{"class":133},[123,12549,179],{"class":129},[123,12551,12482],{"class":133},[123,12553,12554],{"class":125,"line":1632},[123,12555,1574],{"class":133},[123,12557,12558],{"class":125,"line":1637},[123,12559,2409],{"emptyLinePlaceholder":50},[123,12561,12562],{"class":125,"line":1651},[123,12563,12564],{"class":192},"\u002F\u002F3. 引用传递\n",[123,12566,12567,12569,12572,12574,12577,12579,12581,12583,12585],{"class":125,"line":1656},[123,12568,5374],{"class":129},[123,12570,12571],{"class":1972}," mySwap03",[123,12573,134],{"class":133},[123,12575,12576],{"class":129},"int&",[123,12578,1408],{"class":5226},[123,12580,12445],{"class":133},[123,12582,12576],{"class":129},[123,12584,2842],{"class":5226},[123,12586,12452],{"class":133},[123,12588,12589,12591,12593,12595],{"class":125,"line":1662},[123,12590,1994],{"class":129},[123,12592,12459],{"class":133},[123,12594,179],{"class":129},[123,12596,1442],{"class":133},[123,12598,12599,12601,12603],{"class":125,"line":1683},[123,12600,12468],{"class":133},[123,12602,179],{"class":129},[123,12604,12473],{"class":133},[123,12606,12607,12609,12611],{"class":125,"line":1688},[123,12608,12149],{"class":133},[123,12610,179],{"class":129},[123,12612,12482],{"class":133},[123,12614,12615],{"class":125,"line":1702},[123,12616,1574],{"class":133},[123,12618,12619],{"class":125,"line":1707},[123,12620,2409],{"emptyLinePlaceholder":50},[123,12622,12623,12625,12627],{"class":125,"line":1736},[123,12624,137],{"class":129},[123,12626,1982],{"class":1972},[123,12628,10863],{"class":133},[123,12630,12631],{"class":125,"line":1741},[123,12632,2409],{"emptyLinePlaceholder":50},[123,12634,12635,12637,12639,12641,12643],{"class":125,"line":1758},[123,12636,1994],{"class":129},[123,12638,10879],{"class":133},[123,12640,179],{"class":129},[123,12642,2047],{"class":182},[123,12644,1300],{"class":133},[123,12646,12647,12649,12651,12653,12655],{"class":125,"line":1763},[123,12648,1994],{"class":129},[123,12650,10892],{"class":133},[123,12652,179],{"class":129},[123,12654,8960],{"class":182},[123,12656,1300],{"class":133},[123,12658,12659],{"class":125,"line":1768},[123,12660,2409],{"emptyLinePlaceholder":50},[123,12662,12663,12666,12669],{"class":125,"line":1773},[123,12664,12665],{"class":1972},"    mySwap01",[123,12667,12668],{"class":133},"(a, b);",[123,12670,12671],{"class":192},"\u002F\u002F值传递，形参不会修饰实参\n",[123,12673,12674,12676,12678,12681,12683,12685,12687,12690,12692,12694,12696],{"class":125,"line":1787},[123,12675,6539],{"class":133},[123,12677,1178],{"class":129},[123,12679,12680],{"class":238}," \"a:\"",[123,12682,1454],{"class":129},[123,12684,10879],{"class":133},[123,12686,1178],{"class":129},[123,12688,12689],{"class":238}," \" b:\"",[123,12691,1454],{"class":129},[123,12693,10892],{"class":133},[123,12695,1178],{"class":129},[123,12697,8850],{"class":133},[123,12699,12700],{"class":125,"line":1792},[123,12701,2409],{"emptyLinePlaceholder":50},[123,12703,12704,12707,12709,12711,12714,12716,12719],{"class":125,"line":2586},[123,12705,12706],{"class":1972},"    mySwap02",[123,12708,134],{"class":133},[123,12710,487],{"class":129},[123,12712,12713],{"class":133},"a, ",[123,12715,487],{"class":129},[123,12717,12718],{"class":133},"b);",[123,12720,12721],{"class":192},"\u002F\u002F地址传递，形参会修饰实参\n",[123,12723,12724,12726,12728,12730,12732,12734,12736,12738,12740,12742,12744],{"class":125,"line":2600},[123,12725,6539],{"class":133},[123,12727,1178],{"class":129},[123,12729,12680],{"class":238},[123,12731,1454],{"class":129},[123,12733,10879],{"class":133},[123,12735,1178],{"class":129},[123,12737,12689],{"class":238},[123,12739,1454],{"class":129},[123,12741,10892],{"class":133},[123,12743,1178],{"class":129},[123,12745,8850],{"class":133},[123,12747,12748],{"class":125,"line":2608},[123,12749,2409],{"emptyLinePlaceholder":50},[123,12751,12752,12755,12757],{"class":125,"line":2613},[123,12753,12754],{"class":1972},"    mySwap03",[123,12756,12668],{"class":133},[123,12758,12759],{"class":192},"\u002F\u002F引用传递，形参会修饰实参\n",[123,12761,12762,12764,12766,12768,12770,12772,12774,12776,12778,12780,12782],{"class":125,"line":2619},[123,12763,6539],{"class":133},[123,12765,1178],{"class":129},[123,12767,12680],{"class":238},[123,12769,1454],{"class":129},[123,12771,10879],{"class":133},[123,12773,1178],{"class":129},[123,12775,12689],{"class":238},[123,12777,1454],{"class":129},[123,12779,10892],{"class":133},[123,12781,1178],{"class":129},[123,12783,8850],{"class":133},[123,12785,12786],{"class":125,"line":2625},[123,12787,2409],{"emptyLinePlaceholder":50},[123,12789,12790,12792,12794,12796],{"class":125,"line":2630},[123,12791,2312],{"class":1972},[123,12793,134],{"class":133},[123,12795,2317],{"class":238},[123,12797,2728],{"class":133},[123,12799,12800],{"class":125,"line":7958},[123,12801,2409],{"emptyLinePlaceholder":50},[123,12803,12804,12806,12808],{"class":125,"line":7982},[123,12805,4099],{"class":129},[123,12807,4102],{"class":182},[123,12809,1300],{"class":133},[123,12811,12812],{"class":125,"line":7987},[123,12813,1574],{"class":133},[65,12815,12817],{"id":12816},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,12819,12820],{},"作用：引用是可以作为函数的返回值存在的",[14,12822,9035,12823],{},[283,12824,12825],{},"不要返回局部变量引用",[14,12827,12828],{},"用法：函数调用作为左值",[114,12830,12832],{"className":9951,"code":12831,"language":9953,"meta":37,"style":37},"\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",[120,12833,12834,12839,12847,12862,12868,12872,12876,12881,12889,12906,12912,12916,12920,12928,12932,12937,12951,12971,12990,12994,12999,13012,13032,13050,13054,13070,13074,13093,13111,13115,13125,13129,13137],{"__ignoreMap":37},[123,12835,12836],{"class":125,"line":126},[123,12837,12838],{"class":192},"\u002F\u002F返回局部变量引用\n",[123,12840,12841,12843,12845],{"class":125,"line":45},[123,12842,12576],{"class":129},[123,12844,5598],{"class":1972},[123,12846,10863],{"class":133},[123,12848,12849,12851,12853,12855,12857,12859],{"class":125,"line":1189},[123,12850,1994],{"class":129},[123,12852,10879],{"class":133},[123,12854,179],{"class":129},[123,12856,2047],{"class":182},[123,12858,189],{"class":133},[123,12860,12861],{"class":192}," \u002F\u002F局部变量\n",[123,12863,12864,12866],{"class":125,"line":1204},[123,12865,4099],{"class":129},[123,12867,1442],{"class":133},[123,12869,12870],{"class":125,"line":1210},[123,12871,1574],{"class":133},[123,12873,12874],{"class":125,"line":1224},[123,12875,2409],{"emptyLinePlaceholder":50},[123,12877,12878],{"class":125,"line":1230},[123,12879,12880],{"class":192},"\u002F\u002F返回静态变量引用\n",[123,12882,12883,12885,12887],{"class":125,"line":1321},[123,12884,12576],{"class":129},[123,12886,5667],{"class":1972},[123,12888,10863],{"class":133},[123,12890,12891,12893,12895,12897,12899,12901,12903],{"class":125,"line":1327},[123,12892,11030],{"class":129},[123,12894,2391],{"class":129},[123,12896,10879],{"class":133},[123,12898,179],{"class":129},[123,12900,8960],{"class":182},[123,12902,189],{"class":133},[123,12904,12905],{"class":192},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[123,12907,12908,12910],{"class":125,"line":1339},[123,12909,4099],{"class":129},[123,12911,1442],{"class":133},[123,12913,12914],{"class":125,"line":1621},[123,12915,1574],{"class":133},[123,12917,12918],{"class":125,"line":1626},[123,12919,2409],{"emptyLinePlaceholder":50},[123,12921,12922,12924,12926],{"class":125,"line":1632},[123,12923,137],{"class":129},[123,12925,1982],{"class":1972},[123,12927,10863],{"class":133},[123,12929,12930],{"class":125,"line":1637},[123,12931,2409],{"emptyLinePlaceholder":50},[123,12933,12934],{"class":125,"line":1651},[123,12935,12936],{"class":192},"    \u002F\u002F不能返回局部变量的引用\n",[123,12938,12939,12942,12945,12947,12949],{"class":125,"line":1656},[123,12940,12941],{"class":129},"    int&",[123,12943,12944],{"class":133}," ref ",[123,12946,179],{"class":129},[123,12948,5598],{"class":1972},[123,12950,5646],{"class":133},[123,12952,12953,12955,12957,12960,12962,12964,12966,12968],{"class":125,"line":1662},[123,12954,6539],{"class":133},[123,12956,1178],{"class":129},[123,12958,12959],{"class":238}," \"ref = \"",[123,12961,1454],{"class":129},[123,12963,12944],{"class":133},[123,12965,1178],{"class":129},[123,12967,11479],{"class":133},[123,12969,12970],{"class":192},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[123,12972,12973,12975,12977,12979,12981,12983,12985,12987],{"class":125,"line":1683},[123,12974,6539],{"class":133},[123,12976,1178],{"class":129},[123,12978,12959],{"class":238},[123,12980,1454],{"class":129},[123,12982,12944],{"class":133},[123,12984,1178],{"class":129},[123,12986,11479],{"class":133},[123,12988,12989],{"class":192},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[123,12991,12992],{"class":125,"line":1688},[123,12993,2409],{"emptyLinePlaceholder":50},[123,12995,12996],{"class":125,"line":1702},[123,12997,12998],{"class":192},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[123,13000,13001,13003,13006,13008,13010],{"class":125,"line":1707},[123,13002,12941],{"class":129},[123,13004,13005],{"class":133}," ref2 ",[123,13007,179],{"class":129},[123,13009,5667],{"class":1972},[123,13011,5646],{"class":133},[123,13013,13014,13016,13018,13021,13023,13025,13027,13029],{"class":125,"line":1736},[123,13015,6539],{"class":133},[123,13017,1178],{"class":129},[123,13019,13020],{"class":238}," \"ref2 = \"",[123,13022,1454],{"class":129},[123,13024,13005],{"class":133},[123,13026,1178],{"class":129},[123,13028,11479],{"class":133},[123,13030,13031],{"class":192}," \u002F\u002F20\n",[123,13033,13034,13036,13038,13040,13042,13044,13046,13048],{"class":125,"line":1741},[123,13035,6539],{"class":133},[123,13037,1178],{"class":129},[123,13039,13020],{"class":238},[123,13041,1454],{"class":129},[123,13043,13005],{"class":133},[123,13045,1178],{"class":129},[123,13047,11479],{"class":133},[123,13049,13031],{"class":192},[123,13051,13052],{"class":125,"line":1758},[123,13053,2409],{"emptyLinePlaceholder":50},[123,13055,13056,13058,13061,13063,13065,13067],{"class":125,"line":1763},[123,13057,5712],{"class":1972},[123,13059,13060],{"class":133},"() ",[123,13062,179],{"class":129},[123,13064,3008],{"class":182},[123,13066,189],{"class":133},[123,13068,13069],{"class":192},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[123,13071,13072],{"class":125,"line":1768},[123,13073,2409],{"emptyLinePlaceholder":50},[123,13075,13076,13078,13080,13082,13084,13086,13088,13090],{"class":125,"line":1773},[123,13077,6539],{"class":133},[123,13079,1178],{"class":129},[123,13081,13020],{"class":238},[123,13083,1454],{"class":129},[123,13085,13005],{"class":133},[123,13087,1178],{"class":129},[123,13089,11479],{"class":133},[123,13091,13092],{"class":192}," \u002F\u002F1000\n",[123,13094,13095,13097,13099,13101,13103,13105,13107,13109],{"class":125,"line":1787},[123,13096,6539],{"class":133},[123,13098,1178],{"class":129},[123,13100,13020],{"class":238},[123,13102,1454],{"class":129},[123,13104,13005],{"class":133},[123,13106,1178],{"class":129},[123,13108,11479],{"class":133},[123,13110,13092],{"class":192},[123,13112,13113],{"class":125,"line":1792},[123,13114,2409],{"emptyLinePlaceholder":50},[123,13116,13117,13119,13121,13123],{"class":125,"line":2586},[123,13118,2312],{"class":1972},[123,13120,134],{"class":133},[123,13122,2317],{"class":238},[123,13124,2728],{"class":133},[123,13126,13127],{"class":125,"line":2600},[123,13128,2409],{"emptyLinePlaceholder":50},[123,13130,13131,13133,13135],{"class":125,"line":2608},[123,13132,4099],{"class":129},[123,13134,4102],{"class":182},[123,13136,1300],{"class":133},[123,13138,13139],{"class":125,"line":2613},[123,13140,1574],{"class":133},[65,13142,13144],{"id":13143},"_65引用的本质","6.5引用的本质",[14,13146,13147,13148],{},"本质：",[283,13149,13150],{},"引用的本质在c++内部实现是一个指针常量.",[114,13152,13154],{"className":116,"code":13153,"language":118,"meta":37,"style":37},"\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",[120,13155,13156,13161,13177,13191,13195,13204,13216,13221,13226,13237,13250,13254,13270,13287,13291,13299,13307],{"__ignoreMap":37},[123,13157,13158],{"class":125,"line":126},[123,13159,13160],{"class":192},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[123,13162,13163,13165,13167,13169,13171,13174],{"class":125,"line":45},[123,13164,5374],{"class":129},[123,13166,11395],{"class":1972},[123,13168,134],{"class":133},[123,13170,12576],{"class":129},[123,13172,13173],{"class":5226}," ref",[123,13175,13176],{"class":133},"){\n",[123,13178,13179,13182,13184,13186,13188],{"class":125,"line":1189},[123,13180,13181],{"class":133},"    ref ",[123,13183,179],{"class":129},[123,13185,5764],{"class":182},[123,13187,189],{"class":133},[123,13189,13190],{"class":192}," \u002F\u002F ref是引用，转换为*ref = 100\n",[123,13192,13193],{"class":125,"line":1204},[123,13194,1574],{"class":133},[123,13196,13197,13199,13201],{"class":125,"line":1210},[123,13198,137],{"class":129},[123,13200,1982],{"class":1972},[123,13202,13203],{"class":133},"(){\n",[123,13205,13206,13208,13210,13212,13214],{"class":125,"line":1224},[123,13207,1994],{"class":129},[123,13209,10879],{"class":133},[123,13211,179],{"class":129},[123,13213,2047],{"class":182},[123,13215,1300],{"class":133},[123,13217,13218],{"class":125,"line":1230},[123,13219,13220],{"class":133},"    \n",[123,13222,13223],{"class":125,"line":1321},[123,13224,13225],{"class":192},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[123,13227,13228,13230,13232,13234],{"class":125,"line":1327},[123,13229,12941],{"class":129},[123,13231,12944],{"class":133},[123,13233,179],{"class":129},[123,13235,13236],{"class":133}," a; \n",[123,13238,13239,13241,13243,13245,13247],{"class":125,"line":1339},[123,13240,13181],{"class":133},[123,13242,179],{"class":129},[123,13244,8960],{"class":182},[123,13246,189],{"class":133},[123,13248,13249],{"class":192}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[123,13251,13252],{"class":125,"line":1621},[123,13253,13220],{"class":133},[123,13255,13256,13258,13260,13262,13264,13266,13268],{"class":125,"line":1626},[123,13257,6539],{"class":133},[123,13259,1178],{"class":129},[123,13261,12680],{"class":238},[123,13263,1454],{"class":129},[123,13265,10879],{"class":133},[123,13267,1178],{"class":129},[123,13269,8850],{"class":133},[123,13271,13272,13274,13276,13279,13281,13283,13285],{"class":125,"line":1632},[123,13273,6539],{"class":133},[123,13275,1178],{"class":129},[123,13277,13278],{"class":238}," \"ref:\"",[123,13280,1454],{"class":129},[123,13282,12944],{"class":133},[123,13284,1178],{"class":129},[123,13286,8850],{"class":133},[123,13288,13289],{"class":125,"line":1637},[123,13290,13220],{"class":133},[123,13292,13293,13296],{"class":125,"line":1651},[123,13294,13295],{"class":1972},"    func",[123,13297,13298],{"class":133},"(a);\n",[123,13300,13301,13303,13305],{"class":125,"line":1656},[123,13302,4099],{"class":129},[123,13304,4102],{"class":182},[123,13306,1300],{"class":133},[123,13308,13309],{"class":125,"line":1662},[123,13310,1574],{"class":133},[14,13312,11342],{},[77,13314,13315,13318],{},[80,13316,13317],{},"引用的本质，就是一个指针常量",[80,13319,13320],{},"引用一旦初始化，就不可以发生改变",[65,13322,13324],{"id":13323},"_66常量引用","6.6常量引用",[14,13326,13327],{},"作用：常量引用主要用来修饰形参",[14,13329,13330,13331,13334],{},"在函数形参列表中，可以加",[283,13332,13333],{},"const修饰形参","，防止形参改变实参",[114,13336,13338],{"className":116,"code":13337,"language":118,"meta":37,"style":37},"\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",[120,13339,13340,13345,13350,13369,13374,13387,13391,13395,13403,13407,13412,13417,13431,13435,13443,13455,13459,13464,13476,13483,13487,13497,13501,13509],{"__ignoreMap":37},[123,13341,13342],{"class":125,"line":126},[123,13343,13344],{"class":192},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[123,13346,13347],{"class":125,"line":45},[123,13348,13349],{"class":192},"\u002F\u002F加上const就不能修改实参的\n",[123,13351,13352,13354,13357,13359,13361,13364,13367],{"class":125,"line":1189},[123,13353,5374],{"class":129},[123,13355,13356],{"class":1972}," showValue",[123,13358,134],{"class":133},[123,13360,6802],{"class":129},[123,13362,13363],{"class":129}," int&",[123,13365,13366],{"class":5226}," v",[123,13368,12452],{"class":133},[123,13370,13371],{"class":125,"line":1204},[123,13372,13373],{"class":192},"    \u002F\u002Fv += 100;\n",[123,13375,13376,13378,13380,13383,13385],{"class":125,"line":1210},[123,13377,6539],{"class":133},[123,13379,1178],{"class":129},[123,13381,13382],{"class":133}," v ",[123,13384,1178],{"class":129},[123,13386,8850],{"class":133},[123,13388,13389],{"class":125,"line":1224},[123,13390,1574],{"class":133},[123,13392,13393],{"class":125,"line":1230},[123,13394,2409],{"emptyLinePlaceholder":50},[123,13396,13397,13399,13401],{"class":125,"line":1321},[123,13398,137],{"class":129},[123,13400,1982],{"class":1972},[123,13402,10863],{"class":133},[123,13404,13405],{"class":125,"line":1327},[123,13406,2409],{"emptyLinePlaceholder":50},[123,13408,13409],{"class":125,"line":1339},[123,13410,13411],{"class":192},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[123,13413,13414],{"class":125,"line":1621},[123,13415,13416],{"class":192},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[123,13418,13419,13421,13423,13425,13427,13429],{"class":125,"line":1626},[123,13420,11231],{"class":129},[123,13422,13363],{"class":129},[123,13424,12944],{"class":133},[123,13426,179],{"class":129},[123,13428,2047],{"class":182},[123,13430,1300],{"class":133},[123,13432,13433],{"class":125,"line":1632},[123,13434,2409],{"emptyLinePlaceholder":50},[123,13436,13437,13440],{"class":125,"line":1637},[123,13438,13439],{"class":192},"    \u002F\u002Fref = 100;",[123,13441,13442],{"class":192},"  \u002F\u002F加入const后不可以修改变量\n",[123,13444,13445,13447,13449,13451,13453],{"class":125,"line":1651},[123,13446,6539],{"class":133},[123,13448,1178],{"class":129},[123,13450,12944],{"class":133},[123,13452,1178],{"class":129},[123,13454,8850],{"class":133},[123,13456,13457],{"class":125,"line":1656},[123,13458,2409],{"emptyLinePlaceholder":50},[123,13460,13461],{"class":125,"line":1662},[123,13462,13463],{"class":192},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[123,13465,13466,13468,13470,13472,13474],{"class":125,"line":1683},[123,13467,1994],{"class":129},[123,13469,10879],{"class":133},[123,13471,179],{"class":129},[123,13473,2047],{"class":182},[123,13475,1300],{"class":133},[123,13477,13478,13481],{"class":125,"line":1688},[123,13479,13480],{"class":1972},"    showValue",[123,13482,13298],{"class":133},[123,13484,13485],{"class":125,"line":1702},[123,13486,2409],{"emptyLinePlaceholder":50},[123,13488,13489,13491,13493,13495],{"class":125,"line":1707},[123,13490,2312],{"class":1972},[123,13492,134],{"class":133},[123,13494,2317],{"class":238},[123,13496,2728],{"class":133},[123,13498,13499],{"class":125,"line":1736},[123,13500,2409],{"emptyLinePlaceholder":50},[123,13502,13503,13505,13507],{"class":125,"line":1741},[123,13504,4099],{"class":129},[123,13506,4102],{"class":182},[123,13508,1300],{"class":133},[123,13510,13511],{"class":125,"line":1758},[123,13512,1574],{"class":133},[5136,13514,13515],{},"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":37,"searchDepth":45,"depth":45,"links":13517},[13518,13519,13520,13521,13522,13523],{"id":12050,"depth":45,"text":12051},{"id":12229,"depth":45,"text":12230},{"id":12412,"depth":45,"text":12413},{"id":12816,"depth":45,"text":12817},{"id":13143,"depth":45,"text":13144},{"id":13323,"depth":45,"text":13324},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12042,"description":37},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13530,"title":13531,"body":13532,"description":37,"extension":48,"meta":14613,"navigation":50,"path":14614,"seo":14615,"stem":14616,"__hash__":14617},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13533,"toc":14605},[13534,13537,13541,13544,13549,13781,13783,13794,13798,13801,13809,13913,13916,13920,13923,13927,13930,13935,13957,13963,14290,14293,14297,14305,14602],[10,13535,13531],{"id":13536},"_7函数高级部分",[65,13538,13540],{"id":13539},"_71函数默认参数","7.1函数默认参数",[14,13542,13543],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13545,5191,13546],{},[120,13547,13548],{}," 返回值类型  函数名 （参数= 默认值）{}",[114,13550,13552],{"className":116,"code":13551,"language":118,"meta":37,"style":37},"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",[120,13553,13554,13589,13604,13608,13612,13617,13622,13651,13671,13681,13685,13689,13697,13701,13729,13751,13755,13765,13769,13777],{"__ignoreMap":37},[123,13555,13556,13558,13560,13562,13564,13566,13568,13570,13572,13575,13577,13579,13581,13583,13585,13587],{"class":125,"line":126},[123,13557,137],{"class":129},[123,13559,11395],{"class":1972},[123,13561,134],{"class":133},[123,13563,137],{"class":129},[123,13565,1408],{"class":5226},[123,13567,12445],{"class":133},[123,13569,137],{"class":129},[123,13571,2842],{"class":5226},[123,13573,13574],{"class":129}," =",[123,13576,2047],{"class":182},[123,13578,12445],{"class":133},[123,13580,137],{"class":129},[123,13582,2858],{"class":5226},[123,13584,13574],{"class":129},[123,13586,2047],{"class":182},[123,13588,12452],{"class":133},[123,13590,13591,13593,13595,13597,13599,13601],{"class":125,"line":45},[123,13592,4099],{"class":129},[123,13594,10879],{"class":133},[123,13596,615],{"class":129},[123,13598,10892],{"class":133},[123,13600,615],{"class":129},[123,13602,13603],{"class":133}," c;\n",[123,13605,13606],{"class":125,"line":1189},[123,13607,1574],{"class":133},[123,13609,13610],{"class":125,"line":1204},[123,13611,2409],{"emptyLinePlaceholder":50},[123,13613,13614],{"class":125,"line":1210},[123,13615,13616],{"class":192},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[123,13618,13619],{"class":125,"line":1224},[123,13620,13621],{"class":192},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[123,13623,13624,13626,13629,13631,13633,13635,13637,13639,13641,13643,13645,13647,13649],{"class":125,"line":1230},[123,13625,137],{"class":129},[123,13627,13628],{"class":1972}," func2",[123,13630,134],{"class":133},[123,13632,137],{"class":129},[123,13634,1408],{"class":5226},[123,13636,13574],{"class":129},[123,13638,2047],{"class":182},[123,13640,12445],{"class":133},[123,13642,137],{"class":129},[123,13644,2842],{"class":5226},[123,13646,13574],{"class":129},[123,13648,2047],{"class":182},[123,13650,2728],{"class":133},[123,13652,13653,13655,13657,13659,13661,13663,13665,13667,13669],{"class":125,"line":1321},[123,13654,137],{"class":129},[123,13656,13628],{"class":1972},[123,13658,134],{"class":133},[123,13660,137],{"class":129},[123,13662,1408],{"class":5226},[123,13664,12445],{"class":133},[123,13666,137],{"class":129},[123,13668,2842],{"class":5226},[123,13670,12452],{"class":133},[123,13672,13673,13675,13677,13679],{"class":125,"line":1327},[123,13674,4099],{"class":129},[123,13676,10879],{"class":133},[123,13678,615],{"class":129},[123,13680,12473],{"class":133},[123,13682,13683],{"class":125,"line":1339},[123,13684,1574],{"class":133},[123,13686,13687],{"class":125,"line":1621},[123,13688,2409],{"emptyLinePlaceholder":50},[123,13690,13691,13693,13695],{"class":125,"line":1626},[123,13692,137],{"class":129},[123,13694,1982],{"class":1972},[123,13696,10863],{"class":133},[123,13698,13699],{"class":125,"line":1632},[123,13700,2409],{"emptyLinePlaceholder":50},[123,13702,13703,13705,13707,13710,13712,13714,13716,13718,13720,13722,13725,13727],{"class":125,"line":1637},[123,13704,6539],{"class":133},[123,13706,1178],{"class":129},[123,13708,13709],{"class":238}," \"ret = \"",[123,13711,1454],{"class":129},[123,13713,11395],{"class":1972},[123,13715,134],{"class":133},[123,13717,834],{"class":182},[123,13719,12445],{"class":133},[123,13721,834],{"class":182},[123,13723,13724],{"class":133},") ",[123,13726,1178],{"class":129},[123,13728,8850],{"class":133},[123,13730,13731,13733,13735,13737,13739,13741,13743,13745,13747,13749],{"class":125,"line":1651},[123,13732,6539],{"class":133},[123,13734,1178],{"class":129},[123,13736,13709],{"class":238},[123,13738,1454],{"class":129},[123,13740,11395],{"class":1972},[123,13742,134],{"class":133},[123,13744,445],{"class":182},[123,13746,13724],{"class":133},[123,13748,1178],{"class":129},[123,13750,8850],{"class":133},[123,13752,13753],{"class":125,"line":1656},[123,13754,2409],{"emptyLinePlaceholder":50},[123,13756,13757,13759,13761,13763],{"class":125,"line":1662},[123,13758,2312],{"class":1972},[123,13760,134],{"class":133},[123,13762,2317],{"class":238},[123,13764,2728],{"class":133},[123,13766,13767],{"class":125,"line":1683},[123,13768,2409],{"emptyLinePlaceholder":50},[123,13770,13771,13773,13775],{"class":125,"line":1688},[123,13772,4099],{"class":129},[123,13774,4102],{"class":182},[123,13776,1300],{"class":133},[123,13778,13779],{"class":125,"line":1702},[123,13780,1574],{"class":133},[14,13782,11342],{},[77,13784,13785,13788,13791],{},[80,13786,13787],{},"我传就用我；没传就用你",[80,13789,13790],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[80,13792,13793],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[65,13795,13797],{"id":13796},"_72函数的占位参数","7.2函数的占位参数",[14,13799,13800],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,13802,13803,13805,13806],{},[283,13804,5191],{}," ",[120,13807,13808],{},"返回值类型 函数名 (数据类型){}",[114,13810,13812],{"className":116,"code":13811,"language":118,"meta":37,"style":37},"\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",[120,13813,13814,13819,13837,13850,13854,13862,13866,13883,13887,13897,13901,13909],{"__ignoreMap":37},[123,13815,13816],{"class":125,"line":126},[123,13817,13818],{"class":192},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[123,13820,13821,13823,13825,13827,13829,13831,13833,13835],{"class":125,"line":45},[123,13822,5374],{"class":129},[123,13824,11395],{"class":1972},[123,13826,134],{"class":133},[123,13828,137],{"class":129},[123,13830,1408],{"class":5226},[123,13832,12445],{"class":133},[123,13834,137],{"class":129},[123,13836,12452],{"class":133},[123,13838,13839,13841,13843,13846,13848],{"class":125,"line":1189},[123,13840,6539],{"class":133},[123,13842,1178],{"class":129},[123,13844,13845],{"class":238}," \"this is func\"",[123,13847,1454],{"class":129},[123,13849,8850],{"class":133},[123,13851,13852],{"class":125,"line":1204},[123,13853,1574],{"class":133},[123,13855,13856,13858,13860],{"class":125,"line":1210},[123,13857,137],{"class":129},[123,13859,1982],{"class":1972},[123,13861,10863],{"class":133},[123,13863,13864],{"class":125,"line":1224},[123,13865,2409],{"emptyLinePlaceholder":50},[123,13867,13868,13870,13872,13874,13876,13878,13880],{"class":125,"line":1230},[123,13869,13295],{"class":1972},[123,13871,134],{"class":133},[123,13873,580],{"class":182},[123,13875,512],{"class":133},[123,13877,580],{"class":182},[123,13879,5976],{"class":133},[123,13881,13882],{"class":192}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[123,13884,13885],{"class":125,"line":1321},[123,13886,2409],{"emptyLinePlaceholder":50},[123,13888,13889,13891,13893,13895],{"class":125,"line":1327},[123,13890,2312],{"class":1972},[123,13892,134],{"class":133},[123,13894,2317],{"class":238},[123,13896,2728],{"class":133},[123,13898,13899],{"class":125,"line":1339},[123,13900,2409],{"emptyLinePlaceholder":50},[123,13902,13903,13905,13907],{"class":125,"line":1621},[123,13904,4099],{"class":129},[123,13906,4102],{"class":182},[123,13908,1300],{"class":133},[123,13910,13911],{"class":125,"line":1626},[123,13912,1574],{"class":133},[14,13914,13915],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[65,13917,13919],{"id":13918},"_73函数重载","7.3函数重载",[14,13921,13922],{},"意思是函数名是可以相同的",[94,13924,13926],{"id":13925},"_731基本语法","7.3.1基本语法",[14,13928,13929],{},"作用：函数名可以相同，提高复用性",[14,13931,13932],{},[283,13933,13934],{},"函数重载满足条件：",[1141,13936,13937,13940,13943],{},[80,13938,13939],{},"同一个作用域下",[80,13941,13942],{},"函数名称相同",[80,13944,13945,13946,13949,13950,13953,13954],{},"函数参数",[283,13947,13948],{},"类型不同","  或者 ",[283,13951,13952],{},"个数不同"," 或者 ",[283,13955,13956],{},"顺序不同",[14,13958,13959,13962],{},[283,13960,13961],{},"注意:","  函数的返回值不可以作为函数重载的条件",[114,13964,13966],{"className":9951,"code":13965,"language":9953,"meta":37,"style":37},"\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",[120,13967,13968,13973,13981,13985,13998,14002,14016,14020,14033,14037,14052,14056,14069,14073,14094,14098,14111,14115,14135,14139,14152,14156,14160,14165,14170,14175,14180,14185,14189,14193,14201,14205,14211,14221,14231,14245,14260,14264,14274,14278,14286],{"__ignoreMap":37},[123,13969,13970],{"class":125,"line":126},[123,13971,13972],{"class":192},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[123,13974,13975,13977,13979],{"class":125,"line":45},[123,13976,5374],{"class":129},[123,13978,11395],{"class":1972},[123,13980,1985],{"class":133},[123,13982,13983],{"class":125,"line":1189},[123,13984,1555],{"class":133},[123,13986,13987,13989,13991,13994,13996],{"class":125,"line":1204},[123,13988,6539],{"class":133},[123,13990,1178],{"class":129},[123,13992,13993],{"class":238}," \"func 的调用！\"",[123,13995,1454],{"class":129},[123,13997,8850],{"class":133},[123,13999,14000],{"class":125,"line":1210},[123,14001,1574],{"class":133},[123,14003,14004,14006,14008,14010,14012,14014],{"class":125,"line":1224},[123,14005,5374],{"class":129},[123,14007,11395],{"class":1972},[123,14009,134],{"class":133},[123,14011,137],{"class":129},[123,14013,1408],{"class":5226},[123,14015,140],{"class":133},[123,14017,14018],{"class":125,"line":1230},[123,14019,1555],{"class":133},[123,14021,14022,14024,14026,14029,14031],{"class":125,"line":1321},[123,14023,6539],{"class":133},[123,14025,1178],{"class":129},[123,14027,14028],{"class":238}," \"func (int a) 的调用！\"",[123,14030,1454],{"class":129},[123,14032,8850],{"class":133},[123,14034,14035],{"class":125,"line":1327},[123,14036,1574],{"class":133},[123,14038,14039,14041,14043,14045,14048,14050],{"class":125,"line":1339},[123,14040,5374],{"class":129},[123,14042,11395],{"class":1972},[123,14044,134],{"class":133},[123,14046,14047],{"class":129},"double",[123,14049,1408],{"class":5226},[123,14051,140],{"class":133},[123,14053,14054],{"class":125,"line":1621},[123,14055,1555],{"class":133},[123,14057,14058,14060,14062,14065,14067],{"class":125,"line":1626},[123,14059,6539],{"class":133},[123,14061,1178],{"class":129},[123,14063,14064],{"class":238}," \"func (double a)的调用！\"",[123,14066,1454],{"class":129},[123,14068,8850],{"class":133},[123,14070,14071],{"class":125,"line":1632},[123,14072,1574],{"class":133},[123,14074,14075,14077,14079,14081,14083,14085,14088,14090,14092],{"class":125,"line":1637},[123,14076,5374],{"class":129},[123,14078,11395],{"class":1972},[123,14080,134],{"class":133},[123,14082,137],{"class":129},[123,14084,1408],{"class":5226},[123,14086,14087],{"class":133}," ,",[123,14089,14047],{"class":129},[123,14091,2842],{"class":5226},[123,14093,140],{"class":133},[123,14095,14096],{"class":125,"line":1651},[123,14097,1555],{"class":133},[123,14099,14100,14102,14104,14107,14109],{"class":125,"line":1656},[123,14101,6539],{"class":133},[123,14103,1178],{"class":129},[123,14105,14106],{"class":238}," \"func (int a ,double b) 的调用！\"",[123,14108,1454],{"class":129},[123,14110,8850],{"class":133},[123,14112,14113],{"class":125,"line":1662},[123,14114,1574],{"class":133},[123,14116,14117,14119,14121,14123,14125,14127,14129,14131,14133],{"class":125,"line":1683},[123,14118,5374],{"class":129},[123,14120,11395],{"class":1972},[123,14122,134],{"class":133},[123,14124,14047],{"class":129},[123,14126,1408],{"class":5226},[123,14128,14087],{"class":133},[123,14130,137],{"class":129},[123,14132,2842],{"class":5226},[123,14134,140],{"class":133},[123,14136,14137],{"class":125,"line":1688},[123,14138,1555],{"class":133},[123,14140,14141,14143,14145,14148,14150],{"class":125,"line":1702},[123,14142,6539],{"class":133},[123,14144,1178],{"class":129},[123,14146,14147],{"class":238}," \"func (double a ,int b)的调用！\"",[123,14149,1454],{"class":129},[123,14151,8850],{"class":133},[123,14153,14154],{"class":125,"line":1707},[123,14155,1574],{"class":133},[123,14157,14158],{"class":125,"line":1736},[123,14159,2409],{"emptyLinePlaceholder":50},[123,14161,14162],{"class":125,"line":1741},[123,14163,14164],{"class":192},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[123,14166,14167],{"class":125,"line":1758},[123,14168,14169],{"class":192},"\u002F\u002Fint func(double a, int b)\n",[123,14171,14172],{"class":125,"line":1763},[123,14173,14174],{"class":192},"\u002F\u002F{\n",[123,14176,14177],{"class":125,"line":1768},[123,14178,14179],{"class":192},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[123,14181,14182],{"class":125,"line":1773},[123,14183,14184],{"class":192},"\u002F\u002F}\n",[123,14186,14187],{"class":125,"line":1787},[123,14188,2409],{"emptyLinePlaceholder":50},[123,14190,14191],{"class":125,"line":1792},[123,14192,2409],{"emptyLinePlaceholder":50},[123,14194,14195,14197,14199],{"class":125,"line":2586},[123,14196,137],{"class":129},[123,14198,1982],{"class":1972},[123,14200,10863],{"class":133},[123,14202,14203],{"class":125,"line":2600},[123,14204,2409],{"emptyLinePlaceholder":50},[123,14206,14207,14209],{"class":125,"line":2608},[123,14208,13295],{"class":1972},[123,14210,5646],{"class":133},[123,14212,14213,14215,14217,14219],{"class":125,"line":2613},[123,14214,13295],{"class":1972},[123,14216,134],{"class":133},[123,14218,580],{"class":182},[123,14220,2728],{"class":133},[123,14222,14223,14225,14227,14229],{"class":125,"line":2619},[123,14224,13295],{"class":1972},[123,14226,134],{"class":133},[123,14228,183],{"class":182},[123,14230,2728],{"class":133},[123,14232,14233,14235,14237,14239,14241,14243],{"class":125,"line":2625},[123,14234,13295],{"class":1972},[123,14236,134],{"class":133},[123,14238,580],{"class":182},[123,14240,512],{"class":133},[123,14242,183],{"class":182},[123,14244,2728],{"class":133},[123,14246,14247,14249,14251,14253,14256,14258],{"class":125,"line":2630},[123,14248,13295],{"class":1972},[123,14250,134],{"class":133},[123,14252,183],{"class":182},[123,14254,14255],{"class":133}," , ",[123,14257,580],{"class":182},[123,14259,2728],{"class":133},[123,14261,14262],{"class":125,"line":7958},[123,14263,13220],{"class":133},[123,14265,14266,14268,14270,14272],{"class":125,"line":7982},[123,14267,2312],{"class":1972},[123,14269,134],{"class":133},[123,14271,2317],{"class":238},[123,14273,2728],{"class":133},[123,14275,14276],{"class":125,"line":7987},[123,14277,2409],{"emptyLinePlaceholder":50},[123,14279,14280,14282,14284],{"class":125,"line":7993},[123,14281,4099],{"class":129},[123,14283,4102],{"class":182},[123,14285,1300],{"class":133},[123,14287,14288],{"class":125,"line":8020},[123,14289,1574],{"class":133},[14,14291,14292],{},"重点：函数返回值不可以作为函数重载条件！",[94,14294,14296],{"id":14295},"_732注意事项","7.3.2注意事项",[1141,14298,14299,14302],{},[80,14300,14301],{},"引用作为重载条件!!!",[80,14303,14304],{},"函数重载碰到函数默认参数",[114,14306,14308],{"className":116,"code":14307,"language":118,"meta":37,"style":37},"\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",[120,14309,14310,14315,14320,14324,14340,14344,14357,14361,14365,14383,14387,14400,14404,14408,14412,14417,14421,14445,14449,14462,14466,14470,14484,14488,14501,14505,14509,14517,14521,14533,14543,14556,14560,14564,14572,14576,14586,14590,14598],{"__ignoreMap":37},[123,14311,14312],{"class":125,"line":126},[123,14313,14314],{"class":192},"\u002F\u002F函数重载注意事项\n",[123,14316,14317],{"class":125,"line":45},[123,14318,14319],{"class":192},"\u002F\u002F1、引用作为重载条件\n",[123,14321,14322],{"class":125,"line":1189},[123,14323,2409],{"emptyLinePlaceholder":50},[123,14325,14326,14328,14330,14332,14334,14336,14338],{"class":125,"line":1204},[123,14327,5374],{"class":129},[123,14329,11395],{"class":1972},[123,14331,134],{"class":133},[123,14333,137],{"class":129},[123,14335,10594],{"class":129},[123,14337,372],{"class":5226},[123,14339,140],{"class":133},[123,14341,14342],{"class":125,"line":1210},[123,14343,1555],{"class":133},[123,14345,14346,14348,14350,14353,14355],{"class":125,"line":1224},[123,14347,6539],{"class":133},[123,14349,1178],{"class":129},[123,14351,14352],{"class":238}," \"func (int &a) 调用 \"",[123,14354,1454],{"class":129},[123,14356,8850],{"class":133},[123,14358,14359],{"class":125,"line":1230},[123,14360,1574],{"class":133},[123,14362,14363],{"class":125,"line":1321},[123,14364,2409],{"emptyLinePlaceholder":50},[123,14366,14367,14369,14371,14373,14375,14377,14379,14381],{"class":125,"line":1327},[123,14368,5374],{"class":129},[123,14370,11395],{"class":1972},[123,14372,134],{"class":133},[123,14374,6802],{"class":129},[123,14376,2391],{"class":129},[123,14378,10594],{"class":129},[123,14380,372],{"class":5226},[123,14382,140],{"class":133},[123,14384,14385],{"class":125,"line":1339},[123,14386,1555],{"class":133},[123,14388,14389,14391,14393,14396,14398],{"class":125,"line":1621},[123,14390,6539],{"class":133},[123,14392,1178],{"class":129},[123,14394,14395],{"class":238}," \"func (const int &a) 调用 \"",[123,14397,1454],{"class":129},[123,14399,8850],{"class":133},[123,14401,14402],{"class":125,"line":1626},[123,14403,1574],{"class":133},[123,14405,14406],{"class":125,"line":1632},[123,14407,2409],{"emptyLinePlaceholder":50},[123,14409,14410],{"class":125,"line":1637},[123,14411,2409],{"emptyLinePlaceholder":50},[123,14413,14414],{"class":125,"line":1651},[123,14415,14416],{"class":192},"\u002F\u002F2、函数重载碰到函数默认参数\n",[123,14418,14419],{"class":125,"line":1656},[123,14420,2409],{"emptyLinePlaceholder":50},[123,14422,14423,14425,14427,14429,14431,14433,14435,14437,14439,14441,14443],{"class":125,"line":1662},[123,14424,5374],{"class":129},[123,14426,13628],{"class":1972},[123,14428,134],{"class":133},[123,14430,137],{"class":129},[123,14432,1408],{"class":5226},[123,14434,12445],{"class":133},[123,14436,137],{"class":129},[123,14438,2842],{"class":5226},[123,14440,13574],{"class":129},[123,14442,2047],{"class":182},[123,14444,140],{"class":133},[123,14446,14447],{"class":125,"line":1683},[123,14448,1555],{"class":133},[123,14450,14451,14453,14455,14458,14460],{"class":125,"line":1688},[123,14452,6539],{"class":133},[123,14454,1178],{"class":129},[123,14456,14457],{"class":238}," \"func2(int a, int b = 10) 调用\"",[123,14459,1454],{"class":129},[123,14461,8850],{"class":133},[123,14463,14464],{"class":125,"line":1702},[123,14465,1574],{"class":133},[123,14467,14468],{"class":125,"line":1707},[123,14469,2409],{"emptyLinePlaceholder":50},[123,14471,14472,14474,14476,14478,14480,14482],{"class":125,"line":1736},[123,14473,5374],{"class":129},[123,14475,13628],{"class":1972},[123,14477,134],{"class":133},[123,14479,137],{"class":129},[123,14481,1408],{"class":5226},[123,14483,140],{"class":133},[123,14485,14486],{"class":125,"line":1741},[123,14487,1555],{"class":133},[123,14489,14490,14492,14494,14497,14499],{"class":125,"line":1758},[123,14491,6539],{"class":133},[123,14493,1178],{"class":129},[123,14495,14496],{"class":238}," \"func2(int a) 调用\"",[123,14498,1454],{"class":129},[123,14500,8850],{"class":133},[123,14502,14503],{"class":125,"line":1763},[123,14504,1574],{"class":133},[123,14506,14507],{"class":125,"line":1768},[123,14508,2409],{"emptyLinePlaceholder":50},[123,14510,14511,14513,14515],{"class":125,"line":1773},[123,14512,137],{"class":129},[123,14514,1982],{"class":1972},[123,14516,10863],{"class":133},[123,14518,14519],{"class":125,"line":1787},[123,14520,13220],{"class":133},[123,14522,14523,14525,14527,14529,14531],{"class":125,"line":1792},[123,14524,1994],{"class":129},[123,14526,10879],{"class":133},[123,14528,179],{"class":129},[123,14530,2047],{"class":182},[123,14532,1300],{"class":133},[123,14534,14535,14537,14540],{"class":125,"line":2586},[123,14536,13295],{"class":1972},[123,14538,14539],{"class":133},"(a);",[123,14541,14542],{"class":192}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[123,14544,14545,14547,14549,14551,14553],{"class":125,"line":2600},[123,14546,13295],{"class":1972},[123,14548,134],{"class":133},[123,14550,580],{"class":182},[123,14552,5976],{"class":133},[123,14554,14555],{"class":192},"\u002F\u002F调用有const   10是个常量\n",[123,14557,14558],{"class":125,"line":2608},[123,14559,2409],{"emptyLinePlaceholder":50},[123,14561,14562],{"class":125,"line":2613},[123,14563,2409],{"emptyLinePlaceholder":50},[123,14565,14566,14569],{"class":125,"line":2619},[123,14567,14568],{"class":192},"    \u002F\u002Ffunc2(10);",[123,14570,14571],{"class":192}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[123,14573,14574],{"class":125,"line":2625},[123,14575,2409],{"emptyLinePlaceholder":50},[123,14577,14578,14580,14582,14584],{"class":125,"line":2630},[123,14579,2312],{"class":1972},[123,14581,134],{"class":133},[123,14583,2317],{"class":238},[123,14585,2728],{"class":133},[123,14587,14588],{"class":125,"line":7958},[123,14589,2409],{"emptyLinePlaceholder":50},[123,14591,14592,14594,14596],{"class":125,"line":7982},[123,14593,4099],{"class":129},[123,14595,4102],{"class":182},[123,14597,1300],{"class":133},[123,14599,14600],{"class":125,"line":7987},[123,14601,1574],{"class":133},[5136,14603,14604],{},"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":37,"searchDepth":45,"depth":45,"links":14606},[14607,14608,14609],{"id":13539,"depth":45,"text":13540},{"id":13796,"depth":45,"text":13797},{"id":13918,"depth":45,"text":13919,"children":14610},[14611,14612],{"id":13925,"depth":1189,"text":13926},{"id":14295,"depth":1189,"text":14296},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13531,"description":37},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14619,"title":14620,"body":14621,"description":23375,"extension":48,"meta":23376,"navigation":50,"path":23377,"seo":23378,"stem":23379,"__hash__":23380},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14622,"toc":23356},[14623,14626,14632,14639,14644,14647,14650,14653,14657,14661,14664,14667,14675,14680,14683,14690,14695,14854,14857,15110,15113,15116,15119,15124,15127,15130,15141,15146,15382,15386,15396,15399,15407,15554,15558,15561,15564,15568,16013,16017,16025,16033,16945,16952,16957,17585,17588,17591,17594,17713,17716,17803,17806,17932,17935,18029,18032,18385,18389,18397,18401,18408,18411,18414,18425,18431,18436,18448,18456,18476,18484,18501,18687,18690,18694,18697,18700,18703,18706,18709,18712,18715,19175,19181,19185,19188,19199,19786,19789,20278,20282,20285,20288,20291,20294,20297,20305,20701,20705,20708,20711,21158,21161,21164,21169,21172,21177,21180,21184,21187,21189,21195,21198,21504,21514,21555,21559,21562,21564,21597,21600,21907,21909,21924,21927,21950,21959,21965,21968,21972,21975,21978,21983,21994,21999,22007,22012,22142,22145,22148,22323,22328,22540,22544,22547,22661,22666,22905,22909,22913,22916,22919,22924,23029,23032,23035,23038,23042,23153,23156,23159,23164,23216,23219,23222,23227,23273,23276,23281,23349,23351,23354],[10,14624,14620],{"id":14625},"_8类和对象",[14,14627,14628,14629],{},"C++面向对象的三大特性为",[283,14630,14631],{},"封装、继承、多态",[14,14633,14634,14635,14638],{},"C++认为",[283,14636,14637],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,14640,14641],{},[283,14642,14643],{},"例如：",[14,14645,14646],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,14648,14649],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,14651,14652],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[65,14654,14656],{"id":14655},"_81封装","8.1封装",[94,14658,14660],{"id":14659},"_811封装的意义","8.1.1封装的意义",[14,14662,14663],{},"封装是C++面向对象三大特性之一",[14,14665,14666],{},"封装的意义：",[1141,14668,14669,14672],{},[80,14670,14671],{},"将属性和行为作为一个整体，表现生活中的事物",[80,14673,14674],{},"将属性和行为加以权限控制",[14,14676,14677],{},[283,14678,14679],{},"封装意义一：",[14,14681,14682],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,14684,14685,13805,14687],{},[283,14686,5191],{},[120,14688,14689],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[77,14691,14692],{},[80,14693,14694],{},"**示例1：**设计一个圆类，求圆的周长",[114,14696,14698],{"className":116,"code":14697,"language":118,"meta":37,"style":37},"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",[120,14699,14700,14708,14712,14717,14722,14727,14732,14739,14744,14754,14758,14776,14780,14784,14792,14796,14801,14806,14811,14816,14827,14850],{"__ignoreMap":37},[123,14701,14702,14705],{"class":125,"line":126},[123,14703,14704],{"class":129},"class",[123,14706,14707],{"class":1972}," Circle\n",[123,14709,14710],{"class":125,"line":45},[123,14711,1555],{"class":133},[123,14713,14714],{"class":125,"line":1189},[123,14715,14716],{"class":192},"    \u002F\u002F访问权限\n",[123,14718,14719],{"class":125,"line":1204},[123,14720,14721],{"class":192},"    \u002F\u002F公共权限\n",[123,14723,14724],{"class":125,"line":1210},[123,14725,14726],{"class":129},"public:\n",[123,14728,14729],{"class":125,"line":1224},[123,14730,14731],{"class":192},"    \u002F\u002F属性\n",[123,14733,14734,14736],{"class":125,"line":1230},[123,14735,1994],{"class":129},[123,14737,14738],{"class":133}," m_r;\n",[123,14740,14741],{"class":125,"line":1321},[123,14742,14743],{"class":192},"    \u002F\u002F行为\n",[123,14745,14746,14749,14752],{"class":125,"line":1327},[123,14747,14748],{"class":129},"    double",[123,14750,14751],{"class":1972}," calculateZC",[123,14753,1985],{"class":133},[123,14755,14756],{"class":125,"line":1339},[123,14757,2039],{"class":133},[123,14759,14760,14763,14766,14768,14771,14773],{"class":125,"line":1621},[123,14761,14762],{"class":129},"        return",[123,14764,14765],{"class":182}," 2",[123,14767,589],{"class":129},[123,14769,14770],{"class":133},"PI",[123,14772,589],{"class":129},[123,14774,14775],{"class":133},"m_r;\n",[123,14777,14778],{"class":125,"line":1626},[123,14779,2196],{"class":133},[123,14781,14782],{"class":125,"line":1632},[123,14783,4004],{"class":133},[123,14785,14786,14788,14790],{"class":125,"line":1637},[123,14787,137],{"class":129},[123,14789,1982],{"class":1972},[123,14791,1985],{"class":133},[123,14793,14794],{"class":125,"line":1651},[123,14795,1555],{"class":133},[123,14797,14798],{"class":125,"line":1656},[123,14799,14800],{"class":192},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[123,14802,14803],{"class":125,"line":1662},[123,14804,14805],{"class":192},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[123,14807,14808],{"class":125,"line":1683},[123,14809,14810],{"class":133},"    Circle c1;\n",[123,14812,14813],{"class":125,"line":1688},[123,14814,14815],{"class":192},"    \u002F\u002F给圆对象 的属性进行赋值\n",[123,14817,14818,14821,14823,14825],{"class":125,"line":1702},[123,14819,14820],{"class":133},"    c1.m_r",[123,14822,179],{"class":129},[123,14824,580],{"class":182},[123,14826,1300],{"class":133},[123,14828,14829,14831,14833,14836,14838,14841,14844,14846,14848],{"class":125,"line":1707},[123,14830,1560],{"class":133},[123,14832,1178],{"class":129},[123,14834,14835],{"class":238},"\"圆的周长\"",[123,14837,1178],{"class":129},[123,14839,14840],{"class":133},"c1.",[123,14842,14843],{"class":1972},"calculateZC",[123,14845,2436],{"class":133},[123,14847,1178],{"class":129},[123,14849,1201],{"class":133},[123,14851,14852],{"class":125,"line":1736},[123,14853,1574],{"class":133},[14,14855,14856],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[114,14858,14860],{"className":116,"code":14859,"language":118,"meta":37,"style":37},"#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",[120,14861,14862,14868,14878,14884,14890,14894,14898,14903,14910,14915,14933,14937,14947,14951,14956,14972,14976,14986,14990,14995,15003,15007,15039,15043,15047,15055,15059,15064,15069,15083,15097,15106],{"__ignoreMap":37},[123,14863,14864,14866],{"class":125,"line":126},[123,14865,1958],{"class":129},[123,14867,1961],{"class":238},[123,14869,14870,14872,14874,14876],{"class":125,"line":45},[123,14871,1966],{"class":129},[123,14873,1969],{"class":129},[123,14875,1973],{"class":1972},[123,14877,1300],{"class":133},[123,14879,14880,14882],{"class":125,"line":1189},[123,14881,1958],{"class":129},[123,14883,7759],{"class":238},[123,14885,14886,14888],{"class":125,"line":1204},[123,14887,14704],{"class":129},[123,14889,7772],{"class":1972},[123,14891,14892],{"class":125,"line":1210},[123,14893,1555],{"class":133},[123,14895,14896],{"class":125,"line":1224},[123,14897,14726],{"class":129},[123,14899,14900],{"class":125,"line":1230},[123,14901,14902],{"class":133},"    string m_name;\n",[123,14904,14905,14907],{"class":125,"line":1321},[123,14906,1994],{"class":129},[123,14908,14909],{"class":133}," m_id;\n",[123,14911,14912],{"class":125,"line":1327},[123,14913,14914],{"class":192},"    \u002F\u002F赋值姓名\n",[123,14916,14917,14920,14923,14925,14928,14931],{"class":125,"line":1339},[123,14918,14919],{"class":129},"    void",[123,14921,14922],{"class":1972}," setName",[123,14924,134],{"class":133},[123,14926,14927],{"class":1972},"string",[123,14929,14930],{"class":5226}," name",[123,14932,140],{"class":133},[123,14934,14935],{"class":125,"line":1621},[123,14936,2039],{"class":133},[123,14938,14939,14942,14944],{"class":125,"line":1626},[123,14940,14941],{"class":133},"        m_name",[123,14943,179],{"class":129},[123,14945,14946],{"class":133},"name;\n",[123,14948,14949],{"class":125,"line":1632},[123,14950,2196],{"class":133},[123,14952,14953],{"class":125,"line":1637},[123,14954,14955],{"class":192},"    \u002F\u002F赋值学号\n",[123,14957,14958,14960,14963,14965,14967,14970],{"class":125,"line":1651},[123,14959,14919],{"class":129},[123,14961,14962],{"class":1972}," setId",[123,14964,134],{"class":133},[123,14966,137],{"class":129},[123,14968,14969],{"class":5226}," id",[123,14971,140],{"class":133},[123,14973,14974],{"class":125,"line":1656},[123,14975,2039],{"class":133},[123,14977,14978,14981,14983],{"class":125,"line":1662},[123,14979,14980],{"class":133},"        m_id",[123,14982,179],{"class":129},[123,14984,14985],{"class":133},"id;\n",[123,14987,14988],{"class":125,"line":1683},[123,14989,2196],{"class":133},[123,14991,14992],{"class":125,"line":1688},[123,14993,14994],{"class":192},"    \u002F\u002F打印学生信息\n",[123,14996,14997,14999,15001],{"class":125,"line":1702},[123,14998,14919],{"class":129},[123,15000,9625],{"class":1972},[123,15002,1985],{"class":133},[123,15004,15005],{"class":125,"line":1707},[123,15006,2039],{"class":133},[123,15008,15009,15011,15013,15016,15018,15021,15023,15025,15027,15030,15032,15035,15037],{"class":125,"line":1736},[123,15010,3460],{"class":133},[123,15012,1178],{"class":129},[123,15014,15015],{"class":238},"\"姓名：\"",[123,15017,1178],{"class":129},[123,15019,15020],{"class":133},"m_name",[123,15022,1178],{"class":129},[123,15024,4368],{"class":238},[123,15026,1178],{"class":129},[123,15028,15029],{"class":238},"\"学号：\"",[123,15031,1178],{"class":129},[123,15033,15034],{"class":133},"m_id",[123,15036,1178],{"class":129},[123,15038,1201],{"class":133},[123,15040,15041],{"class":125,"line":1741},[123,15042,2196],{"class":133},[123,15044,15045],{"class":125,"line":1758},[123,15046,4004],{"class":133},[123,15048,15049,15051,15053],{"class":125,"line":1763},[123,15050,137],{"class":129},[123,15052,1982],{"class":1972},[123,15054,1985],{"class":133},[123,15056,15057],{"class":125,"line":1768},[123,15058,1555],{"class":133},[123,15060,15061],{"class":125,"line":1773},[123,15062,15063],{"class":192},"    \u002F\u002F实例化\n",[123,15065,15066],{"class":125,"line":1787},[123,15067,15068],{"class":133},"    Student s1;\n",[123,15070,15071,15074,15077,15079,15081],{"class":125,"line":1792},[123,15072,15073],{"class":133},"    s1.",[123,15075,15076],{"class":1972},"setName",[123,15078,134],{"class":133},[123,15080,7926],{"class":238},[123,15082,2728],{"class":133},[123,15084,15085,15087,15090,15092,15095],{"class":125,"line":2586},[123,15086,15073],{"class":133},[123,15088,15089],{"class":1972},"setId",[123,15091,134],{"class":133},[123,15093,15094],{"class":182},"123456",[123,15096,2728],{"class":133},[123,15098,15099,15101,15104],{"class":125,"line":2600},[123,15100,15073],{"class":133},[123,15102,15103],{"class":1972},"printInfo",[123,15105,5646],{"class":133},[123,15107,15108],{"class":125,"line":2608},[123,15109,1574],{"class":133},[14,15111,15112],{},"类中的属性和行为统称为成员",[14,15114,15115],{},"属性：成员属性(成员变量)",[14,15117,15118],{},"方法：成员函数(成员方法)",[14,15120,15121],{},[283,15122,15123],{},"封装意义二：",[14,15125,15126],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15128,15129],{},"访问权限有三种：",[77,15131,15132,15135,15138],{},[80,15133,15134],{},"public        公共权限",[80,15136,15137],{},"protected 保护权限",[80,15139,15140],{},"private      私有权限",[14,15142,15143],{},[283,15144,15145],{},"示例：",[114,15147,15149],{"className":9951,"code":15148,"language":9953,"meta":37,"style":37},"\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",[120,15150,15151,15156,15161,15166,15171,15175,15182,15186,15191,15195,15200,15204,15209,15214,15219,15223,15228,15233,15240,15244,15248,15256,15260,15271,15283,15295,15299,15303,15307,15315,15319,15324,15336,15344,15352,15356,15366,15370,15378],{"__ignoreMap":37},[123,15152,15153],{"class":125,"line":126},[123,15154,15155],{"class":192},"\u002F\u002F三种权限\n",[123,15157,15158],{"class":125,"line":45},[123,15159,15160],{"class":192},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[123,15162,15163],{"class":125,"line":1189},[123,15164,15165],{"class":192},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[123,15167,15168],{"class":125,"line":1204},[123,15169,15170],{"class":192},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[123,15172,15173],{"class":125,"line":1210},[123,15174,2409],{"emptyLinePlaceholder":50},[123,15176,15177,15179],{"class":125,"line":1224},[123,15178,14704],{"class":129},[123,15180,15181],{"class":1972}," Person\n",[123,15183,15184],{"class":125,"line":1230},[123,15185,1555],{"class":133},[123,15187,15188],{"class":125,"line":1321},[123,15189,15190],{"class":192},"    \u002F\u002F姓名  公共权限\n",[123,15192,15193],{"class":125,"line":1327},[123,15194,14726],{"class":129},[123,15196,15197],{"class":125,"line":1339},[123,15198,15199],{"class":133},"    string m_Name;\n",[123,15201,15202],{"class":125,"line":1621},[123,15203,2409],{"emptyLinePlaceholder":50},[123,15205,15206],{"class":125,"line":1626},[123,15207,15208],{"class":192},"    \u002F\u002F汽车  保护权限\n",[123,15210,15211],{"class":125,"line":1632},[123,15212,15213],{"class":129},"protected:\n",[123,15215,15216],{"class":125,"line":1637},[123,15217,15218],{"class":133},"    string m_Car;\n",[123,15220,15221],{"class":125,"line":1651},[123,15222,2409],{"emptyLinePlaceholder":50},[123,15224,15225],{"class":125,"line":1656},[123,15226,15227],{"class":192},"    \u002F\u002F银行卡密码  私有权限\n",[123,15229,15230],{"class":125,"line":1662},[123,15231,15232],{"class":129},"private:\n",[123,15234,15235,15237],{"class":125,"line":1683},[123,15236,1994],{"class":129},[123,15238,15239],{"class":133}," m_Password;\n",[123,15241,15242],{"class":125,"line":1688},[123,15243,2409],{"emptyLinePlaceholder":50},[123,15245,15246],{"class":125,"line":1702},[123,15247,14726],{"class":129},[123,15249,15250,15252,15254],{"class":125,"line":1707},[123,15251,14919],{"class":129},[123,15253,11395],{"class":1972},[123,15255,1985],{"class":133},[123,15257,15258],{"class":125,"line":1736},[123,15259,2039],{"class":133},[123,15261,15262,15265,15267,15269],{"class":125,"line":1741},[123,15263,15264],{"class":133},"        m_Name ",[123,15266,179],{"class":129},[123,15268,8948],{"class":238},[123,15270,1300],{"class":133},[123,15272,15273,15276,15278,15281],{"class":125,"line":1758},[123,15274,15275],{"class":133},"        m_Car ",[123,15277,179],{"class":129},[123,15279,15280],{"class":238}," \"拖拉机\"",[123,15282,1300],{"class":133},[123,15284,15285,15288,15290,15293],{"class":125,"line":1763},[123,15286,15287],{"class":133},"        m_Password ",[123,15289,179],{"class":129},[123,15291,15292],{"class":182}," 123456",[123,15294,1300],{"class":133},[123,15296,15297],{"class":125,"line":1768},[123,15298,2196],{"class":133},[123,15300,15301],{"class":125,"line":1773},[123,15302,4004],{"class":133},[123,15304,15305],{"class":125,"line":1787},[123,15306,2409],{"emptyLinePlaceholder":50},[123,15308,15309,15311,15313],{"class":125,"line":1792},[123,15310,137],{"class":129},[123,15312,1982],{"class":1972},[123,15314,10863],{"class":133},[123,15316,15317],{"class":125,"line":2586},[123,15318,2409],{"emptyLinePlaceholder":50},[123,15320,15321],{"class":125,"line":2600},[123,15322,15323],{"class":133},"    Person p;\n",[123,15325,15326,15329,15331,15334],{"class":125,"line":2608},[123,15327,15328],{"class":133},"    p.m_Name ",[123,15330,179],{"class":129},[123,15332,15333],{"class":238}," \"李四\"",[123,15335,1300],{"class":133},[123,15337,15338,15341],{"class":125,"line":2613},[123,15339,15340],{"class":192},"    \u002F\u002Fp.m_Car = \"奔驰\";",[123,15342,15343],{"class":192},"  \u002F\u002F保护权限类外访问不到\n",[123,15345,15346,15349],{"class":125,"line":2619},[123,15347,15348],{"class":192},"    \u002F\u002Fp.m_Password = 123;",[123,15350,15351],{"class":192}," \u002F\u002F私有权限类外访问不到\n",[123,15353,15354],{"class":125,"line":2625},[123,15355,2409],{"emptyLinePlaceholder":50},[123,15357,15358,15360,15362,15364],{"class":125,"line":2630},[123,15359,2312],{"class":1972},[123,15361,134],{"class":133},[123,15363,2317],{"class":238},[123,15365,2728],{"class":133},[123,15367,15368],{"class":125,"line":7958},[123,15369,2409],{"emptyLinePlaceholder":50},[123,15371,15372,15374,15376],{"class":125,"line":7982},[123,15373,4099],{"class":129},[123,15375,4102],{"class":182},[123,15377,1300],{"class":133},[123,15379,15380],{"class":125,"line":7987},[123,15381,1574],{"class":133},[94,15383,15385],{"id":15384},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15387,15388,15389,15392,15393],{},"在C++中 struct和class唯一的",[283,15390,15391],{},"区别","就在于 ",[283,15394,15395],{},"默认的访问权限不同",[14,15397,15398],{},"区别：",[1141,15400,15401,15404],{},[80,15402,15403],{},"struct 默认权限为公共",[80,15405,15406],{},"class   默认权限为私有",[114,15408,15410],{"className":9951,"code":15409,"language":9953,"meta":37,"style":37},"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",[120,15411,15412,15419,15423,15433,15437,15441,15448,15452,15462,15466,15470,15478,15482,15487,15501,15505,15510,15524,15528,15538,15542,15550],{"__ignoreMap":37},[123,15413,15414,15416],{"class":125,"line":126},[123,15415,14704],{"class":129},[123,15417,15418],{"class":1972}," C1\n",[123,15420,15421],{"class":125,"line":45},[123,15422,1555],{"class":133},[123,15424,15425,15427,15430],{"class":125,"line":1189},[123,15426,1994],{"class":129},[123,15428,15429],{"class":133},"  m_A;",[123,15431,15432],{"class":192}," \u002F\u002F默认是私有权限\n",[123,15434,15435],{"class":125,"line":1204},[123,15436,4004],{"class":133},[123,15438,15439],{"class":125,"line":1210},[123,15440,2409],{"emptyLinePlaceholder":50},[123,15442,15443,15445],{"class":125,"line":1224},[123,15444,7769],{"class":129},[123,15446,15447],{"class":1972}," C2\n",[123,15449,15450],{"class":125,"line":1230},[123,15451,1555],{"class":133},[123,15453,15454,15456,15459],{"class":125,"line":1321},[123,15455,1994],{"class":129},[123,15457,15458],{"class":133}," m_A;",[123,15460,15461],{"class":192},"  \u002F\u002F默认是公共权限\n",[123,15463,15464],{"class":125,"line":1327},[123,15465,4004],{"class":133},[123,15467,15468],{"class":125,"line":1339},[123,15469,2409],{"emptyLinePlaceholder":50},[123,15471,15472,15474,15476],{"class":125,"line":1621},[123,15473,137],{"class":129},[123,15475,1982],{"class":1972},[123,15477,10863],{"class":133},[123,15479,15480],{"class":125,"line":1626},[123,15481,2409],{"emptyLinePlaceholder":50},[123,15483,15484],{"class":125,"line":1632},[123,15485,15486],{"class":133},"    C1 c1;\n",[123,15488,15489,15492,15494,15496,15498],{"class":125,"line":1637},[123,15490,15491],{"class":133},"    c1.m_A ",[123,15493,179],{"class":129},[123,15495,2047],{"class":182},[123,15497,189],{"class":133},[123,15499,15500],{"class":192}," \u002F\u002F错误，访问权限是私有\n",[123,15502,15503],{"class":125,"line":1651},[123,15504,2409],{"emptyLinePlaceholder":50},[123,15506,15507],{"class":125,"line":1656},[123,15508,15509],{"class":133},"    C2 c2;\n",[123,15511,15512,15515,15517,15519,15521],{"class":125,"line":1662},[123,15513,15514],{"class":133},"    c2.m_A ",[123,15516,179],{"class":129},[123,15518,2047],{"class":182},[123,15520,189],{"class":133},[123,15522,15523],{"class":192}," \u002F\u002F正确，访问权限是公共\n",[123,15525,15526],{"class":125,"line":1683},[123,15527,2409],{"emptyLinePlaceholder":50},[123,15529,15530,15532,15534,15536],{"class":125,"line":1688},[123,15531,2312],{"class":1972},[123,15533,134],{"class":133},[123,15535,2317],{"class":238},[123,15537,2728],{"class":133},[123,15539,15540],{"class":125,"line":1702},[123,15541,2409],{"emptyLinePlaceholder":50},[123,15543,15544,15546,15548],{"class":125,"line":1707},[123,15545,4099],{"class":129},[123,15547,4102],{"class":182},[123,15549,1300],{"class":133},[123,15551,15552],{"class":125,"line":1736},[123,15553,1574],{"class":133},[94,15555,15557],{"id":15556},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,15559,15560],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,15562,15563],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,15565,15566],{},[283,15567,15145],{},[114,15569,15571],{"className":9951,"code":15570,"language":9953,"meta":37,"style":37},"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",[120,15572,15573,15583,15587,15591,15596,15610,15619,15623,15633,15637,15644,15648,15652,15656,15661,15670,15677,15681,15686,15702,15725,15738,15745,15749,15758,15762,15766,15771,15787,15797,15801,15805,15809,15817,15821,15831,15835,15843,15847,15851,15859,15863,15867,15872,15885,15908,15912,15917,15930,15952,15956,15961,15975,15983,15987,15997,16001,16009],{"__ignoreMap":37},[123,15574,15575,15577,15580],{"class":125,"line":126},[123,15576,14704],{"class":129},[123,15578,15579],{"class":1972}," Person",[123,15581,15582],{"class":133}," {\n",[123,15584,15585],{"class":125,"line":45},[123,15586,14726],{"class":129},[123,15588,15589],{"class":125,"line":1189},[123,15590,2409],{"emptyLinePlaceholder":50},[123,15592,15593],{"class":125,"line":1204},[123,15594,15595],{"class":192},"    \u002F\u002F姓名设置可读可写\n",[123,15597,15598,15600,15602,15604,15606,15608],{"class":125,"line":1210},[123,15599,14919],{"class":129},[123,15601,14922],{"class":1972},[123,15603,134],{"class":133},[123,15605,14927],{"class":1972},[123,15607,14930],{"class":5226},[123,15609,12452],{"class":133},[123,15611,15612,15614,15616],{"class":125,"line":1224},[123,15613,15264],{"class":133},[123,15615,179],{"class":129},[123,15617,15618],{"class":133}," name;\n",[123,15620,15621],{"class":125,"line":1230},[123,15622,2196],{"class":133},[123,15624,15625,15628,15631],{"class":125,"line":1321},[123,15626,15627],{"class":1972},"    string",[123,15629,15630],{"class":1972}," getName",[123,15632,1985],{"class":133},[123,15634,15635],{"class":125,"line":1327},[123,15636,2039],{"class":133},[123,15638,15639,15641],{"class":125,"line":1339},[123,15640,14762],{"class":129},[123,15642,15643],{"class":133}," m_Name;\n",[123,15645,15646],{"class":125,"line":1621},[123,15647,2196],{"class":133},[123,15649,15650],{"class":125,"line":1626},[123,15651,2409],{"emptyLinePlaceholder":50},[123,15653,15654],{"class":125,"line":1632},[123,15655,2409],{"emptyLinePlaceholder":50},[123,15657,15658],{"class":125,"line":1637},[123,15659,15660],{"class":192},"    \u002F\u002F获取年龄 \n",[123,15662,15663,15665,15668],{"class":125,"line":1651},[123,15664,1994],{"class":129},[123,15666,15667],{"class":1972}," getAge",[123,15669,10863],{"class":133},[123,15671,15672,15674],{"class":125,"line":1656},[123,15673,14762],{"class":129},[123,15675,15676],{"class":133}," m_Age;\n",[123,15678,15679],{"class":125,"line":1662},[123,15680,2196],{"class":133},[123,15682,15683],{"class":125,"line":1683},[123,15684,15685],{"class":192},"    \u002F\u002F设置年龄\n",[123,15687,15688,15690,15693,15695,15697,15700],{"class":125,"line":1688},[123,15689,14919],{"class":129},[123,15691,15692],{"class":1972}," setAge",[123,15694,134],{"class":133},[123,15696,137],{"class":129},[123,15698,15699],{"class":5226}," age",[123,15701,12452],{"class":133},[123,15703,15704,15706,15709,15711,15713,15715,15718,15720,15723],{"class":125,"line":1702},[123,15705,2506],{"class":129},[123,15707,15708],{"class":133}," (age ",[123,15710,1044],{"class":129},[123,15712,4102],{"class":182},[123,15714,3264],{"class":129},[123,15716,15717],{"class":133}," age ",[123,15719,1094],{"class":129},[123,15721,15722],{"class":182}," 150",[123,15724,12452],{"class":133},[123,15726,15727,15729,15731,15734,15736],{"class":125,"line":1707},[123,15728,9729],{"class":133},[123,15730,1178],{"class":129},[123,15732,15733],{"class":238}," \"你个老妖精!\"",[123,15735,1454],{"class":129},[123,15737,8850],{"class":133},[123,15739,15740,15743],{"class":125,"line":1736},[123,15741,15742],{"class":129},"            return",[123,15744,1300],{"class":133},[123,15746,15747],{"class":125,"line":1741},[123,15748,2538],{"class":133},[123,15750,15751,15754,15756],{"class":125,"line":1758},[123,15752,15753],{"class":133},"        m_Age ",[123,15755,179],{"class":129},[123,15757,7807],{"class":133},[123,15759,15760],{"class":125,"line":1763},[123,15761,2196],{"class":133},[123,15763,15764],{"class":125,"line":1768},[123,15765,2409],{"emptyLinePlaceholder":50},[123,15767,15768],{"class":125,"line":1773},[123,15769,15770],{"class":192},"    \u002F\u002F情人设置为只写\n",[123,15772,15773,15775,15778,15780,15782,15785],{"class":125,"line":1787},[123,15774,14919],{"class":129},[123,15776,15777],{"class":1972}," setLover",[123,15779,134],{"class":133},[123,15781,14927],{"class":1972},[123,15783,15784],{"class":5226}," lover",[123,15786,12452],{"class":133},[123,15788,15789,15792,15794],{"class":125,"line":1792},[123,15790,15791],{"class":133},"        m_Lover ",[123,15793,179],{"class":129},[123,15795,15796],{"class":133}," lover;\n",[123,15798,15799],{"class":125,"line":2586},[123,15800,2196],{"class":133},[123,15802,15803],{"class":125,"line":2600},[123,15804,2409],{"emptyLinePlaceholder":50},[123,15806,15807],{"class":125,"line":2608},[123,15808,15232],{"class":129},[123,15810,15811,15814],{"class":125,"line":2613},[123,15812,15813],{"class":133},"    string m_Name;",[123,15815,15816],{"class":192}," \u002F\u002F可读可写  姓名\n",[123,15818,15819],{"class":125,"line":2619},[123,15820,13220],{"class":133},[123,15822,15823,15825,15828],{"class":125,"line":2625},[123,15824,1994],{"class":129},[123,15826,15827],{"class":133}," m_Age;",[123,15829,15830],{"class":192}," \u002F\u002F只读  年龄\n",[123,15832,15833],{"class":125,"line":2630},[123,15834,2409],{"emptyLinePlaceholder":50},[123,15836,15837,15840],{"class":125,"line":7958},[123,15838,15839],{"class":133},"    string m_Lover;",[123,15841,15842],{"class":192}," \u002F\u002F只写  情人\n",[123,15844,15845],{"class":125,"line":7982},[123,15846,4004],{"class":133},[123,15848,15849],{"class":125,"line":7987},[123,15850,2409],{"emptyLinePlaceholder":50},[123,15852,15853,15855,15857],{"class":125,"line":7993},[123,15854,137],{"class":129},[123,15856,1982],{"class":1972},[123,15858,10863],{"class":133},[123,15860,15861],{"class":125,"line":8020},[123,15862,2409],{"emptyLinePlaceholder":50},[123,15864,15865],{"class":125,"line":8025},[123,15866,15323],{"class":133},[123,15868,15869],{"class":125,"line":8031},[123,15870,15871],{"class":192},"    \u002F\u002F姓名设置\n",[123,15873,15874,15877,15879,15881,15883],{"class":125,"line":8043},[123,15875,15876],{"class":133},"    p.",[123,15878,15076],{"class":1972},[123,15880,134],{"class":133},[123,15882,7926],{"class":238},[123,15884,2728],{"class":133},[123,15886,15887,15889,15891,15894,15896,15899,15902,15904,15906],{"class":125,"line":8055},[123,15888,6539],{"class":133},[123,15890,1178],{"class":129},[123,15892,15893],{"class":238}," \"姓名： \"",[123,15895,1454],{"class":129},[123,15897,15898],{"class":133}," p.",[123,15900,15901],{"class":1972},"getName",[123,15903,13060],{"class":133},[123,15905,1178],{"class":129},[123,15907,8850],{"class":133},[123,15909,15910],{"class":125,"line":8067},[123,15911,2409],{"emptyLinePlaceholder":50},[123,15913,15914],{"class":125,"line":9726},[123,15915,15916],{"class":192},"    \u002F\u002F年龄设置\n",[123,15918,15919,15921,15924,15926,15928],{"class":125,"line":9751},[123,15920,15876],{"class":133},[123,15922,15923],{"class":1972},"setAge",[123,15925,134],{"class":133},[123,15927,790],{"class":182},[123,15929,2728],{"class":133},[123,15931,15932,15934,15936,15939,15941,15943,15946,15948,15950],{"class":125,"line":9774},[123,15933,6539],{"class":133},[123,15935,1178],{"class":129},[123,15937,15938],{"class":238}," \"年龄： \"",[123,15940,1454],{"class":129},[123,15942,15898],{"class":133},[123,15944,15945],{"class":1972},"getAge",[123,15947,13060],{"class":133},[123,15949,1178],{"class":129},[123,15951,8850],{"class":133},[123,15953,15954],{"class":125,"line":9798},[123,15955,2409],{"emptyLinePlaceholder":50},[123,15957,15958],{"class":125,"line":9803},[123,15959,15960],{"class":192},"    \u002F\u002F情人设置\n",[123,15962,15963,15965,15968,15970,15973],{"class":125,"line":9808},[123,15964,15876],{"class":133},[123,15966,15967],{"class":1972},"setLover",[123,15969,134],{"class":133},[123,15971,15972],{"class":238},"\"苍井\"",[123,15974,2728],{"class":133},[123,15976,15977,15980],{"class":125,"line":9813},[123,15978,15979],{"class":192},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[123,15981,15982],{"class":192},"  \u002F\u002F只写属性，不可以读取\n",[123,15984,15985],{"class":125,"line":9822},[123,15986,2409],{"emptyLinePlaceholder":50},[123,15988,15989,15991,15993,15995],{"class":125,"line":9827},[123,15990,2312],{"class":1972},[123,15992,134],{"class":133},[123,15994,2317],{"class":238},[123,15996,2728],{"class":133},[123,15998,15999],{"class":125,"line":9833},[123,16000,2409],{"emptyLinePlaceholder":50},[123,16002,16003,16005,16007],{"class":125,"line":9854},[123,16004,4099],{"class":129},[123,16006,4102],{"class":182},[123,16008,1300],{"class":133},[123,16010,16011],{"class":125,"line":9860},[123,16012,1574],{"class":133},[94,16014,16016],{"id":16015},"_814封装案例","8.1.4封装案例",[77,16018,16019],{},[80,16020,16021,16024],{},[283,16022,16023],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1141,16026,16027,16030],{},[80,16028,16029],{},"求出立方体的面积和体积",[80,16031,16032],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[114,16034,16036],{"className":116,"code":16035,"language":118,"meta":37,"style":37},"#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",[120,16037,16038,16044,16054,16061,16065,16069,16074,16104,16108,16118,16128,16138,16142,16151,16155,16191,16195,16204,16208,16224,16228,16233,16242,16246,16253,16257,16266,16270,16277,16281,16290,16294,16301,16305,16310,16327,16331,16377,16381,16390,16394,16398,16402,16411,16415,16419,16424,16428,16434,16440,16446,16450,16454,16459,16481,16485,16539,16543,16551,16555,16560,16565,16578,16585,16601,16612,16618,16641,16647,16670,16684,16704,16710,16721,16744,16766,16771,16777,16791,16804,16809,16823,16828,16834,16839,16853,16858,16863,16877,16889,16894,16907,16912,16917,16922,16935,16940],{"__ignoreMap":37},[123,16039,16040,16042],{"class":125,"line":126},[123,16041,1958],{"class":129},[123,16043,1961],{"class":238},[123,16045,16046,16048,16050,16052],{"class":125,"line":45},[123,16047,1966],{"class":129},[123,16049,1969],{"class":129},[123,16051,1973],{"class":1972},[123,16053,1300],{"class":133},[123,16055,16056,16058],{"class":125,"line":1189},[123,16057,14704],{"class":129},[123,16059,16060],{"class":1972}," Cube\n",[123,16062,16063],{"class":125,"line":1204},[123,16064,1555],{"class":133},[123,16066,16067],{"class":125,"line":1210},[123,16068,14726],{"class":129},[123,16070,16071],{"class":125,"line":1224},[123,16072,16073],{"class":192},"    \u002F\u002F输入长宽高\n",[123,16075,16076,16078,16081,16083,16085,16088,16090,16092,16095,16097,16099,16102],{"class":125,"line":1230},[123,16077,14919],{"class":129},[123,16079,16080],{"class":1972}," setLwh",[123,16082,134],{"class":133},[123,16084,137],{"class":129},[123,16086,16087],{"class":5226}," l",[123,16089,512],{"class":133},[123,16091,137],{"class":129},[123,16093,16094],{"class":5226}," w",[123,16096,512],{"class":133},[123,16098,137],{"class":129},[123,16100,16101],{"class":5226}," h",[123,16103,140],{"class":133},[123,16105,16106],{"class":125,"line":1321},[123,16107,2039],{"class":133},[123,16109,16110,16113,16115],{"class":125,"line":1327},[123,16111,16112],{"class":133},"        m_L",[123,16114,179],{"class":129},[123,16116,16117],{"class":133},"l;\n",[123,16119,16120,16123,16125],{"class":125,"line":1339},[123,16121,16122],{"class":133},"        m_W",[123,16124,179],{"class":129},[123,16126,16127],{"class":133},"w;\n",[123,16129,16130,16133,16135],{"class":125,"line":1621},[123,16131,16132],{"class":133},"        m_H",[123,16134,179],{"class":129},[123,16136,16137],{"class":133},"h;\n",[123,16139,16140],{"class":125,"line":1626},[123,16141,2196],{"class":133},[123,16143,16144,16146,16149],{"class":125,"line":1632},[123,16145,1994],{"class":129},[123,16147,16148],{"class":1972}," mianji",[123,16150,1985],{"class":133},[123,16152,16153],{"class":125,"line":1637},[123,16154,2039],{"class":133},[123,16156,16157,16159,16161,16163,16166,16168,16171,16173,16176,16178,16181,16183,16186,16188],{"class":125,"line":1651},[123,16158,14762],{"class":129},[123,16160,14765],{"class":182},[123,16162,589],{"class":129},[123,16164,16165],{"class":133},"(m_L",[123,16167,589],{"class":129},[123,16169,16170],{"class":133},"m_W ",[123,16172,615],{"class":129},[123,16174,16175],{"class":133}," m_L",[123,16177,589],{"class":129},[123,16179,16180],{"class":133},"m_H ",[123,16182,615],{"class":129},[123,16184,16185],{"class":133}," m_W",[123,16187,589],{"class":129},[123,16189,16190],{"class":133},"m_H);\n",[123,16192,16193],{"class":125,"line":1656},[123,16194,2196],{"class":133},[123,16196,16197,16199,16202],{"class":125,"line":1662},[123,16198,1994],{"class":129},[123,16200,16201],{"class":1972}," tiji",[123,16203,1985],{"class":133},[123,16205,16206],{"class":125,"line":1683},[123,16207,2039],{"class":133},[123,16209,16210,16212,16214,16216,16219,16221],{"class":125,"line":1688},[123,16211,14762],{"class":129},[123,16213,16175],{"class":133},[123,16215,589],{"class":129},[123,16217,16218],{"class":133},"m_W",[123,16220,589],{"class":129},[123,16222,16223],{"class":133},"m_H;\n",[123,16225,16226],{"class":125,"line":1702},[123,16227,2196],{"class":133},[123,16229,16230],{"class":125,"line":1707},[123,16231,16232],{"class":192},"    \u002F\u002F获取长宽高\n",[123,16234,16235,16237,16240],{"class":125,"line":1736},[123,16236,1994],{"class":129},[123,16238,16239],{"class":1972}," getLength",[123,16241,1985],{"class":133},[123,16243,16244],{"class":125,"line":1741},[123,16245,2039],{"class":133},[123,16247,16248,16250],{"class":125,"line":1758},[123,16249,14762],{"class":129},[123,16251,16252],{"class":133}," m_L;\n",[123,16254,16255],{"class":125,"line":1763},[123,16256,2196],{"class":133},[123,16258,16259,16261,16264],{"class":125,"line":1768},[123,16260,1994],{"class":129},[123,16262,16263],{"class":1972}," getWidth",[123,16265,1985],{"class":133},[123,16267,16268],{"class":125,"line":1773},[123,16269,2039],{"class":133},[123,16271,16272,16274],{"class":125,"line":1787},[123,16273,14762],{"class":129},[123,16275,16276],{"class":133}," m_W;\n",[123,16278,16279],{"class":125,"line":1792},[123,16280,2196],{"class":133},[123,16282,16283,16285,16288],{"class":125,"line":2586},[123,16284,1994],{"class":129},[123,16286,16287],{"class":1972}," getHeight",[123,16289,1985],{"class":133},[123,16291,16292],{"class":125,"line":2600},[123,16293,2039],{"class":133},[123,16295,16296,16298],{"class":125,"line":2608},[123,16297,14762],{"class":129},[123,16299,16300],{"class":133}," m_H;\n",[123,16302,16303],{"class":125,"line":2613},[123,16304,2196],{"class":133},[123,16306,16307],{"class":125,"line":2619},[123,16308,16309],{"class":192},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[123,16311,16312,16315,16318,16320,16323,16325],{"class":125,"line":2625},[123,16313,16314],{"class":129},"    bool",[123,16316,16317],{"class":1972}," isEqual",[123,16319,134],{"class":133},[123,16321,16322],{"class":1972},"Cube",[123,16324,2858],{"class":5226},[123,16326,140],{"class":133},[123,16328,16329],{"class":125,"line":2630},[123,16330,2039],{"class":133},[123,16332,16333,16335,16338,16341,16343,16345,16348,16350,16353,16356,16358,16360,16363,16365,16367,16370,16372,16374],{"class":125,"line":7958},[123,16334,2506],{"class":129},[123,16336,16337],{"class":133}," (c.",[123,16339,16340],{"class":1972},"getLength",[123,16342,13060],{"class":133},[123,16344,2958],{"class":129},[123,16346,16347],{"class":133}," m_L ",[123,16349,1724],{"class":129},[123,16351,16352],{"class":133}," c.",[123,16354,16355],{"class":1972},"getWidth",[123,16357,13060],{"class":133},[123,16359,2958],{"class":129},[123,16361,16362],{"class":133}," m_W ",[123,16364,1724],{"class":129},[123,16366,16352],{"class":133},[123,16368,16369],{"class":1972},"getHeight",[123,16371,13060],{"class":133},[123,16373,2958],{"class":129},[123,16375,16376],{"class":133}," m_H)\n",[123,16378,16379],{"class":125,"line":7982},[123,16380,2519],{"class":133},[123,16382,16383,16385,16388],{"class":125,"line":7987},[123,16384,15742],{"class":129},[123,16386,16387],{"class":182}," true",[123,16389,1300],{"class":133},[123,16391,16392],{"class":125,"line":7993},[123,16393,2538],{"class":133},[123,16395,16396],{"class":125,"line":8020},[123,16397,2579],{"class":129},[123,16399,16400],{"class":125,"line":8025},[123,16401,2519],{"class":133},[123,16403,16404,16406,16409],{"class":125,"line":8031},[123,16405,15742],{"class":129},[123,16407,16408],{"class":182}," false",[123,16410,1300],{"class":133},[123,16412,16413],{"class":125,"line":8043},[123,16414,2538],{"class":133},[123,16416,16417],{"class":125,"line":8055},[123,16418,2196],{"class":133},[123,16420,16421],{"class":125,"line":8067},[123,16422,16423],{"class":192},"    \u002F\u002F私有属性\n",[123,16425,16426],{"class":125,"line":9726},[123,16427,15232],{"class":129},[123,16429,16430,16432],{"class":125,"line":9751},[123,16431,1994],{"class":129},[123,16433,16252],{"class":133},[123,16435,16436,16438],{"class":125,"line":9774},[123,16437,1994],{"class":129},[123,16439,16276],{"class":133},[123,16441,16442,16444],{"class":125,"line":9798},[123,16443,1994],{"class":129},[123,16445,16300],{"class":133},[123,16447,16448],{"class":125,"line":9803},[123,16449,2409],{"emptyLinePlaceholder":50},[123,16451,16452],{"class":125,"line":9808},[123,16453,4004],{"class":133},[123,16455,16456],{"class":125,"line":9813},[123,16457,16458],{"class":192},"\u002F\u002F全局函数判断两个立方体是否相等\n",[123,16460,16461,16463,16465,16467,16469,16472,16474,16476,16479],{"class":125,"line":9822},[123,16462,1364],{"class":129},[123,16464,16317],{"class":1972},[123,16466,134],{"class":133},[123,16468,16322],{"class":1972},[123,16470,16471],{"class":5226}," c1",[123,16473,512],{"class":133},[123,16475,16322],{"class":1972},[123,16477,16478],{"class":5226}," c2",[123,16480,140],{"class":133},[123,16482,16483],{"class":125,"line":9827},[123,16484,1555],{"class":133},[123,16486,16487,16489,16492,16494,16496,16498,16501,16503,16506,16508,16510,16512,16514,16516,16518,16520,16522,16524,16526,16528,16530,16532,16534,16536],{"class":125,"line":9833},[123,16488,4099],{"class":129},[123,16490,16491],{"class":133}," (c1.",[123,16493,16340],{"class":1972},[123,16495,13060],{"class":133},[123,16497,2958],{"class":129},[123,16499,16500],{"class":133}," c2.",[123,16502,16340],{"class":1972},[123,16504,16505],{"class":133},"()) ",[123,16507,1724],{"class":129},[123,16509,16491],{"class":133},[123,16511,16355],{"class":1972},[123,16513,13060],{"class":133},[123,16515,2958],{"class":129},[123,16517,16500],{"class":133},[123,16519,16355],{"class":1972},[123,16521,16505],{"class":133},[123,16523,1724],{"class":129},[123,16525,16491],{"class":133},[123,16527,16369],{"class":1972},[123,16529,13060],{"class":133},[123,16531,2958],{"class":129},[123,16533,16500],{"class":133},[123,16535,16369],{"class":1972},[123,16537,16538],{"class":133},"());\n",[123,16540,16541],{"class":125,"line":9854},[123,16542,1574],{"class":133},[123,16544,16545,16547,16549],{"class":125,"line":9860},[123,16546,137],{"class":129},[123,16548,1982],{"class":1972},[123,16550,1985],{"class":133},[123,16552,16553],{"class":125,"line":9874},[123,16554,1555],{"class":133},[123,16556,16557],{"class":125,"line":9880},[123,16558,16559],{"class":133},"    Cube c1;\n",[123,16561,16562],{"class":125,"line":9907},[123,16563,16564],{"class":192},"    \u002F\u002F输入立方体的长宽高\n",[123,16566,16567,16569,16571,16574,16576],{"class":125,"line":9916},[123,16568,1560],{"class":133},[123,16570,1178],{"class":129},[123,16572,16573],{"class":238},"\"请输入第一个立方体的长、宽、高：\"",[123,16575,1178],{"class":129},[123,16577,1201],{"class":133},[123,16579,16580,16582],{"class":125,"line":9922},[123,16581,1994],{"class":129},[123,16583,16584],{"class":133}," l,w,h,l1,w1,h1;\n",[123,16586,16587,16589,16591,16593,16595,16597,16599],{"class":125,"line":9930},[123,16588,2021],{"class":133},[123,16590,1439],{"class":129},[123,16592,652],{"class":133},[123,16594,1439],{"class":129},[123,16596,929],{"class":133},[123,16598,1439],{"class":129},[123,16600,16137],{"class":133},[123,16602,16603,16606,16609],{"class":125,"line":9935},[123,16604,16605],{"class":133},"    c1.",[123,16607,16608],{"class":1972},"setLwh",[123,16610,16611],{"class":133},"(l,w,h);\n",[123,16613,16615],{"class":125,"line":16614},66,[123,16616,16617],{"class":192},"    \u002F\u002F面积\n",[123,16619,16621,16623,16625,16628,16630,16632,16635,16637,16639],{"class":125,"line":16620},67,[123,16622,1560],{"class":133},[123,16624,1178],{"class":129},[123,16626,16627],{"class":238},"\"立方体的表面积为：\"",[123,16629,1178],{"class":129},[123,16631,14840],{"class":133},[123,16633,16634],{"class":1972},"mianji",[123,16636,2436],{"class":133},[123,16638,1178],{"class":129},[123,16640,1201],{"class":133},[123,16642,16644],{"class":125,"line":16643},68,[123,16645,16646],{"class":192},"    \u002F\u002F体积\n",[123,16648,16650,16652,16654,16657,16659,16661,16664,16666,16668],{"class":125,"line":16649},69,[123,16651,1560],{"class":133},[123,16653,1178],{"class":129},[123,16655,16656],{"class":238},"\"立方体的体积为：\"",[123,16658,1178],{"class":129},[123,16660,14840],{"class":133},[123,16662,16663],{"class":1972},"tiji",[123,16665,2436],{"class":133},[123,16667,1178],{"class":129},[123,16669,1201],{"class":133},[123,16671,16673,16675,16677,16680,16682],{"class":125,"line":16672},70,[123,16674,1560],{"class":133},[123,16676,1178],{"class":129},[123,16678,16679],{"class":238},"\"请输入第二个立方体的长、宽、高：\"",[123,16681,1178],{"class":129},[123,16683,1201],{"class":133},[123,16685,16687,16689,16691,16694,16696,16699,16701],{"class":125,"line":16686},71,[123,16688,2021],{"class":133},[123,16690,1439],{"class":129},[123,16692,16693],{"class":133},"l1",[123,16695,1439],{"class":129},[123,16697,16698],{"class":133},"w1",[123,16700,1439],{"class":129},[123,16702,16703],{"class":133},"h1;\n",[123,16705,16707],{"class":125,"line":16706},72,[123,16708,16709],{"class":133},"    Cube c2;\n",[123,16711,16713,16716,16718],{"class":125,"line":16712},73,[123,16714,16715],{"class":133},"    c2.",[123,16717,16608],{"class":1972},[123,16719,16720],{"class":133},"(l1,w1,h1);\n",[123,16722,16724,16726,16728,16731,16733,16736,16738,16740,16742],{"class":125,"line":16723},74,[123,16725,1560],{"class":133},[123,16727,1178],{"class":129},[123,16729,16730],{"class":238},"\"第二个立方体的表面积为：\"",[123,16732,1178],{"class":129},[123,16734,16735],{"class":133},"c2.",[123,16737,16634],{"class":1972},[123,16739,2436],{"class":133},[123,16741,1178],{"class":129},[123,16743,1201],{"class":133},[123,16745,16747,16749,16751,16754,16756,16758,16760,16762,16764],{"class":125,"line":16746},75,[123,16748,1560],{"class":133},[123,16750,1178],{"class":129},[123,16752,16753],{"class":238},"\"第二个立方体的体积为：\"",[123,16755,1178],{"class":129},[123,16757,16735],{"class":133},[123,16759,16663],{"class":1972},[123,16761,2436],{"class":133},[123,16763,1178],{"class":129},[123,16765,1201],{"class":133},[123,16767,16769],{"class":125,"line":16768},76,[123,16770,2409],{"emptyLinePlaceholder":50},[123,16772,16774],{"class":125,"line":16773},77,[123,16775,16776],{"class":192},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[123,16778,16780,16782,16784,16787,16789],{"class":125,"line":16779},78,[123,16781,1560],{"class":133},[123,16783,1178],{"class":129},[123,16785,16786],{"class":238},"\"内部函数判断结果：\"",[123,16788,1178],{"class":129},[123,16790,1201],{"class":133},[123,16792,16794,16796,16798,16801],{"class":125,"line":16793},79,[123,16795,3110],{"class":129},[123,16797,16491],{"class":133},[123,16799,16800],{"class":1972},"isEqual",[123,16802,16803],{"class":133},"(c2))\n",[123,16805,16807],{"class":125,"line":16806},80,[123,16808,2039],{"class":133},[123,16810,16812,16814,16816,16819,16821],{"class":125,"line":16811},81,[123,16813,3460],{"class":133},[123,16815,1178],{"class":129},[123,16817,16818],{"class":238},"\"两个立方体相等\"",[123,16820,1178],{"class":129},[123,16822,1201],{"class":133},[123,16824,16826],{"class":125,"line":16825},82,[123,16827,2196],{"class":133},[123,16829,16831],{"class":125,"line":16830},83,[123,16832,16833],{"class":129},"    else\n",[123,16835,16837],{"class":125,"line":16836},84,[123,16838,2039],{"class":133},[123,16840,16842,16844,16846,16849,16851],{"class":125,"line":16841},85,[123,16843,3460],{"class":133},[123,16845,1178],{"class":129},[123,16847,16848],{"class":238},"\"两个立方体不相等\"",[123,16850,1178],{"class":129},[123,16852,1201],{"class":133},[123,16854,16856],{"class":125,"line":16855},86,[123,16857,2196],{"class":133},[123,16859,16861],{"class":125,"line":16860},87,[123,16862,2409],{"emptyLinePlaceholder":50},[123,16864,16866,16868,16870,16873,16875],{"class":125,"line":16865},88,[123,16867,1560],{"class":133},[123,16869,1178],{"class":129},[123,16871,16872],{"class":238},"\"全局函数判断结果：\"",[123,16874,1178],{"class":129},[123,16876,1201],{"class":133},[123,16878,16880,16882,16884,16886],{"class":125,"line":16879},89,[123,16881,3110],{"class":129},[123,16883,1667],{"class":133},[123,16885,16800],{"class":1972},[123,16887,16888],{"class":133},"(c1, c2))\n",[123,16890,16892],{"class":125,"line":16891},90,[123,16893,2039],{"class":133},[123,16895,16897,16899,16901,16903,16905],{"class":125,"line":16896},91,[123,16898,3460],{"class":133},[123,16900,1178],{"class":129},[123,16902,16818],{"class":238},[123,16904,1178],{"class":129},[123,16906,1201],{"class":133},[123,16908,16910],{"class":125,"line":16909},92,[123,16911,2196],{"class":133},[123,16913,16915],{"class":125,"line":16914},93,[123,16916,16833],{"class":129},[123,16918,16920],{"class":125,"line":16919},94,[123,16921,2039],{"class":133},[123,16923,16925,16927,16929,16931,16933],{"class":125,"line":16924},95,[123,16926,3460],{"class":133},[123,16928,1178],{"class":129},[123,16930,16848],{"class":238},[123,16932,1178],{"class":129},[123,16934,1201],{"class":133},[123,16936,16938],{"class":125,"line":16937},96,[123,16939,2196],{"class":133},[123,16941,16943],{"class":125,"line":16942},97,[123,16944,1574],{"class":133},[77,16946,16947],{"start":45},[80,16948,16949],{},[283,16950,16951],{},"练习案例2：点和圆的关系",[1141,16953,16954],{},[80,16955,16956],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[114,16958,16960],{"className":116,"code":16959,"language":118,"meta":37,"style":37},"#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",[120,16961,16962,16968,16978,16985,16992,16996,17000,17005,17039,17044,17060,17074,17078,17082,17089,17096,17100,17106,17110,17114,17118,17140,17163,17168,17182,17197,17201,17205,17211,17216,17221,17225,17251,17255,17285,17313,17341,17358,17362,17375,17379,17383,17387,17400,17404,17408,17416,17420,17424,17428,17433,17437,17448,17455,17464,17474,17485,17492,17505,17516,17526,17537,17544,17558,17563,17573,17581],{"__ignoreMap":37},[123,16963,16964,16966],{"class":125,"line":126},[123,16965,1958],{"class":129},[123,16967,1961],{"class":238},[123,16969,16970,16972,16974,16976],{"class":125,"line":45},[123,16971,1966],{"class":129},[123,16973,1969],{"class":129},[123,16975,1973],{"class":1972},[123,16977,1300],{"class":133},[123,16979,16980,16982],{"class":125,"line":1189},[123,16981,1958],{"class":129},[123,16983,16984],{"class":238},"\u003Ccmath>\n",[123,16986,16987,16989],{"class":125,"line":1204},[123,16988,14704],{"class":129},[123,16990,16991],{"class":1972}," Point\n",[123,16993,16994],{"class":125,"line":1210},[123,16995,1555],{"class":133},[123,16997,16998],{"class":125,"line":1224},[123,16999,14726],{"class":129},[123,17001,17002],{"class":125,"line":1230},[123,17003,17004],{"class":192},"    \u002F\u002F赋值\n",[123,17006,17007,17009,17012,17014,17016,17019,17021,17023,17026,17029,17031,17034,17036],{"class":125,"line":1321},[123,17008,14919],{"class":129},[123,17010,17011],{"class":1972}," setPoint",[123,17013,134],{"class":133},[123,17015,14047],{"class":129},[123,17017,17018],{"class":5226}," x",[123,17020,12445],{"class":133},[123,17022,14047],{"class":129},[123,17024,17025],{"class":5226}," y",[123,17027,17028],{"class":133},") { m_x ",[123,17030,179],{"class":129},[123,17032,17033],{"class":133}," x; m_y ",[123,17035,179],{"class":129},[123,17037,17038],{"class":133}," y; }\n",[123,17040,17041],{"class":125,"line":1327},[123,17042,17043],{"class":192},"    \u002F\u002F获取坐标\n",[123,17045,17046,17048,17051,17054,17057],{"class":125,"line":1339},[123,17047,14748],{"class":129},[123,17049,17050],{"class":1972}," getX",[123,17052,17053],{"class":133},"() { ",[123,17055,17056],{"class":129},"return",[123,17058,17059],{"class":133}," m_x; }\n",[123,17061,17062,17064,17067,17069,17071],{"class":125,"line":1621},[123,17063,14748],{"class":129},[123,17065,17066],{"class":1972}," getY",[123,17068,17053],{"class":133},[123,17070,17056],{"class":129},[123,17072,17073],{"class":133}," m_y; }\n",[123,17075,17076],{"class":125,"line":1626},[123,17077,2409],{"emptyLinePlaceholder":50},[123,17079,17080],{"class":125,"line":1632},[123,17081,15232],{"class":129},[123,17083,17084,17086],{"class":125,"line":1637},[123,17085,14748],{"class":129},[123,17087,17088],{"class":133}," m_x;\n",[123,17090,17091,17093],{"class":125,"line":1651},[123,17092,14748],{"class":129},[123,17094,17095],{"class":133}," m_y;\n",[123,17097,17098],{"class":125,"line":1656},[123,17099,4004],{"class":133},[123,17101,17102,17104],{"class":125,"line":1662},[123,17103,14704],{"class":129},[123,17105,14707],{"class":1972},[123,17107,17108],{"class":125,"line":1683},[123,17109,1555],{"class":133},[123,17111,17112],{"class":125,"line":1688},[123,17113,14726],{"class":129},[123,17115,17116],{"class":125,"line":1702},[123,17117,17004],{"class":192},[123,17119,17120,17122,17125,17127,17129,17132,17135,17137],{"class":125,"line":1707},[123,17121,14919],{"class":129},[123,17123,17124],{"class":1972}," setRadius",[123,17126,134],{"class":133},[123,17128,14047],{"class":129},[123,17130,17131],{"class":5226}," r",[123,17133,17134],{"class":133},") { m_r ",[123,17136,179],{"class":129},[123,17138,17139],{"class":133}," r; }\n",[123,17141,17142,17144,17147,17149,17152,17155,17158,17160],{"class":125,"line":1736},[123,17143,14919],{"class":129},[123,17145,17146],{"class":1972}," setCenter",[123,17148,134],{"class":133},[123,17150,17151],{"class":1972},"Point",[123,17153,17154],{"class":5226}," center",[123,17156,17157],{"class":133},") { m_center ",[123,17159,179],{"class":129},[123,17161,17162],{"class":133}," center; }\n",[123,17164,17165],{"class":125,"line":1741},[123,17166,17167],{"class":192},"    \u002F\u002F获取属性\n",[123,17169,17170,17172,17175,17177,17179],{"class":125,"line":1758},[123,17171,14748],{"class":129},[123,17173,17174],{"class":1972}," getRadius",[123,17176,17053],{"class":133},[123,17178,17056],{"class":129},[123,17180,17181],{"class":133}," m_r; }\n",[123,17183,17184,17187,17190,17192,17194],{"class":125,"line":1763},[123,17185,17186],{"class":1972},"    Point",[123,17188,17189],{"class":1972}," getCenter",[123,17191,17053],{"class":133},[123,17193,17056],{"class":129},[123,17195,17196],{"class":133}," m_center; }\n",[123,17198,17199],{"class":125,"line":1768},[123,17200,2409],{"emptyLinePlaceholder":50},[123,17202,17203],{"class":125,"line":1773},[123,17204,15232],{"class":129},[123,17206,17207,17209],{"class":125,"line":1787},[123,17208,14748],{"class":129},[123,17210,14738],{"class":133},[123,17212,17213],{"class":125,"line":1792},[123,17214,17215],{"class":192},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[123,17217,17218],{"class":125,"line":2586},[123,17219,17220],{"class":133},"    Point m_center;\n",[123,17222,17223],{"class":125,"line":2600},[123,17224,4004],{"class":133},[123,17226,17227,17229,17232,17234,17237,17239,17241,17243,17245,17247,17249],{"class":125,"line":2608},[123,17228,5374],{"class":129},[123,17230,17231],{"class":1972}," isInCircle",[123,17233,134],{"class":133},[123,17235,17236],{"class":1972},"Circle",[123,17238,10594],{"class":129},[123,17240,422],{"class":5226},[123,17242,512],{"class":133},[123,17244,17151],{"class":1972},[123,17246,10594],{"class":129},[123,17248,14],{"class":5226},[123,17250,140],{"class":133},[123,17252,17253],{"class":125,"line":2613},[123,17254,1555],{"class":133},[123,17256,17257,17259,17262,17264,17266,17269,17272,17275,17277,17279,17281,17283],{"class":125,"line":2619},[123,17258,14748],{"class":129},[123,17260,17261],{"class":133}," dx ",[123,17263,179],{"class":129},[123,17265,16352],{"class":133},[123,17267,17268],{"class":1972},"getCenter",[123,17270,17271],{"class":133},"().",[123,17273,17274],{"class":1972},"getX",[123,17276,13060],{"class":133},[123,17278,666],{"class":129},[123,17280,15898],{"class":133},[123,17282,17274],{"class":1972},[123,17284,5646],{"class":133},[123,17286,17287,17289,17292,17294,17296,17298,17300,17303,17305,17307,17309,17311],{"class":125,"line":2625},[123,17288,14748],{"class":129},[123,17290,17291],{"class":133}," dy ",[123,17293,179],{"class":129},[123,17295,16352],{"class":133},[123,17297,17268],{"class":1972},[123,17299,17271],{"class":133},[123,17301,17302],{"class":1972},"getY",[123,17304,13060],{"class":133},[123,17306,666],{"class":129},[123,17308,15898],{"class":133},[123,17310,17302],{"class":1972},[123,17312,5646],{"class":133},[123,17314,17315,17317,17320,17322,17325,17328,17330,17332,17334,17336,17338],{"class":125,"line":2630},[123,17316,14748],{"class":129},[123,17318,17319],{"class":133}," distance ",[123,17321,179],{"class":129},[123,17323,17324],{"class":1972}," sqrt",[123,17326,17327],{"class":133},"(dx ",[123,17329,589],{"class":129},[123,17331,17261],{"class":133},[123,17333,615],{"class":129},[123,17335,17291],{"class":133},[123,17337,589],{"class":129},[123,17339,17340],{"class":133}," dy);\n",[123,17342,17343,17345,17348,17350,17352,17355],{"class":125,"line":7958},[123,17344,3110],{"class":129},[123,17346,17347],{"class":133}," (distance ",[123,17349,1044],{"class":129},[123,17351,16352],{"class":133},[123,17353,17354],{"class":1972},"getRadius",[123,17356,17357],{"class":133},"())\n",[123,17359,17360],{"class":125,"line":7982},[123,17361,2039],{"class":133},[123,17363,17364,17366,17368,17371,17373],{"class":125,"line":7987},[123,17365,9679],{"class":133},[123,17367,1178],{"class":129},[123,17369,17370],{"class":238}," \"点在圆内\"",[123,17372,1454],{"class":129},[123,17374,8850],{"class":133},[123,17376,17377],{"class":125,"line":7993},[123,17378,2196],{"class":133},[123,17380,17381],{"class":125,"line":8020},[123,17382,16833],{"class":129},[123,17384,17385],{"class":125,"line":8025},[123,17386,2039],{"class":133},[123,17388,17389,17391,17393,17396,17398],{"class":125,"line":8031},[123,17390,9679],{"class":133},[123,17392,1178],{"class":129},[123,17394,17395],{"class":238}," \"点在圆外\"",[123,17397,1454],{"class":129},[123,17399,8850],{"class":133},[123,17401,17402],{"class":125,"line":8043},[123,17403,2196],{"class":133},[123,17405,17406],{"class":125,"line":8055},[123,17407,1574],{"class":133},[123,17409,17410,17412,17414],{"class":125,"line":8067},[123,17411,137],{"class":129},[123,17413,1982],{"class":1972},[123,17415,1985],{"class":133},[123,17417,17418],{"class":125,"line":9726},[123,17419,1555],{"class":133},[123,17421,17422],{"class":125,"line":9751},[123,17423,15063],{"class":192},[123,17425,17426],{"class":125,"line":9774},[123,17427,14810],{"class":133},[123,17429,17430],{"class":125,"line":9798},[123,17431,17432],{"class":133},"    Point p1;\n",[123,17434,17435],{"class":125,"line":9803},[123,17436,17004],{"class":192},[123,17438,17439,17441,17443,17446],{"class":125,"line":9808},[123,17440,1560],{"class":133},[123,17442,1178],{"class":129},[123,17444,17445],{"class":238},"\"请输入圆的半径：\"",[123,17447,1300],{"class":133},[123,17449,17450,17452],{"class":125,"line":9813},[123,17451,14748],{"class":129},[123,17453,17454],{"class":133}," r;\n",[123,17456,17457,17459,17461],{"class":125,"line":9822},[123,17458,2021],{"class":133},[123,17460,1439],{"class":129},[123,17462,17463],{"class":133},"r;\n",[123,17465,17466,17468,17471],{"class":125,"line":9827},[123,17467,16605],{"class":133},[123,17469,17470],{"class":1972},"setRadius",[123,17472,17473],{"class":133},"(r);\n",[123,17475,17476,17478,17480,17483],{"class":125,"line":9833},[123,17477,1560],{"class":133},[123,17479,1178],{"class":129},[123,17481,17482],{"class":238},"\"请输入圆心坐标：\"",[123,17484,1300],{"class":133},[123,17486,17487,17489],{"class":125,"line":9854},[123,17488,14748],{"class":129},[123,17490,17491],{"class":133}," x, y;\n",[123,17493,17494,17496,17498,17500,17502],{"class":125,"line":9860},[123,17495,2021],{"class":133},[123,17497,1439],{"class":129},[123,17499,954],{"class":133},[123,17501,1439],{"class":129},[123,17503,17504],{"class":133},"y;\n",[123,17506,17507,17510,17513],{"class":125,"line":9874},[123,17508,17509],{"class":133},"    p1.",[123,17511,17512],{"class":1972},"setPoint",[123,17514,17515],{"class":133},"(x, y);\n",[123,17517,17518,17520,17523],{"class":125,"line":9880},[123,17519,16605],{"class":133},[123,17521,17522],{"class":1972},"setCenter",[123,17524,17525],{"class":133},"(p1);\n",[123,17527,17528,17530,17532,17535],{"class":125,"line":9907},[123,17529,1560],{"class":133},[123,17531,1178],{"class":129},[123,17533,17534],{"class":238},"\"请输入测试点坐标：\"",[123,17536,1300],{"class":133},[123,17538,17539,17541],{"class":125,"line":9916},[123,17540,14748],{"class":129},[123,17542,17543],{"class":133}," x1, y1;\n",[123,17545,17546,17548,17550,17553,17555],{"class":125,"line":9922},[123,17547,2021],{"class":133},[123,17549,1439],{"class":129},[123,17551,17552],{"class":133},"x1",[123,17554,1439],{"class":129},[123,17556,17557],{"class":133},"y1;\n",[123,17559,17560],{"class":125,"line":9930},[123,17561,17562],{"class":133},"    Point p2;\n",[123,17564,17565,17568,17570],{"class":125,"line":9935},[123,17566,17567],{"class":133},"    p2.",[123,17569,17512],{"class":1972},[123,17571,17572],{"class":133},"(x1, y1);\n",[123,17574,17575,17578],{"class":125,"line":16614},[123,17576,17577],{"class":1972},"    isInCircle",[123,17579,17580],{"class":133},"(c1, p2);\n",[123,17582,17583],{"class":125,"line":16620},[123,17584,1574],{"class":133},[14,17586,17587],{},"在类中可以让另一个类作为本来的成员",[14,17589,17590],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,17592,17593],{},"创建point.h",[114,17595,17597],{"className":116,"code":17596,"language":118,"meta":37,"style":37},"#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",[120,17598,17599,17610,17616,17626,17632,17636,17641,17645,17649,17669,17673,17681,17689,17693,17697,17703,17709],{"__ignoreMap":37},[123,17600,17601,17604,17607],{"class":125,"line":126},[123,17602,17603],{"class":129},"#pragma",[123,17605,17606],{"class":1972}," once",[123,17608,17609],{"class":192}," \u002F\u002F防止头文件重复包含\n",[123,17611,17612,17614],{"class":125,"line":45},[123,17613,1958],{"class":129},[123,17615,1961],{"class":238},[123,17617,17618,17620,17622,17624],{"class":125,"line":1189},[123,17619,1966],{"class":129},[123,17621,1969],{"class":129},[123,17623,1973],{"class":1972},[123,17625,1300],{"class":133},[123,17627,17628,17630],{"class":125,"line":1204},[123,17629,14704],{"class":129},[123,17631,16991],{"class":1972},[123,17633,17634],{"class":125,"line":1210},[123,17635,1555],{"class":133},[123,17637,17638],{"class":125,"line":1224},[123,17639,17640],{"class":192},"\u002F\u002F做好声明与变量定义就可以\n",[123,17642,17643],{"class":125,"line":1230},[123,17644,14726],{"class":129},[123,17646,17647],{"class":125,"line":1321},[123,17648,17004],{"class":192},[123,17650,17651,17653,17655,17657,17659,17661,17663,17665,17667],{"class":125,"line":1327},[123,17652,14919],{"class":129},[123,17654,17011],{"class":1972},[123,17656,134],{"class":133},[123,17658,14047],{"class":129},[123,17660,17018],{"class":5226},[123,17662,12445],{"class":133},[123,17664,14047],{"class":129},[123,17666,17025],{"class":5226},[123,17668,2728],{"class":133},[123,17670,17671],{"class":125,"line":1339},[123,17672,17043],{"class":192},[123,17674,17675,17677,17679],{"class":125,"line":1621},[123,17676,14748],{"class":129},[123,17678,17050],{"class":1972},[123,17680,5646],{"class":133},[123,17682,17683,17685,17687],{"class":125,"line":1626},[123,17684,14748],{"class":129},[123,17686,17066],{"class":1972},[123,17688,5646],{"class":133},[123,17690,17691],{"class":125,"line":1632},[123,17692,2409],{"emptyLinePlaceholder":50},[123,17694,17695],{"class":125,"line":1637},[123,17696,15232],{"class":129},[123,17698,17699,17701],{"class":125,"line":1651},[123,17700,14748],{"class":129},[123,17702,17088],{"class":133},[123,17704,17705,17707],{"class":125,"line":1656},[123,17706,14748],{"class":129},[123,17708,17095],{"class":133},[123,17710,17711],{"class":125,"line":1662},[123,17712,4004],{"class":133},[14,17714,17715],{},"创建point.cpp",[114,17717,17719],{"className":116,"code":17718,"language":118,"meta":37,"style":37},"#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",[120,17720,17721,17728,17733,17767,17771,17787],{"__ignoreMap":37},[123,17722,17723,17725],{"class":125,"line":126},[123,17724,1958],{"class":129},[123,17726,17727],{"class":238},"\u003Cpoint.h>\n",[123,17729,17730],{"class":125,"line":45},[123,17731,17732],{"class":192},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[123,17734,17735,17737,17740,17743,17745,17747,17749,17751,17753,17755,17757,17759,17761,17763,17765],{"class":125,"line":1189},[123,17736,14919],{"class":129},[123,17738,17739],{"class":1972}," Point",[123,17741,17742],{"class":133},"::",[123,17744,17512],{"class":1972},[123,17746,134],{"class":133},[123,17748,14047],{"class":129},[123,17750,17018],{"class":5226},[123,17752,12445],{"class":133},[123,17754,14047],{"class":129},[123,17756,17025],{"class":5226},[123,17758,17028],{"class":133},[123,17760,179],{"class":129},[123,17762,17033],{"class":133},[123,17764,179],{"class":129},[123,17766,17038],{"class":133},[123,17768,17769],{"class":125,"line":1204},[123,17770,17043],{"class":192},[123,17772,17773,17775,17777,17779,17781,17783,17785],{"class":125,"line":1210},[123,17774,14748],{"class":129},[123,17776,17739],{"class":1972},[123,17778,17742],{"class":133},[123,17780,17274],{"class":1972},[123,17782,17053],{"class":133},[123,17784,17056],{"class":129},[123,17786,17059],{"class":133},[123,17788,17789,17791,17793,17795,17797,17799,17801],{"class":125,"line":1224},[123,17790,14748],{"class":129},[123,17792,17739],{"class":1972},[123,17794,17742],{"class":133},[123,17796,17302],{"class":1972},[123,17798,17053],{"class":133},[123,17800,17056],{"class":129},[123,17802,17073],{"class":133},[14,17804,17805],{},"创建circle.h",[114,17807,17809],{"className":116,"code":17808,"language":118,"meta":37,"style":37},"#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",[120,17810,17811,17818,17824,17834,17840,17846,17850,17854,17858,17872,17886,17890,17898,17906,17910,17914,17920,17924,17928],{"__ignoreMap":37},[123,17812,17813,17815],{"class":125,"line":126},[123,17814,17603],{"class":129},[123,17816,17817],{"class":1972}," once\n",[123,17819,17820,17822],{"class":125,"line":45},[123,17821,1958],{"class":129},[123,17823,1961],{"class":238},[123,17825,17826,17828,17830,17832],{"class":125,"line":1189},[123,17827,1966],{"class":129},[123,17829,1969],{"class":129},[123,17831,1973],{"class":1972},[123,17833,1300],{"class":133},[123,17835,17836,17838],{"class":125,"line":1204},[123,17837,1958],{"class":129},[123,17839,17727],{"class":238},[123,17841,17842,17844],{"class":125,"line":1210},[123,17843,14704],{"class":129},[123,17845,14707],{"class":1972},[123,17847,17848],{"class":125,"line":1224},[123,17849,1555],{"class":133},[123,17851,17852],{"class":125,"line":1230},[123,17853,14726],{"class":129},[123,17855,17856],{"class":125,"line":1321},[123,17857,17004],{"class":192},[123,17859,17860,17862,17864,17866,17868,17870],{"class":125,"line":1327},[123,17861,14919],{"class":129},[123,17863,17124],{"class":1972},[123,17865,134],{"class":133},[123,17867,14047],{"class":129},[123,17869,17131],{"class":5226},[123,17871,2728],{"class":133},[123,17873,17874,17876,17878,17880,17882,17884],{"class":125,"line":1339},[123,17875,14919],{"class":129},[123,17877,17146],{"class":1972},[123,17879,134],{"class":133},[123,17881,17151],{"class":1972},[123,17883,17154],{"class":5226},[123,17885,2728],{"class":133},[123,17887,17888],{"class":125,"line":1621},[123,17889,17167],{"class":192},[123,17891,17892,17894,17896],{"class":125,"line":1626},[123,17893,14748],{"class":129},[123,17895,17174],{"class":1972},[123,17897,5646],{"class":133},[123,17899,17900,17902,17904],{"class":125,"line":1632},[123,17901,17186],{"class":1972},[123,17903,17189],{"class":1972},[123,17905,5646],{"class":133},[123,17907,17908],{"class":125,"line":1637},[123,17909,2409],{"emptyLinePlaceholder":50},[123,17911,17912],{"class":125,"line":1651},[123,17913,15232],{"class":129},[123,17915,17916,17918],{"class":125,"line":1656},[123,17917,14748],{"class":129},[123,17919,14738],{"class":133},[123,17921,17922],{"class":125,"line":1662},[123,17923,17215],{"class":192},[123,17925,17926],{"class":125,"line":1683},[123,17927,17220],{"class":133},[123,17929,17930],{"class":125,"line":1688},[123,17931,4004],{"class":133},[14,17933,17934],{},"创建circle.cpp",[114,17936,17938],{"className":116,"code":17937,"language":118,"meta":37,"style":37},"#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",[120,17939,17940,17947,17970,17992,17997,18013],{"__ignoreMap":37},[123,17941,17942,17944],{"class":125,"line":126},[123,17943,1958],{"class":129},[123,17945,17946],{"class":238},"\u003Ccircle.h>\n",[123,17948,17949,17951,17954,17956,17958,17960,17962,17964,17966,17968],{"class":125,"line":45},[123,17950,5374],{"class":129},[123,17952,17953],{"class":1972}," Circle",[123,17955,17742],{"class":133},[123,17957,17470],{"class":1972},[123,17959,134],{"class":133},[123,17961,14047],{"class":129},[123,17963,17131],{"class":5226},[123,17965,17134],{"class":133},[123,17967,179],{"class":129},[123,17969,17139],{"class":133},[123,17971,17972,17974,17976,17978,17980,17982,17984,17986,17988,17990],{"class":125,"line":1189},[123,17973,5374],{"class":129},[123,17975,17953],{"class":1972},[123,17977,17742],{"class":133},[123,17979,17522],{"class":1972},[123,17981,134],{"class":133},[123,17983,17151],{"class":1972},[123,17985,17154],{"class":5226},[123,17987,17157],{"class":133},[123,17989,179],{"class":129},[123,17991,17162],{"class":133},[123,17993,17994],{"class":125,"line":1204},[123,17995,17996],{"class":192},"\u002F\u002F获取属性\n",[123,17998,17999,18001,18003,18005,18007,18009,18011],{"class":125,"line":1210},[123,18000,14047],{"class":129},[123,18002,17953],{"class":1972},[123,18004,17742],{"class":133},[123,18006,17354],{"class":1972},[123,18008,17053],{"class":133},[123,18010,17056],{"class":129},[123,18012,17181],{"class":133},[123,18014,18015,18017,18019,18021,18023,18025,18027],{"class":125,"line":1224},[123,18016,17151],{"class":1972},[123,18018,17953],{"class":1972},[123,18020,17742],{"class":133},[123,18022,17268],{"class":1972},[123,18024,17053],{"class":133},[123,18026,17056],{"class":129},[123,18028,17196],{"class":133},[14,18030,18031],{},"使用封装的类",[114,18033,18035],{"className":116,"code":18034,"language":118,"meta":37,"style":37},"#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",[120,18036,18037,18043,18053,18059,18065,18089,18093,18119,18145,18169,18183,18187,18199,18203,18207,18211,18223,18227,18231,18239,18243,18247,18251,18255,18259,18269,18275,18283,18291,18301,18307,18319,18327,18335,18345,18351,18363,18367,18375,18381],{"__ignoreMap":37},[123,18038,18039,18041],{"class":125,"line":126},[123,18040,1958],{"class":129},[123,18042,1961],{"class":238},[123,18044,18045,18047,18049,18051],{"class":125,"line":45},[123,18046,1966],{"class":129},[123,18048,1969],{"class":129},[123,18050,1973],{"class":1972},[123,18052,1300],{"class":133},[123,18054,18055,18057],{"class":125,"line":1189},[123,18056,1958],{"class":129},[123,18058,17946],{"class":238},[123,18060,18061,18063],{"class":125,"line":1204},[123,18062,1958],{"class":129},[123,18064,17727],{"class":238},[123,18066,18067,18069,18071,18073,18075,18077,18079,18081,18083,18085,18087],{"class":125,"line":1210},[123,18068,5374],{"class":129},[123,18070,17231],{"class":1972},[123,18072,134],{"class":133},[123,18074,17236],{"class":1972},[123,18076,10594],{"class":129},[123,18078,422],{"class":5226},[123,18080,512],{"class":133},[123,18082,17151],{"class":1972},[123,18084,10594],{"class":129},[123,18086,14],{"class":5226},[123,18088,140],{"class":133},[123,18090,18091],{"class":125,"line":1224},[123,18092,1555],{"class":133},[123,18094,18095,18097,18099,18101,18103,18105,18107,18109,18111,18113,18115,18117],{"class":125,"line":1230},[123,18096,14748],{"class":129},[123,18098,17261],{"class":133},[123,18100,179],{"class":129},[123,18102,16352],{"class":133},[123,18104,17268],{"class":1972},[123,18106,17271],{"class":133},[123,18108,17274],{"class":1972},[123,18110,13060],{"class":133},[123,18112,666],{"class":129},[123,18114,15898],{"class":133},[123,18116,17274],{"class":1972},[123,18118,5646],{"class":133},[123,18120,18121,18123,18125,18127,18129,18131,18133,18135,18137,18139,18141,18143],{"class":125,"line":1321},[123,18122,14748],{"class":129},[123,18124,17291],{"class":133},[123,18126,179],{"class":129},[123,18128,16352],{"class":133},[123,18130,17268],{"class":1972},[123,18132,17271],{"class":133},[123,18134,17302],{"class":1972},[123,18136,13060],{"class":133},[123,18138,666],{"class":129},[123,18140,15898],{"class":133},[123,18142,17302],{"class":1972},[123,18144,5646],{"class":133},[123,18146,18147,18149,18151,18153,18155,18157,18159,18161,18163,18165,18167],{"class":125,"line":1327},[123,18148,14748],{"class":129},[123,18150,17319],{"class":133},[123,18152,179],{"class":129},[123,18154,17324],{"class":1972},[123,18156,17327],{"class":133},[123,18158,589],{"class":129},[123,18160,17261],{"class":133},[123,18162,615],{"class":129},[123,18164,17291],{"class":133},[123,18166,589],{"class":129},[123,18168,17340],{"class":133},[123,18170,18171,18173,18175,18177,18179,18181],{"class":125,"line":1339},[123,18172,3110],{"class":129},[123,18174,17347],{"class":133},[123,18176,1044],{"class":129},[123,18178,16352],{"class":133},[123,18180,17354],{"class":1972},[123,18182,17357],{"class":133},[123,18184,18185],{"class":125,"line":1621},[123,18186,2039],{"class":133},[123,18188,18189,18191,18193,18195,18197],{"class":125,"line":1626},[123,18190,9679],{"class":133},[123,18192,1178],{"class":129},[123,18194,17370],{"class":238},[123,18196,1454],{"class":129},[123,18198,8850],{"class":133},[123,18200,18201],{"class":125,"line":1632},[123,18202,2196],{"class":133},[123,18204,18205],{"class":125,"line":1637},[123,18206,16833],{"class":129},[123,18208,18209],{"class":125,"line":1651},[123,18210,2039],{"class":133},[123,18212,18213,18215,18217,18219,18221],{"class":125,"line":1656},[123,18214,9679],{"class":133},[123,18216,1178],{"class":129},[123,18218,17395],{"class":238},[123,18220,1454],{"class":129},[123,18222,8850],{"class":133},[123,18224,18225],{"class":125,"line":1662},[123,18226,2196],{"class":133},[123,18228,18229],{"class":125,"line":1683},[123,18230,1574],{"class":133},[123,18232,18233,18235,18237],{"class":125,"line":1688},[123,18234,137],{"class":129},[123,18236,1982],{"class":1972},[123,18238,1985],{"class":133},[123,18240,18241],{"class":125,"line":1702},[123,18242,1555],{"class":133},[123,18244,18245],{"class":125,"line":1707},[123,18246,15063],{"class":192},[123,18248,18249],{"class":125,"line":1736},[123,18250,14810],{"class":133},[123,18252,18253],{"class":125,"line":1741},[123,18254,17432],{"class":133},[123,18256,18257],{"class":125,"line":1758},[123,18258,17004],{"class":192},[123,18260,18261,18263,18265,18267],{"class":125,"line":1763},[123,18262,1560],{"class":133},[123,18264,1178],{"class":129},[123,18266,17445],{"class":238},[123,18268,1300],{"class":133},[123,18270,18271,18273],{"class":125,"line":1768},[123,18272,14748],{"class":129},[123,18274,17454],{"class":133},[123,18276,18277,18279,18281],{"class":125,"line":1773},[123,18278,2021],{"class":133},[123,18280,1439],{"class":129},[123,18282,17463],{"class":133},[123,18284,18285,18287,18289],{"class":125,"line":1787},[123,18286,16605],{"class":133},[123,18288,17470],{"class":1972},[123,18290,17473],{"class":133},[123,18292,18293,18295,18297,18299],{"class":125,"line":1792},[123,18294,1560],{"class":133},[123,18296,1178],{"class":129},[123,18298,17482],{"class":238},[123,18300,1300],{"class":133},[123,18302,18303,18305],{"class":125,"line":2586},[123,18304,14748],{"class":129},[123,18306,17491],{"class":133},[123,18308,18309,18311,18313,18315,18317],{"class":125,"line":2600},[123,18310,2021],{"class":133},[123,18312,1439],{"class":129},[123,18314,954],{"class":133},[123,18316,1439],{"class":129},[123,18318,17504],{"class":133},[123,18320,18321,18323,18325],{"class":125,"line":2608},[123,18322,17509],{"class":133},[123,18324,17512],{"class":1972},[123,18326,17515],{"class":133},[123,18328,18329,18331,18333],{"class":125,"line":2613},[123,18330,16605],{"class":133},[123,18332,17522],{"class":1972},[123,18334,17525],{"class":133},[123,18336,18337,18339,18341,18343],{"class":125,"line":2619},[123,18338,1560],{"class":133},[123,18340,1178],{"class":129},[123,18342,17534],{"class":238},[123,18344,1300],{"class":133},[123,18346,18347,18349],{"class":125,"line":2625},[123,18348,14748],{"class":129},[123,18350,17543],{"class":133},[123,18352,18353,18355,18357,18359,18361],{"class":125,"line":2630},[123,18354,2021],{"class":133},[123,18356,1439],{"class":129},[123,18358,17552],{"class":133},[123,18360,1439],{"class":129},[123,18362,17557],{"class":133},[123,18364,18365],{"class":125,"line":7958},[123,18366,17562],{"class":133},[123,18368,18369,18371,18373],{"class":125,"line":7982},[123,18370,17567],{"class":133},[123,18372,17512],{"class":1972},[123,18374,17572],{"class":133},[123,18376,18377,18379],{"class":125,"line":7987},[123,18378,17577],{"class":1972},[123,18380,17580],{"class":133},[123,18382,18383],{"class":125,"line":7993},[123,18384,1574],{"class":133},[65,18386,18388],{"id":18387},"_82对象的初始化清理","8.2对象的初始化清理",[1141,18390,18391,18394],{},[80,18392,18393],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[80,18395,18396],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[94,18398,18400],{"id":18399},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18402,18403,18404,18407],{},"对象的",[283,18405,18406],{},"初始化和清理","也是两个非常重要的安全问题",[14,18409,18410],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18412,18413],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18415,18416,18417,18420,18421,18424],{},"c++利用了",[283,18418,18419],{},"构造函数","和",[283,18422,18423],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18426,18427,18428],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[283,18429,18430],{},"我们不提供构造和析构，编译器会提供",[14,18432,18433],{},[283,18434,18435],{},"编译器提供的构造函数和析构函数是空实现。",[1141,18437,18438,18441],{},[80,18439,18440],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[80,18442,18443,18444,18447],{},"析构函数：主要作用在于对象",[283,18445,18446],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18449,18450,18453],{},[283,18451,18452],{},"构造函数语法：",[120,18454,18455],{},"类名(){}",[77,18457,18458,18461,18464,18467,18470],{},[80,18459,18460],{},"构造函数，没有返回值也不写void",[80,18462,18463],{},"函数名称与类名相同",[80,18465,18466],{},"构造函数可以有参数，因此可以发生重载",[80,18468,18469],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[80,18471,18472,18473,563],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[120,18474,18475],{},"Person(){}",[14,18477,18478,13805,18481],{},[283,18479,18480],{},"析构函数语法：",[120,18482,18483],{},"~类名(){}",[77,18485,18486,18489,18492,18498],{},[80,18487,18488],{},"析构函数，没有返回值也不写void",[80,18490,18491],{},"函数名称与类名相同,在名称前加上符号  ~",[80,18493,18494,18495],{},"析构函数不可以有参数，因此",[283,18496,18497],{},"不可以发生重载",[80,18499,18500],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[114,18502,18504],{"className":116,"code":18503,"language":118,"meta":37,"style":37},"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",[120,18505,18506,18512,18516,18520,18525,18532,18536,18549,18553,18558,18565,18569,18582,18586,18590,18594,18598,18606,18610,18618,18622,18626,18634,18638,18643,18647,18654,18658,18671,18675,18683],{"__ignoreMap":37},[123,18507,18508,18510],{"class":125,"line":126},[123,18509,14704],{"class":129},[123,18511,15181],{"class":1972},[123,18513,18514],{"class":125,"line":45},[123,18515,1555],{"class":133},[123,18517,18518],{"class":125,"line":1189},[123,18519,14726],{"class":129},[123,18521,18522],{"class":125,"line":1204},[123,18523,18524],{"class":192},"    \u002F\u002F构造函数\n",[123,18526,18527,18530],{"class":125,"line":1210},[123,18528,18529],{"class":1972},"    Person",[123,18531,1985],{"class":133},[123,18533,18534],{"class":125,"line":1224},[123,18535,2039],{"class":133},[123,18537,18538,18540,18542,18545,18547],{"class":125,"line":1230},[123,18539,9679],{"class":133},[123,18541,1178],{"class":129},[123,18543,18544],{"class":238}," \"Person的构造函数调用\"",[123,18546,1454],{"class":129},[123,18548,8850],{"class":133},[123,18550,18551],{"class":125,"line":1321},[123,18552,2196],{"class":133},[123,18554,18555],{"class":125,"line":1327},[123,18556,18557],{"class":192},"    \u002F\u002F析构函数\n",[123,18559,18560,18563],{"class":125,"line":1339},[123,18561,18562],{"class":1972},"    ~Person",[123,18564,1985],{"class":133},[123,18566,18567],{"class":125,"line":1621},[123,18568,2039],{"class":133},[123,18570,18571,18573,18575,18578,18580],{"class":125,"line":1626},[123,18572,9679],{"class":133},[123,18574,1178],{"class":129},[123,18576,18577],{"class":238}," \"Person的析构函数调用\"",[123,18579,1454],{"class":129},[123,18581,8850],{"class":133},[123,18583,18584],{"class":125,"line":1632},[123,18585,2196],{"class":133},[123,18587,18588],{"class":125,"line":1637},[123,18589,2409],{"emptyLinePlaceholder":50},[123,18591,18592],{"class":125,"line":1651},[123,18593,4004],{"class":133},[123,18595,18596],{"class":125,"line":1656},[123,18597,2409],{"emptyLinePlaceholder":50},[123,18599,18600,18602,18604],{"class":125,"line":1662},[123,18601,5374],{"class":129},[123,18603,5598],{"class":1972},[123,18605,1985],{"class":133},[123,18607,18608],{"class":125,"line":1683},[123,18609,1555],{"class":133},[123,18611,18612,18615],{"class":125,"line":1688},[123,18613,18614],{"class":133},"    Person p;",[123,18616,18617],{"class":192},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[123,18619,18620],{"class":125,"line":1702},[123,18621,1574],{"class":133},[123,18623,18624],{"class":125,"line":1707},[123,18625,2409],{"emptyLinePlaceholder":50},[123,18627,18628,18630,18632],{"class":125,"line":1736},[123,18629,137],{"class":129},[123,18631,1982],{"class":1972},[123,18633,10863],{"class":133},[123,18635,18636],{"class":125,"line":1741},[123,18637,13220],{"class":133},[123,18639,18640],{"class":125,"line":1758},[123,18641,18642],{"class":192},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[123,18644,18645],{"class":125,"line":1763},[123,18646,2409],{"emptyLinePlaceholder":50},[123,18648,18649,18651],{"class":125,"line":1768},[123,18650,18614],{"class":133},[123,18652,18653],{"class":192},"\u002F\u002F只有构造函数\n",[123,18655,18656],{"class":125,"line":1773},[123,18657,2409],{"emptyLinePlaceholder":50},[123,18659,18660,18662,18664,18666,18668],{"class":125,"line":1787},[123,18661,2312],{"class":1972},[123,18663,134],{"class":133},[123,18665,2317],{"class":238},[123,18667,5976],{"class":133},[123,18669,18670],{"class":192},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[123,18672,18673],{"class":125,"line":1792},[123,18674,2409],{"emptyLinePlaceholder":50},[123,18676,18677,18679,18681],{"class":125,"line":2586},[123,18678,4099],{"class":129},[123,18680,4102],{"class":182},[123,18682,1300],{"class":133},[123,18684,18685],{"class":125,"line":2600},[123,18686,1574],{"class":133},[14,18688,18689],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[94,18691,18693],{"id":18692},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,18695,18696],{},"两种分类方式：",[14,18698,18699],{},"​\t按参数分为： 有参构造和无参构造",[14,18701,18702],{},"​\t按类型分为： 普通构造和拷贝构造",[14,18704,18705],{},"三种调用方式：",[14,18707,18708],{},"​\t括号法",[14,18710,18711],{},"​\t显示法",[14,18713,18714],{},"​\t隐式转换法",[114,18716,18718],{"className":116,"code":18717,"language":118,"meta":37,"style":37},"#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",[120,18719,18720,18726,18736,18741,18746,18751,18756,18760,18768,18772,18776,18780,18786,18790,18803,18807,18819,18823,18832,18845,18849,18853,18859,18863,18876,18880,18885,18901,18905,18910,18919,18932,18936,18942,18946,18951,18959,18963,18968,18972,18980,18984,18989,18994,18999,19004,19009,19013,19018,19023,19028,19033,19037,19042,19047,19063,19075,19080,19084,19089,19094,19099,19103,19108,19122,19135,19139,19147,19151,19157,19163,19171],{"__ignoreMap":37},[123,18721,18722,18724],{"class":125,"line":126},[123,18723,1958],{"class":129},[123,18725,1961],{"class":238},[123,18727,18728,18730,18732,18734],{"class":125,"line":45},[123,18729,1966],{"class":129},[123,18731,1969],{"class":129},[123,18733,1973],{"class":1972},[123,18735,1300],{"class":133},[123,18737,18738],{"class":125,"line":1189},[123,18739,18740],{"class":192},"\u002F\u002F1.构造函数的分类及调用\n",[123,18742,18743],{"class":125,"line":1204},[123,18744,18745],{"class":192},"\u002F\u002F分类\n",[123,18747,18748],{"class":125,"line":1210},[123,18749,18750],{"class":192},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[123,18752,18753],{"class":125,"line":1224},[123,18754,18755],{"class":192},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[123,18757,18758],{"class":125,"line":1230},[123,18759,2409],{"emptyLinePlaceholder":50},[123,18761,18762,18764,18766],{"class":125,"line":1321},[123,18763,14704],{"class":129},[123,18765,15579],{"class":1972},[123,18767,2683],{"class":133},[123,18769,18770],{"class":125,"line":1327},[123,18771,1555],{"class":133},[123,18773,18774],{"class":125,"line":1339},[123,18775,14726],{"class":129},[123,18777,18778],{"class":125,"line":1621},[123,18779,18524],{"class":192},[123,18781,18782,18784],{"class":125,"line":1626},[123,18783,18529],{"class":1972},[123,18785,1985],{"class":133},[123,18787,18788],{"class":125,"line":1632},[123,18789,2039],{"class":133},[123,18791,18792,18794,18796,18799,18801],{"class":125,"line":1637},[123,18793,3460],{"class":133},[123,18795,1178],{"class":129},[123,18797,18798],{"class":238},"\"Person构造函数无参构造\"",[123,18800,1178],{"class":129},[123,18802,1201],{"class":133},[123,18804,18805],{"class":125,"line":1651},[123,18806,2196],{"class":133},[123,18808,18809,18811,18813,18815,18817],{"class":125,"line":1656},[123,18810,18529],{"class":1972},[123,18812,134],{"class":133},[123,18814,137],{"class":129},[123,18816,1408],{"class":5226},[123,18818,140],{"class":133},[123,18820,18821],{"class":125,"line":1662},[123,18822,2039],{"class":133},[123,18824,18825,18828,18830],{"class":125,"line":1683},[123,18826,18827],{"class":133},"        age",[123,18829,179],{"class":129},[123,18831,6207],{"class":133},[123,18833,18834,18836,18838,18841,18843],{"class":125,"line":1688},[123,18835,3460],{"class":133},[123,18837,1178],{"class":129},[123,18839,18840],{"class":238},"\"Person构造函数有参构造\"",[123,18842,1178],{"class":129},[123,18844,1201],{"class":133},[123,18846,18847],{"class":125,"line":1702},[123,18848,2196],{"class":133},[123,18850,18851],{"class":125,"line":1707},[123,18852,18557],{"class":192},[123,18854,18855,18857],{"class":125,"line":1736},[123,18856,18562],{"class":1972},[123,18858,1985],{"class":133},[123,18860,18861],{"class":125,"line":1741},[123,18862,2039],{"class":133},[123,18864,18865,18867,18869,18872,18874],{"class":125,"line":1758},[123,18866,3460],{"class":133},[123,18868,1178],{"class":129},[123,18870,18871],{"class":238},"\"Person析构函数被调用\"",[123,18873,1178],{"class":129},[123,18875,1201],{"class":133},[123,18877,18878],{"class":125,"line":1763},[123,18879,2196],{"class":133},[123,18881,18882],{"class":125,"line":1768},[123,18883,18884],{"class":192},"    \u002F\u002F拷贝构造函数\n",[123,18886,18887,18889,18891,18893,18895,18897,18899],{"class":125,"line":1773},[123,18888,18529],{"class":1972},[123,18890,134],{"class":133},[123,18892,6802],{"class":129},[123,18894,15579],{"class":1972},[123,18896,10594],{"class":129},[123,18898,14],{"class":5226},[123,18900,140],{"class":133},[123,18902,18903],{"class":125,"line":1787},[123,18904,2039],{"class":133},[123,18906,18907],{"class":125,"line":1792},[123,18908,18909],{"class":192},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[123,18911,18912,18914,18916],{"class":125,"line":2586},[123,18913,18827],{"class":133},[123,18915,179],{"class":129},[123,18917,18918],{"class":133},"p.age;\n",[123,18920,18921,18923,18925,18928,18930],{"class":125,"line":2600},[123,18922,3460],{"class":133},[123,18924,1178],{"class":129},[123,18926,18927],{"class":238},"\"Person拷贝构造函数被调用\"",[123,18929,1178],{"class":129},[123,18931,1201],{"class":133},[123,18933,18934],{"class":125,"line":2608},[123,18935,2196],{"class":133},[123,18937,18938,18940],{"class":125,"line":2613},[123,18939,1994],{"class":129},[123,18941,7807],{"class":133},[123,18943,18944],{"class":125,"line":2619},[123,18945,4004],{"class":133},[123,18947,18948],{"class":125,"line":2625},[123,18949,18950],{"class":192},"\u002F\u002F调用\n",[123,18952,18953,18955,18957],{"class":125,"line":2630},[123,18954,5374],{"class":129},[123,18956,5598],{"class":1972},[123,18958,1985],{"class":133},[123,18960,18961],{"class":125,"line":7958},[123,18962,1555],{"class":133},[123,18964,18965],{"class":125,"line":7982},[123,18966,18967],{"class":192},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[123,18969,18970],{"class":125,"line":7987},[123,18971,1574],{"class":133},[123,18973,18974,18976,18978],{"class":125,"line":7993},[123,18975,5374],{"class":129},[123,18977,5667],{"class":1972},[123,18979,1985],{"class":133},[123,18981,18982],{"class":125,"line":8020},[123,18983,1555],{"class":133},[123,18985,18986],{"class":125,"line":8025},[123,18987,18988],{"class":192},"    \u002F\u002F1.括号法\n",[123,18990,18991],{"class":125,"line":8031},[123,18992,18993],{"class":192},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[123,18995,18996],{"class":125,"line":8043},[123,18997,18998],{"class":192},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[123,19000,19001],{"class":125,"line":8055},[123,19002,19003],{"class":192},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[123,19005,19006],{"class":125,"line":8067},[123,19007,19008],{"class":192},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[123,19010,19011],{"class":125,"line":9726},[123,19012,2409],{"emptyLinePlaceholder":50},[123,19014,19015],{"class":125,"line":9751},[123,19016,19017],{"class":192},"    \u002F\u002F注意事项\n",[123,19019,19020],{"class":125,"line":9774},[123,19021,19022],{"class":192},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[123,19024,19025],{"class":125,"line":9798},[123,19026,19027],{"class":192},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[123,19029,19030],{"class":125,"line":9803},[123,19031,19032],{"class":192},"    \u002F\u002F Person p4();\n",[123,19034,19035],{"class":125,"line":9808},[123,19036,2409],{"emptyLinePlaceholder":50},[123,19038,19039],{"class":125,"line":9813},[123,19040,19041],{"class":192},"    \u002F\u002F2.显示法\n",[123,19043,19044],{"class":125,"line":9822},[123,19045,19046],{"class":133},"    Person p1;\n",[123,19048,19049,19052,19054,19057,19059,19061],{"class":125,"line":9827},[123,19050,19051],{"class":133},"    Person p2",[123,19053,179],{"class":129},[123,19055,19056],{"class":1972},"Person",[123,19058,134],{"class":133},[123,19060,580],{"class":182},[123,19062,2728],{"class":133},[123,19064,19065,19068,19070,19072],{"class":125,"line":9833},[123,19066,19067],{"class":133},"    Person p3",[123,19069,179],{"class":129},[123,19071,19056],{"class":1972},[123,19073,19074],{"class":133},"(p2);\n",[123,19076,19077],{"class":125,"line":9854},[123,19078,19079],{"class":192},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[123,19081,19082],{"class":125,"line":9860},[123,19083,2409],{"emptyLinePlaceholder":50},[123,19085,19086],{"class":125,"line":9874},[123,19087,19088],{"class":192},"    \u002F\u002F 注意事项2\n",[123,19090,19091],{"class":125,"line":9880},[123,19092,19093],{"class":192},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[123,19095,19096],{"class":125,"line":9907},[123,19097,19098],{"class":192},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[123,19100,19101],{"class":125,"line":9916},[123,19102,2409],{"emptyLinePlaceholder":50},[123,19104,19105],{"class":125,"line":9922},[123,19106,19107],{"class":192},"    \u002F\u002F3.隐士转换法\n",[123,19109,19110,19113,19115,19117,19119],{"class":125,"line":9930},[123,19111,19112],{"class":133},"    Person p4",[123,19114,179],{"class":129},[123,19116,580],{"class":182},[123,19118,189],{"class":133},[123,19120,19121],{"class":192},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[123,19123,19124,19127,19129,19132],{"class":125,"line":9935},[123,19125,19126],{"class":133},"    Person p5",[123,19128,179],{"class":129},[123,19130,19131],{"class":133},"p4;",[123,19133,19134],{"class":192}," \u002F\u002F 这里会调用拷贝构造函数\n",[123,19136,19137],{"class":125,"line":16614},[123,19138,1574],{"class":133},[123,19140,19141,19143,19145],{"class":125,"line":16620},[123,19142,137],{"class":129},[123,19144,1982],{"class":1972},[123,19146,1985],{"class":133},[123,19148,19149],{"class":125,"line":16643},[123,19150,1555],{"class":133},[123,19152,19153,19155],{"class":125,"line":16649},[123,19154,5643],{"class":1972},[123,19156,5646],{"class":133},[123,19158,19159,19161],{"class":125,"line":16672},[123,19160,5712],{"class":1972},[123,19162,5646],{"class":133},[123,19164,19165,19167,19169],{"class":125,"line":16686},[123,19166,4099],{"class":129},[123,19168,4102],{"class":182},[123,19170,1300],{"class":133},[123,19172,19173],{"class":125,"line":16706},[123,19174,1574],{"class":133},[14,19176,19177,19180],{},[283,19178,19179],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[94,19182,19184],{"id":19183},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19186,19187],{},"C++中拷贝构造函数调用时机通常有三种情况",[1141,19189,19190,19193,19196],{},[80,19191,19192],{},"使用一个已经创建完毕的对象来初始化一个新对象",[80,19194,19195],{},"值传递的方式给函数参数传值",[80,19197,19198],{},"以值方式返回局部对象",[114,19200,19202],{"className":116,"code":19201,"language":118,"meta":37,"style":37},"#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",[120,19203,19204,19210,19220,19224,19229,19233,19238,19243,19248,19254,19258,19262,19268,19272,19285,19289,19294,19306,19310,19318,19331,19335,19339,19355,19359,19368,19381,19385,19391,19395,19407,19411,19417,19421,19425,19433,19437,19450,19458,19476,19480,19485,19490,19505,19509,19522,19526,19534,19538,19542,19550,19554,19559,19568,19572,19576,19601,19611,19615,19623,19627,19638,19663,19667,19671,19675,19683,19687,19692,19697,19704,19709,19714,19719,19724,19728,19733,19737,19742,19746,19751,19756,19760,19764,19769,19774,19782],{"__ignoreMap":37},[123,19205,19206,19208],{"class":125,"line":126},[123,19207,1958],{"class":129},[123,19209,1961],{"class":238},[123,19211,19212,19214,19216,19218],{"class":125,"line":45},[123,19213,1966],{"class":129},[123,19215,1969],{"class":129},[123,19217,1973],{"class":1972},[123,19219,1300],{"class":133},[123,19221,19222],{"class":125,"line":1189},[123,19223,2409],{"emptyLinePlaceholder":50},[123,19225,19226],{"class":125,"line":1204},[123,19227,19228],{"class":192},"\u002F\u002F拷贝构造函数调用时机\n",[123,19230,19231],{"class":125,"line":1210},[123,19232,2409],{"emptyLinePlaceholder":50},[123,19234,19235],{"class":125,"line":1224},[123,19236,19237],{"class":192},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[123,19239,19240],{"class":125,"line":1230},[123,19241,19242],{"class":192},"\u002F\u002F2.值传递的方式给函数参数传值\n",[123,19244,19245],{"class":125,"line":1321},[123,19246,19247],{"class":192},"\u002F\u002F3.以值方式返回局部对象\n",[123,19249,19250,19252],{"class":125,"line":1327},[123,19251,14704],{"class":129},[123,19253,15181],{"class":1972},[123,19255,19256],{"class":125,"line":1339},[123,19257,1555],{"class":133},[123,19259,19260],{"class":125,"line":1621},[123,19261,14726],{"class":129},[123,19263,19264,19266],{"class":125,"line":1626},[123,19265,18529],{"class":1972},[123,19267,1985],{"class":133},[123,19269,19270],{"class":125,"line":1632},[123,19271,2039],{"class":133},[123,19273,19274,19276,19278,19281,19283],{"class":125,"line":1637},[123,19275,9679],{"class":133},[123,19277,1178],{"class":129},[123,19279,19280],{"class":238}," \"Person的默认构造函数调用\"",[123,19282,1454],{"class":129},[123,19284,8850],{"class":133},[123,19286,19287],{"class":125,"line":1651},[123,19288,2196],{"class":133},[123,19290,19291],{"class":125,"line":1656},[123,19292,19293],{"class":192},"    \u002F\u002F有参构造\n",[123,19295,19296,19298,19300,19302,19304],{"class":125,"line":1662},[123,19297,18529],{"class":1972},[123,19299,134],{"class":133},[123,19301,137],{"class":129},[123,19303,15699],{"class":5226},[123,19305,140],{"class":133},[123,19307,19308],{"class":125,"line":1683},[123,19309,2039],{"class":133},[123,19311,19312,19314,19316],{"class":125,"line":1688},[123,19313,15753],{"class":133},[123,19315,179],{"class":129},[123,19317,7807],{"class":133},[123,19319,19320,19322,19324,19327,19329],{"class":125,"line":1702},[123,19321,9679],{"class":133},[123,19323,1178],{"class":129},[123,19325,19326],{"class":238}," \"Person的有参构造函数调用\"",[123,19328,1454],{"class":129},[123,19330,8850],{"class":133},[123,19332,19333],{"class":125,"line":1707},[123,19334,2196],{"class":133},[123,19336,19337],{"class":125,"line":1736},[123,19338,18884],{"class":192},[123,19340,19341,19343,19345,19347,19349,19351,19353],{"class":125,"line":1741},[123,19342,18529],{"class":1972},[123,19344,134],{"class":133},[123,19346,6802],{"class":129},[123,19348,15579],{"class":1972},[123,19350,10594],{"class":129},[123,19352,14],{"class":5226},[123,19354,140],{"class":133},[123,19356,19357],{"class":125,"line":1758},[123,19358,2039],{"class":133},[123,19360,19361,19363,19365],{"class":125,"line":1763},[123,19362,15753],{"class":133},[123,19364,179],{"class":129},[123,19366,19367],{"class":133}," p.m_Age;\n",[123,19369,19370,19372,19374,19377,19379],{"class":125,"line":1768},[123,19371,9679],{"class":133},[123,19373,1178],{"class":129},[123,19375,19376],{"class":238}," \"Person的拷贝构造函数调用\"",[123,19378,1454],{"class":129},[123,19380,8850],{"class":133},[123,19382,19383],{"class":125,"line":1773},[123,19384,2196],{"class":133},[123,19386,19387,19389],{"class":125,"line":1787},[123,19388,18562],{"class":1972},[123,19390,1985],{"class":133},[123,19392,19393],{"class":125,"line":1792},[123,19394,2039],{"class":133},[123,19396,19397,19399,19401,19403,19405],{"class":125,"line":2586},[123,19398,9679],{"class":133},[123,19400,1178],{"class":129},[123,19402,18577],{"class":238},[123,19404,1454],{"class":129},[123,19406,8850],{"class":133},[123,19408,19409],{"class":125,"line":2600},[123,19410,2196],{"class":133},[123,19412,19413,19415],{"class":125,"line":2608},[123,19414,1994],{"class":129},[123,19416,15676],{"class":133},[123,19418,19419],{"class":125,"line":2613},[123,19420,4004],{"class":133},[123,19422,19423],{"class":125,"line":2619},[123,19424,19237],{"class":192},[123,19426,19427,19429,19431],{"class":125,"line":2625},[123,19428,5374],{"class":129},[123,19430,5598],{"class":1972},[123,19432,1985],{"class":133},[123,19434,19435],{"class":125,"line":2630},[123,19436,1555],{"class":133},[123,19438,19439,19442,19444,19446,19448],{"class":125,"line":7958},[123,19440,19441],{"class":133},"    Person ",[123,19443,7140],{"class":1972},[123,19445,134],{"class":133},[123,19447,834],{"class":182},[123,19449,2728],{"class":133},[123,19451,19452,19454,19456],{"class":125,"line":7982},[123,19453,19441],{"class":133},[123,19455,7043],{"class":1972},[123,19457,17525],{"class":133},[123,19459,19460,19462,19464,19467,19469,19472,19474],{"class":125,"line":7987},[123,19461,1560],{"class":133},[123,19463,1178],{"class":129},[123,19465,19466],{"class":238},"\"P2的年龄为：\"",[123,19468,1178],{"class":129},[123,19470,19471],{"class":133},"p2.m_Age",[123,19473,1178],{"class":129},[123,19475,1201],{"class":133},[123,19477,19478],{"class":125,"line":7993},[123,19479,1574],{"class":133},[123,19481,19482],{"class":125,"line":8020},[123,19483,19484],{"class":192},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[123,19486,19487],{"class":125,"line":8025},[123,19488,19489],{"class":192},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[123,19491,19492,19494,19497,19499,19501,19503],{"class":125,"line":8031},[123,19493,5374],{"class":129},[123,19495,19496],{"class":1972}," doWork",[123,19498,134],{"class":133},[123,19500,19056],{"class":1972},[123,19502,6835],{"class":5226},[123,19504,140],{"class":133},[123,19506,19507],{"class":125,"line":8043},[123,19508,1555],{"class":133},[123,19510,19511,19513,19515,19518,19520],{"class":125,"line":8055},[123,19512,6539],{"class":133},[123,19514,1178],{"class":129},[123,19516,19517],{"class":238}," \"doWork函数调用\"",[123,19519,1454],{"class":129},[123,19521,8850],{"class":133},[123,19523,19524],{"class":125,"line":8067},[123,19525,1574],{"class":133},[123,19527,19528,19530,19532],{"class":125,"line":9726},[123,19529,5374],{"class":129},[123,19531,5667],{"class":1972},[123,19533,1985],{"class":133},[123,19535,19536],{"class":125,"line":9751},[123,19537,1555],{"class":133},[123,19539,19540],{"class":125,"line":9774},[123,19541,15323],{"class":133},[123,19543,19544,19547],{"class":125,"line":9798},[123,19545,19546],{"class":1972},"    doWork",[123,19548,19549],{"class":133},"(p);\n",[123,19551,19552],{"class":125,"line":9803},[123,19553,1574],{"class":133},[123,19555,19556],{"class":125,"line":9808},[123,19557,19558],{"class":192},"\u002F\u002F 3.以值方式返回局部对象\n",[123,19560,19561,19563,19566],{"class":125,"line":9813},[123,19562,19056],{"class":1972},[123,19564,19565],{"class":1972}," doWork2",[123,19567,1985],{"class":133},[123,19569,19570],{"class":125,"line":9822},[123,19571,1555],{"class":133},[123,19573,19574],{"class":125,"line":9827},[123,19575,19046],{"class":133},[123,19577,19578,19580,19582,19584,19586,19588,19590,19592,19594,19596,19598],{"class":125,"line":9833},[123,19579,1560],{"class":133},[123,19581,1178],{"class":129},[123,19583,134],{"class":133},[123,19585,137],{"class":129},[123,19587,6528],{"class":129},[123,19589,563],{"class":133},[123,19591,487],{"class":129},[123,19593,7140],{"class":133},[123,19595,1178],{"class":129},[123,19597,1248],{"class":133},[123,19599,19600],{"class":192},"\u002F\u002F打印p1的地址\n",[123,19602,19603,19605,19608],{"class":125,"line":9854},[123,19604,4099],{"class":129},[123,19606,19607],{"class":133}," p1;",[123,19609,19610],{"class":192},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[123,19612,19613],{"class":125,"line":9860},[123,19614,1574],{"class":133},[123,19616,19617,19619,19621],{"class":125,"line":9874},[123,19618,5374],{"class":129},[123,19620,5739],{"class":1972},[123,19622,1985],{"class":133},[123,19624,19625],{"class":125,"line":9880},[123,19626,1555],{"class":133},[123,19628,19629,19632,19634,19636],{"class":125,"line":9907},[123,19630,19631],{"class":133},"    Person p ",[123,19633,179],{"class":129},[123,19635,19565],{"class":1972},[123,19637,5646],{"class":133},[123,19639,19640,19642,19644,19646,19648,19650,19652,19654,19656,19658,19660],{"class":125,"line":9916},[123,19641,1560],{"class":133},[123,19643,1178],{"class":129},[123,19645,134],{"class":133},[123,19647,137],{"class":129},[123,19649,6528],{"class":129},[123,19651,563],{"class":133},[123,19653,487],{"class":129},[123,19655,14],{"class":133},[123,19657,1178],{"class":129},[123,19659,1248],{"class":133},[123,19661,19662],{"class":192},"\u002F\u002F打印p的地址\n",[123,19664,19665],{"class":125,"line":9922},[123,19666,1574],{"class":133},[123,19668,19669],{"class":125,"line":9930},[123,19670,2409],{"emptyLinePlaceholder":50},[123,19672,19673],{"class":125,"line":9935},[123,19674,2409],{"emptyLinePlaceholder":50},[123,19676,19677,19679,19681],{"class":125,"line":16614},[123,19678,137],{"class":129},[123,19680,1982],{"class":1972},[123,19682,1985],{"class":133},[123,19684,19685],{"class":125,"line":16620},[123,19686,1555],{"class":133},[123,19688,19689],{"class":125,"line":16643},[123,19690,19691],{"class":192},"    \u002F\u002F test01();\n",[123,19693,19694],{"class":125,"line":16649},[123,19695,19696],{"class":192},"    \u002F\u002F test02();\n",[123,19698,19699,19702],{"class":125,"line":16672},[123,19700,19701],{"class":1972},"    test03",[123,19703,5646],{"class":133},[123,19705,19706],{"class":125,"line":16686},[123,19707,19708],{"class":192},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[123,19710,19711],{"class":125,"line":16706},[123,19712,19713],{"class":192},"\u002F\u002F 输出结果如下：\n",[123,19715,19716],{"class":125,"line":16712},[123,19717,19718],{"class":192},"\u002F\u002F Person的默认构造函数调用\n",[123,19720,19721],{"class":125,"line":16723},[123,19722,19723],{"class":192},"\u002F\u002F 0x7fffffffceec\n",[123,19725,19726],{"class":125,"line":16746},[123,19727,19723],{"class":192},[123,19729,19730],{"class":125,"line":16768},[123,19731,19732],{"class":192},"\u002F\u002F Person的析构函数调用\n",[123,19734,19735],{"class":125,"line":16773},[123,19736,2409],{"emptyLinePlaceholder":50},[123,19738,19739],{"class":125,"line":16779},[123,19740,19741],{"class":192},"\u002F\u002F 之前的输出结果如下：\n",[123,19743,19744],{"class":125,"line":16793},[123,19745,19718],{"class":192},[123,19747,19748],{"class":125,"line":16806},[123,19749,19750],{"class":192},"\u002F\u002F 地址\n",[123,19752,19753],{"class":125,"line":16811},[123,19754,19755],{"class":192},"\u002F\u002F Person的拷贝构造函数调用\n",[123,19757,19758],{"class":125,"line":16825},[123,19759,19732],{"class":192},[123,19761,19762],{"class":125,"line":16830},[123,19763,19750],{"class":192},[123,19765,19766],{"class":125,"line":16836},[123,19767,19768],{"class":192},"\u002F\u002F (这两次输出的地址也是不同的) \n",[123,19770,19771],{"class":125,"line":16841},[123,19772,19773],{"class":192},"\u002F\u002F Person的析构函数调用     \n",[123,19775,19776,19778,19780],{"class":125,"line":16855},[123,19777,4099],{"class":129},[123,19779,4102],{"class":182},[123,19781,1300],{"class":133},[123,19783,19784],{"class":125,"line":16860},[123,19785,1574],{"class":133},[14,19787,19788],{},"简化版理解",[114,19790,19792],{"className":116,"code":19791,"language":118,"meta":37,"style":37},"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",[120,19793,19794,19802,19806,19812,19825,19836,19840,19852,19865,19873,19877,19893,19906,19915,19919,19924,19930,19943,19947,19951,19958,19962,19966,19971,19979,19983,19999,20012,20025,20029,20034,20042,20046,20050,20055,20060,20076,20084,20091,20097,20101,20105,20110,20118,20122,20126,20149,20156,20160,20164,20172,20176,20186,20208,20212,20216,20220,20228,20232,20237,20242,20248,20252,20262,20266,20274],{"__ignoreMap":37},[123,19795,19796,19798,19800],{"class":125,"line":126},[123,19797,14704],{"class":129},[123,19799,15579],{"class":1972},[123,19801,15582],{"class":133},[123,19803,19804],{"class":125,"line":45},[123,19805,14726],{"class":129},[123,19807,19808,19810],{"class":125,"line":1189},[123,19809,18529],{"class":1972},[123,19811,10863],{"class":133},[123,19813,19814,19816,19818,19821,19823],{"class":125,"line":1204},[123,19815,9679],{"class":133},[123,19817,1178],{"class":129},[123,19819,19820],{"class":238}," \"无参构造函数!\"",[123,19822,1454],{"class":129},[123,19824,8850],{"class":133},[123,19826,19827,19830,19832,19834],{"class":125,"line":1210},[123,19828,19829],{"class":133},"        mAge ",[123,19831,179],{"class":129},[123,19833,4102],{"class":182},[123,19835,1300],{"class":133},[123,19837,19838],{"class":125,"line":1224},[123,19839,2196],{"class":133},[123,19841,19842,19844,19846,19848,19850],{"class":125,"line":1230},[123,19843,18529],{"class":1972},[123,19845,134],{"class":133},[123,19847,137],{"class":129},[123,19849,15699],{"class":5226},[123,19851,12452],{"class":133},[123,19853,19854,19856,19858,19861,19863],{"class":125,"line":1321},[123,19855,9679],{"class":133},[123,19857,1178],{"class":129},[123,19859,19860],{"class":238}," \"有参构造函数!\"",[123,19862,1454],{"class":129},[123,19864,8850],{"class":133},[123,19866,19867,19869,19871],{"class":125,"line":1327},[123,19868,19829],{"class":133},[123,19870,179],{"class":129},[123,19872,7807],{"class":133},[123,19874,19875],{"class":125,"line":1339},[123,19876,2196],{"class":133},[123,19878,19879,19881,19883,19885,19887,19889,19891],{"class":125,"line":1621},[123,19880,18529],{"class":1972},[123,19882,134],{"class":133},[123,19884,6802],{"class":129},[123,19886,15579],{"class":1972},[123,19888,487],{"class":129},[123,19890,6835],{"class":5226},[123,19892,12452],{"class":133},[123,19894,19895,19897,19899,19902,19904],{"class":125,"line":1626},[123,19896,9679],{"class":133},[123,19898,1178],{"class":129},[123,19900,19901],{"class":238}," \"拷贝构造函数!\"",[123,19903,1454],{"class":129},[123,19905,8850],{"class":133},[123,19907,19908,19910,19912],{"class":125,"line":1632},[123,19909,19829],{"class":133},[123,19911,179],{"class":129},[123,19913,19914],{"class":133}," p.mAge;\n",[123,19916,19917],{"class":125,"line":1637},[123,19918,2196],{"class":133},[123,19920,19921],{"class":125,"line":1651},[123,19922,19923],{"class":192},"    \u002F\u002F析构函数在释放内存之前调用\n",[123,19925,19926,19928],{"class":125,"line":1656},[123,19927,18562],{"class":1972},[123,19929,10863],{"class":133},[123,19931,19932,19934,19936,19939,19941],{"class":125,"line":1662},[123,19933,9679],{"class":133},[123,19935,1178],{"class":129},[123,19937,19938],{"class":238}," \"析构函数!\"",[123,19940,1454],{"class":129},[123,19942,8850],{"class":133},[123,19944,19945],{"class":125,"line":1683},[123,19946,2196],{"class":133},[123,19948,19949],{"class":125,"line":1688},[123,19950,14726],{"class":129},[123,19952,19953,19955],{"class":125,"line":1702},[123,19954,1994],{"class":129},[123,19956,19957],{"class":133}," mAge;\n",[123,19959,19960],{"class":125,"line":1707},[123,19961,4004],{"class":133},[123,19963,19964],{"class":125,"line":1736},[123,19965,2409],{"emptyLinePlaceholder":50},[123,19967,19968],{"class":125,"line":1741},[123,19969,19970],{"class":192},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[123,19972,19973,19975,19977],{"class":125,"line":1758},[123,19974,5374],{"class":129},[123,19976,5598],{"class":1972},[123,19978,10863],{"class":133},[123,19980,19981],{"class":125,"line":1763},[123,19982,2409],{"emptyLinePlaceholder":50},[123,19984,19985,19987,19990,19992,19994,19996],{"class":125,"line":1768},[123,19986,19441],{"class":133},[123,19988,19989],{"class":1972},"man",[123,19991,134],{"class":133},[123,19993,445],{"class":182},[123,19995,5976],{"class":133},[123,19997,19998],{"class":192}," \u002F\u002Fp对象已经创建完毕\n",[123,20000,20001,20003,20006,20009],{"class":125,"line":1773},[123,20002,19441],{"class":133},[123,20004,20005],{"class":1972},"newman",[123,20007,20008],{"class":133},"(man);",[123,20010,20011],{"class":192}," \u002F\u002F调用拷贝构造函数\n",[123,20013,20014,20017,20019,20022],{"class":125,"line":1787},[123,20015,20016],{"class":133},"    Person newman2 ",[123,20018,179],{"class":129},[123,20020,20021],{"class":133}," man;",[123,20023,20024],{"class":192}," \u002F\u002F拷贝构造\n",[123,20026,20027],{"class":125,"line":1792},[123,20028,2409],{"emptyLinePlaceholder":50},[123,20030,20031],{"class":125,"line":2586},[123,20032,20033],{"class":192},"    \u002F\u002FPerson newman3;\n",[123,20035,20036,20039],{"class":125,"line":2600},[123,20037,20038],{"class":192},"    \u002F\u002Fnewman3 = man;",[123,20040,20041],{"class":192}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[123,20043,20044],{"class":125,"line":2608},[123,20045,1574],{"class":133},[123,20047,20048],{"class":125,"line":2613},[123,20049,2409],{"emptyLinePlaceholder":50},[123,20051,20052],{"class":125,"line":2619},[123,20053,20054],{"class":192},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[123,20056,20057],{"class":125,"line":2625},[123,20058,20059],{"class":192},"\u002F\u002F相当于Person p1 = p;\n",[123,20061,20062,20064,20066,20068,20070,20073],{"class":125,"line":2630},[123,20063,5374],{"class":129},[123,20065,19496],{"class":1972},[123,20067,134],{"class":133},[123,20069,19056],{"class":1972},[123,20071,20072],{"class":5226}," p1",[123,20074,20075],{"class":133},") {}\n",[123,20077,20078,20080,20082],{"class":125,"line":7958},[123,20079,5374],{"class":129},[123,20081,5667],{"class":1972},[123,20083,10863],{"class":133},[123,20085,20086,20088],{"class":125,"line":7982},[123,20087,18614],{"class":133},[123,20089,20090],{"class":192}," \u002F\u002F无参构造函数\n",[123,20092,20093,20095],{"class":125,"line":7987},[123,20094,19546],{"class":1972},[123,20096,19549],{"class":133},[123,20098,20099],{"class":125,"line":7993},[123,20100,1574],{"class":133},[123,20102,20103],{"class":125,"line":8020},[123,20104,2409],{"emptyLinePlaceholder":50},[123,20106,20107],{"class":125,"line":8025},[123,20108,20109],{"class":192},"\u002F\u002F3. 以值方式返回局部对象\n",[123,20111,20112,20114,20116],{"class":125,"line":8031},[123,20113,19056],{"class":1972},[123,20115,19565],{"class":1972},[123,20117,1985],{"class":133},[123,20119,20120],{"class":125,"line":8043},[123,20121,1555],{"class":133},[123,20123,20124],{"class":125,"line":8055},[123,20125,19046],{"class":133},[123,20127,20128,20130,20132,20134,20136,20138,20140,20142,20145,20147],{"class":125,"line":8067},[123,20129,6539],{"class":133},[123,20131,1178],{"class":129},[123,20133,1667],{"class":133},[123,20135,137],{"class":129},[123,20137,6528],{"class":129},[123,20139,563],{"class":133},[123,20141,487],{"class":129},[123,20143,20144],{"class":133},"p1 ",[123,20146,1178],{"class":129},[123,20148,8850],{"class":133},[123,20150,20151,20153],{"class":125,"line":9726},[123,20152,4099],{"class":129},[123,20154,20155],{"class":133}," p1;\n",[123,20157,20158],{"class":125,"line":9751},[123,20159,1574],{"class":133},[123,20161,20162],{"class":125,"line":9774},[123,20163,2409],{"emptyLinePlaceholder":50},[123,20165,20166,20168,20170],{"class":125,"line":9798},[123,20167,5374],{"class":129},[123,20169,5739],{"class":1972},[123,20171,1985],{"class":133},[123,20173,20174],{"class":125,"line":9803},[123,20175,1555],{"class":133},[123,20177,20178,20180,20182,20184],{"class":125,"line":9808},[123,20179,19631],{"class":133},[123,20181,179],{"class":129},[123,20183,19565],{"class":1972},[123,20185,5646],{"class":133},[123,20187,20188,20190,20192,20194,20196,20198,20200,20202,20204,20206],{"class":125,"line":9813},[123,20189,6539],{"class":133},[123,20191,1178],{"class":129},[123,20193,1667],{"class":133},[123,20195,137],{"class":129},[123,20197,6528],{"class":129},[123,20199,563],{"class":133},[123,20201,487],{"class":129},[123,20203,11458],{"class":133},[123,20205,1178],{"class":129},[123,20207,8850],{"class":133},[123,20209,20210],{"class":125,"line":9822},[123,20211,1574],{"class":133},[123,20213,20214],{"class":125,"line":9827},[123,20215,2409],{"emptyLinePlaceholder":50},[123,20217,20218],{"class":125,"line":9833},[123,20219,2409],{"emptyLinePlaceholder":50},[123,20221,20222,20224,20226],{"class":125,"line":9854},[123,20223,137],{"class":129},[123,20225,1982],{"class":1972},[123,20227,10863],{"class":133},[123,20229,20230],{"class":125,"line":9860},[123,20231,2409],{"emptyLinePlaceholder":50},[123,20233,20234],{"class":125,"line":9874},[123,20235,20236],{"class":192},"    \u002F\u002Ftest01();\n",[123,20238,20239],{"class":125,"line":9880},[123,20240,20241],{"class":192},"    \u002F\u002Ftest02();\n",[123,20243,20244,20246],{"class":125,"line":9907},[123,20245,19701],{"class":1972},[123,20247,5646],{"class":133},[123,20249,20250],{"class":125,"line":9916},[123,20251,2409],{"emptyLinePlaceholder":50},[123,20253,20254,20256,20258,20260],{"class":125,"line":9922},[123,20255,2312],{"class":1972},[123,20257,134],{"class":133},[123,20259,2317],{"class":238},[123,20261,2728],{"class":133},[123,20263,20264],{"class":125,"line":9930},[123,20265,2409],{"emptyLinePlaceholder":50},[123,20267,20268,20270,20272],{"class":125,"line":9935},[123,20269,4099],{"class":129},[123,20271,4102],{"class":182},[123,20273,1300],{"class":133},[123,20275,20276],{"class":125,"line":16614},[123,20277,1574],{"class":133},[94,20279,20281],{"id":20280},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20283,20284],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20286,20287],{},"1．默认构造函数(无参，函数体为空)",[14,20289,20290],{},"2．默认析构函数(无参，函数体为空)",[14,20292,20293],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20295,20296],{},"构造函数调用规则如下：",[1141,20298,20299,20302],{},[80,20300,20301],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[80,20303,20304],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[114,20306,20308],{"className":116,"code":20307,"language":118,"meta":37,"style":37},"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",[120,20309,20310,20318,20322,20327,20333,20345,20349,20354,20366,20375,20387,20391,20395,20411,20420,20432,20436,20440,20446,20458,20462,20466,20472,20476,20480,20488,20492,20504,20509,20517,20521,20539,20543,20547,20555,20559,20564,20572,20587,20600,20604,20609,20616,20632,20645,20649,20653,20661,20665,20671,20675,20685,20689,20697],{"__ignoreMap":37},[123,20311,20312,20314,20316],{"class":125,"line":126},[123,20313,14704],{"class":129},[123,20315,15579],{"class":1972},[123,20317,15582],{"class":133},[123,20319,20320],{"class":125,"line":45},[123,20321,14726],{"class":129},[123,20323,20324],{"class":125,"line":1189},[123,20325,20326],{"class":192},"    \u002F\u002F无参（默认）构造函数\n",[123,20328,20329,20331],{"class":125,"line":1204},[123,20330,18529],{"class":1972},[123,20332,10863],{"class":133},[123,20334,20335,20337,20339,20341,20343],{"class":125,"line":1210},[123,20336,9679],{"class":133},[123,20338,1178],{"class":129},[123,20340,19820],{"class":238},[123,20342,1454],{"class":129},[123,20344,8850],{"class":133},[123,20346,20347],{"class":125,"line":1224},[123,20348,2196],{"class":133},[123,20350,20351],{"class":125,"line":1230},[123,20352,20353],{"class":192},"    \u002F\u002F有参构造函数\n",[123,20355,20356,20358,20360,20362,20364],{"class":125,"line":1321},[123,20357,18529],{"class":1972},[123,20359,134],{"class":133},[123,20361,137],{"class":129},[123,20363,1408],{"class":5226},[123,20365,12452],{"class":133},[123,20367,20368,20371,20373],{"class":125,"line":1327},[123,20369,20370],{"class":133},"        age ",[123,20372,179],{"class":129},[123,20374,1442],{"class":133},[123,20376,20377,20379,20381,20383,20385],{"class":125,"line":1339},[123,20378,9679],{"class":133},[123,20380,1178],{"class":129},[123,20382,19860],{"class":238},[123,20384,1454],{"class":129},[123,20386,8850],{"class":133},[123,20388,20389],{"class":125,"line":1621},[123,20390,2196],{"class":133},[123,20392,20393],{"class":125,"line":1626},[123,20394,18884],{"class":192},[123,20396,20397,20399,20401,20403,20405,20407,20409],{"class":125,"line":1632},[123,20398,18529],{"class":1972},[123,20400,134],{"class":133},[123,20402,6802],{"class":129},[123,20404,15579],{"class":1972},[123,20406,487],{"class":129},[123,20408,6835],{"class":5226},[123,20410,12452],{"class":133},[123,20412,20413,20415,20417],{"class":125,"line":1637},[123,20414,20370],{"class":133},[123,20416,179],{"class":129},[123,20418,20419],{"class":133}," p.age;\n",[123,20421,20422,20424,20426,20428,20430],{"class":125,"line":1651},[123,20423,9679],{"class":133},[123,20425,1178],{"class":129},[123,20427,19901],{"class":238},[123,20429,1454],{"class":129},[123,20431,8850],{"class":133},[123,20433,20434],{"class":125,"line":1656},[123,20435,2196],{"class":133},[123,20437,20438],{"class":125,"line":1662},[123,20439,18557],{"class":192},[123,20441,20442,20444],{"class":125,"line":1683},[123,20443,18562],{"class":1972},[123,20445,10863],{"class":133},[123,20447,20448,20450,20452,20454,20456],{"class":125,"line":1688},[123,20449,9679],{"class":133},[123,20451,1178],{"class":129},[123,20453,19938],{"class":238},[123,20455,1454],{"class":129},[123,20457,8850],{"class":133},[123,20459,20460],{"class":125,"line":1702},[123,20461,2196],{"class":133},[123,20463,20464],{"class":125,"line":1707},[123,20465,14726],{"class":129},[123,20467,20468,20470],{"class":125,"line":1736},[123,20469,1994],{"class":129},[123,20471,7807],{"class":133},[123,20473,20474],{"class":125,"line":1741},[123,20475,4004],{"class":133},[123,20477,20478],{"class":125,"line":1758},[123,20479,2409],{"emptyLinePlaceholder":50},[123,20481,20482,20484,20486],{"class":125,"line":1763},[123,20483,5374],{"class":129},[123,20485,5598],{"class":1972},[123,20487,1985],{"class":133},[123,20489,20490],{"class":125,"line":1768},[123,20491,1555],{"class":133},[123,20493,20494,20496,20498,20500,20502],{"class":125,"line":1773},[123,20495,19441],{"class":133},[123,20497,7140],{"class":1972},[123,20499,134],{"class":133},[123,20501,784],{"class":182},[123,20503,2728],{"class":133},[123,20505,20506],{"class":125,"line":1787},[123,20507,20508],{"class":192},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[123,20510,20511,20513,20515],{"class":125,"line":1792},[123,20512,19441],{"class":133},[123,20514,7043],{"class":1972},[123,20516,17525],{"class":133},[123,20518,20519],{"class":125,"line":2586},[123,20520,2409],{"emptyLinePlaceholder":50},[123,20522,20523,20525,20527,20530,20532,20535,20537],{"class":125,"line":2600},[123,20524,6539],{"class":133},[123,20526,1178],{"class":129},[123,20528,20529],{"class":238}," \"p2的年龄为： \"",[123,20531,1454],{"class":129},[123,20533,20534],{"class":133}," p2.age ",[123,20536,1178],{"class":129},[123,20538,8850],{"class":133},[123,20540,20541],{"class":125,"line":2608},[123,20542,1574],{"class":133},[123,20544,20545],{"class":125,"line":2613},[123,20546,2409],{"emptyLinePlaceholder":50},[123,20548,20549,20551,20553],{"class":125,"line":2619},[123,20550,5374],{"class":129},[123,20552,5667],{"class":1972},[123,20554,1985],{"class":133},[123,20556,20557],{"class":125,"line":2625},[123,20558,1555],{"class":133},[123,20560,20561],{"class":125,"line":2630},[123,20562,20563],{"class":192},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[123,20565,20566,20569],{"class":125,"line":7958},[123,20567,20568],{"class":133},"    Person p1;",[123,20570,20571],{"class":192}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[123,20573,20574,20576,20578,20580,20582,20584],{"class":125,"line":7982},[123,20575,19441],{"class":133},[123,20577,7043],{"class":1972},[123,20579,134],{"class":133},[123,20581,580],{"class":182},[123,20583,5976],{"class":133},[123,20585,20586],{"class":192}," \u002F\u002F用户提供的有参\n",[123,20588,20589,20591,20594,20597],{"class":125,"line":7987},[123,20590,19441],{"class":133},[123,20592,20593],{"class":1972},"p3",[123,20595,20596],{"class":133},"(p2);",[123,20598,20599],{"class":192}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[123,20601,20602],{"class":125,"line":7993},[123,20603,2409],{"emptyLinePlaceholder":50},[123,20605,20606],{"class":125,"line":8020},[123,20607,20608],{"class":192},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[123,20610,20611,20614],{"class":125,"line":8025},[123,20612,20613],{"class":133},"    Person p4;",[123,20615,20571],{"class":192},[123,20617,20618,20620,20623,20625,20627,20629],{"class":125,"line":8031},[123,20619,19441],{"class":133},[123,20621,20622],{"class":1972},"p5",[123,20624,134],{"class":133},[123,20626,580],{"class":182},[123,20628,5976],{"class":133},[123,20630,20631],{"class":192}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[123,20633,20634,20636,20639,20642],{"class":125,"line":8043},[123,20635,19441],{"class":133},[123,20637,20638],{"class":1972},"p6",[123,20640,20641],{"class":133},"(p5);",[123,20643,20644],{"class":192}," \u002F\u002F用户自己提供拷贝构造\n",[123,20646,20647],{"class":125,"line":8055},[123,20648,1574],{"class":133},[123,20650,20651],{"class":125,"line":8067},[123,20652,2409],{"emptyLinePlaceholder":50},[123,20654,20655,20657,20659],{"class":125,"line":9726},[123,20656,137],{"class":129},[123,20658,1982],{"class":1972},[123,20660,10863],{"class":133},[123,20662,20663],{"class":125,"line":9751},[123,20664,2409],{"emptyLinePlaceholder":50},[123,20666,20667,20669],{"class":125,"line":9774},[123,20668,5643],{"class":1972},[123,20670,5646],{"class":133},[123,20672,20673],{"class":125,"line":9798},[123,20674,2409],{"emptyLinePlaceholder":50},[123,20676,20677,20679,20681,20683],{"class":125,"line":9803},[123,20678,2312],{"class":1972},[123,20680,134],{"class":133},[123,20682,2317],{"class":238},[123,20684,2728],{"class":133},[123,20686,20687],{"class":125,"line":9808},[123,20688,2409],{"emptyLinePlaceholder":50},[123,20690,20691,20693,20695],{"class":125,"line":9813},[123,20692,4099],{"class":129},[123,20694,4102],{"class":182},[123,20696,1300],{"class":133},[123,20698,20699],{"class":125,"line":9822},[123,20700,1574],{"class":133},[94,20702,20704],{"id":20703},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,20706,20707],{},"浅拷贝：简单的赋值拷贝操作",[14,20709,20710],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[114,20712,20714],{"className":116,"code":20713,"language":118,"meta":37,"style":37},"#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",[120,20715,20716,20722,20732,20738,20742,20746,20751,20757,20761,20774,20778,20782,20789,20793,20803,20818,20831,20835,20840,20845,20861,20865,20878,20883,20888,20893,20902,20907,20922,20926,20930,20934,20940,20944,20949,20964,20968,20979,20993,20997,21006,21010,21016,21028,21032,21040,21044,21061,21092,21100,21128,21132,21136,21144,21148,21154],{"__ignoreMap":37},[123,20717,20718,20720],{"class":125,"line":126},[123,20719,1958],{"class":129},[123,20721,1961],{"class":238},[123,20723,20724,20726,20728,20730],{"class":125,"line":45},[123,20725,1966],{"class":129},[123,20727,1969],{"class":129},[123,20729,1973],{"class":1972},[123,20731,1300],{"class":133},[123,20733,20734,20736],{"class":125,"line":1189},[123,20735,14704],{"class":129},[123,20737,15181],{"class":1972},[123,20739,20740],{"class":125,"line":1204},[123,20741,1555],{"class":133},[123,20743,20744],{"class":125,"line":1210},[123,20745,14726],{"class":129},[123,20747,20748],{"class":125,"line":1224},[123,20749,20750],{"class":192},"    \u002F\u002F默认构造函数\n",[123,20752,20753,20755],{"class":125,"line":1230},[123,20754,18529],{"class":1972},[123,20756,1985],{"class":133},[123,20758,20759],{"class":125,"line":1321},[123,20760,2039],{"class":133},[123,20762,20763,20765,20767,20770,20772],{"class":125,"line":1327},[123,20764,3460],{"class":133},[123,20766,1178],{"class":129},[123,20768,20769],{"class":238},"\"默认构造函数\"",[123,20771,1178],{"class":129},[123,20773,1201],{"class":133},[123,20775,20776],{"class":125,"line":1339},[123,20777,2196],{"class":133},[123,20779,20780],{"class":125,"line":1621},[123,20781,20353],{"class":192},[123,20783,20784,20786],{"class":125,"line":1626},[123,20785,18562],{"class":1972},[123,20787,20788],{"class":133},"(int age,int height)\n",[123,20790,20791],{"class":125,"line":1632},[123,20792,2039],{"class":133},[123,20794,20795,20798,20800],{"class":125,"line":1637},[123,20796,20797],{"class":133},"        m_Age",[123,20799,179],{"class":129},[123,20801,20802],{"class":133},"age;\n",[123,20804,20805,20808,20810,20812,20815],{"class":125,"line":1651},[123,20806,20807],{"class":133},"        m_Height",[123,20809,11727],{"class":129},[123,20811,2391],{"class":129},[123,20813,20814],{"class":133},"(height);",[123,20816,20817],{"class":192},"\u002F\u002F放到堆区\n",[123,20819,20820,20822,20824,20827,20829],{"class":125,"line":1656},[123,20821,3460],{"class":133},[123,20823,1178],{"class":129},[123,20825,20826],{"class":238},"\"有参构造函数\"",[123,20828,1178],{"class":129},[123,20830,1201],{"class":133},[123,20832,20833],{"class":125,"line":1662},[123,20834,2196],{"class":133},[123,20836,20837],{"class":125,"line":1683},[123,20838,20839],{"class":192},"    \u002F\u002F深拷贝解决上述问题\n",[123,20841,20842],{"class":125,"line":1688},[123,20843,20844],{"class":192},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[123,20846,20847,20849,20851,20853,20855,20857,20859],{"class":125,"line":1702},[123,20848,18529],{"class":1972},[123,20850,134],{"class":133},[123,20852,6802],{"class":129},[123,20854,15579],{"class":1972},[123,20856,10594],{"class":129},[123,20858,14],{"class":5226},[123,20860,140],{"class":133},[123,20862,20863],{"class":125,"line":1707},[123,20864,2039],{"class":133},[123,20866,20867,20869,20871,20874,20876],{"class":125,"line":1736},[123,20868,3460],{"class":133},[123,20870,1178],{"class":129},[123,20872,20873],{"class":238},"\"拷贝构造函数\"",[123,20875,1178],{"class":129},[123,20877,1201],{"class":133},[123,20879,20880],{"class":125,"line":1741},[123,20881,20882],{"class":192},"        \u002F\u002F编译器默认的写如下注释部分\n",[123,20884,20885],{"class":125,"line":1758},[123,20886,20887],{"class":192},"        \u002F\u002Fm_Age=p.m_Age;\n",[123,20889,20890],{"class":125,"line":1763},[123,20891,20892],{"class":192},"        \u002F\u002Fm_Height=p.m_Height;\n",[123,20894,20895,20897,20899],{"class":125,"line":1768},[123,20896,20797],{"class":133},[123,20898,179],{"class":129},[123,20900,20901],{"class":133},"p.m_Age;\n",[123,20903,20904],{"class":125,"line":1773},[123,20905,20906],{"class":192},"        \u002F\u002F深拷贝操作\n",[123,20908,20909,20911,20913,20915,20917,20919],{"class":125,"line":1787},[123,20910,20807],{"class":133},[123,20912,11727],{"class":129},[123,20914,2391],{"class":129},[123,20916,134],{"class":133},[123,20918,589],{"class":129},[123,20920,20921],{"class":133},"p.m_Height);\n",[123,20923,20924],{"class":125,"line":1792},[123,20925,2196],{"class":133},[123,20927,20928],{"class":125,"line":2586},[123,20929,2409],{"emptyLinePlaceholder":50},[123,20931,20932],{"class":125,"line":2600},[123,20933,18557],{"class":192},[123,20935,20936,20938],{"class":125,"line":2608},[123,20937,18562],{"class":1972},[123,20939,1985],{"class":133},[123,20941,20942],{"class":125,"line":2613},[123,20943,2039],{"class":133},[123,20945,20946],{"class":125,"line":2619},[123,20947,20948],{"class":192},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[123,20950,20951,20953,20956,20959,20962],{"class":125,"line":2625},[123,20952,2506],{"class":129},[123,20954,20955],{"class":133},"(m_Height ",[123,20957,20958],{"class":129},"!=",[123,20960,20961],{"class":182}," NULL",[123,20963,140],{"class":133},[123,20965,20966],{"class":125,"line":2630},[123,20967,2519],{"class":133},[123,20969,20970,20973,20976],{"class":125,"line":7958},[123,20971,20972],{"class":129},"            delete",[123,20974,20975],{"class":133}," m_Height;",[123,20977,20978],{"class":192}," \u002F\u002F释放堆区内存\n",[123,20980,20981,20984,20986,20988,20990],{"class":125,"line":7982},[123,20982,20983],{"class":133},"            m_Height",[123,20985,179],{"class":129},[123,20987,2401],{"class":182},[123,20989,189],{"class":133},[123,20991,20992],{"class":192}," \u002F\u002F防止野指针\n",[123,20994,20995],{"class":125,"line":7987},[123,20996,2538],{"class":133},[123,20998,20999,21001,21003],{"class":125,"line":7993},[123,21000,3460],{"class":133},[123,21002,1178],{"class":129},[123,21004,21005],{"class":238},"\"Person的析构函数调用\"\n",[123,21007,21008],{"class":125,"line":8020},[123,21009,2196],{"class":133},[123,21011,21012,21014],{"class":125,"line":8025},[123,21013,1994],{"class":129},[123,21015,15676],{"class":133},[123,21017,21018,21020,21022,21025],{"class":125,"line":8031},[123,21019,1994],{"class":129},[123,21021,6528],{"class":129},[123,21023,21024],{"class":133},"m_Height;",[123,21026,21027],{"class":192}," \u002F\u002F定义一个指针，指向身高\n",[123,21029,21030],{"class":125,"line":8043},[123,21031,4004],{"class":133},[123,21033,21034,21036,21038],{"class":125,"line":8055},[123,21035,5374],{"class":129},[123,21037,5598],{"class":1972},[123,21039,1985],{"class":133},[123,21041,21042],{"class":125,"line":8067},[123,21043,1555],{"class":133},[123,21045,21046,21048,21050,21052,21054,21056,21059],{"class":125,"line":9726},[123,21047,19441],{"class":133},[123,21049,7140],{"class":1972},[123,21051,134],{"class":133},[123,21053,784],{"class":182},[123,21055,512],{"class":133},[123,21057,21058],{"class":182},"160",[123,21060,2728],{"class":133},[123,21062,21063,21065,21067,21070,21072,21075,21077,21080,21082,21085,21087,21089],{"class":125,"line":9751},[123,21064,1560],{"class":133},[123,21066,1178],{"class":129},[123,21068,21069],{"class":238},"\"p1的年龄为:\"",[123,21071,1178],{"class":129},[123,21073,21074],{"class":133},"p1.m_Age",[123,21076,1178],{"class":129},[123,21078,21079],{"class":238},"\"身高为：\"",[123,21081,6429],{"class":129},[123,21083,21084],{"class":133},"p1.m_Height",[123,21086,1178],{"class":129},[123,21088,1248],{"class":133},[123,21090,21091],{"class":192},"  \u002F\u002F18\n",[123,21093,21094,21096,21098],{"class":125,"line":9774},[123,21095,19441],{"class":133},[123,21097,7043],{"class":1972},[123,21099,17525],{"class":133},[123,21101,21102,21104,21106,21109,21111,21113,21115,21117,21119,21122,21124,21126],{"class":125,"line":9798},[123,21103,1560],{"class":133},[123,21105,1178],{"class":129},[123,21107,21108],{"class":238},"\"p2的年龄为：\"",[123,21110,1178],{"class":129},[123,21112,19471],{"class":133},[123,21114,1178],{"class":129},[123,21116,21079],{"class":238},[123,21118,6429],{"class":129},[123,21120,21121],{"class":133},"p2.m_Height",[123,21123,1178],{"class":129},[123,21125,1248],{"class":133},[123,21127,21091],{"class":192},[123,21129,21130],{"class":125,"line":9803},[123,21131,13220],{"class":133},[123,21133,21134],{"class":125,"line":9808},[123,21135,1574],{"class":133},[123,21137,21138,21140,21142],{"class":125,"line":9813},[123,21139,137],{"class":129},[123,21141,1982],{"class":1972},[123,21143,1985],{"class":133},[123,21145,21146],{"class":125,"line":9822},[123,21147,1555],{"class":133},[123,21149,21150,21152],{"class":125,"line":9827},[123,21151,5643],{"class":1972},[123,21153,5646],{"class":133},[123,21155,21156],{"class":125,"line":9833},[123,21157,1574],{"class":133},[14,21159,21160],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21162,21163],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21165,21166],{},[35,21167],{"alt":37,"src":21168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21170,21171],{},"浅拷贝问题要使用深拷贝来解决",[14,21173,21174],{},[35,21175],{"alt":37,"src":21176},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21178,21179],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[94,21181,21183],{"id":21182},"_826初始化列表","8.2.6初始化列表",[14,21185,21186],{},"作用：初始化属性",[14,21188,5191],{},[114,21190,21193],{"className":21191,"code":21192,"language":5197},[5195],"构造函数():属性1(值1),属性2(值2).....{}\n",[120,21194,21192],{"__ignoreMap":37},[14,21196,21197],{},"例子",[114,21199,21201],{"className":116,"code":21200,"language":118,"meta":37,"style":37},"#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",[120,21202,21203,21209,21219,21225,21229,21234,21238,21243,21248,21253,21258,21263,21268,21272,21277,21282,21325,21334,21352,21370,21388,21392,21396,21403,21410,21417,21421,21425,21433,21437,21441,21461,21470,21474,21478,21488,21492,21500],{"__ignoreMap":37},[123,21204,21205,21207],{"class":125,"line":126},[123,21206,1958],{"class":129},[123,21208,1961],{"class":238},[123,21210,21211,21213,21215,21217],{"class":125,"line":45},[123,21212,1966],{"class":129},[123,21214,1969],{"class":129},[123,21216,1973],{"class":1972},[123,21218,1300],{"class":133},[123,21220,21221,21223],{"class":125,"line":1189},[123,21222,14704],{"class":129},[123,21224,15181],{"class":1972},[123,21226,21227],{"class":125,"line":1204},[123,21228,1555],{"class":133},[123,21230,21231],{"class":125,"line":1210},[123,21232,21233],{"class":129},"    public:\n",[123,21235,21236],{"class":125,"line":1224},[123,21237,2409],{"emptyLinePlaceholder":50},[123,21239,21240],{"class":125,"line":1230},[123,21241,21242],{"class":192},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[123,21244,21245],{"class":125,"line":1321},[123,21246,21247],{"class":192},"    \u002F\u002FPerson(int a, int b, int c) {\n",[123,21249,21250],{"class":125,"line":1327},[123,21251,21252],{"class":192},"    \u002F\u002F  m_A = a;\n",[123,21254,21255],{"class":125,"line":1339},[123,21256,21257],{"class":192},"    \u002F\u002F  m_B = b;\n",[123,21259,21260],{"class":125,"line":1621},[123,21261,21262],{"class":192},"    \u002F\u002F  m_C = c;\n",[123,21264,21265],{"class":125,"line":1626},[123,21266,21267],{"class":192},"    \u002F\u002F}\n",[123,21269,21270],{"class":125,"line":1632},[123,21271,2409],{"emptyLinePlaceholder":50},[123,21273,21274],{"class":125,"line":1637},[123,21275,21276],{"class":192},"    \u002F\u002F初始化列表方式初始化\n",[123,21278,21279],{"class":125,"line":1651},[123,21280,21281],{"class":192},"    \u002F\u002F使用有参构造函数\n",[123,21283,21284,21286,21288,21290,21292,21294,21296,21298,21300,21302,21304,21307,21310,21313,21316,21319,21322],{"class":125,"line":1656},[123,21285,18529],{"class":1972},[123,21287,134],{"class":133},[123,21289,137],{"class":129},[123,21291,1408],{"class":5226},[123,21293,12445],{"class":133},[123,21295,137],{"class":129},[123,21297,2842],{"class":5226},[123,21299,12445],{"class":133},[123,21301,137],{"class":129},[123,21303,2858],{"class":5226},[123,21305,21306],{"class":133},") :",[123,21308,21309],{"class":1972},"m_A",[123,21311,21312],{"class":133},"(a), ",[123,21314,21315],{"class":1972},"m_B",[123,21317,21318],{"class":133},"(b), ",[123,21320,21321],{"class":1972},"m_C",[123,21323,21324],{"class":133},"(c) {}\n",[123,21326,21327,21329,21332],{"class":125,"line":1662},[123,21328,14919],{"class":129},[123,21330,21331],{"class":1972}," PrintPerson",[123,21333,10863],{"class":133},[123,21335,21336,21338,21340,21343,21345,21348,21350],{"class":125,"line":1683},[123,21337,9679],{"class":133},[123,21339,1178],{"class":129},[123,21341,21342],{"class":238}," \"mA:\"",[123,21344,1454],{"class":129},[123,21346,21347],{"class":133}," m_A ",[123,21349,1178],{"class":129},[123,21351,8850],{"class":133},[123,21353,21354,21356,21358,21361,21363,21366,21368],{"class":125,"line":1688},[123,21355,9679],{"class":133},[123,21357,1178],{"class":129},[123,21359,21360],{"class":238}," \"mB:\"",[123,21362,1454],{"class":129},[123,21364,21365],{"class":133}," m_B ",[123,21367,1178],{"class":129},[123,21369,8850],{"class":133},[123,21371,21372,21374,21376,21379,21381,21384,21386],{"class":125,"line":1702},[123,21373,9679],{"class":133},[123,21375,1178],{"class":129},[123,21377,21378],{"class":238}," \"mC:\"",[123,21380,1454],{"class":129},[123,21382,21383],{"class":133}," m_C ",[123,21385,1178],{"class":129},[123,21387,8850],{"class":133},[123,21389,21390],{"class":125,"line":1707},[123,21391,2196],{"class":133},[123,21393,21394],{"class":125,"line":1736},[123,21395,15232],{"class":129},[123,21397,21398,21400],{"class":125,"line":1741},[123,21399,1994],{"class":129},[123,21401,21402],{"class":133}," m_A;\n",[123,21404,21405,21407],{"class":125,"line":1758},[123,21406,1994],{"class":129},[123,21408,21409],{"class":133}," m_B;\n",[123,21411,21412,21414],{"class":125,"line":1763},[123,21413,1994],{"class":129},[123,21415,21416],{"class":133}," m_C;\n",[123,21418,21419],{"class":125,"line":1768},[123,21420,4004],{"class":133},[123,21422,21423],{"class":125,"line":1773},[123,21424,2409],{"emptyLinePlaceholder":50},[123,21426,21427,21429,21431],{"class":125,"line":1787},[123,21428,137],{"class":129},[123,21430,1982],{"class":1972},[123,21432,5988],{"class":133},[123,21434,21435],{"class":125,"line":1792},[123,21436,1555],{"class":133},[123,21438,21439],{"class":125,"line":2586},[123,21440,2409],{"emptyLinePlaceholder":50},[123,21442,21443,21445,21447,21449,21451,21453,21455,21457,21459],{"class":125,"line":2600},[123,21444,19441],{"class":133},[123,21446,14],{"class":1972},[123,21448,134],{"class":133},[123,21450,351],{"class":182},[123,21452,12445],{"class":133},[123,21454,211],{"class":182},[123,21456,12445],{"class":133},[123,21458,205],{"class":182},[123,21460,2728],{"class":133},[123,21462,21463,21465,21468],{"class":125,"line":2608},[123,21464,15876],{"class":133},[123,21466,21467],{"class":1972},"PrintPerson",[123,21469,5646],{"class":133},[123,21471,21472],{"class":125,"line":2613},[123,21473,2409],{"emptyLinePlaceholder":50},[123,21475,21476],{"class":125,"line":2619},[123,21477,2409],{"emptyLinePlaceholder":50},[123,21479,21480,21482,21484,21486],{"class":125,"line":2625},[123,21481,2312],{"class":1972},[123,21483,134],{"class":133},[123,21485,2317],{"class":238},[123,21487,2728],{"class":133},[123,21489,21490],{"class":125,"line":2630},[123,21491,2409],{"emptyLinePlaceholder":50},[123,21493,21494,21496,21498],{"class":125,"line":7958},[123,21495,4099],{"class":129},[123,21497,4102],{"class":182},[123,21499,1300],{"class":133},[123,21501,21502],{"class":125,"line":7982},[123,21503,1574],{"class":133},[14,21505,21506,21507,21510,21511],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[283,21508,21509],{},"参数名就是定义的对象属性","，",[283,21512,21513],{},"属性后面的值为有参构造函数的形参",[114,21515,21517],{"className":116,"code":21516,"language":118,"meta":37,"style":37},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[120,21518,21519],{"__ignoreMap":37},[123,21520,21521,21523,21525,21527,21530,21532,21535,21537,21540,21542,21545,21547,21550,21552],{"class":125,"line":126},[123,21522,19056],{"class":1972},[123,21524,134],{"class":133},[123,21526,137],{"class":129},[123,21528,21529],{"class":133}," a.",[123,21531,137],{"class":129},[123,21533,21534],{"class":133}," b,",[123,21536,137],{"class":129},[123,21538,21539],{"class":133}," b):",[123,21541,21309],{"class":1972},[123,21543,21544],{"class":133},"(a),",[123,21546,21315],{"class":1972},[123,21548,21549],{"class":133},"(c),",[123,21551,21321],{"class":1972},[123,21553,21554],{"class":133},"(b) {}\n",[94,21556,21558],{"id":21557},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,21560,21561],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,21563,14643],{},[114,21565,21567],{"className":116,"code":21566,"language":118,"meta":37,"style":37},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[120,21568,21569,21574,21579,21583,21588,21592],{"__ignoreMap":37},[123,21570,21571],{"class":125,"line":126},[123,21572,21573],{"class":133},"A{};\n",[123,21575,21576],{"class":125,"line":45},[123,21577,21578],{"class":133},"B\n",[123,21580,21581],{"class":125,"line":1189},[123,21582,1555],{"class":133},[123,21584,21585],{"class":125,"line":1204},[123,21586,21587],{"class":133},"    A a;\n",[123,21589,21590],{"class":125,"line":1210},[123,21591,1574],{"class":133},[123,21593,21594],{"class":125,"line":1224},[123,21595,21596],{"class":192},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,21598,21599],{},"案例",[114,21601,21603],{"className":116,"code":21602,"language":118,"meta":37,"style":37},"\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",[120,21604,21605,21610,21617,21621,21626,21631,21645,21649,21659,21670,21674,21681,21685,21698,21702,21707,21712,21716,21722,21726,21730,21734,21765,21769,21780,21784,21790,21794,21807,21811,21815,21819,21824,21829,21833,21841,21845,21862,21881,21885,21893,21897,21903],{"__ignoreMap":37},[123,21606,21607],{"class":125,"line":126},[123,21608,21609],{"class":192},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[123,21611,21612,21614],{"class":125,"line":45},[123,21613,14704],{"class":129},[123,21615,21616],{"class":1972}," Phone\n",[123,21618,21619],{"class":125,"line":1189},[123,21620,1555],{"class":133},[123,21622,21623],{"class":125,"line":1204},[123,21624,21625],{"class":133},"public：\n",[123,21627,21628],{"class":125,"line":1210},[123,21629,21630],{"class":192},"    \u002F\u002F 赋值(构造函数)\n",[123,21632,21633,21636,21638,21640,21643],{"class":125,"line":1224},[123,21634,21635],{"class":1972},"    Phone",[123,21637,134],{"class":133},[123,21639,14927],{"class":1972},[123,21641,21642],{"class":5226}," pName",[123,21644,140],{"class":133},[123,21646,21647],{"class":125,"line":1230},[123,21648,2039],{"class":133},[123,21650,21651,21654,21656],{"class":125,"line":1321},[123,21652,21653],{"class":133},"        m_pName",[123,21655,179],{"class":129},[123,21657,21658],{"class":133},"pName;\n",[123,21660,21661,21663,21665,21668],{"class":125,"line":1327},[123,21662,3460],{"class":133},[123,21664,1178],{"class":129},[123,21666,21667],{"class":238},"\"Phone的构造函数调用\"",[123,21669,1300],{"class":133},[123,21671,21672],{"class":125,"line":1339},[123,21673,2196],{"class":133},[123,21675,21676,21679],{"class":125,"line":1621},[123,21677,21678],{"class":1972},"    ~Phone",[123,21680,1985],{"class":133},[123,21682,21683],{"class":125,"line":1626},[123,21684,2039],{"class":133},[123,21686,21687,21689,21691,21694,21696],{"class":125,"line":1632},[123,21688,3460],{"class":133},[123,21690,1178],{"class":129},[123,21692,21693],{"class":238},"\"Phone析构函数调用\"",[123,21695,1178],{"class":129},[123,21697,1201],{"class":133},[123,21699,21700],{"class":125,"line":1637},[123,21701,2196],{"class":133},[123,21703,21704],{"class":125,"line":1651},[123,21705,21706],{"class":192},"    \u002F\u002F\n",[123,21708,21709],{"class":125,"line":1656},[123,21710,21711],{"class":133},"    string m_PName;\n",[123,21713,21714],{"class":125,"line":1662},[123,21715,4004],{"class":133},[123,21717,21718,21720],{"class":125,"line":1683},[123,21719,14704],{"class":129},[123,21721,15181],{"class":1972},[123,21723,21724],{"class":125,"line":1688},[123,21725,1555],{"class":133},[123,21727,21728],{"class":125,"line":1702},[123,21729,14726],{"class":129},[123,21731,21732],{"class":125,"line":1707},[123,21733,17004],{"class":192},[123,21735,21736,21738,21740,21742,21744,21746,21748,21751,21754,21756,21759,21762],{"class":125,"line":1736},[123,21737,18529],{"class":1972},[123,21739,134],{"class":133},[123,21741,14927],{"class":1972},[123,21743,14930],{"class":5226},[123,21745,512],{"class":133},[123,21747,14927],{"class":1972},[123,21749,21750],{"class":5226}," pname",[123,21752,21753],{"class":133},"):",[123,21755,15020],{"class":1972},[123,21757,21758],{"class":133},"(name),m_phone.",[123,21760,21761],{"class":1972},"m_PName",[123,21763,21764],{"class":133},"(pname) \n",[123,21766,21767],{"class":125,"line":1741},[123,21768,2039],{"class":133},[123,21770,21771,21773,21775,21778],{"class":125,"line":1758},[123,21772,3460],{"class":133},[123,21774,1178],{"class":129},[123,21776,21777],{"class":238},"\"Person的构造函数调用\"",[123,21779,1300],{"class":133},[123,21781,21782],{"class":125,"line":1763},[123,21783,2196],{"class":133},[123,21785,21786,21788],{"class":125,"line":1768},[123,21787,18562],{"class":1972},[123,21789,1985],{"class":133},[123,21791,21792],{"class":125,"line":1773},[123,21793,2039],{"class":133},[123,21795,21796,21798,21800,21803,21805],{"class":125,"line":1787},[123,21797,3460],{"class":133},[123,21799,1178],{"class":129},[123,21801,21802],{"class":238},"\"Person析构函数调用\"",[123,21804,1178],{"class":129},[123,21806,1201],{"class":133},[123,21808,21809],{"class":125,"line":1792},[123,21810,2196],{"class":133},[123,21812,21813],{"class":125,"line":2586},[123,21814,7790],{"class":192},[123,21816,21817],{"class":125,"line":2600},[123,21818,14902],{"class":133},[123,21820,21821],{"class":125,"line":2608},[123,21822,21823],{"class":192},"    \u002F\u002F手机\n",[123,21825,21826],{"class":125,"line":2613},[123,21827,21828],{"class":133},"    Phone m_Phone;\n",[123,21830,21831],{"class":125,"line":2619},[123,21832,4004],{"class":133},[123,21834,21835,21837,21839],{"class":125,"line":2625},[123,21836,5374],{"class":129},[123,21838,5598],{"class":1972},[123,21840,1985],{"class":133},[123,21842,21843],{"class":125,"line":2630},[123,21844,1555],{"class":133},[123,21846,21847,21849,21851,21853,21855,21857,21860],{"class":125,"line":7958},[123,21848,19441],{"class":133},[123,21850,14],{"class":1972},[123,21852,134],{"class":133},[123,21854,7926],{"class":238},[123,21856,512],{"class":133},[123,21858,21859],{"class":238},"\"安卓\"",[123,21861,2728],{"class":133},[123,21863,21864,21866,21868,21871,21873,21876,21878],{"class":125,"line":7982},[123,21865,1560],{"class":133},[123,21867,1178],{"class":129},[123,21869,21870],{"class":133},"p.Name",[123,21872,1178],{"class":129},[123,21874,21875],{"class":238},"\"拿着：\"",[123,21877,1178],{"class":129},[123,21879,21880],{"class":133},"p.m_phone.m_PName;\n",[123,21882,21883],{"class":125,"line":7987},[123,21884,1574],{"class":133},[123,21886,21887,21889,21891],{"class":125,"line":7993},[123,21888,137],{"class":129},[123,21890,1982],{"class":1972},[123,21892,1985],{"class":133},[123,21894,21895],{"class":125,"line":8020},[123,21896,1555],{"class":133},[123,21898,21899,21901],{"class":125,"line":8025},[123,21900,5643],{"class":1972},[123,21902,5646],{"class":133},[123,21904,21905],{"class":125,"line":8031},[123,21906,1574],{"class":133},[14,21908,9035],{},[114,21910,21912],{"className":116,"code":21911,"language":118,"meta":37,"style":37},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[120,21913,21914,21919],{"__ignoreMap":37},[123,21915,21916],{"class":125,"line":126},[123,21917,21918],{"class":192},"    \u002F\u002F不需要写这个：\n",[123,21920,21921],{"class":125,"line":45},[123,21922,21923],{"class":192},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,21925,21926],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[114,21928,21930],{"className":116,"code":21929,"language":118,"meta":37,"style":37},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[120,21931,21932],{"__ignoreMap":37},[123,21933,21934,21936,21939,21941,21944,21947],{"class":125,"line":126},[123,21935,19056],{"class":1972},[123,21937,21938],{"class":133},"(string name.string pname):",[123,21940,15020],{"class":1972},[123,21942,21943],{"class":133},"(name),",[123,21945,21946],{"class":1972},"m_phone",[123,21948,21949],{"class":133},"(pname) {}\n",[14,21951,21952,21953,179,21956],{},"采用的是隐式转换法，实际为如下：\n",[120,21954,21955],{},"m_phone(pname)",[120,21957,21958],{},"Phone m_phone=pname",[14,21960,21961,21964],{},[283,21962,21963],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,21966,21967],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[94,21969,21971],{"id":21970},"_828静态对象","8.2.8静态对象",[14,21973,21974],{},"静态对象在成员对象前static，称为静态对象",[14,21976,21977],{},"静态对象分为两类：",[77,21979,21980],{},[80,21981,21982],{},"静态成员变量",[1141,21984,21985,21988,21991],{},[80,21986,21987],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[80,21989,21990],{},"②在编译阶段分配内存",[80,21992,21993],{},"③类内声明，类外初始化",[77,21995,21996],{"start":45},[80,21997,21998],{},"静态成员函数",[1141,22000,22001,22004],{},[80,22002,22003],{},"①所有对象共享同一个函数",[80,22005,22006],{},"②静态成员函数只能访问静态成员变量",[22008,22009,22011],"h4",{"id":22010},"_8281静态成员变量","8.2.8.1静态成员变量",[114,22013,22015],{"className":116,"code":22014,"language":118,"meta":37,"style":37},"#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",[120,22016,22017,22023,22033,22039,22043,22047,22052,22057,22062,22070,22074,22078,22082,22090,22094,22098,22103,22116,22120,22128,22132,22138],{"__ignoreMap":37},[123,22018,22019,22021],{"class":125,"line":126},[123,22020,1958],{"class":129},[123,22022,1961],{"class":238},[123,22024,22025,22027,22029,22031],{"class":125,"line":45},[123,22026,1966],{"class":129},[123,22028,1969],{"class":129},[123,22030,1973],{"class":1972},[123,22032,1300],{"class":133},[123,22034,22035,22037],{"class":125,"line":1189},[123,22036,14704],{"class":129},[123,22038,15181],{"class":1972},[123,22040,22041],{"class":125,"line":1204},[123,22042,1555],{"class":133},[123,22044,22045],{"class":125,"line":1210},[123,22046,14726],{"class":129},[123,22048,22049],{"class":125,"line":1224},[123,22050,22051],{"class":192},"    \u002F\u002F非静态成员变量\n",[123,22053,22054],{"class":125,"line":1230},[123,22055,22056],{"class":192},"    \u002F\u002F int m_A;\n",[123,22058,22059],{"class":125,"line":1321},[123,22060,22061],{"class":192},"    \u002F\u002F定义静态成员变量\n",[123,22063,22064,22066,22068],{"class":125,"line":1327},[123,22065,11030],{"class":129},[123,22067,2391],{"class":129},[123,22069,21402],{"class":133},[123,22071,22072],{"class":125,"line":1339},[123,22073,2409],{"emptyLinePlaceholder":50},[123,22075,22076],{"class":125,"line":1621},[123,22077,2409],{"emptyLinePlaceholder":50},[123,22079,22080],{"class":125,"line":1626},[123,22081,4004],{"class":133},[123,22083,22084,22086,22088],{"class":125,"line":1632},[123,22085,5374],{"class":129},[123,22087,5598],{"class":1972},[123,22089,1985],{"class":133},[123,22091,22092],{"class":125,"line":1637},[123,22093,1555],{"class":133},[123,22095,22096],{"class":125,"line":1651},[123,22097,15323],{"class":133},[123,22099,22100],{"class":125,"line":1656},[123,22101,22102],{"class":192},"    \u002F\u002F输出类成员变量这块内存\n",[123,22104,22105,22107,22109,22112,22114],{"class":125,"line":1662},[123,22106,1560],{"class":133},[123,22108,1178],{"class":129},[123,22110,22111],{"class":133},"p.m_A",[123,22113,1178],{"class":129},[123,22115,1201],{"class":133},[123,22117,22118],{"class":125,"line":1683},[123,22119,1574],{"class":133},[123,22121,22122,22124,22126],{"class":125,"line":1688},[123,22123,137],{"class":129},[123,22125,1982],{"class":1972},[123,22127,1985],{"class":133},[123,22129,22130],{"class":125,"line":1702},[123,22131,1555],{"class":133},[123,22133,22134,22136],{"class":125,"line":1707},[123,22135,5643],{"class":1972},[123,22137,1985],{"class":133},[123,22139,22140],{"class":125,"line":1736},[123,22141,1574],{"class":133},[14,22143,22144],{},"此时输出是报错的：无法解析外部命令",[14,22146,22147],{},"解决这一问题：必须用到类内声明，类外初始化操作",[114,22149,22151],{"className":116,"code":22150,"language":118,"meta":37,"style":37},"#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",[120,22152,22153,22159,22169,22175,22179,22183,22188,22196,22200,22205,22220,22228,22232,22236,22241,22246,22258,22263,22274,22279,22284,22297,22301,22309,22313,22319],{"__ignoreMap":37},[123,22154,22155,22157],{"class":125,"line":126},[123,22156,1958],{"class":129},[123,22158,1961],{"class":238},[123,22160,22161,22163,22165,22167],{"class":125,"line":45},[123,22162,1966],{"class":129},[123,22164,1969],{"class":129},[123,22166,1973],{"class":1972},[123,22168,1300],{"class":133},[123,22170,22171,22173],{"class":125,"line":1189},[123,22172,14704],{"class":129},[123,22174,15181],{"class":1972},[123,22176,22177],{"class":125,"line":1204},[123,22178,1555],{"class":133},[123,22180,22181],{"class":125,"line":1210},[123,22182,14726],{"class":129},[123,22184,22185],{"class":125,"line":1224},[123,22186,22187],{"class":192},"    \u002F\u002F类内声明\n",[123,22189,22190,22192,22194],{"class":125,"line":1230},[123,22191,11030],{"class":129},[123,22193,2391],{"class":129},[123,22195,21402],{"class":133},[123,22197,22198],{"class":125,"line":1321},[123,22199,4004],{"class":133},[123,22201,22202],{"class":125,"line":1327},[123,22203,22204],{"class":192},"\u002F\u002F类外初始化\n",[123,22206,22207,22209,22211,22214,22216,22218],{"class":125,"line":1339},[123,22208,137],{"class":129},[123,22210,15579],{"class":1972},[123,22212,22213],{"class":133},"::m_A",[123,22215,179],{"class":129},[123,22217,580],{"class":182},[123,22219,1300],{"class":133},[123,22221,22222,22224,22226],{"class":125,"line":1621},[123,22223,5374],{"class":129},[123,22225,5598],{"class":1972},[123,22227,1985],{"class":133},[123,22229,22230],{"class":125,"line":1626},[123,22231,1555],{"class":133},[123,22233,22234],{"class":125,"line":1632},[123,22235,15323],{"class":133},[123,22237,22238],{"class":125,"line":1637},[123,22239,22240],{"class":192},"    \u002F\u002F访问变量的原内存空间\n",[123,22242,22243],{"class":125,"line":1651},[123,22244,22245],{"class":192},"    \u002F\u002F100\n",[123,22247,22248,22250,22252,22254,22256],{"class":125,"line":1656},[123,22249,1560],{"class":133},[123,22251,1178],{"class":129},[123,22253,22111],{"class":133},[123,22255,1178],{"class":129},[123,22257,1201],{"class":133},[123,22259,22260],{"class":125,"line":1662},[123,22261,22262],{"class":133},"    Person p2;\n",[123,22264,22265,22268,22270,22272],{"class":125,"line":1683},[123,22266,22267],{"class":133},"    p2.m_A",[123,22269,179],{"class":129},[123,22271,1731],{"class":182},[123,22273,1300],{"class":133},[123,22275,22276],{"class":125,"line":1688},[123,22277,22278],{"class":192},"    \u002F\u002F继续访问这片空间\n",[123,22280,22281],{"class":125,"line":1702},[123,22282,22283],{"class":192},"    \u002F\u002F200\n",[123,22285,22286,22288,22290,22293,22295],{"class":125,"line":1707},[123,22287,1560],{"class":133},[123,22289,1178],{"class":129},[123,22291,22292],{"class":133},"p2.m_A",[123,22294,1178],{"class":129},[123,22296,1201],{"class":133},[123,22298,22299],{"class":125,"line":1736},[123,22300,1574],{"class":133},[123,22302,22303,22305,22307],{"class":125,"line":1741},[123,22304,137],{"class":129},[123,22306,1982],{"class":1972},[123,22308,1985],{"class":133},[123,22310,22311],{"class":125,"line":1758},[123,22312,1555],{"class":133},[123,22314,22315,22317],{"class":125,"line":1763},[123,22316,5643],{"class":1972},[123,22318,5646],{"class":133},[123,22320,22321],{"class":125,"line":1768},[123,22322,1574],{"class":133},[14,22324,22325],{},[283,22326,22327],{},"静态变量的访问",[114,22329,22331],{"className":116,"code":22330,"language":118,"meta":37,"style":37},"#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",[120,22332,22333,22339,22349,22355,22359,22363,22367,22375,22379,22384,22392,22396,22400,22414,22429,22437,22441,22446,22451,22456,22461,22473,22478,22483,22497,22514,22518,22526,22530,22536],{"__ignoreMap":37},[123,22334,22335,22337],{"class":125,"line":126},[123,22336,1958],{"class":129},[123,22338,1961],{"class":238},[123,22340,22341,22343,22345,22347],{"class":125,"line":45},[123,22342,1966],{"class":129},[123,22344,1969],{"class":129},[123,22346,1973],{"class":1972},[123,22348,1300],{"class":133},[123,22350,22351,22353],{"class":125,"line":1189},[123,22352,14704],{"class":129},[123,22354,15181],{"class":1972},[123,22356,22357],{"class":125,"line":1204},[123,22358,1555],{"class":133},[123,22360,22361],{"class":125,"line":1210},[123,22362,14726],{"class":129},[123,22364,22365],{"class":125,"line":1224},[123,22366,22187],{"class":192},[123,22368,22369,22371,22373],{"class":125,"line":1230},[123,22370,11030],{"class":129},[123,22372,2391],{"class":129},[123,22374,21402],{"class":133},[123,22376,22377],{"class":125,"line":1321},[123,22378,15232],{"class":129},[123,22380,22381],{"class":125,"line":1327},[123,22382,22383],{"class":192},"    \u002F\u002F静态成员变量也是有访问权限的\n",[123,22385,22386,22388,22390],{"class":125,"line":1339},[123,22387,11030],{"class":129},[123,22389,2391],{"class":129},[123,22391,21409],{"class":133},[123,22393,22394],{"class":125,"line":1621},[123,22395,4004],{"class":133},[123,22397,22398],{"class":125,"line":1626},[123,22399,22204],{"class":192},[123,22401,22402,22404,22406,22408,22410,22412],{"class":125,"line":1632},[123,22403,137],{"class":129},[123,22405,15579],{"class":1972},[123,22407,22213],{"class":133},[123,22409,179],{"class":129},[123,22411,580],{"class":182},[123,22413,1300],{"class":133},[123,22415,22416,22418,22420,22423,22425,22427],{"class":125,"line":1637},[123,22417,137],{"class":129},[123,22419,15579],{"class":1972},[123,22421,22422],{"class":133},"::m_B",[123,22424,179],{"class":129},[123,22426,834],{"class":182},[123,22428,1300],{"class":133},[123,22430,22431,22433,22435],{"class":125,"line":1651},[123,22432,5374],{"class":129},[123,22434,5667],{"class":1972},[123,22436,1985],{"class":133},[123,22438,22439],{"class":125,"line":1656},[123,22440,1555],{"class":133},[123,22442,22443],{"class":125,"line":1662},[123,22444,22445],{"class":192},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[123,22447,22448],{"class":125,"line":1683},[123,22449,22450],{"class":192},"    \u002F\u002F静态成员变量有两种访问方式：\n",[123,22452,22453],{"class":125,"line":1688},[123,22454,22455],{"class":192},"    \u002F\u002F1.通过对象进行访问\n",[123,22457,22458],{"class":125,"line":1702},[123,22459,22460],{"class":133},"    Person p;  \n",[123,22462,22463,22465,22467,22469,22471],{"class":125,"line":1707},[123,22464,1560],{"class":133},[123,22466,1178],{"class":129},[123,22468,22111],{"class":133},[123,22470,1178],{"class":129},[123,22472,1201],{"class":133},[123,22474,22475],{"class":125,"line":1736},[123,22476,22477],{"class":192},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[123,22479,22480],{"class":125,"line":1741},[123,22481,22482],{"class":192},"    \u002F\u002F2.通过类名进行访问\n",[123,22484,22485,22487,22489,22491,22493,22495],{"class":125,"line":1758},[123,22486,1560],{"class":133},[123,22488,1178],{"class":129},[123,22490,19056],{"class":1972},[123,22492,22213],{"class":133},[123,22494,1178],{"class":129},[123,22496,1201],{"class":133},[123,22498,22499,22501,22503,22505,22507,22509,22511],{"class":125,"line":1763},[123,22500,1560],{"class":133},[123,22502,1178],{"class":129},[123,22504,19056],{"class":1972},[123,22506,22422],{"class":133},[123,22508,1178],{"class":129},[123,22510,1248],{"class":133},[123,22512,22513],{"class":192}," \u002F\u002F没有访问权限，报错\n",[123,22515,22516],{"class":125,"line":1768},[123,22517,1574],{"class":133},[123,22519,22520,22522,22524],{"class":125,"line":1773},[123,22521,137],{"class":129},[123,22523,1982],{"class":1972},[123,22525,1985],{"class":133},[123,22527,22528],{"class":125,"line":1787},[123,22529,1555],{"class":133},[123,22531,22532,22534],{"class":125,"line":1792},[123,22533,5712],{"class":1972},[123,22535,5646],{"class":133},[123,22537,22538],{"class":125,"line":2586},[123,22539,1574],{"class":133},[22008,22541,22543],{"id":22542},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22545,22546],{},"1.静态成员函数定义与访问",[114,22548,22550],{"className":116,"code":22549,"language":118,"meta":37,"style":37},"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",[120,22551,22552,22558,22562,22566,22571,22582,22586,22600,22604,22608,22616,22620,22625,22630,22634,22642,22647,22657],{"__ignoreMap":37},[123,22553,22554,22556],{"class":125,"line":126},[123,22555,14704],{"class":129},[123,22557,15181],{"class":1972},[123,22559,22560],{"class":125,"line":45},[123,22561,1555],{"class":133},[123,22563,22564],{"class":125,"line":1189},[123,22565,14726],{"class":129},[123,22567,22568],{"class":125,"line":1204},[123,22569,22570],{"class":192},"    \u002F\u002F在公共权限下定义静态成员函数\n",[123,22572,22573,22575,22578,22580],{"class":125,"line":1210},[123,22574,11030],{"class":129},[123,22576,22577],{"class":129}," void",[123,22579,11395],{"class":1972},[123,22581,1985],{"class":133},[123,22583,22584],{"class":125,"line":1224},[123,22585,2039],{"class":133},[123,22587,22588,22591,22593,22596,22598],{"class":125,"line":1230},[123,22589,22590],{"class":133},"        coout",[123,22592,1178],{"class":129},[123,22594,22595],{"class":238},"\"静态成员函数的调用\"",[123,22597,1178],{"class":129},[123,22599,1201],{"class":133},[123,22601,22602],{"class":125,"line":1321},[123,22603,2196],{"class":133},[123,22605,22606],{"class":125,"line":1327},[123,22607,4004],{"class":133},[123,22609,22610,22612,22614],{"class":125,"line":1339},[123,22611,5374],{"class":129},[123,22613,5598],{"class":1972},[123,22615,1985],{"class":133},[123,22617,22618],{"class":125,"line":1621},[123,22619,1555],{"class":133},[123,22621,22622],{"class":125,"line":1626},[123,22623,22624],{"class":192},"    \u002F\u002F静态成员函数的调用方式:\n",[123,22626,22627],{"class":125,"line":1632},[123,22628,22629],{"class":192},"    \u002F\u002F1.通过对象访问\n",[123,22631,22632],{"class":125,"line":1637},[123,22633,15323],{"class":133},[123,22635,22636,22638,22640],{"class":125,"line":1651},[123,22637,15876],{"class":133},[123,22639,11561],{"class":1972},[123,22641,5646],{"class":133},[123,22643,22644],{"class":125,"line":1656},[123,22645,22646],{"class":192},"    \u002F\u002F2.通过类名访问\n",[123,22648,22649,22651,22653,22655],{"class":125,"line":1662},[123,22650,18529],{"class":1972},[123,22652,17742],{"class":133},[123,22654,11561],{"class":1972},[123,22656,5646],{"class":133},[123,22658,22659],{"class":125,"line":1683},[123,22660,1574],{"class":133},[77,22662,22663],{"start":45},[80,22664,22665],{},"静态成员函数只能访问静态成员变量",[114,22667,22669],{"className":116,"code":22668,"language":118,"meta":37,"style":37},"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",[120,22670,22671,22677,22681,22685,22689,22699,22703,22717,22722,22734,22738,22749,22759,22763,22767,22771,22781,22785,22798,22802,22806,22810,22814,22828,22836,22840,22844,22848,22852,22860,22864,22874,22879,22883,22891,22895,22901],{"__ignoreMap":37},[123,22672,22673,22675],{"class":125,"line":126},[123,22674,14704],{"class":129},[123,22676,15181],{"class":1972},[123,22678,22679],{"class":125,"line":45},[123,22680,1555],{"class":133},[123,22682,22683],{"class":125,"line":1189},[123,22684,14726],{"class":129},[123,22686,22687],{"class":125,"line":1204},[123,22688,22570],{"class":192},[123,22690,22691,22693,22695,22697],{"class":125,"line":1210},[123,22692,11030],{"class":129},[123,22694,22577],{"class":129},[123,22696,11395],{"class":1972},[123,22698,1985],{"class":133},[123,22700,22701],{"class":125,"line":1224},[123,22702,2039],{"class":133},[123,22704,22705,22708,22710,22712,22714],{"class":125,"line":1230},[123,22706,22707],{"class":133},"        m_A",[123,22709,179],{"class":129},[123,22711,445],{"class":182},[123,22713,189],{"class":133},[123,22715,22716],{"class":192}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[123,22718,22719],{"class":125,"line":1321},[123,22720,22721],{"class":192},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[123,22723,22724,22726,22728,22730,22732],{"class":125,"line":1327},[123,22725,22590],{"class":133},[123,22727,1178],{"class":129},[123,22729,22595],{"class":238},[123,22731,1178],{"class":129},[123,22733,1201],{"class":133},[123,22735,22736],{"class":125,"line":1339},[123,22737,2196],{"class":133},[123,22739,22740,22742,22744,22746],{"class":125,"line":1621},[123,22741,11030],{"class":129},[123,22743,2391],{"class":129},[123,22745,15458],{"class":133},[123,22747,22748],{"class":192}," \u002F\u002F静态成员变量\n",[123,22750,22751,22753,22756],{"class":125,"line":1626},[123,22752,1994],{"class":129},[123,22754,22755],{"class":133}," m_B;",[123,22757,22758],{"class":192}," \u002F\u002F非静态成员变量\n",[123,22760,22761],{"class":125,"line":1632},[123,22762,2409],{"emptyLinePlaceholder":50},[123,22764,22765],{"class":125,"line":1637},[123,22766,15232],{"class":129},[123,22768,22769],{"class":125,"line":1651},[123,22770,22383],{"class":192},[123,22772,22773,22775,22777,22779],{"class":125,"line":1656},[123,22774,11030],{"class":129},[123,22776,22577],{"class":129},[123,22778,13628],{"class":1972},[123,22780,1985],{"class":133},[123,22782,22783],{"class":125,"line":1662},[123,22784,2039],{"class":133},[123,22786,22787,22789,22791,22794,22796],{"class":125,"line":1683},[123,22788,3460],{"class":133},[123,22790,1178],{"class":129},[123,22792,22793],{"class":238},"\"这是私有权限下的静态函数调用\"",[123,22795,1178],{"class":129},[123,22797,1201],{"class":133},[123,22799,22800],{"class":125,"line":1688},[123,22801,2196],{"class":133},[123,22803,22804],{"class":125,"line":1702},[123,22805,2409],{"emptyLinePlaceholder":50},[123,22807,22808],{"class":125,"line":1707},[123,22809,2409],{"emptyLinePlaceholder":50},[123,22811,22812],{"class":125,"line":1736},[123,22813,4004],{"class":133},[123,22815,22816,22818,22820,22822,22824,22826],{"class":125,"line":1741},[123,22817,137],{"class":129},[123,22819,15579],{"class":1972},[123,22821,22213],{"class":133},[123,22823,179],{"class":129},[123,22825,325],{"class":182},[123,22827,1300],{"class":133},[123,22829,22830,22832,22834],{"class":125,"line":1758},[123,22831,5374],{"class":129},[123,22833,5598],{"class":1972},[123,22835,1985],{"class":133},[123,22837,22838],{"class":125,"line":1763},[123,22839,1555],{"class":133},[123,22841,22842],{"class":125,"line":1768},[123,22843,22624],{"class":192},[123,22845,22846],{"class":125,"line":1773},[123,22847,22629],{"class":192},[123,22849,22850],{"class":125,"line":1787},[123,22851,15323],{"class":133},[123,22853,22854,22856,22858],{"class":125,"line":1792},[123,22855,15876],{"class":133},[123,22857,11561],{"class":1972},[123,22859,5646],{"class":133},[123,22861,22862],{"class":125,"line":2586},[123,22863,22646],{"class":192},[123,22865,22866,22868,22870,22872],{"class":125,"line":2600},[123,22867,18529],{"class":1972},[123,22869,17742],{"class":133},[123,22871,11561],{"class":1972},[123,22873,5646],{"class":133},[123,22875,22876],{"class":125,"line":2608},[123,22877,22878],{"class":192},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[123,22880,22881],{"class":125,"line":2613},[123,22882,1574],{"class":133},[123,22884,22885,22887,22889],{"class":125,"line":2619},[123,22886,137],{"class":129},[123,22888,1982],{"class":1972},[123,22890,1985],{"class":133},[123,22892,22893],{"class":125,"line":2625},[123,22894,1555],{"class":133},[123,22896,22897,22899],{"class":125,"line":2630},[123,22898,5643],{"class":1972},[123,22900,5646],{"class":133},[123,22902,22903],{"class":125,"line":7958},[123,22904,1574],{"class":133},[94,22906,22908],{"id":22907},"_83c对象模型和this指针","8.3C++对象模型和this指针",[22008,22910,22912],{"id":22911},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,22914,22915],{},"在c++中，类内的成员变量和成员函数分开存储",[14,22917,22918],{},"只有非静态成员变量才属于类的对象上",[22920,22921,22923],"h5",{"id":22922},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[114,22925,22927],{"className":116,"code":22926,"language":118,"meta":37,"style":37},"#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",[120,22928,22929,22936,22946,22952,22956,22960,22964,22972,22976,22980,23003,23007,23015,23019,23025],{"__ignoreMap":37},[123,22930,22931,22933],{"class":125,"line":126},[123,22932,1958],{"class":129},[123,22934,22935],{"class":238},"\u003Ciostraem>\n",[123,22937,22938,22940,22942,22944],{"class":125,"line":45},[123,22939,1966],{"class":129},[123,22941,1969],{"class":129},[123,22943,1973],{"class":1972},[123,22945,1300],{"class":133},[123,22947,22948,22950],{"class":125,"line":1189},[123,22949,14704],{"class":129},[123,22951,15181],{"class":1972},[123,22953,22954],{"class":125,"line":1204},[123,22955,1555],{"class":133},[123,22957,22958],{"class":125,"line":1210},[123,22959,2409],{"emptyLinePlaceholder":50},[123,22961,22962],{"class":125,"line":1224},[123,22963,4004],{"class":133},[123,22965,22966,22968,22970],{"class":125,"line":1230},[123,22967,5374],{"class":129},[123,22969,5598],{"class":1972},[123,22971,1985],{"class":133},[123,22973,22974],{"class":125,"line":1321},[123,22975,1555],{"class":133},[123,22977,22978],{"class":125,"line":1327},[123,22979,15323],{"class":133},[123,22981,22982,22984,22986,22989,22991,22994,22996,22998,23000],{"class":125,"line":1339},[123,22983,1560],{"class":133},[123,22985,1178],{"class":129},[123,22987,22988],{"class":238},"\"size of p=\"",[123,22990,1178],{"class":129},[123,22992,22993],{"class":1972},"sizeoif",[123,22995,6549],{"class":133},[123,22997,1178],{"class":129},[123,22999,1248],{"class":133},[123,23001,23002],{"class":192}," \u002F\u002F查看这个空类的占用的内存空间\n",[123,23004,23005],{"class":125,"line":1621},[123,23006,1574],{"class":133},[123,23008,23009,23011,23013],{"class":125,"line":1626},[123,23010,137],{"class":129},[123,23012,1982],{"class":1972},[123,23014,1985],{"class":133},[123,23016,23017],{"class":125,"line":1632},[123,23018,1555],{"class":133},[123,23020,23021,23023],{"class":125,"line":1637},[123,23022,5643],{"class":1972},[123,23024,5646],{"class":133},[123,23026,23027],{"class":125,"line":1651},[123,23028,1574],{"class":133},[14,23030,23031],{},"输出结果为：size of p=1",[14,23033,23034],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23036,23037],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22920,23039,23041],{"id":23040},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[114,23043,23045],{"className":116,"code":23044,"language":118,"meta":37,"style":37},"#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",[120,23046,23047,23053,23063,23071,23075,23084,23088,23096,23100,23104,23123,23127,23131,23139,23143,23149],{"__ignoreMap":37},[123,23048,23049,23051],{"class":125,"line":126},[123,23050,1958],{"class":129},[123,23052,1961],{"class":238},[123,23054,23055,23057,23059,23061],{"class":125,"line":45},[123,23056,1966],{"class":129},[123,23058,1969],{"class":129},[123,23060,1973],{"class":1972},[123,23062,1300],{"class":133},[123,23064,23065,23067,23069],{"class":125,"line":1189},[123,23066,14704],{"class":129},[123,23068,15579],{"class":1972},[123,23070,2683],{"class":133},[123,23072,23073],{"class":125,"line":1204},[123,23074,1555],{"class":133},[123,23076,23077,23079,23081],{"class":125,"line":1210},[123,23078,1994],{"class":129},[123,23080,15458],{"class":133},[123,23082,23083],{"class":192},"\u002F\u002F非静态成员变量\n",[123,23085,23086],{"class":125,"line":1224},[123,23087,4004],{"class":133},[123,23089,23090,23092,23094],{"class":125,"line":1230},[123,23091,5374],{"class":129},[123,23093,5598],{"class":1972},[123,23095,1985],{"class":133},[123,23097,23098],{"class":125,"line":1321},[123,23099,1555],{"class":133},[123,23101,23102],{"class":125,"line":1327},[123,23103,15323],{"class":133},[123,23105,23106,23108,23110,23112,23114,23116,23118,23120],{"class":125,"line":1339},[123,23107,1560],{"class":133},[123,23109,1178],{"class":129},[123,23111,22988],{"class":238},[123,23113,1382],{"class":129},[123,23115,6549],{"class":133},[123,23117,1178],{"class":129},[123,23119,1248],{"class":133},[123,23121,23122],{"class":192}," \u002F\u002F查看不是空对象时占用多少内存\n",[123,23124,23125],{"class":125,"line":1621},[123,23126,2409],{"emptyLinePlaceholder":50},[123,23128,23129],{"class":125,"line":1626},[123,23130,1574],{"class":133},[123,23132,23133,23135,23137],{"class":125,"line":1632},[123,23134,137],{"class":129},[123,23136,1982],{"class":1972},[123,23138,1985],{"class":133},[123,23140,23141],{"class":125,"line":1637},[123,23142,1555],{"class":133},[123,23144,23145,23147],{"class":125,"line":1651},[123,23146,5643],{"class":1972},[123,23148,5646],{"class":133},[123,23150,23151],{"class":125,"line":1656},[123,23152,1574],{"class":133},[14,23154,23155],{},"输出结果：size of p=4",[14,23157,23158],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[77,23160,23161],{},[80,23162,23163],{},"如果加上非静态成员变量，Person类修改如下",[114,23165,23167],{"className":116,"code":23166,"language":118,"meta":37,"style":37},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[120,23168,23169,23175,23179,23185,23193,23197,23202],{"__ignoreMap":37},[123,23170,23171,23173],{"class":125,"line":126},[123,23172,14704],{"class":129},[123,23174,15181],{"class":1972},[123,23176,23177],{"class":125,"line":45},[123,23178,1555],{"class":133},[123,23180,23181,23183],{"class":125,"line":1189},[123,23182,1994],{"class":129},[123,23184,21402],{"class":133},[123,23186,23187,23189,23191],{"class":125,"line":1204},[123,23188,11030],{"class":129},[123,23190,2391],{"class":129},[123,23192,21409],{"class":133},[123,23194,23195],{"class":125,"line":1210},[123,23196,4004],{"class":133},[123,23198,23199],{"class":125,"line":1224},[123,23200,23201],{"class":192},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[123,23203,23204,23206,23208,23210,23212,23214],{"class":125,"line":1230},[123,23205,137],{"class":129},[123,23207,15579],{"class":1972},[123,23209,22422],{"class":133},[123,23211,179],{"class":129},[123,23213,325],{"class":182},[123,23215,1300],{"class":133},[14,23217,23218],{},"输出结果：4",[14,23220,23221],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[77,23223,23224],{"start":45},[80,23225,23226],{},"加上非静态成员函数",[114,23228,23230],{"className":116,"code":23229,"language":118,"meta":37,"style":37},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[120,23231,23232,23239,23243,23249,23257,23261,23265,23269],{"__ignoreMap":37},[123,23233,23234,23236],{"class":125,"line":126},[123,23235,14704],{"class":129},[123,23237,23238],{"class":1972},"  Person\n",[123,23240,23241],{"class":125,"line":45},[123,23242,1555],{"class":133},[123,23244,23245,23247],{"class":125,"line":1189},[123,23246,1994],{"class":129},[123,23248,21402],{"class":133},[123,23250,23251,23253,23255],{"class":125,"line":1204},[123,23252,14919],{"class":129},[123,23254,11395],{"class":1972},[123,23256,1985],{"class":133},[123,23258,23259],{"class":125,"line":1210},[123,23260,2039],{"class":133},[123,23262,23263],{"class":125,"line":1224},[123,23264,2409],{"emptyLinePlaceholder":50},[123,23266,23267],{"class":125,"line":1230},[123,23268,2196],{"class":133},[123,23270,23271],{"class":125,"line":1321},[123,23272,4004],{"class":133},[14,23274,23275],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[77,23277,23278],{"start":1189},[80,23279,23280],{},"加上静态成员函数",[114,23282,23284],{"className":116,"code":23283,"language":118,"meta":37,"style":37},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[120,23285,23286,23292,23296,23302,23310,23314,23318,23322,23333,23337,23341,23345],{"__ignoreMap":37},[123,23287,23288,23290],{"class":125,"line":126},[123,23289,14704],{"class":129},[123,23291,23238],{"class":1972},[123,23293,23294],{"class":125,"line":45},[123,23295,1555],{"class":133},[123,23297,23298,23300],{"class":125,"line":1189},[123,23299,1994],{"class":129},[123,23301,21402],{"class":133},[123,23303,23304,23306,23308],{"class":125,"line":1204},[123,23305,14919],{"class":129},[123,23307,11395],{"class":1972},[123,23309,1985],{"class":133},[123,23311,23312],{"class":125,"line":1210},[123,23313,2039],{"class":133},[123,23315,23316],{"class":125,"line":1224},[123,23317,2409],{"emptyLinePlaceholder":50},[123,23319,23320],{"class":125,"line":1230},[123,23321,2196],{"class":133},[123,23323,23324,23326,23328,23331],{"class":125,"line":1321},[123,23325,11030],{"class":129},[123,23327,22577],{"class":129},[123,23329,23330],{"class":1972}," func1",[123,23332,1985],{"class":133},[123,23334,23335],{"class":125,"line":1327},[123,23336,2039],{"class":133},[123,23338,23339],{"class":125,"line":1339},[123,23340,2409],{"emptyLinePlaceholder":50},[123,23342,23343],{"class":125,"line":1621},[123,23344,2196],{"class":133},[123,23346,23347],{"class":125,"line":1626},[123,23348,4004],{"class":133},[14,23350,23218],{},[14,23352,23353],{},"解释：静态成员函数也不属于类上",[5136,23355,7684],{},{"title":37,"searchDepth":45,"depth":45,"links":23357},[23358,23364],{"id":14655,"depth":45,"text":14656,"children":23359},[23360,23361,23362,23363],{"id":14659,"depth":1189,"text":14660},{"id":15384,"depth":1189,"text":15385},{"id":15556,"depth":1189,"text":15557},{"id":16015,"depth":1189,"text":16016},{"id":18387,"depth":45,"text":18388,"children":23365},[23366,23367,23368,23369,23370,23371,23372,23373,23374],{"id":18399,"depth":1189,"text":18400},{"id":18692,"depth":1189,"text":18693},{"id":19183,"depth":1189,"text":19184},{"id":20280,"depth":1189,"text":20281},{"id":20703,"depth":1189,"text":20704},{"id":21182,"depth":1189,"text":21183},{"id":21557,"depth":1189,"text":21558},{"id":21970,"depth":1189,"text":21971},{"id":22907,"depth":1189,"text":22908},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14620,"description":23375},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23382,"title":118,"body":23383,"description":47,"extension":48,"meta":23387,"navigation":50,"path":23389,"seo":23390,"stem":23391,"__hash__":23392},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23384,"toc":23385},[],{"title":37,"searchDepth":45,"depth":45,"links":23386},[],{"category":23388},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":118,"description":47},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23394,"title":23395,"body":23396,"description":37,"extension":48,"meta":23987,"navigation":50,"path":23988,"seo":23989,"stem":23990,"__hash__":23991},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23397,"toc":23969},[23398,23401,23405,23408,23411,23414,23432,23437,23440,23443,23446,23449,23454,23457,23462,23465,23468,23472,23475,23478,23484,23487,23505,23509,23513,23516,23521,23524,23528,23531,23544,23547,23551,23554,23557,23560,23585,23588,23597,23608,23623,23655,23659,23666,23674,23678,23681,23684,23689,23693,23696,23699,23704,23707,23711,23714,23717,23722,23725,23729,23734,23738,23805,23809,23812,23815,23818,23821,23824,23830,23851,23854,23868,23877,23881,23884,23887,23892,23895,23900,23905,23908,23911,23916,23921,23924,23929,23934,23937,23942,23947,23950,23953,23958,23961,23966],[10,23399,23395],{"id":23400},"_1强化学习基本认识",[65,23402,23404],{"id":23403},"_11什么是强化学习","1.1.什么是强化学习",[14,23406,23407],{},"强化学习有两部分组成：智能体和环境；",[14,23409,23410],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23412,23413],{},"强化学习与监督学习的区别:",[77,23415,23416,23419,23422,23425],{},[80,23417,23418],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[80,23420,23421],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[80,23423,23424],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[80,23426,23427,23428,23431],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[283,23429,23430],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23433,23434],{},[35,23435],{"alt":37,"src":23436},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23438,23439],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23441,23442],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23444,23445],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23447,23448],{},"获取奖励",[14,23450,23451],{},[35,23452],{"alt":37,"src":23453},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23455,23456],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23458,23459],{},[35,23460],{"alt":37,"src":23461},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23463,23464],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23466,23467],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[65,23469,23471],{"id":23470},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23473,23474],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23476,23477],{},"具身智能中的应用",[14,23479,23480,23483],{},[283,23481,23482],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23485,23486],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23488,23489,23490,23493,23494,23497,23498,23501,23502],{},"机器人是",[283,23491,23492],{},"躯体","，深度学习是",[283,23495,23496],{},"神经元****网络","，VLA是",[283,23499,23500],{},"通用的行为逻辑","，而强化学习是",[283,23503,23504],{},"教练",[65,23506,23508],{"id":23507},"_13序列决策","1.3.序列决策",[94,23510,23512],{"id":23511},"_131智能体与环境","1.3.1.智能体与环境",[14,23514,23515],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23517,23518],{},[35,23519],{"alt":37,"src":23520},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23522,23523],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[94,23525,23527],{"id":23526},"_132奖励","1.3.2.奖励",[14,23529,23530],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23532,23533,23534,23543],{},"取某个策略的表现如何。强化学习的目的就是",[283,23535,23536,23537,23542],{},"最大化",[283,23538,23539],{},[283,23540,23541],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23545,23546],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[94,23548,23550],{"id":23549},"_133序列决策","1.3.3.序列决策",[14,23552,23553],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,23555,23556],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,23558,23559],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,23561,23562,23566,23567,23569,23570,23572,23573,23575,23576,13805,23579,13805,23582],{},[23563,23564,23565],"em",{},"Ht"," = ",[23563,23568,730],{},"1*, a",[23563,23571,351],{},", r",[23563,23574,351],{},", . . . ,* ",[23563,23577,23578],{},"ot",[23563,23580,23581],{},", at ,",[23563,23583,23584],{},"rt",[14,23586,23587],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,23589,23590,23566,23593,1667,23595,563],{},[23563,23591,23592],{},"st",[23563,23594,186],{},[23563,23596,23565],{},[14,23598,23599,23600,23603,23604,23607],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[283,23601,23602],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[283,23605,23606],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,23609,23610,23611,23614,23615,23618,23619,23622],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[283,23612,23613],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[283,23616,23617],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23563,23620,23621],{},"S, A, T, R, Ω, O, γ",")。",[14,23624,23625,23626,23628,23629,23631,23632,134,23634,23637,23638,23640,23641,134,23644,23647,23648,23650,23651,23654],{},"其中 ",[23563,23627,823],{}," 表示状态空间，为隐变量，",[23563,23630,366],{}," 为动作空间，",[23563,23633,848],{},[23563,23635,23636],{},"s ′ |s, a",") 为状态转移概率，",[23563,23639,798],{}," 为奖励函数，",[23563,23642,23643],{},"Ω",[23563,23645,23646],{},"o|s, a",") 为观测概率，",[23563,23649,724],{}," 为观测空间，",[23563,23652,23653],{},"γ"," 为折扣因子。",[65,23656,23658],{"id":23657},"_14动作空间","1.4.动作空间",[14,23660,23661,23662,23665],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[283,23663,23664],{},"动作空间"," ，动作空间分为:",[77,23667,23668,23671],{},[80,23669,23670],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[80,23672,23673],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[65,23675,23677],{"id":23676},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,23679,23680],{},"由策略、价值函数、模型三部分组成",[14,23682,23683],{},"这三者组成马尔可夫决策过程",[14,23685,23686],{},[35,23687],{"alt":37,"src":23688},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[94,23690,23692],{"id":23691},"_151策略","1.5.1.策略",[14,23694,23695],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,23697,23698],{},"策略可分为两种：",[14,23700,23701],{},[35,23702],{"alt":37,"src":23703},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,23705,23706],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[94,23708,23710],{"id":23709},"_152价值函数","1.5.2.价值函数",[14,23712,23713],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,23715,23716],{},"价值函数中有一个折扣因子，类似于存款利息",[14,23718,23719],{},[35,23720],{"alt":37,"src":23721},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,23723,23724],{},"进入某个状态采取的最优动作可以通过Q函数得到",[94,23726,23728],{"id":23727},"_153模型","1.5.3.模型",[14,23730,23731],{},[35,23732],{"alt":37,"src":23733},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[65,23735,23737],{"id":23736},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[271,23739,23740,23751],{},[274,23741,23742],{},[277,23743,23744,23748],{},[280,23745,23747],{"align":23746},"left","类型",[280,23749,23750],{"align":23746},"特点",[318,23752,23753,23763,23773,23783,23795],{},[277,23754,23755,23760],{},[323,23756,23757],{"align":23746},[283,23758,23759],{},"基于价值的智能体",[323,23761,23762],{"align":23746},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[277,23764,23765,23770],{},[323,23766,23767],{"align":23746},[283,23768,23769],{},"基于策略的智能体",[323,23771,23772],{"align":23746},"直接学习策略，没有学习价值函数",[277,23774,23775,23780],{},[323,23776,23777],{"align":23746},[283,23778,23779],{},"演员-评论员智能体",[323,23781,23782],{"align":23746},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[277,23784,23785,23790],{},[323,23786,23787],{"align":23746},[283,23788,23789],{},"有模型强化学习智能体",[323,23791,23792],{"align":23746},[35,23793],{"alt":37,"src":23794},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[277,23796,23797,23802],{},[323,23798,23799],{"align":23746},[283,23800,23801],{},"免模型强化学习智能体",[323,23803,23804],{"align":23746},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[65,23806,23808],{"id":23807},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,23810,23811],{},"学习和规划是序列决策的两个基本问题",[14,23813,23814],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,23816,23817],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,23819,23820],{},"强化学习用到的库：Gym",[14,23822,23823],{},"Gym可以检验强化学习算法的优劣",[14,23825,23826,23829],{},[283,23827,23828],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[114,23831,23835],{"className":23832,"code":23833,"language":23834,"meta":37,"style":37},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[120,23836,23837],{"__ignoreMap":37},[123,23838,23839,23842,23845,23848],{"class":125,"line":126},[123,23840,23841],{"class":1972},"pip",[123,23843,23844],{"class":238}," install",[123,23846,23847],{"class":238}," gym==",[123,23849,23850],{"class":182},"0.25.2\n",[14,23852,23853],{},"显示图形界面需要",[114,23855,23857],{"className":23832,"code":23856,"language":23834,"meta":37,"style":37},"pip install pygame\n",[120,23858,23859],{"__ignoreMap":37},[123,23860,23861,23863,23865],{"class":125,"line":126},[123,23862,23841],{"class":1972},[123,23864,23844],{"class":238},[123,23866,23867],{"class":238}," pygame\n",[14,23869,23870,23871],{},"有关Gym库的相关文档介绍：",[372,23872,23876],{"href":23873,"rel":23874},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23875],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[65,23878,23880],{"id":23879},"_18一些补充基础概念","1.8.一些补充基础概念",[14,23882,23883],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,23885,23886],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,23888,23889],{},[35,23890],{"alt":37,"src":23891},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,23893,23894],{},"折扣率需要自己来设定",[14,23896,23897],{},[35,23898],{"alt":37,"src":23899},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[77,23901,23902],{},[80,23903,23904],{},"状态转移函数：",[14,23906,23907],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,23909,23910],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,23912,23913],{},[35,23914],{"alt":37,"src":23915},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[77,23917,23918],{"start":45},[80,23919,23920],{},"动作价值函数：",[14,23922,23923],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,23925,23926],{},[35,23927],{"alt":37,"src":23928},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[77,23930,23931],{"start":1189},[80,23932,23933],{},"最优动作价值函数：",[14,23935,23936],{},"这个函数是对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,23938,23939],{},[35,23940],{"alt":37,"src":23941},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[77,23943,23944],{"start":1204},[80,23945,23946],{},"状态价值函数:",[14,23948,23949],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,23951,23952],{},"它衡量的是“一个具体动作”的长期价值",[14,23954,23955],{},[35,23956],{"alt":37,"src":23957},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,23959,23960],{},"几个价值函数之间的比较：",[14,23962,23963],{},[35,23964],{"alt":37,"src":23965},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5136,23967,23968],{},"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":37,"searchDepth":45,"depth":45,"links":23970},[23971,23972,23973,23978,23979,23984,23985,23986],{"id":23403,"depth":45,"text":23404},{"id":23470,"depth":45,"text":23471},{"id":23507,"depth":45,"text":23508,"children":23974},[23975,23976,23977],{"id":23511,"depth":1189,"text":23512},{"id":23526,"depth":1189,"text":23527},{"id":23549,"depth":1189,"text":23550},{"id":23657,"depth":45,"text":23658},{"id":23676,"depth":45,"text":23677,"children":23980},[23981,23982,23983],{"id":23691,"depth":1189,"text":23692},{"id":23709,"depth":1189,"text":23710},{"id":23727,"depth":1189,"text":23728},{"id":23736,"depth":45,"text":23737},{"id":23807,"depth":45,"text":23808},{"id":23879,"depth":45,"text":23880},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23395,"description":37},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":23993,"title":23994,"body":23995,"description":24002,"extension":48,"meta":24013,"navigation":50,"path":24014,"seo":24015,"stem":24016,"__hash__":24017},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":23996,"toc":24011},[23997,24000,24003,24008],[10,23998,23994],{"id":23999},"_2马尔可夫决策过程",[14,24001,24002],{},"这是强化学习的基本框架",[14,24004,24005],{},[35,24006],{"alt":37,"src":24007},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,24009,24010],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":37,"searchDepth":45,"depth":45,"links":24012},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":23994,"description":24002},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24019,"title":24020,"body":24021,"description":37,"extension":48,"meta":24137,"navigation":50,"path":24138,"seo":24139,"stem":24140,"__hash__":24141},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24022,"toc":24132},[24023,24026,24030,24033,24038,24043,24046,24051,24054,24059,24062,24066,24071,24074,24079,24084,24089,24092,24096,24101,24104,24109,24114,24119,24124,24127],[10,24024,24020],{"id":24025},"_3动作价值函数",[65,24027,24029],{"id":24028},"_31dqn","3.1.DQN",[14,24031,24032],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24034,24035],{},[35,24036],{"alt":37,"src":24037},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24039,24040],{},[35,24041],{"alt":37,"src":24042},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24044,24045],{},"DQN算法的描述：",[14,24047,24048],{},[35,24049],{"alt":37,"src":24050},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24052,24053],{},"这里的Dense指的是全连接层",[14,24055,24056],{},[35,24057],{"alt":37,"src":24058},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24060,24061],{},"当前观测的状态为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算法",[65,24063,24065],{"id":24064},"_32dqn的举例","3.2.DQN的举例",[14,24067,24068],{},[35,24069],{"alt":37,"src":24070},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24072,24073],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24075,24076],{},[35,24077],{"alt":37,"src":24078},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24080,24081],{},[35,24082],{"alt":37,"src":24083},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24085,24086],{},[35,24087],{"alt":37,"src":24088},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24090,24091],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[65,24093,24095],{"id":24094},"_33td算法","3.3.TD算法",[14,24097,24098],{},[35,24099],{"alt":37,"src":24100},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24102,24103],{},"强化学习TD算法公式的粗略解释：",[14,24105,24106],{},[35,24107],{"alt":37,"src":24108},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24110,24111],{},[35,24112],{"alt":37,"src":24113},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24115,24116],{},[35,24117],{"alt":37,"src":24118},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24120,24121],{},[35,24122],{"alt":37,"src":24123},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24125,24126],{},"TD算法总结：",[14,24128,24129],{},[35,24130],{"alt":37,"src":24131},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":37,"searchDepth":45,"depth":45,"links":24133},[24134,24135,24136],{"id":24028,"depth":45,"text":24029},{"id":24064,"depth":45,"text":24065},{"id":24094,"depth":45,"text":24095},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24020,"description":37},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24143,"title":24144,"body":24145,"description":37,"extension":48,"meta":24378,"navigation":50,"path":24379,"seo":24380,"stem":24381,"__hash__":24382},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24146,"toc":24374},[24147,24150,24154,24157,24160,24165,24170,24173,24178,24183,24186,24191,24194,24199,24202,24207,24210,24215,24218,24223,24228,24231,24236,24239,24242,24247,24250,24255,24260,24264,24267,24270,24275,24280,24283,24288,24293,24296,24301,24304,24307,24312,24315,24320,24323,24328,24333,24336,24341,24346,24349,24354,24357,24362,24365],[10,24148,24144],{"id":24149},"_4策略学习",[65,24151,24153],{"id":24152},"_41概念描述","4.1.概念描述",[14,24155,24156],{},"用神经网络（策略网络）近似策略函数",[14,24158,24159],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24161,24162],{},[35,24163],{"alt":37,"src":24164},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24166,24167],{},[35,24168],{"alt":37,"src":24169},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24171,24172],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24174,24175],{},[35,24176],{"alt":37,"src":24177},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24179,24180],{},[35,24181],{"alt":37,"src":24182},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24184,24185],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24187,24188],{},[35,24189],{"alt":37,"src":24190},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24192,24193],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24195,24196],{},[35,24197],{"alt":37,"src":24198},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24200,24201],{},"改进theta要用到策略梯度算法",[14,24203,24204],{},[35,24205],{"alt":37,"src":24206},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24208,24209],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24211,24212],{},[35,24213],{"alt":37,"src":24214},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24216,24217],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24219,24220],{},[35,24221],{"alt":37,"src":24222},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24224,24225],{},[35,24226],{"alt":37,"src":24227},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24229,24230],{},"梯度公式总结：",[14,24232,24233],{},[35,24234],{"alt":37,"src":24235},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24237,24238],{},"两个公式的分别应用场景：",[14,24240,24241],{},"对于离散的动作：",[14,24243,24244],{},[35,24245],{"alt":37,"src":24246},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24248,24249],{},"对于连续的动作：",[14,24251,24252],{},[35,24253],{"alt":37,"src":24254},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24256,24257],{},[35,24258],{"alt":37,"src":24259},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[65,24261,24263],{"id":24262},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24265,24266],{},"使用蒙特卡洛来近似计算策略梯度",[14,24268,24269],{},"蒙特卡洛法的解释如下：",[14,24271,24272],{},[35,24273],{"alt":37,"src":24274},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24276,24277],{},[35,24278],{"alt":37,"src":24279},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24281,24282],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[77,24284,24285],{},[80,24286,24287],{},"方法一：reinforce算法",[14,24289,24290],{},[35,24291],{"alt":37,"src":24292},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24294,24295],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[77,24297,24298],{"start":45},[80,24299,24300],{},"方法二：actor-critic算法",[14,24302,24303],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24305,24306],{},"两个网络的构建：",[14,24308,24309],{},[35,24310],{"alt":37,"src":24311},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24313,24314],{},"actor网路：",[14,24316,24317],{},[35,24318],{"alt":37,"src":24319},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24321,24322],{},"critic网络",[14,24324,24325],{},[35,24326],{"alt":37,"src":24327},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[77,24329,24330],{"start":1189},[80,24331,24332],{},"网络的训练",[14,24334,24335],{},"网络描述",[14,24337,24338],{},[35,24339],{"alt":37,"src":24340},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24342,24343],{},[35,24344],{"alt":37,"src":24345},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24347,24348],{},"TD算法更新梯度：",[14,24350,24351],{},[35,24352],{"alt":37,"src":24353},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24355,24356],{},"策略网络更新梯度：",[14,24358,24359],{},[35,24360],{"alt":37,"src":24361},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24363,24364],{},"训练整个流程的具体描述：",[14,24366,24367,24370,24371],{},[35,24368],{"alt":37,"src":24369},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[35,24372],{"alt":37,"src":24373},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":37,"searchDepth":45,"depth":45,"links":24375},[24376,24377],{"id":24152,"depth":45,"text":24153},{"id":24262,"depth":45,"text":24263},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24144,"description":37},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24384,"title":24385,"body":24386,"description":24393,"extension":48,"meta":24443,"navigation":50,"path":24444,"seo":24445,"stem":24446,"__hash__":24447},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24387,"toc":24439},[24388,24391,24394,24398,24401,24406,24410,24413,24418,24421,24426,24431,24434],[10,24389,24385],{"id":24390},"_5alphago算法",[14,24392,24393],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[65,24395,24397],{"id":24396},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24399,24400],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24402,24403],{},[35,24404],{"alt":37,"src":24405},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[65,24407,24409],{"id":24408},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24411,24412],{},"采用强化学习的方式训练策略网络",[14,24414,24415],{},[35,24416],{"alt":37,"src":24417},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24419,24420],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24422,24423],{},[35,24424],{"alt":37,"src":24425},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24427,24428],{},[35,24429],{"alt":37,"src":24430},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24432,24433],{},"强化学习训练策略网络的总结：",[14,24435,24436],{},[35,24437],{"alt":37,"src":24438},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":37,"searchDepth":45,"depth":45,"links":24440},[24441,24442],{"id":24396,"depth":45,"text":24397},{"id":24408,"depth":45,"text":24409},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24385,"description":24393},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24449,"title":24450,"body":24451,"description":24458,"extension":48,"meta":24461,"navigation":50,"path":24462,"seo":24463,"stem":24464,"__hash__":24465},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24452,"toc":24459},[24453,24456],[10,24454,24450],{"id":24455},"_6价值网络",[14,24457,24458],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":37,"searchDepth":45,"depth":45,"links":24460},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24450,"description":24458},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24467,"title":24468,"body":24469,"description":24473,"extension":48,"meta":24474,"navigation":50,"path":24475,"seo":24476,"stem":24477,"__hash__":24478},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24470,"toc":24471},[],{"title":37,"searchDepth":45,"depth":45,"links":24472},[],"记录自己的强化学习笔记。",{"category":23388},"\u002Fwiki\u002F2025-12-04",{"title":24468,"description":24473},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24480,"title":24481,"body":24482,"description":47,"extension":48,"meta":24521,"navigation":50,"path":24522,"seo":24523,"stem":24524,"__hash__":24525},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24483,"toc":24519},[24484,24487,24490,24496,24499,24505,24508,24513,24516],[10,24485,24481],{"id":24486},"_1-项目概览与官方资源",[14,24488,24489],{},"官方文档：",[14,24491,24492],{},[372,24493,24494],{"href":24494,"rel":24495},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23875],[14,24497,24498],{},"官方代码仓库：",[14,24500,24501],{},[372,24502,24503],{"href":24503,"rel":24504},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23875],[14,24506,24507],{},"复现大体流程：",[14,24509,24510],{},[35,24511],{"alt":37,"src":24512},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24514,24515],{},"本教程的目标是打通这条链路：",[14,24517,24518],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":37,"searchDepth":45,"depth":45,"links":24520},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24481,"description":47},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24527,"title":24528,"body":24529,"description":47,"extension":48,"meta":24645,"navigation":50,"path":24646,"seo":24647,"stem":24648,"__hash__":24649},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24530,"toc":24640},[24531,24534,24538,24541,24548,24552,24555,24564,24574,24578,24608,24611,24637],[10,24532,24528],{"id":24533},"_2-环境准备与设备连接",[65,24535,24537],{"id":24536},"_21-系统与环境","2.1 系统与环境",[14,24539,24540],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24542,24543,24544,24547],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[120,24545,24546],{},"lerobot"," 依赖。",[65,24549,24551],{"id":24550},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,24553,24554],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[114,24556,24558],{"className":23832,"code":24557,"language":23834,"meta":37,"style":37},"lerobot-find-out\n",[120,24559,24560],{"__ignoreMap":37},[123,24561,24562],{"class":125,"line":126},[123,24563,24557],{"class":1972},[14,24565,24566,24567,346,24570,24573],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[120,24568,24569],{},"\u002Fdev\u002FttyACM0",[120,24571,24572],{},"\u002Fdev\u002FttyACM1","）。",[65,24575,24577],{"id":24576},"_23-串口授权","2.3 串口授权",[114,24579,24581],{"className":23832,"code":24580,"language":23834,"meta":37,"style":37},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[120,24582,24583,24597],{"__ignoreMap":37},[123,24584,24585,24588,24591,24594],{"class":125,"line":126},[123,24586,24587],{"class":1972},"sudo",[123,24589,24590],{"class":238}," chmod",[123,24592,24593],{"class":182}," 666",[123,24595,24596],{"class":238}," \u002Fdev\u002FttyACM0\n",[123,24598,24599,24601,24603,24605],{"class":125,"line":45},[123,24600,24587],{"class":1972},[123,24602,24590],{"class":238},[123,24604,24593],{"class":182},[123,24606,24607],{"class":238}," \u002Fdev\u002FttyACM1\n",[14,24609,24610],{},"说明：",[1141,24612,24613,24618,24624,24634],{},[80,24614,24615,24617],{},[120,24616,24587],{},"：以 root 权限执行命令。",[80,24619,24620,24623],{},[120,24621,24622],{},"chmod","：修改设备节点权限。",[80,24625,24626,24629,24630,24633],{},[120,24627,24628],{},"666","：",[120,24631,24632],{},"rw-rw-rw-","，所有用户可读写。",[80,24635,24636],{},"串口号必须替换为你机器上的真实端口。",[5136,24638,24639],{},"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":37,"searchDepth":45,"depth":45,"links":24641},[24642,24643,24644],{"id":24536,"depth":45,"text":24537},{"id":24550,"depth":45,"text":24551},{"id":24576,"depth":45,"text":24577},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24528,"description":47},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24651,"title":24652,"body":24653,"description":47,"extension":48,"meta":24814,"navigation":50,"path":24815,"seo":24816,"stem":24817,"__hash__":24818},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24654,"toc":24810},[24655,24659,24663,24669,24672,24729,24732,24736,24739,24807],[10,24656,24658],{"id":24657},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[65,24660,24662],{"id":24661},"_31-配置电机-id","3.1 配置电机 ID",[14,24664,24665,24666,24668],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[120,24667,351],{},"，需要改成机械臂链路里不冲突的编号。",[14,24670,24671],{},"方式一：用 LeRobot 命令逐步写入。",[114,24673,24675],{"className":23832,"code":24674,"language":23834,"meta":37,"style":37},"# 主臂舵机配置 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",[120,24676,24677,24682,24690,24697,24702,24706,24711,24717,24724],{"__ignoreMap":37},[123,24678,24679],{"class":125,"line":126},[123,24680,24681],{"class":192},"# 主臂舵机配置 ID\n",[123,24683,24684,24687],{"class":125,"line":45},[123,24685,24686],{"class":1972},"lerobot-setup-motors",[123,24688,24689],{"class":182}," \\\n",[123,24691,24692,24695],{"class":125,"line":1189},[123,24693,24694],{"class":182},"  --teleop.type=so101_leader",[123,24696,24689],{"class":182},[123,24698,24699],{"class":125,"line":1204},[123,24700,24701],{"class":182},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[123,24703,24704],{"class":125,"line":1210},[123,24705,2409],{"emptyLinePlaceholder":50},[123,24707,24708],{"class":125,"line":1224},[123,24709,24710],{"class":192},"# 从臂舵机配置 ID\n",[123,24712,24713,24715],{"class":125,"line":1230},[123,24714,24686],{"class":1972},[123,24716,24689],{"class":182},[123,24718,24719,24722],{"class":125,"line":1321},[123,24720,24721],{"class":182},"  --robot.type=so101_follower",[123,24723,24689],{"class":182},[123,24725,24726],{"class":125,"line":1327},[123,24727,24728],{"class":182},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,24730,24731],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[65,24733,24735],{"id":24734},"_32-机械臂校准","3.2 机械臂校准",[14,24737,24738],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[114,24740,24742],{"className":23832,"code":24741,"language":23834,"meta":37,"style":37},"# 主臂校准\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",[120,24743,24744,24749,24756,24762,24769,24774,24778,24783,24789,24795,24802],{"__ignoreMap":37},[123,24745,24746],{"class":125,"line":126},[123,24747,24748],{"class":192},"# 主臂校准\n",[123,24750,24751,24754],{"class":125,"line":45},[123,24752,24753],{"class":1972},"lerobot-calibrate",[123,24755,24689],{"class":182},[123,24757,24758,24760],{"class":125,"line":1189},[123,24759,24694],{"class":182},[123,24761,24689],{"class":182},[123,24763,24764,24767],{"class":125,"line":1204},[123,24765,24766],{"class":182},"  --teleop.port=\u002Fdev\u002FttyACM0",[123,24768,24689],{"class":182},[123,24770,24771],{"class":125,"line":1210},[123,24772,24773],{"class":182},"  --teleop.id=my_awesome_leader_arm\n",[123,24775,24776],{"class":125,"line":1224},[123,24777,2409],{"emptyLinePlaceholder":50},[123,24779,24780],{"class":125,"line":1230},[123,24781,24782],{"class":192},"# 从臂校准\n",[123,24784,24785,24787],{"class":125,"line":1321},[123,24786,24753],{"class":1972},[123,24788,24689],{"class":182},[123,24790,24791,24793],{"class":125,"line":1327},[123,24792,24721],{"class":182},[123,24794,24689],{"class":182},[123,24796,24797,24800],{"class":125,"line":1339},[123,24798,24799],{"class":182},"  --robot.port=\u002Fdev\u002FttyACM1",[123,24801,24689],{"class":182},[123,24803,24804],{"class":125,"line":1621},[123,24805,24806],{"class":182},"  --robot.id=my_awesome_follower_arm\n",[5136,24808,24809],{},"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":37,"searchDepth":45,"depth":45,"links":24811},[24812,24813],{"id":24661,"depth":45,"text":24662},{"id":24734,"depth":45,"text":24735},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24652,"description":47},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24820,"title":24821,"body":24822,"description":47,"extension":48,"meta":25013,"navigation":50,"path":25014,"seo":25015,"stem":25016,"__hash__":25017},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24823,"toc":25009},[24824,24827,24831,24878,24882,24895,24958,24961,25006],[10,24825,24821],{"id":24826},"_4-遥操与相机接入",[65,24828,24830],{"id":24829},"_41-不带相机遥操","4.1 不带相机遥操",[114,24832,24834],{"className":23832,"code":24833,"language":23834,"meta":37,"style":37},"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",[120,24835,24836,24843,24849,24855,24862,24868,24874],{"__ignoreMap":37},[123,24837,24838,24841],{"class":125,"line":126},[123,24839,24840],{"class":1972},"lerobot-teleoperate",[123,24842,24689],{"class":182},[123,24844,24845,24847],{"class":125,"line":45},[123,24846,24721],{"class":182},[123,24848,24689],{"class":182},[123,24850,24851,24853],{"class":125,"line":1189},[123,24852,24799],{"class":182},[123,24854,24689],{"class":182},[123,24856,24857,24860],{"class":125,"line":1204},[123,24858,24859],{"class":182},"  --robot.id=my_awesome_follower_arm",[123,24861,24689],{"class":182},[123,24863,24864,24866],{"class":125,"line":1210},[123,24865,24694],{"class":182},[123,24867,24689],{"class":182},[123,24869,24870,24872],{"class":125,"line":1224},[123,24871,24766],{"class":182},[123,24873,24689],{"class":182},[123,24875,24876],{"class":125,"line":1230},[123,24877,24773],{"class":182},[65,24879,24881],{"id":24880},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[114,24883,24885],{"className":23832,"code":24884,"language":23834,"meta":37,"style":37},"lerobot-find-cameras opencv\n",[120,24886,24887],{"__ignoreMap":37},[123,24888,24889,24892],{"class":125,"line":126},[123,24890,24891],{"class":1972},"lerobot-find-cameras",[123,24893,24894],{"class":238}," opencv\n",[114,24896,24898],{"className":23832,"code":24897,"language":23834,"meta":37,"style":37},"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",[120,24899,24900,24906,24912,24918,24924,24934,24940,24946,24953],{"__ignoreMap":37},[123,24901,24902,24904],{"class":125,"line":126},[123,24903,24840],{"class":1972},[123,24905,24689],{"class":182},[123,24907,24908,24910],{"class":125,"line":45},[123,24909,24721],{"class":182},[123,24911,24689],{"class":182},[123,24913,24914,24916],{"class":125,"line":1189},[123,24915,24799],{"class":182},[123,24917,24689],{"class":182},[123,24919,24920,24922],{"class":125,"line":1204},[123,24921,24859],{"class":182},[123,24923,24689],{"class":182},[123,24925,24926,24929,24932],{"class":125,"line":1210},[123,24927,24928],{"class":182},"  --robot.cameras=",[123,24930,24931],{"class":238},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[123,24933,24689],{"class":182},[123,24935,24936,24938],{"class":125,"line":1224},[123,24937,24694],{"class":182},[123,24939,24689],{"class":182},[123,24941,24942,24944],{"class":125,"line":1230},[123,24943,24766],{"class":182},[123,24945,24689],{"class":182},[123,24947,24948,24951],{"class":125,"line":1321},[123,24949,24950],{"class":182},"  --teleop.id=my_awesome_leader_arm",[123,24952,24689],{"class":182},[123,24954,24955],{"class":125,"line":1327},[123,24956,24957],{"class":182},"  --display_data=true\n",[14,24959,24960],{},"相机参数说明：",[1141,24962,24963,24969,24975,24984,24994,25000],{},[80,24964,24965,24968],{},[120,24966,24967],{},"front","：相机名称。",[80,24970,24971,24974],{},[120,24972,24973],{},"type: opencv","：相机驱动类型。",[80,24976,24977,24980,24981,24573],{},[120,24978,24979],{},"index_or_path","：设备编号或设备路径（如 ",[120,24982,24983],{},"\u002Fdev\u002Fvideo4",[80,24985,24986,24989,24990,24993],{},[120,24987,24988],{},"width"," \u002F ",[120,24991,24992],{},"height","：图像分辨率。",[80,24995,24996,24999],{},[120,24997,24998],{},"fps","：采样帧率。",[80,25001,25002,25005],{},[120,25003,25004],{},"--display_data=true","：启用实时可视化。",[5136,25007,25008],{},"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":37,"searchDepth":45,"depth":45,"links":25010},[25011,25012],{"id":24829,"depth":45,"text":24830},{"id":24880,"depth":45,"text":24881},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24821,"description":47},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25019,"title":25020,"body":25021,"description":47,"extension":48,"meta":25193,"navigation":50,"path":25194,"seo":25195,"stem":25196,"__hash__":25197},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25022,"toc":25188},[25023,25027,25031,25036,25041,25044,25086,25092,25096,25145,25150,25154,25157,25165,25170,25175,25180,25185],[10,25024,25026],{"id":25025},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[65,25028,25030],{"id":25029},"_51-生成访问令牌","5.1 生成访问令牌",[14,25032,25033],{},[35,25034],{"alt":37,"src":25035},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25037,25038],{},[35,25039],{"alt":37,"src":25040},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25042,25043],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[114,25045,25047],{"className":23832,"code":25046,"language":23834,"meta":37,"style":37},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[120,25048,25049,25062],{"__ignoreMap":37},[123,25050,25051,25054,25057,25059],{"class":125,"line":126},[123,25052,25053],{"class":129},"export",[123,25055,25056],{"class":133}," HF_TOKEN",[123,25058,179],{"class":129},[123,25060,25061],{"class":238},"\"your_huggingface_token\"\n",[123,25063,25064,25067,25070,25073,25076,25078,25081,25083],{"class":125,"line":45},[123,25065,25066],{"class":1972},"hf",[123,25068,25069],{"class":238}," auth",[123,25071,25072],{"class":238}," login",[123,25074,25075],{"class":182}," --token",[123,25077,9734],{"class":238},[123,25079,25080],{"class":133},"$HF_TOKEN",[123,25082,385],{"class":238},[123,25084,25085],{"class":182}," --add-to-git-credential\n",[14,25087,25088,25091],{},[120,25089,25090],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[65,25093,25095],{"id":25094},"_52-验证登录","5.2 验证登录",[114,25097,25099],{"className":23832,"code":25098,"language":23834,"meta":37,"style":37},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[120,25100,25101,25132],{"__ignoreMap":37},[123,25102,25103,25106,25108,25111,25113,25115,25118,25121,25124,25127,25130],{"class":125,"line":126},[123,25104,25105],{"class":133},"HF_USER",[123,25107,179],{"class":129},[123,25109,25110],{"class":133},"$(",[123,25112,25066],{"class":1972},[123,25114,25069],{"class":238},[123,25116,25117],{"class":238}," whoami",[123,25119,25120],{"class":129}," |",[123,25122,25123],{"class":1972}," head",[123,25125,25126],{"class":182}," -n",[123,25128,25129],{"class":182}," 1",[123,25131,140],{"class":133},[123,25133,25134,25137,25139,25142],{"class":125,"line":45},[123,25135,25136],{"class":182},"echo",[123,25138,9734],{"class":238},[123,25140,25141],{"class":133},"$HF_USER",[123,25143,25144],{"class":238},"\"\n",[14,25146,25147],{},[35,25148],{"alt":37,"src":25149},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[65,25151,25153],{"id":25152},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25155,25156],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1141,25158,25159,25162],{},[80,25160,25161],{},"Dataset Repo（用于上传演示数据）",[80,25163,25164],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25166,25167],{},[35,25168],{"alt":37,"src":25169},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25171,25172],{},[35,25173],{"alt":37,"src":25174},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25176,25177],{},[35,25178],{"alt":37,"src":25179},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25181,25182],{},[35,25183],{"alt":37,"src":25184},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5136,25186,25187],{},"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":37,"searchDepth":45,"depth":45,"links":25189},[25190,25191,25192],{"id":25029,"depth":45,"text":25030},{"id":25094,"depth":45,"text":25095},{"id":25152,"depth":45,"text":25153},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25020,"description":47},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25199,"title":25200,"body":25201,"description":47,"extension":48,"meta":25398,"navigation":50,"path":25399,"seo":25400,"stem":25401,"__hash__":25402},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25202,"toc":25393},[25203,25207,25211,25307,25315,25320,25324,25340,25343,25347,25390],[10,25204,25206],{"id":25205},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[65,25208,25210],{"id":25209},"_61-录制示教数据","6.1 录制示教数据",[114,25212,25214],{"className":23832,"code":25213,"language":23834,"meta":37,"style":37},"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",[120,25215,25216,25223,25229,25235,25241,25250,25256,25262,25268,25275,25285,25292,25302],{"__ignoreMap":37},[123,25217,25218,25221],{"class":125,"line":126},[123,25219,25220],{"class":1972},"lerobot-record",[123,25222,24689],{"class":182},[123,25224,25225,25227],{"class":125,"line":45},[123,25226,24721],{"class":182},[123,25228,24689],{"class":182},[123,25230,25231,25233],{"class":125,"line":1189},[123,25232,24799],{"class":182},[123,25234,24689],{"class":182},[123,25236,25237,25239],{"class":125,"line":1204},[123,25238,24859],{"class":182},[123,25240,24689],{"class":182},[123,25242,25243,25245,25248],{"class":125,"line":1210},[123,25244,24928],{"class":182},[123,25246,25247],{"class":238},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[123,25249,24689],{"class":182},[123,25251,25252,25254],{"class":125,"line":1224},[123,25253,24694],{"class":182},[123,25255,24689],{"class":182},[123,25257,25258,25260],{"class":125,"line":1230},[123,25259,24766],{"class":182},[123,25261,24689],{"class":182},[123,25263,25264,25266],{"class":125,"line":1321},[123,25265,24950],{"class":182},[123,25267,24689],{"class":182},[123,25269,25270,25273],{"class":125,"line":1327},[123,25271,25272],{"class":182},"  --display_data=true",[123,25274,24689],{"class":182},[123,25276,25277,25280,25283],{"class":125,"line":1339},[123,25278,25279],{"class":182},"  --dataset.repo_id=",[123,25281,25282],{"class":238},"\"Embodied-AI-6\u002Fso101_test\"",[123,25284,24689],{"class":182},[123,25286,25287,25290],{"class":125,"line":1621},[123,25288,25289],{"class":182},"  --dataset.num_episodes=10",[123,25291,24689],{"class":182},[123,25293,25294,25297,25300],{"class":125,"line":1626},[123,25295,25296],{"class":182},"  --dataset.single_task=",[123,25298,25299],{"class":238},"\"Grab the green cube\"",[123,25301,24689],{"class":182},[123,25303,25304],{"class":125,"line":1632},[123,25305,25306],{"class":182},"  --resume=true\n",[1141,25308,25309],{},[80,25310,25311,25314],{},[120,25312,25313],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25316,25317],{},[35,25318],{"alt":37,"src":25319},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[65,25321,25323],{"id":25322},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[114,25325,25327],{"className":23832,"code":25326,"language":23834,"meta":37,"style":37},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[120,25328,25329],{"__ignoreMap":37},[123,25330,25331,25334,25337],{"class":125,"line":126},[123,25332,25333],{"class":1972},"rm",[123,25335,25336],{"class":182}," -rf",[123,25338,25339],{"class":238}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25341,25342],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[65,25344,25346],{"id":25345},"_63-回放指定-episode","6.3 回放指定 episode",[114,25348,25350],{"className":23832,"code":25349,"language":23834,"meta":37,"style":37},"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",[120,25351,25352,25359,25365,25371,25377,25385],{"__ignoreMap":37},[123,25353,25354,25357],{"class":125,"line":126},[123,25355,25356],{"class":1972},"lerobot-replay",[123,25358,24689],{"class":182},[123,25360,25361,25363],{"class":125,"line":45},[123,25362,24721],{"class":182},[123,25364,24689],{"class":182},[123,25366,25367,25369],{"class":125,"line":1189},[123,25368,24799],{"class":182},[123,25370,24689],{"class":182},[123,25372,25373,25375],{"class":125,"line":1204},[123,25374,24859],{"class":182},[123,25376,24689],{"class":182},[123,25378,25379,25381,25383],{"class":125,"line":1210},[123,25380,25279],{"class":182},[123,25382,25282],{"class":238},[123,25384,24689],{"class":182},[123,25386,25387],{"class":125,"line":1224},[123,25388,25389],{"class":182},"  --dataset.episode=0\n",[5136,25391,25392],{},"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":37,"searchDepth":45,"depth":45,"links":25394},[25395,25396,25397],{"id":25209,"depth":45,"text":25210},{"id":25322,"depth":45,"text":25323},{"id":25345,"depth":45,"text":25346},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25200,"description":47},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25404,"title":25405,"body":25406,"description":47,"extension":48,"meta":25534,"navigation":50,"path":25535,"seo":25536,"stem":25537,"__hash__":25538},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25407,"toc":25532},[25408,25412,25475,25478,25525,25530],[10,25409,25411],{"id":25410},"_7-act-模型训练","7. ACT 模型训练",[114,25413,25415],{"className":23832,"code":25414,"language":23834,"meta":37,"style":37},"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",[120,25416,25417,25424,25432,25439,25446,25453,25460,25467],{"__ignoreMap":37},[123,25418,25419,25422],{"class":125,"line":126},[123,25420,25421],{"class":1972},"lerobot-train",[123,25423,24689],{"class":182},[123,25425,25426,25428,25430],{"class":125,"line":45},[123,25427,25279],{"class":182},[123,25429,25282],{"class":238},[123,25431,24689],{"class":182},[123,25433,25434,25437],{"class":125,"line":1189},[123,25435,25436],{"class":182},"  --policy.type=act",[123,25438,24689],{"class":182},[123,25440,25441,25444],{"class":125,"line":1204},[123,25442,25443],{"class":182},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[123,25445,24689],{"class":182},[123,25447,25448,25451],{"class":125,"line":1210},[123,25449,25450],{"class":182},"  --job_name=act_so101_test",[123,25452,24689],{"class":182},[123,25454,25455,25458],{"class":125,"line":1224},[123,25456,25457],{"class":182},"  --policy.device=cuda",[123,25459,24689],{"class":182},[123,25461,25462,25465],{"class":125,"line":1230},[123,25463,25464],{"class":182},"  --wandb.enable=false",[123,25466,24689],{"class":182},[123,25468,25469,25472],{"class":125,"line":1321},[123,25470,25471],{"class":182},"  --policy.repo_id=",[123,25473,25474],{"class":238},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25476,25477],{},"参数说明：",[1141,25479,25480,25486,25492,25498,25504,25513,25519],{},[80,25481,25482,25485],{},[120,25483,25484],{},"--dataset.repo_id","：训练数据集仓库。",[80,25487,25488,25491],{},[120,25489,25490],{},"--policy.type=act","：策略模型类型为 ACT。",[80,25493,25494,25497],{},[120,25495,25496],{},"--output_dir","：本地训练输出目录。",[80,25499,25500,25503],{},[120,25501,25502],{},"--job_name","：训练任务名称。",[80,25505,25506,25509,25510,24573],{},[120,25507,25508],{},"--policy.device","：训练设备（如 ",[120,25511,25512],{},"cuda",[80,25514,25515,25518],{},[120,25516,25517],{},"--wandb.enable","：是否启用 WandB 可视化。",[80,25520,25521,25524],{},[120,25522,25523],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25526,25527],{},[35,25528],{"alt":37,"src":25529},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5136,25531,25392],{},{"title":37,"searchDepth":45,"depth":45,"links":25533},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25405,"description":47},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25540,"title":25541,"body":25542,"description":47,"extension":48,"meta":25629,"navigation":50,"path":25630,"seo":25631,"stem":25632,"__hash__":25633},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25543,"toc":25627},[25544,25547,25550,25617,25625],[10,25545,25541],{"id":25546},"_8-策略部署与自动采集",[14,25548,25549],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[114,25551,25553],{"className":23832,"code":25552,"language":23834,"meta":37,"style":37},"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",[120,25554,25555,25561,25567,25573,25581,25587,25594,25602,25610],{"__ignoreMap":37},[123,25556,25557,25559],{"class":125,"line":126},[123,25558,25220],{"class":1972},[123,25560,24689],{"class":182},[123,25562,25563,25565],{"class":125,"line":45},[123,25564,24721],{"class":182},[123,25566,24689],{"class":182},[123,25568,25569,25571],{"class":125,"line":1189},[123,25570,24799],{"class":182},[123,25572,24689],{"class":182},[123,25574,25575,25577,25579],{"class":125,"line":1204},[123,25576,24928],{"class":182},[123,25578,25247],{"class":238},[123,25580,24689],{"class":182},[123,25582,25583,25585],{"class":125,"line":1210},[123,25584,24859],{"class":182},[123,25586,24689],{"class":182},[123,25588,25589,25592],{"class":125,"line":1224},[123,25590,25591],{"class":182},"  --display_data=false",[123,25593,24689],{"class":182},[123,25595,25596,25598,25600],{"class":125,"line":1230},[123,25597,25279],{"class":182},[123,25599,25282],{"class":238},[123,25601,24689],{"class":182},[123,25603,25604,25606,25608],{"class":125,"line":1321},[123,25605,25296],{"class":182},[123,25607,25299],{"class":238},[123,25609,24689],{"class":182},[123,25611,25612,25615],{"class":125,"line":1327},[123,25613,25614],{"class":182},"  --policy.path=",[123,25616,25474],{"class":238},[1141,25618,25619],{},[80,25620,25621,25624],{},[120,25622,25623],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5136,25626,25392],{},{"title":37,"searchDepth":45,"depth":45,"links":25628},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25541,"description":47},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25635,"title":25636,"body":25637,"description":47,"extension":48,"meta":25666,"navigation":50,"path":25667,"seo":25668,"stem":25669,"__hash__":25670},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25638,"toc":25664},[25639,25643,25646,25652,25655,25661],[10,25640,25642],{"id":25641},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,25644,25645],{},"项目地址：",[14,25647,25648],{},[372,25649,25650],{"href":25650,"rel":25651},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23875],[14,25653,25654],{},"参考教程：",[14,25656,25657],{},[372,25658,25659],{"href":25659,"rel":25660},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23875],[14,25662,25663],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":37,"searchDepth":45,"depth":45,"links":25665},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25636,"description":47},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25672,"title":25673,"body":25674,"description":25678,"extension":48,"meta":25679,"navigation":50,"path":25680,"seo":25681,"stem":25682,"__hash__":25683},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25675,"toc":25676},[],{"title":37,"searchDepth":45,"depth":45,"links":25677},[],"act复现",{"category":23388},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25673,"description":25678},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25685,"title":25686,"body":25687,"description":37,"extension":48,"meta":25989,"navigation":50,"path":25990,"seo":25991,"stem":25992,"__hash__":25993},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25688,"toc":25981},[25689,25692,25696,25706,25713,25720,25723,25730,25733,25736,25740,25752,25756,25802,25805,25808,25811,25814,25817,25821,25859,25865,25869,25923,25928,25931,25934,25939,25942,25947,25950,25953,25957,25960,25963,25967],[10,25690,25686],{"id":25691},"_1简介",[94,25693,25695],{"id":25694},"_11什么是-docker","1.1什么是 Docker？",[14,25697,25698,25699,25702,25703],{},"Docker 是一个开源的 ",[283,25700,25701],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[283,25704,25705],{},"一次构建，到处运行。",[14,25707,25708,25709,25712],{},"“ ",[283,25710,25711],{},"一次构建，到处运行"," ”也就是说：",[77,25714,25715],{},[80,25716,25717],{},[283,25718,25719],{},"之前：",[14,25721,25722],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[77,25724,25725],{},[80,25726,25727],{},[283,25728,25729],{},"使用docker后：",[14,25731,25732],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,25734,25735],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[94,25737,25739],{"id":25738},"_12它是怎么工作的","1.2.它是怎么工作的？",[1141,25741,25742,25745],{},[80,25743,25744],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[80,25746,25747,25748,25751],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[283,25749,25750],{},"无论在哪运行都一样稳定"," 。",[94,25753,25755],{"id":25754},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[271,25757,25758,25768],{},[274,25759,25760],{},[277,25761,25762,25765],{},[280,25763,25764],{"align":23746},"概念",[280,25766,25767],{"align":23746},"解释",[318,25769,25770,25778,25786,25794],{},[277,25771,25772,25775],{},[323,25773,25774],{"align":23746},"镜像",[323,25776,25777],{"align":23746},"Image，运行容器的模板，像是一个应用快照",[277,25779,25780,25783],{},[323,25781,25782],{"align":23746},"容器",[323,25784,25785],{"align":23746},"Container，运行中的镜像实例，有自己的文件系统、网络等",[277,25787,25788,25791],{},[323,25789,25790],{"align":23746},"Dockerfile",[323,25792,25793],{"align":23746},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[277,25795,25796,25799],{},[323,25797,25798],{"align":23746},"仓库",[323,25800,25801],{"align":23746},"Registry，存放镜像的地方，比如 Docker Hub",[14,25803,25804],{},"抽象化理解:",[14,25806,25807],{},"Docker镜像≈C++类",[14,25809,25810],{},"Docker容器≈C++类实例(即对象)",[14,25812,25813],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,25815,25816],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[94,25818,25820],{"id":25819},"_14类比理解","1.4.类比理解",[271,25822,25823,25833],{},[274,25824,25825],{},[277,25826,25827,25830],{},[280,25828,25829],{"align":23746},"传统部署",[280,25831,25832],{"align":23746},"Docker部署",[318,25834,25835,25843,25851],{},[277,25836,25837,25840],{},[323,25838,25839],{"align":23746},"手动安装依赖、调试版本不一致问题",[323,25841,25842],{"align":23746},"一次打包环境和代码",[277,25844,25845,25848],{},[323,25846,25847],{"align":23746},"程序“裸奔”跑在系统上",[323,25849,25850],{"align":23746},"程序“穿着容器”隔离运行",[277,25852,25853,25856],{},[323,25854,25855],{"align":23746},"容易“在我电脑上能跑”",[323,25857,25858],{"align":23746},"保证“无论在哪都能跑”",[14,25860,25861,25862],{},"就像快递包裹： ",[283,25863,25864],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[94,25866,25868],{"id":25867},"_15docker-的核心优势","1.5.Docker 的核心优势",[271,25870,25871,25881],{},[274,25872,25873],{},[277,25874,25875,25878],{},[280,25876,25877],{"align":23746},"优势",[280,25879,25880],{"align":23746},"说明",[318,25882,25883,25891,25899,25907,25915],{},[277,25884,25885,25888],{},[323,25886,25887],{"align":23746},"轻量级",[323,25889,25890],{"align":23746},"基于系统内核共享，启动速度快，占资源少",[277,25892,25893,25896],{},[323,25894,25895],{"align":23746},"跨平台",[323,25897,25898],{"align":23746},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[277,25900,25901,25904],{},[323,25902,25903],{"align":23746},"易于迁移部署",[323,25905,25906],{"align":23746},"应用和环境一起封装，不怕依赖不一致",[277,25908,25909,25912],{},[323,25910,25911],{"align":23746},"易于版本控制",[323,25913,25914],{"align":23746},"镜像版本可控，支持回滚",[277,25916,25917,25920],{},[323,25918,25919],{"align":23746},"生态丰富",[323,25921,25922],{"align":23746},"Docker Hub 上有成千上万的现成镜像可用",[77,25924,25925],{},[80,25926,25927],{},"在Linux上可以几乎实现无性能损失。",[14,25929,25930],{},"docker里的发行版和本机共用Linux内核。",[14,25932,25933],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[77,25935,25936],{},[80,25937,25938],{},"可以快速部署在绝大多数Linux发行版",[14,25940,25941],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[77,25943,25944],{},[80,25945,25946],{},"配置环境简单",[14,25948,25949],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,25951,25952],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[77,25954,25955],{},[80,25956,25919],{},[14,25958,25959],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,25961,25962],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[94,25964,25966],{"id":25965},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1141,25968,25969,25972,25975,25978],{},[80,25970,25971],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[80,25973,25974],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[80,25976,25977],{},"微服务架构：每个服务一个容器，灵活组合",[80,25979,25980],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":37,"searchDepth":45,"depth":45,"links":25982},[25983,25984,25985,25986,25987,25988],{"id":25694,"depth":1189,"text":25695},{"id":25738,"depth":1189,"text":25739},{"id":25754,"depth":1189,"text":25755},{"id":25819,"depth":1189,"text":25820},{"id":25867,"depth":1189,"text":25868},{"id":25965,"depth":1189,"text":25966},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25686,"description":37},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":25995,"title":25996,"body":25997,"description":37,"extension":48,"meta":26730,"navigation":50,"path":26731,"seo":26732,"stem":26733,"__hash__":26734},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":25998,"toc":26725},[25999,26002,26006,26009,26012,26018,26024,26028,26037,26040,26097,26100,26151,26154,26237,26240,26277,26281,26292,26305,26312,26315,26395,26398,26448,26451,26474,26478,26485,26488,26504,26510,26513,26529,26535,26538,26554,26568,26574,26594,26600,26603,26615,26621,26624,26638,26644,26647,26667,26672,26675,26678,26682,26685,26688,26691,26698,26701,26704,26707,26712,26717,26722],[10,26000,25996],{"id":26001},"_2安装docker",[94,26003,26005],{"id":26004},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,26007,26008],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,26010,26011],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,26013,26014],{},[372,26015,26016],{"href":26016,"rel":26017},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23875],[14,26019,26020],{},[372,26021,26022],{"href":26022,"rel":26023},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23875],[22008,26025,26027],{"id":26026},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26029,26030,26031,26036],{},"以下内容根据 ",[372,26032,26035],{"href":26033,"rel":26034},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23875],"官方文档"," 修改而来。",[14,26038,26039],{},"如果你过去安装过 docker，先删掉：",[114,26041,26043],{"className":23832,"code":26042,"language":23834,"meta":37,"style":37},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[120,26044,26045],{"__ignoreMap":37},[123,26046,26047,26049,26052,26055,26058,26061,26064,26067,26070,26073,26076,26079,26082,26085,26088,26091,26094],{"class":125,"line":126},[123,26048,3034],{"class":129},[123,26050,26051],{"class":133}," pkg ",[123,26053,26054],{"class":129},"in",[123,26056,26057],{"class":238}," docker.io",[123,26059,26060],{"class":238}," docker-doc",[123,26062,26063],{"class":238}," docker-compose",[123,26065,26066],{"class":238}," docker-compose-v2",[123,26068,26069],{"class":238}," podman-docker",[123,26071,26072],{"class":238}," containerd",[123,26074,26075],{"class":238}," runc",[123,26077,26078],{"class":133},"; ",[123,26080,26081],{"class":129},"do",[123,26083,26084],{"class":1972}," sudo",[123,26086,26087],{"class":238}," apt-get",[123,26089,26090],{"class":238}," remove",[123,26092,26093],{"class":133}," $pkg; ",[123,26095,26096],{"class":129},"done\n",[14,26098,26099],{},"首先安装依赖和GPG：",[114,26101,26105],{"className":26102,"code":26103,"language":26104,"meta":37,"style":37},"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",[120,26106,26107,26112,26117,26122,26127,26132,26137,26141,26146],{"__ignoreMap":37},[123,26108,26109],{"class":125,"line":126},[123,26110,26111],{},"# Add Docker's official GPG key:\n",[123,26113,26114],{"class":125,"line":45},[123,26115,26116],{},"sudo apt-get update\n",[123,26118,26119],{"class":125,"line":1189},[123,26120,26121],{},"sudo apt-get install ca-certificates curl\n",[123,26123,26124],{"class":125,"line":1204},[123,26125,26126],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[123,26128,26129],{"class":125,"line":1210},[123,26130,26131],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[123,26133,26134],{"class":125,"line":1224},[123,26135,26136],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[123,26138,26139],{"class":125,"line":1230},[123,26140,2409],{"emptyLinePlaceholder":50},[123,26142,26143],{"class":125,"line":1321},[123,26144,26145],{},"# 如果上面这行报错就弄下面这行\n",[123,26147,26148],{"class":125,"line":1327},[123,26149,26150],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26152,26153],{},"信任 Docker 的 GPG 公钥并添加仓库：",[114,26155,26157],{"className":23832,"code":26156,"language":23834,"meta":37,"style":37},"# 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",[120,26158,26159,26164,26170,26187,26220],{"__ignoreMap":37},[123,26160,26161],{"class":125,"line":126},[123,26162,26163],{"class":192},"# Add the repository to Apt sources:\n",[123,26165,26166,26168],{"class":125,"line":45},[123,26167,25136],{"class":182},[123,26169,24689],{"class":182},[123,26171,26172,26175,26178,26181,26184],{"class":125,"line":1189},[123,26173,26174],{"class":238},"  \"deb [arch=$(",[123,26176,26177],{"class":1972},"dpkg",[123,26179,26180],{"class":182}," --print-architecture",[123,26182,26183],{"class":238},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[123,26185,26186],{"class":182},"\\\n",[123,26188,26189,26192,26194,26196,26199,26202,26204,26206,26209,26211,26213,26216,26218],{"class":125,"line":1204},[123,26190,26191],{"class":238},"  \"",[123,26193,25110],{"class":133},[123,26195,692],{"class":182},[123,26197,26198],{"class":238}," \u002Fetc\u002Fos-release",[123,26200,26201],{"class":133}," && ",[123,26203,25136],{"class":182},[123,26205,9734],{"class":238},[123,26207,26208],{"class":133},"$VERSION_CODENAME",[123,26210,385],{"class":238},[123,26212,563],{"class":133},[123,26214,26215],{"class":238},"\" stable\"",[123,26217,25120],{"class":129},[123,26219,24689],{"class":182},[123,26221,26222,26225,26228,26231,26234],{"class":125,"line":1210},[123,26223,26224],{"class":1972},"  sudo",[123,26226,26227],{"class":238}," tee",[123,26229,26230],{"class":238}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[123,26232,26233],{"class":129}," >",[123,26235,26236],{"class":238}," \u002Fdev\u002Fnull\n",[14,26238,26239],{},"最后安装",[114,26241,26243],{"className":23832,"code":26242,"language":23834,"meta":37,"style":37},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[120,26244,26245,26254],{"__ignoreMap":37},[123,26246,26247,26249,26251],{"class":125,"line":126},[123,26248,24587],{"class":1972},[123,26250,26087],{"class":238},[123,26252,26253],{"class":238}," update\n",[123,26255,26256,26258,26260,26262,26265,26268,26271,26274],{"class":125,"line":45},[123,26257,24587],{"class":1972},[123,26259,26087],{"class":238},[123,26261,23844],{"class":238},[123,26263,26264],{"class":238}," docker-ce",[123,26266,26267],{"class":238}," docker-ce-cli",[123,26269,26270],{"class":238}," containerd.io",[123,26272,26273],{"class":238}," docker-buildx-plugin",[123,26275,26276],{"class":238}," docker-compose-plugin\n",[22008,26278,26280],{"id":26279},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26282,26283,26284,26287,26288,26291],{},"查看自己自己包管理工具版本（dnf是 ",[283,26285,26286],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[283,26289,26290],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[114,26293,26295],{"className":23832,"code":26294,"language":23834,"meta":37,"style":37},"dnf --version\n",[120,26296,26297],{"__ignoreMap":37},[123,26298,26299,26302],{"class":125,"line":126},[123,26300,26301],{"class":1972},"dnf",[123,26303,26304],{"class":182}," --version\n",[14,26306,26030,26307,26311],{},[372,26308,26035],{"href":26309,"rel":26310},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23875]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26313,26314],{},"如果你之前安装过 docker，请先删掉",[114,26316,26318],{"className":23832,"code":26317,"language":23834,"meta":37,"style":37},"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",[120,26319,26320,26334,26341,26348,26355,26362,26369,26376,26383,26390],{"__ignoreMap":37},[123,26321,26322,26324,26327,26329,26332],{"class":125,"line":126},[123,26323,24587],{"class":1972},[123,26325,26326],{"class":238}," dnf",[123,26328,26090],{"class":238},[123,26330,26331],{"class":238}," docker",[123,26333,24689],{"class":182},[123,26335,26336,26339],{"class":125,"line":45},[123,26337,26338],{"class":238},"                  docker-client",[123,26340,24689],{"class":182},[123,26342,26343,26346],{"class":125,"line":1189},[123,26344,26345],{"class":238},"                  docker-client-latest",[123,26347,24689],{"class":182},[123,26349,26350,26353],{"class":125,"line":1204},[123,26351,26352],{"class":238},"                  docker-common",[123,26354,24689],{"class":182},[123,26356,26357,26360],{"class":125,"line":1210},[123,26358,26359],{"class":238},"                  docker-latest",[123,26361,24689],{"class":182},[123,26363,26364,26367],{"class":125,"line":1224},[123,26365,26366],{"class":238},"                  docker-latest-logrotate",[123,26368,24689],{"class":182},[123,26370,26371,26374],{"class":125,"line":1230},[123,26372,26373],{"class":238},"                  docker-logrotate",[123,26375,24689],{"class":182},[123,26377,26378,26381],{"class":125,"line":1321},[123,26379,26380],{"class":238},"                  docker-selinux",[123,26382,24689],{"class":182},[123,26384,26385,26388],{"class":125,"line":1327},[123,26386,26387],{"class":238},"                  docker-engine-selinux",[123,26389,24689],{"class":182},[123,26391,26392],{"class":125,"line":1339},[123,26393,26394],{"class":238},"                  docker-engine\n",[14,26396,26397],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[114,26399,26401],{"className":23832,"code":26400,"language":23834,"meta":37,"style":37},"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",[120,26402,26403,26417,26432],{"__ignoreMap":37},[123,26404,26405,26407,26409,26412,26414],{"class":125,"line":126},[123,26406,24587],{"class":1972},[123,26408,26326],{"class":238},[123,26410,26411],{"class":182}," -y",[123,26413,23844],{"class":238},[123,26415,26416],{"class":238}," dnf-plugins-core\n",[123,26418,26419,26421,26423,26426,26429],{"class":125,"line":45},[123,26420,24587],{"class":1972},[123,26422,26326],{"class":238},[123,26424,26425],{"class":238}," config-manager",[123,26427,26428],{"class":238}," addrepo",[123,26430,26431],{"class":182}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[123,26433,26434,26436,26439,26442,26445],{"class":125,"line":1189},[123,26435,24587],{"class":1972},[123,26437,26438],{"class":238}," sed",[123,26440,26441],{"class":182}," -i",[123,26443,26444],{"class":238}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[123,26446,26447],{"class":238}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26449,26450],{},"最后安装：",[114,26452,26454],{"className":23832,"code":26453,"language":23834,"meta":37,"style":37},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[120,26455,26456],{"__ignoreMap":37},[123,26457,26458,26460,26462,26464,26466,26468,26470,26472],{"class":125,"line":126},[123,26459,24587],{"class":1972},[123,26461,26326],{"class":238},[123,26463,23844],{"class":238},[123,26465,26264],{"class":238},[123,26467,26267],{"class":238},[123,26469,26270],{"class":238},[123,26471,26273],{"class":238},[123,26473,26276],{"class":238},[94,26475,26477],{"id":26476},"_22配置环境","2.2.配置环境",[22008,26479,26481,26484],{"id":26480},"_221检查-docker-服务状态",[283,26482,26483],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26486,26487],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[114,26489,26491],{"className":23832,"code":26490,"language":23834,"meta":37,"style":37},"systemctl status docker\n",[120,26492,26493],{"__ignoreMap":37},[123,26494,26495,26498,26501],{"class":125,"line":126},[123,26496,26497],{"class":1972},"systemctl",[123,26499,26500],{"class":238}," status",[123,26502,26503],{"class":238}," docker\n",[22008,26505,26507,26484],{"id":26506},"_222启动-docker-服务",[283,26508,26509],{},"2.2.2.启动 Docker 服务",[14,26511,26512],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[114,26514,26516],{"className":23832,"code":26515,"language":23834,"meta":37,"style":37},"sudo systemctl start docker\n",[120,26517,26518],{"__ignoreMap":37},[123,26519,26520,26522,26525,26527],{"class":125,"line":126},[123,26521,24587],{"class":1972},[123,26523,26524],{"class":238}," systemctl",[123,26526,4193],{"class":238},[123,26528,26503],{"class":238},[22008,26530,26532,26484],{"id":26531},"_223设置-docker-开机自启",[283,26533,26534],{},"2.2.3.设置 Docker 开机自启",[14,26536,26537],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[114,26539,26541],{"className":23832,"code":26540,"language":23834,"meta":37,"style":37},"sudo systemctl enable docker\n",[120,26542,26543],{"__ignoreMap":37},[123,26544,26545,26547,26549,26552],{"class":125,"line":126},[123,26546,24587],{"class":1972},[123,26548,26524],{"class":238},[123,26550,26551],{"class":238}," enable",[123,26553,26503],{"class":238},[22008,26555,26557,13805,26560,13805,26565,26484],{"id":26556},"_224将用户添加到-docker-组",[283,26558,26559],{},"2.2.4.将用户添加到",[283,26561,26562],{},[120,26563,26564],{},"docker",[283,26566,26567],{},"组",[14,26569,26570,26571,26573],{},"使用以下命令将当前用户添加到 ",[120,26572,26564],{}," 组：",[114,26575,26577],{"className":23832,"code":26576,"language":23834,"meta":37,"style":37},"sudo usermod -aG docker $USER\n",[120,26578,26579],{"__ignoreMap":37},[123,26580,26581,26583,26586,26589,26591],{"class":125,"line":126},[123,26582,24587],{"class":1972},[123,26584,26585],{"class":238}," usermod",[123,26587,26588],{"class":182}," -aG",[123,26590,26331],{"class":238},[123,26592,26593],{"class":133}," $USER\n",[22008,26595,26597,26484],{"id":26596},"_225退出并重新登录",[283,26598,26599],{},"2.2.5.退出并重新登录",[14,26601,26602],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[114,26604,26606],{"className":23832,"code":26605,"language":23834,"meta":37,"style":37},"newgrp docker\n",[120,26607,26608],{"__ignoreMap":37},[123,26609,26610,26613],{"class":125,"line":126},[123,26611,26612],{"class":1972},"newgrp",[123,26614,26503],{"class":238},[22008,26616,26618,26484],{"id":26617},"_226重新启动-docker-服务如果需要",[283,26619,26620],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,26622,26623],{},"确保 Docker 服务正在运行，可以使用以下命令：",[114,26625,26626],{"className":23832,"code":26515,"language":23834,"meta":37,"style":37},[120,26627,26628],{"__ignoreMap":37},[123,26629,26630,26632,26634,26636],{"class":125,"line":126},[123,26631,24587],{"class":1972},[123,26633,26524],{"class":238},[123,26635,4193],{"class":238},[123,26637,26503],{"class":238},[22008,26639,26641,26484],{"id":26640},"_227重启电脑后检查-docker-服务状态",[283,26642,26643],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,26645,26646],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[114,26648,26650],{"className":23832,"code":26649,"language":23834,"meta":37,"style":37},"sudo reboot\nsystemctl status docker\n",[120,26651,26652,26659],{"__ignoreMap":37},[123,26653,26654,26656],{"class":125,"line":126},[123,26655,24587],{"class":1972},[123,26657,26658],{"class":238}," reboot\n",[123,26660,26661,26663,26665],{"class":125,"line":45},[123,26662,26497],{"class":1972},[123,26664,26500],{"class":238},[123,26666,26503],{"class":238},[14,26668,26669],{},[35,26670],{"alt":37,"src":26671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,26673,26674],{},"第三行显示enabled说明开机自启动成功",[14,26676,26677],{},"按q退出",[94,26679,26681],{"id":26680},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,26683,26684],{},"优先使用linux来使用docker是比较好的",[14,26686,26687],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,26689,26690],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,26692,26693,26694],{},"官方下载安装:",[372,26695,26696],{"href":26696,"rel":26697},"https:\u002F\u002Fwww.docker.com\u002F",[23875],[14,26699,26700],{},"Windows的Docker显卡直通与USB直通:",[14,26702,26703],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,26705,26706],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,26708,26709],{},[35,26710],{"alt":37,"src":26711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,26713,26714],{},[35,26715],{"alt":37,"src":26716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,26718,26719],{},[35,26720],{"alt":37,"src":26721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5136,26723,26724],{},"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":37,"searchDepth":45,"depth":45,"links":26726},[26727,26728,26729],{"id":26004,"depth":1189,"text":26005},{"id":26476,"depth":1189,"text":26477},{"id":26680,"depth":1189,"text":26681},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":25996,"description":37},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26736,"title":26737,"body":26738,"description":26745,"extension":48,"meta":27438,"navigation":50,"path":27439,"seo":27440,"stem":27441,"__hash__":27442},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26739,"toc":27432},[26740,26743,26746,26750,26755,26760,26763,26791,26796,26805,26808,26813,26817,26824,26829,26835,26839,26842,26846,26851,26943,26948,26966,26971,26992,26997,27013,27017,27022,27051,27056,27102,27107,27151,27159,27176,27181,27197,27202,27216,27219,27222,27225,27228,27257,27260,27265,27269,27272,27275,27281,27284,27287,27290,27352,27359,27364,27367,27385,27389,27392,27409,27412,27415,27429],[10,26741,26737],{"id":26742},"_3docker直通",[14,26744,26745],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[94,26747,26749],{"id":26748},"_31usb直通","3.1.USB直通",[14,26751,26752],{},[35,26753],{"alt":37,"src":26754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[77,26756,26757],{},[80,26758,26759],{},"方法一(不是很推荐新手)：",[14,26761,26762],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[114,26764,26766],{"className":23832,"code":26765,"language":23834,"meta":37,"style":37},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[120,26767,26768,26776,26781],{"__ignoreMap":37},[123,26769,26770,26773],{"class":125,"line":126},[123,26771,26772],{"class":1972},"ls",[123,26774,26775],{"class":238}," \u002Fdev\n",[123,26777,26778],{"class":125,"line":45},[123,26779,26780],{"class":192},"#例如\n",[123,26782,26783,26786,26788],{"class":125,"line":1189},[123,26784,26785],{"class":133},"--device",[123,26787,179],{"class":129},[123,26789,26790],{"class":238},"\u002Fdev\u002Ftty_USB0\n",[77,26792,26793],{"start":45},[80,26794,26795],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[114,26797,26799],{"className":23832,"code":26798,"language":23834,"meta":37,"style":37},"--privileged\n",[120,26800,26801],{"__ignoreMap":37},[123,26802,26803],{"class":125,"line":126},[123,26804,26798],{"class":1972},[14,26806,26807],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,26809,26810],{},[35,26811],{"alt":37,"src":26812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[94,26814,26816],{"id":26815},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,26818,26819,26820,26823],{},"NVIDIA Container Toolkit使用户 ",[283,26821,26822],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,26825,26826],{},[35,26827],{"alt":37,"src":26828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,26830,26831],{},[372,26832,26833],{"href":26833,"rel":26834},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23875],[22008,26836,26838],{"id":26837},"_321安装","3.2.1.安装",[14,26840,26841],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22920,26843,26845],{"id":26844},"_3211ubuntu","3.2.1.1.Ubuntu",[77,26847,26848],{},[80,26849,26850],{},"配置存储库 并更新",[114,26852,26854],{"className":23832,"code":26853,"language":23834,"meta":37,"style":37},"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",[120,26855,26856,26885,26905,26917,26929,26935],{"__ignoreMap":37},[123,26857,26858,26861,26864,26867,26869,26871,26874,26877,26880,26883],{"class":125,"line":126},[123,26859,26860],{"class":1972},"curl",[123,26862,26863],{"class":182}," -fsSL",[123,26865,26866],{"class":238}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[123,26868,25120],{"class":129},[123,26870,26084],{"class":1972},[123,26872,26873],{"class":238}," gpg",[123,26875,26876],{"class":182}," --dearmor",[123,26878,26879],{"class":182}," -o",[123,26881,26882],{"class":238}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[123,26884,24689],{"class":182},[123,26886,26887,26890,26892,26895,26898,26901,26903],{"class":125,"line":45},[123,26888,26889],{"class":133},"  && ",[123,26891,26860],{"class":1972},[123,26893,26894],{"class":182}," -s",[123,26896,26897],{"class":182}," -L",[123,26899,26900],{"class":238}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[123,26902,25120],{"class":129},[123,26904,24689],{"class":182},[123,26906,26907,26910,26913,26915],{"class":125,"line":1189},[123,26908,26909],{"class":1972},"    sed",[123,26911,26912],{"class":238}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[123,26914,25120],{"class":129},[123,26916,24689],{"class":182},[123,26918,26919,26922,26924,26927],{"class":125,"line":1204},[123,26920,26921],{"class":1972},"    sudo",[123,26923,26227],{"class":238},[123,26925,26926],{"class":238}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[123,26928,24689],{"class":182},[123,26930,26931,26933],{"class":125,"line":1210},[123,26932,26889],{"class":133},[123,26934,26186],{"class":182},[123,26936,26937,26939,26941],{"class":125,"line":1224},[123,26938,26921],{"class":1972},[123,26940,26087],{"class":238},[123,26942,26253],{"class":238},[77,26944,26945],{"start":45},[80,26946,26947],{},"安装nvidia-docker2",[114,26949,26951],{"className":23832,"code":26950,"language":23834,"meta":37,"style":37},"sudo apt-get install -y nvidia-docker2\n",[120,26952,26953],{"__ignoreMap":37},[123,26954,26955,26957,26959,26961,26963],{"class":125,"line":126},[123,26956,24587],{"class":1972},[123,26958,26087],{"class":238},[123,26960,23844],{"class":238},[123,26962,26411],{"class":182},[123,26964,26965],{"class":238}," nvidia-docker2\n",[77,26967,26968],{"start":1189},[80,26969,26970],{},"使用nvidia-ctk命令配置container runtime",[114,26972,26974],{"className":23832,"code":26973,"language":23834,"meta":37,"style":37},"sudo nvidia-ctk runtime configure --runtime=docker\n",[120,26975,26976],{"__ignoreMap":37},[123,26977,26978,26980,26983,26986,26989],{"class":125,"line":126},[123,26979,24587],{"class":1972},[123,26981,26982],{"class":238}," nvidia-ctk",[123,26984,26985],{"class":238}," runtime",[123,26987,26988],{"class":238}," configure",[123,26990,26991],{"class":182}," --runtime=docker\n",[77,26993,26994],{"start":1204},[80,26995,26996],{},"重启docker服务:",[114,26998,27000],{"className":23832,"code":26999,"language":23834,"meta":37,"style":37},"sudo systemctl restart docker\n",[120,27001,27002],{"__ignoreMap":37},[123,27003,27004,27006,27008,27011],{"class":125,"line":126},[123,27005,24587],{"class":1972},[123,27007,26524],{"class":238},[123,27009,27010],{"class":238}," restart",[123,27012,26503],{"class":238},[22920,27014,27016],{"id":27015},"_3212fedora","3.2.1.2.Fedora",[77,27018,27019],{},[80,27020,27021],{},"配置存储库",[114,27023,27025],{"className":23832,"code":27024,"language":23834,"meta":37,"style":37},"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",[120,27026,27027,27042],{"__ignoreMap":37},[123,27028,27029,27031,27033,27035,27038,27040],{"class":125,"line":126},[123,27030,26860],{"class":1972},[123,27032,26894],{"class":182},[123,27034,26897],{"class":182},[123,27036,27037],{"class":238}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[123,27039,25120],{"class":129},[123,27041,24689],{"class":182},[123,27043,27044,27046,27048],{"class":125,"line":45},[123,27045,24587],{"class":1972},[123,27047,26227],{"class":238},[123,27049,27050],{"class":238}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[77,27052,27053],{"start":45},[80,27054,27055],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[114,27057,27059],{"className":23832,"code":27058,"language":23834,"meta":37,"style":37},"# 如果是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",[120,27060,27061,27066,27080,27084,27089],{"__ignoreMap":37},[123,27062,27063],{"class":125,"line":126},[123,27064,27065],{"class":192},"# 如果是RHEL或者Rocky（DNF4）\n",[123,27067,27068,27070,27072,27074,27077],{"class":125,"line":45},[123,27069,24587],{"class":1972},[123,27071,26326],{"class":238},[123,27073,26425],{"class":238},[123,27075,27076],{"class":182}," --add-repo",[123,27078,27079],{"class":238}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[123,27081,27082],{"class":125,"line":1189},[123,27083,2409],{"emptyLinePlaceholder":50},[123,27085,27086],{"class":125,"line":1204},[123,27087,27088],{"class":192},"# 如果是Feodra41+（DNF5）\n",[123,27090,27091,27093,27095,27097,27099],{"class":125,"line":1210},[123,27092,24587],{"class":1972},[123,27094,26326],{"class":238},[123,27096,26425],{"class":238},[123,27098,26428],{"class":238},[123,27100,27101],{"class":182}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[77,27103,27104],{"start":1189},[80,27105,27106],{},"安装NVIDIA Container Toolki包",[114,27108,27110],{"className":23832,"code":27109,"language":23834,"meta":37,"style":37},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[120,27111,27112,27117,27130,27134,27139],{"__ignoreMap":37},[123,27113,27114],{"class":125,"line":126},[123,27115,27116],{"class":192},"# 如果是RHEL或者Rocky\n",[123,27118,27119,27121,27123,27125,27127],{"class":125,"line":45},[123,27120,24587],{"class":1972},[123,27122,26326],{"class":238},[123,27124,23844],{"class":238},[123,27126,26411],{"class":182},[123,27128,27129],{"class":238}," nvidia-container-toolkit\n",[123,27131,27132],{"class":125,"line":1189},[123,27133,2409],{"emptyLinePlaceholder":50},[123,27135,27136],{"class":125,"line":1204},[123,27137,27138],{"class":192},"# 如果是Fedora\n",[123,27140,27141,27143,27145,27147,27149],{"class":125,"line":1210},[123,27142,24587],{"class":1972},[123,27144,26326],{"class":238},[123,27146,23844],{"class":238},[123,27148,26411],{"class":182},[123,27150,27129],{"class":238},[77,27152,27153],{"start":1204},[80,27154,27155,27156,27158],{},"安装nvidia-docker2 ： 在Fedora上使用",[120,27157,26301],{},"进行安装",[114,27160,27162],{"className":23832,"code":27161,"language":23834,"meta":37,"style":37},"sudo dnf install -y nvidia-docker2\n",[120,27163,27164],{"__ignoreMap":37},[123,27165,27166,27168,27170,27172,27174],{"class":125,"line":126},[123,27167,24587],{"class":1972},[123,27169,26326],{"class":238},[123,27171,23844],{"class":238},[123,27173,26411],{"class":182},[123,27175,26965],{"class":238},[77,27177,27178],{"start":1210},[80,27179,27180],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[114,27182,27183],{"className":23832,"code":26973,"language":23834,"meta":37,"style":37},[120,27184,27185],{"__ignoreMap":37},[123,27186,27187,27189,27191,27193,27195],{"class":125,"line":126},[123,27188,24587],{"class":1972},[123,27190,26982],{"class":238},[123,27192,26985],{"class":238},[123,27194,26988],{"class":238},[123,27196,26991],{"class":182},[77,27198,27199],{"start":1224},[80,27200,27201],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[114,27203,27204],{"className":23832,"code":26999,"language":23834,"meta":37,"style":37},[120,27205,27206],{"__ignoreMap":37},[123,27207,27208,27210,27212,27214],{"class":125,"line":126},[123,27209,24587],{"class":1972},[123,27211,26524],{"class":238},[123,27213,27010],{"class":238},[123,27215,26503],{"class":238},[14,27217,27218],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27220,27221],{},"方法：",[14,27223,27224],{},"1️⃣nvidia-smi",[14,27226,27227],{},"2️⃣运行nvidia cuda 容器进行测试",[114,27229,27231],{"className":23832,"code":27230,"language":23834,"meta":37,"style":37},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[120,27232,27233],{"__ignoreMap":37},[123,27234,27235,27237,27239,27242,27245,27248,27251,27254],{"class":125,"line":126},[123,27236,24587],{"class":1972},[123,27238,26331],{"class":238},[123,27240,27241],{"class":238}," run",[123,27243,27244],{"class":182}," --rm",[123,27246,27247],{"class":182}," --gpus",[123,27249,27250],{"class":238}," all",[123,27252,27253],{"class":238}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[123,27255,27256],{"class":238}," nvidia-smi\n",[14,27258,27259],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27261,27262],{},[35,27263],{"alt":37,"src":27264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[94,27266,27268],{"id":27267},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27270,27271],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27273,27274],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27276,27277],{},[372,27278,27279],{"href":27279,"rel":27280},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23875],[14,27282,27283],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27285,27286],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27288,27289],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[271,27291,27292,27308],{},[274,27293,27294],{},[277,27295,27296,27299,27302,27305],{},[280,27297,27298],{"align":23746},"镜像类型",[280,27300,27301],{"align":23746},"适用场景",[280,27303,27304],{"align":23746},"示例标签",[280,27306,27307],{"align":23746},"大小",[318,27309,27310,27324,27338],{},[277,27311,27312,27315,27318,27321],{},[323,27313,27314],{"align":23746},"base",[323,27316,27317],{"align":23746},"仅需 CUDA 运行时库",[323,27319,27320],{"align":23746},"12.4.0-base-ubuntu22.04",[323,27322,27323],{"align":23746},"~240MB",[277,27325,27326,27329,27332,27335],{},[323,27327,27328],{"align":23746},"runtime",[323,27330,27331],{"align":23746},"部署编译后的应用（含数学库）",[323,27333,27334],{"align":23746},"12.4.0-runtime-ubuntu22.04",[323,27336,27337],{"align":23746},"~2GB",[277,27339,27340,27343,27346,27349],{},[323,27341,27342],{"align":23746},"devel",[323,27344,27345],{"align":23746},"开发环境（含编译工具）",[323,27347,27348],{"align":23746},"12.4.0-devel-ubuntu22.04",[323,27350,27351],{"align":23746},"~3GB",[14,27353,27354,27355,27358],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[120,27356,27357],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27360,27361],{},[35,27362],{"alt":37,"src":27363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27365,27366],{},"在dockerfile里就可以开头这么写：",[114,27368,27370],{"className":23832,"code":27369,"language":23834,"meta":37,"style":37},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[120,27371,27372,27377],{"__ignoreMap":37},[123,27373,27374],{"class":125,"line":126},[123,27375,27376],{"class":192},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[123,27378,27379,27382],{"class":125,"line":45},[123,27380,27381],{"class":1972},"FROM",[123,27383,27384],{"class":238}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[94,27386,27388],{"id":27387},"_34配置以太网","3.4.配置以太网",[14,27390,27391],{},"指定网络模式",[114,27393,27395],{"className":23832,"code":27394,"language":23834,"meta":37,"style":37},"--net=host \\\n",[120,27396,27397],{"__ignoreMap":37},[123,27398,27399,27402,27404,27407],{"class":125,"line":126},[123,27400,27401],{"class":133},"--net",[123,27403,179],{"class":129},[123,27405,27406],{"class":238},"host",[123,27408,24689],{"class":1972},[14,27410,27411],{},"启动参数里加上这行即可。具体在下方",[14,27413,27414],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1141,27416,27417,27420,27423,27426],{},[80,27418,27419],{},"--net=bridge:默认选项，表示连接到默认的网桥",[80,27421,27422],{},"--net=host:容器使用宿主机的网络",[80,27424,27425],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[80,27427,27428],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5136,27430,27431],{},"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":37,"searchDepth":45,"depth":45,"links":27433},[27434,27435,27436,27437],{"id":26748,"depth":1189,"text":26749},{"id":26815,"depth":1189,"text":26816},{"id":27267,"depth":1189,"text":27268},{"id":27387,"depth":1189,"text":27388},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26737,"description":26745},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27444,"title":27445,"body":27446,"description":27453,"extension":48,"meta":27459,"navigation":50,"path":27460,"seo":27461,"stem":27462,"__hash__":27463},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27447,"toc":27457},[27448,27451,27454],[10,27449,27445],{"id":27450},"_4dockerhub换源",[14,27452,27453],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27455,27456],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":37,"searchDepth":45,"depth":45,"links":27458},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27445,"description":27453},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27465,"title":27466,"body":27467,"description":37,"extension":48,"meta":28479,"navigation":50,"path":28480,"seo":28481,"stem":28482,"__hash__":28483},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27468,"toc":28474},[27469,27472,27476,27482,27486,27489,27829,27832,27835,27838,27843,27848,27851,27854,27857,27860,27879,27882,27893,27899,28081,28091,28107,28370,28372,28397,28412,28421,28471],[10,27470,27466],{"id":27471},"_5docker命令学习",[94,27473,27475],{"id":27474},"_51参考文档","5.1.参考文档",[14,27477,27478],{},[372,27479,27480],{"href":27480,"rel":27481},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23875],[94,27483,27485],{"id":27484},"_52常用命令","5.2.常用命令",[14,27487,27488],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[271,27490,27491,27504],{},[274,27492,27493],{},[277,27494,27495,27498,27501],{},[280,27496,27497],{"align":23746},"命令",[280,27499,27500],{"align":23746},"描述",[280,27502,27503],{"align":23746},"示例",[318,27505,27506,27517,27528,27539,27550,27561,27572,27583,27593,27604,27615,27626,27636,27647,27658,27669,27679,27689,27699,27709,27720,27731,27742,27753,27764,27775,27785,27796,27807,27818],{},[277,27507,27508,27511,27514],{},[323,27509,27510],{"align":23746},"docker run",[323,27512,27513],{"align":23746},"创建并启动一个新的容器。",[323,27515,27516],{"align":23746},"docker run -it ubuntu bash",[277,27518,27519,27522,27525],{},[323,27520,27521],{"align":23746},"docker build",[323,27523,27524],{"align":23746},"通过指定的 Dockerfile 创建一个新的镜像。",[323,27526,27527],{"align":23746},"docker build -t myimage .",[277,27529,27530,27533,27536],{},[323,27531,27532],{"align":23746},"docker pull",[323,27534,27535],{"align":23746},"从 Docker 仓库拉取镜像。",[323,27537,27538],{"align":23746},"docker pull ubuntu",[277,27540,27541,27544,27547],{},[323,27542,27543],{"align":23746},"docker push",[323,27545,27546],{"align":23746},"将本地镜像推送到 Docker 仓库。",[323,27548,27549],{"align":23746},"docker push myimage",[277,27551,27552,27555,27558],{},[323,27553,27554],{"align":23746},"docker stop",[323,27556,27557],{"align":23746},"停止一个正在运行的容器。",[323,27559,27560],{"align":23746},"docker stop container_id",[277,27562,27563,27566,27569],{},[323,27564,27565],{"align":23746},"docker start",[323,27567,27568],{"align":23746},"启动一个已经存在的容器。",[323,27570,27571],{"align":23746},"docker start container_id",[277,27573,27574,27577,27580],{},[323,27575,27576],{"align":23746},"docker restart",[323,27578,27579],{"align":23746},"重新启动容器。",[323,27581,27582],{"align":23746},"docker restart container_id",[277,27584,27585,27588,27591],{},[323,27586,27587],{"align":23746},"docker ps",[323,27589,27590],{"align":23746},"列出当前正在运行的容器。",[323,27592,27587],{"align":23746},[277,27594,27595,27598,27601],{},[323,27596,27597],{"align":23746},"docker rm",[323,27599,27600],{"align":23746},"删除一个或多个停止的容器。",[323,27602,27603],{"align":23746},"docker rm container_id",[277,27605,27606,27609,27612],{},[323,27607,27608],{"align":23746},"docker exec",[323,27610,27611],{"align":23746},"在一个正在运行的容器中执行命令。",[323,27613,27614],{"align":23746},"docker exec -it container_id bash",[277,27616,27617,27620,27623],{},[323,27618,27619],{"align":23746},"docker logs",[323,27621,27622],{"align":23746},"查看容器的日志输出。",[323,27624,27625],{"align":23746},"docker logs container_id",[277,27627,27628,27631,27634],{},[323,27629,27630],{"align":23746},"docker images",[323,27632,27633],{"align":23746},"列出本地所有镜像。",[323,27635,27630],{"align":23746},[277,27637,27638,27641,27644],{},[323,27639,27640],{"align":23746},"docker rmi",[323,27642,27643],{"align":23746},"删除一个或多个镜像。",[323,27645,27646],{"align":23746},"docker rmi myimage",[277,27648,27649,27652,27655],{},[323,27650,27651],{"align":23746},"docker network",[323,27653,27654],{"align":23746},"管理 Docker 网络。",[323,27656,27657],{"align":23746},"docker network ls",[277,27659,27660,27663,27666],{},[323,27661,27662],{"align":23746},"docker volume",[323,27664,27665],{"align":23746},"管理 Docker 数据卷。",[323,27667,27668],{"align":23746},"docker volume ls",[277,27670,27671,27674,27677],{},[323,27672,27673],{"align":23746},"docker-compose up",[323,27675,27676],{"align":23746},"启动 docker-compose.yml 中定义的所有服务。",[323,27678,27673],{"align":23746},[277,27680,27681,27684,27687],{},[323,27682,27683],{"align":23746},"docker-compose down",[323,27685,27686],{"align":23746},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[323,27688,27683],{"align":23746},[277,27690,27691,27694,27697],{},[323,27692,27693],{"align":23746},"docker info",[323,27695,27696],{"align":23746},"显示 Docker 系统的详细信息。",[323,27698,27693],{"align":23746},[277,27700,27701,27704,27707],{},[323,27702,27703],{"align":23746},"docker stats",[323,27705,27706],{"align":23746},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[323,27708,27703],{"align":23746},[277,27710,27711,27714,27717],{},[323,27712,27713],{"align":23746},"docker inspect",[323,27715,27716],{"align":23746},"查看容器或镜像的详细信息（JSON 格式）。",[323,27718,27719],{"align":23746},"docker inspect container_id",[277,27721,27722,27725,27728],{},[323,27723,27724],{"align":23746},"docker save",[323,27726,27727],{"align":23746},"将一个镜像保存为 tar 文件。",[323,27729,27730],{"align":23746},"docker save -o myimage.tar myimage",[277,27732,27733,27736,27739],{},[323,27734,27735],{"align":23746},"docker load",[323,27737,27738],{"align":23746},"从 tar 文件中加载镜像。",[323,27740,27741],{"align":23746},"docker load -i myimage.tar",[277,27743,27744,27747,27750],{},[323,27745,27746],{"align":23746},"docker tag",[323,27748,27749],{"align":23746},"为镜像添加标签（tag）。",[323,27751,27752],{"align":23746},"docker tag myimage myimage:v1",[277,27754,27755,27758,27761],{},[323,27756,27757],{"align":23746},"docker buildx build",[323,27759,27760],{"align":23746},"使用 Buildx 构建多架构镜像。",[323,27762,27763],{"align":23746},"docker buildx build -t myimage .",[277,27765,27766,27769,27772],{},[323,27767,27768],{"align":23746},"docker buildx create",[323,27770,27771],{"align":23746},"创建一个新的 Buildx 构建实例。",[323,27773,27774],{"align":23746},"docker buildx create –use",[277,27776,27777,27780,27783],{},[323,27778,27779],{"align":23746},"docker buildx ls",[323,27781,27782],{"align":23746},"列出所有可用的 Buildx 构建实例。",[323,27784,27779],{"align":23746},[277,27786,27787,27790,27793],{},[323,27788,27789],{"align":23746},"docker buildx use",[323,27791,27792],{"align":23746},"设置当前的 Buildx 构建实例。",[323,27794,27795],{"align":23746},"docker buildx use mybuilder",[277,27797,27798,27801,27804],{},[323,27799,27800],{"align":23746},"docker buildx bake",[323,27802,27803],{"align":23746},"使用 Bake 文件批量构建镜像。",[323,27805,27806],{"align":23746},"docker buildx bake -f bake.hcl",[277,27808,27809,27812,27815],{},[323,27810,27811],{"align":23746},"docker buildx build –push",[323,27813,27814],{"align":23746},"构建镜像并推送到镜像仓库。",[323,27816,27817],{"align":23746},"docker buildx build –push -t myimage .",[277,27819,27820,27823,27826],{},[323,27821,27822],{"align":23746},"docker buildx build –platform",[323,27824,27825],{"align":23746},"构建镜像并为多个平台生成支持。",[323,27827,27828],{"align":23746},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,27830,27831],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,27833,27834],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,27836,27837],{},"docker images 可以查看已经下载的镜像",[14,27839,27840],{},[35,27841],{"alt":37,"src":27842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,27844,27845],{},[283,27846,27847],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,27849,27850],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,27852,27853],{},"docker container logs 查看容器日志",[14,27855,27856],{},"docker top 查看容器里的进程",[14,27858,27859],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[114,27861,27863],{"className":23832,"code":27862,"language":23834,"meta":37,"style":37},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[120,27864,27865],{"__ignoreMap":37},[123,27866,27867,27870,27873,27876],{"class":125,"line":126},[123,27868,27869],{"class":1972},"如：docker",[123,27871,27872],{"class":238}," cp",[123,27874,27875],{"class":238}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[123,27877,27878],{"class":238}," \u002Fmydata\u002Fnginx\n",[14,27880,27881],{},"docker run时在启动容器的时候会有几个常用的选项：",[1141,27883,27884,27887,27890],{},[80,27885,27886],{},"-d选项：表示后台运行",[80,27888,27889],{},"-P选项：随机端口映射",[80,27891,27892],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[94,27894,27896],{"id":27895},"_53run命令的参数非常重要",[283,27897,27898],{},"5.3.run命令的参数（非常重要）",[271,27900,27901,27914],{},[274,27902,27903],{},[277,27904,27905,27908,27911],{},[280,27906,27907],{"align":23746},"参数\u002F配置",[280,27909,27910],{"align":23746},"功能说明",[280,27912,27913],{"align":23746},"重要性与参考依据",[318,27915,27916,27927,27938,27949,27960,27971,27982,27993,28004,28015,28026,28037,28048,28059,28070],{},[277,27917,27918,27921,27924],{},[323,27919,27920],{"align":23746},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[323,27922,27923],{"align":23746},"指定容器名称，便于后续管理",[323,27925,27926],{"align":23746},"替代随机生成的容器名。",[277,27928,27929,27932,27935],{},[323,27930,27931],{"align":23746},"–gpus all",[323,27933,27934],{"align":23746},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[323,27936,27937],{"align":23746},"用于CUDA加速等GPU依赖任务。",[277,27939,27940,27943,27946],{},[323,27941,27942],{"align":23746},"-e NVIDIA_DRIVER_CAPABILITIES=all",[323,27944,27945],{"align":23746},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[323,27947,27948],{"align":23746},"确保容器内GPU功能完整67。",[277,27950,27951,27954,27957],{},[323,27952,27953],{"align":23746},"-dit",[323,27955,27956],{"align":23746},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[323,27958,27959],{"align":23746},"允许容器在后台运行并支持交互操作。",[277,27961,27962,27965,27968],{},[323,27963,27964],{"align":23746},"–privileged",[323,27966,27967],{"align":23746},"赋予容器完全主机权限（可访问设备、内核模块等）",[323,27969,27970],{"align":23746},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[277,27972,27973,27976,27979],{},[323,27974,27975],{"align":23746},"–net=host",[323,27977,27978],{"align":23746},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[323,27980,27981],{"align":23746},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[277,27983,27984,27987,27990],{},[323,27985,27986],{"align":23746},"–group-add audio–group-add video–group-add dialout",[323,27988,27989],{"align":23746},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[323,27991,27992],{"align":23746},"避免权限问题（如避免无法调用摄像头、麦克风）。",[277,27994,27995,27998,28001],{},[323,27996,27997],{"align":23746},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[323,27999,28000],{"align":23746},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[323,28002,28003],{"align":23746},"支持容器内运行图形界面应用（如OpenCV可视化）。",[277,28005,28006,28009,28012],{},[323,28007,28008],{"align":23746},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[323,28010,28011],{"align":23746},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[323,28013,28014],{"align":23746},"实现容器内图形显示。",[277,28016,28017,28020,28023],{},[323,28018,28019],{"align":23746},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[323,28021,28022],{"align":23746},"挂载X11认证文件（只读）",[323,28024,28025],{"align":23746},"确保容器有权连接宿主机显示服务。",[277,28027,28028,28031,28034],{},[323,28029,28030],{"align":23746},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[323,28032,28033],{"align":23746},"挂载Wayland显示协议相关目录",[323,28035,28036],{"align":23746},"支持Wayland协议的图形显示。",[277,28038,28039,28042,28045],{},[323,28040,28041],{"align":23746},"–ulimit nofile=1024:524288",[323,28043,28044],{"align":23746},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[323,28046,28047],{"align":23746},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[277,28049,28050,28053,28056],{},[323,28051,28052],{"align":23746},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[323,28054,28055],{"align":23746},"挂载宿主机用户目录到容器内同名路径",[323,28057,28058],{"align":23746},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[277,28060,28061,28064,28067],{},[323,28062,28063],{"align":23746},"-w \u002Fhome\u002Ftungchiahui",[323,28065,28066],{"align":23746},"设置容器启动后的默认工作目录",[323,28068,28069],{"align":23746},"直接进入项目路径，方便执行命令2324。",[277,28071,28072,28075,28078],{},[323,28073,28074],{"align":23746},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[323,28076,28077],{"align":23746},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[323,28079,28080],{"align":23746},"提供预配置的深度学习与机器人开发环境。",[14,28082,28083,28084,28086,28087,28090],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[120,28085,24587],{},"加不加",[120,28088,28089],{},"sudo -E","都无所谓。",[14,28092,28093,28094,28096,28097,28099,28100,28103,28104,28106],{},"用户已经被加到docker组了，不用",[120,28095,24587],{},"也行跑，其次，",[120,28098,24587],{},"运行的话，你的",[120,28101,28102],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[120,28105,28102],{},"更不可能变了。",[114,28108,28110],{"className":23832,"code":28109,"language":23834,"meta":37,"style":37},"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",[120,28111,28112,28125,28135,28145,28157,28164,28171,28178,28188,28197,28206,28220,28232,28244,28253,28263,28272,28287,28320,28347,28358,28365],{"__ignoreMap":37},[123,28113,28114,28116,28118,28120,28123],{"class":125,"line":126},[123,28115,24587],{"class":1972},[123,28117,26331],{"class":238},[123,28119,27241],{"class":238},[123,28121,28122],{"class":182}," --name=ros_opencv_cuda",[123,28124,24689],{"class":182},[123,28126,28127,28130,28133],{"class":125,"line":45},[123,28128,28129],{"class":133},"--gpus ",[123,28131,28132],{"class":238},"all",[123,28134,24689],{"class":182},[123,28136,28137,28140,28143],{"class":125,"line":1189},[123,28138,28139],{"class":133},"-e ",[123,28141,28142],{"class":238},"NVIDIA_DRIVER_CAPABILITIES=all",[123,28144,24689],{"class":182},[123,28146,28147,28149,28152,28155],{"class":125,"line":1204},[123,28148,28139],{"class":133},[123,28150,28151],{"class":238},"DISPLAY=",[123,28153,28154],{"class":133},"$DISPLAY ",[123,28156,26186],{"class":182},[123,28158,28159,28162],{"class":125,"line":1210},[123,28160,28161],{"class":133},"-dit ",[123,28163,26186],{"class":182},[123,28165,28166,28169],{"class":125,"line":1224},[123,28167,28168],{"class":133},"--privileged ",[123,28170,26186],{"class":182},[123,28172,28173,28176],{"class":125,"line":1230},[123,28174,28175],{"class":133},"--net=host ",[123,28177,26186],{"class":182},[123,28179,28180,28183,28186],{"class":125,"line":1321},[123,28181,28182],{"class":133},"--group-add ",[123,28184,28185],{"class":238},"audio",[123,28187,24689],{"class":182},[123,28189,28190,28192,28195],{"class":125,"line":1327},[123,28191,28182],{"class":133},[123,28193,28194],{"class":238},"video",[123,28196,24689],{"class":182},[123,28198,28199,28201,28204],{"class":125,"line":1339},[123,28200,28182],{"class":133},[123,28202,28203],{"class":238},"dialout",[123,28205,24689],{"class":182},[123,28207,28208,28210,28213,28215,28218],{"class":125,"line":1621},[123,28209,28139],{"class":133},[123,28211,28212],{"class":238},"XAUTHORITY=",[123,28214,28102],{"class":133},[123,28216,28217],{"class":238},"\u002F.Xauthority",[123,28219,24689],{"class":182},[123,28221,28222,28224,28227,28230],{"class":125,"line":1626},[123,28223,28139],{"class":133},[123,28225,28226],{"class":238},"WAYLAND_DISPLAY=",[123,28228,28229],{"class":133},"$WAYLAND_DISPLAY ",[123,28231,26186],{"class":182},[123,28233,28234,28236,28239,28242],{"class":125,"line":1632},[123,28235,28139],{"class":133},[123,28237,28238],{"class":238},"XDG_RUNTIME_DIR=",[123,28240,28241],{"class":133},"$XDG_RUNTIME_DIR ",[123,28243,26186],{"class":182},[123,28245,28246,28248,28251],{"class":125,"line":1637},[123,28247,28139],{"class":133},[123,28249,28250],{"class":238},"QT_QPA_PLATFORM=xcb",[123,28252,24689],{"class":182},[123,28254,28255,28258,28261],{"class":125,"line":1651},[123,28256,28257],{"class":133},"-v ",[123,28259,28260],{"class":238},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[123,28262,24689],{"class":182},[123,28264,28265,28267,28270],{"class":125,"line":1656},[123,28266,28257],{"class":133},[123,28268,28269],{"class":238},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[123,28271,24689],{"class":182},[123,28273,28274,28277,28280,28282,28285],{"class":125,"line":1662},[123,28275,28276],{"class":133},"-v $HOME",[123,28278,28279],{"class":238},"\u002F.Xauthority:",[123,28281,28102],{"class":133},[123,28283,28284],{"class":238},"\u002F.Xauthority:ro",[123,28286,24689],{"class":182},[123,28288,28289,28291,28294,28296,28299,28302,28304,28307,28309,28311,28313,28315,28318],{"class":125,"line":1683},[123,28290,28257],{"class":133},[123,28292,28293],{"class":238},"\u002Frun\u002Fuser\u002F",[123,28295,25110],{"class":133},[123,28297,28298],{"class":1972},"id",[123,28300,28301],{"class":182}," -u",[123,28303,563],{"class":133},[123,28305,28306],{"class":238},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[123,28308,25110],{"class":133},[123,28310,28298],{"class":1972},[123,28312,28301],{"class":182},[123,28314,563],{"class":133},[123,28316,28317],{"class":238},"\u002Fwayland-0",[123,28319,24689],{"class":182},[123,28321,28322,28324,28326,28328,28330,28332,28334,28337,28339,28341,28343,28345],{"class":125,"line":1688},[123,28323,28257],{"class":133},[123,28325,28293],{"class":238},[123,28327,25110],{"class":133},[123,28329,28298],{"class":1972},[123,28331,28301],{"class":182},[123,28333,563],{"class":133},[123,28335,28336],{"class":238},":\u002Frun\u002Fuser\u002F",[123,28338,25110],{"class":133},[123,28340,28298],{"class":1972},[123,28342,28301],{"class":182},[123,28344,13724],{"class":133},[123,28346,26186],{"class":182},[123,28348,28349,28351,28353,28356],{"class":125,"line":1702},[123,28350,28276],{"class":133},[123,28352,993],{"class":238},[123,28354,28355],{"class":133},"$HOME ",[123,28357,26186],{"class":182},[123,28359,28360,28363],{"class":125,"line":1707},[123,28361,28362],{"class":133},"-w $HOME ",[123,28364,26186],{"class":182},[123,28366,28367],{"class":125,"line":1736},[123,28368,28369],{"class":133},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28371,9035],{},[77,28373,28374,28382,28385,28388],{},[80,28375,28376,13805,28378,28381],{},[120,28377,28142],{},[120,28379,28380],{},"--gpus all","没有英伟达显卡请注释。",[80,28383,28384],{},"--name后面请自己为容器起名。",[80,28386,28387],{},"最后一行仓库名称请你自己找对应的镜像填上。",[80,28389,28390,28391,28396],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23563,28392,28393],{},[283,28394,28395],{},"请不要加","。",[114,28398,28400],{"className":23832,"code":28399,"language":23834,"meta":37,"style":37},"--ulimit nofile=1024:524288 \\\n",[120,28401,28402],{"__ignoreMap":37},[123,28403,28404,28407,28410],{"class":125,"line":126},[123,28405,28406],{"class":1972},"--ulimit",[123,28408,28409],{"class":238}," nofile=1024:524288",[123,28411,24689],{"class":182},[14,28413,28414,28415,28420],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23563,28416,28417],{},[283,28418,28419],{},"不建议","**.**",[114,28422,28424],{"className":23832,"code":28423,"language":23834,"meta":37,"style":37},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[120,28425,28426,28453,28462],{"__ignoreMap":37},[123,28427,28428,28431,28434,28436,28438,28440,28442,28444,28446,28449,28451],{"class":125,"line":126},[123,28429,28430],{"class":1972},"--user",[123,28432,28433],{"class":133}," $(",[123,28435,28298],{"class":1972},[123,28437,28301],{"class":182},[123,28439,563],{"class":133},[123,28441,993],{"class":238},[123,28443,25110],{"class":133},[123,28445,28298],{"class":1972},[123,28447,28448],{"class":182}," -g",[123,28450,13724],{"class":133},[123,28452,26186],{"class":182},[123,28454,28455,28457,28460],{"class":125,"line":45},[123,28456,28257],{"class":133},[123,28458,28459],{"class":238},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[123,28461,24689],{"class":182},[123,28463,28464,28466,28469],{"class":125,"line":1189},[123,28465,28257],{"class":133},[123,28467,28468],{"class":238},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[123,28470,24689],{"class":182},[5136,28472,28473],{},"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":37,"searchDepth":45,"depth":45,"links":28475},[28476,28477,28478],{"id":27474,"depth":1189,"text":27475},{"id":27484,"depth":1189,"text":27485},{"id":27895,"depth":1189,"text":27898},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27466,"description":37},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28485,"title":28486,"body":28487,"description":37,"extension":48,"meta":30110,"navigation":50,"path":30111,"seo":30112,"stem":30113,"__hash__":30114},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28488,"toc":30105},[28489,28492,28496,28499,28721,28725,28729,28732,28838,28843,28846,28851,28854,28859,28862,28867,28870,28882,28885,28890,28897,28925,28932,29008,29013,29016,29039,29041,29116,29121,29124,29128,29136,29141,29146,29150,29161,29167,29170,29173,29197,29200,29203,29231,29234,29237,29702,29705,29710,29715,29719,29742,29747,29751,29755,29758,29761,29764,29791,29794,29797,29815,29818,29821,29843,29851,29856,29861,29865,29868,29871,29874,29877,29922,29925,29943,29946,29951,29954,29975,29978,30034,30037,30042,30046,30049,30056,30059,30062,30067,30070,30086,30089,30102],[10,28490,28486],{"id":28491},"_6手动创建docker镜像",[94,28493,28495],{"id":28494},"_61dockerfile","6.1.DockerFile",[14,28497,28498],{},"常用命令：",[271,28500,28501,28512],{},[274,28502,28503],{},[277,28504,28505,28508,28510],{},[280,28506,28507],{"align":23746},"指令",[280,28509,25880],{"align":23746},[280,28511,27503],{"align":23746},[318,28513,28514,28524,28540,28551,28562,28573,28584,28595,28606,28620,28634,28645,28659,28670,28681,28695,28710],{},[277,28515,28516,28518,28521],{},[323,28517,27381],{"align":23746},[323,28519,28520],{"align":23746},"指定基础镜像，是 Dockerfile 的起点",[323,28522,28523],{"align":23746},"FROM ubuntu:22.04",[277,28525,28526,28529,28532],{},[323,28527,28528],{"align":23746},"LABEL",[323,28530,28531],{"align":23746},"添加元数据（如作者、版本等）",[323,28533,28534,28535,28539],{"align":23746},"LABEL maintainer=”",[372,28536,28538],{"href":28537},"mailto:you@example.com","you@example.com","”",[277,28541,28542,28545,28548],{},[323,28543,28544],{"align":23746},"ENV",[323,28546,28547],{"align":23746},"设置环境变量",[323,28549,28550],{"align":23746},"ENV PORT=8080",[277,28552,28553,28556,28559],{},[323,28554,28555],{"align":23746},"ARG",[323,28557,28558],{"align":23746},"构建参数，只在构建期间可用",[323,28560,28561],{"align":23746},"ARG VERSION=1.0",[277,28563,28564,28567,28570],{},[323,28565,28566],{"align":23746},"RUN",[323,28568,28569],{"align":23746},"构建镜像时运行命令",[323,28571,28572],{"align":23746},"RUN apt-get update && apt-get install -y curl",[277,28574,28575,28578,28581],{},[323,28576,28577],{"align":23746},"COPY",[323,28579,28580],{"align":23746},"复制文件到镜像中",[323,28582,28583],{"align":23746},"COPY . \u002Fapp",[277,28585,28586,28589,28592],{},[323,28587,28588],{"align":23746},"ADD",[323,28590,28591],{"align":23746},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[323,28593,28594],{"align":23746},"ADD archive.tar.gz \u002Fdata\u002F",[277,28596,28597,28600,28603],{},[323,28598,28599],{"align":23746},"WORKDIR",[323,28601,28602],{"align":23746},"设置工作目录",[323,28604,28605],{"align":23746},"WORKDIR \u002Fopt",[277,28607,28608,28611,28614],{},[323,28609,28610],{"align":23746},"CMD",[323,28612,28613],{"align":23746},"设置容器启动时默认命令（可被 docker run 覆盖）",[323,28615,28616,28617],{"align":23746},"CMD ",[123,28618,28619],{},"“node”, “index.js”",[277,28621,28622,28625,28628],{},[323,28623,28624],{"align":23746},"ENTRYPOINT",[323,28626,28627],{"align":23746},"设置容器启动时固定命令（通常用于 CLI 工具等）",[323,28629,28630,28631],{"align":23746},"ENTRYPOINT ",[123,28632,28633],{},"“python3”",[277,28635,28636,28639,28642],{},[323,28637,28638],{"align":23746},"EXPOSE",[323,28640,28641],{"align":23746},"声明镜像内服务监听的端口（不会自动映射）",[323,28643,28644],{"align":23746},"EXPOSE 80",[277,28646,28647,28650,28653],{},[323,28648,28649],{"align":23746},"VOLUME",[323,28651,28652],{"align":23746},"声明数据卷挂载点",[323,28654,28655,28656],{"align":23746},"VOLUME ",[123,28657,28658],{},"“\u002Fdata”",[277,28660,28661,28664,28667],{},[323,28662,28663],{"align":23746},"USER",[323,28665,28666],{"align":23746},"设置后续命令执行的用户",[323,28668,28669],{"align":23746},"USER appuser",[277,28671,28672,28675,28678],{},[323,28673,28674],{"align":23746},"ONBUILD",[323,28676,28677],{"align":23746},"当镜像作为其他镜像基础镜像时触发的构建指令",[323,28679,28680],{"align":23746},"ONBUILD COPY . \u002Fsrc",[277,28682,28683,28686,28689],{},[323,28684,28685],{"align":23746},"SHELL",[323,28687,28688],{"align":23746},"更改默认 shell，比如将 sh -c 改为 bash -c",[323,28690,28691,28692],{"align":23746},"SHELL ",[123,28693,28694],{},"“\u002Fbin\u002Fbash”, “-c”",[277,28696,28697,28700,28703],{},[323,28698,28699],{"align":23746},"HEALTHCHECK",[323,28701,28702],{"align":23746},"定义容器运行时的健康检查命令",[323,28704,28705,28706],{"align":23746},"`HEALTHCHECK CMD curl –fail ",[372,28707,28708],{"href":28708,"rel":28709},"http:\u002F\u002Flocalhost:8080",[23875],[277,28711,28712,28715,28718],{},[323,28713,28714],{"align":23746},"STOPSIGNAL",[323,28716,28717],{"align":23746},"容器停止时发送的信号",[323,28719,28720],{"align":23746},"STOPSIGNAL SIGKILL",[94,28722,28724],{"id":28723},"_62自己创建容器","6.2.自己创建容器",[22008,28726,28728],{"id":28727},"_621手动创建","6.2.1.手动创建",[14,28730,28731],{},"在x86电脑上编译x86的：",[114,28733,28735],{"className":23832,"code":28734,"language":23834,"meta":37,"style":37},"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",[120,28736,28737,28753,28757,28770,28774,28787,28791,28804,28808,28821,28825],{"__ignoreMap":37},[123,28738,28739,28741,28744,28747,28750],{"class":125,"line":126},[123,28740,26564],{"class":1972},[123,28742,28743],{"class":238}," build",[123,28745,28746],{"class":182}," -t",[123,28748,28749],{"class":238}," ros-melodic-cuda118-cudnn8-bionic:latest",[123,28751,28752],{"class":238}," .\n",[123,28754,28755],{"class":125,"line":45},[123,28756,2409],{"emptyLinePlaceholder":50},[123,28758,28759,28761,28763,28765,28768],{"class":125,"line":1189},[123,28760,26564],{"class":1972},[123,28762,28743],{"class":238},[123,28764,28746],{"class":182},[123,28766,28767],{"class":238}," ros-noetic-focal:latest",[123,28769,28752],{"class":238},[123,28771,28772],{"class":125,"line":1204},[123,28773,2409],{"emptyLinePlaceholder":50},[123,28775,28776,28778,28780,28782,28785],{"class":125,"line":1210},[123,28777,26564],{"class":1972},[123,28779,28743],{"class":238},[123,28781,28746],{"class":182},[123,28783,28784],{"class":238}," ros-humble-jammy:latest",[123,28786,28752],{"class":238},[123,28788,28789],{"class":125,"line":1224},[123,28790,2409],{"emptyLinePlaceholder":50},[123,28792,28793,28795,28797,28799,28802],{"class":125,"line":1230},[123,28794,26564],{"class":1972},[123,28796,28743],{"class":238},[123,28798,28746],{"class":182},[123,28800,28801],{"class":238}," ros-jazzy-noble:latest",[123,28803,28752],{"class":238},[123,28805,28806],{"class":125,"line":1321},[123,28807,2409],{"emptyLinePlaceholder":50},[123,28809,28810,28812,28814,28816,28819],{"class":125,"line":1327},[123,28811,26564],{"class":1972},[123,28813,28743],{"class":238},[123,28815,28746],{"class":182},[123,28817,28818],{"class":238}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[123,28820,28752],{"class":238},[123,28822,28823],{"class":125,"line":1339},[123,28824,2409],{"emptyLinePlaceholder":50},[123,28826,28827,28829,28831,28833,28836],{"class":125,"line":1621},[123,28828,26564],{"class":1972},[123,28830,28743],{"class":238},[123,28832,28746],{"class":182},[123,28834,28835],{"class":238}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[123,28837,28752],{"class":238},[14,28839,28840],{},[35,28841],{"alt":37,"src":28842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,28844,28845],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,28847,28848],{},[35,28849],{"alt":37,"src":28850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,28852,28853],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[77,28855,28856],{},[80,28857,28858],{},"创建 Docker Hub 账户",[14,28860,28861],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[77,28863,28864],{"start":45},[80,28865,28866],{},"登录 Docker Hub",[14,28868,28869],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[114,28871,28873],{"className":23832,"code":28872,"language":23834,"meta":37,"style":37},"docker login\n",[120,28874,28875],{"__ignoreMap":37},[123,28876,28877,28879],{"class":125,"line":126},[123,28878,26564],{"class":1972},[123,28880,28881],{"class":238}," login\n",[14,28883,28884],{},"输入你的 Docker Hub 用户名和密码进行验证。",[77,28886,28887],{},[80,28888,28889],{},"为你的镜像打标签",[14,28891,28892,28893,28896],{},"Docker Hub 使用 ",[120,28894,28895],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[114,28898,28900],{"className":23832,"code":28899,"language":23834,"meta":37,"style":37},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[120,28901,28902],{"__ignoreMap":37},[123,28903,28904,28906,28909,28911,28914,28917,28920,28922],{"class":125,"line":126},[123,28905,26564],{"class":1972},[123,28907,28908],{"class":238}," tag",[123,28910,28801],{"class":238},[123,28912,28913],{"class":129}," \u003C",[123,28915,28916],{"class":238},"你的用户",[123,28918,28919],{"class":133},"名",[123,28921,1094],{"class":129},[123,28923,28924],{"class":238},"\u002Fros-jazzy-noble:latest\n",[14,28926,28927,28928,28931],{},"例如，如果你的 Docker Hub 用户名是 ",[120,28929,28930],{},"tungchiahui","，你应该执行：",[114,28933,28935],{"className":23832,"code":28934,"language":23834,"meta":37,"style":37},"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",[120,28936,28937,28948,28952,28963,28967,28978,28982,28993,28997],{"__ignoreMap":37},[123,28938,28939,28941,28943,28945],{"class":125,"line":126},[123,28940,26564],{"class":1972},[123,28942,28908],{"class":238},[123,28944,28767],{"class":238},[123,28946,28947],{"class":238}," tungchiahui\u002Fros-noetic-focal:latest\n",[123,28949,28950],{"class":125,"line":45},[123,28951,2409],{"emptyLinePlaceholder":50},[123,28953,28954,28956,28958,28960],{"class":125,"line":1189},[123,28955,26564],{"class":1972},[123,28957,28908],{"class":238},[123,28959,28784],{"class":238},[123,28961,28962],{"class":238}," tungchiahui\u002Fros-humble-jammy:latest\n",[123,28964,28965],{"class":125,"line":1204},[123,28966,2409],{"emptyLinePlaceholder":50},[123,28968,28969,28971,28973,28975],{"class":125,"line":1210},[123,28970,26564],{"class":1972},[123,28972,28908],{"class":238},[123,28974,28801],{"class":238},[123,28976,28977],{"class":238}," tungchiahui\u002Fros-jazzy-noble:latest\n",[123,28979,28980],{"class":125,"line":1224},[123,28981,2409],{"emptyLinePlaceholder":50},[123,28983,28984,28986,28988,28990],{"class":125,"line":1230},[123,28985,26564],{"class":1972},[123,28987,28908],{"class":238},[123,28989,28818],{"class":238},[123,28991,28992],{"class":238}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[123,28994,28995],{"class":125,"line":1321},[123,28996,2409],{"emptyLinePlaceholder":50},[123,28998,28999,29001,29003,29005],{"class":125,"line":1327},[123,29000,26564],{"class":1972},[123,29002,28908],{"class":238},[123,29004,28835],{"class":238},[123,29006,29007],{"class":238}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[77,29009,29010],{"start":45},[80,29011,29012],{},"推送镜像到 Docker Hub",[14,29014,29015],{},"使用以下命令将镜像推送到 Docker Hub：",[114,29017,29019],{"className":23832,"code":29018,"language":23834,"meta":37,"style":37},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[120,29020,29021],{"__ignoreMap":37},[123,29022,29023,29025,29028,29030,29032,29034,29036],{"class":125,"line":126},[123,29024,26564],{"class":1972},[123,29026,29027],{"class":238}," push",[123,29029,28913],{"class":129},[123,29031,28916],{"class":238},[123,29033,28919],{"class":133},[123,29035,1094],{"class":129},[123,29037,29038],{"class":238},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29040,14643],{},[114,29042,29044],{"className":23832,"code":29043,"language":23834,"meta":37,"style":37},"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",[120,29045,29046,29054,29058,29066,29070,29078,29082,29091,29095,29103,29107],{"__ignoreMap":37},[123,29047,29048,29050,29052],{"class":125,"line":126},[123,29049,26564],{"class":1972},[123,29051,29027],{"class":238},[123,29053,28947],{"class":238},[123,29055,29056],{"class":125,"line":45},[123,29057,2409],{"emptyLinePlaceholder":50},[123,29059,29060,29062,29064],{"class":125,"line":1189},[123,29061,26564],{"class":1972},[123,29063,29027],{"class":238},[123,29065,28962],{"class":238},[123,29067,29068],{"class":125,"line":1204},[123,29069,2409],{"emptyLinePlaceholder":50},[123,29071,29072,29074,29076],{"class":125,"line":1210},[123,29073,26564],{"class":1972},[123,29075,29027],{"class":238},[123,29077,28977],{"class":238},[123,29079,29080],{"class":125,"line":1224},[123,29081,2409],{"emptyLinePlaceholder":50},[123,29083,29084,29086,29088],{"class":125,"line":1230},[123,29085,26564],{"class":1972},[123,29087,29027],{"class":238},[123,29089,29090],{"class":238}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[123,29092,29093],{"class":125,"line":1321},[123,29094,2409],{"emptyLinePlaceholder":50},[123,29096,29097,29099,29101],{"class":125,"line":1327},[123,29098,26564],{"class":1972},[123,29100,29027],{"class":238},[123,29102,29007],{"class":238},[123,29104,29105],{"class":125,"line":1339},[123,29106,2409],{"emptyLinePlaceholder":50},[123,29108,29109,29111,29113],{"class":125,"line":1621},[123,29110,26564],{"class":1972},[123,29112,29027],{"class":238},[123,29114,29115],{"class":238}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[77,29117,29118],{"start":1189},[80,29119,29120],{},"验证推送成功",[14,29122,29123],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29125,29126],{},[283,29127,3793],{},[1141,29129,29130,29133],{},[80,29131,29132],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[80,29134,29135],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29137,29138],{},[35,29139],{"alt":37,"src":29140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29142,29143],{},[35,29144],{"alt":37,"src":29145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[22008,29147,29149],{"id":29148},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29151,29152,29153,29156,29157,29160],{},"如果您想在 ",[283,29154,29155],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[283,29158,29159],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29162,29163,29164],{},"1. ",[283,29165,29166],{},"启用 Docker 跨平台构建",[14,29168,29169],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29171,29172],{},"第一步：启用 buildx（只需执行一次）",[114,29174,29176],{"className":23832,"code":29175,"language":23834,"meta":37,"style":37},"docker buildx create --name multiarch_builder --use\n",[120,29177,29178],{"__ignoreMap":37},[123,29179,29180,29182,29185,29188,29191,29194],{"class":125,"line":126},[123,29181,26564],{"class":1972},[123,29183,29184],{"class":238}," buildx",[123,29186,29187],{"class":238}," create",[123,29189,29190],{"class":182}," --name",[123,29192,29193],{"class":238}," multiarch_builder",[123,29195,29196],{"class":182}," --use\n",[14,29198,29199],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29201,29202],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[114,29204,29206],{"className":23832,"code":29205,"language":23834,"meta":37,"style":37},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[120,29207,29208],{"__ignoreMap":37},[123,29209,29210,29212,29214,29216,29219,29222,29225,29228],{"class":125,"line":126},[123,29211,26564],{"class":1972},[123,29213,27241],{"class":238},[123,29215,27244],{"class":182},[123,29217,29218],{"class":182}," --privileged",[123,29220,29221],{"class":238}," multiarch\u002Fqemu-user-static",[123,29223,29224],{"class":182}," --reset",[123,29226,29227],{"class":182}," -p",[123,29229,29230],{"class":238}," yes\n",[14,29232,29233],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29235,29236],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[114,29238,29240],{"className":23832,"code":29239,"language":23834,"meta":37,"style":37},"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",[120,29241,29242,29284,29288,29293,29303,29313,29322,29328,29332,29336,29346,29354,29363,29369,29373,29377,29387,29395,29404,29410,29414,29418,29428,29436,29445,29451,29455,29459,29469,29477,29486,29492,29496,29500,29510,29518,29527,29533,29537,29541,29551,29559,29568,29574,29578,29582,29592,29600,29609,29615,29619,29623,29633,29641,29650,29656,29660,29664,29675,29683,29692,29698],{"__ignoreMap":37},[123,29243,29244,29246,29248,29250,29253,29256,29258,29260,29263,29265,29267,29269,29271,29274,29277,29279,29282],{"class":125,"line":126},[123,29245,26564],{"class":1972},[123,29247,29184],{"class":238},[123,29249,28743],{"class":238},[123,29251,29252],{"class":182}," --platform",[123,29254,29255],{"class":238}," linux\u002Famd64,linux\u002Farm64",[123,29257,28746],{"class":182},[123,29259,28913],{"class":129},[123,29261,29262],{"class":238},"你的镜像",[123,29264,28919],{"class":133},[123,29266,1094],{"class":129},[123,29268,993],{"class":238},[123,29270,1044],{"class":129},[123,29272,29273],{"class":238},"标",[123,29275,29276],{"class":133},"签",[123,29278,1094],{"class":129},[123,29280,29281],{"class":182}," --push",[123,29283,28752],{"class":238},[123,29285,29286],{"class":125,"line":45},[123,29287,2409],{"emptyLinePlaceholder":50},[123,29289,29290],{"class":125,"line":1189},[123,29291,29292],{"class":192},"# 例子：\n",[123,29294,29295,29297,29299,29301],{"class":125,"line":1204},[123,29296,26564],{"class":1972},[123,29298,29184],{"class":238},[123,29300,28743],{"class":238},[123,29302,24689],{"class":182},[123,29304,29305,29308,29311],{"class":125,"line":1210},[123,29306,29307],{"class":133},"--platform ",[123,29309,29310],{"class":238},"linux\u002Famd64,linux\u002Farm64",[123,29312,24689],{"class":182},[123,29314,29315,29317,29320],{"class":125,"line":1224},[123,29316,28746],{"class":182},[123,29318,29319],{"class":238}," tungchiahui\u002Fros:noetic-focal",[123,29321,24689],{"class":182},[123,29323,29324,29326],{"class":125,"line":1230},[123,29325,29281],{"class":182},[123,29327,24689],{"class":182},[123,29329,29330],{"class":125,"line":1321},[123,29331,28752],{"class":238},[123,29333,29334],{"class":125,"line":1327},[123,29335,2409],{"emptyLinePlaceholder":50},[123,29337,29338,29340,29342,29344],{"class":125,"line":1339},[123,29339,26564],{"class":1972},[123,29341,29184],{"class":238},[123,29343,28743],{"class":238},[123,29345,24689],{"class":182},[123,29347,29348,29350,29352],{"class":125,"line":1621},[123,29349,29307],{"class":133},[123,29351,29310],{"class":238},[123,29353,24689],{"class":182},[123,29355,29356,29358,29361],{"class":125,"line":1626},[123,29357,28746],{"class":182},[123,29359,29360],{"class":238}," tungchiahui\u002Fros:humble-jammy",[123,29362,24689],{"class":182},[123,29364,29365,29367],{"class":125,"line":1632},[123,29366,29281],{"class":182},[123,29368,24689],{"class":182},[123,29370,29371],{"class":125,"line":1637},[123,29372,28752],{"class":238},[123,29374,29375],{"class":125,"line":1651},[123,29376,2409],{"emptyLinePlaceholder":50},[123,29378,29379,29381,29383,29385],{"class":125,"line":1656},[123,29380,26564],{"class":1972},[123,29382,29184],{"class":238},[123,29384,28743],{"class":238},[123,29386,24689],{"class":182},[123,29388,29389,29391,29393],{"class":125,"line":1662},[123,29390,29307],{"class":133},[123,29392,29310],{"class":238},[123,29394,24689],{"class":182},[123,29396,29397,29399,29402],{"class":125,"line":1683},[123,29398,28746],{"class":182},[123,29400,29401],{"class":238}," tungchiahui\u002Fros:jazzy-noble",[123,29403,24689],{"class":182},[123,29405,29406,29408],{"class":125,"line":1688},[123,29407,29281],{"class":182},[123,29409,24689],{"class":182},[123,29411,29412],{"class":125,"line":1702},[123,29413,28752],{"class":238},[123,29415,29416],{"class":125,"line":1707},[123,29417,2409],{"emptyLinePlaceholder":50},[123,29419,29420,29422,29424,29426],{"class":125,"line":1736},[123,29421,26331],{"class":1972},[123,29423,29184],{"class":238},[123,29425,28743],{"class":238},[123,29427,24689],{"class":182},[123,29429,29430,29432,29434],{"class":125,"line":1741},[123,29431,29307],{"class":133},[123,29433,29310],{"class":238},[123,29435,24689],{"class":182},[123,29437,29438,29440,29443],{"class":125,"line":1758},[123,29439,28746],{"class":182},[123,29441,29442],{"class":238}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[123,29444,24689],{"class":182},[123,29446,29447,29449],{"class":125,"line":1763},[123,29448,29281],{"class":182},[123,29450,24689],{"class":182},[123,29452,29453],{"class":125,"line":1768},[123,29454,28752],{"class":238},[123,29456,29457],{"class":125,"line":1773},[123,29458,2409],{"emptyLinePlaceholder":50},[123,29460,29461,29463,29465,29467],{"class":125,"line":1787},[123,29462,26564],{"class":1972},[123,29464,29184],{"class":238},[123,29466,28743],{"class":238},[123,29468,24689],{"class":182},[123,29470,29471,29473,29475],{"class":125,"line":1792},[123,29472,29307],{"class":133},[123,29474,29310],{"class":238},[123,29476,24689],{"class":182},[123,29478,29479,29481,29484],{"class":125,"line":2586},[123,29480,28746],{"class":182},[123,29482,29483],{"class":238}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[123,29485,24689],{"class":182},[123,29487,29488,29490],{"class":125,"line":2600},[123,29489,29281],{"class":182},[123,29491,24689],{"class":182},[123,29493,29494],{"class":125,"line":2608},[123,29495,28752],{"class":238},[123,29497,29498],{"class":125,"line":2613},[123,29499,2409],{"emptyLinePlaceholder":50},[123,29501,29502,29504,29506,29508],{"class":125,"line":2619},[123,29503,26331],{"class":1972},[123,29505,29184],{"class":238},[123,29507,28743],{"class":238},[123,29509,24689],{"class":182},[123,29511,29512,29514,29516],{"class":125,"line":2625},[123,29513,29307],{"class":133},[123,29515,29310],{"class":238},[123,29517,24689],{"class":182},[123,29519,29520,29522,29525],{"class":125,"line":2630},[123,29521,28746],{"class":182},[123,29523,29524],{"class":238}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[123,29526,24689],{"class":182},[123,29528,29529,29531],{"class":125,"line":7958},[123,29530,29281],{"class":182},[123,29532,24689],{"class":182},[123,29534,29535],{"class":125,"line":7982},[123,29536,28752],{"class":238},[123,29538,29539],{"class":125,"line":7987},[123,29540,2409],{"emptyLinePlaceholder":50},[123,29542,29543,29545,29547,29549],{"class":125,"line":7993},[123,29544,26564],{"class":1972},[123,29546,29184],{"class":238},[123,29548,28743],{"class":238},[123,29550,24689],{"class":182},[123,29552,29553,29555,29557],{"class":125,"line":8020},[123,29554,29307],{"class":133},[123,29556,29310],{"class":238},[123,29558,24689],{"class":182},[123,29560,29561,29563,29566],{"class":125,"line":8025},[123,29562,28746],{"class":182},[123,29564,29565],{"class":238}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[123,29567,24689],{"class":182},[123,29569,29570,29572],{"class":125,"line":8031},[123,29571,29281],{"class":182},[123,29573,24689],{"class":182},[123,29575,29576],{"class":125,"line":8043},[123,29577,28752],{"class":238},[123,29579,29580],{"class":125,"line":8055},[123,29581,2409],{"emptyLinePlaceholder":50},[123,29583,29584,29586,29588,29590],{"class":125,"line":8067},[123,29585,26564],{"class":1972},[123,29587,29184],{"class":238},[123,29589,28743],{"class":238},[123,29591,24689],{"class":182},[123,29593,29594,29596,29598],{"class":125,"line":9726},[123,29595,29307],{"class":133},[123,29597,29310],{"class":238},[123,29599,24689],{"class":182},[123,29601,29602,29604,29607],{"class":125,"line":9751},[123,29603,28746],{"class":182},[123,29605,29606],{"class":238}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[123,29608,24689],{"class":182},[123,29610,29611,29613],{"class":125,"line":9774},[123,29612,29281],{"class":182},[123,29614,24689],{"class":182},[123,29616,29617],{"class":125,"line":9798},[123,29618,28752],{"class":238},[123,29620,29621],{"class":125,"line":9803},[123,29622,2409],{"emptyLinePlaceholder":50},[123,29624,29625,29627,29629,29631],{"class":125,"line":9808},[123,29626,26331],{"class":1972},[123,29628,29184],{"class":238},[123,29630,28743],{"class":238},[123,29632,24689],{"class":182},[123,29634,29635,29637,29639],{"class":125,"line":9813},[123,29636,29307],{"class":133},[123,29638,29310],{"class":238},[123,29640,24689],{"class":182},[123,29642,29643,29645,29648],{"class":125,"line":9822},[123,29644,28746],{"class":182},[123,29646,29647],{"class":238}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[123,29649,24689],{"class":182},[123,29651,29652,29654],{"class":125,"line":9827},[123,29653,29281],{"class":182},[123,29655,24689],{"class":182},[123,29657,29658],{"class":125,"line":9833},[123,29659,28752],{"class":238},[123,29661,29662],{"class":125,"line":9854},[123,29663,2409],{"emptyLinePlaceholder":50},[123,29665,29666,29669,29671,29673],{"class":125,"line":9860},[123,29667,29668],{"class":1972},"  docker",[123,29670,29184],{"class":238},[123,29672,28743],{"class":238},[123,29674,24689],{"class":182},[123,29676,29677,29679,29681],{"class":125,"line":9874},[123,29678,29307],{"class":133},[123,29680,29310],{"class":238},[123,29682,24689],{"class":182},[123,29684,29685,29687,29690],{"class":125,"line":9880},[123,29686,28746],{"class":182},[123,29688,29689],{"class":238}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[123,29691,24689],{"class":182},[123,29693,29694,29696],{"class":125,"line":9907},[123,29695,29281],{"class":182},[123,29697,24689],{"class":182},[123,29699,29700],{"class":125,"line":9916},[123,29701,28752],{"class":238},[14,29703,29704],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,29706,29707],{},[35,29708],{"alt":37,"src":29709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,29711,29712],{},[35,29713],{"alt":37,"src":29714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[22008,29716,29718],{"id":29717},"_623清除构建缓存","6.2.3.清除构建缓存",[114,29720,29722],{"className":23832,"code":29721,"language":23834,"meta":37,"style":37},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[120,29723,29724,29729],{"__ignoreMap":37},[123,29725,29726],{"class":125,"line":126},[123,29727,29728],{"class":192},"# 清理BuildKit构建缓存\n",[123,29730,29731,29733,29736,29739],{"class":125,"line":45},[123,29732,26564],{"class":1972},[123,29734,29735],{"class":238}," builder",[123,29737,29738],{"class":238}," prune",[123,29740,29741],{"class":182}," -f\n",[14,29743,29744],{},[35,29745],{"alt":37,"src":29746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[94,29748,29750],{"id":29749},"_63补充","6.3.补充",[22008,29752,29754],{"id":29753},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,29756,29757],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,29759,29760],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,29762,29763],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[114,29765,29767],{"className":23832,"code":29766,"language":23834,"meta":37,"style":37},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[120,29768,29769,29776],{"__ignoreMap":37},[123,29770,29771,29773],{"class":125,"line":126},[123,29772,27381],{"class":1972},[123,29774,29775],{"class":238}," nginx\n",[123,29777,29778,29780,29783,29786,29788],{"class":125,"line":45},[123,29779,28566],{"class":1972},[123,29781,29782],{"class":238}," echo",[123,29784,29785],{"class":238}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[123,29787,26233],{"class":129},[123,29789,29790],{"class":238}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,29792,29793],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,29795,29796],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[114,29798,29800],{"className":23832,"code":29799,"language":23834,"meta":37,"style":37},"docker build -t nginx:tuling .\n",[120,29801,29802],{"__ignoreMap":37},[123,29803,29804,29806,29808,29810,29813],{"class":125,"line":126},[123,29805,26564],{"class":1972},[123,29807,28743],{"class":238},[123,29809,28746],{"class":182},[123,29811,29812],{"class":238}," nginx:tuling",[123,29814,28752],{"class":238},[14,29816,29817],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,29819,29820],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[114,29822,29824],{"className":23832,"code":29823,"language":23834,"meta":37,"style":37},"docker run -d -p 92:80 nginx:tuling\n",[120,29825,29826],{"__ignoreMap":37},[123,29827,29828,29830,29832,29835,29837,29840],{"class":125,"line":126},[123,29829,26564],{"class":1972},[123,29831,27241],{"class":238},[123,29833,29834],{"class":182}," -d",[123,29836,29227],{"class":182},[123,29838,29839],{"class":238}," 92:80",[123,29841,29842],{"class":238}," nginx:tuling\n",[14,29844,29845,29846],{},"4、访问 ",[372,29847,29850],{"href":29848,"rel":29849},"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",[23875],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,29852,29853],{},[35,29854],{"alt":37,"src":29855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,29857,29858],{},[35,29859],{"alt":37,"src":29860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[22008,29862,29864],{"id":29863},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,29866,29867],{},"只需要知道大体流程即可",[14,29869,29870],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,29872,29873],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,29875,29876],{},"2、在Dockerfile中添加以下内容",[114,29878,29880],{"className":26102,"code":29879,"language":26104,"meta":37,"style":37},"# 基于哪个镜像\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",[120,29881,29882,29887,29892,29897,29902,29907,29912,29917],{"__ignoreMap":37},[123,29883,29884],{"class":125,"line":126},[123,29885,29886],{},"# 基于哪个镜像\n",[123,29888,29889],{"class":125,"line":45},[123,29890,29891],{},"From java:8\n",[123,29893,29894],{"class":125,"line":1189},[123,29895,29896],{},"# 复制文件到容器\n",[123,29898,29899],{"class":125,"line":1204},[123,29900,29901],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[123,29903,29904],{"class":125,"line":1210},[123,29905,29906],{},"# 声明需要暴露的端口\n",[123,29908,29909],{"class":125,"line":1224},[123,29910,29911],{},"EXPOSE 8877\n",[123,29913,29914],{"class":125,"line":1230},[123,29915,29916],{},"# 配置容器启动后执行的命令\n",[123,29918,29919],{"class":125,"line":1321},[123,29920,29921],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,29923,29924],{},"3、使用docker build命令构建镜像",[114,29926,29928],{"className":23832,"code":29927,"language":23834,"meta":37,"style":37},"docker build -t tulingmall-member:0.0.5 .\n",[120,29929,29930],{"__ignoreMap":37},[123,29931,29932,29934,29936,29938,29941],{"class":125,"line":126},[123,29933,26564],{"class":1972},[123,29935,28743],{"class":238},[123,29937,28746],{"class":182},[123,29939,29940],{"class":238}," tulingmall-member:0.0.5",[123,29942,28752],{"class":238},[14,29944,29945],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,29947,29948],{},[35,29949],{"alt":37,"src":29950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,29952,29953],{},"4、启动镜像，加-d可在后台启动",[114,29955,29957],{"className":23832,"code":29956,"language":23834,"meta":37,"style":37},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[120,29958,29959],{"__ignoreMap":37},[123,29960,29961,29963,29965,29967,29969,29972],{"class":125,"line":126},[123,29962,26564],{"class":1972},[123,29964,27241],{"class":238},[123,29966,29834],{"class":182},[123,29968,29227],{"class":182},[123,29970,29971],{"class":238}," 8877:8877",[123,29973,29974],{"class":238}," tulingmall-member:0.0.5\n",[14,29976,29977],{},"加上JVM参数：",[114,29979,29981],{"className":23832,"code":29980,"language":23834,"meta":37,"style":37},"# --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",[120,29982,29983,29988,30003,30013,30022,30029],{"__ignoreMap":37},[123,29984,29985],{"class":125,"line":126},[123,29986,29987],{"class":192},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[123,29989,29990,29992,29994,29997,29999,30001],{"class":125,"line":45},[123,29991,26564],{"class":1972},[123,29993,27241],{"class":238},[123,29995,29996],{"class":182},"  -d",[123,29998,29227],{"class":182},[123,30000,29971],{"class":238},[123,30002,24689],{"class":182},[123,30004,30005,30007,30010],{"class":125,"line":1189},[123,30006,28139],{"class":133},[123,30008,30009],{"class":238},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[123,30011,30012],{"class":182},"  \\\n",[123,30014,30015,30017,30020],{"class":125,"line":1204},[123,30016,28139],{"class":133},[123,30018,30019],{"class":238},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[123,30021,30012],{"class":182},[123,30023,30024,30027],{"class":125,"line":1210},[123,30025,30026],{"class":133},"--cap-add=SYS_PTRACE  ",[123,30028,26186],{"class":182},[123,30030,30031],{"class":125,"line":1224},[123,30032,30033],{"class":133},"tulingmall-member:0.0.5\n",[14,30035,30036],{},"5、访问会员服务接口",[14,30038,30039],{},[35,30040],{"alt":37,"src":30041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[22008,30043,30045],{"id":30044},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30047,30048],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30050,30051,30052],{},"阿里云docker镜像仓库：",[372,30053,30054],{"href":30054,"rel":30055},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23875],[14,30057,30058],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30060,30061],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30063,30064],{},[35,30065],{"alt":37,"src":30066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30068,30069],{},"要把镜像推送到镜像仓库",[114,30071,30073],{"className":23832,"code":30072,"language":23834,"meta":37,"style":37},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[120,30074,30075],{"__ignoreMap":37},[123,30076,30077,30079,30081,30083],{"class":125,"line":126},[123,30078,26564],{"class":1972},[123,30080,28908],{"class":238},[123,30082,29940],{"class":238},[123,30084,30085],{"class":238}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30087,30088],{},"最后将镜像推送到远程仓库",[114,30090,30092],{"className":23832,"code":30091,"language":23834,"meta":37,"style":37},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[120,30093,30094],{"__ignoreMap":37},[123,30095,30096,30098,30100],{"class":125,"line":126},[123,30097,26564],{"class":1972},[123,30099,29027],{"class":238},[123,30101,30085],{"class":238},[5136,30103,30104],{},"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":37,"searchDepth":45,"depth":45,"links":30106},[30107,30108,30109],{"id":28494,"depth":1189,"text":28495},{"id":28723,"depth":1189,"text":28724},{"id":29749,"depth":1189,"text":29750},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28486,"description":37},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30116,"title":30117,"body":30118,"description":37,"extension":48,"meta":30261,"navigation":50,"path":30262,"seo":30263,"stem":30264,"__hash__":30265},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30119,"toc":30259},[30120,30123,30128,30133,30136,30141,30146,30149,30154,30159,30162,30167,30170,30173,30176,30179,30182,30185,30205,30227,30230,30233,30253,30256],[10,30121,30117],{"id":30122},"_7vscode远程开发",[77,30124,30125],{},[80,30126,30127],{},"插件1：微软Docker工具",[14,30129,30130],{},[35,30131],{"alt":37,"src":30132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30134,30135],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30137,30138],{},[35,30139],{"alt":37,"src":30140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[77,30142,30143],{"start":45},[80,30144,30145],{},"插件2：微软Docker远程开发工具",[14,30147,30148],{},"下面这是远程开发的插件。",[14,30150,30151],{},[35,30152],{"alt":37,"src":30153},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30155,30156],{},[35,30157],{"alt":37,"src":30158},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30160,30161],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30163,30164],{},[35,30165],{"alt":37,"src":30166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30168,30169],{},"安装完拓展之后，vscode进行链接：",[14,30171,30172],{},"1.按ctrl+shift+p",[14,30174,30175],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30177,30178],{},"3.选择目前运行的容器",[14,30180,30181],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30183,30184],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[114,30186,30188],{"className":23832,"code":30187,"language":23834,"meta":37,"style":37},"docker run -v 主机目录:容器目录 image-name\n",[120,30189,30190],{"__ignoreMap":37},[123,30191,30192,30194,30196,30199,30202],{"class":125,"line":126},[123,30193,26564],{"class":1972},[123,30195,27241],{"class":238},[123,30197,30198],{"class":182}," -v",[123,30200,30201],{"class":238}," 主机目录:容器目录",[123,30203,30204],{"class":238}," image-name\n",[114,30206,30208],{"className":23832,"code":30207,"language":23834,"meta":37,"style":37},"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",[120,30209,30210],{"__ignoreMap":37},[123,30211,30212,30214,30216,30219,30221,30224],{"class":125,"line":126},[123,30213,26564],{"class":1972},[123,30215,27241],{"class":238},[123,30217,30218],{"class":182}," -it",[123,30220,30198],{"class":182},[123,30222,30223],{"class":238}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[123,30225,30226],{"class":238}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30228,30229],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30231,30232],{},"查看挂载情况：",[114,30234,30236],{"className":23832,"code":30235,"language":23834,"meta":37,"style":37},"mount | grep -i project\n",[120,30237,30238],{"__ignoreMap":37},[123,30239,30240,30243,30245,30248,30250],{"class":125,"line":126},[123,30241,30242],{"class":1972},"mount",[123,30244,25120],{"class":129},[123,30246,30247],{"class":1972}," grep",[123,30249,26441],{"class":182},[123,30251,30252],{"class":238}," project\n",[14,30254,30255],{},"也可以通过ls来进行查看",[5136,30257,30258],{},"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":37,"searchDepth":45,"depth":45,"links":30260},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30117,"description":37},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30267,"title":30268,"body":30269,"description":47,"extension":48,"meta":30273,"navigation":50,"path":30275,"seo":30276,"stem":30277,"__hash__":30278},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30270,"toc":30271},[],{"title":37,"searchDepth":45,"depth":45,"links":30272},[],{"category":30274},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30268,"description":47},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30280,"title":30281,"body":30282,"description":47,"extension":48,"meta":30286,"navigation":50,"path":30287,"seo":30288,"stem":30289,"__hash__":30290},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30283,"toc":30284},[],{"title":37,"searchDepth":45,"depth":45,"links":30285},[],{"category":30274},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30281,"description":47},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30292,"title":30293,"body":30294,"description":47,"extension":48,"meta":30587,"navigation":50,"path":30588,"seo":30589,"stem":30590,"__hash__":30591},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30295,"toc":30585},[30296,30299,30307,30322,30327,30378,30381,30387,30574,30579,30582],[10,30297,30293],{"id":30298},"_1验证深度学习环境",[14,30300,30301,30302],{},"关于环境的安装，看",[372,30303,30306],{"href":30304,"rel":30305},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23875],"Pytorch-->深度学习",[14,30308,30309,30310,30313,30314,30317,30318,30321],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[120,30311,30312],{},"pytorch-cuda=12.4"," 是一个“ ",[283,30315,30316],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[283,30319,30320],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30323,30324],{},[35,30325],{"alt":37,"src":30326},"\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",[114,30328,30330],{"className":23832,"code":30329,"language":23834,"meta":37,"style":37},"# 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",[120,30331,30332,30337],{"__ignoreMap":37},[123,30333,30334],{"class":125,"line":126},[123,30335,30336],{"class":192},"# CUDA 12.4\n",[123,30338,30339,30342,30344,30347,30350,30353,30356,30359,30361,30364,30367,30370,30373,30375],{"class":125,"line":45},[123,30340,30341],{"class":1972},"conda",[123,30343,23844],{"class":238},[123,30345,30346],{"class":238}," pytorch==",[123,30348,30349],{"class":182},"2.5.1",[123,30351,30352],{"class":238}," torchvision==",[123,30354,30355],{"class":182},"0.20.1",[123,30357,30358],{"class":238}," torchaudio==",[123,30360,30349],{"class":182},[123,30362,30363],{"class":238}," pytorch-cuda=",[123,30365,30366],{"class":182},"12.4",[123,30368,30369],{"class":182}," -c",[123,30371,30372],{"class":238}," pytorch",[123,30374,30369],{"class":182},[123,30376,30377],{"class":238}," nvidia\n",[14,30379,30380],{},"）：",[14,30382,30383],{},[372,30384,30385],{"href":30385,"rel":30386},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23875],[114,30388,30392],{"className":30389,"code":30390,"language":30391,"meta":37,"style":37},"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",[120,30393,30394,30399,30407,30412,30422,30438,30443,30453,30490,30497,30509,30525,30530,30540,30552,30562],{"__ignoreMap":37},[123,30395,30396],{"class":125,"line":126},[123,30397,30398],{"class":192},"# 对深度学习环境进行测试\n",[123,30400,30401,30404],{"class":125,"line":45},[123,30402,30403],{"class":129},"import",[123,30405,30406],{"class":133}," torch\n",[123,30408,30409],{"class":125,"line":1189},[123,30410,30411],{"class":192},"# 查看cuda是否被激活\n",[123,30413,30414,30417,30419],{"class":125,"line":1204},[123,30415,30416],{"class":133},"flag",[123,30418,179],{"class":129},[123,30420,30421],{"class":133},"torch.cuda.is_available()\n",[123,30423,30424,30427,30429,30432,30435],{"class":125,"line":1210},[123,30425,30426],{"class":182},"print",[123,30428,134],{"class":133},[123,30430,30431],{"class":238},"\"cuda:\"",[123,30433,30434],{"class":133},", flag)   ",[123,30436,30437],{"class":192},"#返回true的话说明被激活\n",[123,30439,30440],{"class":125,"line":1224},[123,30441,30442],{"class":192},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[123,30444,30445,30448,30450],{"class":125,"line":1230},[123,30446,30447],{"class":133},"ngpu",[123,30449,179],{"class":129},[123,30451,30452],{"class":182},"1\n",[123,30454,30455,30458,30460,30463,30466,30468,30471,30474,30477,30479,30481,30483,30485,30488],{"class":125,"line":1321},[123,30456,30457],{"class":133},"device",[123,30459,179],{"class":129},[123,30461,30462],{"class":133},"torch.device(",[123,30464,30465],{"class":238},"\"cuda:0\"",[123,30467,1713],{"class":129},[123,30469,30470],{"class":133},"(torch.cuda.is_available() ",[123,30472,30473],{"class":129},"and",[123,30475,30476],{"class":133}," ngpu",[123,30478,1094],{"class":129},[123,30480,325],{"class":182},[123,30482,13724],{"class":133},[123,30484,1710],{"class":129},[123,30486,30487],{"class":238}," \"cpu\"",[123,30489,140],{"class":133},[123,30491,30492,30494],{"class":125,"line":1327},[123,30493,30426],{"class":182},[123,30495,30496],{"class":133},"(device)\n",[123,30498,30499,30501,30504,30506],{"class":125,"line":1339},[123,30500,30426],{"class":182},[123,30502,30503],{"class":133},"(torch.cuda.get_device_name(",[123,30505,325],{"class":182},[123,30507,30508],{"class":133},"))\n",[123,30510,30511,30513,30516,30518,30520,30522],{"class":125,"line":1621},[123,30512,30426],{"class":182},[123,30514,30515],{"class":133},"(torch.rand(",[123,30517,205],{"class":182},[123,30519,512],{"class":133},[123,30521,205],{"class":182},[123,30523,30524],{"class":133},").cuda())\n",[123,30526,30527],{"class":125,"line":1626},[123,30528,30529],{"class":192},"# 查看cuda和cudnn的版本\n",[123,30531,30532,30535,30537],{"class":125,"line":1632},[123,30533,30534],{"class":133},"cuda_version",[123,30536,179],{"class":129},[123,30538,30539],{"class":133},"torch.version.cuda\n",[123,30541,30542,30544,30546,30549],{"class":125,"line":1637},[123,30543,30426],{"class":182},[123,30545,134],{"class":133},[123,30547,30548],{"class":238},"\"cuda version\"",[123,30550,30551],{"class":133},",cuda_version)\n",[123,30553,30554,30557,30559],{"class":125,"line":1651},[123,30555,30556],{"class":133},"cudnn_version",[123,30558,179],{"class":129},[123,30560,30561],{"class":133},"torch.backends.cudnn.version()\n",[123,30563,30564,30566,30568,30571],{"class":125,"line":1656},[123,30565,30426],{"class":182},[123,30567,134],{"class":133},[123,30569,30570],{"class":238},"\"cudnn version\"",[123,30572,30573],{"class":133},",cudnn_version)\n",[14,30575,30576],{},[35,30577],{"alt":37,"src":30578},"\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,30580,30581],{},"cuda:0 指的是一块显卡",[5136,30583,30584],{},"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":37,"searchDepth":45,"depth":45,"links":30586},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30293,"description":47},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30593,"title":30594,"body":30595,"description":47,"extension":48,"meta":50399,"navigation":50,"path":50400,"seo":50401,"stem":50402,"__hash__":50403},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30596,"toc":50393},[30597,30600,30604,30608,30611,30616,30621,30624,30629,30634,30639,30642,30646,30651,30655,30660,30663,30668,30671,30674,30677,30680,30685,30688,30693,30698,30703,30708,30711,30715,30718,30723,31327,31332,31335,31340,31343,31346,31810,31813,31816,31819,31822,33873,33876,33881,33886,34681,34684,34689,35467,35471,37130,37134,37848,37852,37856,37861,37866,37871,37874,37879,37884,37889,37894,37899,37903,37908,39190,39195,39198,39201,39204,39359,39362,39365,40581,40586,41281,41285,41289,41294,41299,41302,41307,41312,41317,41322,41327,41332,41337,41342,41347,41352,41357,41362,41367,41372,41377,41382,41387,41392,41397,41402,41407,41412,41417,41422,41427,41432,41437,41442,41447,41452,41456,41460,41463,42941,42945,44592,44596,45290,45294,45297,45300,45844,45847,45851,45854,47251,47255,47258,47836,49623,49627,49630,50390],[10,30598,30594],{"id":30599},"_2经典神经网络",[94,30601,30603],{"id":30602},"_21lenet与alexnet","2.1.LeNet与AlexNet",[22008,30605,30607],{"id":30606},"_211原理介绍","2.1.1.原理介绍",[14,30609,30610],{},"LeNet-5",[77,30612,30613],{},[80,30614,30615],{},"原理",[14,30617,30618],{},[35,30619],{"alt":37,"src":30620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[14,30622,30623],{},"B是batch批次；C是channel通道",[77,30625,30626],{"start":45},[80,30627,30628],{},"网络参数详细",[14,30630,30631],{},[35,30632],{"alt":37,"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-004.png",[14,30635,30636],{},[35,30637],{"alt":37,"src":30638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[14,30640,30641],{},"AlexNet",[77,30643,30644],{},[80,30645,30615],{},[14,30647,30648],{},[35,30649],{"alt":37,"src":30650},"\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",[77,30652,30653],{"start":45},[80,30654,30628],{},[14,30656,30657],{},[35,30658],{"alt":37,"src":30659},"\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,30661,30662],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,30664,30665],{},[35,30666],{"alt":37,"src":30667},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-008.png",[14,30669,30670],{},"数据处理中的图像增强操作:",[14,30672,30673],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,30675,30676],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,30678,30679],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,30681,30682],{},[35,30683],{"alt":37,"src":30684},"\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,30686,30687],{},"提升网络精确度的方法：LRN正则化",[14,30689,30690],{},[35,30691],{"alt":37,"src":30692},"\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,30694,30695],{},[35,30696],{"alt":37,"src":30697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-011.png",[77,30699,30700],{"start":1189},[80,30701,30702],{},"AlexNet的总结",[14,30704,30705],{},[35,30706],{"alt":37,"src":30707},"\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,30709,30710],{},"比LeNet模型要深一丢丢",[22008,30712,30714],{"id":30713},"_212代码实现","2.1.2.代码实现",[14,30716,30717],{},"（1）LeNet",[77,30719,30720],{},[80,30721,30722],{},"模型搭建",[114,30724,30726],{"className":30389,"code":30725,"language":30391,"meta":37,"style":37},"# 导入库\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",[120,30727,30728,30733,30739,30744,30757,30762,30774,30778,30798,30803,30808,30819,30824,30843,30847,30852,30901,30913,30918,30947,30982,31009,31014,31026,31031,31051,31070,31089,31093,31098,31108,31125,31136,31151,31162,31173,31188,31203,31214,31221,31225,31239,31244,31267,31272,31277,31282,31286,31291,31296,31306],{"__ignoreMap":37},[123,30729,30730],{"class":125,"line":126},[123,30731,30732],{"class":192},"# 导入库\n",[123,30734,30735,30737],{"class":125,"line":45},[123,30736,30403],{"class":129},[123,30738,30406],{"class":133},[123,30740,30741],{"class":125,"line":1189},[123,30742,30743],{"class":192},"# 导入神经网络层\n",[123,30745,30746,30749,30752,30754],{"class":125,"line":1204},[123,30747,30748],{"class":129},"from",[123,30750,30751],{"class":133}," torch ",[123,30753,30403],{"class":129},[123,30755,30756],{"class":133}," nn\n",[123,30758,30759],{"class":125,"line":1210},[123,30760,30761],{"class":192},"# 导入展示神经网络参数的包\n",[123,30763,30764,30766,30769,30771],{"class":125,"line":1224},[123,30765,30748],{"class":129},[123,30767,30768],{"class":133}," torchsummary ",[123,30770,30403],{"class":129},[123,30772,30773],{"class":133}," summary\n",[123,30775,30776],{"class":125,"line":1230},[123,30777,2409],{"emptyLinePlaceholder":50},[123,30779,30780,30782,30785,30787,30790,30792,30795],{"class":125,"line":1321},[123,30781,14704],{"class":129},[123,30783,30784],{"class":1972}," LeNet",[123,30786,134],{"class":133},[123,30788,30789],{"class":1972},"nn",[123,30791,692],{"class":133},[123,30793,30794],{"class":1972},"Module",[123,30796,30797],{"class":133},"):\n",[123,30799,30800],{"class":125,"line":1327},[123,30801,30802],{"class":192},"    # 模型初始化:\n",[123,30804,30805],{"class":125,"line":1339},[123,30806,30807],{"class":192},"    # 定义一些网络层和激活函数\n",[123,30809,30810,30813,30816],{"class":125,"line":1621},[123,30811,30812],{"class":129},"    def",[123,30814,30815],{"class":182}," __init__",[123,30817,30818],{"class":133},"(self):\n",[123,30820,30821],{"class":125,"line":1626},[123,30822,30823],{"class":192},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[123,30825,30826,30829,30832,30835,30838,30841],{"class":125,"line":1632},[123,30827,30828],{"class":182},"        super",[123,30830,30831],{"class":133},"(LeNet,",[123,30833,30834],{"class":182},"self",[123,30836,30837],{"class":133},").",[123,30839,30840],{"class":182},"__init__",[123,30842,1985],{"class":133},[123,30844,30845],{"class":125,"line":1637},[123,30846,2409],{"emptyLinePlaceholder":50},[123,30848,30849],{"class":125,"line":1651},[123,30850,30851],{"class":192},"        # 定义网络层\n",[123,30853,30854,30857,30860,30862,30865,30868,30870,30872,30874,30877,30879,30881,30883,30886,30888,30890,30892,30895,30897,30899],{"class":125,"line":1656},[123,30855,30856],{"class":182},"        self",[123,30858,30859],{"class":133},".c1",[123,30861,179],{"class":129},[123,30863,30864],{"class":133},"nn.Conv2d(",[123,30866,30867],{"class":5226},"in_channels",[123,30869,179],{"class":129},[123,30871,351],{"class":182},[123,30873,512],{"class":133},[123,30875,30876],{"class":5226},"out_channels",[123,30878,179],{"class":129},[123,30880,478],{"class":182},[123,30882,512],{"class":133},[123,30884,30885],{"class":5226},"kernel_size",[123,30887,179],{"class":129},[123,30889,453],{"class":182},[123,30891,512],{"class":133},[123,30893,30894],{"class":5226},"padding",[123,30896,179],{"class":129},[123,30898,211],{"class":182},[123,30900,140],{"class":133},[123,30902,30903,30905,30908,30910],{"class":125,"line":1662},[123,30904,30856],{"class":182},[123,30906,30907],{"class":133},".sig",[123,30909,179],{"class":129},[123,30911,30912],{"class":133},"nn.Sigmoid()\n",[123,30914,30915],{"class":125,"line":1683},[123,30916,30917],{"class":192},"        # 定义池化\n",[123,30919,30920,30922,30925,30927,30930,30932,30934,30936,30938,30941,30943,30945],{"class":125,"line":1688},[123,30921,30856],{"class":182},[123,30923,30924],{"class":133},".s2",[123,30926,179],{"class":129},[123,30928,30929],{"class":133},"nn.AvgPool2d(",[123,30931,30885],{"class":5226},[123,30933,179],{"class":129},[123,30935,211],{"class":182},[123,30937,512],{"class":133},[123,30939,30940],{"class":5226},"stride",[123,30942,179],{"class":129},[123,30944,211],{"class":182},[123,30946,140],{"class":133},[123,30948,30949,30951,30954,30956,30958,30960,30962,30964,30966,30968,30970,30972,30974,30976,30978,30980],{"class":125,"line":1702},[123,30950,30856],{"class":182},[123,30952,30953],{"class":133},".c3",[123,30955,179],{"class":129},[123,30957,30864],{"class":133},[123,30959,30867],{"class":5226},[123,30961,179],{"class":129},[123,30963,478],{"class":182},[123,30965,512],{"class":133},[123,30967,30876],{"class":5226},[123,30969,179],{"class":129},[123,30971,735],{"class":182},[123,30973,512],{"class":133},[123,30975,30885],{"class":5226},[123,30977,179],{"class":129},[123,30979,453],{"class":182},[123,30981,140],{"class":133},[123,30983,30984,30986,30989,30991,30993,30995,30997,30999,31001,31003,31005,31007],{"class":125,"line":1707},[123,30985,30856],{"class":182},[123,30987,30988],{"class":133},".s4",[123,30990,179],{"class":129},[123,30992,30929],{"class":133},[123,30994,30885],{"class":5226},[123,30996,179],{"class":129},[123,30998,211],{"class":182},[123,31000,512],{"class":133},[123,31002,30940],{"class":5226},[123,31004,179],{"class":129},[123,31006,211],{"class":182},[123,31008,140],{"class":133},[123,31010,31011],{"class":125,"line":1736},[123,31012,31013],{"class":192},"        # 定义平展层\n",[123,31015,31016,31018,31021,31023],{"class":125,"line":1741},[123,31017,30856],{"class":182},[123,31019,31020],{"class":133},".flatten",[123,31022,179],{"class":129},[123,31024,31025],{"class":133},"nn.Flatten()\n",[123,31027,31028],{"class":125,"line":1758},[123,31029,31030],{"class":192},"        # 定义全连接层\n",[123,31032,31033,31035,31038,31040,31043,31045,31047,31049],{"class":125,"line":1763},[123,31034,30856],{"class":182},[123,31036,31037],{"class":133},".f5",[123,31039,179],{"class":129},[123,31041,31042],{"class":133},"nn.Linear(",[123,31044,3996],{"class":182},[123,31046,512],{"class":133},[123,31048,951],{"class":182},[123,31050,140],{"class":133},[123,31052,31053,31055,31058,31060,31062,31064,31066,31068],{"class":125,"line":1768},[123,31054,30856],{"class":182},[123,31056,31057],{"class":133},".f6",[123,31059,179],{"class":129},[123,31061,31042],{"class":133},[123,31063,951],{"class":182},[123,31065,512],{"class":133},[123,31067,845],{"class":182},[123,31069,140],{"class":133},[123,31071,31072,31074,31077,31079,31081,31083,31085,31087],{"class":125,"line":1773},[123,31073,30856],{"class":182},[123,31075,31076],{"class":133},".f7",[123,31078,179],{"class":129},[123,31080,31042],{"class":133},[123,31082,845],{"class":182},[123,31084,512],{"class":133},[123,31086,580],{"class":182},[123,31088,140],{"class":133},[123,31090,31091],{"class":125,"line":1787},[123,31092,2409],{"emptyLinePlaceholder":50},[123,31094,31095],{"class":125,"line":1792},[123,31096,31097],{"class":192},"    # 写工具->写前向传播\n",[123,31099,31100,31102,31105],{"class":125,"line":2586},[123,31101,30812],{"class":129},[123,31103,31104],{"class":1972}," forward",[123,31106,31107],{"class":133},"(self,x):\n",[123,31109,31110,31113,31115,31117,31120,31122],{"class":125,"line":2600},[123,31111,31112],{"class":133},"        x",[123,31114,179],{"class":129},[123,31116,30834],{"class":182},[123,31118,31119],{"class":133},".sig(",[123,31121,30834],{"class":182},[123,31123,31124],{"class":133},".c1(x))\n",[123,31126,31127,31129,31131,31133],{"class":125,"line":2608},[123,31128,31112],{"class":133},[123,31130,179],{"class":129},[123,31132,30834],{"class":182},[123,31134,31135],{"class":133},".s2(x)\n",[123,31137,31138,31140,31142,31144,31146,31148],{"class":125,"line":2613},[123,31139,31112],{"class":133},[123,31141,179],{"class":129},[123,31143,30834],{"class":182},[123,31145,31119],{"class":133},[123,31147,30834],{"class":182},[123,31149,31150],{"class":133},".c3(x))\n",[123,31152,31153,31155,31157,31159],{"class":125,"line":2619},[123,31154,31112],{"class":133},[123,31156,179],{"class":129},[123,31158,30834],{"class":182},[123,31160,31161],{"class":133},".s4(x)\n",[123,31163,31164,31166,31168,31170],{"class":125,"line":2625},[123,31165,31112],{"class":133},[123,31167,179],{"class":129},[123,31169,30834],{"class":182},[123,31171,31172],{"class":133},".flatten(x)\n",[123,31174,31175,31177,31179,31181,31183,31185],{"class":125,"line":2630},[123,31176,31112],{"class":133},[123,31178,179],{"class":129},[123,31180,30834],{"class":182},[123,31182,31119],{"class":133},[123,31184,30834],{"class":182},[123,31186,31187],{"class":133},".f5(x))\n",[123,31189,31190,31192,31194,31196,31198,31200],{"class":125,"line":7958},[123,31191,31112],{"class":133},[123,31193,179],{"class":129},[123,31195,30834],{"class":182},[123,31197,31119],{"class":133},[123,31199,30834],{"class":182},[123,31201,31202],{"class":133},".f6(x))\n",[123,31204,31205,31207,31209,31211],{"class":125,"line":7982},[123,31206,31112],{"class":133},[123,31208,179],{"class":129},[123,31210,30834],{"class":182},[123,31212,31213],{"class":133},".f7(x)\n",[123,31215,31216,31218],{"class":125,"line":7987},[123,31217,14762],{"class":129},[123,31219,31220],{"class":133}," x\n",[123,31222,31223],{"class":125,"line":7993},[123,31224,2409],{"emptyLinePlaceholder":50},[123,31226,31227,31229,31232,31234,31237],{"class":125,"line":8020},[123,31228,1540],{"class":129},[123,31230,31231],{"class":182}," __name__",[123,31233,2958],{"class":129},[123,31235,31236],{"class":238},"\"__main__\"",[123,31238,3748],{"class":133},[123,31240,31241],{"class":125,"line":8025},[123,31242,31243],{"class":192},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[123,31245,31246,31249,31251,31253,31256,31258,31261,31263,31265],{"class":125,"line":8031},[123,31247,31248],{"class":133},"    device",[123,31250,179],{"class":129},[123,31252,30462],{"class":133},[123,31254,31255],{"class":238},"\"cuda\"",[123,31257,1713],{"class":129},[123,31259,31260],{"class":133}," torch.cuda.is_available() ",[123,31262,1710],{"class":129},[123,31264,30487],{"class":238},[123,31266,140],{"class":133},[123,31268,31269],{"class":125,"line":8043},[123,31270,31271],{"class":192},"    # 如果就是想指定用cpu用下方代码:\n",[123,31273,31274],{"class":125,"line":8055},[123,31275,31276],{"class":192},"    # device=\"cpu\"\n",[123,31278,31279],{"class":125,"line":8067},[123,31280,31281],{"class":192},"    # print(device)\n",[123,31283,31284],{"class":125,"line":9726},[123,31285,2409],{"emptyLinePlaceholder":50},[123,31287,31288],{"class":125,"line":9751},[123,31289,31290],{"class":192},"    # 实例化模型\n",[123,31292,31293],{"class":125,"line":9774},[123,31294,31295],{"class":192},"    # 将模型放到设备中去运行\n",[123,31297,31298,31301,31303],{"class":125,"line":9798},[123,31299,31300],{"class":133},"    model",[123,31302,179],{"class":129},[123,31304,31305],{"class":133},"LeNet().to(device)\n",[123,31307,31308,31311,31314,31316,31318,31320,31322,31324],{"class":125,"line":9803},[123,31309,31310],{"class":182},"    print",[123,31312,31313],{"class":133},"(summary(model,(",[123,31315,351],{"class":182},[123,31317,512],{"class":133},[123,31319,1035],{"class":182},[123,31321,512],{"class":133},[123,31323,1035],{"class":182},[123,31325,31326],{"class":133},")))\n",[14,31328,31329],{},[35,31330],{"alt":37,"src":31331},"\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,31333,31334],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[77,31336,31337],{"start":45},[80,31338,31339],{},"训练",[14,31341,31342],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31344,31345],{},"在训练之前可以将数据展示看一下",[114,31347,31349],{"className":30389,"code":31348,"language":30391,"meta":37,"style":37},"# 建立画图的函数，用于展示数据\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",[120,31350,31351,31356,31361,31373,31385,31398,31403,31415,31420,31432,31437,31449,31453,31457,31478,31490,31495,31516,31527,31531,31536,31554,31565,31570,31581,31586,31597,31601,31606,31621,31634,31639,31644,31657,31670,31683,31688,31692,31697,31717,31734,31754,31767,31780,31790,31805],{"__ignoreMap":37},[123,31352,31353],{"class":125,"line":126},[123,31354,31355],{"class":192},"# 建立画图的函数，用于展示数据\n",[123,31357,31358],{"class":125,"line":45},[123,31359,31360],{"class":192},"# torchvision中包含很多内置的数据集\n",[123,31362,31363,31365,31368,31370],{"class":125,"line":1189},[123,31364,30748],{"class":129},[123,31366,31367],{"class":133}," sklearn.externals.array_api_compat.torch ",[123,31369,30403],{"class":129},[123,31371,31372],{"class":133}," squeeze\n",[123,31374,31375,31377,31380,31382],{"class":125,"line":1204},[123,31376,30748],{"class":129},[123,31378,31379],{"class":133}," torchvision.datasets ",[123,31381,30403],{"class":129},[123,31383,31384],{"class":133}," FashionMNIST\n",[123,31386,31387,31389,31392,31395],{"class":125,"line":1210},[123,31388,30403],{"class":129},[123,31390,31391],{"class":133}," numpy ",[123,31393,31394],{"class":129},"as",[123,31396,31397],{"class":133}," np\n",[123,31399,31400],{"class":125,"line":1224},[123,31401,31402],{"class":192},"# 引入处理数据集的包\n",[123,31404,31405,31407,31410,31412],{"class":125,"line":1230},[123,31406,30748],{"class":129},[123,31408,31409],{"class":133}," torchvision ",[123,31411,30403],{"class":129},[123,31413,31414],{"class":133}," transforms\n",[123,31416,31417],{"class":125,"line":1321},[123,31418,31419],{"class":192},"# 从torch库中引入数据处理的包\n",[123,31421,31422,31424,31427,31429],{"class":125,"line":1327},[123,31423,30403],{"class":129},[123,31425,31426],{"class":133}," torch.utils.data ",[123,31428,31394],{"class":129},[123,31430,31431],{"class":133}," Data\n",[123,31433,31434],{"class":125,"line":1339},[123,31435,31436],{"class":192},"# 导入画图的库\n",[123,31438,31439,31441,31444,31446],{"class":125,"line":1621},[123,31440,30403],{"class":129},[123,31442,31443],{"class":133}," matplotlib.pyplot ",[123,31445,31394],{"class":129},[123,31447,31448],{"class":133}," plt\n",[123,31450,31451],{"class":125,"line":1626},[123,31452,2409],{"emptyLinePlaceholder":50},[123,31454,31455],{"class":125,"line":1632},[123,31456,2409],{"emptyLinePlaceholder":50},[123,31458,31459,31462,31464,31467,31470,31472,31475],{"class":125,"line":1637},[123,31460,31461],{"class":133},"train_data",[123,31463,179],{"class":129},[123,31465,31466],{"class":133},"FashionMNIST(",[123,31468,31469],{"class":5226},"root",[123,31471,179],{"class":129},[123,31473,31474],{"class":238},"'.\u002Fdata'",[123,31476,31477],{"class":133},",\n",[123,31479,31480,31483,31485,31488],{"class":125,"line":1651},[123,31481,31482],{"class":5226},"                        train",[123,31484,179],{"class":129},[123,31486,31487],{"class":182},"True",[123,31489,31477],{"class":133},[123,31491,31492],{"class":125,"line":1656},[123,31493,31494],{"class":192},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[123,31496,31497,31500,31502,31505,31508,31510,31513],{"class":125,"line":1662},[123,31498,31499],{"class":5226},"                        transform",[123,31501,179],{"class":129},[123,31503,31504],{"class":133},"transforms.Compose([transforms.Resize(",[123,31506,31507],{"class":5226},"size",[123,31509,179],{"class":129},[123,31511,31512],{"class":182},"224",[123,31514,31515],{"class":133},"),transforms.ToTensor()]),\n",[123,31517,31518,31521,31523,31525],{"class":125,"line":1683},[123,31519,31520],{"class":5226},"                        download",[123,31522,179],{"class":129},[123,31524,31487],{"class":182},[123,31526,140],{"class":133},[123,31528,31529],{"class":125,"line":1688},[123,31530,2409],{"emptyLinePlaceholder":50},[123,31532,31533],{"class":125,"line":1702},[123,31534,31535],{"class":192},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[123,31537,31538,31541,31543,31546,31549,31551],{"class":125,"line":1707},[123,31539,31540],{"class":133},"train_loader",[123,31542,179],{"class":129},[123,31544,31545],{"class":133},"Data.DataLoader(",[123,31547,31548],{"class":5226},"dataset",[123,31550,179],{"class":129},[123,31552,31553],{"class":133},"train_data,\n",[123,31555,31556,31559,31561,31563],{"class":125,"line":1736},[123,31557,31558],{"class":5226},"                             batch_size",[123,31560,179],{"class":129},[123,31562,337],{"class":182},[123,31564,31477],{"class":133},[123,31566,31567],{"class":125,"line":1741},[123,31568,31569],{"class":192},"                             # 数据是否打乱\n",[123,31571,31572,31575,31577,31579],{"class":125,"line":1758},[123,31573,31574],{"class":5226},"                             shuffle",[123,31576,179],{"class":129},[123,31578,31487],{"class":182},[123,31580,31477],{"class":133},[123,31582,31583],{"class":125,"line":1763},[123,31584,31585],{"class":192},"                             # 规定加载数据的进程\n",[123,31587,31588,31591,31593,31595],{"class":125,"line":1768},[123,31589,31590],{"class":5226},"                             num_workers",[123,31592,179],{"class":129},[123,31594,325],{"class":182},[123,31596,140],{"class":133},[123,31598,31599],{"class":125,"line":1773},[123,31600,2409],{"emptyLinePlaceholder":50},[123,31602,31603],{"class":125,"line":1787},[123,31604,31605],{"class":192},"# 获得一个batch的数据\n",[123,31607,31608,31610,31613,31615,31618],{"class":125,"line":1792},[123,31609,3034],{"class":129},[123,31611,31612],{"class":133}," step,(b_x,b_y) ",[123,31614,26054],{"class":129},[123,31616,31617],{"class":182}," enumerate",[123,31619,31620],{"class":133},"(train_loader):\n",[123,31622,31623,31625,31628,31630,31632],{"class":125,"line":2586},[123,31624,3110],{"class":129},[123,31626,31627],{"class":133}," step ",[123,31629,1094],{"class":129},[123,31631,4102],{"class":182},[123,31633,3748],{"class":133},[123,31635,31636],{"class":125,"line":2600},[123,31637,31638],{"class":129},"        break\n",[123,31640,31641],{"class":125,"line":2608},[123,31642,31643],{"class":192},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[123,31645,31646,31649,31651,31654],{"class":125,"line":2613},[123,31647,31648],{"class":133},"batch_x",[123,31650,179],{"class":129},[123,31652,31653],{"class":133},"b_x.squeeze().numpy()  ",[123,31655,31656],{"class":192},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[123,31658,31659,31662,31664,31667],{"class":125,"line":2619},[123,31660,31661],{"class":133},"batch_y",[123,31663,179],{"class":129},[123,31665,31666],{"class":133},"b_y.numpy()   ",[123,31668,31669],{"class":192},"#将张量转换成功numpy数组\n",[123,31671,31672,31675,31677,31680],{"class":125,"line":2625},[123,31673,31674],{"class":133},"class_label",[123,31676,179],{"class":129},[123,31678,31679],{"class":133},"train_data.classes  ",[123,31681,31682],{"class":192},"#训练集标签\n",[123,31684,31685],{"class":125,"line":2630},[123,31686,31687],{"class":192},"# print(class_label)\n",[123,31689,31690],{"class":125,"line":7958},[123,31691,2409],{"emptyLinePlaceholder":50},[123,31693,31694],{"class":125,"line":7982},[123,31695,31696],{"class":192},"# 可视化一个batch的图像\n",[123,31698,31699,31702,31705,31707,31709,31711,31713,31715],{"class":125,"line":7987},[123,31700,31701],{"class":133},"plt.figure(",[123,31703,31704],{"class":5226},"figsize",[123,31706,179],{"class":129},[123,31708,134],{"class":133},[123,31710,632],{"class":182},[123,31712,512],{"class":133},[123,31714,453],{"class":182},[123,31716,30508],{"class":133},[123,31718,31719,31721,31724,31726,31729,31731],{"class":125,"line":7993},[123,31720,3034],{"class":129},[123,31722,31723],{"class":133}," ii ",[123,31725,26054],{"class":129},[123,31727,31728],{"class":133}," np.arange(",[123,31730,7368],{"class":182},[123,31732,31733],{"class":133},"(batch_y)):\n",[123,31735,31736,31739,31741,31743,31745,31748,31750,31752],{"class":125,"line":8020},[123,31737,31738],{"class":133},"    plt.subplot(",[123,31740,427],{"class":182},[123,31742,512],{"class":133},[123,31744,735],{"class":182},[123,31746,31747],{"class":133},",ii ",[123,31749,615],{"class":129},[123,31751,25129],{"class":182},[123,31753,140],{"class":133},[123,31755,31756,31759,31762,31764],{"class":125,"line":8025},[123,31757,31758],{"class":133},"    plt.imshow(batch_x[ii,:,:],",[123,31760,31761],{"class":5226},"cmap",[123,31763,179],{"class":129},[123,31765,31766],{"class":133},"plt.cm.gray)\n",[123,31768,31769,31772,31774,31776,31778],{"class":125,"line":8031},[123,31770,31771],{"class":133},"    plt.title(class_label[batch_y[ii]],",[123,31773,31507],{"class":5226},[123,31775,179],{"class":129},[123,31777,580],{"class":182},[123,31779,140],{"class":133},[123,31781,31782,31785,31788],{"class":125,"line":8043},[123,31783,31784],{"class":133},"    plt.axis(",[123,31786,31787],{"class":238},"\"off\"",[123,31789,140],{"class":133},[123,31791,31792,31795,31798,31800,31803],{"class":125,"line":8055},[123,31793,31794],{"class":133},"    plt.subplots_adjust(",[123,31796,31797],{"class":5226},"wspace",[123,31799,179],{"class":129},[123,31801,31802],{"class":182},"0.05",[123,31804,140],{"class":133},[123,31806,31807],{"class":125,"line":8067},[123,31808,31809],{"class":133},"plt.show()\n",[14,31811,31812],{},"用matplotlib进行展示的过程可以后续再补",[14,31814,31815],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,31817,31818],{},"训练次数就是按照批次过整个训练集数据的次数",[14,31820,31821],{},"模型训练：",[114,31823,31825],{"className":30389,"code":31824,"language":30391,"meta":37,"style":37},"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",[120,31826,31827,31834,31841,31845,31857,31863,31874,31884,31894,31904,31914,31919,31931,31941,31945,31949,31954,31965,31978,31989,32006,32017,32056,32072,32084,32095,32100,32111,32127,32138,32149,32160,32167,32171,32176,32181,32185,32190,32200,32221,32225,32229,32234,32239,32244,32264,32268,32273,32283,32287,32292,32301,32306,32311,32316,32326,32330,32334,32339,32344,32354,32359,32369,32374,32383,32388,32397,32402,32411,32415,32420,32430,32434,32438,32443,32458,32486,32501,32505,32510,32515,32524,32529,32538,32543,32552,32557,32566,32571,32580,32585,32594,32599,32612,32617,32627,32632,32642,32648,32654,32660,32666,32677,32683,32703,32709,32720,32726,32732,32738,32744,32750,32756,32762,32782,32788,32804,32810,32824,32830,32845,32851,32860,32866,32875,32881,32887,32896,32902,32913,32919,32938,32944,32955,32961,32981,32997,33003,33017,33023,33029,33040,33046,33052,33062,33068,33079,33085,33095,33100,33106,33155,33202,33207,33213,33232,33238,33258,33264,33270,33280,33285,33291,33307,33352,33358,33364,33370,33381,33387,33393,33399,33417,33431,33440,33449,33458,33467,33473,33479,33487,33492,33498,33509,33515,33535,33541,33547,33553,33570,33576,33582,33588,33594,33600,33627,33651,33657,33663,33669,33680,33691,33697,33714,33737,33760,33766,33771,33780,33790,33796,33801,33807,33820,33826,33837,33848,33867],{"__ignoreMap":37},[123,31828,31829,31831],{"class":125,"line":126},[123,31830,30403],{"class":129},[123,31832,31833],{"class":133}," copy\n",[123,31835,31836,31838],{"class":125,"line":45},[123,31837,30403],{"class":129},[123,31839,31840],{"class":133}," time\n",[123,31842,31843],{"class":125,"line":1189},[123,31844,2409],{"emptyLinePlaceholder":50},[123,31846,31847,31849,31852,31854],{"class":125,"line":1204},[123,31848,30403],{"class":129},[123,31850,31851],{"class":133}," pandas ",[123,31853,31394],{"class":129},[123,31855,31856],{"class":133}," pd\n",[123,31858,31859,31861],{"class":125,"line":1210},[123,31860,30403],{"class":129},[123,31862,30406],{"class":133},[123,31864,31865,31867,31869,31871],{"class":125,"line":1224},[123,31866,30748],{"class":129},[123,31868,31426],{"class":133},[123,31870,30403],{"class":129},[123,31872,31873],{"class":133}," Dataset\n",[123,31875,31876,31878,31880,31882],{"class":125,"line":1230},[123,31877,30748],{"class":129},[123,31879,31379],{"class":133},[123,31881,30403],{"class":129},[123,31883,31384],{"class":133},[123,31885,31886,31888,31890,31892],{"class":125,"line":1321},[123,31887,30748],{"class":129},[123,31889,31409],{"class":133},[123,31891,30403],{"class":129},[123,31893,31414],{"class":133},[123,31895,31896,31898,31900,31902],{"class":125,"line":1327},[123,31897,30403],{"class":129},[123,31899,31426],{"class":133},[123,31901,31394],{"class":129},[123,31903,31431],{"class":133},[123,31905,31906,31908,31910,31912],{"class":125,"line":1339},[123,31907,30403],{"class":129},[123,31909,31443],{"class":133},[123,31911,31394],{"class":129},[123,31913,31448],{"class":133},[123,31915,31916],{"class":125,"line":1621},[123,31917,31918],{"class":192},"# 导入模型\n",[123,31920,31921,31923,31926,31928],{"class":125,"line":1626},[123,31922,30748],{"class":129},[123,31924,31925],{"class":133}," model ",[123,31927,30403],{"class":129},[123,31929,31930],{"class":133}," LeNet\n",[123,31932,31933,31935,31937,31939],{"class":125,"line":1632},[123,31934,30748],{"class":129},[123,31936,30751],{"class":133},[123,31938,30403],{"class":129},[123,31940,30756],{"class":133},[123,31942,31943],{"class":125,"line":1637},[123,31944,2409],{"emptyLinePlaceholder":50},[123,31946,31947],{"class":125,"line":1651},[123,31948,2409],{"emptyLinePlaceholder":50},[123,31950,31951],{"class":125,"line":1656},[123,31952,31953],{"class":192},"# 处理训练集与验证集函数--->划分数据集\n",[123,31955,31956,31959,31962],{"class":125,"line":1662},[123,31957,31958],{"class":129},"def",[123,31960,31961],{"class":1972}," train_val_data_process",[123,31963,31964],{"class":133},"():\n",[123,31966,31967,31970,31972,31974,31976],{"class":125,"line":1683},[123,31968,31969],{"class":133},"    train_data",[123,31971,179],{"class":129},[123,31973,31466],{"class":133},[123,31975,31474],{"class":238},[123,31977,31477],{"class":133},[123,31979,31980,31983,31985,31987],{"class":125,"line":1688},[123,31981,31982],{"class":5226},"                            train",[123,31984,179],{"class":129},[123,31986,31487],{"class":182},[123,31988,31477],{"class":133},[123,31990,31991,31994,31996,31998,32000,32002,32004],{"class":125,"line":1702},[123,31992,31993],{"class":5226},"                            transform",[123,31995,179],{"class":129},[123,31997,31504],{"class":133},[123,31999,31507],{"class":5226},[123,32001,179],{"class":129},[123,32003,1035],{"class":182},[123,32005,31515],{"class":133},[123,32007,32008,32011,32013,32015],{"class":125,"line":1707},[123,32009,32010],{"class":5226},"                            download",[123,32012,179],{"class":129},[123,32014,31487],{"class":182},[123,32016,140],{"class":133},[123,32018,32019,32022,32024,32027,32030,32032,32035,32037,32039,32042,32044,32046,32049,32051,32053],{"class":125,"line":1736},[123,32020,32021],{"class":133},"    train_data,val_data",[123,32023,179],{"class":129},[123,32025,32026],{"class":133},"Data.random_split(train_data,[",[123,32028,32029],{"class":182},"round",[123,32031,134],{"class":133},[123,32033,32034],{"class":182},"0.8",[123,32036,589],{"class":129},[123,32038,7368],{"class":182},[123,32040,32041],{"class":133},"(train_data)),",[123,32043,32029],{"class":182},[123,32045,134],{"class":133},[123,32047,32048],{"class":182},"0.2",[123,32050,589],{"class":129},[123,32052,7368],{"class":182},[123,32054,32055],{"class":133},"(train_data))])\n",[123,32057,32058,32061,32063,32066,32068,32070],{"class":125,"line":1741},[123,32059,32060],{"class":133},"    train_dataloader ",[123,32062,179],{"class":129},[123,32064,32065],{"class":133}," Data.DataLoader(",[123,32067,31548],{"class":5226},[123,32069,179],{"class":129},[123,32071,31553],{"class":133},[123,32073,32074,32077,32079,32082],{"class":125,"line":1758},[123,32075,32076],{"class":5226},"                                       batch_size",[123,32078,179],{"class":129},[123,32080,32081],{"class":182},"128",[123,32083,31477],{"class":133},[123,32085,32086,32089,32091,32093],{"class":125,"line":1763},[123,32087,32088],{"class":5226},"                                       shuffle",[123,32090,179],{"class":129},[123,32092,31487],{"class":182},[123,32094,31477],{"class":133},[123,32096,32097],{"class":125,"line":1768},[123,32098,32099],{"class":192},"                                       # 规定8个进程\n",[123,32101,32102,32105,32107,32109],{"class":125,"line":1773},[123,32103,32104],{"class":5226},"                                       num_workers",[123,32106,179],{"class":129},[123,32108,529],{"class":182},[123,32110,140],{"class":133},[123,32112,32113,32116,32118,32120,32122,32124],{"class":125,"line":1787},[123,32114,32115],{"class":133},"    val_dataloader",[123,32117,179],{"class":129},[123,32119,31545],{"class":133},[123,32121,31548],{"class":5226},[123,32123,179],{"class":129},[123,32125,32126],{"class":133},"val_data,\n",[123,32128,32129,32132,32134,32136],{"class":125,"line":1792},[123,32130,32131],{"class":5226},"                                   batch_size",[123,32133,179],{"class":129},[123,32135,32081],{"class":182},[123,32137,31477],{"class":133},[123,32139,32140,32143,32145,32147],{"class":125,"line":2586},[123,32141,32142],{"class":5226},"                                   shuffle",[123,32144,179],{"class":129},[123,32146,31487],{"class":182},[123,32148,31477],{"class":133},[123,32150,32151,32154,32156,32158],{"class":125,"line":2600},[123,32152,32153],{"class":5226},"                                   num_workers",[123,32155,179],{"class":129},[123,32157,529],{"class":182},[123,32159,140],{"class":133},[123,32161,32162,32164],{"class":125,"line":2608},[123,32163,4099],{"class":129},[123,32165,32166],{"class":133}," train_dataloader,val_dataloader\n",[123,32168,32169],{"class":125,"line":2613},[123,32170,2409],{"emptyLinePlaceholder":50},[123,32172,32173],{"class":125,"line":2619},[123,32174,32175],{"class":192},"# 验证是否出错\n",[123,32177,32178],{"class":125,"line":2625},[123,32179,32180],{"class":192},"# train_val_data_process()\n",[123,32182,32183],{"class":125,"line":2630},[123,32184,2409],{"emptyLinePlaceholder":50},[123,32186,32187],{"class":125,"line":7958},[123,32188,32189],{"class":192},"# 定义模型训练函数\n",[123,32191,32192,32194,32197],{"class":125,"line":7982},[123,32193,31958],{"class":129},[123,32195,32196],{"class":1972}," train_model_process",[123,32198,32199],{"class":133},"(model,train_dataloader,val_dataloader,num_epochs):\n",[123,32201,32202,32204,32206,32208,32210,32212,32214,32216,32219],{"class":125,"line":7987},[123,32203,31248],{"class":133},[123,32205,179],{"class":129},[123,32207,30462],{"class":133},[123,32209,31255],{"class":238},[123,32211,1713],{"class":129},[123,32213,31260],{"class":133},[123,32215,1710],{"class":129},[123,32217,32218],{"class":238}," 'cpu'",[123,32220,140],{"class":133},[123,32222,32223],{"class":125,"line":7993},[123,32224,2409],{"emptyLinePlaceholder":50},[123,32226,32227],{"class":125,"line":8020},[123,32228,2409],{"emptyLinePlaceholder":50},[123,32230,32231],{"class":125,"line":8025},[123,32232,32233],{"class":192},"    # 定义优化器\n",[123,32235,32236],{"class":125,"line":8031},[123,32237,32238],{"class":192},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[123,32240,32241],{"class":125,"line":8043},[123,32242,32243],{"class":192},"    # lr为学习率\n",[123,32245,32246,32249,32251,32254,32257,32259,32262],{"class":125,"line":8055},[123,32247,32248],{"class":133},"    optimizer",[123,32250,179],{"class":129},[123,32252,32253],{"class":133},"torch.optim.Adam(model.parameters(),",[123,32255,32256],{"class":5226},"lr",[123,32258,179],{"class":129},[123,32260,32261],{"class":182},"0.001",[123,32263,140],{"class":133},[123,32265,32266],{"class":125,"line":8067},[123,32267,2409],{"emptyLinePlaceholder":50},[123,32269,32270],{"class":125,"line":9726},[123,32271,32272],{"class":192},"    # 定义损失函数使用交叉熵损失函数\n",[123,32274,32275,32278,32280],{"class":125,"line":9751},[123,32276,32277],{"class":133},"    criterion",[123,32279,179],{"class":129},[123,32281,32282],{"class":133},"nn.CrossEntropyLoss()\n",[123,32284,32285],{"class":125,"line":9774},[123,32286,2409],{"emptyLinePlaceholder":50},[123,32288,32289],{"class":125,"line":9798},[123,32290,32291],{"class":192},"    # 将模型放到GPU中进行训练\n",[123,32293,32294,32296,32298],{"class":125,"line":9803},[123,32295,31300],{"class":133},[123,32297,179],{"class":129},[123,32299,32300],{"class":133},"model.to(device)\n",[123,32302,32303],{"class":125,"line":9808},[123,32304,32305],{"class":192},"    # 复制当前模型的参数\n",[123,32307,32308],{"class":125,"line":9813},[123,32309,32310],{"class":192},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[123,32312,32313],{"class":125,"line":9822},[123,32314,32315],{"class":192},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[123,32317,32318,32321,32323],{"class":125,"line":9827},[123,32319,32320],{"class":133},"    best_model_wts",[123,32322,179],{"class":129},[123,32324,32325],{"class":133},"copy.deepcopy(model.state_dict())\n",[123,32327,32328],{"class":125,"line":9833},[123,32329,2409],{"emptyLinePlaceholder":50},[123,32331,32332],{"class":125,"line":9854},[123,32333,2409],{"emptyLinePlaceholder":50},[123,32335,32336],{"class":125,"line":9860},[123,32337,32338],{"class":192},"    # 初始化参数\n",[123,32340,32341],{"class":125,"line":9874},[123,32342,32343],{"class":192},"    # 最高准确度\n",[123,32345,32346,32349,32351],{"class":125,"line":9880},[123,32347,32348],{"class":133},"    best_acc",[123,32350,179],{"class":129},[123,32352,32353],{"class":182},"0.0\n",[123,32355,32356],{"class":125,"line":9907},[123,32357,32358],{"class":192},"    # 训练集损失列表\n",[123,32360,32361,32364,32366],{"class":125,"line":9916},[123,32362,32363],{"class":133},"    train_loss_all",[123,32365,179],{"class":129},[123,32367,32368],{"class":133},"[]\n",[123,32370,32371],{"class":125,"line":9922},[123,32372,32373],{"class":192},"    # 验证集函数列表\n",[123,32375,32376,32379,32381],{"class":125,"line":9930},[123,32377,32378],{"class":133},"    val_loss_all",[123,32380,179],{"class":129},[123,32382,32368],{"class":133},[123,32384,32385],{"class":125,"line":9935},[123,32386,32387],{"class":192},"    # 训练集准确度列表\n",[123,32389,32390,32393,32395],{"class":125,"line":16614},[123,32391,32392],{"class":133},"    train_acc_all",[123,32394,179],{"class":129},[123,32396,32368],{"class":133},[123,32398,32399],{"class":125,"line":16620},[123,32400,32401],{"class":192},"    # 验证集准确度列表\n",[123,32403,32404,32407,32409],{"class":125,"line":16643},[123,32405,32406],{"class":133},"    val_acc_all",[123,32408,179],{"class":129},[123,32410,32368],{"class":133},[123,32412,32413],{"class":125,"line":16649},[123,32414,2409],{"emptyLinePlaceholder":50},[123,32416,32417],{"class":125,"line":16672},[123,32418,32419],{"class":192},"    # 保存当前时间--->方便看每轮训练的时间\n",[123,32421,32422,32425,32427],{"class":125,"line":16686},[123,32423,32424],{"class":133},"    since",[123,32426,179],{"class":129},[123,32428,32429],{"class":133},"time.time()\n",[123,32431,32432],{"class":125,"line":16706},[123,32433,2409],{"emptyLinePlaceholder":50},[123,32435,32436],{"class":125,"line":16712},[123,32437,2409],{"emptyLinePlaceholder":50},[123,32439,32440],{"class":125,"line":16723},[123,32441,32442],{"class":192},"    # 准备工作完成--->开始训练模型\n",[123,32444,32445,32447,32450,32452,32455],{"class":125,"line":16746},[123,32446,3210],{"class":129},[123,32448,32449],{"class":133}," epoch ",[123,32451,26054],{"class":129},[123,32453,32454],{"class":182}," range",[123,32456,32457],{"class":133},"(num_epochs):\n",[123,32459,32460,32463,32465,32468,32471,32473,32475,32477,32480,32482,32484],{"class":125,"line":16768},[123,32461,32462],{"class":182},"        print",[123,32464,134],{"class":133},[123,32466,32467],{"class":238},"\"Epoch ",[123,32469,32470],{"class":182},"{}",[123,32472,718],{"class":238},[123,32474,32470],{"class":182},[123,32476,385],{"class":238},[123,32478,32479],{"class":133},".format(epoch,num_epochs",[123,32481,666],{"class":129},[123,32483,351],{"class":182},[123,32485,30508],{"class":133},[123,32487,32488,32490,32492,32495,32497,32499],{"class":125,"line":16773},[123,32489,32462],{"class":182},[123,32491,134],{"class":133},[123,32493,32494],{"class":238},"\"-\"",[123,32496,589],{"class":129},[123,32498,580],{"class":182},[123,32500,140],{"class":133},[123,32502,32503],{"class":125,"line":16779},[123,32504,2409],{"emptyLinePlaceholder":50},[123,32506,32507],{"class":125,"line":16793},[123,32508,32509],{"class":192},"        # 初始化参数\n",[123,32511,32512],{"class":125,"line":16806},[123,32513,32514],{"class":192},"        # 训练集损失函数\n",[123,32516,32517,32520,32522],{"class":125,"line":16811},[123,32518,32519],{"class":133},"        train_loss",[123,32521,179],{"class":129},[123,32523,32353],{"class":182},[123,32525,32526],{"class":125,"line":16825},[123,32527,32528],{"class":192},"        # 训练集准确度\n",[123,32530,32531,32534,32536],{"class":125,"line":16830},[123,32532,32533],{"class":133},"        train_corrects",[123,32535,179],{"class":129},[123,32537,3094],{"class":182},[123,32539,32540],{"class":125,"line":16836},[123,32541,32542],{"class":192},"        # 验证集损失函数\n",[123,32544,32545,32548,32550],{"class":125,"line":16841},[123,32546,32547],{"class":133},"        val_loss",[123,32549,179],{"class":129},[123,32551,32353],{"class":182},[123,32553,32554],{"class":125,"line":16855},[123,32555,32556],{"class":192},"        # 验证集准确度\n",[123,32558,32559,32562,32564],{"class":125,"line":16860},[123,32560,32561],{"class":133},"        val_corrects",[123,32563,179],{"class":129},[123,32565,3094],{"class":182},[123,32567,32568],{"class":125,"line":16865},[123,32569,32570],{"class":192},"        # 训练集样本数量\n",[123,32572,32573,32576,32578],{"class":125,"line":16879},[123,32574,32575],{"class":133},"        train_num",[123,32577,179],{"class":129},[123,32579,3094],{"class":182},[123,32581,32582],{"class":125,"line":16891},[123,32583,32584],{"class":192},"        # 验证集样本数量\n",[123,32586,32587,32590,32592],{"class":125,"line":16896},[123,32588,32589],{"class":133},"        val_num",[123,32591,179],{"class":129},[123,32593,3094],{"class":182},[123,32595,32596],{"class":125,"line":16909},[123,32597,32598],{"class":192},"        # 将数据放到设备,并开始训练\n",[123,32600,32601,32603,32605,32607,32609],{"class":125,"line":16914},[123,32602,3412],{"class":129},[123,32604,31612],{"class":133},[123,32606,26054],{"class":129},[123,32608,31617],{"class":182},[123,32610,32611],{"class":133},"(train_dataloader):\n",[123,32613,32614],{"class":125,"line":16919},[123,32615,32616],{"class":192},"            # 将特征放入到训练设备\n",[123,32618,32619,32622,32624],{"class":125,"line":16924},[123,32620,32621],{"class":133},"            b_x",[123,32623,179],{"class":129},[123,32625,32626],{"class":133},"b_x.to(device)\n",[123,32628,32629],{"class":125,"line":16937},[123,32630,32631],{"class":192},"            # 将标签放入到训练设备当中\n",[123,32633,32634,32637,32639],{"class":125,"line":16942},[123,32635,32636],{"class":133},"            b_y",[123,32638,179],{"class":129},[123,32640,32641],{"class":133},"b_y.to(device)\n",[123,32643,32645],{"class":125,"line":32644},98,[123,32646,32647],{"class":192},"            # 设置模型为训练模式\n",[123,32649,32651],{"class":125,"line":32650},99,[123,32652,32653],{"class":133},"            model.train()\n",[123,32655,32657],{"class":125,"line":32656},100,[123,32658,32659],{"class":192},"            # 将数据放到模型当中,开始前向传播\n",[123,32661,32663],{"class":125,"line":32662},101,[123,32664,32665],{"class":192},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[123,32667,32669,32672,32674],{"class":125,"line":32668},102,[123,32670,32671],{"class":133},"            output",[123,32673,179],{"class":129},[123,32675,32676],{"class":133},"model(b_x)\n",[123,32678,32680],{"class":125,"line":32679},103,[123,32681,32682],{"class":192},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[123,32684,32686,32689,32691,32694,32697,32699,32701],{"class":125,"line":32685},104,[123,32687,32688],{"class":133},"            pre_lab",[123,32690,179],{"class":129},[123,32692,32693],{"class":133},"torch.argmax(output,",[123,32695,32696],{"class":5226},"dim",[123,32698,179],{"class":129},[123,32700,351],{"class":182},[123,32702,140],{"class":133},[123,32704,32706],{"class":125,"line":32705},105,[123,32707,32708],{"class":192},"            # 计算每一个batch的损失函数\n",[123,32710,32712,32715,32717],{"class":125,"line":32711},106,[123,32713,32714],{"class":133},"            loss",[123,32716,179],{"class":129},[123,32718,32719],{"class":133},"criterion(output,b_y)\n",[123,32721,32723],{"class":125,"line":32722},107,[123,32724,32725],{"class":192},"            # 将梯度初始化为0\n",[123,32727,32729],{"class":125,"line":32728},108,[123,32730,32731],{"class":133},"            optimizer.zero_grad()\n",[123,32733,32735],{"class":125,"line":32734},109,[123,32736,32737],{"class":192},"            # 梯度置为0后再进行反向传播\n",[123,32739,32741],{"class":125,"line":32740},110,[123,32742,32743],{"class":133},"            loss.backward()\n",[123,32745,32747],{"class":125,"line":32746},111,[123,32748,32749],{"class":192},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[123,32751,32753],{"class":125,"line":32752},112,[123,32754,32755],{"class":133},"            optimizer.step()\n",[123,32757,32759],{"class":125,"line":32758},113,[123,32760,32761],{"class":192},"            # loss.item()指的是batch的平均损失\n",[123,32763,32765,32768,32770,32773,32775,32778,32780],{"class":125,"line":32764},114,[123,32766,32767],{"class":133},"            train_loss",[123,32769,9487],{"class":129},[123,32771,32772],{"class":133},"loss.item()",[123,32774,589],{"class":129},[123,32776,32777],{"class":133},"b_x.size(",[123,32779,325],{"class":182},[123,32781,140],{"class":133},[123,32783,32785],{"class":125,"line":32784},115,[123,32786,32787],{"class":192},"            # 计算每个批次中正确预测的数量\n",[123,32789,32791,32794,32796,32799,32801],{"class":125,"line":32790},116,[123,32792,32793],{"class":133},"            train_corrects",[123,32795,9487],{"class":129},[123,32797,32798],{"class":133},"torch.sum(pre_lab",[123,32800,2958],{"class":129},[123,32802,32803],{"class":133},"b_y.data)\n",[123,32805,32807],{"class":125,"line":32806},117,[123,32808,32809],{"class":192},"            # 计算目前为止一共处理了多少样本\n",[123,32811,32813,32816,32818,32820,32822],{"class":125,"line":32812},118,[123,32814,32815],{"class":133},"            train_num",[123,32817,9487],{"class":129},[123,32819,32777],{"class":133},[123,32821,325],{"class":182},[123,32823,140],{"class":133},[123,32825,32827],{"class":125,"line":32826},119,[123,32828,32829],{"class":192},"        # 验证数据\n",[123,32831,32833,32835,32838,32840,32842],{"class":125,"line":32832},120,[123,32834,3412],{"class":129},[123,32836,32837],{"class":133}," step ,(b_x,b_y) ",[123,32839,26054],{"class":129},[123,32841,31617],{"class":182},[123,32843,32844],{"class":133},"(val_dataloader):\n",[123,32846,32848],{"class":125,"line":32847},121,[123,32849,32850],{"class":192},"            # 将特征放到验证设备当中\n",[123,32852,32854,32856,32858],{"class":125,"line":32853},122,[123,32855,32621],{"class":133},[123,32857,179],{"class":129},[123,32859,32626],{"class":133},[123,32861,32863],{"class":125,"line":32862},123,[123,32864,32865],{"class":192},"            # 将标签放到放到训练设备当中\n",[123,32867,32869,32871,32873],{"class":125,"line":32868},124,[123,32870,32636],{"class":133},[123,32872,179],{"class":129},[123,32874,32641],{"class":133},[123,32876,32878],{"class":125,"line":32877},125,[123,32879,32880],{"class":192},"            # 开启验证模式，设置模型为评估模式\n",[123,32882,32884],{"class":125,"line":32883},126,[123,32885,32886],{"class":133},"            model.eval()\n",[123,32888,32890,32893],{"class":125,"line":32889},127,[123,32891,32892],{"class":129},"            with",[123,32894,32895],{"class":133}," torch.no_grad():\n",[123,32897,32899],{"class":125,"line":32898},128,[123,32900,32901],{"class":192},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[123,32903,32905,32908,32910],{"class":125,"line":32904},129,[123,32906,32907],{"class":133},"                output ",[123,32909,179],{"class":129},[123,32911,32912],{"class":133}," model(b_x)\n",[123,32914,32916],{"class":125,"line":32915},130,[123,32917,32918],{"class":192},"                # 查找每一行中最大值对应的下标\n",[123,32920,32922,32925,32927,32930,32932,32934,32936],{"class":125,"line":32921},131,[123,32923,32924],{"class":133},"                pre_lab ",[123,32926,179],{"class":129},[123,32928,32929],{"class":133}," torch.argmax(output, ",[123,32931,32696],{"class":5226},[123,32933,179],{"class":129},[123,32935,351],{"class":182},[123,32937,140],{"class":133},[123,32939,32941],{"class":125,"line":32940},132,[123,32942,32943],{"class":192},"                # 计算验证集上的当前 batch 损失\n",[123,32945,32947,32950,32952],{"class":125,"line":32946},133,[123,32948,32949],{"class":133},"                val_batch_loss ",[123,32951,179],{"class":129},[123,32953,32954],{"class":133}," criterion(output, b_y)\n",[123,32956,32958],{"class":125,"line":32957},134,[123,32959,32960],{"class":192},"                # 对损失函数进行累加（按样本数加权）\n",[123,32962,32964,32967,32969,32972,32974,32977,32979],{"class":125,"line":32963},135,[123,32965,32966],{"class":133},"                val_loss ",[123,32968,9487],{"class":129},[123,32970,32971],{"class":133}," val_batch_loss.item() ",[123,32973,589],{"class":129},[123,32975,32976],{"class":133}," b_x.size(",[123,32978,325],{"class":182},[123,32980,140],{"class":133},[123,32982,32984,32987,32989,32992,32994],{"class":125,"line":32983},136,[123,32985,32986],{"class":133},"                val_corrects ",[123,32988,9487],{"class":129},[123,32990,32991],{"class":133}," torch.sum(pre_lab ",[123,32993,2958],{"class":129},[123,32995,32996],{"class":133}," b_y.data)\n",[123,32998,33000],{"class":125,"line":32999},137,[123,33001,33002],{"class":192},"                # 当前用于验证的样本数量\n",[123,33004,33006,33009,33011,33013,33015],{"class":125,"line":33005},138,[123,33007,33008],{"class":133},"            val_num ",[123,33010,9487],{"class":129},[123,33012,32976],{"class":133},[123,33014,325],{"class":182},[123,33016,140],{"class":133},[123,33018,33020],{"class":125,"line":33019},139,[123,33021,33022],{"class":192},"        # 计算并保存每一次迭代的loss值和准确率\n",[123,33024,33026],{"class":125,"line":33025},140,[123,33027,33028],{"class":192},"        # 计算并保存训练集的loss值\n",[123,33030,33032,33035,33037],{"class":125,"line":33031},141,[123,33033,33034],{"class":133},"        train_loss_all.append(train_loss",[123,33036,718],{"class":129},[123,33038,33039],{"class":133},"train_num)\n",[123,33041,33043],{"class":125,"line":33042},142,[123,33044,33045],{"class":192},"        # 取双精度\n",[123,33047,33049],{"class":125,"line":33048},143,[123,33050,33051],{"class":192},"        # 计算并保存训练集的准确率\n",[123,33053,33055,33058,33060],{"class":125,"line":33054},144,[123,33056,33057],{"class":133},"        train_acc_all.append(train_corrects.double().item()",[123,33059,718],{"class":129},[123,33061,33039],{"class":133},[123,33063,33065],{"class":125,"line":33064},145,[123,33066,33067],{"class":192},"        # 计算并保存验证集的loss值\n",[123,33069,33071,33074,33076],{"class":125,"line":33070},146,[123,33072,33073],{"class":133},"        val_loss_all.append(val_loss",[123,33075,718],{"class":129},[123,33077,33078],{"class":133},"val_num)\n",[123,33080,33082],{"class":125,"line":33081},147,[123,33083,33084],{"class":192},"        # 计算并保存验证集的准确率\n",[123,33086,33088,33091,33093],{"class":125,"line":33087},148,[123,33089,33090],{"class":133},"        val_acc_all.append(val_corrects.double().item()",[123,33092,718],{"class":129},[123,33094,33078],{"class":133},[123,33096,33098],{"class":125,"line":33097},149,[123,33099,2409],{"emptyLinePlaceholder":50},[123,33101,33103],{"class":125,"line":33102},150,[123,33104,33105],{"class":192},"        # 打印训练一轮的loss值和准确率\n",[123,33107,33109,33111,33113,33115,33117,33120,33122,33125,33127,33130,33132,33134,33136,33138,33141,33143,33145,33148,33150,33152],{"class":125,"line":33108},151,[123,33110,32462],{"class":182},[123,33112,134],{"class":133},[123,33114,3601],{"class":238},[123,33116,32470],{"class":182},[123,33118,33119],{"class":238},"train loss:",[123,33121,1030],{"class":182},[123,33123,33124],{"class":129},":.4f",[123,33126,1080],{"class":182},[123,33128,33129],{"class":238}," train acc:",[123,33131,1030],{"class":182},[123,33133,33124],{"class":129},[123,33135,1080],{"class":182},[123,33137,3601],{"class":238},[123,33139,33140],{"class":133},".format(epoch,train_loss_all[",[123,33142,666],{"class":129},[123,33144,351],{"class":182},[123,33146,33147],{"class":133},"],train_acc_all[",[123,33149,666],{"class":129},[123,33151,351],{"class":182},[123,33153,33154],{"class":133},"]))\n",[123,33156,33158,33160,33162,33164,33166,33169,33171,33173,33175,33178,33180,33182,33184,33186,33189,33191,33193,33196,33198,33200],{"class":125,"line":33157},152,[123,33159,32462],{"class":182},[123,33161,134],{"class":133},[123,33163,3601],{"class":238},[123,33165,32470],{"class":182},[123,33167,33168],{"class":238},"val loss:",[123,33170,1030],{"class":182},[123,33172,33124],{"class":129},[123,33174,1080],{"class":182},[123,33176,33177],{"class":238}," val acc:",[123,33179,1030],{"class":182},[123,33181,33124],{"class":129},[123,33183,1080],{"class":182},[123,33185,3601],{"class":238},[123,33187,33188],{"class":133},".format(epoch,val_loss_all[",[123,33190,666],{"class":129},[123,33192,351],{"class":182},[123,33194,33195],{"class":133},"],val_acc_all[",[123,33197,666],{"class":129},[123,33199,351],{"class":182},[123,33201,33154],{"class":133},[123,33203,33205],{"class":125,"line":33204},153,[123,33206,2409],{"emptyLinePlaceholder":50},[123,33208,33210],{"class":125,"line":33209},154,[123,33211,33212],{"class":192},"        # 判断准确度--->保存最优模型\n",[123,33214,33216,33218,33221,33223,33225,33227,33229],{"class":125,"line":33215},155,[123,33217,2506],{"class":129},[123,33219,33220],{"class":133}," val_acc_all[",[123,33222,666],{"class":129},[123,33224,351],{"class":182},[123,33226,1074],{"class":133},[123,33228,1094],{"class":129},[123,33230,33231],{"class":133},"best_acc:\n",[123,33233,33235],{"class":125,"line":33234},156,[123,33236,33237],{"class":192},"            # 保存当前模型准确度\n",[123,33239,33241,33244,33246,33248,33251,33253,33255],{"class":125,"line":33240},157,[123,33242,33243],{"class":133},"            best_acc:",[123,33245,173],{"class":182},[123,33247,179],{"class":129},[123,33249,33250],{"class":133},"val_acc_all[",[123,33252,666],{"class":129},[123,33254,351],{"class":182},[123,33256,33257],{"class":133},"]\n",[123,33259,33261],{"class":125,"line":33260},158,[123,33262,33263],{"class":192},"            # 保存当前的准确度\n",[123,33265,33267],{"class":125,"line":33266},159,[123,33268,33269],{"class":192},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[123,33271,33273,33276,33278],{"class":125,"line":33272},160,[123,33274,33275],{"class":133},"            best_model_wts",[123,33277,179],{"class":129},[123,33279,32325],{"class":133},[123,33281,33283],{"class":125,"line":33282},161,[123,33284,2409],{"emptyLinePlaceholder":50},[123,33286,33288],{"class":125,"line":33287},162,[123,33289,33290],{"class":192},"        # 计算耗时\n",[123,33292,33294,33297,33299,33302,33304],{"class":125,"line":33293},163,[123,33295,33296],{"class":133},"        time_use",[123,33298,179],{"class":129},[123,33300,33301],{"class":133},"time.time()",[123,33303,666],{"class":129},[123,33305,33306],{"class":133},"since\n",[123,33308,33310,33312,33314,33317,33319,33322,33324,33326,33328,33330,33332,33335,33338,33341,33343,33346,33348,33350],{"class":125,"line":33309},164,[123,33311,32462],{"class":182},[123,33313,134],{"class":133},[123,33315,33316],{"class":238},"'训练和验证耗费的时间",[123,33318,1030],{"class":182},[123,33320,33321],{"class":129},":.0f",[123,33323,1080],{"class":182},[123,33325,678],{"class":238},[123,33327,1030],{"class":182},[123,33329,33321],{"class":129},[123,33331,1080],{"class":182},[123,33333,33334],{"class":238},"s'",[123,33336,33337],{"class":133},".format(time_use",[123,33339,33340],{"class":129},"\u002F\u002F",[123,33342,1041],{"class":182},[123,33344,33345],{"class":133},",time_use",[123,33347,462],{"class":129},[123,33349,1041],{"class":182},[123,33351,30508],{"class":133},[123,33353,33355],{"class":125,"line":33354},165,[123,33356,33357],{"class":192},"    # 选择最优参数\n",[123,33359,33361],{"class":125,"line":33360},166,[123,33362,33363],{"class":192},"    # 加载最高准确率下的模型参数\n",[123,33365,33367],{"class":125,"line":33366},167,[123,33368,33369],{"class":192},"    # model.load_state_dict(best_model_wts)\n",[123,33371,33373,33376,33379],{"class":125,"line":33372},168,[123,33374,33375],{"class":133},"    torch.save(model.state_dict(best_model_wts), ",[123,33377,33378],{"class":238},"'.\u002Fbest_model.pth'",[123,33380,140],{"class":133},[123,33382,33384],{"class":125,"line":33383},169,[123,33385,33386],{"class":192},"    # 或者写成\n",[123,33388,33390],{"class":125,"line":33389},170,[123,33391,33392],{"class":192},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[123,33394,33396],{"class":125,"line":33395},171,[123,33397,33398],{"class":192},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[123,33400,33402,33405,33407,33410,33413,33415],{"class":125,"line":33401},172,[123,33403,33404],{"class":133},"    train_process",[123,33406,179],{"class":129},[123,33408,33409],{"class":133},"pd.DataFrame(",[123,33411,33412],{"class":5226},"data",[123,33414,179],{"class":129},[123,33416,1555],{"class":133},[123,33418,33420,33423,33425,33428],{"class":125,"line":33419},173,[123,33421,33422],{"class":238},"        \"epoch\"",[123,33424,993],{"class":133},[123,33426,33427],{"class":182},"range",[123,33429,33430],{"class":133},"(num_epochs),\n",[123,33432,33434,33437],{"class":125,"line":33433},174,[123,33435,33436],{"class":238},"        \"train_loss_all\"",[123,33438,33439],{"class":133},":train_loss_all,\n",[123,33441,33443,33446],{"class":125,"line":33442},175,[123,33444,33445],{"class":238},"        \"val_loss_all\"",[123,33447,33448],{"class":133},":val_loss_all,\n",[123,33450,33452,33455],{"class":125,"line":33451},176,[123,33453,33454],{"class":238},"        \"train_acc_all\"",[123,33456,33457],{"class":133},":train_acc_all,\n",[123,33459,33461,33464],{"class":125,"line":33460},177,[123,33462,33463],{"class":238},"        \"val_acc_all\"",[123,33465,33466],{"class":133},":val_acc_all\n",[123,33468,33470],{"class":125,"line":33469},178,[123,33471,33472],{"class":133},"    })\n",[123,33474,33476],{"class":125,"line":33475},179,[123,33477,33478],{"class":192},"    # 返回训练保存的过程\n",[123,33480,33482,33484],{"class":125,"line":33481},180,[123,33483,4099],{"class":129},[123,33485,33486],{"class":133}," train_process\n",[123,33488,33490],{"class":125,"line":33489},181,[123,33491,2409],{"emptyLinePlaceholder":50},[123,33493,33495],{"class":125,"line":33494},182,[123,33496,33497],{"class":192},"# 将loss值和精度按照图片的形式展示出来\n",[123,33499,33501,33503,33506],{"class":125,"line":33500},183,[123,33502,31958],{"class":129},[123,33504,33505],{"class":1972}," matplot_acc_loss",[123,33507,33508],{"class":133},"(train_process):\n",[123,33510,33512],{"class":125,"line":33511},184,[123,33513,33514],{"class":192},"    # 设置图的大小\n",[123,33516,33518,33521,33523,33525,33527,33529,33531,33533],{"class":125,"line":33517},185,[123,33519,33520],{"class":133},"    plt.figure(",[123,33522,31704],{"class":5226},[123,33524,179],{"class":129},[123,33526,134],{"class":133},[123,33528,632],{"class":182},[123,33530,512],{"class":133},[123,33532,427],{"class":182},[123,33534,30508],{"class":133},[123,33536,33538],{"class":125,"line":33537},186,[123,33539,33540],{"class":192},"    # 设置图中有几张图\n",[123,33542,33544],{"class":125,"line":33543},187,[123,33545,33546],{"class":192},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[123,33548,33550],{"class":125,"line":33549},188,[123,33551,33552],{"class":192},"    # ①loss图\n",[123,33554,33556,33558,33560,33562,33564,33566,33568],{"class":125,"line":33555},189,[123,33557,31738],{"class":133},[123,33559,351],{"class":182},[123,33561,512],{"class":133},[123,33563,211],{"class":182},[123,33565,512],{"class":133},[123,33567,351],{"class":182},[123,33569,140],{"class":133},[123,33571,33573],{"class":125,"line":33572},190,[123,33574,33575],{"class":192},"    # 补充:\n",[123,33577,33579],{"class":125,"line":33578},191,[123,33580,33581],{"class":192},"    # plt.subplot(nrows, ncols, index)\n",[123,33583,33585],{"class":125,"line":33584},192,[123,33586,33587],{"class":192},"    # nrows：行数\n",[123,33589,33591],{"class":125,"line":33590},193,[123,33592,33593],{"class":192},"    # ncols：列数\n",[123,33595,33597],{"class":125,"line":33596},194,[123,33598,33599],{"class":192},"    # index：目前选中第几个子图（从1开始）\n",[123,33601,33603,33606,33609,33612,33615,33617,33620,33622,33625],{"class":125,"line":33602},195,[123,33604,33605],{"class":133},"    plt.plot(train_process[",[123,33607,33608],{"class":238},"\"epoch\"",[123,33610,33611],{"class":133},"],train_process.train_loss_all,",[123,33613,33614],{"class":238},"'ro-'",[123,33616,512],{"class":133},[123,33618,33619],{"class":5226},"label",[123,33621,179],{"class":129},[123,33623,33624],{"class":238},"'train loss'",[123,33626,140],{"class":133},[123,33628,33630,33632,33634,33637,33640,33642,33644,33646,33649],{"class":125,"line":33629},196,[123,33631,33605],{"class":133},[123,33633,33608],{"class":238},[123,33635,33636],{"class":133},"],train_process.val_loss_all,",[123,33638,33639],{"class":238},"'bs--'",[123,33641,512],{"class":133},[123,33643,33619],{"class":5226},[123,33645,179],{"class":129},[123,33647,33648],{"class":238},"'val loss'",[123,33650,140],{"class":133},[123,33652,33654],{"class":125,"line":33653},197,[123,33655,33656],{"class":192},"    # 添加一个图例\n",[123,33658,33660],{"class":125,"line":33659},198,[123,33661,33662],{"class":133},"    plt.legend()\n",[123,33664,33666],{"class":125,"line":33665},199,[123,33667,33668],{"class":192},"    # 给轴添加标签\n",[123,33670,33672,33675,33678],{"class":125,"line":33671},200,[123,33673,33674],{"class":133},"    plt.xlabel(",[123,33676,33677],{"class":238},"'epoch'",[123,33679,140],{"class":133},[123,33681,33683,33686,33689],{"class":125,"line":33682},201,[123,33684,33685],{"class":133},"    plt.ylabel(",[123,33687,33688],{"class":238},"'loss'",[123,33690,140],{"class":133},[123,33692,33694],{"class":125,"line":33693},202,[123,33695,33696],{"class":192},"    # ②准确度图\n",[123,33698,33700,33702,33704,33706,33708,33710,33712],{"class":125,"line":33699},203,[123,33701,31738],{"class":133},[123,33703,351],{"class":182},[123,33705,512],{"class":133},[123,33707,211],{"class":182},[123,33709,512],{"class":133},[123,33711,211],{"class":182},[123,33713,140],{"class":133},[123,33715,33717,33719,33721,33724,33726,33728,33730,33732,33735],{"class":125,"line":33716},204,[123,33718,33605],{"class":133},[123,33720,33608],{"class":238},[123,33722,33723],{"class":133},"],train_process.train_acc_all,",[123,33725,33614],{"class":238},[123,33727,512],{"class":133},[123,33729,33619],{"class":5226},[123,33731,179],{"class":129},[123,33733,33734],{"class":238},"'train acc'",[123,33736,140],{"class":133},[123,33738,33740,33742,33744,33747,33749,33751,33753,33755,33758],{"class":125,"line":33739},205,[123,33741,33605],{"class":133},[123,33743,33608],{"class":238},[123,33745,33746],{"class":133},"],train_process.val_acc_all,",[123,33748,33639],{"class":238},[123,33750,512],{"class":133},[123,33752,33619],{"class":5226},[123,33754,179],{"class":129},[123,33756,33757],{"class":238},"'val acc'",[123,33759,140],{"class":133},[123,33761,33763],{"class":125,"line":33762},206,[123,33764,33765],{"class":192},"    # 添加图例\n",[123,33767,33769],{"class":125,"line":33768},207,[123,33770,33662],{"class":133},[123,33772,33774,33776,33778],{"class":125,"line":33773},208,[123,33775,33674],{"class":133},[123,33777,33608],{"class":238},[123,33779,140],{"class":133},[123,33781,33783,33785,33788],{"class":125,"line":33782},209,[123,33784,33685],{"class":133},[123,33786,33787],{"class":238},"\"acc\"",[123,33789,140],{"class":133},[123,33791,33793],{"class":125,"line":33792},210,[123,33794,33795],{"class":133},"    plt.show()\n",[123,33797,33799],{"class":125,"line":33798},211,[123,33800,2409],{"emptyLinePlaceholder":50},[123,33802,33804],{"class":125,"line":33803},212,[123,33805,33806],{"class":192},"# 正式开始训练:\n",[123,33808,33810,33812,33814,33816,33818],{"class":125,"line":33809},213,[123,33811,1540],{"class":129},[123,33813,31231],{"class":182},[123,33815,2958],{"class":129},[123,33817,31236],{"class":238},[123,33819,3748],{"class":133},[123,33821,33823],{"class":125,"line":33822},214,[123,33824,33825],{"class":192},"    # 将模型实例化\n",[123,33827,33829,33832,33834],{"class":125,"line":33828},215,[123,33830,33831],{"class":133},"    LeNet",[123,33833,179],{"class":129},[123,33835,33836],{"class":133},"LeNet()\n",[123,33838,33840,33843,33845],{"class":125,"line":33839},216,[123,33841,33842],{"class":133},"    train_dataloader,val_dataloader",[123,33844,179],{"class":129},[123,33846,33847],{"class":133},"train_val_data_process()\n",[123,33849,33851,33853,33855,33858,33861,33863,33865],{"class":125,"line":33850},217,[123,33852,33404],{"class":133},[123,33854,179],{"class":129},[123,33856,33857],{"class":133},"train_model_process(LeNet,train_dataloader,val_dataloader,",[123,33859,33860],{"class":5226},"num_epochs",[123,33862,179],{"class":129},[123,33864,834],{"class":182},[123,33866,140],{"class":133},[123,33868,33870],{"class":125,"line":33869},218,[123,33871,33872],{"class":133},"    matplot_acc_loss(train_process)\n",[14,33874,33875],{},"画图的补充点学习：",[14,33877,33878],{},[35,33879],{"alt":37,"src":33880},"\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",[77,33882,33883],{"start":1189},[80,33884,33885],{},"测试",[114,33887,33889],{"className":30389,"code":33888,"language":30391,"meta":37,"style":37},"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",[120,33890,33891,33897,33907,33919,33929,33934,33944,33954,33958,33963,33972,33989,34001,34018,34029,34045,34050,34061,34072,34083,34090,34094,34099,34109,34114,34131,34139,34143,34148,34157,34166,34170,34175,34180,34185,34192,34197,34209,34219,34229,34234,34238,34243,34252,34257,34273,34278,34283,34288,34302,34307,34321,34325,34330,34345,34350,34362,34366,34371,34383,34388,34396,34401,34406,34416,34421,34430,34435,34440,34444,34449,34454,34470,34478,34483,34488,34547,34553,34558,34569,34577,34585,34589,34594,34598,34603,34611,34616,34632,34637,34647,34657],{"__ignoreMap":37},[123,33892,33893,33895],{"class":125,"line":126},[123,33894,30403],{"class":129},[123,33896,30406],{"class":133},[123,33898,33899,33901,33903,33905],{"class":125,"line":45},[123,33900,30403],{"class":129},[123,33902,31426],{"class":133},[123,33904,31394],{"class":129},[123,33906,31431],{"class":133},[123,33908,33909,33911,33914,33916],{"class":125,"line":1189},[123,33910,30748],{"class":129},[123,33912,33913],{"class":133}," jupyter_client.consoleapp ",[123,33915,30403],{"class":129},[123,33917,33918],{"class":133}," classes\n",[123,33920,33921,33923,33925,33927],{"class":125,"line":1204},[123,33922,30748],{"class":129},[123,33924,31409],{"class":133},[123,33926,30403],{"class":129},[123,33928,31414],{"class":133},[123,33930,33931],{"class":125,"line":1210},[123,33932,33933],{"class":192},"# 导入数据集\n",[123,33935,33936,33938,33940,33942],{"class":125,"line":1224},[123,33937,30748],{"class":129},[123,33939,31379],{"class":133},[123,33941,30403],{"class":129},[123,33943,31384],{"class":133},[123,33945,33946,33948,33950,33952],{"class":125,"line":1230},[123,33947,30748],{"class":129},[123,33949,31925],{"class":133},[123,33951,30403],{"class":129},[123,33953,31930],{"class":133},[123,33955,33956],{"class":125,"line":1321},[123,33957,2409],{"emptyLinePlaceholder":50},[123,33959,33960],{"class":125,"line":1327},[123,33961,33962],{"class":192},"# 测试数据处理\n",[123,33964,33965,33967,33970],{"class":125,"line":1339},[123,33966,31958],{"class":129},[123,33968,33969],{"class":1972}," test_data_process",[123,33971,31964],{"class":133},[123,33973,33974,33977,33979,33981,33983,33985,33987],{"class":125,"line":1621},[123,33975,33976],{"class":133},"    test_data",[123,33978,179],{"class":129},[123,33980,31466],{"class":133},[123,33982,31469],{"class":5226},[123,33984,179],{"class":129},[123,33986,31474],{"class":238},[123,33988,31477],{"class":133},[123,33990,33991,33994,33996,33999],{"class":125,"line":1626},[123,33992,33993],{"class":5226},"                           train",[123,33995,179],{"class":129},[123,33997,33998],{"class":182},"False",[123,34000,31477],{"class":133},[123,34002,34003,34006,34008,34010,34012,34014,34016],{"class":125,"line":1632},[123,34004,34005],{"class":5226},"                           transform",[123,34007,179],{"class":129},[123,34009,31504],{"class":133},[123,34011,31507],{"class":5226},[123,34013,179],{"class":129},[123,34015,1035],{"class":182},[123,34017,31515],{"class":133},[123,34019,34020,34023,34025,34027],{"class":125,"line":1637},[123,34021,34022],{"class":5226},"                           download",[123,34024,179],{"class":129},[123,34026,31487],{"class":182},[123,34028,140],{"class":133},[123,34030,34031,34034,34036,34038,34040,34042],{"class":125,"line":1651},[123,34032,34033],{"class":133},"    test_dataloader",[123,34035,179],{"class":129},[123,34037,31545],{"class":133},[123,34039,31548],{"class":5226},[123,34041,179],{"class":129},[123,34043,34044],{"class":133},"test_data,\n",[123,34046,34047],{"class":125,"line":1656},[123,34048,34049],{"class":192},"                                    # 这里是一张一张进行测试\n",[123,34051,34052,34055,34057,34059],{"class":125,"line":1662},[123,34053,34054],{"class":5226},"                                    batch_size",[123,34056,179],{"class":129},[123,34058,351],{"class":182},[123,34060,31477],{"class":133},[123,34062,34063,34066,34068,34070],{"class":125,"line":1683},[123,34064,34065],{"class":5226},"                                    shuffle",[123,34067,179],{"class":129},[123,34069,31487],{"class":182},[123,34071,31477],{"class":133},[123,34073,34074,34077,34079,34081],{"class":125,"line":1688},[123,34075,34076],{"class":5226},"                                    num_workers",[123,34078,179],{"class":129},[123,34080,325],{"class":182},[123,34082,140],{"class":133},[123,34084,34085,34087],{"class":125,"line":1702},[123,34086,4099],{"class":129},[123,34088,34089],{"class":133}," test_dataloader\n",[123,34091,34092],{"class":125,"line":1707},[123,34093,2409],{"emptyLinePlaceholder":50},[123,34095,34096],{"class":125,"line":1736},[123,34097,34098],{"class":192},"# 定义模型测试函数\n",[123,34100,34101,34103,34106],{"class":125,"line":1741},[123,34102,31958],{"class":129},[123,34104,34105],{"class":1972}," test_model_process",[123,34107,34108],{"class":133},"(model,test_dataloader):\n",[123,34110,34111],{"class":125,"line":1758},[123,34112,34113],{"class":192},"    # 将模型放到设备当中，先进行判断\n",[123,34115,34116,34118,34120,34122,34124,34126,34128],{"class":125,"line":1763},[123,34117,31248],{"class":133},[123,34119,179],{"class":129},[123,34121,31255],{"class":238},[123,34123,1713],{"class":129},[123,34125,31260],{"class":133},[123,34127,1710],{"class":129},[123,34129,34130],{"class":238}," \"cpu\"\n",[123,34132,34133,34135,34137],{"class":125,"line":1768},[123,34134,31300],{"class":133},[123,34136,179],{"class":129},[123,34138,32300],{"class":133},[123,34140,34141],{"class":125,"line":1773},[123,34142,2409],{"emptyLinePlaceholder":50},[123,34144,34145],{"class":125,"line":1787},[123,34146,34147],{"class":192},"    # 设置初始化参数\n",[123,34149,34150,34153,34155],{"class":125,"line":1792},[123,34151,34152],{"class":133},"    test_corrects",[123,34154,179],{"class":129},[123,34156,32353],{"class":182},[123,34158,34159,34162,34164],{"class":125,"line":2586},[123,34160,34161],{"class":133},"    test_num",[123,34163,179],{"class":129},[123,34165,3094],{"class":182},[123,34167,34168],{"class":125,"line":2600},[123,34169,2409],{"emptyLinePlaceholder":50},[123,34171,34172],{"class":125,"line":2608},[123,34173,34174],{"class":192},"    # 进行模型测试\n",[123,34176,34177],{"class":125,"line":2613},[123,34178,34179],{"class":192},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[123,34181,34182],{"class":125,"line":2619},[123,34183,34184],{"class":192},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[123,34186,34187,34190],{"class":125,"line":2625},[123,34188,34189],{"class":129},"    with",[123,34191,32895],{"class":133},[123,34193,34194],{"class":125,"line":2630},[123,34195,34196],{"class":192},"        # 从数据中进行\n",[123,34198,34199,34201,34204,34206],{"class":125,"line":7958},[123,34200,3412],{"class":129},[123,34202,34203],{"class":133}," test_data_x,test_data_y ",[123,34205,26054],{"class":129},[123,34207,34208],{"class":133}," test_dataloader:\n",[123,34210,34211,34214,34216],{"class":125,"line":7982},[123,34212,34213],{"class":133},"            test_data_x",[123,34215,179],{"class":129},[123,34217,34218],{"class":133},"test_data_x.to(device)\n",[123,34220,34221,34224,34226],{"class":125,"line":7987},[123,34222,34223],{"class":133},"            test_data_y",[123,34225,179],{"class":129},[123,34227,34228],{"class":133},"test_data_y.to(device)\n",[123,34230,34231],{"class":125,"line":7993},[123,34232,34233],{"class":192},"            # 设置为验证模式\n",[123,34235,34236],{"class":125,"line":8020},[123,34237,32886],{"class":133},[123,34239,34240],{"class":125,"line":8025},[123,34241,34242],{"class":192},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[123,34244,34245,34247,34249],{"class":125,"line":8031},[123,34246,32671],{"class":133},[123,34248,179],{"class":129},[123,34250,34251],{"class":133},"model(test_data_x)\n",[123,34253,34254],{"class":125,"line":8043},[123,34255,34256],{"class":192},"            # 查找每一行中最大值对应的下标\n",[123,34258,34259,34261,34263,34265,34267,34269,34271],{"class":125,"line":8055},[123,34260,32688],{"class":133},[123,34262,179],{"class":129},[123,34264,32693],{"class":133},[123,34266,32696],{"class":5226},[123,34268,179],{"class":129},[123,34270,351],{"class":182},[123,34272,140],{"class":133},[123,34274,34275],{"class":125,"line":8067},[123,34276,34277],{"class":192},"            # 计算正确率\n",[123,34279,34280],{"class":125,"line":9726},[123,34281,34282],{"class":192},"            # .data表示是一个不带梯度信息的tensor\n",[123,34284,34285],{"class":125,"line":9751},[123,34286,34287],{"class":192},"            # 如果预测正确，则准确度test_corrects加1\n",[123,34289,34290,34293,34295,34297,34299],{"class":125,"line":9774},[123,34291,34292],{"class":133},"            test_corrects",[123,34294,9487],{"class":129},[123,34296,32798],{"class":133},[123,34298,2958],{"class":129},[123,34300,34301],{"class":133},"test_data_y.data)\n",[123,34303,34304],{"class":125,"line":9798},[123,34305,34306],{"class":192},"            # 将所有的测试样本进行累计\n",[123,34308,34309,34312,34314,34317,34319],{"class":125,"line":9803},[123,34310,34311],{"class":133},"            test_num",[123,34313,9487],{"class":129},[123,34315,34316],{"class":133},"test_data_x.size(",[123,34318,325],{"class":182},[123,34320,140],{"class":133},[123,34322,34323],{"class":125,"line":9808},[123,34324,2409],{"emptyLinePlaceholder":50},[123,34326,34327],{"class":125,"line":9813},[123,34328,34329],{"class":192},"        # 计算准确度\n",[123,34331,34332,34335,34337,34340,34342],{"class":125,"line":9822},[123,34333,34334],{"class":133},"        test_acc",[123,34336,179],{"class":129},[123,34338,34339],{"class":133},"test_corrects.double().item()",[123,34341,718],{"class":129},[123,34343,34344],{"class":133},"test_num\n",[123,34346,34347],{"class":125,"line":9827},[123,34348,34349],{"class":192},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[123,34351,34352,34354,34356,34359],{"class":125,"line":9833},[123,34353,32462],{"class":182},[123,34355,134],{"class":133},[123,34357,34358],{"class":238},"\"测试的准确率：\"",[123,34360,34361],{"class":133},",test_acc)\n",[123,34363,34364],{"class":125,"line":9854},[123,34365,2409],{"emptyLinePlaceholder":50},[123,34367,34368],{"class":125,"line":9860},[123,34369,34370],{"class":192},"# 实现模型的测试功能\n",[123,34372,34373,34375,34377,34379,34381],{"class":125,"line":9874},[123,34374,1540],{"class":129},[123,34376,31231],{"class":182},[123,34378,2958],{"class":129},[123,34380,31236],{"class":238},[123,34382,3748],{"class":133},[123,34384,34385],{"class":125,"line":9880},[123,34386,34387],{"class":192},"    # 加载模型\n",[123,34389,34390,34392,34394],{"class":125,"line":9907},[123,34391,31300],{"class":133},[123,34393,179],{"class":129},[123,34395,33836],{"class":133},[123,34397,34398],{"class":125,"line":9916},[123,34399,34400],{"class":192},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[123,34402,34403],{"class":125,"line":9922},[123,34404,34405],{"class":192},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[123,34407,34408,34411,34414],{"class":125,"line":9930},[123,34409,34410],{"class":133},"    model.load_state_dict(torch.load(",[123,34412,34413],{"class":238},"'best_model.pth'",[123,34415,30508],{"class":133},[123,34417,34418],{"class":125,"line":9935},[123,34419,34420],{"class":192},"    # 数据加载\n",[123,34422,34423,34425,34427],{"class":125,"line":16614},[123,34424,34033],{"class":133},[123,34426,179],{"class":129},[123,34428,34429],{"class":133},"test_data_process()\n",[123,34431,34432],{"class":125,"line":16620},[123,34433,34434],{"class":192},"    # 加载模型测试的函数\n",[123,34436,34437],{"class":125,"line":16643},[123,34438,34439],{"class":133},"    test_model_process(model,test_dataloader)\n",[123,34441,34442],{"class":125,"line":16649},[123,34443,2409],{"emptyLinePlaceholder":50},[123,34445,34446],{"class":125,"line":16672},[123,34447,34448],{"class":192},"    # 验证集推理实现：\n",[123,34450,34451],{"class":125,"line":16686},[123,34452,34453],{"class":192},"    # 加载数据加载的更详细一些\n",[123,34455,34456,34458,34460,34462,34464,34466,34468],{"class":125,"line":16706},[123,34457,31248],{"class":133},[123,34459,179],{"class":129},[123,34461,31255],{"class":238},[123,34463,1713],{"class":129},[123,34465,31260],{"class":133},[123,34467,1710],{"class":129},[123,34469,34130],{"class":238},[123,34471,34472,34474,34476],{"class":125,"line":16712},[123,34473,31300],{"class":133},[123,34475,179],{"class":129},[123,34477,32300],{"class":133},[123,34479,34480],{"class":125,"line":16723},[123,34481,34482],{"class":192},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[123,34484,34485],{"class":125,"line":16746},[123,34486,34487],{"class":192},"    # 顺序不可改变\n",[123,34489,34490,34493,34495,34497,34500,34502,34505,34507,34510,34512,34515,34517,34520,34522,34525,34527,34530,34532,34535,34537,34540,34542,34545],{"class":125,"line":16768},[123,34491,34492],{"class":133},"    classes",[123,34494,179],{"class":129},[123,34496,1024],{"class":133},[123,34498,34499],{"class":238},"'T-shirt\u002Ftop'",[123,34501,512],{"class":133},[123,34503,34504],{"class":238},"'Trouser'",[123,34506,512],{"class":133},[123,34508,34509],{"class":238},"'Pullover'",[123,34511,512],{"class":133},[123,34513,34514],{"class":238},"'Dress'",[123,34516,512],{"class":133},[123,34518,34519],{"class":238},"'Coat'",[123,34521,512],{"class":133},[123,34523,34524],{"class":238},"'Sandal'",[123,34526,512],{"class":133},[123,34528,34529],{"class":238},"'Shirt'",[123,34531,512],{"class":133},[123,34533,34534],{"class":238},"'Sneaker'",[123,34536,512],{"class":133},[123,34538,34539],{"class":238},"'Bag'",[123,34541,512],{"class":133},[123,34543,34544],{"class":238},"'Ankle boot'",[123,34546,33257],{"class":133},[123,34548,34549,34551],{"class":125,"line":16773},[123,34550,34189],{"class":129},[123,34552,32895],{"class":133},[123,34554,34555],{"class":125,"line":16779},[123,34556,34557],{"class":192},"        # 将数据和标签都放到设备当中\n",[123,34559,34560,34562,34565,34567],{"class":125,"line":16793},[123,34561,3412],{"class":129},[123,34563,34564],{"class":133}," b_x,b_y ",[123,34566,26054],{"class":129},[123,34568,34208],{"class":133},[123,34570,34571,34573,34575],{"class":125,"line":16806},[123,34572,32621],{"class":133},[123,34574,179],{"class":129},[123,34576,32626],{"class":133},[123,34578,34579,34581,34583],{"class":125,"line":16811},[123,34580,32636],{"class":133},[123,34582,179],{"class":129},[123,34584,32641],{"class":133},[123,34586,34587],{"class":125,"line":16825},[123,34588,2409],{"emptyLinePlaceholder":50},[123,34590,34591],{"class":125,"line":16830},[123,34592,34593],{"class":192},"            # 设置模型为验证模式\n",[123,34595,34596],{"class":125,"line":16836},[123,34597,32886],{"class":133},[123,34599,34600],{"class":125,"line":16841},[123,34601,34602],{"class":192},"            # 模型推理结果\n",[123,34604,34605,34607,34609],{"class":125,"line":16855},[123,34606,32671],{"class":133},[123,34608,179],{"class":129},[123,34610,32676],{"class":133},[123,34612,34613],{"class":125,"line":16860},[123,34614,34615],{"class":192},"            # 获取最大下标，最大下标就是类别号\n",[123,34617,34618,34620,34622,34624,34626,34628,34630],{"class":125,"line":16865},[123,34619,32688],{"class":133},[123,34621,179],{"class":129},[123,34623,32693],{"class":133},[123,34625,32696],{"class":5226},[123,34627,179],{"class":129},[123,34629,351],{"class":182},[123,34631,140],{"class":133},[123,34633,34634],{"class":125,"line":16879},[123,34635,34636],{"class":192},"            # 取出张量中的数值\n",[123,34638,34639,34642,34644],{"class":125,"line":16891},[123,34640,34641],{"class":133},"            result",[123,34643,179],{"class":129},[123,34645,34646],{"class":133},"pre_lab.item()\n",[123,34648,34649,34652,34654],{"class":125,"line":16896},[123,34650,34651],{"class":133},"            label",[123,34653,179],{"class":129},[123,34655,34656],{"class":133},"b_y.item()\n",[123,34658,34659,34662,34664,34667,34670,34673,34675,34678],{"class":125,"line":16909},[123,34660,34661],{"class":182},"            print",[123,34663,134],{"class":133},[123,34665,34666],{"class":238},"\"预测值：\"",[123,34668,34669],{"class":133},",classes[result],",[123,34671,34672],{"class":238},"\"------\"",[123,34674,512],{"class":133},[123,34676,34677],{"class":238},"\"真实值：\"",[123,34679,34680],{"class":133},",classes[label])\n",[14,34682,34683],{},"（2）AlexNet",[77,34685,34686],{},[80,34687,34688],{},"神经网络构建",[114,34690,34692],{"className":30389,"code":34691,"language":30391,"meta":37,"style":37},"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",[120,34693,34694,34700,34710,34720,34732,34736,34753,34761,34776,34788,34830,34857,34900,34926,34970,35013,35056,35083,35087,35097,35102,35130,35149,35168,35172,35177,35185,35200,35210,35224,35234,35249,35264,35279,35290,35294,35299,35309,35324,35329,35343,35358,35370,35375,35386,35391,35397,35402,35414,35434,35439,35448],{"__ignoreMap":37},[123,34695,34696,34698],{"class":125,"line":126},[123,34697,30403],{"class":129},[123,34699,30406],{"class":133},[123,34701,34702,34704,34706,34708],{"class":125,"line":45},[123,34703,30748],{"class":129},[123,34705,30751],{"class":133},[123,34707,30403],{"class":129},[123,34709,30756],{"class":133},[123,34711,34712,34714,34716,34718],{"class":125,"line":1189},[123,34713,30748],{"class":129},[123,34715,30768],{"class":133},[123,34717,30403],{"class":129},[123,34719,30773],{"class":133},[123,34721,34722,34724,34727,34729],{"class":125,"line":1204},[123,34723,30403],{"class":129},[123,34725,34726],{"class":133}," torch.nn.functional ",[123,34728,31394],{"class":129},[123,34730,34731],{"class":133}," F\n",[123,34733,34734],{"class":125,"line":1210},[123,34735,2409],{"emptyLinePlaceholder":50},[123,34737,34738,34740,34743,34745,34747,34749,34751],{"class":125,"line":1224},[123,34739,14704],{"class":129},[123,34741,34742],{"class":1972}," AlexNet",[123,34744,134],{"class":133},[123,34746,30789],{"class":1972},[123,34748,692],{"class":133},[123,34750,30794],{"class":1972},[123,34752,30797],{"class":133},[123,34754,34755,34757,34759],{"class":125,"line":1230},[123,34756,30812],{"class":129},[123,34758,30815],{"class":182},[123,34760,30818],{"class":133},[123,34762,34763,34765,34768,34770,34772,34774],{"class":125,"line":1321},[123,34764,30828],{"class":182},[123,34766,34767],{"class":133},"(AlexNet,",[123,34769,30834],{"class":182},[123,34771,30837],{"class":133},[123,34773,30840],{"class":182},[123,34775,1985],{"class":133},[123,34777,34778,34780,34783,34785],{"class":125,"line":1327},[123,34779,30856],{"class":182},[123,34781,34782],{"class":133},".ReLu",[123,34784,179],{"class":129},[123,34786,34787],{"class":133},"nn.ReLU()\n",[123,34789,34790,34792,34794,34796,34798,34800,34802,34804,34806,34808,34810,34812,34814,34816,34818,34820,34822,34824,34826,34828],{"class":125,"line":1339},[123,34791,30856],{"class":182},[123,34793,30859],{"class":133},[123,34795,179],{"class":129},[123,34797,30864],{"class":133},[123,34799,30867],{"class":5226},[123,34801,179],{"class":129},[123,34803,351],{"class":182},[123,34805,512],{"class":133},[123,34807,30876],{"class":5226},[123,34809,179],{"class":129},[123,34811,343],{"class":182},[123,34813,512],{"class":133},[123,34815,30885],{"class":5226},[123,34817,179],{"class":129},[123,34819,606],{"class":182},[123,34821,512],{"class":133},[123,34823,30940],{"class":5226},[123,34825,179],{"class":129},[123,34827,427],{"class":182},[123,34829,140],{"class":133},[123,34831,34832,34834,34836,34838,34841,34843,34845,34847,34849,34851,34853,34855],{"class":125,"line":1621},[123,34833,30856],{"class":182},[123,34835,30924],{"class":133},[123,34837,179],{"class":129},[123,34839,34840],{"class":133},"nn.MaxPool2d(",[123,34842,30885],{"class":5226},[123,34844,179],{"class":129},[123,34846,205],{"class":182},[123,34848,512],{"class":133},[123,34850,30940],{"class":5226},[123,34852,179],{"class":129},[123,34854,211],{"class":182},[123,34856,140],{"class":133},[123,34858,34859,34861,34863,34865,34867,34869,34871,34873,34875,34877,34879,34882,34884,34886,34888,34890,34892,34894,34896,34898],{"class":125,"line":1626},[123,34860,30856],{"class":182},[123,34862,30953],{"class":133},[123,34864,179],{"class":129},[123,34866,30864],{"class":133},[123,34868,30867],{"class":5226},[123,34870,179],{"class":129},[123,34872,343],{"class":182},[123,34874,512],{"class":133},[123,34876,30876],{"class":5226},[123,34878,179],{"class":129},[123,34880,34881],{"class":182},"256",[123,34883,512],{"class":133},[123,34885,30885],{"class":5226},[123,34887,179],{"class":129},[123,34889,453],{"class":182},[123,34891,512],{"class":133},[123,34893,30894],{"class":5226},[123,34895,179],{"class":129},[123,34897,211],{"class":182},[123,34899,140],{"class":133},[123,34901,34902,34904,34906,34908,34910,34912,34914,34916,34918,34920,34922,34924],{"class":125,"line":1632},[123,34903,30856],{"class":182},[123,34905,30988],{"class":133},[123,34907,179],{"class":129},[123,34909,34840],{"class":133},[123,34911,30885],{"class":5226},[123,34913,179],{"class":129},[123,34915,205],{"class":182},[123,34917,512],{"class":133},[123,34919,30940],{"class":5226},[123,34921,179],{"class":129},[123,34923,211],{"class":182},[123,34925,140],{"class":133},[123,34927,34928,34930,34933,34935,34937,34939,34941,34943,34945,34947,34949,34952,34954,34956,34958,34960,34962,34964,34966,34968],{"class":125,"line":1637},[123,34929,30856],{"class":182},[123,34931,34932],{"class":133},".c5",[123,34934,179],{"class":129},[123,34936,30864],{"class":133},[123,34938,30867],{"class":5226},[123,34940,179],{"class":129},[123,34942,34881],{"class":182},[123,34944,512],{"class":133},[123,34946,30876],{"class":5226},[123,34948,179],{"class":129},[123,34950,34951],{"class":182},"384",[123,34953,512],{"class":133},[123,34955,30885],{"class":5226},[123,34957,179],{"class":129},[123,34959,205],{"class":182},[123,34961,512],{"class":133},[123,34963,30894],{"class":5226},[123,34965,179],{"class":129},[123,34967,351],{"class":182},[123,34969,140],{"class":133},[123,34971,34972,34974,34977,34979,34981,34983,34985,34987,34989,34991,34993,34995,34997,34999,35001,35003,35005,35007,35009,35011],{"class":125,"line":1651},[123,34973,30856],{"class":182},[123,34975,34976],{"class":133},".c6",[123,34978,179],{"class":129},[123,34980,30864],{"class":133},[123,34982,30867],{"class":5226},[123,34984,179],{"class":129},[123,34986,34951],{"class":182},[123,34988,512],{"class":133},[123,34990,30876],{"class":5226},[123,34992,179],{"class":129},[123,34994,34951],{"class":182},[123,34996,512],{"class":133},[123,34998,30885],{"class":5226},[123,35000,179],{"class":129},[123,35002,205],{"class":182},[123,35004,512],{"class":133},[123,35006,30894],{"class":5226},[123,35008,179],{"class":129},[123,35010,351],{"class":182},[123,35012,140],{"class":133},[123,35014,35015,35017,35020,35022,35024,35026,35028,35030,35032,35034,35036,35038,35040,35042,35044,35046,35048,35050,35052,35054],{"class":125,"line":1656},[123,35016,30856],{"class":182},[123,35018,35019],{"class":133},".c7",[123,35021,179],{"class":129},[123,35023,30864],{"class":133},[123,35025,30867],{"class":5226},[123,35027,179],{"class":129},[123,35029,34951],{"class":182},[123,35031,512],{"class":133},[123,35033,30876],{"class":5226},[123,35035,179],{"class":129},[123,35037,34881],{"class":182},[123,35039,512],{"class":133},[123,35041,30885],{"class":5226},[123,35043,179],{"class":129},[123,35045,205],{"class":182},[123,35047,512],{"class":133},[123,35049,30894],{"class":5226},[123,35051,179],{"class":129},[123,35053,351],{"class":182},[123,35055,140],{"class":133},[123,35057,35058,35060,35063,35065,35067,35069,35071,35073,35075,35077,35079,35081],{"class":125,"line":1662},[123,35059,30856],{"class":182},[123,35061,35062],{"class":133},".s8",[123,35064,179],{"class":129},[123,35066,34840],{"class":133},[123,35068,30885],{"class":5226},[123,35070,179],{"class":129},[123,35072,205],{"class":182},[123,35074,512],{"class":133},[123,35076,30940],{"class":5226},[123,35078,179],{"class":129},[123,35080,211],{"class":182},[123,35082,140],{"class":133},[123,35084,35085],{"class":125,"line":1683},[123,35086,31013],{"class":192},[123,35088,35089,35091,35093,35095],{"class":125,"line":1688},[123,35090,30856],{"class":182},[123,35092,31020],{"class":133},[123,35094,179],{"class":129},[123,35096,31025],{"class":133},[123,35098,35099],{"class":125,"line":1702},[123,35100,35101],{"class":192},"       # 定义全连接层\n",[123,35103,35104,35106,35109,35111,35113,35115,35117,35119,35121,35123,35125,35128],{"class":125,"line":1707},[123,35105,30856],{"class":182},[123,35107,35108],{"class":133},".f1",[123,35110,179],{"class":129},[123,35112,31042],{"class":133},[123,35114,478],{"class":182},[123,35116,589],{"class":129},[123,35118,478],{"class":182},[123,35120,589],{"class":129},[123,35122,34881],{"class":182},[123,35124,512],{"class":133},[123,35126,35127],{"class":182},"4096",[123,35129,140],{"class":133},[123,35131,35132,35134,35137,35139,35141,35143,35145,35147],{"class":125,"line":1736},[123,35133,30856],{"class":182},[123,35135,35136],{"class":133},".f2",[123,35138,179],{"class":129},[123,35140,31042],{"class":133},[123,35142,35127],{"class":182},[123,35144,512],{"class":133},[123,35146,35127],{"class":182},[123,35148,140],{"class":133},[123,35150,35151,35153,35156,35158,35160,35162,35164,35166],{"class":125,"line":1741},[123,35152,30856],{"class":182},[123,35154,35155],{"class":133},".f3",[123,35157,179],{"class":129},[123,35159,31042],{"class":133},[123,35161,35127],{"class":182},[123,35163,512],{"class":133},[123,35165,580],{"class":182},[123,35167,140],{"class":133},[123,35169,35170],{"class":125,"line":1758},[123,35171,2409],{"emptyLinePlaceholder":50},[123,35173,35174],{"class":125,"line":1763},[123,35175,35176],{"class":192},"    # 定义前向传播\n",[123,35178,35179,35181,35183],{"class":125,"line":1768},[123,35180,30812],{"class":129},[123,35182,31104],{"class":1972},[123,35184,31107],{"class":133},[123,35186,35187,35189,35191,35193,35196,35198],{"class":125,"line":1773},[123,35188,31112],{"class":133},[123,35190,179],{"class":129},[123,35192,30834],{"class":182},[123,35194,35195],{"class":133},".ReLu(",[123,35197,30834],{"class":182},[123,35199,31124],{"class":133},[123,35201,35202,35204,35206,35208],{"class":125,"line":1787},[123,35203,31112],{"class":133},[123,35205,179],{"class":129},[123,35207,30834],{"class":182},[123,35209,31135],{"class":133},[123,35211,35212,35214,35216,35218,35220,35222],{"class":125,"line":1792},[123,35213,31112],{"class":133},[123,35215,179],{"class":129},[123,35217,30834],{"class":182},[123,35219,35195],{"class":133},[123,35221,30834],{"class":182},[123,35223,31150],{"class":133},[123,35225,35226,35228,35230,35232],{"class":125,"line":2586},[123,35227,31112],{"class":133},[123,35229,179],{"class":129},[123,35231,30834],{"class":182},[123,35233,31161],{"class":133},[123,35235,35236,35238,35240,35242,35244,35246],{"class":125,"line":2600},[123,35237,31112],{"class":133},[123,35239,179],{"class":129},[123,35241,30834],{"class":182},[123,35243,35195],{"class":133},[123,35245,30834],{"class":182},[123,35247,35248],{"class":133},".c5(x))\n",[123,35250,35251,35253,35255,35257,35259,35261],{"class":125,"line":2608},[123,35252,31112],{"class":133},[123,35254,179],{"class":129},[123,35256,30834],{"class":182},[123,35258,35195],{"class":133},[123,35260,30834],{"class":182},[123,35262,35263],{"class":133},".c6(x))\n",[123,35265,35266,35268,35270,35272,35274,35276],{"class":125,"line":2613},[123,35267,31112],{"class":133},[123,35269,179],{"class":129},[123,35271,30834],{"class":182},[123,35273,35195],{"class":133},[123,35275,30834],{"class":182},[123,35277,35278],{"class":133},".c7(x))\n",[123,35280,35281,35283,35285,35287],{"class":125,"line":2619},[123,35282,31112],{"class":133},[123,35284,179],{"class":129},[123,35286,30834],{"class":182},[123,35288,35289],{"class":133},".s8(x)\n",[123,35291,35292],{"class":125,"line":2625},[123,35293,2409],{"emptyLinePlaceholder":50},[123,35295,35296],{"class":125,"line":2630},[123,35297,35298],{"class":192},"        # 展平加线性全连接层\n",[123,35300,35301,35303,35305,35307],{"class":125,"line":7958},[123,35302,31112],{"class":133},[123,35304,179],{"class":129},[123,35306,30834],{"class":182},[123,35308,31172],{"class":133},[123,35310,35311,35313,35315,35317,35319,35321],{"class":125,"line":7982},[123,35312,31112],{"class":133},[123,35314,179],{"class":129},[123,35316,30834],{"class":182},[123,35318,35195],{"class":133},[123,35320,30834],{"class":182},[123,35322,35323],{"class":133},".f1(x))\n",[123,35325,35326],{"class":125,"line":7987},[123,35327,35328],{"class":192},"        # 还需要dropout对神经元随机进行失活\n",[123,35330,35331,35333,35335,35338,35341],{"class":125,"line":7993},[123,35332,31112],{"class":133},[123,35334,179],{"class":129},[123,35336,35337],{"class":133},"F.dropout(x,",[123,35339,35340],{"class":182},"0.5",[123,35342,140],{"class":133},[123,35344,35345,35347,35349,35351,35353,35355],{"class":125,"line":8020},[123,35346,31112],{"class":133},[123,35348,179],{"class":129},[123,35350,30834],{"class":182},[123,35352,35195],{"class":133},[123,35354,30834],{"class":182},[123,35356,35357],{"class":133},".f2(x))\n",[123,35359,35360,35362,35364,35366,35368],{"class":125,"line":8025},[123,35361,31112],{"class":133},[123,35363,179],{"class":129},[123,35365,35337],{"class":133},[123,35367,35340],{"class":182},[123,35369,140],{"class":133},[123,35371,35372],{"class":125,"line":8031},[123,35373,35374],{"class":192},"        # 直接输出\n",[123,35376,35377,35379,35381,35383],{"class":125,"line":8043},[123,35378,31112],{"class":133},[123,35380,179],{"class":129},[123,35382,30834],{"class":182},[123,35384,35385],{"class":133},".f3(x)\n",[123,35387,35388],{"class":125,"line":8055},[123,35389,35390],{"class":192},"        # 前向传播输出\n",[123,35392,35393,35395],{"class":125,"line":8067},[123,35394,14762],{"class":129},[123,35396,31220],{"class":133},[123,35398,35399],{"class":125,"line":9726},[123,35400,35401],{"class":192},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[123,35403,35404,35406,35408,35410,35412],{"class":125,"line":9751},[123,35405,1540],{"class":129},[123,35407,31231],{"class":182},[123,35409,2958],{"class":129},[123,35411,31236],{"class":238},[123,35413,3748],{"class":133},[123,35415,35416,35418,35420,35422,35424,35426,35428,35430,35432],{"class":125,"line":9774},[123,35417,31248],{"class":133},[123,35419,179],{"class":129},[123,35421,30462],{"class":133},[123,35423,31255],{"class":238},[123,35425,1713],{"class":129},[123,35427,31260],{"class":133},[123,35429,1710],{"class":129},[123,35431,30487],{"class":238},[123,35433,140],{"class":133},[123,35435,35436],{"class":125,"line":9798},[123,35437,35438],{"class":192},"    # 模型实例化，然后将实例化的模型放到设备中\n",[123,35440,35441,35443,35445],{"class":125,"line":9803},[123,35442,31300],{"class":133},[123,35444,179],{"class":129},[123,35446,35447],{"class":133},"AlexNet().to(device)\n",[123,35449,35450,35452,35454,35456,35458,35461,35463,35465],{"class":125,"line":9808},[123,35451,31310],{"class":182},[123,35453,31313],{"class":133},[123,35455,351],{"class":182},[123,35457,512],{"class":133},[123,35459,35460],{"class":182},"227",[123,35462,512],{"class":133},[123,35464,35460],{"class":182},[123,35466,31326],{"class":133},[77,35468,35469],{"start":45},[80,35470,31339],{},[114,35472,35474],{"className":30389,"code":35473,"language":30391,"meta":37,"style":37},"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",[120,35475,35476,35482,35488,35498,35504,35514,35524,35534,35544,35554,35558,35569,35579,35583,35587,35591,35599,35611,35621,35637,35647,35679,35693,35703,35713,35717,35727,35741,35751,35761,35771,35777,35781,35785,35789,35793,35797,35805,35825,35829,35833,35837,35841,35845,35861,35865,35869,35877,35881,35885,35893,35897,35901,35905,35913,35917,35921,35925,35929,35937,35941,35949,35953,35961,35965,35973,35977,35985,35989,35993,36001,36005,36009,36013,36025,36049,36063,36067,36071,36075,36083,36087,36095,36099,36107,36111,36119,36123,36131,36135,36143,36147,36159,36163,36171,36175,36183,36187,36191,36195,36199,36207,36211,36227,36231,36239,36243,36247,36251,36255,36259,36263,36267,36283,36287,36299,36303,36315,36319,36331,36335,36343,36347,36355,36359,36363,36368,36374,36378,36387,36391,36408,36412,36421,36425,36443,36456,36461,36474,36478,36482,36490,36494,36498,36506,36510,36518,36522,36530,36534,36538,36580,36622,36626,36630,36646,36650,36666,36670,36674,36682,36686,36690,36702,36740,36745,36750,36759,36763,36777,36787,36793,36799,36805,36811,36815,36819,36825,36829,36833,36841,36845,36863,36867,36871,36875,36891,36895,36899,36903,36907,36911,36931,36951,36955,36959,36963,36971,36979,36983,36999,37019,37039,37043,37047,37055,37063,37067,37071,37075,37087,37091,37101,37109,37126],{"__ignoreMap":37},[123,35477,35478,35480],{"class":125,"line":126},[123,35479,30403],{"class":129},[123,35481,31833],{"class":133},[123,35483,35484,35486],{"class":125,"line":45},[123,35485,30403],{"class":129},[123,35487,31840],{"class":133},[123,35489,35490,35492,35494,35496],{"class":125,"line":1189},[123,35491,30403],{"class":129},[123,35493,31851],{"class":133},[123,35495,31394],{"class":129},[123,35497,31856],{"class":133},[123,35499,35500,35502],{"class":125,"line":1204},[123,35501,30403],{"class":129},[123,35503,30406],{"class":133},[123,35505,35506,35508,35510,35512],{"class":125,"line":1210},[123,35507,30748],{"class":129},[123,35509,31426],{"class":133},[123,35511,30403],{"class":129},[123,35513,31873],{"class":133},[123,35515,35516,35518,35520,35522],{"class":125,"line":1224},[123,35517,30748],{"class":129},[123,35519,31379],{"class":133},[123,35521,30403],{"class":129},[123,35523,31384],{"class":133},[123,35525,35526,35528,35530,35532],{"class":125,"line":1230},[123,35527,30748],{"class":129},[123,35529,31409],{"class":133},[123,35531,30403],{"class":129},[123,35533,31414],{"class":133},[123,35535,35536,35538,35540,35542],{"class":125,"line":1321},[123,35537,30403],{"class":129},[123,35539,31426],{"class":133},[123,35541,31394],{"class":129},[123,35543,31431],{"class":133},[123,35545,35546,35548,35550,35552],{"class":125,"line":1327},[123,35547,30403],{"class":129},[123,35549,31443],{"class":133},[123,35551,31394],{"class":129},[123,35553,31448],{"class":133},[123,35555,35556],{"class":125,"line":1339},[123,35557,31918],{"class":192},[123,35559,35560,35562,35564,35566],{"class":125,"line":1621},[123,35561,30748],{"class":129},[123,35563,31925],{"class":133},[123,35565,30403],{"class":129},[123,35567,35568],{"class":133}," AlexNet\n",[123,35570,35571,35573,35575,35577],{"class":125,"line":1626},[123,35572,30748],{"class":129},[123,35574,30751],{"class":133},[123,35576,30403],{"class":129},[123,35578,30756],{"class":133},[123,35580,35581],{"class":125,"line":1632},[123,35582,2409],{"emptyLinePlaceholder":50},[123,35584,35585],{"class":125,"line":1637},[123,35586,2409],{"emptyLinePlaceholder":50},[123,35588,35589],{"class":125,"line":1651},[123,35590,31953],{"class":192},[123,35592,35593,35595,35597],{"class":125,"line":1656},[123,35594,31958],{"class":129},[123,35596,31961],{"class":1972},[123,35598,31964],{"class":133},[123,35600,35601,35603,35605,35607,35609],{"class":125,"line":1662},[123,35602,31969],{"class":133},[123,35604,179],{"class":129},[123,35606,31466],{"class":133},[123,35608,31474],{"class":238},[123,35610,31477],{"class":133},[123,35612,35613,35615,35617,35619],{"class":125,"line":1683},[123,35614,31982],{"class":5226},[123,35616,179],{"class":129},[123,35618,31487],{"class":182},[123,35620,31477],{"class":133},[123,35622,35623,35625,35627,35629,35631,35633,35635],{"class":125,"line":1688},[123,35624,31993],{"class":5226},[123,35626,179],{"class":129},[123,35628,31504],{"class":133},[123,35630,31507],{"class":5226},[123,35632,179],{"class":129},[123,35634,35460],{"class":182},[123,35636,31515],{"class":133},[123,35638,35639,35641,35643,35645],{"class":125,"line":1702},[123,35640,32010],{"class":5226},[123,35642,179],{"class":129},[123,35644,31487],{"class":182},[123,35646,140],{"class":133},[123,35648,35649,35651,35653,35655,35657,35659,35661,35663,35665,35667,35669,35671,35673,35675,35677],{"class":125,"line":1707},[123,35650,32021],{"class":133},[123,35652,179],{"class":129},[123,35654,32026],{"class":133},[123,35656,32029],{"class":182},[123,35658,134],{"class":133},[123,35660,32034],{"class":182},[123,35662,589],{"class":129},[123,35664,7368],{"class":182},[123,35666,32041],{"class":133},[123,35668,32029],{"class":182},[123,35670,134],{"class":133},[123,35672,32048],{"class":182},[123,35674,589],{"class":129},[123,35676,7368],{"class":182},[123,35678,32055],{"class":133},[123,35680,35681,35683,35685,35687,35689,35691],{"class":125,"line":1736},[123,35682,32060],{"class":133},[123,35684,179],{"class":129},[123,35686,32065],{"class":133},[123,35688,31548],{"class":5226},[123,35690,179],{"class":129},[123,35692,31553],{"class":133},[123,35694,35695,35697,35699,35701],{"class":125,"line":1741},[123,35696,32076],{"class":5226},[123,35698,179],{"class":129},[123,35700,32081],{"class":182},[123,35702,31477],{"class":133},[123,35704,35705,35707,35709,35711],{"class":125,"line":1758},[123,35706,32088],{"class":5226},[123,35708,179],{"class":129},[123,35710,31487],{"class":182},[123,35712,31477],{"class":133},[123,35714,35715],{"class":125,"line":1763},[123,35716,32099],{"class":192},[123,35718,35719,35721,35723,35725],{"class":125,"line":1768},[123,35720,32104],{"class":5226},[123,35722,179],{"class":129},[123,35724,529],{"class":182},[123,35726,140],{"class":133},[123,35728,35729,35731,35733,35735,35737,35739],{"class":125,"line":1773},[123,35730,32115],{"class":133},[123,35732,179],{"class":129},[123,35734,31545],{"class":133},[123,35736,31548],{"class":5226},[123,35738,179],{"class":129},[123,35740,32126],{"class":133},[123,35742,35743,35745,35747,35749],{"class":125,"line":1787},[123,35744,32131],{"class":5226},[123,35746,179],{"class":129},[123,35748,32081],{"class":182},[123,35750,31477],{"class":133},[123,35752,35753,35755,35757,35759],{"class":125,"line":1792},[123,35754,32142],{"class":5226},[123,35756,179],{"class":129},[123,35758,31487],{"class":182},[123,35760,31477],{"class":133},[123,35762,35763,35765,35767,35769],{"class":125,"line":2586},[123,35764,32153],{"class":5226},[123,35766,179],{"class":129},[123,35768,529],{"class":182},[123,35770,140],{"class":133},[123,35772,35773,35775],{"class":125,"line":2600},[123,35774,4099],{"class":129},[123,35776,32166],{"class":133},[123,35778,35779],{"class":125,"line":2608},[123,35780,2409],{"emptyLinePlaceholder":50},[123,35782,35783],{"class":125,"line":2613},[123,35784,32175],{"class":192},[123,35786,35787],{"class":125,"line":2619},[123,35788,32180],{"class":192},[123,35790,35791],{"class":125,"line":2625},[123,35792,2409],{"emptyLinePlaceholder":50},[123,35794,35795],{"class":125,"line":2630},[123,35796,32189],{"class":192},[123,35798,35799,35801,35803],{"class":125,"line":7958},[123,35800,31958],{"class":129},[123,35802,32196],{"class":1972},[123,35804,32199],{"class":133},[123,35806,35807,35809,35811,35813,35815,35817,35819,35821,35823],{"class":125,"line":7982},[123,35808,31248],{"class":133},[123,35810,179],{"class":129},[123,35812,30462],{"class":133},[123,35814,31255],{"class":238},[123,35816,1713],{"class":129},[123,35818,31260],{"class":133},[123,35820,1710],{"class":129},[123,35822,32218],{"class":238},[123,35824,140],{"class":133},[123,35826,35827],{"class":125,"line":7987},[123,35828,2409],{"emptyLinePlaceholder":50},[123,35830,35831],{"class":125,"line":7993},[123,35832,2409],{"emptyLinePlaceholder":50},[123,35834,35835],{"class":125,"line":8020},[123,35836,32233],{"class":192},[123,35838,35839],{"class":125,"line":8025},[123,35840,32238],{"class":192},[123,35842,35843],{"class":125,"line":8031},[123,35844,32243],{"class":192},[123,35846,35847,35849,35851,35853,35855,35857,35859],{"class":125,"line":8043},[123,35848,32248],{"class":133},[123,35850,179],{"class":129},[123,35852,32253],{"class":133},[123,35854,32256],{"class":5226},[123,35856,179],{"class":129},[123,35858,32261],{"class":182},[123,35860,140],{"class":133},[123,35862,35863],{"class":125,"line":8055},[123,35864,2409],{"emptyLinePlaceholder":50},[123,35866,35867],{"class":125,"line":8067},[123,35868,32272],{"class":192},[123,35870,35871,35873,35875],{"class":125,"line":9726},[123,35872,32277],{"class":133},[123,35874,179],{"class":129},[123,35876,32282],{"class":133},[123,35878,35879],{"class":125,"line":9751},[123,35880,2409],{"emptyLinePlaceholder":50},[123,35882,35883],{"class":125,"line":9774},[123,35884,32291],{"class":192},[123,35886,35887,35889,35891],{"class":125,"line":9798},[123,35888,31300],{"class":133},[123,35890,179],{"class":129},[123,35892,32300],{"class":133},[123,35894,35895],{"class":125,"line":9803},[123,35896,32305],{"class":192},[123,35898,35899],{"class":125,"line":9808},[123,35900,32310],{"class":192},[123,35902,35903],{"class":125,"line":9813},[123,35904,32315],{"class":192},[123,35906,35907,35909,35911],{"class":125,"line":9822},[123,35908,32320],{"class":133},[123,35910,179],{"class":129},[123,35912,32325],{"class":133},[123,35914,35915],{"class":125,"line":9827},[123,35916,2409],{"emptyLinePlaceholder":50},[123,35918,35919],{"class":125,"line":9833},[123,35920,2409],{"emptyLinePlaceholder":50},[123,35922,35923],{"class":125,"line":9854},[123,35924,32338],{"class":192},[123,35926,35927],{"class":125,"line":9860},[123,35928,32343],{"class":192},[123,35930,35931,35933,35935],{"class":125,"line":9874},[123,35932,32348],{"class":133},[123,35934,179],{"class":129},[123,35936,32353],{"class":182},[123,35938,35939],{"class":125,"line":9880},[123,35940,32358],{"class":192},[123,35942,35943,35945,35947],{"class":125,"line":9907},[123,35944,32363],{"class":133},[123,35946,179],{"class":129},[123,35948,32368],{"class":133},[123,35950,35951],{"class":125,"line":9916},[123,35952,32373],{"class":192},[123,35954,35955,35957,35959],{"class":125,"line":9922},[123,35956,32378],{"class":133},[123,35958,179],{"class":129},[123,35960,32368],{"class":133},[123,35962,35963],{"class":125,"line":9930},[123,35964,32387],{"class":192},[123,35966,35967,35969,35971],{"class":125,"line":9935},[123,35968,32392],{"class":133},[123,35970,179],{"class":129},[123,35972,32368],{"class":133},[123,35974,35975],{"class":125,"line":16614},[123,35976,32401],{"class":192},[123,35978,35979,35981,35983],{"class":125,"line":16620},[123,35980,32406],{"class":133},[123,35982,179],{"class":129},[123,35984,32368],{"class":133},[123,35986,35987],{"class":125,"line":16643},[123,35988,2409],{"emptyLinePlaceholder":50},[123,35990,35991],{"class":125,"line":16649},[123,35992,32419],{"class":192},[123,35994,35995,35997,35999],{"class":125,"line":16672},[123,35996,32424],{"class":133},[123,35998,179],{"class":129},[123,36000,32429],{"class":133},[123,36002,36003],{"class":125,"line":16686},[123,36004,2409],{"emptyLinePlaceholder":50},[123,36006,36007],{"class":125,"line":16706},[123,36008,2409],{"emptyLinePlaceholder":50},[123,36010,36011],{"class":125,"line":16712},[123,36012,32442],{"class":192},[123,36014,36015,36017,36019,36021,36023],{"class":125,"line":16723},[123,36016,3210],{"class":129},[123,36018,32449],{"class":133},[123,36020,26054],{"class":129},[123,36022,32454],{"class":182},[123,36024,32457],{"class":133},[123,36026,36027,36029,36031,36033,36035,36037,36039,36041,36043,36045,36047],{"class":125,"line":16746},[123,36028,32462],{"class":182},[123,36030,134],{"class":133},[123,36032,32467],{"class":238},[123,36034,32470],{"class":182},[123,36036,718],{"class":238},[123,36038,32470],{"class":182},[123,36040,385],{"class":238},[123,36042,32479],{"class":133},[123,36044,666],{"class":129},[123,36046,351],{"class":182},[123,36048,30508],{"class":133},[123,36050,36051,36053,36055,36057,36059,36061],{"class":125,"line":16768},[123,36052,32462],{"class":182},[123,36054,134],{"class":133},[123,36056,32494],{"class":238},[123,36058,589],{"class":129},[123,36060,580],{"class":182},[123,36062,140],{"class":133},[123,36064,36065],{"class":125,"line":16773},[123,36066,2409],{"emptyLinePlaceholder":50},[123,36068,36069],{"class":125,"line":16779},[123,36070,32509],{"class":192},[123,36072,36073],{"class":125,"line":16793},[123,36074,32514],{"class":192},[123,36076,36077,36079,36081],{"class":125,"line":16806},[123,36078,32519],{"class":133},[123,36080,179],{"class":129},[123,36082,32353],{"class":182},[123,36084,36085],{"class":125,"line":16811},[123,36086,32528],{"class":192},[123,36088,36089,36091,36093],{"class":125,"line":16825},[123,36090,32533],{"class":133},[123,36092,179],{"class":129},[123,36094,3094],{"class":182},[123,36096,36097],{"class":125,"line":16830},[123,36098,32542],{"class":192},[123,36100,36101,36103,36105],{"class":125,"line":16836},[123,36102,32547],{"class":133},[123,36104,179],{"class":129},[123,36106,32353],{"class":182},[123,36108,36109],{"class":125,"line":16841},[123,36110,32556],{"class":192},[123,36112,36113,36115,36117],{"class":125,"line":16855},[123,36114,32561],{"class":133},[123,36116,179],{"class":129},[123,36118,3094],{"class":182},[123,36120,36121],{"class":125,"line":16860},[123,36122,32570],{"class":192},[123,36124,36125,36127,36129],{"class":125,"line":16865},[123,36126,32575],{"class":133},[123,36128,179],{"class":129},[123,36130,3094],{"class":182},[123,36132,36133],{"class":125,"line":16879},[123,36134,32584],{"class":192},[123,36136,36137,36139,36141],{"class":125,"line":16891},[123,36138,32589],{"class":133},[123,36140,179],{"class":129},[123,36142,3094],{"class":182},[123,36144,36145],{"class":125,"line":16896},[123,36146,32598],{"class":192},[123,36148,36149,36151,36153,36155,36157],{"class":125,"line":16909},[123,36150,3412],{"class":129},[123,36152,31612],{"class":133},[123,36154,26054],{"class":129},[123,36156,31617],{"class":182},[123,36158,32611],{"class":133},[123,36160,36161],{"class":125,"line":16914},[123,36162,32616],{"class":192},[123,36164,36165,36167,36169],{"class":125,"line":16919},[123,36166,32621],{"class":133},[123,36168,179],{"class":129},[123,36170,32626],{"class":133},[123,36172,36173],{"class":125,"line":16924},[123,36174,32631],{"class":192},[123,36176,36177,36179,36181],{"class":125,"line":16937},[123,36178,32636],{"class":133},[123,36180,179],{"class":129},[123,36182,32641],{"class":133},[123,36184,36185],{"class":125,"line":16942},[123,36186,32647],{"class":192},[123,36188,36189],{"class":125,"line":32644},[123,36190,32653],{"class":133},[123,36192,36193],{"class":125,"line":32650},[123,36194,32659],{"class":192},[123,36196,36197],{"class":125,"line":32656},[123,36198,32665],{"class":192},[123,36200,36201,36203,36205],{"class":125,"line":32662},[123,36202,32671],{"class":133},[123,36204,179],{"class":129},[123,36206,32676],{"class":133},[123,36208,36209],{"class":125,"line":32668},[123,36210,32682],{"class":192},[123,36212,36213,36215,36217,36219,36221,36223,36225],{"class":125,"line":32679},[123,36214,32688],{"class":133},[123,36216,179],{"class":129},[123,36218,32693],{"class":133},[123,36220,32696],{"class":5226},[123,36222,179],{"class":129},[123,36224,351],{"class":182},[123,36226,140],{"class":133},[123,36228,36229],{"class":125,"line":32685},[123,36230,32708],{"class":192},[123,36232,36233,36235,36237],{"class":125,"line":32705},[123,36234,32714],{"class":133},[123,36236,179],{"class":129},[123,36238,32719],{"class":133},[123,36240,36241],{"class":125,"line":32711},[123,36242,32725],{"class":192},[123,36244,36245],{"class":125,"line":32722},[123,36246,32731],{"class":133},[123,36248,36249],{"class":125,"line":32728},[123,36250,32737],{"class":192},[123,36252,36253],{"class":125,"line":32734},[123,36254,32743],{"class":133},[123,36256,36257],{"class":125,"line":32740},[123,36258,32749],{"class":192},[123,36260,36261],{"class":125,"line":32746},[123,36262,32755],{"class":133},[123,36264,36265],{"class":125,"line":32752},[123,36266,32761],{"class":192},[123,36268,36269,36271,36273,36275,36277,36279,36281],{"class":125,"line":32758},[123,36270,32767],{"class":133},[123,36272,9487],{"class":129},[123,36274,32772],{"class":133},[123,36276,589],{"class":129},[123,36278,32777],{"class":133},[123,36280,325],{"class":182},[123,36282,140],{"class":133},[123,36284,36285],{"class":125,"line":32764},[123,36286,32787],{"class":192},[123,36288,36289,36291,36293,36295,36297],{"class":125,"line":32784},[123,36290,32793],{"class":133},[123,36292,9487],{"class":129},[123,36294,32798],{"class":133},[123,36296,2958],{"class":129},[123,36298,32803],{"class":133},[123,36300,36301],{"class":125,"line":32790},[123,36302,32809],{"class":192},[123,36304,36305,36307,36309,36311,36313],{"class":125,"line":32806},[123,36306,32815],{"class":133},[123,36308,9487],{"class":129},[123,36310,32777],{"class":133},[123,36312,325],{"class":182},[123,36314,140],{"class":133},[123,36316,36317],{"class":125,"line":32812},[123,36318,32829],{"class":192},[123,36320,36321,36323,36325,36327,36329],{"class":125,"line":32826},[123,36322,3412],{"class":129},[123,36324,32837],{"class":133},[123,36326,26054],{"class":129},[123,36328,31617],{"class":182},[123,36330,32844],{"class":133},[123,36332,36333],{"class":125,"line":32832},[123,36334,32850],{"class":192},[123,36336,36337,36339,36341],{"class":125,"line":32847},[123,36338,32621],{"class":133},[123,36340,179],{"class":129},[123,36342,32626],{"class":133},[123,36344,36345],{"class":125,"line":32853},[123,36346,32865],{"class":192},[123,36348,36349,36351,36353],{"class":125,"line":32862},[123,36350,32636],{"class":133},[123,36352,179],{"class":129},[123,36354,32641],{"class":133},[123,36356,36357],{"class":125,"line":32868},[123,36358,32880],{"class":192},[123,36360,36361],{"class":125,"line":32877},[123,36362,32886],{"class":133},[123,36364,36365],{"class":125,"line":32883},[123,36366,36367],{"class":192},"            # 验证时不计算梯度以节省内存\u002F计算\n",[123,36369,36370,36372],{"class":125,"line":32889},[123,36371,32892],{"class":129},[123,36373,32895],{"class":133},[123,36375,36376],{"class":125,"line":32898},[123,36377,32901],{"class":192},[123,36379,36380,36383,36385],{"class":125,"line":32904},[123,36381,36382],{"class":133},"                output",[123,36384,179],{"class":129},[123,36386,32676],{"class":133},[123,36388,36389],{"class":125,"line":32915},[123,36390,32918],{"class":192},[123,36392,36393,36396,36398,36400,36402,36404,36406],{"class":125,"line":32921},[123,36394,36395],{"class":133},"                pre_lab",[123,36397,179],{"class":129},[123,36399,32693],{"class":133},[123,36401,32696],{"class":5226},[123,36403,179],{"class":129},[123,36405,351],{"class":182},[123,36407,140],{"class":133},[123,36409,36410],{"class":125,"line":32940},[123,36411,32943],{"class":192},[123,36413,36414,36417,36419],{"class":125,"line":32946},[123,36415,36416],{"class":133},"                val_batch_loss",[123,36418,179],{"class":129},[123,36420,32719],{"class":133},[123,36422,36423],{"class":125,"line":32957},[123,36424,32960],{"class":192},[123,36426,36427,36430,36432,36435,36437,36439,36441],{"class":125,"line":32963},[123,36428,36429],{"class":133},"                val_loss",[123,36431,9487],{"class":129},[123,36433,36434],{"class":133},"val_batch_loss.item()",[123,36436,589],{"class":129},[123,36438,32777],{"class":133},[123,36440,325],{"class":182},[123,36442,140],{"class":133},[123,36444,36445,36448,36450,36452,36454],{"class":125,"line":32983},[123,36446,36447],{"class":133},"                val_corrects",[123,36449,9487],{"class":129},[123,36451,32798],{"class":133},[123,36453,2958],{"class":129},[123,36455,32803],{"class":133},[123,36457,36458],{"class":125,"line":32999},[123,36459,36460],{"class":192},"            # 当前用于验证的样本数量\n",[123,36462,36463,36466,36468,36470,36472],{"class":125,"line":33005},[123,36464,36465],{"class":133},"            val_num",[123,36467,9487],{"class":129},[123,36469,32777],{"class":133},[123,36471,325],{"class":182},[123,36473,140],{"class":133},[123,36475,36476],{"class":125,"line":33019},[123,36477,33022],{"class":192},[123,36479,36480],{"class":125,"line":33025},[123,36481,33028],{"class":192},[123,36483,36484,36486,36488],{"class":125,"line":33031},[123,36485,33034],{"class":133},[123,36487,718],{"class":129},[123,36489,33039],{"class":133},[123,36491,36492],{"class":125,"line":33042},[123,36493,33045],{"class":192},[123,36495,36496],{"class":125,"line":33048},[123,36497,33051],{"class":192},[123,36499,36500,36502,36504],{"class":125,"line":33054},[123,36501,33057],{"class":133},[123,36503,718],{"class":129},[123,36505,33039],{"class":133},[123,36507,36508],{"class":125,"line":33064},[123,36509,33067],{"class":192},[123,36511,36512,36514,36516],{"class":125,"line":33070},[123,36513,33073],{"class":133},[123,36515,718],{"class":129},[123,36517,33078],{"class":133},[123,36519,36520],{"class":125,"line":33081},[123,36521,33084],{"class":192},[123,36523,36524,36526,36528],{"class":125,"line":33087},[123,36525,33090],{"class":133},[123,36527,718],{"class":129},[123,36529,33078],{"class":133},[123,36531,36532],{"class":125,"line":33097},[123,36533,2409],{"emptyLinePlaceholder":50},[123,36535,36536],{"class":125,"line":33102},[123,36537,33105],{"class":192},[123,36539,36540,36542,36544,36546,36548,36550,36552,36554,36556,36558,36560,36562,36564,36566,36568,36570,36572,36574,36576,36578],{"class":125,"line":33108},[123,36541,32462],{"class":182},[123,36543,134],{"class":133},[123,36545,3601],{"class":238},[123,36547,32470],{"class":182},[123,36549,33119],{"class":238},[123,36551,1030],{"class":182},[123,36553,33124],{"class":129},[123,36555,1080],{"class":182},[123,36557,33129],{"class":238},[123,36559,1030],{"class":182},[123,36561,33124],{"class":129},[123,36563,1080],{"class":182},[123,36565,3601],{"class":238},[123,36567,33140],{"class":133},[123,36569,666],{"class":129},[123,36571,351],{"class":182},[123,36573,33147],{"class":133},[123,36575,666],{"class":129},[123,36577,351],{"class":182},[123,36579,33154],{"class":133},[123,36581,36582,36584,36586,36588,36590,36592,36594,36596,36598,36600,36602,36604,36606,36608,36610,36612,36614,36616,36618,36620],{"class":125,"line":33157},[123,36583,32462],{"class":182},[123,36585,134],{"class":133},[123,36587,3601],{"class":238},[123,36589,32470],{"class":182},[123,36591,33168],{"class":238},[123,36593,1030],{"class":182},[123,36595,33124],{"class":129},[123,36597,1080],{"class":182},[123,36599,33177],{"class":238},[123,36601,1030],{"class":182},[123,36603,33124],{"class":129},[123,36605,1080],{"class":182},[123,36607,3601],{"class":238},[123,36609,33188],{"class":133},[123,36611,666],{"class":129},[123,36613,351],{"class":182},[123,36615,33195],{"class":133},[123,36617,666],{"class":129},[123,36619,351],{"class":182},[123,36621,33154],{"class":133},[123,36623,36624],{"class":125,"line":33204},[123,36625,2409],{"emptyLinePlaceholder":50},[123,36627,36628],{"class":125,"line":33209},[123,36629,33212],{"class":192},[123,36631,36632,36634,36636,36638,36640,36642,36644],{"class":125,"line":33215},[123,36633,2506],{"class":129},[123,36635,33220],{"class":133},[123,36637,666],{"class":129},[123,36639,351],{"class":182},[123,36641,1074],{"class":133},[123,36643,1094],{"class":129},[123,36645,33231],{"class":133},[123,36647,36648],{"class":125,"line":33234},[123,36649,33237],{"class":192},[123,36651,36652,36654,36656,36658,36660,36662,36664],{"class":125,"line":33240},[123,36653,33243],{"class":133},[123,36655,173],{"class":182},[123,36657,179],{"class":129},[123,36659,33250],{"class":133},[123,36661,666],{"class":129},[123,36663,351],{"class":182},[123,36665,33257],{"class":133},[123,36667,36668],{"class":125,"line":33260},[123,36669,33263],{"class":192},[123,36671,36672],{"class":125,"line":33266},[123,36673,33269],{"class":192},[123,36675,36676,36678,36680],{"class":125,"line":33272},[123,36677,33275],{"class":133},[123,36679,179],{"class":129},[123,36681,32325],{"class":133},[123,36683,36684],{"class":125,"line":33282},[123,36685,2409],{"emptyLinePlaceholder":50},[123,36687,36688],{"class":125,"line":33287},[123,36689,33290],{"class":192},[123,36691,36692,36694,36696,36698,36700],{"class":125,"line":33293},[123,36693,33296],{"class":133},[123,36695,179],{"class":129},[123,36697,33301],{"class":133},[123,36699,666],{"class":129},[123,36701,33306],{"class":133},[123,36703,36704,36706,36708,36710,36712,36714,36716,36718,36720,36722,36724,36726,36728,36730,36732,36734,36736,36738],{"class":125,"line":33309},[123,36705,32462],{"class":182},[123,36707,134],{"class":133},[123,36709,33316],{"class":238},[123,36711,1030],{"class":182},[123,36713,33321],{"class":129},[123,36715,1080],{"class":182},[123,36717,678],{"class":238},[123,36719,1030],{"class":182},[123,36721,33321],{"class":129},[123,36723,1080],{"class":182},[123,36725,33334],{"class":238},[123,36727,33337],{"class":133},[123,36729,33340],{"class":129},[123,36731,1041],{"class":182},[123,36733,33345],{"class":133},[123,36735,462],{"class":129},[123,36737,1041],{"class":182},[123,36739,30508],{"class":133},[123,36741,36742],{"class":125,"line":33354},[123,36743,36744],{"class":192},"    # 选择最优参数并保存\n",[123,36746,36747],{"class":125,"line":33360},[123,36748,36749],{"class":192},"    # 保存最佳模型权重字典\n",[123,36751,36752,36755,36757],{"class":125,"line":33366},[123,36753,36754],{"class":133},"    torch.save(best_model_wts,",[123,36756,33378],{"class":238},[123,36758,140],{"class":133},[123,36760,36761],{"class":125,"line":33372},[123,36762,33398],{"class":192},[123,36764,36765,36767,36769,36771,36773,36775],{"class":125,"line":33383},[123,36766,33404],{"class":133},[123,36768,179],{"class":129},[123,36770,33409],{"class":133},[123,36772,33412],{"class":5226},[123,36774,179],{"class":129},[123,36776,1555],{"class":133},[123,36778,36779,36781,36783,36785],{"class":125,"line":33389},[123,36780,33422],{"class":238},[123,36782,993],{"class":133},[123,36784,33427],{"class":182},[123,36786,33430],{"class":133},[123,36788,36789,36791],{"class":125,"line":33395},[123,36790,33436],{"class":238},[123,36792,33439],{"class":133},[123,36794,36795,36797],{"class":125,"line":33401},[123,36796,33445],{"class":238},[123,36798,33448],{"class":133},[123,36800,36801,36803],{"class":125,"line":33419},[123,36802,33454],{"class":238},[123,36804,33457],{"class":133},[123,36806,36807,36809],{"class":125,"line":33433},[123,36808,33463],{"class":238},[123,36810,33466],{"class":133},[123,36812,36813],{"class":125,"line":33442},[123,36814,33472],{"class":133},[123,36816,36817],{"class":125,"line":33451},[123,36818,33478],{"class":192},[123,36820,36821,36823],{"class":125,"line":33460},[123,36822,4099],{"class":129},[123,36824,33486],{"class":133},[123,36826,36827],{"class":125,"line":33469},[123,36828,2409],{"emptyLinePlaceholder":50},[123,36830,36831],{"class":125,"line":33475},[123,36832,33497],{"class":192},[123,36834,36835,36837,36839],{"class":125,"line":33481},[123,36836,31958],{"class":129},[123,36838,33505],{"class":1972},[123,36840,33508],{"class":133},[123,36842,36843],{"class":125,"line":33489},[123,36844,33514],{"class":192},[123,36846,36847,36849,36851,36853,36855,36857,36859,36861],{"class":125,"line":33494},[123,36848,33520],{"class":133},[123,36850,31704],{"class":5226},[123,36852,179],{"class":129},[123,36854,134],{"class":133},[123,36856,632],{"class":182},[123,36858,512],{"class":133},[123,36860,427],{"class":182},[123,36862,30508],{"class":133},[123,36864,36865],{"class":125,"line":33500},[123,36866,33540],{"class":192},[123,36868,36869],{"class":125,"line":33511},[123,36870,33546],{"class":192},[123,36872,36873],{"class":125,"line":33517},[123,36874,33552],{"class":192},[123,36876,36877,36879,36881,36883,36885,36887,36889],{"class":125,"line":33537},[123,36878,31738],{"class":133},[123,36880,351],{"class":182},[123,36882,512],{"class":133},[123,36884,211],{"class":182},[123,36886,512],{"class":133},[123,36888,351],{"class":182},[123,36890,140],{"class":133},[123,36892,36893],{"class":125,"line":33543},[123,36894,33575],{"class":192},[123,36896,36897],{"class":125,"line":33549},[123,36898,33581],{"class":192},[123,36900,36901],{"class":125,"line":33555},[123,36902,33587],{"class":192},[123,36904,36905],{"class":125,"line":33572},[123,36906,33593],{"class":192},[123,36908,36909],{"class":125,"line":33578},[123,36910,33599],{"class":192},[123,36912,36913,36915,36917,36919,36921,36923,36925,36927,36929],{"class":125,"line":33584},[123,36914,33605],{"class":133},[123,36916,33608],{"class":238},[123,36918,33611],{"class":133},[123,36920,33614],{"class":238},[123,36922,512],{"class":133},[123,36924,33619],{"class":5226},[123,36926,179],{"class":129},[123,36928,33624],{"class":238},[123,36930,140],{"class":133},[123,36932,36933,36935,36937,36939,36941,36943,36945,36947,36949],{"class":125,"line":33590},[123,36934,33605],{"class":133},[123,36936,33608],{"class":238},[123,36938,33636],{"class":133},[123,36940,33639],{"class":238},[123,36942,512],{"class":133},[123,36944,33619],{"class":5226},[123,36946,179],{"class":129},[123,36948,33648],{"class":238},[123,36950,140],{"class":133},[123,36952,36953],{"class":125,"line":33596},[123,36954,33656],{"class":192},[123,36956,36957],{"class":125,"line":33602},[123,36958,33662],{"class":133},[123,36960,36961],{"class":125,"line":33629},[123,36962,33668],{"class":192},[123,36964,36965,36967,36969],{"class":125,"line":33653},[123,36966,33674],{"class":133},[123,36968,33677],{"class":238},[123,36970,140],{"class":133},[123,36972,36973,36975,36977],{"class":125,"line":33659},[123,36974,33685],{"class":133},[123,36976,33688],{"class":238},[123,36978,140],{"class":133},[123,36980,36981],{"class":125,"line":33665},[123,36982,33696],{"class":192},[123,36984,36985,36987,36989,36991,36993,36995,36997],{"class":125,"line":33671},[123,36986,31738],{"class":133},[123,36988,351],{"class":182},[123,36990,512],{"class":133},[123,36992,211],{"class":182},[123,36994,512],{"class":133},[123,36996,211],{"class":182},[123,36998,140],{"class":133},[123,37000,37001,37003,37005,37007,37009,37011,37013,37015,37017],{"class":125,"line":33682},[123,37002,33605],{"class":133},[123,37004,33608],{"class":238},[123,37006,33723],{"class":133},[123,37008,33614],{"class":238},[123,37010,512],{"class":133},[123,37012,33619],{"class":5226},[123,37014,179],{"class":129},[123,37016,33734],{"class":238},[123,37018,140],{"class":133},[123,37020,37021,37023,37025,37027,37029,37031,37033,37035,37037],{"class":125,"line":33693},[123,37022,33605],{"class":133},[123,37024,33608],{"class":238},[123,37026,33746],{"class":133},[123,37028,33639],{"class":238},[123,37030,512],{"class":133},[123,37032,33619],{"class":5226},[123,37034,179],{"class":129},[123,37036,33757],{"class":238},[123,37038,140],{"class":133},[123,37040,37041],{"class":125,"line":33699},[123,37042,33765],{"class":192},[123,37044,37045],{"class":125,"line":33716},[123,37046,33662],{"class":133},[123,37048,37049,37051,37053],{"class":125,"line":33739},[123,37050,33674],{"class":133},[123,37052,33608],{"class":238},[123,37054,140],{"class":133},[123,37056,37057,37059,37061],{"class":125,"line":33762},[123,37058,33685],{"class":133},[123,37060,33787],{"class":238},[123,37062,140],{"class":133},[123,37064,37065],{"class":125,"line":33768},[123,37066,33795],{"class":133},[123,37068,37069],{"class":125,"line":33773},[123,37070,2409],{"emptyLinePlaceholder":50},[123,37072,37073],{"class":125,"line":33782},[123,37074,33806],{"class":192},[123,37076,37077,37079,37081,37083,37085],{"class":125,"line":33792},[123,37078,1540],{"class":129},[123,37080,31231],{"class":182},[123,37082,2958],{"class":129},[123,37084,31236],{"class":238},[123,37086,3748],{"class":133},[123,37088,37089],{"class":125,"line":33798},[123,37090,33825],{"class":192},[123,37092,37093,37096,37098],{"class":125,"line":33803},[123,37094,37095],{"class":133},"    AlexNet",[123,37097,179],{"class":129},[123,37099,37100],{"class":133},"AlexNet()\n",[123,37102,37103,37105,37107],{"class":125,"line":33809},[123,37104,33842],{"class":133},[123,37106,179],{"class":129},[123,37108,33847],{"class":133},[123,37110,37111,37113,37115,37118,37120,37122,37124],{"class":125,"line":33822},[123,37112,33404],{"class":133},[123,37114,179],{"class":129},[123,37116,37117],{"class":133},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[123,37119,33860],{"class":5226},[123,37121,179],{"class":129},[123,37123,834],{"class":182},[123,37125,140],{"class":133},[123,37127,37128],{"class":125,"line":33828},[123,37129,33872],{"class":133},[77,37131,37132],{"start":1189},[80,37133,33885],{},[114,37135,37137],{"className":30389,"code":37136,"language":30391,"meta":37,"style":37},"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",[120,37138,37139,37145,37155,37165,37175,37179,37189,37199,37210,37214,37218,37222,37230,37246,37256,37272,37282,37296,37300,37310,37320,37330,37336,37340,37344,37352,37356,37372,37380,37384,37388,37396,37404,37408,37412,37416,37420,37426,37430,37440,37448,37456,37460,37464,37468,37476,37480,37496,37500,37504,37508,37520,37524,37536,37540,37544,37556,37560,37570,37574,37578,37590,37594,37602,37606,37610,37618,37622,37630,37634,37638,37642,37646,37650,37666,37674,37678,37682,37730,37736,37740,37750,37758,37766,37770,37774,37778,37782,37790,37794,37810,37814,37822,37830],{"__ignoreMap":37},[123,37140,37141,37143],{"class":125,"line":126},[123,37142,30403],{"class":129},[123,37144,30406],{"class":133},[123,37146,37147,37149,37151,37153],{"class":125,"line":45},[123,37148,30403],{"class":129},[123,37150,31426],{"class":133},[123,37152,31394],{"class":129},[123,37154,31431],{"class":133},[123,37156,37157,37159,37161,37163],{"class":125,"line":1189},[123,37158,30748],{"class":129},[123,37160,33913],{"class":133},[123,37162,30403],{"class":129},[123,37164,33918],{"class":133},[123,37166,37167,37169,37171,37173],{"class":125,"line":1204},[123,37168,30748],{"class":129},[123,37170,31409],{"class":133},[123,37172,30403],{"class":129},[123,37174,31414],{"class":133},[123,37176,37177],{"class":125,"line":1210},[123,37178,33933],{"class":192},[123,37180,37181,37183,37185,37187],{"class":125,"line":1224},[123,37182,30748],{"class":129},[123,37184,31379],{"class":133},[123,37186,30403],{"class":129},[123,37188,31384],{"class":133},[123,37190,37191,37193,37195,37197],{"class":125,"line":1230},[123,37192,30748],{"class":129},[123,37194,31925],{"class":133},[123,37196,30403],{"class":129},[123,37198,35568],{"class":133},[123,37200,37201,37203,37206,37208],{"class":125,"line":1321},[123,37202,30748],{"class":129},[123,37204,37205],{"class":133}," 练习.AlexNet.model ",[123,37207,30403],{"class":129},[123,37209,35568],{"class":133},[123,37211,37212],{"class":125,"line":1327},[123,37213,2409],{"emptyLinePlaceholder":50},[123,37215,37216],{"class":125,"line":1339},[123,37217,2409],{"emptyLinePlaceholder":50},[123,37219,37220],{"class":125,"line":1621},[123,37221,33962],{"class":192},[123,37223,37224,37226,37228],{"class":125,"line":1626},[123,37225,31958],{"class":129},[123,37227,33969],{"class":1972},[123,37229,31964],{"class":133},[123,37231,37232,37234,37236,37238,37240,37242,37244],{"class":125,"line":1632},[123,37233,33976],{"class":133},[123,37235,179],{"class":129},[123,37237,31466],{"class":133},[123,37239,31469],{"class":5226},[123,37241,179],{"class":129},[123,37243,31474],{"class":238},[123,37245,31477],{"class":133},[123,37247,37248,37250,37252,37254],{"class":125,"line":1637},[123,37249,33993],{"class":5226},[123,37251,179],{"class":129},[123,37253,33998],{"class":182},[123,37255,31477],{"class":133},[123,37257,37258,37260,37262,37264,37266,37268,37270],{"class":125,"line":1651},[123,37259,34005],{"class":5226},[123,37261,179],{"class":129},[123,37263,31504],{"class":133},[123,37265,31507],{"class":5226},[123,37267,179],{"class":129},[123,37269,35460],{"class":182},[123,37271,31515],{"class":133},[123,37273,37274,37276,37278,37280],{"class":125,"line":1656},[123,37275,34022],{"class":5226},[123,37277,179],{"class":129},[123,37279,31487],{"class":182},[123,37281,140],{"class":133},[123,37283,37284,37286,37288,37290,37292,37294],{"class":125,"line":1662},[123,37285,34033],{"class":133},[123,37287,179],{"class":129},[123,37289,31545],{"class":133},[123,37291,31548],{"class":5226},[123,37293,179],{"class":129},[123,37295,34044],{"class":133},[123,37297,37298],{"class":125,"line":1683},[123,37299,34049],{"class":192},[123,37301,37302,37304,37306,37308],{"class":125,"line":1688},[123,37303,34054],{"class":5226},[123,37305,179],{"class":129},[123,37307,351],{"class":182},[123,37309,31477],{"class":133},[123,37311,37312,37314,37316,37318],{"class":125,"line":1702},[123,37313,34065],{"class":5226},[123,37315,179],{"class":129},[123,37317,31487],{"class":182},[123,37319,31477],{"class":133},[123,37321,37322,37324,37326,37328],{"class":125,"line":1707},[123,37323,34076],{"class":5226},[123,37325,179],{"class":129},[123,37327,325],{"class":182},[123,37329,140],{"class":133},[123,37331,37332,37334],{"class":125,"line":1736},[123,37333,4099],{"class":129},[123,37335,34089],{"class":133},[123,37337,37338],{"class":125,"line":1741},[123,37339,2409],{"emptyLinePlaceholder":50},[123,37341,37342],{"class":125,"line":1758},[123,37343,34098],{"class":192},[123,37345,37346,37348,37350],{"class":125,"line":1763},[123,37347,31958],{"class":129},[123,37349,34105],{"class":1972},[123,37351,34108],{"class":133},[123,37353,37354],{"class":125,"line":1768},[123,37355,34113],{"class":192},[123,37357,37358,37360,37362,37364,37366,37368,37370],{"class":125,"line":1773},[123,37359,31248],{"class":133},[123,37361,179],{"class":129},[123,37363,31255],{"class":238},[123,37365,1713],{"class":129},[123,37367,31260],{"class":133},[123,37369,1710],{"class":129},[123,37371,34130],{"class":238},[123,37373,37374,37376,37378],{"class":125,"line":1787},[123,37375,31300],{"class":133},[123,37377,179],{"class":129},[123,37379,32300],{"class":133},[123,37381,37382],{"class":125,"line":1792},[123,37383,2409],{"emptyLinePlaceholder":50},[123,37385,37386],{"class":125,"line":2586},[123,37387,34147],{"class":192},[123,37389,37390,37392,37394],{"class":125,"line":2600},[123,37391,34152],{"class":133},[123,37393,179],{"class":129},[123,37395,32353],{"class":182},[123,37397,37398,37400,37402],{"class":125,"line":2608},[123,37399,34161],{"class":133},[123,37401,179],{"class":129},[123,37403,3094],{"class":182},[123,37405,37406],{"class":125,"line":2613},[123,37407,2409],{"emptyLinePlaceholder":50},[123,37409,37410],{"class":125,"line":2619},[123,37411,34174],{"class":192},[123,37413,37414],{"class":125,"line":2625},[123,37415,34179],{"class":192},[123,37417,37418],{"class":125,"line":2630},[123,37419,34184],{"class":192},[123,37421,37422,37424],{"class":125,"line":7958},[123,37423,34189],{"class":129},[123,37425,32895],{"class":133},[123,37427,37428],{"class":125,"line":7982},[123,37429,34196],{"class":192},[123,37431,37432,37434,37436,37438],{"class":125,"line":7987},[123,37433,3412],{"class":129},[123,37435,34203],{"class":133},[123,37437,26054],{"class":129},[123,37439,34208],{"class":133},[123,37441,37442,37444,37446],{"class":125,"line":7993},[123,37443,34213],{"class":133},[123,37445,179],{"class":129},[123,37447,34218],{"class":133},[123,37449,37450,37452,37454],{"class":125,"line":8020},[123,37451,34223],{"class":133},[123,37453,179],{"class":129},[123,37455,34228],{"class":133},[123,37457,37458],{"class":125,"line":8025},[123,37459,34233],{"class":192},[123,37461,37462],{"class":125,"line":8031},[123,37463,32886],{"class":133},[123,37465,37466],{"class":125,"line":8043},[123,37467,34242],{"class":192},[123,37469,37470,37472,37474],{"class":125,"line":8055},[123,37471,32671],{"class":133},[123,37473,179],{"class":129},[123,37475,34251],{"class":133},[123,37477,37478],{"class":125,"line":8067},[123,37479,34256],{"class":192},[123,37481,37482,37484,37486,37488,37490,37492,37494],{"class":125,"line":9726},[123,37483,32688],{"class":133},[123,37485,179],{"class":129},[123,37487,32693],{"class":133},[123,37489,32696],{"class":5226},[123,37491,179],{"class":129},[123,37493,351],{"class":182},[123,37495,140],{"class":133},[123,37497,37498],{"class":125,"line":9751},[123,37499,34277],{"class":192},[123,37501,37502],{"class":125,"line":9774},[123,37503,34282],{"class":192},[123,37505,37506],{"class":125,"line":9798},[123,37507,34287],{"class":192},[123,37509,37510,37512,37514,37516,37518],{"class":125,"line":9803},[123,37511,34292],{"class":133},[123,37513,9487],{"class":129},[123,37515,32798],{"class":133},[123,37517,2958],{"class":129},[123,37519,34301],{"class":133},[123,37521,37522],{"class":125,"line":9808},[123,37523,34306],{"class":192},[123,37525,37526,37528,37530,37532,37534],{"class":125,"line":9813},[123,37527,34311],{"class":133},[123,37529,9487],{"class":129},[123,37531,34316],{"class":133},[123,37533,325],{"class":182},[123,37535,140],{"class":133},[123,37537,37538],{"class":125,"line":9822},[123,37539,2409],{"emptyLinePlaceholder":50},[123,37541,37542],{"class":125,"line":9827},[123,37543,34329],{"class":192},[123,37545,37546,37548,37550,37552,37554],{"class":125,"line":9833},[123,37547,34334],{"class":133},[123,37549,179],{"class":129},[123,37551,34339],{"class":133},[123,37553,718],{"class":129},[123,37555,34344],{"class":133},[123,37557,37558],{"class":125,"line":9854},[123,37559,34349],{"class":192},[123,37561,37562,37564,37566,37568],{"class":125,"line":9860},[123,37563,32462],{"class":182},[123,37565,134],{"class":133},[123,37567,34358],{"class":238},[123,37569,34361],{"class":133},[123,37571,37572],{"class":125,"line":9874},[123,37573,2409],{"emptyLinePlaceholder":50},[123,37575,37576],{"class":125,"line":9880},[123,37577,34370],{"class":192},[123,37579,37580,37582,37584,37586,37588],{"class":125,"line":9907},[123,37581,1540],{"class":129},[123,37583,31231],{"class":182},[123,37585,2958],{"class":129},[123,37587,31236],{"class":238},[123,37589,3748],{"class":133},[123,37591,37592],{"class":125,"line":9916},[123,37593,34387],{"class":192},[123,37595,37596,37598,37600],{"class":125,"line":9922},[123,37597,31300],{"class":133},[123,37599,179],{"class":129},[123,37601,37100],{"class":133},[123,37603,37604],{"class":125,"line":9930},[123,37605,34400],{"class":192},[123,37607,37608],{"class":125,"line":9935},[123,37609,34405],{"class":192},[123,37611,37612,37614,37616],{"class":125,"line":16614},[123,37613,34410],{"class":133},[123,37615,34413],{"class":238},[123,37617,30508],{"class":133},[123,37619,37620],{"class":125,"line":16620},[123,37621,34420],{"class":192},[123,37623,37624,37626,37628],{"class":125,"line":16643},[123,37625,34033],{"class":133},[123,37627,179],{"class":129},[123,37629,34429],{"class":133},[123,37631,37632],{"class":125,"line":16649},[123,37633,34434],{"class":192},[123,37635,37636],{"class":125,"line":16672},[123,37637,34439],{"class":133},[123,37639,37640],{"class":125,"line":16686},[123,37641,2409],{"emptyLinePlaceholder":50},[123,37643,37644],{"class":125,"line":16706},[123,37645,34448],{"class":192},[123,37647,37648],{"class":125,"line":16712},[123,37649,34453],{"class":192},[123,37651,37652,37654,37656,37658,37660,37662,37664],{"class":125,"line":16723},[123,37653,31248],{"class":133},[123,37655,179],{"class":129},[123,37657,31255],{"class":238},[123,37659,1713],{"class":129},[123,37661,31260],{"class":133},[123,37663,1710],{"class":129},[123,37665,34130],{"class":238},[123,37667,37668,37670,37672],{"class":125,"line":16746},[123,37669,31300],{"class":133},[123,37671,179],{"class":129},[123,37673,32300],{"class":133},[123,37675,37676],{"class":125,"line":16768},[123,37677,34482],{"class":192},[123,37679,37680],{"class":125,"line":16773},[123,37681,34487],{"class":192},[123,37683,37684,37686,37688,37690,37692,37694,37696,37698,37700,37702,37704,37706,37708,37710,37712,37714,37716,37718,37720,37722,37724,37726,37728],{"class":125,"line":16779},[123,37685,34492],{"class":133},[123,37687,179],{"class":129},[123,37689,1024],{"class":133},[123,37691,34499],{"class":238},[123,37693,512],{"class":133},[123,37695,34504],{"class":238},[123,37697,512],{"class":133},[123,37699,34509],{"class":238},[123,37701,512],{"class":133},[123,37703,34514],{"class":238},[123,37705,512],{"class":133},[123,37707,34519],{"class":238},[123,37709,512],{"class":133},[123,37711,34524],{"class":238},[123,37713,512],{"class":133},[123,37715,34529],{"class":238},[123,37717,512],{"class":133},[123,37719,34534],{"class":238},[123,37721,512],{"class":133},[123,37723,34539],{"class":238},[123,37725,512],{"class":133},[123,37727,34544],{"class":238},[123,37729,33257],{"class":133},[123,37731,37732,37734],{"class":125,"line":16793},[123,37733,34189],{"class":129},[123,37735,32895],{"class":133},[123,37737,37738],{"class":125,"line":16806},[123,37739,34557],{"class":192},[123,37741,37742,37744,37746,37748],{"class":125,"line":16811},[123,37743,3412],{"class":129},[123,37745,34564],{"class":133},[123,37747,26054],{"class":129},[123,37749,34208],{"class":133},[123,37751,37752,37754,37756],{"class":125,"line":16825},[123,37753,32621],{"class":133},[123,37755,179],{"class":129},[123,37757,32626],{"class":133},[123,37759,37760,37762,37764],{"class":125,"line":16830},[123,37761,32636],{"class":133},[123,37763,179],{"class":129},[123,37765,32641],{"class":133},[123,37767,37768],{"class":125,"line":16836},[123,37769,2409],{"emptyLinePlaceholder":50},[123,37771,37772],{"class":125,"line":16841},[123,37773,34593],{"class":192},[123,37775,37776],{"class":125,"line":16855},[123,37777,32886],{"class":133},[123,37779,37780],{"class":125,"line":16860},[123,37781,34602],{"class":192},[123,37783,37784,37786,37788],{"class":125,"line":16865},[123,37785,32671],{"class":133},[123,37787,179],{"class":129},[123,37789,32676],{"class":133},[123,37791,37792],{"class":125,"line":16879},[123,37793,34615],{"class":192},[123,37795,37796,37798,37800,37802,37804,37806,37808],{"class":125,"line":16891},[123,37797,32688],{"class":133},[123,37799,179],{"class":129},[123,37801,32693],{"class":133},[123,37803,32696],{"class":5226},[123,37805,179],{"class":129},[123,37807,351],{"class":182},[123,37809,140],{"class":133},[123,37811,37812],{"class":125,"line":16896},[123,37813,34636],{"class":192},[123,37815,37816,37818,37820],{"class":125,"line":16909},[123,37817,34641],{"class":133},[123,37819,179],{"class":129},[123,37821,34646],{"class":133},[123,37823,37824,37826,37828],{"class":125,"line":16914},[123,37825,34651],{"class":133},[123,37827,179],{"class":129},[123,37829,34656],{"class":133},[123,37831,37832,37834,37836,37838,37840,37842,37844,37846],{"class":125,"line":16919},[123,37833,34661],{"class":182},[123,37835,134],{"class":133},[123,37837,34666],{"class":238},[123,37839,34669],{"class":133},[123,37841,34672],{"class":238},[123,37843,512],{"class":133},[123,37845,34677],{"class":238},[123,37847,34680],{"class":133},[94,37849,37851],{"id":37850},"_22vgg","2.2.VGG",[22008,37853,37855],{"id":37854},"_221原理","2.2.1.原理",[14,37857,37858],{},[35,37859],{"alt":37,"src":37860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-015.png",[14,37862,37863],{},[35,37864],{"alt":37,"src":37865},"\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,37867,37868],{},[35,37869],{"alt":37,"src":37870},"\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,37872,37873],{},"参数详细描述：",[14,37875,37876],{},[35,37877],{"alt":37,"src":37878},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-018.png",[14,37880,37881],{},[35,37882],{"alt":37,"src":37883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-019.png",[14,37885,37886],{},[35,37887],{"alt":37,"src":37888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-020.png",[14,37890,37891],{},[35,37892],{"alt":37,"src":37893},"\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,37895,37896],{},[35,37897],{"alt":37,"src":37898},"\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",[22008,37900,37902],{"id":37901},"_222代码实现","2.2.2.代码实现",[77,37904,37905],{},[80,37906,37907],{},"网络搭建",[114,37909,37911],{"className":30389,"code":37910,"language":30391,"meta":37,"style":37},"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",[120,37912,37913,37919,37931,37941,37951,37955,37972,37980,37999,38004,38009,38021,38059,38064,38100,38104,38133,38138,38143,38154,38190,38194,38230,38234,38262,38266,38271,38282,38318,38322,38358,38362,38398,38402,38430,38434,38439,38450,38487,38491,38527,38531,38567,38571,38599,38603,38608,38619,38655,38659,38695,38699,38735,38739,38767,38771,38776,38787,38792,38797,38802,38823,38827,38839,38843,38855,38859,38863,38868,38873,38888,38893,38903,38908,38923,38928,38947,38952,38961,38966,38976,38981,38986,39000,39005,39019,39027,39031,39035,39043,39054,39065,39076,39087,39098,39109,39115,39119,39124,39137,39157,39163,39172],{"__ignoreMap":37},[123,37914,37915,37917],{"class":125,"line":126},[123,37916,30403],{"class":129},[123,37918,30406],{"class":133},[123,37920,37921,37923,37926,37928],{"class":125,"line":45},[123,37922,30748],{"class":129},[123,37924,37925],{"class":133}," sympy.core.sympify ",[123,37927,30403],{"class":129},[123,37929,37930],{"class":133}," kernS\n",[123,37932,37933,37935,37937,37939],{"class":125,"line":1189},[123,37934,30748],{"class":129},[123,37936,30751],{"class":133},[123,37938,30403],{"class":129},[123,37940,30756],{"class":133},[123,37942,37943,37945,37947,37949],{"class":125,"line":1204},[123,37944,30748],{"class":129},[123,37946,30768],{"class":133},[123,37948,30403],{"class":129},[123,37950,30773],{"class":133},[123,37952,37953],{"class":125,"line":1210},[123,37954,2409],{"emptyLinePlaceholder":50},[123,37956,37957,37959,37962,37964,37966,37968,37970],{"class":125,"line":1224},[123,37958,14704],{"class":129},[123,37960,37961],{"class":1972}," VGG16",[123,37963,134],{"class":133},[123,37965,30789],{"class":1972},[123,37967,692],{"class":133},[123,37969,30794],{"class":1972},[123,37971,30797],{"class":133},[123,37973,37974,37976,37978],{"class":125,"line":1230},[123,37975,30812],{"class":129},[123,37977,30815],{"class":182},[123,37979,30818],{"class":133},[123,37981,37982,37984,37986,37989,37991,37993,37995,37997],{"class":125,"line":1321},[123,37983,30828],{"class":182},[123,37985,134],{"class":133},[123,37987,37988],{"class":182},"VGG16",[123,37990,12445],{"class":133},[123,37992,30834],{"class":182},[123,37994,30837],{"class":133},[123,37996,30840],{"class":182},[123,37998,1985],{"class":133},[123,38000,38001],{"class":125,"line":1327},[123,38002,38003],{"class":192},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[123,38005,38006],{"class":125,"line":1339},[123,38007,38008],{"class":192},"        # 这里用的是灰度图\n",[123,38010,38011,38013,38016,38018],{"class":125,"line":1621},[123,38012,30856],{"class":182},[123,38014,38015],{"class":133},".block1",[123,38017,179],{"class":129},[123,38019,38020],{"class":133},"nn.Sequential(\n",[123,38022,38023,38026,38028,38030,38032,38034,38036,38038,38040,38042,38044,38046,38048,38050,38052,38054,38056],{"class":125,"line":1626},[123,38024,38025],{"class":133},"            nn.Conv2d(",[123,38027,30867],{"class":5226},[123,38029,179],{"class":129},[123,38031,351],{"class":182},[123,38033,512],{"class":133},[123,38035,30876],{"class":5226},[123,38037,179],{"class":129},[123,38039,337],{"class":182},[123,38041,512],{"class":133},[123,38043,30885],{"class":5226},[123,38045,179],{"class":129},[123,38047,205],{"class":182},[123,38049,512],{"class":133},[123,38051,30894],{"class":5226},[123,38053,179],{"class":129},[123,38055,351],{"class":182},[123,38057,38058],{"class":133},"),\n",[123,38060,38061],{"class":125,"line":1632},[123,38062,38063],{"class":133},"            nn.ReLU(),\n",[123,38065,38066,38068,38070,38072,38074,38076,38078,38080,38082,38084,38086,38088,38090,38092,38094,38096,38098],{"class":125,"line":1637},[123,38067,38025],{"class":133},[123,38069,30867],{"class":5226},[123,38071,179],{"class":129},[123,38073,337],{"class":182},[123,38075,512],{"class":133},[123,38077,30876],{"class":5226},[123,38079,179],{"class":129},[123,38081,337],{"class":182},[123,38083,512],{"class":133},[123,38085,30885],{"class":5226},[123,38087,179],{"class":129},[123,38089,205],{"class":182},[123,38091,512],{"class":133},[123,38093,30894],{"class":5226},[123,38095,179],{"class":129},[123,38097,351],{"class":182},[123,38099,38058],{"class":133},[123,38101,38102],{"class":125,"line":1651},[123,38103,38063],{"class":133},[123,38105,38106,38109,38111,38113,38115,38117,38119,38121,38123,38125,38127,38129,38131],{"class":125,"line":1656},[123,38107,38108],{"class":133},"            nn.MaxPool2d(",[123,38110,30885],{"class":5226},[123,38112,179],{"class":129},[123,38114,211],{"class":182},[123,38116,512],{"class":133},[123,38118,30940],{"class":5226},[123,38120,179],{"class":129},[123,38122,211],{"class":182},[123,38124,512],{"class":133},[123,38126,30894],{"class":5226},[123,38128,179],{"class":129},[123,38130,325],{"class":182},[123,38132,140],{"class":133},[123,38134,38135],{"class":125,"line":1662},[123,38136,38137],{"class":133},"        )\n",[123,38139,38140],{"class":125,"line":1683},[123,38141,38142],{"class":192},"        # 第二层\n",[123,38144,38145,38147,38150,38152],{"class":125,"line":1688},[123,38146,30856],{"class":182},[123,38148,38149],{"class":133},".block2",[123,38151,179],{"class":129},[123,38153,38020],{"class":133},[123,38155,38156,38158,38160,38162,38164,38166,38168,38170,38172,38174,38176,38178,38180,38182,38184,38186,38188],{"class":125,"line":1702},[123,38157,38025],{"class":133},[123,38159,30867],{"class":5226},[123,38161,179],{"class":129},[123,38163,337],{"class":182},[123,38165,512],{"class":133},[123,38167,30876],{"class":5226},[123,38169,179],{"class":129},[123,38171,32081],{"class":182},[123,38173,512],{"class":133},[123,38175,30885],{"class":5226},[123,38177,179],{"class":129},[123,38179,205],{"class":182},[123,38181,512],{"class":133},[123,38183,30894],{"class":5226},[123,38185,179],{"class":129},[123,38187,351],{"class":182},[123,38189,38058],{"class":133},[123,38191,38192],{"class":125,"line":1707},[123,38193,38063],{"class":133},[123,38195,38196,38198,38200,38202,38204,38206,38208,38210,38212,38214,38216,38218,38220,38222,38224,38226,38228],{"class":125,"line":1736},[123,38197,38025],{"class":133},[123,38199,30867],{"class":5226},[123,38201,179],{"class":129},[123,38203,32081],{"class":182},[123,38205,512],{"class":133},[123,38207,30876],{"class":5226},[123,38209,179],{"class":129},[123,38211,32081],{"class":182},[123,38213,512],{"class":133},[123,38215,30885],{"class":5226},[123,38217,179],{"class":129},[123,38219,205],{"class":182},[123,38221,512],{"class":133},[123,38223,30894],{"class":5226},[123,38225,179],{"class":129},[123,38227,351],{"class":182},[123,38229,38058],{"class":133},[123,38231,38232],{"class":125,"line":1741},[123,38233,38063],{"class":133},[123,38235,38236,38238,38240,38242,38244,38246,38248,38250,38252,38254,38256,38258,38260],{"class":125,"line":1758},[123,38237,38108],{"class":133},[123,38239,30885],{"class":5226},[123,38241,179],{"class":129},[123,38243,211],{"class":182},[123,38245,512],{"class":133},[123,38247,30940],{"class":5226},[123,38249,179],{"class":129},[123,38251,211],{"class":182},[123,38253,512],{"class":133},[123,38255,30894],{"class":5226},[123,38257,179],{"class":129},[123,38259,325],{"class":182},[123,38261,140],{"class":133},[123,38263,38264],{"class":125,"line":1763},[123,38265,38137],{"class":133},[123,38267,38268],{"class":125,"line":1768},[123,38269,38270],{"class":192},"        # 第三层\n",[123,38272,38273,38275,38278,38280],{"class":125,"line":1773},[123,38274,30856],{"class":182},[123,38276,38277],{"class":133},".block3",[123,38279,179],{"class":129},[123,38281,38020],{"class":133},[123,38283,38284,38286,38288,38290,38292,38294,38296,38298,38300,38302,38304,38306,38308,38310,38312,38314,38316],{"class":125,"line":1787},[123,38285,38025],{"class":133},[123,38287,30867],{"class":5226},[123,38289,179],{"class":129},[123,38291,32081],{"class":182},[123,38293,512],{"class":133},[123,38295,30876],{"class":5226},[123,38297,179],{"class":129},[123,38299,34881],{"class":182},[123,38301,512],{"class":133},[123,38303,30885],{"class":5226},[123,38305,179],{"class":129},[123,38307,205],{"class":182},[123,38309,512],{"class":133},[123,38311,30894],{"class":5226},[123,38313,179],{"class":129},[123,38315,351],{"class":182},[123,38317,38058],{"class":133},[123,38319,38320],{"class":125,"line":1792},[123,38321,38063],{"class":133},[123,38323,38324,38326,38328,38330,38332,38334,38336,38338,38340,38342,38344,38346,38348,38350,38352,38354,38356],{"class":125,"line":2586},[123,38325,38025],{"class":133},[123,38327,30867],{"class":5226},[123,38329,179],{"class":129},[123,38331,34881],{"class":182},[123,38333,512],{"class":133},[123,38335,30876],{"class":5226},[123,38337,179],{"class":129},[123,38339,34881],{"class":182},[123,38341,512],{"class":133},[123,38343,30885],{"class":5226},[123,38345,179],{"class":129},[123,38347,205],{"class":182},[123,38349,512],{"class":133},[123,38351,30894],{"class":5226},[123,38353,179],{"class":129},[123,38355,351],{"class":182},[123,38357,38058],{"class":133},[123,38359,38360],{"class":125,"line":2600},[123,38361,38063],{"class":133},[123,38363,38364,38366,38368,38370,38372,38374,38376,38378,38380,38382,38384,38386,38388,38390,38392,38394,38396],{"class":125,"line":2608},[123,38365,38025],{"class":133},[123,38367,30867],{"class":5226},[123,38369,179],{"class":129},[123,38371,34881],{"class":182},[123,38373,512],{"class":133},[123,38375,30876],{"class":5226},[123,38377,179],{"class":129},[123,38379,34881],{"class":182},[123,38381,512],{"class":133},[123,38383,30885],{"class":5226},[123,38385,179],{"class":129},[123,38387,205],{"class":182},[123,38389,512],{"class":133},[123,38391,30894],{"class":5226},[123,38393,179],{"class":129},[123,38395,351],{"class":182},[123,38397,38058],{"class":133},[123,38399,38400],{"class":125,"line":2613},[123,38401,38063],{"class":133},[123,38403,38404,38406,38408,38410,38412,38414,38416,38418,38420,38422,38424,38426,38428],{"class":125,"line":2619},[123,38405,38108],{"class":133},[123,38407,30885],{"class":5226},[123,38409,179],{"class":129},[123,38411,211],{"class":182},[123,38413,512],{"class":133},[123,38415,30940],{"class":5226},[123,38417,179],{"class":129},[123,38419,211],{"class":182},[123,38421,512],{"class":133},[123,38423,30894],{"class":5226},[123,38425,179],{"class":129},[123,38427,325],{"class":182},[123,38429,140],{"class":133},[123,38431,38432],{"class":125,"line":2625},[123,38433,38137],{"class":133},[123,38435,38436],{"class":125,"line":2630},[123,38437,38438],{"class":192},"        # 第四层\n",[123,38440,38441,38443,38446,38448],{"class":125,"line":7958},[123,38442,30856],{"class":182},[123,38444,38445],{"class":133},".block4",[123,38447,179],{"class":129},[123,38449,38020],{"class":133},[123,38451,38452,38454,38456,38458,38460,38462,38464,38466,38469,38471,38473,38475,38477,38479,38481,38483,38485],{"class":125,"line":7982},[123,38453,38025],{"class":133},[123,38455,30867],{"class":5226},[123,38457,179],{"class":129},[123,38459,34881],{"class":182},[123,38461,512],{"class":133},[123,38463,30876],{"class":5226},[123,38465,179],{"class":129},[123,38467,38468],{"class":182},"512",[123,38470,512],{"class":133},[123,38472,30885],{"class":5226},[123,38474,179],{"class":129},[123,38476,205],{"class":182},[123,38478,512],{"class":133},[123,38480,30894],{"class":5226},[123,38482,179],{"class":129},[123,38484,351],{"class":182},[123,38486,38058],{"class":133},[123,38488,38489],{"class":125,"line":7987},[123,38490,38063],{"class":133},[123,38492,38493,38495,38497,38499,38501,38503,38505,38507,38509,38511,38513,38515,38517,38519,38521,38523,38525],{"class":125,"line":7993},[123,38494,38025],{"class":133},[123,38496,30867],{"class":5226},[123,38498,179],{"class":129},[123,38500,38468],{"class":182},[123,38502,512],{"class":133},[123,38504,30876],{"class":5226},[123,38506,179],{"class":129},[123,38508,38468],{"class":182},[123,38510,512],{"class":133},[123,38512,30885],{"class":5226},[123,38514,179],{"class":129},[123,38516,205],{"class":182},[123,38518,512],{"class":133},[123,38520,30894],{"class":5226},[123,38522,179],{"class":129},[123,38524,351],{"class":182},[123,38526,38058],{"class":133},[123,38528,38529],{"class":125,"line":8020},[123,38530,38063],{"class":133},[123,38532,38533,38535,38537,38539,38541,38543,38545,38547,38549,38551,38553,38555,38557,38559,38561,38563,38565],{"class":125,"line":8025},[123,38534,38025],{"class":133},[123,38536,30867],{"class":5226},[123,38538,179],{"class":129},[123,38540,38468],{"class":182},[123,38542,512],{"class":133},[123,38544,30876],{"class":5226},[123,38546,179],{"class":129},[123,38548,38468],{"class":182},[123,38550,512],{"class":133},[123,38552,30885],{"class":5226},[123,38554,179],{"class":129},[123,38556,205],{"class":182},[123,38558,512],{"class":133},[123,38560,30894],{"class":5226},[123,38562,179],{"class":129},[123,38564,351],{"class":182},[123,38566,38058],{"class":133},[123,38568,38569],{"class":125,"line":8031},[123,38570,38063],{"class":133},[123,38572,38573,38575,38577,38579,38581,38583,38585,38587,38589,38591,38593,38595,38597],{"class":125,"line":8043},[123,38574,38108],{"class":133},[123,38576,30885],{"class":5226},[123,38578,179],{"class":129},[123,38580,211],{"class":182},[123,38582,512],{"class":133},[123,38584,30940],{"class":5226},[123,38586,179],{"class":129},[123,38588,211],{"class":182},[123,38590,512],{"class":133},[123,38592,30894],{"class":5226},[123,38594,179],{"class":129},[123,38596,325],{"class":182},[123,38598,140],{"class":133},[123,38600,38601],{"class":125,"line":8055},[123,38602,38137],{"class":133},[123,38604,38605],{"class":125,"line":8067},[123,38606,38607],{"class":192},"        # 第五层\n",[123,38609,38610,38612,38615,38617],{"class":125,"line":9726},[123,38611,30856],{"class":182},[123,38613,38614],{"class":133},".block5",[123,38616,179],{"class":129},[123,38618,38020],{"class":133},[123,38620,38621,38623,38625,38627,38629,38631,38633,38635,38637,38639,38641,38643,38645,38647,38649,38651,38653],{"class":125,"line":9751},[123,38622,38025],{"class":133},[123,38624,30867],{"class":5226},[123,38626,179],{"class":129},[123,38628,38468],{"class":182},[123,38630,512],{"class":133},[123,38632,30876],{"class":5226},[123,38634,179],{"class":129},[123,38636,38468],{"class":182},[123,38638,512],{"class":133},[123,38640,30885],{"class":5226},[123,38642,179],{"class":129},[123,38644,205],{"class":182},[123,38646,512],{"class":133},[123,38648,30894],{"class":5226},[123,38650,179],{"class":129},[123,38652,351],{"class":182},[123,38654,38058],{"class":133},[123,38656,38657],{"class":125,"line":9774},[123,38658,38063],{"class":133},[123,38660,38661,38663,38665,38667,38669,38671,38673,38675,38677,38679,38681,38683,38685,38687,38689,38691,38693],{"class":125,"line":9798},[123,38662,38025],{"class":133},[123,38664,30867],{"class":5226},[123,38666,179],{"class":129},[123,38668,38468],{"class":182},[123,38670,512],{"class":133},[123,38672,30876],{"class":5226},[123,38674,179],{"class":129},[123,38676,38468],{"class":182},[123,38678,512],{"class":133},[123,38680,30885],{"class":5226},[123,38682,179],{"class":129},[123,38684,205],{"class":182},[123,38686,512],{"class":133},[123,38688,30894],{"class":5226},[123,38690,179],{"class":129},[123,38692,351],{"class":182},[123,38694,38058],{"class":133},[123,38696,38697],{"class":125,"line":9803},[123,38698,38063],{"class":133},[123,38700,38701,38703,38705,38707,38709,38711,38713,38715,38717,38719,38721,38723,38725,38727,38729,38731,38733],{"class":125,"line":9808},[123,38702,38025],{"class":133},[123,38704,30867],{"class":5226},[123,38706,179],{"class":129},[123,38708,38468],{"class":182},[123,38710,512],{"class":133},[123,38712,30876],{"class":5226},[123,38714,179],{"class":129},[123,38716,38468],{"class":182},[123,38718,512],{"class":133},[123,38720,30885],{"class":5226},[123,38722,179],{"class":129},[123,38724,205],{"class":182},[123,38726,512],{"class":133},[123,38728,30894],{"class":5226},[123,38730,179],{"class":129},[123,38732,351],{"class":182},[123,38734,38058],{"class":133},[123,38736,38737],{"class":125,"line":9813},[123,38738,38063],{"class":133},[123,38740,38741,38743,38745,38747,38749,38751,38753,38755,38757,38759,38761,38763,38765],{"class":125,"line":9822},[123,38742,38108],{"class":133},[123,38744,30885],{"class":5226},[123,38746,179],{"class":129},[123,38748,211],{"class":182},[123,38750,512],{"class":133},[123,38752,30940],{"class":5226},[123,38754,179],{"class":129},[123,38756,211],{"class":182},[123,38758,512],{"class":133},[123,38760,30894],{"class":5226},[123,38762,179],{"class":129},[123,38764,325],{"class":182},[123,38766,140],{"class":133},[123,38768,38769],{"class":125,"line":9827},[123,38770,38137],{"class":133},[123,38772,38773],{"class":125,"line":9833},[123,38774,38775],{"class":192},"        # 全连接层\n",[123,38777,38778,38780,38783,38785],{"class":125,"line":9854},[123,38779,30856],{"class":182},[123,38781,38782],{"class":133},".block6",[123,38784,179],{"class":129},[123,38786,38020],{"class":133},[123,38788,38789],{"class":125,"line":9860},[123,38790,38791],{"class":192},"            # 平展操作\n",[123,38793,38794],{"class":125,"line":9874},[123,38795,38796],{"class":192},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[123,38798,38799],{"class":125,"line":9880},[123,38800,38801],{"class":133},"            nn.Flatten(),\n",[123,38803,38804,38807,38809,38811,38813,38815,38817,38819,38821],{"class":125,"line":9907},[123,38805,38806],{"class":133},"            nn.Linear(",[123,38808,503],{"class":182},[123,38810,589],{"class":129},[123,38812,503],{"class":182},[123,38814,589],{"class":129},[123,38816,38468],{"class":182},[123,38818,512],{"class":133},[123,38820,34881],{"class":182},[123,38822,38058],{"class":133},[123,38824,38825],{"class":125,"line":9916},[123,38826,38063],{"class":133},[123,38828,38829,38831,38833,38835,38837],{"class":125,"line":9922},[123,38830,38806],{"class":133},[123,38832,34881],{"class":182},[123,38834,512],{"class":133},[123,38836,32081],{"class":182},[123,38838,38058],{"class":133},[123,38840,38841],{"class":125,"line":9930},[123,38842,38063],{"class":133},[123,38844,38845,38847,38849,38851,38853],{"class":125,"line":9935},[123,38846,38806],{"class":133},[123,38848,32081],{"class":182},[123,38850,512],{"class":133},[123,38852,580],{"class":182},[123,38854,140],{"class":133},[123,38856,38857],{"class":125,"line":16614},[123,38858,38137],{"class":133},[123,38860,38861],{"class":125,"line":16620},[123,38862,2409],{"emptyLinePlaceholder":50},[123,38864,38865],{"class":125,"line":16643},[123,38866,38867],{"class":192},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[123,38869,38870],{"class":125,"line":16649},[123,38871,38872],{"class":192},"        # 循环遍历模型\n",[123,38874,38875,38877,38880,38882,38885],{"class":125,"line":16672},[123,38876,3412],{"class":129},[123,38878,38879],{"class":133}," m ",[123,38881,26054],{"class":129},[123,38883,38884],{"class":182}," self",[123,38886,38887],{"class":133},".modules():\n",[123,38889,38890],{"class":125,"line":16686},[123,38891,38892],{"class":192},"            # print(m)\n",[123,38894,38895,38897,38900],{"class":125,"line":16706},[123,38896,4651],{"class":129},[123,38898,38899],{"class":182}," isinstance",[123,38901,38902],{"class":133},"(m,nn.Conv2d):\n",[123,38904,38905],{"class":125,"line":16712},[123,38906,38907],{"class":192},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[123,38909,38910,38913,38916,38918,38921],{"class":125,"line":16723},[123,38911,38912],{"class":133},"                nn.init.kaiming_normal_(m.weight,",[123,38914,38915],{"class":5226},"nonlinearity",[123,38917,179],{"class":129},[123,38919,38920],{"class":238},"'relu'",[123,38922,140],{"class":133},[123,38924,38925],{"class":125,"line":16746},[123,38926,38927],{"class":192},"                # 判断b参数是否存在\n",[123,38929,38930,38933,38936,38939,38942,38945],{"class":125,"line":16768},[123,38931,38932],{"class":129},"                if",[123,38934,38935],{"class":133}," m.bias ",[123,38937,38938],{"class":129},"is",[123,38940,38941],{"class":129}," not",[123,38943,38944],{"class":182}," None",[123,38946,3748],{"class":133},[123,38948,38949],{"class":125,"line":16773},[123,38950,38951],{"class":192},"                    # 如果参数不存在的化初始化b=0\n",[123,38953,38954,38957,38959],{"class":125,"line":16779},[123,38955,38956],{"class":133},"                    nn.init.constant_(m.bias,",[123,38958,325],{"class":182},[123,38960,140],{"class":133},[123,38962,38963],{"class":125,"line":16793},[123,38964,38965],{"class":192},"            # 全连接层初始化\n",[123,38967,38968,38971,38973],{"class":125,"line":16806},[123,38969,38970],{"class":129},"            elif",[123,38972,38899],{"class":182},[123,38974,38975],{"class":133},"(m,nn.Linear):\n",[123,38977,38978],{"class":125,"line":16811},[123,38979,38980],{"class":192},"                # 这个初始化方法是利用的是正太分布的方式\n",[123,38982,38983],{"class":125,"line":16825},[123,38984,38985],{"class":192},"                # 均值为0，方差为0.01\n",[123,38987,38988,38991,38993,38995,38998],{"class":125,"line":16830},[123,38989,38990],{"class":133},"                nn.init.normal_(m.weight,",[123,38992,325],{"class":182},[123,38994,512],{"class":133},[123,38996,38997],{"class":182},"0.01",[123,38999,140],{"class":133},[123,39001,39002],{"class":125,"line":16836},[123,39003,39004],{"class":192},"                # 初始化b参数\n",[123,39006,39007,39009,39011,39013,39015,39017],{"class":125,"line":16841},[123,39008,38932],{"class":129},[123,39010,38935],{"class":133},[123,39012,38938],{"class":129},[123,39014,38941],{"class":129},[123,39016,38944],{"class":182},[123,39018,3748],{"class":133},[123,39020,39021,39023,39025],{"class":125,"line":16855},[123,39022,38956],{"class":133},[123,39024,325],{"class":182},[123,39026,140],{"class":133},[123,39028,39029],{"class":125,"line":16860},[123,39030,2409],{"emptyLinePlaceholder":50},[123,39032,39033],{"class":125,"line":16865},[123,39034,35176],{"class":192},[123,39036,39037,39039,39041],{"class":125,"line":16879},[123,39038,30812],{"class":129},[123,39040,31104],{"class":1972},[123,39042,31107],{"class":133},[123,39044,39045,39047,39049,39051],{"class":125,"line":16891},[123,39046,31112],{"class":133},[123,39048,179],{"class":129},[123,39050,30834],{"class":182},[123,39052,39053],{"class":133},".block1(x)\n",[123,39055,39056,39058,39060,39062],{"class":125,"line":16896},[123,39057,31112],{"class":133},[123,39059,179],{"class":129},[123,39061,30834],{"class":182},[123,39063,39064],{"class":133},".block2(x)\n",[123,39066,39067,39069,39071,39073],{"class":125,"line":16909},[123,39068,31112],{"class":133},[123,39070,179],{"class":129},[123,39072,30834],{"class":182},[123,39074,39075],{"class":133},".block3(x)\n",[123,39077,39078,39080,39082,39084],{"class":125,"line":16914},[123,39079,31112],{"class":133},[123,39081,179],{"class":129},[123,39083,30834],{"class":182},[123,39085,39086],{"class":133},".block4(x)\n",[123,39088,39089,39091,39093,39095],{"class":125,"line":16919},[123,39090,31112],{"class":133},[123,39092,179],{"class":129},[123,39094,30834],{"class":182},[123,39096,39097],{"class":133},".block5(x)\n",[123,39099,39100,39102,39104,39106],{"class":125,"line":16924},[123,39101,31112],{"class":133},[123,39103,179],{"class":129},[123,39105,30834],{"class":182},[123,39107,39108],{"class":133},".block6(x)\n",[123,39110,39111,39113],{"class":125,"line":16937},[123,39112,14762],{"class":129},[123,39114,31220],{"class":133},[123,39116,39117],{"class":125,"line":16942},[123,39118,2409],{"emptyLinePlaceholder":50},[123,39120,39121],{"class":125,"line":32644},[123,39122,39123],{"class":192},"# 验证模型\n",[123,39125,39126,39128,39130,39132,39135],{"class":125,"line":32650},[123,39127,1540],{"class":129},[123,39129,31231],{"class":182},[123,39131,2958],{"class":129},[123,39133,39134],{"class":238},"'__main__'",[123,39136,3748],{"class":133},[123,39138,39139,39141,39143,39145,39147,39149,39151,39153,39155],{"class":125,"line":32656},[123,39140,31248],{"class":133},[123,39142,179],{"class":129},[123,39144,30462],{"class":133},[123,39146,31255],{"class":238},[123,39148,1713],{"class":129},[123,39150,31260],{"class":133},[123,39152,1710],{"class":129},[123,39154,30487],{"class":238},[123,39156,140],{"class":133},[123,39158,39159,39161],{"class":125,"line":32662},[123,39160,31310],{"class":182},[123,39162,30496],{"class":133},[123,39164,39165,39167,39169],{"class":125,"line":32668},[123,39166,31300],{"class":133},[123,39168,179],{"class":129},[123,39170,39171],{"class":133},"VGG16().to(device)\n",[123,39173,39174,39176,39178,39180,39182,39184,39186,39188],{"class":125,"line":32679},[123,39175,31310],{"class":182},[123,39177,31313],{"class":133},[123,39179,351],{"class":182},[123,39181,512],{"class":133},[123,39183,31512],{"class":182},[123,39185,512],{"class":133},[123,39187,31512],{"class":182},[123,39189,31326],{"class":133},[77,39191,39192],{"start":45},[80,39193,39194],{},"训练代码",[14,39196,39197],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39199,39200],{},"解决方式:",[14,39202,39203],{},"①权重初始化",[114,39205,39207],{"className":30389,"code":39206,"language":30391,"meta":37,"style":37},"# 权重初始化,保证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",[120,39208,39209,39214,39219,39231,39236,39244,39249,39262,39267,39281,39286,39295,39300,39309,39314,39319,39332,39337,39351],{"__ignoreMap":37},[123,39210,39211],{"class":125,"line":126},[123,39212,39213],{"class":192},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[123,39215,39216],{"class":125,"line":45},[123,39217,39218],{"class":192},"# 循环遍历模型\n",[123,39220,39221,39223,39225,39227,39229],{"class":125,"line":1189},[123,39222,3034],{"class":129},[123,39224,38879],{"class":133},[123,39226,26054],{"class":129},[123,39228,38884],{"class":182},[123,39230,38887],{"class":133},[123,39232,39233],{"class":125,"line":1204},[123,39234,39235],{"class":192},"    # print(m)\n",[123,39237,39238,39240,39242],{"class":125,"line":1210},[123,39239,3110],{"class":129},[123,39241,38899],{"class":182},[123,39243,38902],{"class":133},[123,39245,39246],{"class":125,"line":1224},[123,39247,39248],{"class":192},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[123,39250,39251,39254,39256,39258,39260],{"class":125,"line":1230},[123,39252,39253],{"class":133},"        nn.init.kaiming_normal_(m.weight,",[123,39255,38915],{"class":5226},[123,39257,179],{"class":129},[123,39259,38920],{"class":238},[123,39261,140],{"class":133},[123,39263,39264],{"class":125,"line":1321},[123,39265,39266],{"class":192},"        # 判断b参数是否存在\n",[123,39268,39269,39271,39273,39275,39277,39279],{"class":125,"line":1327},[123,39270,2506],{"class":129},[123,39272,38935],{"class":133},[123,39274,38938],{"class":129},[123,39276,38941],{"class":129},[123,39278,38944],{"class":182},[123,39280,3748],{"class":133},[123,39282,39283],{"class":125,"line":1339},[123,39284,39285],{"class":192},"            # 如果参数不存在的化初始化b=0\n",[123,39287,39288,39291,39293],{"class":125,"line":1621},[123,39289,39290],{"class":133},"            nn.init.constant_(m.bias,",[123,39292,325],{"class":182},[123,39294,140],{"class":133},[123,39296,39297],{"class":125,"line":1626},[123,39298,39299],{"class":192},"    # 全连接层初始化\n",[123,39301,39302,39305,39307],{"class":125,"line":1632},[123,39303,39304],{"class":129},"    elif",[123,39306,38899],{"class":182},[123,39308,38975],{"class":133},[123,39310,39311],{"class":125,"line":1637},[123,39312,39313],{"class":192},"        # 这个初始化方法是利用的是正太分布的方式\n",[123,39315,39316],{"class":125,"line":1651},[123,39317,39318],{"class":192},"        # 均值为0，方差为0.01\n",[123,39320,39321,39324,39326,39328,39330],{"class":125,"line":1656},[123,39322,39323],{"class":133},"        nn.init.normal_(m.weight,",[123,39325,325],{"class":182},[123,39327,512],{"class":133},[123,39329,38997],{"class":182},[123,39331,140],{"class":133},[123,39333,39334],{"class":125,"line":1662},[123,39335,39336],{"class":192},"        # 初始化b参数\n",[123,39338,39339,39341,39343,39345,39347,39349],{"class":125,"line":1683},[123,39340,2506],{"class":129},[123,39342,38935],{"class":133},[123,39344,38938],{"class":129},[123,39346,38941],{"class":129},[123,39348,38944],{"class":182},[123,39350,3748],{"class":133},[123,39352,39353,39355,39357],{"class":125,"line":1688},[123,39354,39290],{"class":133},[123,39356,325],{"class":182},[123,39358,140],{"class":133},[14,39360,39361],{},"②尽可能地增加批次",[14,39363,39364],{},"训练完整代码：",[114,39366,39367],{"className":30389,"code":37910,"language":30391,"meta":37,"style":37},[120,39368,39369,39375,39385,39395,39405,39409,39425,39433,39451,39455,39459,39469,39505,39509,39545,39549,39577,39581,39585,39595,39631,39635,39671,39675,39703,39707,39711,39721,39757,39761,39797,39801,39837,39841,39869,39873,39877,39887,39923,39927,39963,39967,40003,40007,40035,40039,40043,40053,40089,40093,40129,40133,40169,40173,40201,40205,40209,40219,40223,40227,40231,40251,40255,40267,40271,40283,40287,40291,40295,40299,40311,40315,40323,40327,40339,40343,40357,40361,40369,40373,40381,40385,40389,40401,40405,40419,40427,40431,40435,40443,40453,40463,40473,40483,40493,40503,40509,40513,40517,40529,40549,40555,40563],{"__ignoreMap":37},[123,39370,39371,39373],{"class":125,"line":126},[123,39372,30403],{"class":129},[123,39374,30406],{"class":133},[123,39376,39377,39379,39381,39383],{"class":125,"line":45},[123,39378,30748],{"class":129},[123,39380,37925],{"class":133},[123,39382,30403],{"class":129},[123,39384,37930],{"class":133},[123,39386,39387,39389,39391,39393],{"class":125,"line":1189},[123,39388,30748],{"class":129},[123,39390,30751],{"class":133},[123,39392,30403],{"class":129},[123,39394,30756],{"class":133},[123,39396,39397,39399,39401,39403],{"class":125,"line":1204},[123,39398,30748],{"class":129},[123,39400,30768],{"class":133},[123,39402,30403],{"class":129},[123,39404,30773],{"class":133},[123,39406,39407],{"class":125,"line":1210},[123,39408,2409],{"emptyLinePlaceholder":50},[123,39410,39411,39413,39415,39417,39419,39421,39423],{"class":125,"line":1224},[123,39412,14704],{"class":129},[123,39414,37961],{"class":1972},[123,39416,134],{"class":133},[123,39418,30789],{"class":1972},[123,39420,692],{"class":133},[123,39422,30794],{"class":1972},[123,39424,30797],{"class":133},[123,39426,39427,39429,39431],{"class":125,"line":1230},[123,39428,30812],{"class":129},[123,39430,30815],{"class":182},[123,39432,30818],{"class":133},[123,39434,39435,39437,39439,39441,39443,39445,39447,39449],{"class":125,"line":1321},[123,39436,30828],{"class":182},[123,39438,134],{"class":133},[123,39440,37988],{"class":182},[123,39442,12445],{"class":133},[123,39444,30834],{"class":182},[123,39446,30837],{"class":133},[123,39448,30840],{"class":182},[123,39450,1985],{"class":133},[123,39452,39453],{"class":125,"line":1327},[123,39454,38003],{"class":192},[123,39456,39457],{"class":125,"line":1339},[123,39458,38008],{"class":192},[123,39460,39461,39463,39465,39467],{"class":125,"line":1621},[123,39462,30856],{"class":182},[123,39464,38015],{"class":133},[123,39466,179],{"class":129},[123,39468,38020],{"class":133},[123,39470,39471,39473,39475,39477,39479,39481,39483,39485,39487,39489,39491,39493,39495,39497,39499,39501,39503],{"class":125,"line":1626},[123,39472,38025],{"class":133},[123,39474,30867],{"class":5226},[123,39476,179],{"class":129},[123,39478,351],{"class":182},[123,39480,512],{"class":133},[123,39482,30876],{"class":5226},[123,39484,179],{"class":129},[123,39486,337],{"class":182},[123,39488,512],{"class":133},[123,39490,30885],{"class":5226},[123,39492,179],{"class":129},[123,39494,205],{"class":182},[123,39496,512],{"class":133},[123,39498,30894],{"class":5226},[123,39500,179],{"class":129},[123,39502,351],{"class":182},[123,39504,38058],{"class":133},[123,39506,39507],{"class":125,"line":1632},[123,39508,38063],{"class":133},[123,39510,39511,39513,39515,39517,39519,39521,39523,39525,39527,39529,39531,39533,39535,39537,39539,39541,39543],{"class":125,"line":1637},[123,39512,38025],{"class":133},[123,39514,30867],{"class":5226},[123,39516,179],{"class":129},[123,39518,337],{"class":182},[123,39520,512],{"class":133},[123,39522,30876],{"class":5226},[123,39524,179],{"class":129},[123,39526,337],{"class":182},[123,39528,512],{"class":133},[123,39530,30885],{"class":5226},[123,39532,179],{"class":129},[123,39534,205],{"class":182},[123,39536,512],{"class":133},[123,39538,30894],{"class":5226},[123,39540,179],{"class":129},[123,39542,351],{"class":182},[123,39544,38058],{"class":133},[123,39546,39547],{"class":125,"line":1651},[123,39548,38063],{"class":133},[123,39550,39551,39553,39555,39557,39559,39561,39563,39565,39567,39569,39571,39573,39575],{"class":125,"line":1656},[123,39552,38108],{"class":133},[123,39554,30885],{"class":5226},[123,39556,179],{"class":129},[123,39558,211],{"class":182},[123,39560,512],{"class":133},[123,39562,30940],{"class":5226},[123,39564,179],{"class":129},[123,39566,211],{"class":182},[123,39568,512],{"class":133},[123,39570,30894],{"class":5226},[123,39572,179],{"class":129},[123,39574,325],{"class":182},[123,39576,140],{"class":133},[123,39578,39579],{"class":125,"line":1662},[123,39580,38137],{"class":133},[123,39582,39583],{"class":125,"line":1683},[123,39584,38142],{"class":192},[123,39586,39587,39589,39591,39593],{"class":125,"line":1688},[123,39588,30856],{"class":182},[123,39590,38149],{"class":133},[123,39592,179],{"class":129},[123,39594,38020],{"class":133},[123,39596,39597,39599,39601,39603,39605,39607,39609,39611,39613,39615,39617,39619,39621,39623,39625,39627,39629],{"class":125,"line":1702},[123,39598,38025],{"class":133},[123,39600,30867],{"class":5226},[123,39602,179],{"class":129},[123,39604,337],{"class":182},[123,39606,512],{"class":133},[123,39608,30876],{"class":5226},[123,39610,179],{"class":129},[123,39612,32081],{"class":182},[123,39614,512],{"class":133},[123,39616,30885],{"class":5226},[123,39618,179],{"class":129},[123,39620,205],{"class":182},[123,39622,512],{"class":133},[123,39624,30894],{"class":5226},[123,39626,179],{"class":129},[123,39628,351],{"class":182},[123,39630,38058],{"class":133},[123,39632,39633],{"class":125,"line":1707},[123,39634,38063],{"class":133},[123,39636,39637,39639,39641,39643,39645,39647,39649,39651,39653,39655,39657,39659,39661,39663,39665,39667,39669],{"class":125,"line":1736},[123,39638,38025],{"class":133},[123,39640,30867],{"class":5226},[123,39642,179],{"class":129},[123,39644,32081],{"class":182},[123,39646,512],{"class":133},[123,39648,30876],{"class":5226},[123,39650,179],{"class":129},[123,39652,32081],{"class":182},[123,39654,512],{"class":133},[123,39656,30885],{"class":5226},[123,39658,179],{"class":129},[123,39660,205],{"class":182},[123,39662,512],{"class":133},[123,39664,30894],{"class":5226},[123,39666,179],{"class":129},[123,39668,351],{"class":182},[123,39670,38058],{"class":133},[123,39672,39673],{"class":125,"line":1741},[123,39674,38063],{"class":133},[123,39676,39677,39679,39681,39683,39685,39687,39689,39691,39693,39695,39697,39699,39701],{"class":125,"line":1758},[123,39678,38108],{"class":133},[123,39680,30885],{"class":5226},[123,39682,179],{"class":129},[123,39684,211],{"class":182},[123,39686,512],{"class":133},[123,39688,30940],{"class":5226},[123,39690,179],{"class":129},[123,39692,211],{"class":182},[123,39694,512],{"class":133},[123,39696,30894],{"class":5226},[123,39698,179],{"class":129},[123,39700,325],{"class":182},[123,39702,140],{"class":133},[123,39704,39705],{"class":125,"line":1763},[123,39706,38137],{"class":133},[123,39708,39709],{"class":125,"line":1768},[123,39710,38270],{"class":192},[123,39712,39713,39715,39717,39719],{"class":125,"line":1773},[123,39714,30856],{"class":182},[123,39716,38277],{"class":133},[123,39718,179],{"class":129},[123,39720,38020],{"class":133},[123,39722,39723,39725,39727,39729,39731,39733,39735,39737,39739,39741,39743,39745,39747,39749,39751,39753,39755],{"class":125,"line":1787},[123,39724,38025],{"class":133},[123,39726,30867],{"class":5226},[123,39728,179],{"class":129},[123,39730,32081],{"class":182},[123,39732,512],{"class":133},[123,39734,30876],{"class":5226},[123,39736,179],{"class":129},[123,39738,34881],{"class":182},[123,39740,512],{"class":133},[123,39742,30885],{"class":5226},[123,39744,179],{"class":129},[123,39746,205],{"class":182},[123,39748,512],{"class":133},[123,39750,30894],{"class":5226},[123,39752,179],{"class":129},[123,39754,351],{"class":182},[123,39756,38058],{"class":133},[123,39758,39759],{"class":125,"line":1792},[123,39760,38063],{"class":133},[123,39762,39763,39765,39767,39769,39771,39773,39775,39777,39779,39781,39783,39785,39787,39789,39791,39793,39795],{"class":125,"line":2586},[123,39764,38025],{"class":133},[123,39766,30867],{"class":5226},[123,39768,179],{"class":129},[123,39770,34881],{"class":182},[123,39772,512],{"class":133},[123,39774,30876],{"class":5226},[123,39776,179],{"class":129},[123,39778,34881],{"class":182},[123,39780,512],{"class":133},[123,39782,30885],{"class":5226},[123,39784,179],{"class":129},[123,39786,205],{"class":182},[123,39788,512],{"class":133},[123,39790,30894],{"class":5226},[123,39792,179],{"class":129},[123,39794,351],{"class":182},[123,39796,38058],{"class":133},[123,39798,39799],{"class":125,"line":2600},[123,39800,38063],{"class":133},[123,39802,39803,39805,39807,39809,39811,39813,39815,39817,39819,39821,39823,39825,39827,39829,39831,39833,39835],{"class":125,"line":2608},[123,39804,38025],{"class":133},[123,39806,30867],{"class":5226},[123,39808,179],{"class":129},[123,39810,34881],{"class":182},[123,39812,512],{"class":133},[123,39814,30876],{"class":5226},[123,39816,179],{"class":129},[123,39818,34881],{"class":182},[123,39820,512],{"class":133},[123,39822,30885],{"class":5226},[123,39824,179],{"class":129},[123,39826,205],{"class":182},[123,39828,512],{"class":133},[123,39830,30894],{"class":5226},[123,39832,179],{"class":129},[123,39834,351],{"class":182},[123,39836,38058],{"class":133},[123,39838,39839],{"class":125,"line":2613},[123,39840,38063],{"class":133},[123,39842,39843,39845,39847,39849,39851,39853,39855,39857,39859,39861,39863,39865,39867],{"class":125,"line":2619},[123,39844,38108],{"class":133},[123,39846,30885],{"class":5226},[123,39848,179],{"class":129},[123,39850,211],{"class":182},[123,39852,512],{"class":133},[123,39854,30940],{"class":5226},[123,39856,179],{"class":129},[123,39858,211],{"class":182},[123,39860,512],{"class":133},[123,39862,30894],{"class":5226},[123,39864,179],{"class":129},[123,39866,325],{"class":182},[123,39868,140],{"class":133},[123,39870,39871],{"class":125,"line":2625},[123,39872,38137],{"class":133},[123,39874,39875],{"class":125,"line":2630},[123,39876,38438],{"class":192},[123,39878,39879,39881,39883,39885],{"class":125,"line":7958},[123,39880,30856],{"class":182},[123,39882,38445],{"class":133},[123,39884,179],{"class":129},[123,39886,38020],{"class":133},[123,39888,39889,39891,39893,39895,39897,39899,39901,39903,39905,39907,39909,39911,39913,39915,39917,39919,39921],{"class":125,"line":7982},[123,39890,38025],{"class":133},[123,39892,30867],{"class":5226},[123,39894,179],{"class":129},[123,39896,34881],{"class":182},[123,39898,512],{"class":133},[123,39900,30876],{"class":5226},[123,39902,179],{"class":129},[123,39904,38468],{"class":182},[123,39906,512],{"class":133},[123,39908,30885],{"class":5226},[123,39910,179],{"class":129},[123,39912,205],{"class":182},[123,39914,512],{"class":133},[123,39916,30894],{"class":5226},[123,39918,179],{"class":129},[123,39920,351],{"class":182},[123,39922,38058],{"class":133},[123,39924,39925],{"class":125,"line":7987},[123,39926,38063],{"class":133},[123,39928,39929,39931,39933,39935,39937,39939,39941,39943,39945,39947,39949,39951,39953,39955,39957,39959,39961],{"class":125,"line":7993},[123,39930,38025],{"class":133},[123,39932,30867],{"class":5226},[123,39934,179],{"class":129},[123,39936,38468],{"class":182},[123,39938,512],{"class":133},[123,39940,30876],{"class":5226},[123,39942,179],{"class":129},[123,39944,38468],{"class":182},[123,39946,512],{"class":133},[123,39948,30885],{"class":5226},[123,39950,179],{"class":129},[123,39952,205],{"class":182},[123,39954,512],{"class":133},[123,39956,30894],{"class":5226},[123,39958,179],{"class":129},[123,39960,351],{"class":182},[123,39962,38058],{"class":133},[123,39964,39965],{"class":125,"line":8020},[123,39966,38063],{"class":133},[123,39968,39969,39971,39973,39975,39977,39979,39981,39983,39985,39987,39989,39991,39993,39995,39997,39999,40001],{"class":125,"line":8025},[123,39970,38025],{"class":133},[123,39972,30867],{"class":5226},[123,39974,179],{"class":129},[123,39976,38468],{"class":182},[123,39978,512],{"class":133},[123,39980,30876],{"class":5226},[123,39982,179],{"class":129},[123,39984,38468],{"class":182},[123,39986,512],{"class":133},[123,39988,30885],{"class":5226},[123,39990,179],{"class":129},[123,39992,205],{"class":182},[123,39994,512],{"class":133},[123,39996,30894],{"class":5226},[123,39998,179],{"class":129},[123,40000,351],{"class":182},[123,40002,38058],{"class":133},[123,40004,40005],{"class":125,"line":8031},[123,40006,38063],{"class":133},[123,40008,40009,40011,40013,40015,40017,40019,40021,40023,40025,40027,40029,40031,40033],{"class":125,"line":8043},[123,40010,38108],{"class":133},[123,40012,30885],{"class":5226},[123,40014,179],{"class":129},[123,40016,211],{"class":182},[123,40018,512],{"class":133},[123,40020,30940],{"class":5226},[123,40022,179],{"class":129},[123,40024,211],{"class":182},[123,40026,512],{"class":133},[123,40028,30894],{"class":5226},[123,40030,179],{"class":129},[123,40032,325],{"class":182},[123,40034,140],{"class":133},[123,40036,40037],{"class":125,"line":8055},[123,40038,38137],{"class":133},[123,40040,40041],{"class":125,"line":8067},[123,40042,38607],{"class":192},[123,40044,40045,40047,40049,40051],{"class":125,"line":9726},[123,40046,30856],{"class":182},[123,40048,38614],{"class":133},[123,40050,179],{"class":129},[123,40052,38020],{"class":133},[123,40054,40055,40057,40059,40061,40063,40065,40067,40069,40071,40073,40075,40077,40079,40081,40083,40085,40087],{"class":125,"line":9751},[123,40056,38025],{"class":133},[123,40058,30867],{"class":5226},[123,40060,179],{"class":129},[123,40062,38468],{"class":182},[123,40064,512],{"class":133},[123,40066,30876],{"class":5226},[123,40068,179],{"class":129},[123,40070,38468],{"class":182},[123,40072,512],{"class":133},[123,40074,30885],{"class":5226},[123,40076,179],{"class":129},[123,40078,205],{"class":182},[123,40080,512],{"class":133},[123,40082,30894],{"class":5226},[123,40084,179],{"class":129},[123,40086,351],{"class":182},[123,40088,38058],{"class":133},[123,40090,40091],{"class":125,"line":9774},[123,40092,38063],{"class":133},[123,40094,40095,40097,40099,40101,40103,40105,40107,40109,40111,40113,40115,40117,40119,40121,40123,40125,40127],{"class":125,"line":9798},[123,40096,38025],{"class":133},[123,40098,30867],{"class":5226},[123,40100,179],{"class":129},[123,40102,38468],{"class":182},[123,40104,512],{"class":133},[123,40106,30876],{"class":5226},[123,40108,179],{"class":129},[123,40110,38468],{"class":182},[123,40112,512],{"class":133},[123,40114,30885],{"class":5226},[123,40116,179],{"class":129},[123,40118,205],{"class":182},[123,40120,512],{"class":133},[123,40122,30894],{"class":5226},[123,40124,179],{"class":129},[123,40126,351],{"class":182},[123,40128,38058],{"class":133},[123,40130,40131],{"class":125,"line":9803},[123,40132,38063],{"class":133},[123,40134,40135,40137,40139,40141,40143,40145,40147,40149,40151,40153,40155,40157,40159,40161,40163,40165,40167],{"class":125,"line":9808},[123,40136,38025],{"class":133},[123,40138,30867],{"class":5226},[123,40140,179],{"class":129},[123,40142,38468],{"class":182},[123,40144,512],{"class":133},[123,40146,30876],{"class":5226},[123,40148,179],{"class":129},[123,40150,38468],{"class":182},[123,40152,512],{"class":133},[123,40154,30885],{"class":5226},[123,40156,179],{"class":129},[123,40158,205],{"class":182},[123,40160,512],{"class":133},[123,40162,30894],{"class":5226},[123,40164,179],{"class":129},[123,40166,351],{"class":182},[123,40168,38058],{"class":133},[123,40170,40171],{"class":125,"line":9813},[123,40172,38063],{"class":133},[123,40174,40175,40177,40179,40181,40183,40185,40187,40189,40191,40193,40195,40197,40199],{"class":125,"line":9822},[123,40176,38108],{"class":133},[123,40178,30885],{"class":5226},[123,40180,179],{"class":129},[123,40182,211],{"class":182},[123,40184,512],{"class":133},[123,40186,30940],{"class":5226},[123,40188,179],{"class":129},[123,40190,211],{"class":182},[123,40192,512],{"class":133},[123,40194,30894],{"class":5226},[123,40196,179],{"class":129},[123,40198,325],{"class":182},[123,40200,140],{"class":133},[123,40202,40203],{"class":125,"line":9827},[123,40204,38137],{"class":133},[123,40206,40207],{"class":125,"line":9833},[123,40208,38775],{"class":192},[123,40210,40211,40213,40215,40217],{"class":125,"line":9854},[123,40212,30856],{"class":182},[123,40214,38782],{"class":133},[123,40216,179],{"class":129},[123,40218,38020],{"class":133},[123,40220,40221],{"class":125,"line":9860},[123,40222,38791],{"class":192},[123,40224,40225],{"class":125,"line":9874},[123,40226,38796],{"class":192},[123,40228,40229],{"class":125,"line":9880},[123,40230,38801],{"class":133},[123,40232,40233,40235,40237,40239,40241,40243,40245,40247,40249],{"class":125,"line":9907},[123,40234,38806],{"class":133},[123,40236,503],{"class":182},[123,40238,589],{"class":129},[123,40240,503],{"class":182},[123,40242,589],{"class":129},[123,40244,38468],{"class":182},[123,40246,512],{"class":133},[123,40248,34881],{"class":182},[123,40250,38058],{"class":133},[123,40252,40253],{"class":125,"line":9916},[123,40254,38063],{"class":133},[123,40256,40257,40259,40261,40263,40265],{"class":125,"line":9922},[123,40258,38806],{"class":133},[123,40260,34881],{"class":182},[123,40262,512],{"class":133},[123,40264,32081],{"class":182},[123,40266,38058],{"class":133},[123,40268,40269],{"class":125,"line":9930},[123,40270,38063],{"class":133},[123,40272,40273,40275,40277,40279,40281],{"class":125,"line":9935},[123,40274,38806],{"class":133},[123,40276,32081],{"class":182},[123,40278,512],{"class":133},[123,40280,580],{"class":182},[123,40282,140],{"class":133},[123,40284,40285],{"class":125,"line":16614},[123,40286,38137],{"class":133},[123,40288,40289],{"class":125,"line":16620},[123,40290,2409],{"emptyLinePlaceholder":50},[123,40292,40293],{"class":125,"line":16643},[123,40294,38867],{"class":192},[123,40296,40297],{"class":125,"line":16649},[123,40298,38872],{"class":192},[123,40300,40301,40303,40305,40307,40309],{"class":125,"line":16672},[123,40302,3412],{"class":129},[123,40304,38879],{"class":133},[123,40306,26054],{"class":129},[123,40308,38884],{"class":182},[123,40310,38887],{"class":133},[123,40312,40313],{"class":125,"line":16686},[123,40314,38892],{"class":192},[123,40316,40317,40319,40321],{"class":125,"line":16706},[123,40318,4651],{"class":129},[123,40320,38899],{"class":182},[123,40322,38902],{"class":133},[123,40324,40325],{"class":125,"line":16712},[123,40326,38907],{"class":192},[123,40328,40329,40331,40333,40335,40337],{"class":125,"line":16723},[123,40330,38912],{"class":133},[123,40332,38915],{"class":5226},[123,40334,179],{"class":129},[123,40336,38920],{"class":238},[123,40338,140],{"class":133},[123,40340,40341],{"class":125,"line":16746},[123,40342,38927],{"class":192},[123,40344,40345,40347,40349,40351,40353,40355],{"class":125,"line":16768},[123,40346,38932],{"class":129},[123,40348,38935],{"class":133},[123,40350,38938],{"class":129},[123,40352,38941],{"class":129},[123,40354,38944],{"class":182},[123,40356,3748],{"class":133},[123,40358,40359],{"class":125,"line":16773},[123,40360,38951],{"class":192},[123,40362,40363,40365,40367],{"class":125,"line":16779},[123,40364,38956],{"class":133},[123,40366,325],{"class":182},[123,40368,140],{"class":133},[123,40370,40371],{"class":125,"line":16793},[123,40372,38965],{"class":192},[123,40374,40375,40377,40379],{"class":125,"line":16806},[123,40376,38970],{"class":129},[123,40378,38899],{"class":182},[123,40380,38975],{"class":133},[123,40382,40383],{"class":125,"line":16811},[123,40384,38980],{"class":192},[123,40386,40387],{"class":125,"line":16825},[123,40388,38985],{"class":192},[123,40390,40391,40393,40395,40397,40399],{"class":125,"line":16830},[123,40392,38990],{"class":133},[123,40394,325],{"class":182},[123,40396,512],{"class":133},[123,40398,38997],{"class":182},[123,40400,140],{"class":133},[123,40402,40403],{"class":125,"line":16836},[123,40404,39004],{"class":192},[123,40406,40407,40409,40411,40413,40415,40417],{"class":125,"line":16841},[123,40408,38932],{"class":129},[123,40410,38935],{"class":133},[123,40412,38938],{"class":129},[123,40414,38941],{"class":129},[123,40416,38944],{"class":182},[123,40418,3748],{"class":133},[123,40420,40421,40423,40425],{"class":125,"line":16855},[123,40422,38956],{"class":133},[123,40424,325],{"class":182},[123,40426,140],{"class":133},[123,40428,40429],{"class":125,"line":16860},[123,40430,2409],{"emptyLinePlaceholder":50},[123,40432,40433],{"class":125,"line":16865},[123,40434,35176],{"class":192},[123,40436,40437,40439,40441],{"class":125,"line":16879},[123,40438,30812],{"class":129},[123,40440,31104],{"class":1972},[123,40442,31107],{"class":133},[123,40444,40445,40447,40449,40451],{"class":125,"line":16891},[123,40446,31112],{"class":133},[123,40448,179],{"class":129},[123,40450,30834],{"class":182},[123,40452,39053],{"class":133},[123,40454,40455,40457,40459,40461],{"class":125,"line":16896},[123,40456,31112],{"class":133},[123,40458,179],{"class":129},[123,40460,30834],{"class":182},[123,40462,39064],{"class":133},[123,40464,40465,40467,40469,40471],{"class":125,"line":16909},[123,40466,31112],{"class":133},[123,40468,179],{"class":129},[123,40470,30834],{"class":182},[123,40472,39075],{"class":133},[123,40474,40475,40477,40479,40481],{"class":125,"line":16914},[123,40476,31112],{"class":133},[123,40478,179],{"class":129},[123,40480,30834],{"class":182},[123,40482,39086],{"class":133},[123,40484,40485,40487,40489,40491],{"class":125,"line":16919},[123,40486,31112],{"class":133},[123,40488,179],{"class":129},[123,40490,30834],{"class":182},[123,40492,39097],{"class":133},[123,40494,40495,40497,40499,40501],{"class":125,"line":16924},[123,40496,31112],{"class":133},[123,40498,179],{"class":129},[123,40500,30834],{"class":182},[123,40502,39108],{"class":133},[123,40504,40505,40507],{"class":125,"line":16937},[123,40506,14762],{"class":129},[123,40508,31220],{"class":133},[123,40510,40511],{"class":125,"line":16942},[123,40512,2409],{"emptyLinePlaceholder":50},[123,40514,40515],{"class":125,"line":32644},[123,40516,39123],{"class":192},[123,40518,40519,40521,40523,40525,40527],{"class":125,"line":32650},[123,40520,1540],{"class":129},[123,40522,31231],{"class":182},[123,40524,2958],{"class":129},[123,40526,39134],{"class":238},[123,40528,3748],{"class":133},[123,40530,40531,40533,40535,40537,40539,40541,40543,40545,40547],{"class":125,"line":32656},[123,40532,31248],{"class":133},[123,40534,179],{"class":129},[123,40536,30462],{"class":133},[123,40538,31255],{"class":238},[123,40540,1713],{"class":129},[123,40542,31260],{"class":133},[123,40544,1710],{"class":129},[123,40546,30487],{"class":238},[123,40548,140],{"class":133},[123,40550,40551,40553],{"class":125,"line":32662},[123,40552,31310],{"class":182},[123,40554,30496],{"class":133},[123,40556,40557,40559,40561],{"class":125,"line":32668},[123,40558,31300],{"class":133},[123,40560,179],{"class":129},[123,40562,39171],{"class":133},[123,40564,40565,40567,40569,40571,40573,40575,40577,40579],{"class":125,"line":32679},[123,40566,31310],{"class":182},[123,40568,31313],{"class":133},[123,40570,351],{"class":182},[123,40572,512],{"class":133},[123,40574,31512],{"class":182},[123,40576,512],{"class":133},[123,40578,31512],{"class":182},[123,40580,31326],{"class":133},[77,40582,40583],{"start":1189},[80,40584,40585],{},"测试代码",[114,40587,40589],{"className":30389,"code":40588,"language":30391,"meta":37,"style":37},"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",[120,40590,40591,40597,40607,40617,40621,40631,40642,40646,40650,40654,40662,40678,40688,40704,40714,40728,40732,40742,40752,40762,40768,40772,40776,40784,40788,40804,40812,40816,40820,40828,40836,40840,40844,40848,40852,40858,40862,40872,40880,40888,40892,40896,40900,40908,40912,40928,40932,40936,40940,40952,40956,40968,40972,40976,40988,40992,41002,41006,41010,41022,41026,41035,41039,41043,41051,41055,41063,41067,41071,41075,41079,41083,41099,41107,41111,41115,41163,41169,41173,41183,41191,41199,41203,41207,41211,41215,41223,41227,41243,41247,41255,41263],{"__ignoreMap":37},[123,40592,40593,40595],{"class":125,"line":126},[123,40594,30403],{"class":129},[123,40596,30406],{"class":133},[123,40598,40599,40601,40603,40605],{"class":125,"line":45},[123,40600,30403],{"class":129},[123,40602,31426],{"class":133},[123,40604,31394],{"class":129},[123,40606,31431],{"class":133},[123,40608,40609,40611,40613,40615],{"class":125,"line":1189},[123,40610,30748],{"class":129},[123,40612,31409],{"class":133},[123,40614,30403],{"class":129},[123,40616,31414],{"class":133},[123,40618,40619],{"class":125,"line":1204},[123,40620,33933],{"class":192},[123,40622,40623,40625,40627,40629],{"class":125,"line":1210},[123,40624,30748],{"class":129},[123,40626,31379],{"class":133},[123,40628,30403],{"class":129},[123,40630,31384],{"class":133},[123,40632,40633,40635,40637,40639],{"class":125,"line":1224},[123,40634,30748],{"class":129},[123,40636,31925],{"class":133},[123,40638,30403],{"class":129},[123,40640,40641],{"class":182}," VGG16\n",[123,40643,40644],{"class":125,"line":1230},[123,40645,2409],{"emptyLinePlaceholder":50},[123,40647,40648],{"class":125,"line":1321},[123,40649,2409],{"emptyLinePlaceholder":50},[123,40651,40652],{"class":125,"line":1327},[123,40653,33962],{"class":192},[123,40655,40656,40658,40660],{"class":125,"line":1339},[123,40657,31958],{"class":129},[123,40659,33969],{"class":1972},[123,40661,31964],{"class":133},[123,40663,40664,40666,40668,40670,40672,40674,40676],{"class":125,"line":1621},[123,40665,33976],{"class":133},[123,40667,179],{"class":129},[123,40669,31466],{"class":133},[123,40671,31469],{"class":5226},[123,40673,179],{"class":129},[123,40675,31474],{"class":238},[123,40677,31477],{"class":133},[123,40679,40680,40682,40684,40686],{"class":125,"line":1626},[123,40681,33993],{"class":5226},[123,40683,179],{"class":129},[123,40685,33998],{"class":182},[123,40687,31477],{"class":133},[123,40689,40690,40692,40694,40696,40698,40700,40702],{"class":125,"line":1632},[123,40691,34005],{"class":5226},[123,40693,179],{"class":129},[123,40695,31504],{"class":133},[123,40697,31507],{"class":5226},[123,40699,179],{"class":129},[123,40701,31512],{"class":182},[123,40703,31515],{"class":133},[123,40705,40706,40708,40710,40712],{"class":125,"line":1637},[123,40707,34022],{"class":5226},[123,40709,179],{"class":129},[123,40711,31487],{"class":182},[123,40713,140],{"class":133},[123,40715,40716,40718,40720,40722,40724,40726],{"class":125,"line":1651},[123,40717,34033],{"class":133},[123,40719,179],{"class":129},[123,40721,31545],{"class":133},[123,40723,31548],{"class":5226},[123,40725,179],{"class":129},[123,40727,34044],{"class":133},[123,40729,40730],{"class":125,"line":1656},[123,40731,34049],{"class":192},[123,40733,40734,40736,40738,40740],{"class":125,"line":1662},[123,40735,34054],{"class":5226},[123,40737,179],{"class":129},[123,40739,351],{"class":182},[123,40741,31477],{"class":133},[123,40743,40744,40746,40748,40750],{"class":125,"line":1683},[123,40745,34065],{"class":5226},[123,40747,179],{"class":129},[123,40749,31487],{"class":182},[123,40751,31477],{"class":133},[123,40753,40754,40756,40758,40760],{"class":125,"line":1688},[123,40755,34076],{"class":5226},[123,40757,179],{"class":129},[123,40759,325],{"class":182},[123,40761,140],{"class":133},[123,40763,40764,40766],{"class":125,"line":1702},[123,40765,4099],{"class":129},[123,40767,34089],{"class":133},[123,40769,40770],{"class":125,"line":1707},[123,40771,2409],{"emptyLinePlaceholder":50},[123,40773,40774],{"class":125,"line":1736},[123,40775,34098],{"class":192},[123,40777,40778,40780,40782],{"class":125,"line":1741},[123,40779,31958],{"class":129},[123,40781,34105],{"class":1972},[123,40783,34108],{"class":133},[123,40785,40786],{"class":125,"line":1758},[123,40787,34113],{"class":192},[123,40789,40790,40792,40794,40796,40798,40800,40802],{"class":125,"line":1763},[123,40791,31248],{"class":133},[123,40793,179],{"class":129},[123,40795,31255],{"class":238},[123,40797,1713],{"class":129},[123,40799,31260],{"class":133},[123,40801,1710],{"class":129},[123,40803,34130],{"class":238},[123,40805,40806,40808,40810],{"class":125,"line":1768},[123,40807,31300],{"class":133},[123,40809,179],{"class":129},[123,40811,32300],{"class":133},[123,40813,40814],{"class":125,"line":1773},[123,40815,2409],{"emptyLinePlaceholder":50},[123,40817,40818],{"class":125,"line":1787},[123,40819,34147],{"class":192},[123,40821,40822,40824,40826],{"class":125,"line":1792},[123,40823,34152],{"class":133},[123,40825,179],{"class":129},[123,40827,32353],{"class":182},[123,40829,40830,40832,40834],{"class":125,"line":2586},[123,40831,34161],{"class":133},[123,40833,179],{"class":129},[123,40835,3094],{"class":182},[123,40837,40838],{"class":125,"line":2600},[123,40839,2409],{"emptyLinePlaceholder":50},[123,40841,40842],{"class":125,"line":2608},[123,40843,34174],{"class":192},[123,40845,40846],{"class":125,"line":2613},[123,40847,34179],{"class":192},[123,40849,40850],{"class":125,"line":2619},[123,40851,34184],{"class":192},[123,40853,40854,40856],{"class":125,"line":2625},[123,40855,34189],{"class":129},[123,40857,32895],{"class":133},[123,40859,40860],{"class":125,"line":2630},[123,40861,34196],{"class":192},[123,40863,40864,40866,40868,40870],{"class":125,"line":7958},[123,40865,3412],{"class":129},[123,40867,34203],{"class":133},[123,40869,26054],{"class":129},[123,40871,34208],{"class":133},[123,40873,40874,40876,40878],{"class":125,"line":7982},[123,40875,34213],{"class":133},[123,40877,179],{"class":129},[123,40879,34218],{"class":133},[123,40881,40882,40884,40886],{"class":125,"line":7987},[123,40883,34223],{"class":133},[123,40885,179],{"class":129},[123,40887,34228],{"class":133},[123,40889,40890],{"class":125,"line":7993},[123,40891,34233],{"class":192},[123,40893,40894],{"class":125,"line":8020},[123,40895,32886],{"class":133},[123,40897,40898],{"class":125,"line":8025},[123,40899,34242],{"class":192},[123,40901,40902,40904,40906],{"class":125,"line":8031},[123,40903,32671],{"class":133},[123,40905,179],{"class":129},[123,40907,34251],{"class":133},[123,40909,40910],{"class":125,"line":8043},[123,40911,34256],{"class":192},[123,40913,40914,40916,40918,40920,40922,40924,40926],{"class":125,"line":8055},[123,40915,32688],{"class":133},[123,40917,179],{"class":129},[123,40919,32693],{"class":133},[123,40921,32696],{"class":5226},[123,40923,179],{"class":129},[123,40925,351],{"class":182},[123,40927,140],{"class":133},[123,40929,40930],{"class":125,"line":8067},[123,40931,34277],{"class":192},[123,40933,40934],{"class":125,"line":9726},[123,40935,34282],{"class":192},[123,40937,40938],{"class":125,"line":9751},[123,40939,34287],{"class":192},[123,40941,40942,40944,40946,40948,40950],{"class":125,"line":9774},[123,40943,34292],{"class":133},[123,40945,9487],{"class":129},[123,40947,32798],{"class":133},[123,40949,2958],{"class":129},[123,40951,34301],{"class":133},[123,40953,40954],{"class":125,"line":9798},[123,40955,34306],{"class":192},[123,40957,40958,40960,40962,40964,40966],{"class":125,"line":9803},[123,40959,34311],{"class":133},[123,40961,9487],{"class":129},[123,40963,34316],{"class":133},[123,40965,325],{"class":182},[123,40967,140],{"class":133},[123,40969,40970],{"class":125,"line":9808},[123,40971,2409],{"emptyLinePlaceholder":50},[123,40973,40974],{"class":125,"line":9813},[123,40975,34329],{"class":192},[123,40977,40978,40980,40982,40984,40986],{"class":125,"line":9822},[123,40979,34334],{"class":133},[123,40981,179],{"class":129},[123,40983,34339],{"class":133},[123,40985,718],{"class":129},[123,40987,34344],{"class":133},[123,40989,40990],{"class":125,"line":9827},[123,40991,34349],{"class":192},[123,40993,40994,40996,40998,41000],{"class":125,"line":9833},[123,40995,32462],{"class":182},[123,40997,134],{"class":133},[123,40999,34358],{"class":238},[123,41001,34361],{"class":133},[123,41003,41004],{"class":125,"line":9854},[123,41005,2409],{"emptyLinePlaceholder":50},[123,41007,41008],{"class":125,"line":9860},[123,41009,34370],{"class":192},[123,41011,41012,41014,41016,41018,41020],{"class":125,"line":9874},[123,41013,1540],{"class":129},[123,41015,31231],{"class":182},[123,41017,2958],{"class":129},[123,41019,31236],{"class":238},[123,41021,3748],{"class":133},[123,41023,41024],{"class":125,"line":9880},[123,41025,34387],{"class":192},[123,41027,41028,41030,41032],{"class":125,"line":9907},[123,41029,31300],{"class":133},[123,41031,179],{"class":129},[123,41033,41034],{"class":133},"VGG16()\n",[123,41036,41037],{"class":125,"line":9916},[123,41038,34400],{"class":192},[123,41040,41041],{"class":125,"line":9922},[123,41042,34405],{"class":192},[123,41044,41045,41047,41049],{"class":125,"line":9930},[123,41046,34410],{"class":133},[123,41048,34413],{"class":238},[123,41050,30508],{"class":133},[123,41052,41053],{"class":125,"line":9935},[123,41054,34420],{"class":192},[123,41056,41057,41059,41061],{"class":125,"line":16614},[123,41058,34033],{"class":133},[123,41060,179],{"class":129},[123,41062,34429],{"class":133},[123,41064,41065],{"class":125,"line":16620},[123,41066,34434],{"class":192},[123,41068,41069],{"class":125,"line":16643},[123,41070,34439],{"class":133},[123,41072,41073],{"class":125,"line":16649},[123,41074,2409],{"emptyLinePlaceholder":50},[123,41076,41077],{"class":125,"line":16672},[123,41078,34448],{"class":192},[123,41080,41081],{"class":125,"line":16686},[123,41082,34453],{"class":192},[123,41084,41085,41087,41089,41091,41093,41095,41097],{"class":125,"line":16706},[123,41086,31248],{"class":133},[123,41088,179],{"class":129},[123,41090,31255],{"class":238},[123,41092,1713],{"class":129},[123,41094,31260],{"class":133},[123,41096,1710],{"class":129},[123,41098,34130],{"class":238},[123,41100,41101,41103,41105],{"class":125,"line":16712},[123,41102,31300],{"class":133},[123,41104,179],{"class":129},[123,41106,32300],{"class":133},[123,41108,41109],{"class":125,"line":16723},[123,41110,34482],{"class":192},[123,41112,41113],{"class":125,"line":16746},[123,41114,34487],{"class":192},[123,41116,41117,41119,41121,41123,41125,41127,41129,41131,41133,41135,41137,41139,41141,41143,41145,41147,41149,41151,41153,41155,41157,41159,41161],{"class":125,"line":16768},[123,41118,34492],{"class":133},[123,41120,179],{"class":129},[123,41122,1024],{"class":133},[123,41124,34499],{"class":238},[123,41126,512],{"class":133},[123,41128,34504],{"class":238},[123,41130,512],{"class":133},[123,41132,34509],{"class":238},[123,41134,512],{"class":133},[123,41136,34514],{"class":238},[123,41138,512],{"class":133},[123,41140,34519],{"class":238},[123,41142,512],{"class":133},[123,41144,34524],{"class":238},[123,41146,512],{"class":133},[123,41148,34529],{"class":238},[123,41150,512],{"class":133},[123,41152,34534],{"class":238},[123,41154,512],{"class":133},[123,41156,34539],{"class":238},[123,41158,512],{"class":133},[123,41160,34544],{"class":238},[123,41162,33257],{"class":133},[123,41164,41165,41167],{"class":125,"line":16773},[123,41166,34189],{"class":129},[123,41168,32895],{"class":133},[123,41170,41171],{"class":125,"line":16779},[123,41172,34557],{"class":192},[123,41174,41175,41177,41179,41181],{"class":125,"line":16793},[123,41176,3412],{"class":129},[123,41178,34564],{"class":133},[123,41180,26054],{"class":129},[123,41182,34208],{"class":133},[123,41184,41185,41187,41189],{"class":125,"line":16806},[123,41186,32621],{"class":133},[123,41188,179],{"class":129},[123,41190,32626],{"class":133},[123,41192,41193,41195,41197],{"class":125,"line":16811},[123,41194,32636],{"class":133},[123,41196,179],{"class":129},[123,41198,32641],{"class":133},[123,41200,41201],{"class":125,"line":16825},[123,41202,2409],{"emptyLinePlaceholder":50},[123,41204,41205],{"class":125,"line":16830},[123,41206,34593],{"class":192},[123,41208,41209],{"class":125,"line":16836},[123,41210,32886],{"class":133},[123,41212,41213],{"class":125,"line":16841},[123,41214,34602],{"class":192},[123,41216,41217,41219,41221],{"class":125,"line":16855},[123,41218,32671],{"class":133},[123,41220,179],{"class":129},[123,41222,32676],{"class":133},[123,41224,41225],{"class":125,"line":16860},[123,41226,34615],{"class":192},[123,41228,41229,41231,41233,41235,41237,41239,41241],{"class":125,"line":16865},[123,41230,32688],{"class":133},[123,41232,179],{"class":129},[123,41234,32693],{"class":133},[123,41236,32696],{"class":5226},[123,41238,179],{"class":129},[123,41240,351],{"class":182},[123,41242,140],{"class":133},[123,41244,41245],{"class":125,"line":16879},[123,41246,34636],{"class":192},[123,41248,41249,41251,41253],{"class":125,"line":16891},[123,41250,34641],{"class":133},[123,41252,179],{"class":129},[123,41254,34646],{"class":133},[123,41256,41257,41259,41261],{"class":125,"line":16896},[123,41258,34651],{"class":133},[123,41260,179],{"class":129},[123,41262,34656],{"class":133},[123,41264,41265,41267,41269,41271,41273,41275,41277,41279],{"class":125,"line":16909},[123,41266,34661],{"class":182},[123,41268,134],{"class":133},[123,41270,34666],{"class":238},[123,41272,34669],{"class":133},[123,41274,34672],{"class":238},[123,41276,512],{"class":133},[123,41278,34677],{"class":238},[123,41280,34680],{"class":133},[94,41282,41284],{"id":41283},"_23googlenet","2.3.GoogLeNet",[22008,41286,41288],{"id":41287},"_231原理","2.3.1.原理",[77,41290,41291],{},[80,41292,41293],{},"网络结构",[14,41295,41296],{},[35,41297],{"alt":37,"src":41298},"\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,41300,41301],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41303,41304],{},[35,41305],{"alt":37,"src":41306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-024.png",[14,41308,41309],{},[35,41310],{"alt":37,"src":41311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-025.png",[14,41313,41314],{},[35,41315],{"alt":37,"src":41316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-026.png",[77,41318,41319],{"start":45},[80,41320,41321],{},"1x1卷积的优点",[14,41323,41324],{},[35,41325],{"alt":37,"src":41326},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-027.png",[77,41328,41329],{"start":1189},[80,41330,41331],{},"全局平均池化层优点",[14,41333,41334],{},[35,41335],{"alt":37,"src":41336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-028.png",[14,41338,41339],{},[35,41340],{"alt":37,"src":41341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-029.png",[77,41343,41344],{"start":1204},[80,41345,41346],{},"参数详细描述",[14,41348,41349],{},[35,41350],{"alt":37,"src":41351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-030.png",[14,41353,41354],{},[35,41355],{"alt":37,"src":41356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-031.png",[14,41358,41359],{},[35,41360],{"alt":37,"src":41361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-032.png",[14,41363,41364],{},[35,41365],{"alt":37,"src":41366},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-033.png",[14,41368,41369],{},[35,41370],{"alt":37,"src":41371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-034.png",[14,41373,41374],{},[35,41375],{"alt":37,"src":41376},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-035.png",[14,41378,41379],{},[35,41380],{"alt":37,"src":41381},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-036.png",[14,41383,41384],{},[35,41385],{"alt":37,"src":41386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-037.png",[14,41388,41389],{},[35,41390],{"alt":37,"src":41391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-038.png",[14,41393,41394],{},[35,41395],{"alt":37,"src":41396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-039.png",[14,41398,41399],{},[35,41400],{"alt":37,"src":41401},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-040.png",[14,41403,41404],{},[35,41405],{"alt":37,"src":41406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-041.png",[14,41408,41409],{},[35,41410],{"alt":37,"src":41411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-042.png",[14,41413,41414],{},[35,41415],{"alt":37,"src":41416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-043.png",[14,41418,41419],{},[35,41420],{"alt":37,"src":41421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-044.png",[14,41423,41424],{},[35,41425],{"alt":37,"src":41426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-045.png",[14,41428,41429],{},[35,41430],{"alt":37,"src":41431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-046.png",[14,41433,41434],{},[35,41435],{"alt":37,"src":41436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-047.png",[14,41438,41439],{},[35,41440],{"alt":37,"src":41441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-048.png",[14,41443,41444],{},[35,41445],{"alt":37,"src":41446},"\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,41448,41449],{},[35,41450],{"alt":37,"src":41451},"\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",[22008,41453,41455],{"id":41454},"_232代码实现","2.3.2.代码实现",[77,41457,41458],{},[80,41459,30722],{},[14,41461,41462],{},"根据原理一步一步搭建即可",[114,41464,41466],{"className":30389,"code":41465,"language":30391,"meta":37,"style":37},"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",[120,41467,41468,41474,41484,41494,41498,41515,41524,41539,41549,41554,41587,41592,41629,41676,41681,41717,41764,41769,41774,41809,41841,41845,41853,41869,41893,41918,41939,41944,41959,41963,41967,41972,41989,41994,42003,42018,42029,42073,42077,42105,42109,42120,42148,42152,42189,42193,42221,42225,42236,42272,42304,42332,42336,42347,42381,42413,42445,42478,42512,42540,42544,42555,42588,42620,42634,42638,42651,42655,42660,42672,42680,42702,42707,42712,42717,42722,42727,42732,42746,42754,42763,42776,42791,42800,42804,42812,42823,42834,42845,42856,42867,42873,42877,42882,42894,42914,42923],{"__ignoreMap":37},[123,41469,41470,41472],{"class":125,"line":126},[123,41471,30403],{"class":129},[123,41473,30406],{"class":133},[123,41475,41476,41478,41480,41482],{"class":125,"line":45},[123,41477,30748],{"class":129},[123,41479,30751],{"class":133},[123,41481,30403],{"class":129},[123,41483,30756],{"class":133},[123,41485,41486,41488,41490,41492],{"class":125,"line":1189},[123,41487,30748],{"class":129},[123,41489,30768],{"class":133},[123,41491,30403],{"class":129},[123,41493,30773],{"class":133},[123,41495,41496],{"class":125,"line":1204},[123,41497,2409],{"emptyLinePlaceholder":50},[123,41499,41500,41502,41505,41507,41509,41511,41513],{"class":125,"line":1210},[123,41501,14704],{"class":129},[123,41503,41504],{"class":1972}," Inception",[123,41506,134],{"class":133},[123,41508,30789],{"class":1972},[123,41510,692],{"class":133},[123,41512,30794],{"class":1972},[123,41514,30797],{"class":133},[123,41516,41517,41519,41521],{"class":125,"line":1224},[123,41518,30812],{"class":129},[123,41520,30815],{"class":182},[123,41522,41523],{"class":133},"(self,in_channels,c1,c2,c3,c4):\n",[123,41525,41526,41528,41531,41533,41535,41537],{"class":125,"line":1230},[123,41527,30828],{"class":182},[123,41529,41530],{"class":133},"(Inception,",[123,41532,30834],{"class":182},[123,41534,30837],{"class":133},[123,41536,30840],{"class":182},[123,41538,1985],{"class":133},[123,41540,41541,41543,41545,41547],{"class":125,"line":1321},[123,41542,30856],{"class":182},[123,41544,34782],{"class":133},[123,41546,179],{"class":129},[123,41548,34787],{"class":133},[123,41550,41551],{"class":125,"line":1327},[123,41552,41553],{"class":192},"        # 路线1：定义1*1卷积\n",[123,41555,41556,41558,41561,41563,41565,41567,41569,41572,41574,41576,41579,41581,41583,41585],{"class":125,"line":1339},[123,41557,30856],{"class":182},[123,41559,41560],{"class":133},".p1_1",[123,41562,179],{"class":129},[123,41564,30864],{"class":133},[123,41566,30867],{"class":5226},[123,41568,179],{"class":129},[123,41570,41571],{"class":133},"in_channels,",[123,41573,30876],{"class":5226},[123,41575,179],{"class":129},[123,41577,41578],{"class":133},"c1,",[123,41580,30885],{"class":5226},[123,41582,179],{"class":129},[123,41584,351],{"class":182},[123,41586,140],{"class":133},[123,41588,41589],{"class":125,"line":1621},[123,41590,41591],{"class":192},"        # 路线2：定义1*1卷积和3*3\n",[123,41593,41594,41596,41599,41601,41603,41605,41607,41609,41611,41613,41616,41618,41621,41623,41625,41627],{"class":125,"line":1626},[123,41595,30856],{"class":182},[123,41597,41598],{"class":133},".p2_1",[123,41600,179],{"class":129},[123,41602,30864],{"class":133},[123,41604,30867],{"class":5226},[123,41606,179],{"class":129},[123,41608,41571],{"class":133},[123,41610,30876],{"class":5226},[123,41612,179],{"class":129},[123,41614,41615],{"class":133},"c2[",[123,41617,325],{"class":182},[123,41619,41620],{"class":133},"],",[123,41622,30885],{"class":5226},[123,41624,179],{"class":129},[123,41626,351],{"class":182},[123,41628,140],{"class":133},[123,41630,41631,41633,41636,41638,41640,41642,41644,41646,41648,41650,41652,41654,41656,41658,41660,41662,41664,41666,41668,41670,41672,41674],{"class":125,"line":1632},[123,41632,30856],{"class":182},[123,41634,41635],{"class":133},".p2_2",[123,41637,179],{"class":129},[123,41639,30864],{"class":133},[123,41641,30867],{"class":5226},[123,41643,179],{"class":129},[123,41645,41615],{"class":133},[123,41647,325],{"class":182},[123,41649,41620],{"class":133},[123,41651,30876],{"class":5226},[123,41653,179],{"class":129},[123,41655,41615],{"class":133},[123,41657,351],{"class":182},[123,41659,41620],{"class":133},[123,41661,30885],{"class":5226},[123,41663,179],{"class":129},[123,41665,205],{"class":182},[123,41667,512],{"class":133},[123,41669,30894],{"class":5226},[123,41671,179],{"class":129},[123,41673,351],{"class":182},[123,41675,140],{"class":133},[123,41677,41678],{"class":125,"line":1637},[123,41679,41680],{"class":192},"        # 路线3：定义1*1卷积和5*5\n",[123,41682,41683,41685,41688,41690,41692,41694,41696,41698,41700,41702,41705,41707,41709,41711,41713,41715],{"class":125,"line":1651},[123,41684,30856],{"class":182},[123,41686,41687],{"class":133},".p3_1",[123,41689,179],{"class":129},[123,41691,30864],{"class":133},[123,41693,30867],{"class":5226},[123,41695,179],{"class":129},[123,41697,41571],{"class":133},[123,41699,30876],{"class":5226},[123,41701,179],{"class":129},[123,41703,41704],{"class":133},"c3[",[123,41706,325],{"class":182},[123,41708,41620],{"class":133},[123,41710,30885],{"class":5226},[123,41712,179],{"class":129},[123,41714,351],{"class":182},[123,41716,140],{"class":133},[123,41718,41719,41721,41724,41726,41728,41730,41732,41734,41736,41738,41740,41742,41744,41746,41748,41750,41752,41754,41756,41758,41760,41762],{"class":125,"line":1656},[123,41720,30856],{"class":182},[123,41722,41723],{"class":133},".p3_2",[123,41725,179],{"class":129},[123,41727,30864],{"class":133},[123,41729,30867],{"class":5226},[123,41731,179],{"class":129},[123,41733,41704],{"class":133},[123,41735,325],{"class":182},[123,41737,41620],{"class":133},[123,41739,30876],{"class":5226},[123,41741,179],{"class":129},[123,41743,41704],{"class":133},[123,41745,351],{"class":182},[123,41747,41620],{"class":133},[123,41749,30885],{"class":5226},[123,41751,179],{"class":129},[123,41753,453],{"class":182},[123,41755,512],{"class":133},[123,41757,30894],{"class":5226},[123,41759,179],{"class":129},[123,41761,211],{"class":182},[123,41763,140],{"class":133},[123,41765,41766],{"class":125,"line":1662},[123,41767,41768],{"class":192},"        # 路线4：定义3*3最大池化和1*1卷积\n",[123,41770,41771],{"class":125,"line":1683},[123,41772,41773],{"class":192},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[123,41775,41776,41778,41781,41783,41785,41787,41789,41791,41793,41795,41797,41799,41801,41803,41805,41807],{"class":125,"line":1688},[123,41777,30856],{"class":182},[123,41779,41780],{"class":133},".p4_1",[123,41782,179],{"class":129},[123,41784,34840],{"class":133},[123,41786,30885],{"class":5226},[123,41788,179],{"class":129},[123,41790,205],{"class":182},[123,41792,512],{"class":133},[123,41794,30940],{"class":5226},[123,41796,179],{"class":129},[123,41798,351],{"class":182},[123,41800,512],{"class":133},[123,41802,30894],{"class":5226},[123,41804,179],{"class":129},[123,41806,351],{"class":182},[123,41808,140],{"class":133},[123,41810,41811,41813,41816,41818,41820,41822,41824,41826,41828,41830,41833,41835,41837,41839],{"class":125,"line":1702},[123,41812,30856],{"class":182},[123,41814,41815],{"class":133},".p4_2",[123,41817,179],{"class":129},[123,41819,30864],{"class":133},[123,41821,30867],{"class":5226},[123,41823,179],{"class":129},[123,41825,41571],{"class":133},[123,41827,30876],{"class":5226},[123,41829,179],{"class":129},[123,41831,41832],{"class":133},"c4,",[123,41834,30885],{"class":5226},[123,41836,179],{"class":129},[123,41838,351],{"class":182},[123,41840,140],{"class":133},[123,41842,41843],{"class":125,"line":1707},[123,41844,2409],{"emptyLinePlaceholder":50},[123,41846,41847,41849,41851],{"class":125,"line":1736},[123,41848,30812],{"class":129},[123,41850,31104],{"class":1972},[123,41852,31107],{"class":133},[123,41854,41855,41858,41860,41862,41864,41866],{"class":125,"line":1741},[123,41856,41857],{"class":133},"        p1",[123,41859,179],{"class":129},[123,41861,30834],{"class":182},[123,41863,35195],{"class":133},[123,41865,30834],{"class":182},[123,41867,41868],{"class":133},".p1_1(x))\n",[123,41870,41871,41873,41875,41877,41879,41881,41884,41886,41888,41890],{"class":125,"line":1758},[123,41872,7095],{"class":133},[123,41874,179],{"class":129},[123,41876,30834],{"class":182},[123,41878,35195],{"class":133},[123,41880,30834],{"class":182},[123,41882,41883],{"class":133},".p2_2(",[123,41885,30834],{"class":182},[123,41887,35195],{"class":133},[123,41889,30834],{"class":182},[123,41891,41892],{"class":133},".p2_1(x))))\n",[123,41894,41895,41898,41900,41902,41904,41906,41909,41911,41913,41915],{"class":125,"line":1763},[123,41896,41897],{"class":133},"        p3",[123,41899,179],{"class":129},[123,41901,30834],{"class":182},[123,41903,35195],{"class":133},[123,41905,30834],{"class":182},[123,41907,41908],{"class":133},".p3_2(",[123,41910,30834],{"class":182},[123,41912,35195],{"class":133},[123,41914,30834],{"class":182},[123,41916,41917],{"class":133},".p3_1(x))))\n",[123,41919,41920,41923,41925,41927,41929,41931,41934,41936],{"class":125,"line":1768},[123,41921,41922],{"class":133},"        p4",[123,41924,179],{"class":129},[123,41926,30834],{"class":182},[123,41928,35195],{"class":133},[123,41930,30834],{"class":182},[123,41932,41933],{"class":133},".p4_2(",[123,41935,30834],{"class":182},[123,41937,41938],{"class":133},".p4_1(x)))\n",[123,41940,41941],{"class":125,"line":1773},[123,41942,41943],{"class":192},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[123,41945,41946,41948,41951,41953,41955,41957],{"class":125,"line":1787},[123,41947,14762],{"class":129},[123,41949,41950],{"class":133}," torch.cat((p1,p2,p3,p4),",[123,41952,32696],{"class":5226},[123,41954,179],{"class":129},[123,41956,351],{"class":182},[123,41958,140],{"class":133},[123,41960,41961],{"class":125,"line":1792},[123,41962,2409],{"emptyLinePlaceholder":50},[123,41964,41965],{"class":125,"line":2586},[123,41966,2409],{"emptyLinePlaceholder":50},[123,41968,41969],{"class":125,"line":2600},[123,41970,41971],{"class":192},"# 搭建GoogLeNet网络\n",[123,41973,41974,41976,41979,41981,41983,41985,41987],{"class":125,"line":2608},[123,41975,14704],{"class":129},[123,41977,41978],{"class":1972}," GoogLeNet",[123,41980,134],{"class":133},[123,41982,30789],{"class":1972},[123,41984,692],{"class":133},[123,41986,30794],{"class":1972},[123,41988,30797],{"class":133},[123,41990,41991],{"class":125,"line":2613},[123,41992,41993],{"class":192},"    # 必须把Inception导入到里边\n",[123,41995,41996,41998,42000],{"class":125,"line":2619},[123,41997,30812],{"class":129},[123,41999,30815],{"class":182},[123,42001,42002],{"class":133},"(self,Inception):\n",[123,42004,42005,42007,42010,42012,42014,42016],{"class":125,"line":2625},[123,42006,30828],{"class":182},[123,42008,42009],{"class":133},"(GoogLeNet,",[123,42011,30834],{"class":182},[123,42013,30837],{"class":133},[123,42015,30840],{"class":182},[123,42017,1985],{"class":133},[123,42019,42020,42022,42025,42027],{"class":125,"line":2630},[123,42021,30856],{"class":182},[123,42023,42024],{"class":133},".b1",[123,42026,179],{"class":129},[123,42028,38020],{"class":133},[123,42030,42031,42033,42035,42037,42039,42041,42043,42045,42047,42049,42051,42053,42055,42057,42059,42061,42063,42065,42067,42069,42071],{"class":125,"line":7958},[123,42032,38025],{"class":133},[123,42034,30867],{"class":5226},[123,42036,179],{"class":129},[123,42038,351],{"class":182},[123,42040,512],{"class":133},[123,42042,30876],{"class":5226},[123,42044,179],{"class":129},[123,42046,337],{"class":182},[123,42048,512],{"class":133},[123,42050,30885],{"class":5226},[123,42052,179],{"class":129},[123,42054,503],{"class":182},[123,42056,512],{"class":133},[123,42058,30940],{"class":5226},[123,42060,179],{"class":129},[123,42062,211],{"class":182},[123,42064,512],{"class":133},[123,42066,30894],{"class":5226},[123,42068,179],{"class":129},[123,42070,205],{"class":182},[123,42072,38058],{"class":133},[123,42074,42075],{"class":125,"line":7982},[123,42076,38063],{"class":133},[123,42078,42079,42081,42083,42085,42087,42089,42091,42093,42095,42097,42099,42101,42103],{"class":125,"line":7987},[123,42080,38108],{"class":133},[123,42082,30885],{"class":5226},[123,42084,179],{"class":129},[123,42086,205],{"class":182},[123,42088,512],{"class":133},[123,42090,30940],{"class":5226},[123,42092,179],{"class":129},[123,42094,211],{"class":182},[123,42096,512],{"class":133},[123,42098,30894],{"class":5226},[123,42100,179],{"class":129},[123,42102,351],{"class":182},[123,42104,140],{"class":133},[123,42106,42107],{"class":125,"line":7993},[123,42108,38137],{"class":133},[123,42110,42111,42113,42116,42118],{"class":125,"line":8020},[123,42112,30856],{"class":182},[123,42114,42115],{"class":133},".b2",[123,42117,179],{"class":129},[123,42119,38020],{"class":133},[123,42121,42122,42124,42126,42128,42130,42132,42134,42136,42138,42140,42142,42144,42146],{"class":125,"line":8025},[123,42123,38025],{"class":133},[123,42125,30867],{"class":5226},[123,42127,179],{"class":129},[123,42129,337],{"class":182},[123,42131,512],{"class":133},[123,42133,30876],{"class":5226},[123,42135,179],{"class":129},[123,42137,337],{"class":182},[123,42139,512],{"class":133},[123,42141,30885],{"class":5226},[123,42143,179],{"class":129},[123,42145,351],{"class":182},[123,42147,38058],{"class":133},[123,42149,42150],{"class":125,"line":8031},[123,42151,38063],{"class":133},[123,42153,42154,42156,42158,42160,42162,42164,42166,42168,42171,42173,42175,42177,42179,42181,42183,42185,42187],{"class":125,"line":8043},[123,42155,38025],{"class":133},[123,42157,30867],{"class":5226},[123,42159,179],{"class":129},[123,42161,337],{"class":182},[123,42163,512],{"class":133},[123,42165,30876],{"class":5226},[123,42167,179],{"class":129},[123,42169,42170],{"class":182},"192",[123,42172,512],{"class":133},[123,42174,30885],{"class":5226},[123,42176,179],{"class":129},[123,42178,205],{"class":182},[123,42180,512],{"class":133},[123,42182,30894],{"class":5226},[123,42184,179],{"class":129},[123,42186,351],{"class":182},[123,42188,38058],{"class":133},[123,42190,42191],{"class":125,"line":8055},[123,42192,38063],{"class":133},[123,42194,42195,42197,42199,42201,42203,42205,42207,42209,42211,42213,42215,42217,42219],{"class":125,"line":8067},[123,42196,38108],{"class":133},[123,42198,30885],{"class":5226},[123,42200,179],{"class":129},[123,42202,205],{"class":182},[123,42204,512],{"class":133},[123,42206,30940],{"class":5226},[123,42208,179],{"class":129},[123,42210,211],{"class":182},[123,42212,512],{"class":133},[123,42214,30894],{"class":5226},[123,42216,179],{"class":129},[123,42218,351],{"class":182},[123,42220,140],{"class":133},[123,42222,42223],{"class":125,"line":9726},[123,42224,38137],{"class":133},[123,42226,42227,42229,42232,42234],{"class":125,"line":9751},[123,42228,30856],{"class":182},[123,42230,42231],{"class":133},".b3",[123,42233,179],{"class":129},[123,42235,38020],{"class":133},[123,42237,42238,42241,42243,42245,42247,42250,42252,42254,42256,42259,42261,42263,42265,42268,42270],{"class":125,"line":9774},[123,42239,42240],{"class":133},"            Inception(",[123,42242,42170],{"class":182},[123,42244,512],{"class":133},[123,42246,337],{"class":182},[123,42248,42249],{"class":133},",(",[123,42251,343],{"class":182},[123,42253,512],{"class":133},[123,42255,32081],{"class":182},[123,42257,42258],{"class":133},"),(",[123,42260,735],{"class":182},[123,42262,512],{"class":133},[123,42264,331],{"class":182},[123,42266,42267],{"class":133},"),",[123,42269,331],{"class":182},[123,42271,38058],{"class":133},[123,42273,42274,42276,42278,42280,42282,42284,42286,42288,42290,42292,42294,42296,42298,42300,42302],{"class":125,"line":9798},[123,42275,42240],{"class":133},[123,42277,34881],{"class":182},[123,42279,512],{"class":133},[123,42281,32081],{"class":182},[123,42283,42249],{"class":133},[123,42285,32081],{"class":182},[123,42287,512],{"class":133},[123,42289,42170],{"class":182},[123,42291,42258],{"class":133},[123,42293,331],{"class":182},[123,42295,512],{"class":133},[123,42297,343],{"class":182},[123,42299,42267],{"class":133},[123,42301,337],{"class":182},[123,42303,38058],{"class":133},[123,42305,42306,42308,42310,42312,42314,42316,42318,42320,42322,42324,42326,42328,42330],{"class":125,"line":9803},[123,42307,38108],{"class":133},[123,42309,30885],{"class":5226},[123,42311,179],{"class":129},[123,42313,205],{"class":182},[123,42315,512],{"class":133},[123,42317,30940],{"class":5226},[123,42319,179],{"class":129},[123,42321,211],{"class":182},[123,42323,512],{"class":133},[123,42325,30894],{"class":5226},[123,42327,179],{"class":129},[123,42329,351],{"class":182},[123,42331,140],{"class":133},[123,42333,42334],{"class":125,"line":9808},[123,42335,38137],{"class":133},[123,42337,42338,42340,42343,42345],{"class":125,"line":9813},[123,42339,30856],{"class":182},[123,42341,42342],{"class":133},".b4",[123,42344,179],{"class":129},[123,42346,38020],{"class":133},[123,42348,42349,42351,42354,42356,42358,42360,42362,42364,42367,42369,42371,42373,42375,42377,42379],{"class":125,"line":9822},[123,42350,42240],{"class":133},[123,42352,42353],{"class":182},"480",[123,42355,512],{"class":133},[123,42357,42170],{"class":182},[123,42359,42249],{"class":133},[123,42361,343],{"class":182},[123,42363,512],{"class":133},[123,42365,42366],{"class":182},"208",[123,42368,42258],{"class":133},[123,42370,735],{"class":182},[123,42372,512],{"class":133},[123,42374,741],{"class":182},[123,42376,42267],{"class":133},[123,42378,337],{"class":182},[123,42380,38058],{"class":133},[123,42382,42383,42385,42387,42389,42391,42393,42395,42397,42399,42401,42403,42405,42407,42409,42411],{"class":125,"line":9827},[123,42384,42240],{"class":133},[123,42386,38468],{"class":182},[123,42388,512],{"class":133},[123,42390,21058],{"class":182},[123,42392,42249],{"class":133},[123,42394,752],{"class":182},[123,42396,512],{"class":133},[123,42398,31512],{"class":182},[123,42400,42258],{"class":133},[123,42402,934],{"class":182},[123,42404,512],{"class":133},[123,42406,337],{"class":182},[123,42408,42267],{"class":133},[123,42410,337],{"class":182},[123,42412,38058],{"class":133},[123,42414,42415,42417,42419,42421,42423,42425,42427,42429,42431,42433,42435,42437,42439,42441,42443],{"class":125,"line":9833},[123,42416,42240],{"class":133},[123,42418,38468],{"class":182},[123,42420,512],{"class":133},[123,42422,32081],{"class":182},[123,42424,42249],{"class":133},[123,42426,32081],{"class":182},[123,42428,512],{"class":133},[123,42430,34881],{"class":182},[123,42432,42258],{"class":133},[123,42434,934],{"class":182},[123,42436,512],{"class":133},[123,42438,337],{"class":182},[123,42440,42267],{"class":133},[123,42442,337],{"class":182},[123,42444,38058],{"class":133},[123,42446,42447,42449,42451,42453,42455,42457,42459,42461,42464,42466,42468,42470,42472,42474,42476],{"class":125,"line":9854},[123,42448,42240],{"class":133},[123,42450,38468],{"class":182},[123,42452,512],{"class":133},[123,42454,752],{"class":182},[123,42456,42249],{"class":133},[123,42458,32081],{"class":182},[123,42460,512],{"class":133},[123,42462,42463],{"class":182},"288",[123,42465,42258],{"class":133},[123,42467,331],{"class":182},[123,42469,512],{"class":133},[123,42471,337],{"class":182},[123,42473,42267],{"class":133},[123,42475,337],{"class":182},[123,42477,38058],{"class":133},[123,42479,42480,42482,42485,42487,42489,42491,42493,42495,42498,42500,42502,42504,42506,42508,42510],{"class":125,"line":9860},[123,42481,42240],{"class":133},[123,42483,42484],{"class":182},"528",[123,42486,512],{"class":133},[123,42488,34881],{"class":182},[123,42490,42249],{"class":133},[123,42492,21058],{"class":182},[123,42494,512],{"class":133},[123,42496,42497],{"class":182},"320",[123,42499,42258],{"class":133},[123,42501,331],{"class":182},[123,42503,512],{"class":133},[123,42505,32081],{"class":182},[123,42507,42267],{"class":133},[123,42509,32081],{"class":182},[123,42511,38058],{"class":133},[123,42513,42514,42516,42518,42520,42522,42524,42526,42528,42530,42532,42534,42536,42538],{"class":125,"line":9874},[123,42515,38108],{"class":133},[123,42517,30885],{"class":5226},[123,42519,179],{"class":129},[123,42521,205],{"class":182},[123,42523,512],{"class":133},[123,42525,30940],{"class":5226},[123,42527,179],{"class":129},[123,42529,211],{"class":182},[123,42531,512],{"class":133},[123,42533,30894],{"class":5226},[123,42535,179],{"class":129},[123,42537,351],{"class":182},[123,42539,140],{"class":133},[123,42541,42542],{"class":125,"line":9880},[123,42543,38137],{"class":133},[123,42545,42546,42548,42551,42553],{"class":125,"line":9907},[123,42547,30856],{"class":182},[123,42549,42550],{"class":133},".b5",[123,42552,179],{"class":129},[123,42554,38020],{"class":133},[123,42556,42557,42559,42562,42564,42566,42568,42570,42572,42574,42576,42578,42580,42582,42584,42586],{"class":125,"line":9916},[123,42558,42240],{"class":133},[123,42560,42561],{"class":182},"832",[123,42563,512],{"class":133},[123,42565,34881],{"class":182},[123,42567,42249],{"class":133},[123,42569,21058],{"class":182},[123,42571,512],{"class":133},[123,42573,42497],{"class":182},[123,42575,42258],{"class":133},[123,42577,331],{"class":182},[123,42579,512],{"class":133},[123,42581,32081],{"class":182},[123,42583,42267],{"class":133},[123,42585,32081],{"class":182},[123,42587,38058],{"class":133},[123,42589,42590,42592,42594,42596,42598,42600,42602,42604,42606,42608,42610,42612,42614,42616,42618],{"class":125,"line":9922},[123,42591,42240],{"class":133},[123,42593,42561],{"class":182},[123,42595,512],{"class":133},[123,42597,34951],{"class":182},[123,42599,42249],{"class":133},[123,42601,42170],{"class":182},[123,42603,512],{"class":133},[123,42605,34951],{"class":182},[123,42607,42258],{"class":133},[123,42609,741],{"class":182},[123,42611,512],{"class":133},[123,42613,32081],{"class":182},[123,42615,42267],{"class":133},[123,42617,32081],{"class":182},[123,42619,38058],{"class":133},[123,42621,42622,42625,42627,42629,42631],{"class":125,"line":9930},[123,42623,42624],{"class":133},"            nn.AdaptiveAvgPool2d((",[123,42626,351],{"class":182},[123,42628,512],{"class":133},[123,42630,351],{"class":182},[123,42632,42633],{"class":133},")),\n",[123,42635,42636],{"class":125,"line":9935},[123,42637,38801],{"class":133},[123,42639,42640,42642,42645,42647,42649],{"class":125,"line":16614},[123,42641,38806],{"class":133},[123,42643,42644],{"class":182},"1024",[123,42646,512],{"class":133},[123,42648,580],{"class":182},[123,42650,140],{"class":133},[123,42652,42653],{"class":125,"line":16620},[123,42654,38137],{"class":133},[123,42656,42657],{"class":125,"line":16643},[123,42658,42659],{"class":192},"        # 对模型参数初始化\n",[123,42661,42662,42664,42666,42668,42670],{"class":125,"line":16649},[123,42663,3412],{"class":129},[123,42665,38879],{"class":133},[123,42667,26054],{"class":129},[123,42669,38884],{"class":182},[123,42671,38887],{"class":133},[123,42673,42674,42676,42678],{"class":125,"line":16672},[123,42675,4651],{"class":129},[123,42677,38899],{"class":182},[123,42679,38902],{"class":133},[123,42681,42682,42684,42687,42689,42692,42694,42696,42698,42700],{"class":125,"line":16686},[123,42683,38912],{"class":133},[123,42685,42686],{"class":5226},"mode",[123,42688,179],{"class":129},[123,42690,42691],{"class":238},"'fan_out'",[123,42693,512],{"class":133},[123,42695,38915],{"class":5226},[123,42697,179],{"class":129},[123,42699,38920],{"class":238},[123,42701,140],{"class":133},[123,42703,42704],{"class":125,"line":16706},[123,42705,42706],{"class":192},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[123,42708,42709],{"class":125,"line":16712},[123,42710,42711],{"class":192},"                # ② mode = 'fan_out'决定使用的fan值：\n",[123,42713,42714],{"class":125,"line":16723},[123,42715,42716],{"class":192},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[123,42718,42719],{"class":125,"line":16746},[123,42720,42721],{"class":192},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[123,42723,42724],{"class":125,"line":16768},[123,42725,42726],{"class":192},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[123,42728,42729],{"class":125,"line":16773},[123,42730,42731],{"class":192},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[123,42733,42734,42736,42738,42740,42742,42744],{"class":125,"line":16779},[123,42735,38932],{"class":129},[123,42737,38935],{"class":133},[123,42739,38938],{"class":129},[123,42741,38941],{"class":129},[123,42743,38944],{"class":182},[123,42745,3748],{"class":133},[123,42747,42748,42750,42752],{"class":125,"line":16793},[123,42749,38956],{"class":133},[123,42751,325],{"class":182},[123,42753,140],{"class":133},[123,42755,42756,42759,42761],{"class":125,"line":16806},[123,42757,42758],{"class":129},"                elif",[123,42760,38899],{"class":182},[123,42762,38975],{"class":133},[123,42764,42765,42768,42770,42772,42774],{"class":125,"line":16811},[123,42766,42767],{"class":133},"                    nn.init.normal_(m.weight,",[123,42769,325],{"class":182},[123,42771,512],{"class":133},[123,42773,38997],{"class":182},[123,42775,140],{"class":133},[123,42777,42778,42781,42783,42785,42787,42789],{"class":125,"line":16825},[123,42779,42780],{"class":129},"                    if",[123,42782,38935],{"class":133},[123,42784,38938],{"class":129},[123,42786,38941],{"class":129},[123,42788,38944],{"class":182},[123,42790,3748],{"class":133},[123,42792,42793,42796,42798],{"class":125,"line":16830},[123,42794,42795],{"class":133},"                        nn.init.constant_(m.bias,",[123,42797,325],{"class":182},[123,42799,140],{"class":133},[123,42801,42802],{"class":125,"line":16836},[123,42803,35176],{"class":192},[123,42805,42806,42808,42810],{"class":125,"line":16841},[123,42807,30812],{"class":129},[123,42809,31104],{"class":1972},[123,42811,31107],{"class":133},[123,42813,42814,42816,42818,42820],{"class":125,"line":16855},[123,42815,31112],{"class":133},[123,42817,179],{"class":129},[123,42819,30834],{"class":182},[123,42821,42822],{"class":133},".b1(x)\n",[123,42824,42825,42827,42829,42831],{"class":125,"line":16860},[123,42826,31112],{"class":133},[123,42828,179],{"class":129},[123,42830,30834],{"class":182},[123,42832,42833],{"class":133},".b2(x)\n",[123,42835,42836,42838,42840,42842],{"class":125,"line":16865},[123,42837,31112],{"class":133},[123,42839,179],{"class":129},[123,42841,30834],{"class":182},[123,42843,42844],{"class":133},".b3(x)\n",[123,42846,42847,42849,42851,42853],{"class":125,"line":16879},[123,42848,31112],{"class":133},[123,42850,179],{"class":129},[123,42852,30834],{"class":182},[123,42854,42855],{"class":133},".b4(x)\n",[123,42857,42858,42860,42862,42864],{"class":125,"line":16891},[123,42859,31112],{"class":133},[123,42861,179],{"class":129},[123,42863,30834],{"class":182},[123,42865,42866],{"class":133},".b5(x)\n",[123,42868,42869,42871],{"class":125,"line":16896},[123,42870,14762],{"class":129},[123,42872,31220],{"class":133},[123,42874,42875],{"class":125,"line":16909},[123,42876,2409],{"emptyLinePlaceholder":50},[123,42878,42879],{"class":125,"line":16914},[123,42880,42881],{"class":192},"# 模型展示\n",[123,42883,42884,42886,42888,42890,42892],{"class":125,"line":16919},[123,42885,1540],{"class":129},[123,42887,31231],{"class":182},[123,42889,2958],{"class":129},[123,42891,31236],{"class":238},[123,42893,3748],{"class":133},[123,42895,42896,42898,42900,42902,42904,42906,42908,42910,42912],{"class":125,"line":16924},[123,42897,31248],{"class":133},[123,42899,179],{"class":129},[123,42901,30462],{"class":133},[123,42903,31255],{"class":238},[123,42905,1713],{"class":129},[123,42907,31260],{"class":133},[123,42909,1710],{"class":129},[123,42911,30487],{"class":238},[123,42913,140],{"class":133},[123,42915,42916,42918,42920],{"class":125,"line":16937},[123,42917,31300],{"class":133},[123,42919,179],{"class":129},[123,42921,42922],{"class":133},"GoogLeNet(Inception).to(device)\n",[123,42924,42925,42927,42929,42931,42933,42935,42937,42939],{"class":125,"line":16942},[123,42926,31310],{"class":182},[123,42928,31313],{"class":133},[123,42930,351],{"class":182},[123,42932,512],{"class":133},[123,42934,31512],{"class":182},[123,42936,512],{"class":133},[123,42938,31512],{"class":182},[123,42940,31326],{"class":133},[77,42942,42943],{"start":45},[80,42944,39194],{},[114,42946,42948],{"className":30389,"code":42947,"language":30391,"meta":37,"style":37},"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",[120,42949,42950,42956,42962,42972,42978,42988,42998,43008,43018,43028,43032,43043,43053,43057,43061,43065,43073,43085,43095,43111,43121,43153,43167,43177,43187,43191,43201,43215,43225,43235,43245,43251,43255,43259,43263,43267,43271,43279,43299,43303,43307,43311,43315,43319,43335,43339,43343,43351,43355,43359,43367,43371,43375,43379,43387,43391,43395,43399,43403,43411,43415,43423,43427,43435,43439,43447,43451,43459,43463,43467,43475,43479,43483,43487,43499,43523,43537,43541,43545,43549,43557,43561,43569,43573,43581,43585,43593,43597,43605,43609,43617,43621,43633,43637,43645,43649,43657,43661,43665,43669,43673,43681,43685,43701,43705,43713,43717,43721,43725,43729,43733,43737,43741,43757,43761,43773,43777,43789,43793,43805,43809,43817,43821,43829,43833,43837,43841,43847,43851,43859,43863,43879,43883,43891,43895,43911,43923,43927,43939,43943,43947,43955,43959,43963,43971,43975,43983,43987,43995,43999,44003,44045,44087,44091,44095,44111,44115,44131,44135,44139,44147,44151,44155,44167,44205,44209,44213,44221,44225,44239,44249,44255,44261,44267,44273,44277,44281,44287,44291,44295,44303,44307,44325,44329,44333,44337,44353,44357,44361,44365,44369,44373,44393,44413,44417,44421,44425,44433,44441,44445,44461,44481,44501,44505,44509,44517,44525,44529,44533,44537,44549,44553,44563,44571,44588],{"__ignoreMap":37},[123,42951,42952,42954],{"class":125,"line":126},[123,42953,30403],{"class":129},[123,42955,31833],{"class":133},[123,42957,42958,42960],{"class":125,"line":45},[123,42959,30403],{"class":129},[123,42961,31840],{"class":133},[123,42963,42964,42966,42968,42970],{"class":125,"line":1189},[123,42965,30403],{"class":129},[123,42967,31851],{"class":133},[123,42969,31394],{"class":129},[123,42971,31856],{"class":133},[123,42973,42974,42976],{"class":125,"line":1204},[123,42975,30403],{"class":129},[123,42977,30406],{"class":133},[123,42979,42980,42982,42984,42986],{"class":125,"line":1210},[123,42981,30748],{"class":129},[123,42983,31426],{"class":133},[123,42985,30403],{"class":129},[123,42987,31873],{"class":133},[123,42989,42990,42992,42994,42996],{"class":125,"line":1224},[123,42991,30748],{"class":129},[123,42993,31379],{"class":133},[123,42995,30403],{"class":129},[123,42997,31384],{"class":133},[123,42999,43000,43002,43004,43006],{"class":125,"line":1230},[123,43001,30748],{"class":129},[123,43003,31409],{"class":133},[123,43005,30403],{"class":129},[123,43007,31414],{"class":133},[123,43009,43010,43012,43014,43016],{"class":125,"line":1321},[123,43011,30403],{"class":129},[123,43013,31426],{"class":133},[123,43015,31394],{"class":129},[123,43017,31431],{"class":133},[123,43019,43020,43022,43024,43026],{"class":125,"line":1327},[123,43021,30403],{"class":129},[123,43023,31443],{"class":133},[123,43025,31394],{"class":129},[123,43027,31448],{"class":133},[123,43029,43030],{"class":125,"line":1339},[123,43031,31918],{"class":192},[123,43033,43034,43036,43038,43040],{"class":125,"line":1621},[123,43035,30748],{"class":129},[123,43037,31925],{"class":133},[123,43039,30403],{"class":129},[123,43041,43042],{"class":133}," GoogLeNet, Inception\n",[123,43044,43045,43047,43049,43051],{"class":125,"line":1626},[123,43046,30748],{"class":129},[123,43048,30751],{"class":133},[123,43050,30403],{"class":129},[123,43052,30756],{"class":133},[123,43054,43055],{"class":125,"line":1632},[123,43056,2409],{"emptyLinePlaceholder":50},[123,43058,43059],{"class":125,"line":1637},[123,43060,2409],{"emptyLinePlaceholder":50},[123,43062,43063],{"class":125,"line":1651},[123,43064,31953],{"class":192},[123,43066,43067,43069,43071],{"class":125,"line":1656},[123,43068,31958],{"class":129},[123,43070,31961],{"class":1972},[123,43072,31964],{"class":133},[123,43074,43075,43077,43079,43081,43083],{"class":125,"line":1662},[123,43076,31969],{"class":133},[123,43078,179],{"class":129},[123,43080,31466],{"class":133},[123,43082,31474],{"class":238},[123,43084,31477],{"class":133},[123,43086,43087,43089,43091,43093],{"class":125,"line":1683},[123,43088,31982],{"class":5226},[123,43090,179],{"class":129},[123,43092,31487],{"class":182},[123,43094,31477],{"class":133},[123,43096,43097,43099,43101,43103,43105,43107,43109],{"class":125,"line":1688},[123,43098,31993],{"class":5226},[123,43100,179],{"class":129},[123,43102,31504],{"class":133},[123,43104,31507],{"class":5226},[123,43106,179],{"class":129},[123,43108,35460],{"class":182},[123,43110,31515],{"class":133},[123,43112,43113,43115,43117,43119],{"class":125,"line":1702},[123,43114,32010],{"class":5226},[123,43116,179],{"class":129},[123,43118,31487],{"class":182},[123,43120,140],{"class":133},[123,43122,43123,43125,43127,43129,43131,43133,43135,43137,43139,43141,43143,43145,43147,43149,43151],{"class":125,"line":1707},[123,43124,32021],{"class":133},[123,43126,179],{"class":129},[123,43128,32026],{"class":133},[123,43130,32029],{"class":182},[123,43132,134],{"class":133},[123,43134,32034],{"class":182},[123,43136,589],{"class":129},[123,43138,7368],{"class":182},[123,43140,32041],{"class":133},[123,43142,32029],{"class":182},[123,43144,134],{"class":133},[123,43146,32048],{"class":182},[123,43148,589],{"class":129},[123,43150,7368],{"class":182},[123,43152,32055],{"class":133},[123,43154,43155,43157,43159,43161,43163,43165],{"class":125,"line":1736},[123,43156,32060],{"class":133},[123,43158,179],{"class":129},[123,43160,32065],{"class":133},[123,43162,31548],{"class":5226},[123,43164,179],{"class":129},[123,43166,31553],{"class":133},[123,43168,43169,43171,43173,43175],{"class":125,"line":1741},[123,43170,32076],{"class":5226},[123,43172,179],{"class":129},[123,43174,331],{"class":182},[123,43176,31477],{"class":133},[123,43178,43179,43181,43183,43185],{"class":125,"line":1758},[123,43180,32088],{"class":5226},[123,43182,179],{"class":129},[123,43184,31487],{"class":182},[123,43186,31477],{"class":133},[123,43188,43189],{"class":125,"line":1763},[123,43190,32099],{"class":192},[123,43192,43193,43195,43197,43199],{"class":125,"line":1768},[123,43194,32104],{"class":5226},[123,43196,179],{"class":129},[123,43198,529],{"class":182},[123,43200,140],{"class":133},[123,43202,43203,43205,43207,43209,43211,43213],{"class":125,"line":1773},[123,43204,32115],{"class":133},[123,43206,179],{"class":129},[123,43208,31545],{"class":133},[123,43210,31548],{"class":5226},[123,43212,179],{"class":129},[123,43214,32126],{"class":133},[123,43216,43217,43219,43221,43223],{"class":125,"line":1787},[123,43218,32131],{"class":5226},[123,43220,179],{"class":129},[123,43222,331],{"class":182},[123,43224,31477],{"class":133},[123,43226,43227,43229,43231,43233],{"class":125,"line":1792},[123,43228,32142],{"class":5226},[123,43230,179],{"class":129},[123,43232,31487],{"class":182},[123,43234,31477],{"class":133},[123,43236,43237,43239,43241,43243],{"class":125,"line":2586},[123,43238,32153],{"class":5226},[123,43240,179],{"class":129},[123,43242,529],{"class":182},[123,43244,140],{"class":133},[123,43246,43247,43249],{"class":125,"line":2600},[123,43248,4099],{"class":129},[123,43250,32166],{"class":133},[123,43252,43253],{"class":125,"line":2608},[123,43254,2409],{"emptyLinePlaceholder":50},[123,43256,43257],{"class":125,"line":2613},[123,43258,32175],{"class":192},[123,43260,43261],{"class":125,"line":2619},[123,43262,32180],{"class":192},[123,43264,43265],{"class":125,"line":2625},[123,43266,2409],{"emptyLinePlaceholder":50},[123,43268,43269],{"class":125,"line":2630},[123,43270,32189],{"class":192},[123,43272,43273,43275,43277],{"class":125,"line":7958},[123,43274,31958],{"class":129},[123,43276,32196],{"class":1972},[123,43278,32199],{"class":133},[123,43280,43281,43283,43285,43287,43289,43291,43293,43295,43297],{"class":125,"line":7982},[123,43282,31248],{"class":133},[123,43284,179],{"class":129},[123,43286,30462],{"class":133},[123,43288,31255],{"class":238},[123,43290,1713],{"class":129},[123,43292,31260],{"class":133},[123,43294,1710],{"class":129},[123,43296,32218],{"class":238},[123,43298,140],{"class":133},[123,43300,43301],{"class":125,"line":7987},[123,43302,2409],{"emptyLinePlaceholder":50},[123,43304,43305],{"class":125,"line":7993},[123,43306,2409],{"emptyLinePlaceholder":50},[123,43308,43309],{"class":125,"line":8020},[123,43310,32233],{"class":192},[123,43312,43313],{"class":125,"line":8025},[123,43314,32238],{"class":192},[123,43316,43317],{"class":125,"line":8031},[123,43318,32243],{"class":192},[123,43320,43321,43323,43325,43327,43329,43331,43333],{"class":125,"line":8043},[123,43322,32248],{"class":133},[123,43324,179],{"class":129},[123,43326,32253],{"class":133},[123,43328,32256],{"class":5226},[123,43330,179],{"class":129},[123,43332,32261],{"class":182},[123,43334,140],{"class":133},[123,43336,43337],{"class":125,"line":8055},[123,43338,2409],{"emptyLinePlaceholder":50},[123,43340,43341],{"class":125,"line":8067},[123,43342,32272],{"class":192},[123,43344,43345,43347,43349],{"class":125,"line":9726},[123,43346,32277],{"class":133},[123,43348,179],{"class":129},[123,43350,32282],{"class":133},[123,43352,43353],{"class":125,"line":9751},[123,43354,2409],{"emptyLinePlaceholder":50},[123,43356,43357],{"class":125,"line":9774},[123,43358,32291],{"class":192},[123,43360,43361,43363,43365],{"class":125,"line":9798},[123,43362,31300],{"class":133},[123,43364,179],{"class":129},[123,43366,32300],{"class":133},[123,43368,43369],{"class":125,"line":9803},[123,43370,32305],{"class":192},[123,43372,43373],{"class":125,"line":9808},[123,43374,32310],{"class":192},[123,43376,43377],{"class":125,"line":9813},[123,43378,32315],{"class":192},[123,43380,43381,43383,43385],{"class":125,"line":9822},[123,43382,32320],{"class":133},[123,43384,179],{"class":129},[123,43386,32325],{"class":133},[123,43388,43389],{"class":125,"line":9827},[123,43390,2409],{"emptyLinePlaceholder":50},[123,43392,43393],{"class":125,"line":9833},[123,43394,2409],{"emptyLinePlaceholder":50},[123,43396,43397],{"class":125,"line":9854},[123,43398,32338],{"class":192},[123,43400,43401],{"class":125,"line":9860},[123,43402,32343],{"class":192},[123,43404,43405,43407,43409],{"class":125,"line":9874},[123,43406,32348],{"class":133},[123,43408,179],{"class":129},[123,43410,32353],{"class":182},[123,43412,43413],{"class":125,"line":9880},[123,43414,32358],{"class":192},[123,43416,43417,43419,43421],{"class":125,"line":9907},[123,43418,32363],{"class":133},[123,43420,179],{"class":129},[123,43422,32368],{"class":133},[123,43424,43425],{"class":125,"line":9916},[123,43426,32373],{"class":192},[123,43428,43429,43431,43433],{"class":125,"line":9922},[123,43430,32378],{"class":133},[123,43432,179],{"class":129},[123,43434,32368],{"class":133},[123,43436,43437],{"class":125,"line":9930},[123,43438,32387],{"class":192},[123,43440,43441,43443,43445],{"class":125,"line":9935},[123,43442,32392],{"class":133},[123,43444,179],{"class":129},[123,43446,32368],{"class":133},[123,43448,43449],{"class":125,"line":16614},[123,43450,32401],{"class":192},[123,43452,43453,43455,43457],{"class":125,"line":16620},[123,43454,32406],{"class":133},[123,43456,179],{"class":129},[123,43458,32368],{"class":133},[123,43460,43461],{"class":125,"line":16643},[123,43462,2409],{"emptyLinePlaceholder":50},[123,43464,43465],{"class":125,"line":16649},[123,43466,32419],{"class":192},[123,43468,43469,43471,43473],{"class":125,"line":16672},[123,43470,32424],{"class":133},[123,43472,179],{"class":129},[123,43474,32429],{"class":133},[123,43476,43477],{"class":125,"line":16686},[123,43478,2409],{"emptyLinePlaceholder":50},[123,43480,43481],{"class":125,"line":16706},[123,43482,2409],{"emptyLinePlaceholder":50},[123,43484,43485],{"class":125,"line":16712},[123,43486,32442],{"class":192},[123,43488,43489,43491,43493,43495,43497],{"class":125,"line":16723},[123,43490,3210],{"class":129},[123,43492,32449],{"class":133},[123,43494,26054],{"class":129},[123,43496,32454],{"class":182},[123,43498,32457],{"class":133},[123,43500,43501,43503,43505,43507,43509,43511,43513,43515,43517,43519,43521],{"class":125,"line":16746},[123,43502,32462],{"class":182},[123,43504,134],{"class":133},[123,43506,32467],{"class":238},[123,43508,32470],{"class":182},[123,43510,718],{"class":238},[123,43512,32470],{"class":182},[123,43514,385],{"class":238},[123,43516,32479],{"class":133},[123,43518,666],{"class":129},[123,43520,351],{"class":182},[123,43522,30508],{"class":133},[123,43524,43525,43527,43529,43531,43533,43535],{"class":125,"line":16768},[123,43526,32462],{"class":182},[123,43528,134],{"class":133},[123,43530,32494],{"class":238},[123,43532,589],{"class":129},[123,43534,580],{"class":182},[123,43536,140],{"class":133},[123,43538,43539],{"class":125,"line":16773},[123,43540,2409],{"emptyLinePlaceholder":50},[123,43542,43543],{"class":125,"line":16779},[123,43544,32509],{"class":192},[123,43546,43547],{"class":125,"line":16793},[123,43548,32514],{"class":192},[123,43550,43551,43553,43555],{"class":125,"line":16806},[123,43552,32519],{"class":133},[123,43554,179],{"class":129},[123,43556,32353],{"class":182},[123,43558,43559],{"class":125,"line":16811},[123,43560,32528],{"class":192},[123,43562,43563,43565,43567],{"class":125,"line":16825},[123,43564,32533],{"class":133},[123,43566,179],{"class":129},[123,43568,3094],{"class":182},[123,43570,43571],{"class":125,"line":16830},[123,43572,32542],{"class":192},[123,43574,43575,43577,43579],{"class":125,"line":16836},[123,43576,32547],{"class":133},[123,43578,179],{"class":129},[123,43580,32353],{"class":182},[123,43582,43583],{"class":125,"line":16841},[123,43584,32556],{"class":192},[123,43586,43587,43589,43591],{"class":125,"line":16855},[123,43588,32561],{"class":133},[123,43590,179],{"class":129},[123,43592,3094],{"class":182},[123,43594,43595],{"class":125,"line":16860},[123,43596,32570],{"class":192},[123,43598,43599,43601,43603],{"class":125,"line":16865},[123,43600,32575],{"class":133},[123,43602,179],{"class":129},[123,43604,3094],{"class":182},[123,43606,43607],{"class":125,"line":16879},[123,43608,32584],{"class":192},[123,43610,43611,43613,43615],{"class":125,"line":16891},[123,43612,32589],{"class":133},[123,43614,179],{"class":129},[123,43616,3094],{"class":182},[123,43618,43619],{"class":125,"line":16896},[123,43620,32598],{"class":192},[123,43622,43623,43625,43627,43629,43631],{"class":125,"line":16909},[123,43624,3412],{"class":129},[123,43626,31612],{"class":133},[123,43628,26054],{"class":129},[123,43630,31617],{"class":182},[123,43632,32611],{"class":133},[123,43634,43635],{"class":125,"line":16914},[123,43636,32616],{"class":192},[123,43638,43639,43641,43643],{"class":125,"line":16919},[123,43640,32621],{"class":133},[123,43642,179],{"class":129},[123,43644,32626],{"class":133},[123,43646,43647],{"class":125,"line":16924},[123,43648,32631],{"class":192},[123,43650,43651,43653,43655],{"class":125,"line":16937},[123,43652,32636],{"class":133},[123,43654,179],{"class":129},[123,43656,32641],{"class":133},[123,43658,43659],{"class":125,"line":16942},[123,43660,32647],{"class":192},[123,43662,43663],{"class":125,"line":32644},[123,43664,32653],{"class":133},[123,43666,43667],{"class":125,"line":32650},[123,43668,32659],{"class":192},[123,43670,43671],{"class":125,"line":32656},[123,43672,32665],{"class":192},[123,43674,43675,43677,43679],{"class":125,"line":32662},[123,43676,32671],{"class":133},[123,43678,179],{"class":129},[123,43680,32676],{"class":133},[123,43682,43683],{"class":125,"line":32668},[123,43684,32682],{"class":192},[123,43686,43687,43689,43691,43693,43695,43697,43699],{"class":125,"line":32679},[123,43688,32688],{"class":133},[123,43690,179],{"class":129},[123,43692,32693],{"class":133},[123,43694,32696],{"class":5226},[123,43696,179],{"class":129},[123,43698,351],{"class":182},[123,43700,140],{"class":133},[123,43702,43703],{"class":125,"line":32685},[123,43704,32708],{"class":192},[123,43706,43707,43709,43711],{"class":125,"line":32705},[123,43708,32714],{"class":133},[123,43710,179],{"class":129},[123,43712,32719],{"class":133},[123,43714,43715],{"class":125,"line":32711},[123,43716,32725],{"class":192},[123,43718,43719],{"class":125,"line":32722},[123,43720,32731],{"class":133},[123,43722,43723],{"class":125,"line":32728},[123,43724,32737],{"class":192},[123,43726,43727],{"class":125,"line":32734},[123,43728,32743],{"class":133},[123,43730,43731],{"class":125,"line":32740},[123,43732,32749],{"class":192},[123,43734,43735],{"class":125,"line":32746},[123,43736,32755],{"class":133},[123,43738,43739],{"class":125,"line":32752},[123,43740,32761],{"class":192},[123,43742,43743,43745,43747,43749,43751,43753,43755],{"class":125,"line":32758},[123,43744,32767],{"class":133},[123,43746,9487],{"class":129},[123,43748,32772],{"class":133},[123,43750,589],{"class":129},[123,43752,32777],{"class":133},[123,43754,325],{"class":182},[123,43756,140],{"class":133},[123,43758,43759],{"class":125,"line":32764},[123,43760,32787],{"class":192},[123,43762,43763,43765,43767,43769,43771],{"class":125,"line":32784},[123,43764,32793],{"class":133},[123,43766,9487],{"class":129},[123,43768,32798],{"class":133},[123,43770,2958],{"class":129},[123,43772,32803],{"class":133},[123,43774,43775],{"class":125,"line":32790},[123,43776,32809],{"class":192},[123,43778,43779,43781,43783,43785,43787],{"class":125,"line":32806},[123,43780,32815],{"class":133},[123,43782,9487],{"class":129},[123,43784,32777],{"class":133},[123,43786,325],{"class":182},[123,43788,140],{"class":133},[123,43790,43791],{"class":125,"line":32812},[123,43792,32829],{"class":192},[123,43794,43795,43797,43799,43801,43803],{"class":125,"line":32826},[123,43796,3412],{"class":129},[123,43798,32837],{"class":133},[123,43800,26054],{"class":129},[123,43802,31617],{"class":182},[123,43804,32844],{"class":133},[123,43806,43807],{"class":125,"line":32832},[123,43808,32850],{"class":192},[123,43810,43811,43813,43815],{"class":125,"line":32847},[123,43812,32621],{"class":133},[123,43814,179],{"class":129},[123,43816,32626],{"class":133},[123,43818,43819],{"class":125,"line":32853},[123,43820,32865],{"class":192},[123,43822,43823,43825,43827],{"class":125,"line":32862},[123,43824,32636],{"class":133},[123,43826,179],{"class":129},[123,43828,32641],{"class":133},[123,43830,43831],{"class":125,"line":32868},[123,43832,32880],{"class":192},[123,43834,43835],{"class":125,"line":32877},[123,43836,32886],{"class":133},[123,43838,43839],{"class":125,"line":32883},[123,43840,36367],{"class":192},[123,43842,43843,43845],{"class":125,"line":32889},[123,43844,32892],{"class":129},[123,43846,32895],{"class":133},[123,43848,43849],{"class":125,"line":32898},[123,43850,32901],{"class":192},[123,43852,43853,43855,43857],{"class":125,"line":32904},[123,43854,36382],{"class":133},[123,43856,179],{"class":129},[123,43858,32676],{"class":133},[123,43860,43861],{"class":125,"line":32915},[123,43862,32918],{"class":192},[123,43864,43865,43867,43869,43871,43873,43875,43877],{"class":125,"line":32921},[123,43866,36395],{"class":133},[123,43868,179],{"class":129},[123,43870,32693],{"class":133},[123,43872,32696],{"class":5226},[123,43874,179],{"class":129},[123,43876,351],{"class":182},[123,43878,140],{"class":133},[123,43880,43881],{"class":125,"line":32940},[123,43882,32943],{"class":192},[123,43884,43885,43887,43889],{"class":125,"line":32946},[123,43886,36416],{"class":133},[123,43888,179],{"class":129},[123,43890,32719],{"class":133},[123,43892,43893],{"class":125,"line":32957},[123,43894,32960],{"class":192},[123,43896,43897,43899,43901,43903,43905,43907,43909],{"class":125,"line":32963},[123,43898,36429],{"class":133},[123,43900,9487],{"class":129},[123,43902,36434],{"class":133},[123,43904,589],{"class":129},[123,43906,32777],{"class":133},[123,43908,325],{"class":182},[123,43910,140],{"class":133},[123,43912,43913,43915,43917,43919,43921],{"class":125,"line":32983},[123,43914,36447],{"class":133},[123,43916,9487],{"class":129},[123,43918,32798],{"class":133},[123,43920,2958],{"class":129},[123,43922,32803],{"class":133},[123,43924,43925],{"class":125,"line":32999},[123,43926,36460],{"class":192},[123,43928,43929,43931,43933,43935,43937],{"class":125,"line":33005},[123,43930,36465],{"class":133},[123,43932,9487],{"class":129},[123,43934,32777],{"class":133},[123,43936,325],{"class":182},[123,43938,140],{"class":133},[123,43940,43941],{"class":125,"line":33019},[123,43942,33022],{"class":192},[123,43944,43945],{"class":125,"line":33025},[123,43946,33028],{"class":192},[123,43948,43949,43951,43953],{"class":125,"line":33031},[123,43950,33034],{"class":133},[123,43952,718],{"class":129},[123,43954,33039],{"class":133},[123,43956,43957],{"class":125,"line":33042},[123,43958,33045],{"class":192},[123,43960,43961],{"class":125,"line":33048},[123,43962,33051],{"class":192},[123,43964,43965,43967,43969],{"class":125,"line":33054},[123,43966,33057],{"class":133},[123,43968,718],{"class":129},[123,43970,33039],{"class":133},[123,43972,43973],{"class":125,"line":33064},[123,43974,33067],{"class":192},[123,43976,43977,43979,43981],{"class":125,"line":33070},[123,43978,33073],{"class":133},[123,43980,718],{"class":129},[123,43982,33078],{"class":133},[123,43984,43985],{"class":125,"line":33081},[123,43986,33084],{"class":192},[123,43988,43989,43991,43993],{"class":125,"line":33087},[123,43990,33090],{"class":133},[123,43992,718],{"class":129},[123,43994,33078],{"class":133},[123,43996,43997],{"class":125,"line":33097},[123,43998,2409],{"emptyLinePlaceholder":50},[123,44000,44001],{"class":125,"line":33102},[123,44002,33105],{"class":192},[123,44004,44005,44007,44009,44011,44013,44015,44017,44019,44021,44023,44025,44027,44029,44031,44033,44035,44037,44039,44041,44043],{"class":125,"line":33108},[123,44006,32462],{"class":182},[123,44008,134],{"class":133},[123,44010,3601],{"class":238},[123,44012,32470],{"class":182},[123,44014,33119],{"class":238},[123,44016,1030],{"class":182},[123,44018,33124],{"class":129},[123,44020,1080],{"class":182},[123,44022,33129],{"class":238},[123,44024,1030],{"class":182},[123,44026,33124],{"class":129},[123,44028,1080],{"class":182},[123,44030,3601],{"class":238},[123,44032,33140],{"class":133},[123,44034,666],{"class":129},[123,44036,351],{"class":182},[123,44038,33147],{"class":133},[123,44040,666],{"class":129},[123,44042,351],{"class":182},[123,44044,33154],{"class":133},[123,44046,44047,44049,44051,44053,44055,44057,44059,44061,44063,44065,44067,44069,44071,44073,44075,44077,44079,44081,44083,44085],{"class":125,"line":33157},[123,44048,32462],{"class":182},[123,44050,134],{"class":133},[123,44052,3601],{"class":238},[123,44054,32470],{"class":182},[123,44056,33168],{"class":238},[123,44058,1030],{"class":182},[123,44060,33124],{"class":129},[123,44062,1080],{"class":182},[123,44064,33177],{"class":238},[123,44066,1030],{"class":182},[123,44068,33124],{"class":129},[123,44070,1080],{"class":182},[123,44072,3601],{"class":238},[123,44074,33188],{"class":133},[123,44076,666],{"class":129},[123,44078,351],{"class":182},[123,44080,33195],{"class":133},[123,44082,666],{"class":129},[123,44084,351],{"class":182},[123,44086,33154],{"class":133},[123,44088,44089],{"class":125,"line":33204},[123,44090,2409],{"emptyLinePlaceholder":50},[123,44092,44093],{"class":125,"line":33209},[123,44094,33212],{"class":192},[123,44096,44097,44099,44101,44103,44105,44107,44109],{"class":125,"line":33215},[123,44098,2506],{"class":129},[123,44100,33220],{"class":133},[123,44102,666],{"class":129},[123,44104,351],{"class":182},[123,44106,1074],{"class":133},[123,44108,1094],{"class":129},[123,44110,33231],{"class":133},[123,44112,44113],{"class":125,"line":33234},[123,44114,33237],{"class":192},[123,44116,44117,44119,44121,44123,44125,44127,44129],{"class":125,"line":33240},[123,44118,33243],{"class":133},[123,44120,173],{"class":182},[123,44122,179],{"class":129},[123,44124,33250],{"class":133},[123,44126,666],{"class":129},[123,44128,351],{"class":182},[123,44130,33257],{"class":133},[123,44132,44133],{"class":125,"line":33260},[123,44134,33263],{"class":192},[123,44136,44137],{"class":125,"line":33266},[123,44138,33269],{"class":192},[123,44140,44141,44143,44145],{"class":125,"line":33272},[123,44142,33275],{"class":133},[123,44144,179],{"class":129},[123,44146,32325],{"class":133},[123,44148,44149],{"class":125,"line":33282},[123,44150,2409],{"emptyLinePlaceholder":50},[123,44152,44153],{"class":125,"line":33287},[123,44154,33290],{"class":192},[123,44156,44157,44159,44161,44163,44165],{"class":125,"line":33293},[123,44158,33296],{"class":133},[123,44160,179],{"class":129},[123,44162,33301],{"class":133},[123,44164,666],{"class":129},[123,44166,33306],{"class":133},[123,44168,44169,44171,44173,44175,44177,44179,44181,44183,44185,44187,44189,44191,44193,44195,44197,44199,44201,44203],{"class":125,"line":33309},[123,44170,32462],{"class":182},[123,44172,134],{"class":133},[123,44174,33316],{"class":238},[123,44176,1030],{"class":182},[123,44178,33321],{"class":129},[123,44180,1080],{"class":182},[123,44182,678],{"class":238},[123,44184,1030],{"class":182},[123,44186,33321],{"class":129},[123,44188,1080],{"class":182},[123,44190,33334],{"class":238},[123,44192,33337],{"class":133},[123,44194,33340],{"class":129},[123,44196,1041],{"class":182},[123,44198,33345],{"class":133},[123,44200,462],{"class":129},[123,44202,1041],{"class":182},[123,44204,30508],{"class":133},[123,44206,44207],{"class":125,"line":33354},[123,44208,36744],{"class":192},[123,44210,44211],{"class":125,"line":33360},[123,44212,36749],{"class":192},[123,44214,44215,44217,44219],{"class":125,"line":33366},[123,44216,36754],{"class":133},[123,44218,33378],{"class":238},[123,44220,140],{"class":133},[123,44222,44223],{"class":125,"line":33372},[123,44224,33398],{"class":192},[123,44226,44227,44229,44231,44233,44235,44237],{"class":125,"line":33383},[123,44228,33404],{"class":133},[123,44230,179],{"class":129},[123,44232,33409],{"class":133},[123,44234,33412],{"class":5226},[123,44236,179],{"class":129},[123,44238,1555],{"class":133},[123,44240,44241,44243,44245,44247],{"class":125,"line":33389},[123,44242,33422],{"class":238},[123,44244,993],{"class":133},[123,44246,33427],{"class":182},[123,44248,33430],{"class":133},[123,44250,44251,44253],{"class":125,"line":33395},[123,44252,33436],{"class":238},[123,44254,33439],{"class":133},[123,44256,44257,44259],{"class":125,"line":33401},[123,44258,33445],{"class":238},[123,44260,33448],{"class":133},[123,44262,44263,44265],{"class":125,"line":33419},[123,44264,33454],{"class":238},[123,44266,33457],{"class":133},[123,44268,44269,44271],{"class":125,"line":33433},[123,44270,33463],{"class":238},[123,44272,33466],{"class":133},[123,44274,44275],{"class":125,"line":33442},[123,44276,33472],{"class":133},[123,44278,44279],{"class":125,"line":33451},[123,44280,33478],{"class":192},[123,44282,44283,44285],{"class":125,"line":33460},[123,44284,4099],{"class":129},[123,44286,33486],{"class":133},[123,44288,44289],{"class":125,"line":33469},[123,44290,2409],{"emptyLinePlaceholder":50},[123,44292,44293],{"class":125,"line":33475},[123,44294,33497],{"class":192},[123,44296,44297,44299,44301],{"class":125,"line":33481},[123,44298,31958],{"class":129},[123,44300,33505],{"class":1972},[123,44302,33508],{"class":133},[123,44304,44305],{"class":125,"line":33489},[123,44306,33514],{"class":192},[123,44308,44309,44311,44313,44315,44317,44319,44321,44323],{"class":125,"line":33494},[123,44310,33520],{"class":133},[123,44312,31704],{"class":5226},[123,44314,179],{"class":129},[123,44316,134],{"class":133},[123,44318,632],{"class":182},[123,44320,512],{"class":133},[123,44322,427],{"class":182},[123,44324,30508],{"class":133},[123,44326,44327],{"class":125,"line":33500},[123,44328,33540],{"class":192},[123,44330,44331],{"class":125,"line":33511},[123,44332,33546],{"class":192},[123,44334,44335],{"class":125,"line":33517},[123,44336,33552],{"class":192},[123,44338,44339,44341,44343,44345,44347,44349,44351],{"class":125,"line":33537},[123,44340,31738],{"class":133},[123,44342,351],{"class":182},[123,44344,512],{"class":133},[123,44346,211],{"class":182},[123,44348,512],{"class":133},[123,44350,351],{"class":182},[123,44352,140],{"class":133},[123,44354,44355],{"class":125,"line":33543},[123,44356,33575],{"class":192},[123,44358,44359],{"class":125,"line":33549},[123,44360,33581],{"class":192},[123,44362,44363],{"class":125,"line":33555},[123,44364,33587],{"class":192},[123,44366,44367],{"class":125,"line":33572},[123,44368,33593],{"class":192},[123,44370,44371],{"class":125,"line":33578},[123,44372,33599],{"class":192},[123,44374,44375,44377,44379,44381,44383,44385,44387,44389,44391],{"class":125,"line":33584},[123,44376,33605],{"class":133},[123,44378,33608],{"class":238},[123,44380,33611],{"class":133},[123,44382,33614],{"class":238},[123,44384,512],{"class":133},[123,44386,33619],{"class":5226},[123,44388,179],{"class":129},[123,44390,33624],{"class":238},[123,44392,140],{"class":133},[123,44394,44395,44397,44399,44401,44403,44405,44407,44409,44411],{"class":125,"line":33590},[123,44396,33605],{"class":133},[123,44398,33608],{"class":238},[123,44400,33636],{"class":133},[123,44402,33639],{"class":238},[123,44404,512],{"class":133},[123,44406,33619],{"class":5226},[123,44408,179],{"class":129},[123,44410,33648],{"class":238},[123,44412,140],{"class":133},[123,44414,44415],{"class":125,"line":33596},[123,44416,33656],{"class":192},[123,44418,44419],{"class":125,"line":33602},[123,44420,33662],{"class":133},[123,44422,44423],{"class":125,"line":33629},[123,44424,33668],{"class":192},[123,44426,44427,44429,44431],{"class":125,"line":33653},[123,44428,33674],{"class":133},[123,44430,33677],{"class":238},[123,44432,140],{"class":133},[123,44434,44435,44437,44439],{"class":125,"line":33659},[123,44436,33685],{"class":133},[123,44438,33688],{"class":238},[123,44440,140],{"class":133},[123,44442,44443],{"class":125,"line":33665},[123,44444,33696],{"class":192},[123,44446,44447,44449,44451,44453,44455,44457,44459],{"class":125,"line":33671},[123,44448,31738],{"class":133},[123,44450,351],{"class":182},[123,44452,512],{"class":133},[123,44454,211],{"class":182},[123,44456,512],{"class":133},[123,44458,211],{"class":182},[123,44460,140],{"class":133},[123,44462,44463,44465,44467,44469,44471,44473,44475,44477,44479],{"class":125,"line":33682},[123,44464,33605],{"class":133},[123,44466,33608],{"class":238},[123,44468,33723],{"class":133},[123,44470,33614],{"class":238},[123,44472,512],{"class":133},[123,44474,33619],{"class":5226},[123,44476,179],{"class":129},[123,44478,33734],{"class":238},[123,44480,140],{"class":133},[123,44482,44483,44485,44487,44489,44491,44493,44495,44497,44499],{"class":125,"line":33693},[123,44484,33605],{"class":133},[123,44486,33608],{"class":238},[123,44488,33746],{"class":133},[123,44490,33639],{"class":238},[123,44492,512],{"class":133},[123,44494,33619],{"class":5226},[123,44496,179],{"class":129},[123,44498,33757],{"class":238},[123,44500,140],{"class":133},[123,44502,44503],{"class":125,"line":33699},[123,44504,33765],{"class":192},[123,44506,44507],{"class":125,"line":33716},[123,44508,33662],{"class":133},[123,44510,44511,44513,44515],{"class":125,"line":33739},[123,44512,33674],{"class":133},[123,44514,33608],{"class":238},[123,44516,140],{"class":133},[123,44518,44519,44521,44523],{"class":125,"line":33762},[123,44520,33685],{"class":133},[123,44522,33787],{"class":238},[123,44524,140],{"class":133},[123,44526,44527],{"class":125,"line":33768},[123,44528,33795],{"class":133},[123,44530,44531],{"class":125,"line":33773},[123,44532,2409],{"emptyLinePlaceholder":50},[123,44534,44535],{"class":125,"line":33782},[123,44536,33806],{"class":192},[123,44538,44539,44541,44543,44545,44547],{"class":125,"line":33792},[123,44540,1540],{"class":129},[123,44542,31231],{"class":182},[123,44544,2958],{"class":129},[123,44546,31236],{"class":238},[123,44548,3748],{"class":133},[123,44550,44551],{"class":125,"line":33798},[123,44552,33825],{"class":192},[123,44554,44555,44558,44560],{"class":125,"line":33803},[123,44556,44557],{"class":133},"    GoogLeNet",[123,44559,179],{"class":129},[123,44561,44562],{"class":133},"GoogLeNet(Inception)\n",[123,44564,44565,44567,44569],{"class":125,"line":33809},[123,44566,33842],{"class":133},[123,44568,179],{"class":129},[123,44570,33847],{"class":133},[123,44572,44573,44575,44577,44580,44582,44584,44586],{"class":125,"line":33822},[123,44574,33404],{"class":133},[123,44576,179],{"class":129},[123,44578,44579],{"class":133},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[123,44581,33860],{"class":5226},[123,44583,179],{"class":129},[123,44585,1085],{"class":182},[123,44587,140],{"class":133},[123,44589,44590],{"class":125,"line":33828},[123,44591,33872],{"class":133},[77,44593,44594],{"start":1189},[80,44595,40585],{},[114,44597,44599],{"className":30389,"code":44598,"language":30391,"meta":37,"style":37},"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",[120,44600,44601,44607,44617,44627,44631,44641,44652,44656,44660,44664,44672,44688,44698,44714,44724,44738,44742,44752,44762,44772,44778,44782,44786,44794,44798,44814,44822,44826,44830,44838,44846,44850,44854,44858,44862,44868,44872,44882,44890,44898,44902,44906,44910,44918,44922,44938,44942,44946,44950,44962,44966,44978,44982,44986,44998,45002,45012,45016,45020,45032,45036,45044,45048,45052,45060,45064,45072,45076,45080,45084,45088,45092,45108,45116,45120,45124,45172,45178,45182,45192,45200,45208,45212,45216,45220,45224,45232,45236,45252,45256,45264,45272],{"__ignoreMap":37},[123,44602,44603,44605],{"class":125,"line":126},[123,44604,30403],{"class":129},[123,44606,30406],{"class":133},[123,44608,44609,44611,44613,44615],{"class":125,"line":45},[123,44610,30403],{"class":129},[123,44612,31426],{"class":133},[123,44614,31394],{"class":129},[123,44616,31431],{"class":133},[123,44618,44619,44621,44623,44625],{"class":125,"line":1189},[123,44620,30748],{"class":129},[123,44622,31409],{"class":133},[123,44624,30403],{"class":129},[123,44626,31414],{"class":133},[123,44628,44629],{"class":125,"line":1204},[123,44630,33933],{"class":192},[123,44632,44633,44635,44637,44639],{"class":125,"line":1210},[123,44634,30748],{"class":129},[123,44636,31379],{"class":133},[123,44638,30403],{"class":129},[123,44640,31384],{"class":133},[123,44642,44643,44645,44647,44649],{"class":125,"line":1224},[123,44644,30748],{"class":129},[123,44646,31925],{"class":133},[123,44648,30403],{"class":129},[123,44650,44651],{"class":133}," GoogLeNet,Inception\n",[123,44653,44654],{"class":125,"line":1230},[123,44655,2409],{"emptyLinePlaceholder":50},[123,44657,44658],{"class":125,"line":1321},[123,44659,2409],{"emptyLinePlaceholder":50},[123,44661,44662],{"class":125,"line":1327},[123,44663,33962],{"class":192},[123,44665,44666,44668,44670],{"class":125,"line":1339},[123,44667,31958],{"class":129},[123,44669,33969],{"class":1972},[123,44671,31964],{"class":133},[123,44673,44674,44676,44678,44680,44682,44684,44686],{"class":125,"line":1621},[123,44675,33976],{"class":133},[123,44677,179],{"class":129},[123,44679,31466],{"class":133},[123,44681,31469],{"class":5226},[123,44683,179],{"class":129},[123,44685,31474],{"class":238},[123,44687,31477],{"class":133},[123,44689,44690,44692,44694,44696],{"class":125,"line":1626},[123,44691,33993],{"class":5226},[123,44693,179],{"class":129},[123,44695,33998],{"class":182},[123,44697,31477],{"class":133},[123,44699,44700,44702,44704,44706,44708,44710,44712],{"class":125,"line":1632},[123,44701,34005],{"class":5226},[123,44703,179],{"class":129},[123,44705,31504],{"class":133},[123,44707,31507],{"class":5226},[123,44709,179],{"class":129},[123,44711,35460],{"class":182},[123,44713,31515],{"class":133},[123,44715,44716,44718,44720,44722],{"class":125,"line":1637},[123,44717,34022],{"class":5226},[123,44719,179],{"class":129},[123,44721,31487],{"class":182},[123,44723,140],{"class":133},[123,44725,44726,44728,44730,44732,44734,44736],{"class":125,"line":1651},[123,44727,34033],{"class":133},[123,44729,179],{"class":129},[123,44731,31545],{"class":133},[123,44733,31548],{"class":5226},[123,44735,179],{"class":129},[123,44737,34044],{"class":133},[123,44739,44740],{"class":125,"line":1656},[123,44741,34049],{"class":192},[123,44743,44744,44746,44748,44750],{"class":125,"line":1662},[123,44745,34054],{"class":5226},[123,44747,179],{"class":129},[123,44749,351],{"class":182},[123,44751,31477],{"class":133},[123,44753,44754,44756,44758,44760],{"class":125,"line":1683},[123,44755,34065],{"class":5226},[123,44757,179],{"class":129},[123,44759,31487],{"class":182},[123,44761,31477],{"class":133},[123,44763,44764,44766,44768,44770],{"class":125,"line":1688},[123,44765,34076],{"class":5226},[123,44767,179],{"class":129},[123,44769,325],{"class":182},[123,44771,140],{"class":133},[123,44773,44774,44776],{"class":125,"line":1702},[123,44775,4099],{"class":129},[123,44777,34089],{"class":133},[123,44779,44780],{"class":125,"line":1707},[123,44781,2409],{"emptyLinePlaceholder":50},[123,44783,44784],{"class":125,"line":1736},[123,44785,34098],{"class":192},[123,44787,44788,44790,44792],{"class":125,"line":1741},[123,44789,31958],{"class":129},[123,44791,34105],{"class":1972},[123,44793,34108],{"class":133},[123,44795,44796],{"class":125,"line":1758},[123,44797,34113],{"class":192},[123,44799,44800,44802,44804,44806,44808,44810,44812],{"class":125,"line":1763},[123,44801,31248],{"class":133},[123,44803,179],{"class":129},[123,44805,31255],{"class":238},[123,44807,1713],{"class":129},[123,44809,31260],{"class":133},[123,44811,1710],{"class":129},[123,44813,34130],{"class":238},[123,44815,44816,44818,44820],{"class":125,"line":1768},[123,44817,31300],{"class":133},[123,44819,179],{"class":129},[123,44821,32300],{"class":133},[123,44823,44824],{"class":125,"line":1773},[123,44825,2409],{"emptyLinePlaceholder":50},[123,44827,44828],{"class":125,"line":1787},[123,44829,34147],{"class":192},[123,44831,44832,44834,44836],{"class":125,"line":1792},[123,44833,34152],{"class":133},[123,44835,179],{"class":129},[123,44837,32353],{"class":182},[123,44839,44840,44842,44844],{"class":125,"line":2586},[123,44841,34161],{"class":133},[123,44843,179],{"class":129},[123,44845,3094],{"class":182},[123,44847,44848],{"class":125,"line":2600},[123,44849,2409],{"emptyLinePlaceholder":50},[123,44851,44852],{"class":125,"line":2608},[123,44853,34174],{"class":192},[123,44855,44856],{"class":125,"line":2613},[123,44857,34179],{"class":192},[123,44859,44860],{"class":125,"line":2619},[123,44861,34184],{"class":192},[123,44863,44864,44866],{"class":125,"line":2625},[123,44865,34189],{"class":129},[123,44867,32895],{"class":133},[123,44869,44870],{"class":125,"line":2630},[123,44871,34196],{"class":192},[123,44873,44874,44876,44878,44880],{"class":125,"line":7958},[123,44875,3412],{"class":129},[123,44877,34203],{"class":133},[123,44879,26054],{"class":129},[123,44881,34208],{"class":133},[123,44883,44884,44886,44888],{"class":125,"line":7982},[123,44885,34213],{"class":133},[123,44887,179],{"class":129},[123,44889,34218],{"class":133},[123,44891,44892,44894,44896],{"class":125,"line":7987},[123,44893,34223],{"class":133},[123,44895,179],{"class":129},[123,44897,34228],{"class":133},[123,44899,44900],{"class":125,"line":7993},[123,44901,34233],{"class":192},[123,44903,44904],{"class":125,"line":8020},[123,44905,32886],{"class":133},[123,44907,44908],{"class":125,"line":8025},[123,44909,34242],{"class":192},[123,44911,44912,44914,44916],{"class":125,"line":8031},[123,44913,32671],{"class":133},[123,44915,179],{"class":129},[123,44917,34251],{"class":133},[123,44919,44920],{"class":125,"line":8043},[123,44921,34256],{"class":192},[123,44923,44924,44926,44928,44930,44932,44934,44936],{"class":125,"line":8055},[123,44925,32688],{"class":133},[123,44927,179],{"class":129},[123,44929,32693],{"class":133},[123,44931,32696],{"class":5226},[123,44933,179],{"class":129},[123,44935,351],{"class":182},[123,44937,140],{"class":133},[123,44939,44940],{"class":125,"line":8067},[123,44941,34277],{"class":192},[123,44943,44944],{"class":125,"line":9726},[123,44945,34282],{"class":192},[123,44947,44948],{"class":125,"line":9751},[123,44949,34287],{"class":192},[123,44951,44952,44954,44956,44958,44960],{"class":125,"line":9774},[123,44953,34292],{"class":133},[123,44955,9487],{"class":129},[123,44957,32798],{"class":133},[123,44959,2958],{"class":129},[123,44961,34301],{"class":133},[123,44963,44964],{"class":125,"line":9798},[123,44965,34306],{"class":192},[123,44967,44968,44970,44972,44974,44976],{"class":125,"line":9803},[123,44969,34311],{"class":133},[123,44971,9487],{"class":129},[123,44973,34316],{"class":133},[123,44975,325],{"class":182},[123,44977,140],{"class":133},[123,44979,44980],{"class":125,"line":9808},[123,44981,2409],{"emptyLinePlaceholder":50},[123,44983,44984],{"class":125,"line":9813},[123,44985,34329],{"class":192},[123,44987,44988,44990,44992,44994,44996],{"class":125,"line":9822},[123,44989,34334],{"class":133},[123,44991,179],{"class":129},[123,44993,34339],{"class":133},[123,44995,718],{"class":129},[123,44997,34344],{"class":133},[123,44999,45000],{"class":125,"line":9827},[123,45001,34349],{"class":192},[123,45003,45004,45006,45008,45010],{"class":125,"line":9833},[123,45005,32462],{"class":182},[123,45007,134],{"class":133},[123,45009,34358],{"class":238},[123,45011,34361],{"class":133},[123,45013,45014],{"class":125,"line":9854},[123,45015,2409],{"emptyLinePlaceholder":50},[123,45017,45018],{"class":125,"line":9860},[123,45019,34370],{"class":192},[123,45021,45022,45024,45026,45028,45030],{"class":125,"line":9874},[123,45023,1540],{"class":129},[123,45025,31231],{"class":182},[123,45027,2958],{"class":129},[123,45029,31236],{"class":238},[123,45031,3748],{"class":133},[123,45033,45034],{"class":125,"line":9880},[123,45035,34387],{"class":192},[123,45037,45038,45040,45042],{"class":125,"line":9907},[123,45039,31300],{"class":133},[123,45041,179],{"class":129},[123,45043,44562],{"class":133},[123,45045,45046],{"class":125,"line":9916},[123,45047,34400],{"class":192},[123,45049,45050],{"class":125,"line":9922},[123,45051,34405],{"class":192},[123,45053,45054,45056,45058],{"class":125,"line":9930},[123,45055,34410],{"class":133},[123,45057,34413],{"class":238},[123,45059,30508],{"class":133},[123,45061,45062],{"class":125,"line":9935},[123,45063,34420],{"class":192},[123,45065,45066,45068,45070],{"class":125,"line":16614},[123,45067,34033],{"class":133},[123,45069,179],{"class":129},[123,45071,34429],{"class":133},[123,45073,45074],{"class":125,"line":16620},[123,45075,34434],{"class":192},[123,45077,45078],{"class":125,"line":16643},[123,45079,34439],{"class":133},[123,45081,45082],{"class":125,"line":16649},[123,45083,2409],{"emptyLinePlaceholder":50},[123,45085,45086],{"class":125,"line":16672},[123,45087,34448],{"class":192},[123,45089,45090],{"class":125,"line":16686},[123,45091,34453],{"class":192},[123,45093,45094,45096,45098,45100,45102,45104,45106],{"class":125,"line":16706},[123,45095,31248],{"class":133},[123,45097,179],{"class":129},[123,45099,31255],{"class":238},[123,45101,1713],{"class":129},[123,45103,31260],{"class":133},[123,45105,1710],{"class":129},[123,45107,34130],{"class":238},[123,45109,45110,45112,45114],{"class":125,"line":16712},[123,45111,31300],{"class":133},[123,45113,179],{"class":129},[123,45115,32300],{"class":133},[123,45117,45118],{"class":125,"line":16723},[123,45119,34482],{"class":192},[123,45121,45122],{"class":125,"line":16746},[123,45123,34487],{"class":192},[123,45125,45126,45128,45130,45132,45134,45136,45138,45140,45142,45144,45146,45148,45150,45152,45154,45156,45158,45160,45162,45164,45166,45168,45170],{"class":125,"line":16768},[123,45127,34492],{"class":133},[123,45129,179],{"class":129},[123,45131,1024],{"class":133},[123,45133,34499],{"class":238},[123,45135,512],{"class":133},[123,45137,34504],{"class":238},[123,45139,512],{"class":133},[123,45141,34509],{"class":238},[123,45143,512],{"class":133},[123,45145,34514],{"class":238},[123,45147,512],{"class":133},[123,45149,34519],{"class":238},[123,45151,512],{"class":133},[123,45153,34524],{"class":238},[123,45155,512],{"class":133},[123,45157,34529],{"class":238},[123,45159,512],{"class":133},[123,45161,34534],{"class":238},[123,45163,512],{"class":133},[123,45165,34539],{"class":238},[123,45167,512],{"class":133},[123,45169,34544],{"class":238},[123,45171,33257],{"class":133},[123,45173,45174,45176],{"class":125,"line":16773},[123,45175,34189],{"class":129},[123,45177,32895],{"class":133},[123,45179,45180],{"class":125,"line":16779},[123,45181,34557],{"class":192},[123,45183,45184,45186,45188,45190],{"class":125,"line":16793},[123,45185,3412],{"class":129},[123,45187,34564],{"class":133},[123,45189,26054],{"class":129},[123,45191,34208],{"class":133},[123,45193,45194,45196,45198],{"class":125,"line":16806},[123,45195,32621],{"class":133},[123,45197,179],{"class":129},[123,45199,32626],{"class":133},[123,45201,45202,45204,45206],{"class":125,"line":16811},[123,45203,32636],{"class":133},[123,45205,179],{"class":129},[123,45207,32641],{"class":133},[123,45209,45210],{"class":125,"line":16825},[123,45211,2409],{"emptyLinePlaceholder":50},[123,45213,45214],{"class":125,"line":16830},[123,45215,34593],{"class":192},[123,45217,45218],{"class":125,"line":16836},[123,45219,32886],{"class":133},[123,45221,45222],{"class":125,"line":16841},[123,45223,34602],{"class":192},[123,45225,45226,45228,45230],{"class":125,"line":16855},[123,45227,32671],{"class":133},[123,45229,179],{"class":129},[123,45231,32676],{"class":133},[123,45233,45234],{"class":125,"line":16860},[123,45235,34615],{"class":192},[123,45237,45238,45240,45242,45244,45246,45248,45250],{"class":125,"line":16865},[123,45239,32688],{"class":133},[123,45241,179],{"class":129},[123,45243,32693],{"class":133},[123,45245,32696],{"class":5226},[123,45247,179],{"class":129},[123,45249,351],{"class":182},[123,45251,140],{"class":133},[123,45253,45254],{"class":125,"line":16879},[123,45255,34636],{"class":192},[123,45257,45258,45260,45262],{"class":125,"line":16891},[123,45259,34641],{"class":133},[123,45261,179],{"class":129},[123,45263,34646],{"class":133},[123,45265,45266,45268,45270],{"class":125,"line":16896},[123,45267,34651],{"class":133},[123,45269,179],{"class":129},[123,45271,34656],{"class":133},[123,45273,45274,45276,45278,45280,45282,45284,45286,45288],{"class":125,"line":16909},[123,45275,34661],{"class":182},[123,45277,134],{"class":133},[123,45279,34666],{"class":238},[123,45281,34669],{"class":133},[123,45283,34672],{"class":238},[123,45285,512],{"class":133},[123,45287,34677],{"class":238},[123,45289,34680],{"class":133},[94,45291,45293],{"id":45292},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45295,45296],{},"猫狗分类任务",[14,45298,45299],{},"划分数据集和验证集",[114,45301,45303],{"className":30389,"code":45302,"language":30391,"meta":37,"style":37},"# 创建脚本，用于划分数据集和验证集\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",[120,45304,45305,45310,45317,45322,45333,45340,45344,45354,45368,45377,45381,45386,45396,45416,45420,45425,45435,45446,45459,45463,45468,45477,45487,45498,45502,45507,45517,45521,45526,45531,45536,45541,45546,45550,45560,45587,45600,45612,45639,45644,45649,45663,45668,45680,45695,45710,45718,45722,45727,45733,45745,45758,45763,45768,45773,45823,45829,45833],{"__ignoreMap":37},[123,45306,45307],{"class":125,"line":126},[123,45308,45309],{"class":192},"# 创建脚本，用于划分数据集和验证集\n",[123,45311,45312,45314],{"class":125,"line":45},[123,45313,30403],{"class":129},[123,45315,45316],{"class":133}," os\n",[123,45318,45319],{"class":125,"line":1189},[123,45320,45321],{"class":192},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[123,45323,45324,45326,45329,45331],{"class":125,"line":1204},[123,45325,30748],{"class":129},[123,45327,45328],{"class":133}," shutil ",[123,45330,30403],{"class":129},[123,45332,31833],{"class":133},[123,45334,45335,45337],{"class":125,"line":1210},[123,45336,30403],{"class":129},[123,45338,45339],{"class":133}," random\n",[123,45341,45342],{"class":125,"line":1224},[123,45343,2409],{"emptyLinePlaceholder":50},[123,45345,45346,45348,45351],{"class":125,"line":1230},[123,45347,31958],{"class":129},[123,45349,45350],{"class":1972}," mkfile",[123,45352,45353],{"class":133},"(file):\n",[123,45355,45356,45358,45360,45363,45366],{"class":125,"line":1321},[123,45357,3110],{"class":129},[123,45359,38941],{"class":129},[123,45361,45362],{"class":133}," os.path.exists(",[123,45364,45365],{"class":5226},"file",[123,45367,30797],{"class":133},[123,45369,45370,45373,45375],{"class":125,"line":1327},[123,45371,45372],{"class":133},"        os.makedirs(",[123,45374,45365],{"class":5226},[123,45376,140],{"class":133},[123,45378,45379],{"class":125,"line":1339},[123,45380,2409],{"emptyLinePlaceholder":50},[123,45382,45383],{"class":125,"line":1621},[123,45384,45385],{"class":192},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[123,45387,45388,45391,45393],{"class":125,"line":1626},[123,45389,45390],{"class":133},"file_path",[123,45392,179],{"class":129},[123,45394,45395],{"class":238},"'data_cat_dog'\n",[123,45397,45398,45401,45403,45406,45408,45411,45413],{"class":125,"line":1632},[123,45399,45400],{"class":133},"flower_class",[123,45402,179],{"class":129},[123,45404,45405],{"class":133},"[cla ",[123,45407,3034],{"class":129},[123,45409,45410],{"class":133}," cla ",[123,45412,26054],{"class":129},[123,45414,45415],{"class":133}," os.listdir(file_path)]\n",[123,45417,45418],{"class":125,"line":1637},[123,45419,2409],{"emptyLinePlaceholder":50},[123,45421,45422],{"class":125,"line":1651},[123,45423,45424],{"class":192},"# 创建训练集train文件夹\n",[123,45426,45427,45430,45433],{"class":125,"line":1656},[123,45428,45429],{"class":133},"mkfile(",[123,45431,45432],{"class":238},"'data\u002Ftrain'",[123,45434,140],{"class":133},[123,45436,45437,45439,45441,45443],{"class":125,"line":1662},[123,45438,3034],{"class":129},[123,45440,45410],{"class":133},[123,45442,26054],{"class":129},[123,45444,45445],{"class":133}," flower_class:\n",[123,45447,45448,45451,45454,45456],{"class":125,"line":1683},[123,45449,45450],{"class":133},"    mkfile(",[123,45452,45453],{"class":238},"'data\u002Ftrain\u002F'",[123,45455,615],{"class":129},[123,45457,45458],{"class":133},"cla)\n",[123,45460,45461],{"class":125,"line":1688},[123,45462,2409],{"emptyLinePlaceholder":50},[123,45464,45465],{"class":125,"line":1702},[123,45466,45467],{"class":192},"# 创建验证集val文件夹\n",[123,45469,45470,45472,45475],{"class":125,"line":1707},[123,45471,45429],{"class":133},[123,45473,45474],{"class":238},"'data\u002Ftest'",[123,45476,140],{"class":133},[123,45478,45479,45481,45483,45485],{"class":125,"line":1736},[123,45480,3034],{"class":129},[123,45482,45410],{"class":133},[123,45484,26054],{"class":129},[123,45486,45445],{"class":133},[123,45488,45489,45491,45494,45496],{"class":125,"line":1741},[123,45490,45450],{"class":133},[123,45492,45493],{"class":238},"'data\u002Ftest\u002F'",[123,45495,615],{"class":129},[123,45497,45458],{"class":133},[123,45499,45500],{"class":125,"line":1758},[123,45501,2409],{"emptyLinePlaceholder":50},[123,45503,45504],{"class":125,"line":1763},[123,45505,45506],{"class":192},"# 划分比例，训练集：测试集=9：1\n",[123,45508,45509,45512,45514],{"class":125,"line":1768},[123,45510,45511],{"class":133},"split_rate",[123,45513,179],{"class":129},[123,45515,45516],{"class":182},"0.1\n",[123,45518,45519],{"class":125,"line":1773},[123,45520,2409],{"emptyLinePlaceholder":50},[123,45522,45523],{"class":125,"line":1787},[123,45524,45525],{"class":192},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[123,45527,45528],{"class":125,"line":1792},[123,45529,45530],{"class":192},"# cla_path：当前类别的原始图片路径\n",[123,45532,45533],{"class":125,"line":2586},[123,45534,45535],{"class":192},"# images：当前类别下所有图片的文件名列表\n",[123,45537,45538],{"class":125,"line":2600},[123,45539,45540],{"class":192},"# num：该类别图片总数\n",[123,45542,45543],{"class":125,"line":2608},[123,45544,45545],{"class":192},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[123,45547,45548],{"class":125,"line":2613},[123,45549,2409],{"emptyLinePlaceholder":50},[123,45551,45552,45554,45556,45558],{"class":125,"line":2619},[123,45553,3034],{"class":129},[123,45555,45410],{"class":133},[123,45557,26054],{"class":129},[123,45559,45445],{"class":133},[123,45561,45562,45565,45567,45570,45572,45575,45578,45580,45582,45584],{"class":125,"line":2625},[123,45563,45564],{"class":133},"    cla_path ",[123,45566,179],{"class":129},[123,45568,45569],{"class":133}," file_path ",[123,45571,615],{"class":129},[123,45573,45574],{"class":238}," '\u002F'",[123,45576,45577],{"class":129}," +",[123,45579,45410],{"class":133},[123,45581,615],{"class":129},[123,45583,45574],{"class":238},[123,45585,45586],{"class":192},"  # 某一类别的子目录\n",[123,45588,45589,45592,45594,45597],{"class":125,"line":2630},[123,45590,45591],{"class":133},"    images ",[123,45593,179],{"class":129},[123,45595,45596],{"class":133}," os.listdir(cla_path)  ",[123,45598,45599],{"class":192},"# iamges 列表存储了该目录下所有图像的名称\n",[123,45601,45602,45605,45607,45609],{"class":125,"line":7958},[123,45603,45604],{"class":133},"    num ",[123,45606,179],{"class":129},[123,45608,7341],{"class":182},[123,45610,45611],{"class":133},"(images)\n",[123,45613,45614,45617,45619,45622,45624,45626,45628,45631,45633,45636],{"class":125,"line":7982},[123,45615,45616],{"class":133},"    eval_index ",[123,45618,179],{"class":129},[123,45620,45621],{"class":133}," random.sample(images, ",[123,45623,627],{"class":5226},[123,45625,179],{"class":129},[123,45627,137],{"class":182},[123,45629,45630],{"class":133},"(num ",[123,45632,589],{"class":129},[123,45634,45635],{"class":133}," split_rate))  ",[123,45637,45638],{"class":192},"# 从images列表中随机抽取 k 个图像名称\n",[123,45640,45641],{"class":125,"line":7987},[123,45642,45643],{"class":192},"    # 遍历该类别下的所有图片\n",[123,45645,45646],{"class":125,"line":7993},[123,45647,45648],{"class":192},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[123,45650,45651,45653,45656,45658,45660],{"class":125,"line":8020},[123,45652,3210],{"class":129},[123,45654,45655],{"class":133}," index, image ",[123,45657,26054],{"class":129},[123,45659,31617],{"class":182},[123,45661,45662],{"class":133},"(images):\n",[123,45664,45665],{"class":125,"line":8025},[123,45666,45667],{"class":192},"        # eval_index 中保存验证集val的图像名称\n",[123,45669,45670,45672,45675,45677],{"class":125,"line":8031},[123,45671,2506],{"class":129},[123,45673,45674],{"class":133}," image ",[123,45676,26054],{"class":129},[123,45678,45679],{"class":133}," eval_index:\n",[123,45681,45682,45685,45687,45690,45692],{"class":125,"line":8043},[123,45683,45684],{"class":133},"            image_path ",[123,45686,179],{"class":129},[123,45688,45689],{"class":133}," cla_path ",[123,45691,615],{"class":129},[123,45693,45694],{"class":133}," image\n",[123,45696,45697,45700,45702,45705,45707],{"class":125,"line":8055},[123,45698,45699],{"class":133},"            new_path ",[123,45701,179],{"class":129},[123,45703,45704],{"class":238}," 'data\u002Ftest\u002F'",[123,45706,45577],{"class":129},[123,45708,45709],{"class":133}," cla\n",[123,45711,45712,45715],{"class":125,"line":8067},[123,45713,45714],{"class":133},"            copy(image_path, new_path)  ",[123,45716,45717],{"class":192},"# 将选中的图像复制到新路径\n",[123,45719,45720],{"class":125,"line":9726},[123,45721,2409],{"emptyLinePlaceholder":50},[123,45723,45724],{"class":125,"line":9751},[123,45725,45726],{"class":192},"        # 其余的图像保存在训练集train中\n",[123,45728,45729,45731],{"class":125,"line":9774},[123,45730,2543],{"class":129},[123,45732,3748],{"class":133},[123,45734,45735,45737,45739,45741,45743],{"class":125,"line":9798},[123,45736,45684],{"class":133},[123,45738,179],{"class":129},[123,45740,45689],{"class":133},[123,45742,615],{"class":129},[123,45744,45694],{"class":133},[123,45746,45747,45749,45751,45754,45756],{"class":125,"line":9803},[123,45748,45699],{"class":133},[123,45750,179],{"class":129},[123,45752,45753],{"class":238}," 'data\u002Ftrain\u002F'",[123,45755,45577],{"class":129},[123,45757,45709],{"class":133},[123,45759,45760],{"class":125,"line":9808},[123,45761,45762],{"class":133},"            copy(image_path, new_path)\n",[123,45764,45765],{"class":125,"line":9813},[123,45766,45767],{"class":192},"            # 打印进度条信息\n",[123,45769,45770],{"class":125,"line":9822},[123,45771,45772],{"class":192},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[123,45774,45775,45777,45779,45781,45784,45786,45788,45791,45793,45795,45797,45800,45803,45805,45807,45810,45813,45815,45817,45820],{"class":125,"line":9827},[123,45776,32462],{"class":182},[123,45778,134],{"class":133},[123,45780,385],{"class":238},[123,45782,45783],{"class":182},"\\r",[123,45785,1024],{"class":238},[123,45787,32470],{"class":182},[123,45789,45790],{"class":238},"] processing [",[123,45792,32470],{"class":182},[123,45794,718],{"class":238},[123,45796,32470],{"class":182},[123,45798,45799],{"class":238},"]\"",[123,45801,45802],{"class":133},".format(cla, index ",[123,45804,615],{"class":129},[123,45806,25129],{"class":182},[123,45808,45809],{"class":133},", num), ",[123,45811,45812],{"class":5226},"end",[123,45814,179],{"class":129},[123,45816,7662],{"class":238},[123,45818,45819],{"class":133},")  ",[123,45821,45822],{"class":192},"# processing bar\n",[123,45824,45825,45827],{"class":125,"line":9833},[123,45826,31310],{"class":182},[123,45828,1985],{"class":133},[123,45830,45831],{"class":125,"line":9854},[123,45832,2409],{"emptyLinePlaceholder":50},[123,45834,45835,45837,45839,45842],{"class":125,"line":9860},[123,45836,30426],{"class":182},[123,45838,134],{"class":133},[123,45840,45841],{"class":238},"\"processing done!\"",[123,45843,140],{"class":133},[14,45845,45846],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[22008,45848,45850],{"id":45849},"_242模型代码","2.4.2.模型代码",[14,45852,45853],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[114,45855,45857],{"className":30389,"code":45856,"language":30391,"meta":37,"style":37},"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",[120,45858,45859,45865,45875,45885,45889,45905,45913,45927,45937,45941,45971,45975,46009,46055,46059,46093,46139,46143,46147,46181,46211,46215,46223,46237,46259,46281,46299,46303,46317,46321,46325,46341,46345,46353,46367,46377,46421,46425,46453,46457,46467,46495,46499,46535,46539,46567,46571,46581,46613,46645,46673,46677,46687,46719,46751,46783,46815,46847,46875,46879,46889,46921,46953,46965,46969,46981,46985,46989,47001,47009,47029,47033,47037,47041,47045,47049,47053,47067,47075,47083,47095,47109,47117,47121,47129,47139,47149,47159,47169,47179,47185,47189,47193,47205,47225,47233],{"__ignoreMap":37},[123,45860,45861,45863],{"class":125,"line":126},[123,45862,30403],{"class":129},[123,45864,30406],{"class":133},[123,45866,45867,45869,45871,45873],{"class":125,"line":45},[123,45868,30748],{"class":129},[123,45870,30751],{"class":133},[123,45872,30403],{"class":129},[123,45874,30756],{"class":133},[123,45876,45877,45879,45881,45883],{"class":125,"line":1189},[123,45878,30748],{"class":129},[123,45880,30768],{"class":133},[123,45882,30403],{"class":129},[123,45884,30773],{"class":133},[123,45886,45887],{"class":125,"line":1204},[123,45888,2409],{"emptyLinePlaceholder":50},[123,45890,45891,45893,45895,45897,45899,45901,45903],{"class":125,"line":1210},[123,45892,14704],{"class":129},[123,45894,41504],{"class":1972},[123,45896,134],{"class":133},[123,45898,30789],{"class":1972},[123,45900,692],{"class":133},[123,45902,30794],{"class":1972},[123,45904,30797],{"class":133},[123,45906,45907,45909,45911],{"class":125,"line":1224},[123,45908,30812],{"class":129},[123,45910,30815],{"class":182},[123,45912,41523],{"class":133},[123,45914,45915,45917,45919,45921,45923,45925],{"class":125,"line":1230},[123,45916,30828],{"class":182},[123,45918,41530],{"class":133},[123,45920,30834],{"class":182},[123,45922,30837],{"class":133},[123,45924,30840],{"class":182},[123,45926,1985],{"class":133},[123,45928,45929,45931,45933,45935],{"class":125,"line":1321},[123,45930,30856],{"class":182},[123,45932,34782],{"class":133},[123,45934,179],{"class":129},[123,45936,34787],{"class":133},[123,45938,45939],{"class":125,"line":1327},[123,45940,41553],{"class":192},[123,45942,45943,45945,45947,45949,45951,45953,45955,45957,45959,45961,45963,45965,45967,45969],{"class":125,"line":1339},[123,45944,30856],{"class":182},[123,45946,41560],{"class":133},[123,45948,179],{"class":129},[123,45950,30864],{"class":133},[123,45952,30867],{"class":5226},[123,45954,179],{"class":129},[123,45956,41571],{"class":133},[123,45958,30876],{"class":5226},[123,45960,179],{"class":129},[123,45962,41578],{"class":133},[123,45964,30885],{"class":5226},[123,45966,179],{"class":129},[123,45968,351],{"class":182},[123,45970,140],{"class":133},[123,45972,45973],{"class":125,"line":1621},[123,45974,41591],{"class":192},[123,45976,45977,45979,45981,45983,45985,45987,45989,45991,45993,45995,45997,45999,46001,46003,46005,46007],{"class":125,"line":1626},[123,45978,30856],{"class":182},[123,45980,41598],{"class":133},[123,45982,179],{"class":129},[123,45984,30864],{"class":133},[123,45986,30867],{"class":5226},[123,45988,179],{"class":129},[123,45990,41571],{"class":133},[123,45992,30876],{"class":5226},[123,45994,179],{"class":129},[123,45996,41615],{"class":133},[123,45998,325],{"class":182},[123,46000,41620],{"class":133},[123,46002,30885],{"class":5226},[123,46004,179],{"class":129},[123,46006,351],{"class":182},[123,46008,140],{"class":133},[123,46010,46011,46013,46015,46017,46019,46021,46023,46025,46027,46029,46031,46033,46035,46037,46039,46041,46043,46045,46047,46049,46051,46053],{"class":125,"line":1632},[123,46012,30856],{"class":182},[123,46014,41635],{"class":133},[123,46016,179],{"class":129},[123,46018,30864],{"class":133},[123,46020,30867],{"class":5226},[123,46022,179],{"class":129},[123,46024,41615],{"class":133},[123,46026,325],{"class":182},[123,46028,41620],{"class":133},[123,46030,30876],{"class":5226},[123,46032,179],{"class":129},[123,46034,41615],{"class":133},[123,46036,351],{"class":182},[123,46038,41620],{"class":133},[123,46040,30885],{"class":5226},[123,46042,179],{"class":129},[123,46044,205],{"class":182},[123,46046,512],{"class":133},[123,46048,30894],{"class":5226},[123,46050,179],{"class":129},[123,46052,351],{"class":182},[123,46054,140],{"class":133},[123,46056,46057],{"class":125,"line":1637},[123,46058,41680],{"class":192},[123,46060,46061,46063,46065,46067,46069,46071,46073,46075,46077,46079,46081,46083,46085,46087,46089,46091],{"class":125,"line":1651},[123,46062,30856],{"class":182},[123,46064,41687],{"class":133},[123,46066,179],{"class":129},[123,46068,30864],{"class":133},[123,46070,30867],{"class":5226},[123,46072,179],{"class":129},[123,46074,41571],{"class":133},[123,46076,30876],{"class":5226},[123,46078,179],{"class":129},[123,46080,41704],{"class":133},[123,46082,325],{"class":182},[123,46084,41620],{"class":133},[123,46086,30885],{"class":5226},[123,46088,179],{"class":129},[123,46090,351],{"class":182},[123,46092,140],{"class":133},[123,46094,46095,46097,46099,46101,46103,46105,46107,46109,46111,46113,46115,46117,46119,46121,46123,46125,46127,46129,46131,46133,46135,46137],{"class":125,"line":1656},[123,46096,30856],{"class":182},[123,46098,41723],{"class":133},[123,46100,179],{"class":129},[123,46102,30864],{"class":133},[123,46104,30867],{"class":5226},[123,46106,179],{"class":129},[123,46108,41704],{"class":133},[123,46110,325],{"class":182},[123,46112,41620],{"class":133},[123,46114,30876],{"class":5226},[123,46116,179],{"class":129},[123,46118,41704],{"class":133},[123,46120,351],{"class":182},[123,46122,41620],{"class":133},[123,46124,30885],{"class":5226},[123,46126,179],{"class":129},[123,46128,453],{"class":182},[123,46130,512],{"class":133},[123,46132,30894],{"class":5226},[123,46134,179],{"class":129},[123,46136,211],{"class":182},[123,46138,140],{"class":133},[123,46140,46141],{"class":125,"line":1662},[123,46142,41768],{"class":192},[123,46144,46145],{"class":125,"line":1683},[123,46146,41773],{"class":192},[123,46148,46149,46151,46153,46155,46157,46159,46161,46163,46165,46167,46169,46171,46173,46175,46177,46179],{"class":125,"line":1688},[123,46150,30856],{"class":182},[123,46152,41780],{"class":133},[123,46154,179],{"class":129},[123,46156,34840],{"class":133},[123,46158,30885],{"class":5226},[123,46160,179],{"class":129},[123,46162,205],{"class":182},[123,46164,512],{"class":133},[123,46166,30940],{"class":5226},[123,46168,179],{"class":129},[123,46170,351],{"class":182},[123,46172,512],{"class":133},[123,46174,30894],{"class":5226},[123,46176,179],{"class":129},[123,46178,351],{"class":182},[123,46180,140],{"class":133},[123,46182,46183,46185,46187,46189,46191,46193,46195,46197,46199,46201,46203,46205,46207,46209],{"class":125,"line":1702},[123,46184,30856],{"class":182},[123,46186,41815],{"class":133},[123,46188,179],{"class":129},[123,46190,30864],{"class":133},[123,46192,30867],{"class":5226},[123,46194,179],{"class":129},[123,46196,41571],{"class":133},[123,46198,30876],{"class":5226},[123,46200,179],{"class":129},[123,46202,41832],{"class":133},[123,46204,30885],{"class":5226},[123,46206,179],{"class":129},[123,46208,351],{"class":182},[123,46210,140],{"class":133},[123,46212,46213],{"class":125,"line":1707},[123,46214,2409],{"emptyLinePlaceholder":50},[123,46216,46217,46219,46221],{"class":125,"line":1736},[123,46218,30812],{"class":129},[123,46220,31104],{"class":1972},[123,46222,31107],{"class":133},[123,46224,46225,46227,46229,46231,46233,46235],{"class":125,"line":1741},[123,46226,41857],{"class":133},[123,46228,179],{"class":129},[123,46230,30834],{"class":182},[123,46232,35195],{"class":133},[123,46234,30834],{"class":182},[123,46236,41868],{"class":133},[123,46238,46239,46241,46243,46245,46247,46249,46251,46253,46255,46257],{"class":125,"line":1758},[123,46240,7095],{"class":133},[123,46242,179],{"class":129},[123,46244,30834],{"class":182},[123,46246,35195],{"class":133},[123,46248,30834],{"class":182},[123,46250,41883],{"class":133},[123,46252,30834],{"class":182},[123,46254,35195],{"class":133},[123,46256,30834],{"class":182},[123,46258,41892],{"class":133},[123,46260,46261,46263,46265,46267,46269,46271,46273,46275,46277,46279],{"class":125,"line":1763},[123,46262,41897],{"class":133},[123,46264,179],{"class":129},[123,46266,30834],{"class":182},[123,46268,35195],{"class":133},[123,46270,30834],{"class":182},[123,46272,41908],{"class":133},[123,46274,30834],{"class":182},[123,46276,35195],{"class":133},[123,46278,30834],{"class":182},[123,46280,41917],{"class":133},[123,46282,46283,46285,46287,46289,46291,46293,46295,46297],{"class":125,"line":1768},[123,46284,41922],{"class":133},[123,46286,179],{"class":129},[123,46288,30834],{"class":182},[123,46290,35195],{"class":133},[123,46292,30834],{"class":182},[123,46294,41933],{"class":133},[123,46296,30834],{"class":182},[123,46298,41938],{"class":133},[123,46300,46301],{"class":125,"line":1773},[123,46302,41943],{"class":192},[123,46304,46305,46307,46309,46311,46313,46315],{"class":125,"line":1787},[123,46306,14762],{"class":129},[123,46308,41950],{"class":133},[123,46310,32696],{"class":5226},[123,46312,179],{"class":129},[123,46314,351],{"class":182},[123,46316,140],{"class":133},[123,46318,46319],{"class":125,"line":1792},[123,46320,2409],{"emptyLinePlaceholder":50},[123,46322,46323],{"class":125,"line":2586},[123,46324,41971],{"class":192},[123,46326,46327,46329,46331,46333,46335,46337,46339],{"class":125,"line":2600},[123,46328,14704],{"class":129},[123,46330,41978],{"class":1972},[123,46332,134],{"class":133},[123,46334,30789],{"class":1972},[123,46336,692],{"class":133},[123,46338,30794],{"class":1972},[123,46340,30797],{"class":133},[123,46342,46343],{"class":125,"line":2608},[123,46344,41993],{"class":192},[123,46346,46347,46349,46351],{"class":125,"line":2613},[123,46348,30812],{"class":129},[123,46350,30815],{"class":182},[123,46352,42002],{"class":133},[123,46354,46355,46357,46359,46361,46363,46365],{"class":125,"line":2619},[123,46356,30828],{"class":182},[123,46358,42009],{"class":133},[123,46360,30834],{"class":182},[123,46362,30837],{"class":133},[123,46364,30840],{"class":182},[123,46366,1985],{"class":133},[123,46368,46369,46371,46373,46375],{"class":125,"line":2625},[123,46370,30856],{"class":182},[123,46372,42024],{"class":133},[123,46374,179],{"class":129},[123,46376,38020],{"class":133},[123,46378,46379,46381,46383,46385,46387,46389,46391,46393,46395,46397,46399,46401,46403,46405,46407,46409,46411,46413,46415,46417,46419],{"class":125,"line":2630},[123,46380,38025],{"class":133},[123,46382,30867],{"class":5226},[123,46384,179],{"class":129},[123,46386,205],{"class":182},[123,46388,512],{"class":133},[123,46390,30876],{"class":5226},[123,46392,179],{"class":129},[123,46394,337],{"class":182},[123,46396,512],{"class":133},[123,46398,30885],{"class":5226},[123,46400,179],{"class":129},[123,46402,503],{"class":182},[123,46404,512],{"class":133},[123,46406,30940],{"class":5226},[123,46408,179],{"class":129},[123,46410,211],{"class":182},[123,46412,512],{"class":133},[123,46414,30894],{"class":5226},[123,46416,179],{"class":129},[123,46418,205],{"class":182},[123,46420,38058],{"class":133},[123,46422,46423],{"class":125,"line":7958},[123,46424,38063],{"class":133},[123,46426,46427,46429,46431,46433,46435,46437,46439,46441,46443,46445,46447,46449,46451],{"class":125,"line":7982},[123,46428,38108],{"class":133},[123,46430,30885],{"class":5226},[123,46432,179],{"class":129},[123,46434,205],{"class":182},[123,46436,512],{"class":133},[123,46438,30940],{"class":5226},[123,46440,179],{"class":129},[123,46442,211],{"class":182},[123,46444,512],{"class":133},[123,46446,30894],{"class":5226},[123,46448,179],{"class":129},[123,46450,351],{"class":182},[123,46452,140],{"class":133},[123,46454,46455],{"class":125,"line":7987},[123,46456,38137],{"class":133},[123,46458,46459,46461,46463,46465],{"class":125,"line":7993},[123,46460,30856],{"class":182},[123,46462,42115],{"class":133},[123,46464,179],{"class":129},[123,46466,38020],{"class":133},[123,46468,46469,46471,46473,46475,46477,46479,46481,46483,46485,46487,46489,46491,46493],{"class":125,"line":8020},[123,46470,38025],{"class":133},[123,46472,30867],{"class":5226},[123,46474,179],{"class":129},[123,46476,337],{"class":182},[123,46478,512],{"class":133},[123,46480,30876],{"class":5226},[123,46482,179],{"class":129},[123,46484,337],{"class":182},[123,46486,512],{"class":133},[123,46488,30885],{"class":5226},[123,46490,179],{"class":129},[123,46492,351],{"class":182},[123,46494,38058],{"class":133},[123,46496,46497],{"class":125,"line":8025},[123,46498,38063],{"class":133},[123,46500,46501,46503,46505,46507,46509,46511,46513,46515,46517,46519,46521,46523,46525,46527,46529,46531,46533],{"class":125,"line":8031},[123,46502,38025],{"class":133},[123,46504,30867],{"class":5226},[123,46506,179],{"class":129},[123,46508,337],{"class":182},[123,46510,512],{"class":133},[123,46512,30876],{"class":5226},[123,46514,179],{"class":129},[123,46516,42170],{"class":182},[123,46518,512],{"class":133},[123,46520,30885],{"class":5226},[123,46522,179],{"class":129},[123,46524,205],{"class":182},[123,46526,512],{"class":133},[123,46528,30894],{"class":5226},[123,46530,179],{"class":129},[123,46532,351],{"class":182},[123,46534,38058],{"class":133},[123,46536,46537],{"class":125,"line":8043},[123,46538,38063],{"class":133},[123,46540,46541,46543,46545,46547,46549,46551,46553,46555,46557,46559,46561,46563,46565],{"class":125,"line":8055},[123,46542,38108],{"class":133},[123,46544,30885],{"class":5226},[123,46546,179],{"class":129},[123,46548,205],{"class":182},[123,46550,512],{"class":133},[123,46552,30940],{"class":5226},[123,46554,179],{"class":129},[123,46556,211],{"class":182},[123,46558,512],{"class":133},[123,46560,30894],{"class":5226},[123,46562,179],{"class":129},[123,46564,351],{"class":182},[123,46566,140],{"class":133},[123,46568,46569],{"class":125,"line":8067},[123,46570,38137],{"class":133},[123,46572,46573,46575,46577,46579],{"class":125,"line":9726},[123,46574,30856],{"class":182},[123,46576,42231],{"class":133},[123,46578,179],{"class":129},[123,46580,38020],{"class":133},[123,46582,46583,46585,46587,46589,46591,46593,46595,46597,46599,46601,46603,46605,46607,46609,46611],{"class":125,"line":9751},[123,46584,42240],{"class":133},[123,46586,42170],{"class":182},[123,46588,512],{"class":133},[123,46590,337],{"class":182},[123,46592,42249],{"class":133},[123,46594,343],{"class":182},[123,46596,512],{"class":133},[123,46598,32081],{"class":182},[123,46600,42258],{"class":133},[123,46602,735],{"class":182},[123,46604,512],{"class":133},[123,46606,331],{"class":182},[123,46608,42267],{"class":133},[123,46610,331],{"class":182},[123,46612,38058],{"class":133},[123,46614,46615,46617,46619,46621,46623,46625,46627,46629,46631,46633,46635,46637,46639,46641,46643],{"class":125,"line":9774},[123,46616,42240],{"class":133},[123,46618,34881],{"class":182},[123,46620,512],{"class":133},[123,46622,32081],{"class":182},[123,46624,42249],{"class":133},[123,46626,32081],{"class":182},[123,46628,512],{"class":133},[123,46630,42170],{"class":182},[123,46632,42258],{"class":133},[123,46634,331],{"class":182},[123,46636,512],{"class":133},[123,46638,343],{"class":182},[123,46640,42267],{"class":133},[123,46642,337],{"class":182},[123,46644,38058],{"class":133},[123,46646,46647,46649,46651,46653,46655,46657,46659,46661,46663,46665,46667,46669,46671],{"class":125,"line":9798},[123,46648,38108],{"class":133},[123,46650,30885],{"class":5226},[123,46652,179],{"class":129},[123,46654,205],{"class":182},[123,46656,512],{"class":133},[123,46658,30940],{"class":5226},[123,46660,179],{"class":129},[123,46662,211],{"class":182},[123,46664,512],{"class":133},[123,46666,30894],{"class":5226},[123,46668,179],{"class":129},[123,46670,351],{"class":182},[123,46672,140],{"class":133},[123,46674,46675],{"class":125,"line":9803},[123,46676,38137],{"class":133},[123,46678,46679,46681,46683,46685],{"class":125,"line":9808},[123,46680,30856],{"class":182},[123,46682,42342],{"class":133},[123,46684,179],{"class":129},[123,46686,38020],{"class":133},[123,46688,46689,46691,46693,46695,46697,46699,46701,46703,46705,46707,46709,46711,46713,46715,46717],{"class":125,"line":9813},[123,46690,42240],{"class":133},[123,46692,42353],{"class":182},[123,46694,512],{"class":133},[123,46696,42170],{"class":182},[123,46698,42249],{"class":133},[123,46700,343],{"class":182},[123,46702,512],{"class":133},[123,46704,42366],{"class":182},[123,46706,42258],{"class":133},[123,46708,735],{"class":182},[123,46710,512],{"class":133},[123,46712,741],{"class":182},[123,46714,42267],{"class":133},[123,46716,337],{"class":182},[123,46718,38058],{"class":133},[123,46720,46721,46723,46725,46727,46729,46731,46733,46735,46737,46739,46741,46743,46745,46747,46749],{"class":125,"line":9822},[123,46722,42240],{"class":133},[123,46724,38468],{"class":182},[123,46726,512],{"class":133},[123,46728,21058],{"class":182},[123,46730,42249],{"class":133},[123,46732,752],{"class":182},[123,46734,512],{"class":133},[123,46736,31512],{"class":182},[123,46738,42258],{"class":133},[123,46740,934],{"class":182},[123,46742,512],{"class":133},[123,46744,337],{"class":182},[123,46746,42267],{"class":133},[123,46748,337],{"class":182},[123,46750,38058],{"class":133},[123,46752,46753,46755,46757,46759,46761,46763,46765,46767,46769,46771,46773,46775,46777,46779,46781],{"class":125,"line":9827},[123,46754,42240],{"class":133},[123,46756,38468],{"class":182},[123,46758,512],{"class":133},[123,46760,32081],{"class":182},[123,46762,42249],{"class":133},[123,46764,32081],{"class":182},[123,46766,512],{"class":133},[123,46768,34881],{"class":182},[123,46770,42258],{"class":133},[123,46772,934],{"class":182},[123,46774,512],{"class":133},[123,46776,337],{"class":182},[123,46778,42267],{"class":133},[123,46780,337],{"class":182},[123,46782,38058],{"class":133},[123,46784,46785,46787,46789,46791,46793,46795,46797,46799,46801,46803,46805,46807,46809,46811,46813],{"class":125,"line":9833},[123,46786,42240],{"class":133},[123,46788,38468],{"class":182},[123,46790,512],{"class":133},[123,46792,752],{"class":182},[123,46794,42249],{"class":133},[123,46796,32081],{"class":182},[123,46798,512],{"class":133},[123,46800,42463],{"class":182},[123,46802,42258],{"class":133},[123,46804,331],{"class":182},[123,46806,512],{"class":133},[123,46808,337],{"class":182},[123,46810,42267],{"class":133},[123,46812,337],{"class":182},[123,46814,38058],{"class":133},[123,46816,46817,46819,46821,46823,46825,46827,46829,46831,46833,46835,46837,46839,46841,46843,46845],{"class":125,"line":9854},[123,46818,42240],{"class":133},[123,46820,42484],{"class":182},[123,46822,512],{"class":133},[123,46824,34881],{"class":182},[123,46826,42249],{"class":133},[123,46828,21058],{"class":182},[123,46830,512],{"class":133},[123,46832,42497],{"class":182},[123,46834,42258],{"class":133},[123,46836,331],{"class":182},[123,46838,512],{"class":133},[123,46840,32081],{"class":182},[123,46842,42267],{"class":133},[123,46844,32081],{"class":182},[123,46846,38058],{"class":133},[123,46848,46849,46851,46853,46855,46857,46859,46861,46863,46865,46867,46869,46871,46873],{"class":125,"line":9860},[123,46850,38108],{"class":133},[123,46852,30885],{"class":5226},[123,46854,179],{"class":129},[123,46856,205],{"class":182},[123,46858,512],{"class":133},[123,46860,30940],{"class":5226},[123,46862,179],{"class":129},[123,46864,211],{"class":182},[123,46866,512],{"class":133},[123,46868,30894],{"class":5226},[123,46870,179],{"class":129},[123,46872,351],{"class":182},[123,46874,140],{"class":133},[123,46876,46877],{"class":125,"line":9874},[123,46878,38137],{"class":133},[123,46880,46881,46883,46885,46887],{"class":125,"line":9880},[123,46882,30856],{"class":182},[123,46884,42550],{"class":133},[123,46886,179],{"class":129},[123,46888,38020],{"class":133},[123,46890,46891,46893,46895,46897,46899,46901,46903,46905,46907,46909,46911,46913,46915,46917,46919],{"class":125,"line":9907},[123,46892,42240],{"class":133},[123,46894,42561],{"class":182},[123,46896,512],{"class":133},[123,46898,34881],{"class":182},[123,46900,42249],{"class":133},[123,46902,21058],{"class":182},[123,46904,512],{"class":133},[123,46906,42497],{"class":182},[123,46908,42258],{"class":133},[123,46910,331],{"class":182},[123,46912,512],{"class":133},[123,46914,32081],{"class":182},[123,46916,42267],{"class":133},[123,46918,32081],{"class":182},[123,46920,38058],{"class":133},[123,46922,46923,46925,46927,46929,46931,46933,46935,46937,46939,46941,46943,46945,46947,46949,46951],{"class":125,"line":9916},[123,46924,42240],{"class":133},[123,46926,42561],{"class":182},[123,46928,512],{"class":133},[123,46930,34951],{"class":182},[123,46932,42249],{"class":133},[123,46934,42170],{"class":182},[123,46936,512],{"class":133},[123,46938,34951],{"class":182},[123,46940,42258],{"class":133},[123,46942,741],{"class":182},[123,46944,512],{"class":133},[123,46946,32081],{"class":182},[123,46948,42267],{"class":133},[123,46950,32081],{"class":182},[123,46952,38058],{"class":133},[123,46954,46955,46957,46959,46961,46963],{"class":125,"line":9922},[123,46956,42624],{"class":133},[123,46958,351],{"class":182},[123,46960,512],{"class":133},[123,46962,351],{"class":182},[123,46964,42633],{"class":133},[123,46966,46967],{"class":125,"line":9930},[123,46968,38801],{"class":133},[123,46970,46971,46973,46975,46977,46979],{"class":125,"line":9935},[123,46972,38806],{"class":133},[123,46974,42644],{"class":182},[123,46976,512],{"class":133},[123,46978,211],{"class":182},[123,46980,140],{"class":133},[123,46982,46983],{"class":125,"line":16614},[123,46984,38137],{"class":133},[123,46986,46987],{"class":125,"line":16620},[123,46988,42659],{"class":192},[123,46990,46991,46993,46995,46997,46999],{"class":125,"line":16643},[123,46992,3412],{"class":129},[123,46994,38879],{"class":133},[123,46996,26054],{"class":129},[123,46998,38884],{"class":182},[123,47000,38887],{"class":133},[123,47002,47003,47005,47007],{"class":125,"line":16649},[123,47004,4651],{"class":129},[123,47006,38899],{"class":182},[123,47008,38902],{"class":133},[123,47010,47011,47013,47015,47017,47019,47021,47023,47025,47027],{"class":125,"line":16672},[123,47012,38912],{"class":133},[123,47014,42686],{"class":5226},[123,47016,179],{"class":129},[123,47018,42691],{"class":238},[123,47020,512],{"class":133},[123,47022,38915],{"class":5226},[123,47024,179],{"class":129},[123,47026,38920],{"class":238},[123,47028,140],{"class":133},[123,47030,47031],{"class":125,"line":16686},[123,47032,42706],{"class":192},[123,47034,47035],{"class":125,"line":16706},[123,47036,42711],{"class":192},[123,47038,47039],{"class":125,"line":16712},[123,47040,42716],{"class":192},[123,47042,47043],{"class":125,"line":16723},[123,47044,42721],{"class":192},[123,47046,47047],{"class":125,"line":16746},[123,47048,42726],{"class":192},[123,47050,47051],{"class":125,"line":16768},[123,47052,42731],{"class":192},[123,47054,47055,47057,47059,47061,47063,47065],{"class":125,"line":16773},[123,47056,38932],{"class":129},[123,47058,38935],{"class":133},[123,47060,38938],{"class":129},[123,47062,38941],{"class":129},[123,47064,38944],{"class":182},[123,47066,3748],{"class":133},[123,47068,47069,47071,47073],{"class":125,"line":16779},[123,47070,38956],{"class":133},[123,47072,325],{"class":182},[123,47074,140],{"class":133},[123,47076,47077,47079,47081],{"class":125,"line":16793},[123,47078,42758],{"class":129},[123,47080,38899],{"class":182},[123,47082,38975],{"class":133},[123,47084,47085,47087,47089,47091,47093],{"class":125,"line":16806},[123,47086,42767],{"class":133},[123,47088,325],{"class":182},[123,47090,512],{"class":133},[123,47092,38997],{"class":182},[123,47094,140],{"class":133},[123,47096,47097,47099,47101,47103,47105,47107],{"class":125,"line":16811},[123,47098,42780],{"class":129},[123,47100,38935],{"class":133},[123,47102,38938],{"class":129},[123,47104,38941],{"class":129},[123,47106,38944],{"class":182},[123,47108,3748],{"class":133},[123,47110,47111,47113,47115],{"class":125,"line":16825},[123,47112,42795],{"class":133},[123,47114,325],{"class":182},[123,47116,140],{"class":133},[123,47118,47119],{"class":125,"line":16830},[123,47120,35176],{"class":192},[123,47122,47123,47125,47127],{"class":125,"line":16836},[123,47124,30812],{"class":129},[123,47126,31104],{"class":1972},[123,47128,31107],{"class":133},[123,47130,47131,47133,47135,47137],{"class":125,"line":16841},[123,47132,31112],{"class":133},[123,47134,179],{"class":129},[123,47136,30834],{"class":182},[123,47138,42822],{"class":133},[123,47140,47141,47143,47145,47147],{"class":125,"line":16855},[123,47142,31112],{"class":133},[123,47144,179],{"class":129},[123,47146,30834],{"class":182},[123,47148,42833],{"class":133},[123,47150,47151,47153,47155,47157],{"class":125,"line":16860},[123,47152,31112],{"class":133},[123,47154,179],{"class":129},[123,47156,30834],{"class":182},[123,47158,42844],{"class":133},[123,47160,47161,47163,47165,47167],{"class":125,"line":16865},[123,47162,31112],{"class":133},[123,47164,179],{"class":129},[123,47166,30834],{"class":182},[123,47168,42855],{"class":133},[123,47170,47171,47173,47175,47177],{"class":125,"line":16879},[123,47172,31112],{"class":133},[123,47174,179],{"class":129},[123,47176,30834],{"class":182},[123,47178,42866],{"class":133},[123,47180,47181,47183],{"class":125,"line":16891},[123,47182,14762],{"class":129},[123,47184,31220],{"class":133},[123,47186,47187],{"class":125,"line":16896},[123,47188,2409],{"emptyLinePlaceholder":50},[123,47190,47191],{"class":125,"line":16909},[123,47192,42881],{"class":192},[123,47194,47195,47197,47199,47201,47203],{"class":125,"line":16914},[123,47196,1540],{"class":129},[123,47198,31231],{"class":182},[123,47200,2958],{"class":129},[123,47202,31236],{"class":238},[123,47204,3748],{"class":133},[123,47206,47207,47209,47211,47213,47215,47217,47219,47221,47223],{"class":125,"line":16919},[123,47208,31248],{"class":133},[123,47210,179],{"class":129},[123,47212,30462],{"class":133},[123,47214,31255],{"class":238},[123,47216,1713],{"class":129},[123,47218,31260],{"class":133},[123,47220,1710],{"class":129},[123,47222,30487],{"class":238},[123,47224,140],{"class":133},[123,47226,47227,47229,47231],{"class":125,"line":16924},[123,47228,31300],{"class":133},[123,47230,179],{"class":129},[123,47232,42922],{"class":133},[123,47234,47235,47237,47239,47241,47243,47245,47247,47249],{"class":125,"line":16937},[123,47236,31310],{"class":182},[123,47238,31313],{"class":133},[123,47240,351],{"class":182},[123,47242,512],{"class":133},[123,47244,31512],{"class":182},[123,47246,512],{"class":133},[123,47248,31512],{"class":182},[123,47250,31326],{"class":133},[22008,47252,47254],{"id":47253},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47256,47257],{},"计算图片的均值与方差，用于训练中归一化处理操作",[114,47259,47261],{"className":30389,"code":47260,"language":30391,"meta":37,"style":37},"# 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",[120,47262,47263,47268,47281,47286,47292,47297,47307,47311,47316,47326,47330,47335,47345,47362,47366,47371,47383,47395,47426,47435,47445,47455,47459,47464,47479,47483,47488,47493,47498,47508,47513,47538,47542,47547,47562,47566,47579,47583,47588,47593,47598,47603,47608,47618,47628,47651,47659,47667,47675,47679,47691,47695,47700,47704,47708,47715,47735,47759,47766,47780,47785,47790,47794,47808,47812,47824],{"__ignoreMap":37},[123,47264,47265],{"class":125,"line":126},[123,47266,47267],{"class":192},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[123,47269,47270,47272,47275,47278],{"class":125,"line":45},[123,47271,30748],{"class":129},[123,47273,47274],{"class":182}," PIL",[123,47276,47277],{"class":129}," import",[123,47279,47280],{"class":133}," Image\n",[123,47282,47283],{"class":125,"line":1189},[123,47284,47285],{"class":192},"# os 用来处理文件夹和文件路径\n",[123,47287,47288,47290],{"class":125,"line":1204},[123,47289,30403],{"class":129},[123,47291,45316],{"class":133},[123,47293,47294],{"class":125,"line":1210},[123,47295,47296],{"class":192},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[123,47298,47299,47301,47303,47305],{"class":125,"line":1224},[123,47300,30403],{"class":129},[123,47302,31391],{"class":133},[123,47304,31394],{"class":129},[123,47306,31397],{"class":133},[123,47308,47309],{"class":125,"line":1230},[123,47310,2409],{"emptyLinePlaceholder":50},[123,47312,47313],{"class":125,"line":1321},[123,47314,47315],{"class":192},"# 文件夹路径，包含所有图片文件\n",[123,47317,47318,47321,47323],{"class":125,"line":1327},[123,47319,47320],{"class":133},"folder_path ",[123,47322,179],{"class":129},[123,47324,47325],{"class":238}," 'data_cat_dog'\n",[123,47327,47328],{"class":125,"line":1339},[123,47329,2409],{"emptyLinePlaceholder":50},[123,47331,47332],{"class":125,"line":1621},[123,47333,47334],{"class":192},"# 初始化累积变量\n",[123,47336,47337,47340,47342],{"class":125,"line":1626},[123,47338,47339],{"class":133},"total_pixels ",[123,47341,179],{"class":129},[123,47343,47344],{"class":182}," 0\n",[123,47346,47347,47350,47352,47355,47357,47359],{"class":125,"line":1632},[123,47348,47349],{"class":133},"sum_normalized_pixel_values ",[123,47351,179],{"class":129},[123,47353,47354],{"class":133}," np.zeros(",[123,47356,205],{"class":182},[123,47358,45819],{"class":133},[123,47360,47361],{"class":192},"# 如果是RGB图像，需要三个通道的均值和方差\n",[123,47363,47364],{"class":125,"line":1637},[123,47365,2409],{"emptyLinePlaceholder":50},[123,47367,47368],{"class":125,"line":1651},[123,47369,47370],{"class":192},"# 遍历文件夹中的图片文件\n",[123,47372,47373,47375,47378,47380],{"class":125,"line":1656},[123,47374,3034],{"class":129},[123,47376,47377],{"class":133}," root, dirs, files ",[123,47379,26054],{"class":129},[123,47381,47382],{"class":133}," os.walk(folder_path):\n",[123,47384,47385,47387,47390,47392],{"class":125,"line":1662},[123,47386,3210],{"class":129},[123,47388,47389],{"class":133}," filename ",[123,47391,26054],{"class":129},[123,47393,47394],{"class":133}," files:\n",[123,47396,47397,47399,47402,47405,47407,47410,47412,47415,47417,47420,47423],{"class":125,"line":1683},[123,47398,2506],{"class":129},[123,47400,47401],{"class":133}," filename.endswith((",[123,47403,47404],{"class":238},"'.jpg'",[123,47406,12445],{"class":133},[123,47408,47409],{"class":238},"'.jpeg'",[123,47411,12445],{"class":133},[123,47413,47414],{"class":238},"'.png'",[123,47416,12445],{"class":133},[123,47418,47419],{"class":238},"'.bmp'",[123,47421,47422],{"class":133},")):  ",[123,47424,47425],{"class":192},"# 可根据实际情况添加其他格式\n",[123,47427,47428,47430,47432],{"class":125,"line":1688},[123,47429,45684],{"class":133},[123,47431,179],{"class":129},[123,47433,47434],{"class":133}," os.path.join(root, filename)\n",[123,47436,47437,47440,47442],{"class":125,"line":1702},[123,47438,47439],{"class":133},"            image ",[123,47441,179],{"class":129},[123,47443,47444],{"class":133}," Image.open(image_path)\n",[123,47446,47447,47450,47452],{"class":125,"line":1707},[123,47448,47449],{"class":133},"            image_array ",[123,47451,179],{"class":129},[123,47453,47454],{"class":133}," np.array(image)\n",[123,47456,47457],{"class":125,"line":1736},[123,47458,2409],{"emptyLinePlaceholder":50},[123,47460,47461],{"class":125,"line":1741},[123,47462,47463],{"class":192},"            # 归一化像素值到0-1之间\n",[123,47465,47466,47469,47471,47474,47476],{"class":125,"line":1758},[123,47467,47468],{"class":133},"            normalized_image_array ",[123,47470,179],{"class":129},[123,47472,47473],{"class":133}," image_array ",[123,47475,718],{"class":129},[123,47477,47478],{"class":182}," 255.0\n",[123,47480,47481],{"class":125,"line":1763},[123,47482,2409],{"emptyLinePlaceholder":50},[123,47484,47485],{"class":125,"line":1768},[123,47486,47487],{"class":192},"            # print(image_path)\n",[123,47489,47490],{"class":125,"line":1773},[123,47491,47492],{"class":192},"            # print(normalized_image_array.shape)\n",[123,47494,47495],{"class":125,"line":1787},[123,47496,47497],{"class":192},"            # 累积归一化后的像素值和像素数量\n",[123,47499,47500,47503,47505],{"class":125,"line":1792},[123,47501,47502],{"class":133},"            total_pixels ",[123,47504,9487],{"class":129},[123,47506,47507],{"class":133}," normalized_image_array.size\n",[123,47509,47510],{"class":125,"line":2586},[123,47511,47512],{"class":192},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[123,47514,47515,47518,47520,47523,47526,47528,47530,47532,47534,47536],{"class":125,"line":2600},[123,47516,47517],{"class":133},"            sum_normalized_pixel_values ",[123,47519,9487],{"class":129},[123,47521,47522],{"class":133}," np.sum(normalized_image_array, ",[123,47524,47525],{"class":5226},"axis",[123,47527,179],{"class":129},[123,47529,134],{"class":133},[123,47531,325],{"class":182},[123,47533,12445],{"class":133},[123,47535,351],{"class":182},[123,47537,30508],{"class":133},[123,47539,47540],{"class":125,"line":2608},[123,47541,2409],{"emptyLinePlaceholder":50},[123,47543,47544],{"class":125,"line":2613},[123,47545,47546],{"class":192},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[123,47548,47549,47552,47554,47557,47559],{"class":125,"line":2619},[123,47550,47551],{"class":133},"mean ",[123,47553,179],{"class":129},[123,47555,47556],{"class":133}," sum_normalized_pixel_values ",[123,47558,718],{"class":129},[123,47560,47561],{"class":133}," total_pixels\n",[123,47563,47564],{"class":125,"line":2625},[123,47565,2409],{"emptyLinePlaceholder":50},[123,47567,47568,47571,47573,47575,47577],{"class":125,"line":2630},[123,47569,47570],{"class":133},"sum_squared_diff ",[123,47572,179],{"class":129},[123,47574,47354],{"class":133},[123,47576,205],{"class":182},[123,47578,140],{"class":133},[123,47580,47581],{"class":125,"line":7958},[123,47582,2409],{"emptyLinePlaceholder":50},[123,47584,47585],{"class":125,"line":7982},[123,47586,47587],{"class":192},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[123,47589,47590],{"class":125,"line":7987},[123,47591,47592],{"class":192},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[123,47594,47595],{"class":125,"line":7993},[123,47596,47597],{"class":192},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[123,47599,47600],{"class":125,"line":8020},[123,47601,47602],{"class":192},"# Image.open(image_path)：打开图片\n",[123,47604,47605],{"class":125,"line":8025},[123,47606,47607],{"class":192},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[123,47609,47610,47612,47614,47616],{"class":125,"line":8031},[123,47611,3034],{"class":129},[123,47613,47377],{"class":133},[123,47615,26054],{"class":129},[123,47617,47382],{"class":133},[123,47619,47620,47622,47624,47626],{"class":125,"line":8043},[123,47621,3210],{"class":129},[123,47623,47389],{"class":133},[123,47625,26054],{"class":129},[123,47627,47394],{"class":133},[123,47629,47630,47632,47634,47636,47638,47640,47642,47644,47646,47648],{"class":125,"line":8055},[123,47631,2506],{"class":129},[123,47633,47401],{"class":133},[123,47635,47404],{"class":238},[123,47637,12445],{"class":133},[123,47639,47409],{"class":238},[123,47641,12445],{"class":133},[123,47643,47414],{"class":238},[123,47645,12445],{"class":133},[123,47647,47419],{"class":238},[123,47649,47650],{"class":133},")):\n",[123,47652,47653,47655,47657],{"class":125,"line":8067},[123,47654,45684],{"class":133},[123,47656,179],{"class":129},[123,47658,47434],{"class":133},[123,47660,47661,47663,47665],{"class":125,"line":9726},[123,47662,47439],{"class":133},[123,47664,179],{"class":129},[123,47666,47444],{"class":133},[123,47668,47669,47671,47673],{"class":125,"line":9751},[123,47670,47449],{"class":133},[123,47672,179],{"class":129},[123,47674,47454],{"class":133},[123,47676,47677],{"class":125,"line":9774},[123,47678,47463],{"class":192},[123,47680,47681,47683,47685,47687,47689],{"class":125,"line":9798},[123,47682,47468],{"class":133},[123,47684,179],{"class":129},[123,47686,47473],{"class":133},[123,47688,718],{"class":129},[123,47690,47478],{"class":182},[123,47692,47693],{"class":125,"line":9803},[123,47694,47492],{"class":192},[123,47696,47697],{"class":125,"line":9808},[123,47698,47699],{"class":192},"            # print(mean.shape)\n",[123,47701,47702],{"class":125,"line":9813},[123,47703,47487],{"class":192},[123,47705,47706],{"class":125,"line":9822},[123,47707,2409],{"emptyLinePlaceholder":50},[123,47709,47710,47713],{"class":125,"line":9827},[123,47711,47712],{"class":129},"            try",[123,47714,3748],{"class":133},[123,47716,47717,47720,47722,47725,47727,47730,47732],{"class":125,"line":9833},[123,47718,47719],{"class":133},"                diff ",[123,47721,179],{"class":129},[123,47723,47724],{"class":133}," (normalized_image_array ",[123,47726,666],{"class":129},[123,47728,47729],{"class":133}," mean) ",[123,47731,10671],{"class":129},[123,47733,47734],{"class":182}," 2\n",[123,47736,47737,47740,47742,47745,47747,47749,47751,47753,47755,47757],{"class":125,"line":9854},[123,47738,47739],{"class":133},"                sum_squared_diff ",[123,47741,9487],{"class":129},[123,47743,47744],{"class":133}," np.sum(diff, ",[123,47746,47525],{"class":5226},[123,47748,179],{"class":129},[123,47750,134],{"class":133},[123,47752,325],{"class":182},[123,47754,12445],{"class":133},[123,47756,351],{"class":182},[123,47758,30508],{"class":133},[123,47760,47761,47764],{"class":125,"line":9860},[123,47762,47763],{"class":129},"            except",[123,47765,3748],{"class":133},[123,47767,47768,47771,47773,47775,47778],{"class":125,"line":9874},[123,47769,47770],{"class":182},"                print",[123,47772,134],{"class":133},[123,47774,186],{"class":129},[123,47776,47777],{"class":238},"\"捕获到自定义异常\"",[123,47779,140],{"class":133},[123,47781,47782],{"class":125,"line":9880},[123,47783,47784],{"class":192},"            # diff = (normalized_image_array - mean) ** 2\n",[123,47786,47787],{"class":125,"line":9907},[123,47788,47789],{"class":192},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[123,47791,47792],{"class":125,"line":9916},[123,47793,2409],{"emptyLinePlaceholder":50},[123,47795,47796,47799,47801,47804,47806],{"class":125,"line":9922},[123,47797,47798],{"class":133},"variance ",[123,47800,179],{"class":129},[123,47802,47803],{"class":133}," sum_squared_diff ",[123,47805,718],{"class":129},[123,47807,47561],{"class":133},[123,47809,47810],{"class":125,"line":9930},[123,47811,2409],{"emptyLinePlaceholder":50},[123,47813,47814,47816,47818,47821],{"class":125,"line":9935},[123,47815,30426],{"class":182},[123,47817,134],{"class":133},[123,47819,47820],{"class":238},"\"Mean:\"",[123,47822,47823],{"class":133},", mean)\n",[123,47825,47826,47828,47830,47833],{"class":125,"line":16614},[123,47827,30426],{"class":182},[123,47829,134],{"class":133},[123,47831,47832],{"class":238},"\"Variance:\"",[123,47834,47835],{"class":133},", variance)\n",[114,47837,47839],{"className":30389,"code":47838,"language":30391,"meta":37,"style":37},"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",[120,47840,47841,47847,47853,47863,47869,47879,47893,47903,47913,47923,47927,47937,47947,47951,47955,47963,47968,47973,47992,47996,48001,48006,48011,48016,48057,48062,48072,48077,48090,48095,48100,48105,48110,48115,48119,48124,48129,48151,48155,48187,48201,48211,48221,48225,48235,48249,48259,48269,48279,48285,48289,48293,48297,48301,48305,48313,48333,48337,48341,48345,48349,48365,48369,48373,48381,48385,48389,48397,48401,48405,48409,48417,48421,48425,48429,48437,48441,48449,48453,48461,48465,48473,48477,48485,48489,48493,48501,48505,48509,48521,48545,48559,48563,48567,48571,48579,48583,48591,48595,48603,48607,48615,48619,48627,48631,48639,48643,48655,48659,48667,48671,48679,48683,48687,48691,48695,48703,48707,48723,48727,48735,48739,48743,48747,48751,48755,48759,48763,48779,48783,48795,48799,48811,48815,48827,48831,48839,48843,48851,48855,48859,48863,48869,48873,48881,48885,48901,48905,48913,48917,48933,48945,48949,48961,48965,48969,48977,48981,48985,48993,48997,49005,49009,49017,49021,49025,49067,49109,49113,49117,49133,49137,49153,49157,49161,49169,49173,49177,49189,49227,49231,49235,49243,49247,49261,49271,49277,49283,49289,49295,49299,49303,49309,49313,49317,49325,49329,49347,49351,49355,49359,49375,49379,49383,49387,49391,49395,49415,49435,49439,49443,49447,49455,49463,49467,49483,49503,49523,49527,49532,49541,49550,49555,49560,49565,49578,49583,49592,49601,49618],{"__ignoreMap":37},[123,47842,47843,47845],{"class":125,"line":126},[123,47844,30403],{"class":129},[123,47846,31833],{"class":133},[123,47848,47849,47851],{"class":125,"line":45},[123,47850,30403],{"class":129},[123,47852,31840],{"class":133},[123,47854,47855,47857,47859,47861],{"class":125,"line":1189},[123,47856,30403],{"class":129},[123,47858,31851],{"class":133},[123,47860,31394],{"class":129},[123,47862,31856],{"class":133},[123,47864,47865,47867],{"class":125,"line":1204},[123,47866,30403],{"class":129},[123,47868,30406],{"class":133},[123,47870,47871,47873,47875,47877],{"class":125,"line":1210},[123,47872,30748],{"class":129},[123,47874,31426],{"class":133},[123,47876,30403],{"class":129},[123,47878,31873],{"class":133},[123,47880,47881,47883,47885,47887,47890],{"class":125,"line":1224},[123,47882,30748],{"class":129},[123,47884,31379],{"class":133},[123,47886,30403],{"class":129},[123,47888,47889],{"class":133}," ImageFolder ",[123,47891,47892],{"class":192},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[123,47894,47895,47897,47899,47901],{"class":125,"line":1230},[123,47896,30748],{"class":129},[123,47898,31409],{"class":133},[123,47900,30403],{"class":129},[123,47902,31414],{"class":133},[123,47904,47905,47907,47909,47911],{"class":125,"line":1321},[123,47906,30403],{"class":129},[123,47908,31426],{"class":133},[123,47910,31394],{"class":129},[123,47912,31431],{"class":133},[123,47914,47915,47917,47919,47921],{"class":125,"line":1327},[123,47916,30403],{"class":129},[123,47918,31443],{"class":133},[123,47920,31394],{"class":129},[123,47922,31448],{"class":133},[123,47924,47925],{"class":125,"line":1339},[123,47926,31918],{"class":192},[123,47928,47929,47931,47933,47935],{"class":125,"line":1621},[123,47930,30748],{"class":129},[123,47932,31925],{"class":133},[123,47934,30403],{"class":129},[123,47936,43042],{"class":133},[123,47938,47939,47941,47943,47945],{"class":125,"line":1626},[123,47940,30748],{"class":129},[123,47942,30751],{"class":133},[123,47944,30403],{"class":129},[123,47946,30756],{"class":133},[123,47948,47949],{"class":125,"line":1632},[123,47950,2409],{"emptyLinePlaceholder":50},[123,47952,47953],{"class":125,"line":1637},[123,47954,31953],{"class":192},[123,47956,47957,47959,47961],{"class":125,"line":1651},[123,47958,31958],{"class":129},[123,47960,31961],{"class":1972},[123,47962,31964],{"class":133},[123,47964,47965],{"class":125,"line":1656},[123,47966,47967],{"class":192},"    # 导入自己的数据集，并进行数据处理\n",[123,47969,47970],{"class":125,"line":1662},[123,47971,47972],{"class":192},"    # 定义数据集的路径\n",[123,47974,47975,47978,47980,47982,47984,47986,47990],{"class":125,"line":1683},[123,47976,47977],{"class":182},"    ROOT_PATH",[123,47979,179],{"class":129},[123,47981,804],{"class":129},[123,47983,385],{"class":238},[123,47985,692],{"class":182},[123,47987,47989],{"class":47988},"sA_wV","\u002Fdata\u002Ftrain",[123,47991,25144],{"class":238},[123,47993,47994],{"class":125,"line":1688},[123,47995,2409],{"emptyLinePlaceholder":50},[123,47997,47998],{"class":125,"line":1702},[123,47999,48000],{"class":192},"    # 定义归一化方法\n",[123,48002,48003],{"class":125,"line":1707},[123,48004,48005],{"class":192},"    # 这里需要先计算一下数据集的均值和方差\n",[123,48007,48008],{"class":125,"line":1736},[123,48009,48010],{"class":192},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[123,48012,48013],{"class":125,"line":1741},[123,48014,48015],{"class":192},"    # 第一个参数是均值，第二个参数是方差\n",[123,48017,48018,48021,48023,48026,48029,48031,48034,48036,48039,48042,48045,48047,48050,48052,48055],{"class":125,"line":1758},[123,48019,48020],{"class":133},"    normalize",[123,48022,179],{"class":129},[123,48024,48025],{"class":133},"transforms.Normalize([",[123,48027,48028],{"class":182},"0.162",[123,48030,512],{"class":133},[123,48032,48033],{"class":182},"0.151",[123,48035,512],{"class":133},[123,48037,48038],{"class":182},"0.138",[123,48040,48041],{"class":133},"],[",[123,48043,48044],{"class":182},"0.058",[123,48046,512],{"class":133},[123,48048,48049],{"class":182},"0.052",[123,48051,512],{"class":133},[123,48053,48054],{"class":182},"0.048",[123,48056,4666],{"class":133},[123,48058,48059],{"class":125,"line":1763},[123,48060,48061],{"class":192},"    # 定义数据集处理方法变量\n",[123,48063,48064,48067,48069],{"class":125,"line":1768},[123,48065,48066],{"class":133},"    train_transform",[123,48068,179],{"class":129},[123,48070,48071],{"class":133},"transforms.Compose([\n",[123,48073,48074],{"class":125,"line":1773},[123,48075,48076],{"class":192},"        # 调整图像大小为224*224\n",[123,48078,48079,48082,48084,48086,48088],{"class":125,"line":1787},[123,48080,48081],{"class":133},"        transforms.Resize((",[123,48083,31512],{"class":182},[123,48085,512],{"class":133},[123,48087,31512],{"class":182},[123,48089,42633],{"class":133},[123,48091,48092],{"class":125,"line":1792},[123,48093,48094],{"class":192},"        # 将图像转换为张量\n",[123,48096,48097],{"class":125,"line":2586},[123,48098,48099],{"class":133},"        transforms.ToTensor(),\n",[123,48101,48102],{"class":125,"line":2600},[123,48103,48104],{"class":133},"        normalize])\n",[123,48106,48107],{"class":125,"line":2608},[123,48108,48109],{"class":192},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[123,48111,48112],{"class":125,"line":2613},[123,48113,48114],{"class":192},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[123,48116,48117],{"class":125,"line":2619},[123,48118,2409],{"emptyLinePlaceholder":50},[123,48120,48121],{"class":125,"line":2625},[123,48122,48123],{"class":192},"    # 加载数据集\n",[123,48125,48126],{"class":125,"line":2630},[123,48127,48128],{"class":192},"    # 传入数据集路径与处理方法\n",[123,48130,48131,48133,48135,48138,48141,48143,48146,48148],{"class":125,"line":7958},[123,48132,31969],{"class":133},[123,48134,179],{"class":129},[123,48136,48137],{"class":133},"ImageFolder(",[123,48139,48140],{"class":182},"ROOT_PATH",[123,48142,512],{"class":133},[123,48144,48145],{"class":5226},"transform",[123,48147,179],{"class":129},[123,48149,48150],{"class":133},"train_transform)\n",[123,48152,48153],{"class":125,"line":7982},[123,48154,2409],{"emptyLinePlaceholder":50},[123,48156,48157,48159,48161,48163,48165,48167,48169,48171,48173,48175,48177,48179,48181,48183,48185],{"class":125,"line":7987},[123,48158,32021],{"class":133},[123,48160,179],{"class":129},[123,48162,32026],{"class":133},[123,48164,32029],{"class":182},[123,48166,134],{"class":133},[123,48168,32034],{"class":182},[123,48170,589],{"class":129},[123,48172,7368],{"class":182},[123,48174,32041],{"class":133},[123,48176,32029],{"class":182},[123,48178,134],{"class":133},[123,48180,32048],{"class":182},[123,48182,589],{"class":129},[123,48184,7368],{"class":182},[123,48186,32055],{"class":133},[123,48188,48189,48191,48193,48195,48197,48199],{"class":125,"line":7993},[123,48190,32060],{"class":133},[123,48192,179],{"class":129},[123,48194,32065],{"class":133},[123,48196,31548],{"class":5226},[123,48198,179],{"class":129},[123,48200,31553],{"class":133},[123,48202,48203,48205,48207,48209],{"class":125,"line":8020},[123,48204,32076],{"class":5226},[123,48206,179],{"class":129},[123,48208,331],{"class":182},[123,48210,31477],{"class":133},[123,48212,48213,48215,48217,48219],{"class":125,"line":8025},[123,48214,32088],{"class":5226},[123,48216,179],{"class":129},[123,48218,31487],{"class":182},[123,48220,31477],{"class":133},[123,48222,48223],{"class":125,"line":8031},[123,48224,32099],{"class":192},[123,48226,48227,48229,48231,48233],{"class":125,"line":8043},[123,48228,32104],{"class":5226},[123,48230,179],{"class":129},[123,48232,529],{"class":182},[123,48234,140],{"class":133},[123,48236,48237,48239,48241,48243,48245,48247],{"class":125,"line":8055},[123,48238,32115],{"class":133},[123,48240,179],{"class":129},[123,48242,31545],{"class":133},[123,48244,31548],{"class":5226},[123,48246,179],{"class":129},[123,48248,32126],{"class":133},[123,48250,48251,48253,48255,48257],{"class":125,"line":8067},[123,48252,32131],{"class":5226},[123,48254,179],{"class":129},[123,48256,331],{"class":182},[123,48258,31477],{"class":133},[123,48260,48261,48263,48265,48267],{"class":125,"line":9726},[123,48262,32142],{"class":5226},[123,48264,179],{"class":129},[123,48266,31487],{"class":182},[123,48268,31477],{"class":133},[123,48270,48271,48273,48275,48277],{"class":125,"line":9751},[123,48272,32153],{"class":5226},[123,48274,179],{"class":129},[123,48276,529],{"class":182},[123,48278,140],{"class":133},[123,48280,48281,48283],{"class":125,"line":9774},[123,48282,4099],{"class":129},[123,48284,32166],{"class":133},[123,48286,48287],{"class":125,"line":9798},[123,48288,2409],{"emptyLinePlaceholder":50},[123,48290,48291],{"class":125,"line":9803},[123,48292,32175],{"class":192},[123,48294,48295],{"class":125,"line":9808},[123,48296,32180],{"class":192},[123,48298,48299],{"class":125,"line":9813},[123,48300,2409],{"emptyLinePlaceholder":50},[123,48302,48303],{"class":125,"line":9822},[123,48304,32189],{"class":192},[123,48306,48307,48309,48311],{"class":125,"line":9827},[123,48308,31958],{"class":129},[123,48310,32196],{"class":1972},[123,48312,32199],{"class":133},[123,48314,48315,48317,48319,48321,48323,48325,48327,48329,48331],{"class":125,"line":9833},[123,48316,31248],{"class":133},[123,48318,179],{"class":129},[123,48320,30462],{"class":133},[123,48322,31255],{"class":238},[123,48324,1713],{"class":129},[123,48326,31260],{"class":133},[123,48328,1710],{"class":129},[123,48330,32218],{"class":238},[123,48332,140],{"class":133},[123,48334,48335],{"class":125,"line":9854},[123,48336,2409],{"emptyLinePlaceholder":50},[123,48338,48339],{"class":125,"line":9860},[123,48340,32233],{"class":192},[123,48342,48343],{"class":125,"line":9874},[123,48344,32238],{"class":192},[123,48346,48347],{"class":125,"line":9880},[123,48348,32243],{"class":192},[123,48350,48351,48353,48355,48357,48359,48361,48363],{"class":125,"line":9907},[123,48352,32248],{"class":133},[123,48354,179],{"class":129},[123,48356,32253],{"class":133},[123,48358,32256],{"class":5226},[123,48360,179],{"class":129},[123,48362,32261],{"class":182},[123,48364,140],{"class":133},[123,48366,48367],{"class":125,"line":9916},[123,48368,2409],{"emptyLinePlaceholder":50},[123,48370,48371],{"class":125,"line":9922},[123,48372,32272],{"class":192},[123,48374,48375,48377,48379],{"class":125,"line":9930},[123,48376,32277],{"class":133},[123,48378,179],{"class":129},[123,48380,32282],{"class":133},[123,48382,48383],{"class":125,"line":9935},[123,48384,2409],{"emptyLinePlaceholder":50},[123,48386,48387],{"class":125,"line":16614},[123,48388,32291],{"class":192},[123,48390,48391,48393,48395],{"class":125,"line":16620},[123,48392,31300],{"class":133},[123,48394,179],{"class":129},[123,48396,32300],{"class":133},[123,48398,48399],{"class":125,"line":16643},[123,48400,32305],{"class":192},[123,48402,48403],{"class":125,"line":16649},[123,48404,32310],{"class":192},[123,48406,48407],{"class":125,"line":16672},[123,48408,32315],{"class":192},[123,48410,48411,48413,48415],{"class":125,"line":16686},[123,48412,32320],{"class":133},[123,48414,179],{"class":129},[123,48416,32325],{"class":133},[123,48418,48419],{"class":125,"line":16706},[123,48420,2409],{"emptyLinePlaceholder":50},[123,48422,48423],{"class":125,"line":16712},[123,48424,32338],{"class":192},[123,48426,48427],{"class":125,"line":16723},[123,48428,32343],{"class":192},[123,48430,48431,48433,48435],{"class":125,"line":16746},[123,48432,32348],{"class":133},[123,48434,179],{"class":129},[123,48436,32353],{"class":182},[123,48438,48439],{"class":125,"line":16768},[123,48440,32358],{"class":192},[123,48442,48443,48445,48447],{"class":125,"line":16773},[123,48444,32363],{"class":133},[123,48446,179],{"class":129},[123,48448,32368],{"class":133},[123,48450,48451],{"class":125,"line":16779},[123,48452,32373],{"class":192},[123,48454,48455,48457,48459],{"class":125,"line":16793},[123,48456,32378],{"class":133},[123,48458,179],{"class":129},[123,48460,32368],{"class":133},[123,48462,48463],{"class":125,"line":16806},[123,48464,32387],{"class":192},[123,48466,48467,48469,48471],{"class":125,"line":16811},[123,48468,32392],{"class":133},[123,48470,179],{"class":129},[123,48472,32368],{"class":133},[123,48474,48475],{"class":125,"line":16825},[123,48476,32401],{"class":192},[123,48478,48479,48481,48483],{"class":125,"line":16830},[123,48480,32406],{"class":133},[123,48482,179],{"class":129},[123,48484,32368],{"class":133},[123,48486,48487],{"class":125,"line":16836},[123,48488,2409],{"emptyLinePlaceholder":50},[123,48490,48491],{"class":125,"line":16841},[123,48492,32419],{"class":192},[123,48494,48495,48497,48499],{"class":125,"line":16855},[123,48496,32424],{"class":133},[123,48498,179],{"class":129},[123,48500,32429],{"class":133},[123,48502,48503],{"class":125,"line":16860},[123,48504,2409],{"emptyLinePlaceholder":50},[123,48506,48507],{"class":125,"line":16865},[123,48508,32442],{"class":192},[123,48510,48511,48513,48515,48517,48519],{"class":125,"line":16879},[123,48512,3210],{"class":129},[123,48514,32449],{"class":133},[123,48516,26054],{"class":129},[123,48518,32454],{"class":182},[123,48520,32457],{"class":133},[123,48522,48523,48525,48527,48529,48531,48533,48535,48537,48539,48541,48543],{"class":125,"line":16891},[123,48524,32462],{"class":182},[123,48526,134],{"class":133},[123,48528,32467],{"class":238},[123,48530,32470],{"class":182},[123,48532,718],{"class":238},[123,48534,32470],{"class":182},[123,48536,385],{"class":238},[123,48538,32479],{"class":133},[123,48540,666],{"class":129},[123,48542,351],{"class":182},[123,48544,30508],{"class":133},[123,48546,48547,48549,48551,48553,48555,48557],{"class":125,"line":16896},[123,48548,32462],{"class":182},[123,48550,134],{"class":133},[123,48552,32494],{"class":238},[123,48554,589],{"class":129},[123,48556,580],{"class":182},[123,48558,140],{"class":133},[123,48560,48561],{"class":125,"line":16909},[123,48562,2409],{"emptyLinePlaceholder":50},[123,48564,48565],{"class":125,"line":16914},[123,48566,32509],{"class":192},[123,48568,48569],{"class":125,"line":16919},[123,48570,32514],{"class":192},[123,48572,48573,48575,48577],{"class":125,"line":16924},[123,48574,32519],{"class":133},[123,48576,179],{"class":129},[123,48578,32353],{"class":182},[123,48580,48581],{"class":125,"line":16937},[123,48582,32528],{"class":192},[123,48584,48585,48587,48589],{"class":125,"line":16942},[123,48586,32533],{"class":133},[123,48588,179],{"class":129},[123,48590,3094],{"class":182},[123,48592,48593],{"class":125,"line":32644},[123,48594,32542],{"class":192},[123,48596,48597,48599,48601],{"class":125,"line":32650},[123,48598,32547],{"class":133},[123,48600,179],{"class":129},[123,48602,32353],{"class":182},[123,48604,48605],{"class":125,"line":32656},[123,48606,32556],{"class":192},[123,48608,48609,48611,48613],{"class":125,"line":32662},[123,48610,32561],{"class":133},[123,48612,179],{"class":129},[123,48614,3094],{"class":182},[123,48616,48617],{"class":125,"line":32668},[123,48618,32570],{"class":192},[123,48620,48621,48623,48625],{"class":125,"line":32679},[123,48622,32575],{"class":133},[123,48624,179],{"class":129},[123,48626,3094],{"class":182},[123,48628,48629],{"class":125,"line":32685},[123,48630,32584],{"class":192},[123,48632,48633,48635,48637],{"class":125,"line":32705},[123,48634,32589],{"class":133},[123,48636,179],{"class":129},[123,48638,3094],{"class":182},[123,48640,48641],{"class":125,"line":32711},[123,48642,32598],{"class":192},[123,48644,48645,48647,48649,48651,48653],{"class":125,"line":32722},[123,48646,3412],{"class":129},[123,48648,31612],{"class":133},[123,48650,26054],{"class":129},[123,48652,31617],{"class":182},[123,48654,32611],{"class":133},[123,48656,48657],{"class":125,"line":32728},[123,48658,32616],{"class":192},[123,48660,48661,48663,48665],{"class":125,"line":32734},[123,48662,32621],{"class":133},[123,48664,179],{"class":129},[123,48666,32626],{"class":133},[123,48668,48669],{"class":125,"line":32740},[123,48670,32631],{"class":192},[123,48672,48673,48675,48677],{"class":125,"line":32746},[123,48674,32636],{"class":133},[123,48676,179],{"class":129},[123,48678,32641],{"class":133},[123,48680,48681],{"class":125,"line":32752},[123,48682,32647],{"class":192},[123,48684,48685],{"class":125,"line":32758},[123,48686,32653],{"class":133},[123,48688,48689],{"class":125,"line":32764},[123,48690,32659],{"class":192},[123,48692,48693],{"class":125,"line":32784},[123,48694,32665],{"class":192},[123,48696,48697,48699,48701],{"class":125,"line":32790},[123,48698,32671],{"class":133},[123,48700,179],{"class":129},[123,48702,32676],{"class":133},[123,48704,48705],{"class":125,"line":32806},[123,48706,32682],{"class":192},[123,48708,48709,48711,48713,48715,48717,48719,48721],{"class":125,"line":32812},[123,48710,32688],{"class":133},[123,48712,179],{"class":129},[123,48714,32693],{"class":133},[123,48716,32696],{"class":5226},[123,48718,179],{"class":129},[123,48720,351],{"class":182},[123,48722,140],{"class":133},[123,48724,48725],{"class":125,"line":32826},[123,48726,32708],{"class":192},[123,48728,48729,48731,48733],{"class":125,"line":32832},[123,48730,32714],{"class":133},[123,48732,179],{"class":129},[123,48734,32719],{"class":133},[123,48736,48737],{"class":125,"line":32847},[123,48738,32725],{"class":192},[123,48740,48741],{"class":125,"line":32853},[123,48742,32731],{"class":133},[123,48744,48745],{"class":125,"line":32862},[123,48746,32737],{"class":192},[123,48748,48749],{"class":125,"line":32868},[123,48750,32743],{"class":133},[123,48752,48753],{"class":125,"line":32877},[123,48754,32749],{"class":192},[123,48756,48757],{"class":125,"line":32883},[123,48758,32755],{"class":133},[123,48760,48761],{"class":125,"line":32889},[123,48762,32761],{"class":192},[123,48764,48765,48767,48769,48771,48773,48775,48777],{"class":125,"line":32898},[123,48766,32767],{"class":133},[123,48768,9487],{"class":129},[123,48770,32772],{"class":133},[123,48772,589],{"class":129},[123,48774,32777],{"class":133},[123,48776,325],{"class":182},[123,48778,140],{"class":133},[123,48780,48781],{"class":125,"line":32904},[123,48782,32787],{"class":192},[123,48784,48785,48787,48789,48791,48793],{"class":125,"line":32915},[123,48786,32793],{"class":133},[123,48788,9487],{"class":129},[123,48790,32798],{"class":133},[123,48792,2958],{"class":129},[123,48794,32803],{"class":133},[123,48796,48797],{"class":125,"line":32921},[123,48798,32809],{"class":192},[123,48800,48801,48803,48805,48807,48809],{"class":125,"line":32940},[123,48802,32815],{"class":133},[123,48804,9487],{"class":129},[123,48806,32777],{"class":133},[123,48808,325],{"class":182},[123,48810,140],{"class":133},[123,48812,48813],{"class":125,"line":32946},[123,48814,32829],{"class":192},[123,48816,48817,48819,48821,48823,48825],{"class":125,"line":32957},[123,48818,3412],{"class":129},[123,48820,32837],{"class":133},[123,48822,26054],{"class":129},[123,48824,31617],{"class":182},[123,48826,32844],{"class":133},[123,48828,48829],{"class":125,"line":32963},[123,48830,32850],{"class":192},[123,48832,48833,48835,48837],{"class":125,"line":32983},[123,48834,32621],{"class":133},[123,48836,179],{"class":129},[123,48838,32626],{"class":133},[123,48840,48841],{"class":125,"line":32999},[123,48842,32865],{"class":192},[123,48844,48845,48847,48849],{"class":125,"line":33005},[123,48846,32636],{"class":133},[123,48848,179],{"class":129},[123,48850,32641],{"class":133},[123,48852,48853],{"class":125,"line":33019},[123,48854,32880],{"class":192},[123,48856,48857],{"class":125,"line":33025},[123,48858,32886],{"class":133},[123,48860,48861],{"class":125,"line":33031},[123,48862,36367],{"class":192},[123,48864,48865,48867],{"class":125,"line":33042},[123,48866,32892],{"class":129},[123,48868,32895],{"class":133},[123,48870,48871],{"class":125,"line":33048},[123,48872,32901],{"class":192},[123,48874,48875,48877,48879],{"class":125,"line":33054},[123,48876,36382],{"class":133},[123,48878,179],{"class":129},[123,48880,32676],{"class":133},[123,48882,48883],{"class":125,"line":33064},[123,48884,32918],{"class":192},[123,48886,48887,48889,48891,48893,48895,48897,48899],{"class":125,"line":33070},[123,48888,36395],{"class":133},[123,48890,179],{"class":129},[123,48892,32693],{"class":133},[123,48894,32696],{"class":5226},[123,48896,179],{"class":129},[123,48898,351],{"class":182},[123,48900,140],{"class":133},[123,48902,48903],{"class":125,"line":33081},[123,48904,32943],{"class":192},[123,48906,48907,48909,48911],{"class":125,"line":33087},[123,48908,36416],{"class":133},[123,48910,179],{"class":129},[123,48912,32719],{"class":133},[123,48914,48915],{"class":125,"line":33097},[123,48916,32960],{"class":192},[123,48918,48919,48921,48923,48925,48927,48929,48931],{"class":125,"line":33102},[123,48920,36429],{"class":133},[123,48922,9487],{"class":129},[123,48924,36434],{"class":133},[123,48926,589],{"class":129},[123,48928,32777],{"class":133},[123,48930,325],{"class":182},[123,48932,140],{"class":133},[123,48934,48935,48937,48939,48941,48943],{"class":125,"line":33108},[123,48936,36447],{"class":133},[123,48938,9487],{"class":129},[123,48940,32798],{"class":133},[123,48942,2958],{"class":129},[123,48944,32803],{"class":133},[123,48946,48947],{"class":125,"line":33157},[123,48948,36460],{"class":192},[123,48950,48951,48953,48955,48957,48959],{"class":125,"line":33204},[123,48952,36465],{"class":133},[123,48954,9487],{"class":129},[123,48956,32777],{"class":133},[123,48958,325],{"class":182},[123,48960,140],{"class":133},[123,48962,48963],{"class":125,"line":33209},[123,48964,33022],{"class":192},[123,48966,48967],{"class":125,"line":33215},[123,48968,33028],{"class":192},[123,48970,48971,48973,48975],{"class":125,"line":33234},[123,48972,33034],{"class":133},[123,48974,718],{"class":129},[123,48976,33039],{"class":133},[123,48978,48979],{"class":125,"line":33240},[123,48980,33045],{"class":192},[123,48982,48983],{"class":125,"line":33260},[123,48984,33051],{"class":192},[123,48986,48987,48989,48991],{"class":125,"line":33266},[123,48988,33057],{"class":133},[123,48990,718],{"class":129},[123,48992,33039],{"class":133},[123,48994,48995],{"class":125,"line":33272},[123,48996,33067],{"class":192},[123,48998,48999,49001,49003],{"class":125,"line":33282},[123,49000,33073],{"class":133},[123,49002,718],{"class":129},[123,49004,33078],{"class":133},[123,49006,49007],{"class":125,"line":33287},[123,49008,33084],{"class":192},[123,49010,49011,49013,49015],{"class":125,"line":33293},[123,49012,33090],{"class":133},[123,49014,718],{"class":129},[123,49016,33078],{"class":133},[123,49018,49019],{"class":125,"line":33309},[123,49020,2409],{"emptyLinePlaceholder":50},[123,49022,49023],{"class":125,"line":33354},[123,49024,33105],{"class":192},[123,49026,49027,49029,49031,49033,49035,49037,49039,49041,49043,49045,49047,49049,49051,49053,49055,49057,49059,49061,49063,49065],{"class":125,"line":33360},[123,49028,32462],{"class":182},[123,49030,134],{"class":133},[123,49032,3601],{"class":238},[123,49034,32470],{"class":182},[123,49036,33119],{"class":238},[123,49038,1030],{"class":182},[123,49040,33124],{"class":129},[123,49042,1080],{"class":182},[123,49044,33129],{"class":238},[123,49046,1030],{"class":182},[123,49048,33124],{"class":129},[123,49050,1080],{"class":182},[123,49052,3601],{"class":238},[123,49054,33140],{"class":133},[123,49056,666],{"class":129},[123,49058,351],{"class":182},[123,49060,33147],{"class":133},[123,49062,666],{"class":129},[123,49064,351],{"class":182},[123,49066,33154],{"class":133},[123,49068,49069,49071,49073,49075,49077,49079,49081,49083,49085,49087,49089,49091,49093,49095,49097,49099,49101,49103,49105,49107],{"class":125,"line":33366},[123,49070,32462],{"class":182},[123,49072,134],{"class":133},[123,49074,3601],{"class":238},[123,49076,32470],{"class":182},[123,49078,33168],{"class":238},[123,49080,1030],{"class":182},[123,49082,33124],{"class":129},[123,49084,1080],{"class":182},[123,49086,33177],{"class":238},[123,49088,1030],{"class":182},[123,49090,33124],{"class":129},[123,49092,1080],{"class":182},[123,49094,3601],{"class":238},[123,49096,33188],{"class":133},[123,49098,666],{"class":129},[123,49100,351],{"class":182},[123,49102,33195],{"class":133},[123,49104,666],{"class":129},[123,49106,351],{"class":182},[123,49108,33154],{"class":133},[123,49110,49111],{"class":125,"line":33372},[123,49112,2409],{"emptyLinePlaceholder":50},[123,49114,49115],{"class":125,"line":33383},[123,49116,33212],{"class":192},[123,49118,49119,49121,49123,49125,49127,49129,49131],{"class":125,"line":33389},[123,49120,2506],{"class":129},[123,49122,33220],{"class":133},[123,49124,666],{"class":129},[123,49126,351],{"class":182},[123,49128,1074],{"class":133},[123,49130,1094],{"class":129},[123,49132,33231],{"class":133},[123,49134,49135],{"class":125,"line":33395},[123,49136,33237],{"class":192},[123,49138,49139,49141,49143,49145,49147,49149,49151],{"class":125,"line":33401},[123,49140,33243],{"class":133},[123,49142,173],{"class":182},[123,49144,179],{"class":129},[123,49146,33250],{"class":133},[123,49148,666],{"class":129},[123,49150,351],{"class":182},[123,49152,33257],{"class":133},[123,49154,49155],{"class":125,"line":33419},[123,49156,33263],{"class":192},[123,49158,49159],{"class":125,"line":33433},[123,49160,33269],{"class":192},[123,49162,49163,49165,49167],{"class":125,"line":33442},[123,49164,33275],{"class":133},[123,49166,179],{"class":129},[123,49168,32325],{"class":133},[123,49170,49171],{"class":125,"line":33451},[123,49172,2409],{"emptyLinePlaceholder":50},[123,49174,49175],{"class":125,"line":33460},[123,49176,33290],{"class":192},[123,49178,49179,49181,49183,49185,49187],{"class":125,"line":33469},[123,49180,33296],{"class":133},[123,49182,179],{"class":129},[123,49184,33301],{"class":133},[123,49186,666],{"class":129},[123,49188,33306],{"class":133},[123,49190,49191,49193,49195,49197,49199,49201,49203,49205,49207,49209,49211,49213,49215,49217,49219,49221,49223,49225],{"class":125,"line":33475},[123,49192,32462],{"class":182},[123,49194,134],{"class":133},[123,49196,33316],{"class":238},[123,49198,1030],{"class":182},[123,49200,33321],{"class":129},[123,49202,1080],{"class":182},[123,49204,678],{"class":238},[123,49206,1030],{"class":182},[123,49208,33321],{"class":129},[123,49210,1080],{"class":182},[123,49212,33334],{"class":238},[123,49214,33337],{"class":133},[123,49216,33340],{"class":129},[123,49218,1041],{"class":182},[123,49220,33345],{"class":133},[123,49222,462],{"class":129},[123,49224,1041],{"class":182},[123,49226,30508],{"class":133},[123,49228,49229],{"class":125,"line":33481},[123,49230,36744],{"class":192},[123,49232,49233],{"class":125,"line":33489},[123,49234,36749],{"class":192},[123,49236,49237,49239,49241],{"class":125,"line":33494},[123,49238,36754],{"class":133},[123,49240,33378],{"class":238},[123,49242,140],{"class":133},[123,49244,49245],{"class":125,"line":33500},[123,49246,33398],{"class":192},[123,49248,49249,49251,49253,49255,49257,49259],{"class":125,"line":33511},[123,49250,33404],{"class":133},[123,49252,179],{"class":129},[123,49254,33409],{"class":133},[123,49256,33412],{"class":5226},[123,49258,179],{"class":129},[123,49260,1555],{"class":133},[123,49262,49263,49265,49267,49269],{"class":125,"line":33517},[123,49264,33422],{"class":238},[123,49266,993],{"class":133},[123,49268,33427],{"class":182},[123,49270,33430],{"class":133},[123,49272,49273,49275],{"class":125,"line":33537},[123,49274,33436],{"class":238},[123,49276,33439],{"class":133},[123,49278,49279,49281],{"class":125,"line":33543},[123,49280,33445],{"class":238},[123,49282,33448],{"class":133},[123,49284,49285,49287],{"class":125,"line":33549},[123,49286,33454],{"class":238},[123,49288,33457],{"class":133},[123,49290,49291,49293],{"class":125,"line":33555},[123,49292,33463],{"class":238},[123,49294,33466],{"class":133},[123,49296,49297],{"class":125,"line":33572},[123,49298,33472],{"class":133},[123,49300,49301],{"class":125,"line":33578},[123,49302,33478],{"class":192},[123,49304,49305,49307],{"class":125,"line":33584},[123,49306,4099],{"class":129},[123,49308,33486],{"class":133},[123,49310,49311],{"class":125,"line":33590},[123,49312,2409],{"emptyLinePlaceholder":50},[123,49314,49315],{"class":125,"line":33596},[123,49316,33497],{"class":192},[123,49318,49319,49321,49323],{"class":125,"line":33602},[123,49320,31958],{"class":129},[123,49322,33505],{"class":1972},[123,49324,33508],{"class":133},[123,49326,49327],{"class":125,"line":33629},[123,49328,33514],{"class":192},[123,49330,49331,49333,49335,49337,49339,49341,49343,49345],{"class":125,"line":33653},[123,49332,33520],{"class":133},[123,49334,31704],{"class":5226},[123,49336,179],{"class":129},[123,49338,134],{"class":133},[123,49340,632],{"class":182},[123,49342,512],{"class":133},[123,49344,427],{"class":182},[123,49346,30508],{"class":133},[123,49348,49349],{"class":125,"line":33659},[123,49350,33540],{"class":192},[123,49352,49353],{"class":125,"line":33665},[123,49354,33546],{"class":192},[123,49356,49357],{"class":125,"line":33671},[123,49358,33552],{"class":192},[123,49360,49361,49363,49365,49367,49369,49371,49373],{"class":125,"line":33682},[123,49362,31738],{"class":133},[123,49364,351],{"class":182},[123,49366,512],{"class":133},[123,49368,211],{"class":182},[123,49370,512],{"class":133},[123,49372,351],{"class":182},[123,49374,140],{"class":133},[123,49376,49377],{"class":125,"line":33693},[123,49378,33575],{"class":192},[123,49380,49381],{"class":125,"line":33699},[123,49382,33581],{"class":192},[123,49384,49385],{"class":125,"line":33716},[123,49386,33587],{"class":192},[123,49388,49389],{"class":125,"line":33739},[123,49390,33593],{"class":192},[123,49392,49393],{"class":125,"line":33762},[123,49394,33599],{"class":192},[123,49396,49397,49399,49401,49403,49405,49407,49409,49411,49413],{"class":125,"line":33768},[123,49398,33605],{"class":133},[123,49400,33608],{"class":238},[123,49402,33611],{"class":133},[123,49404,33614],{"class":238},[123,49406,512],{"class":133},[123,49408,33619],{"class":5226},[123,49410,179],{"class":129},[123,49412,33624],{"class":238},[123,49414,140],{"class":133},[123,49416,49417,49419,49421,49423,49425,49427,49429,49431,49433],{"class":125,"line":33773},[123,49418,33605],{"class":133},[123,49420,33608],{"class":238},[123,49422,33636],{"class":133},[123,49424,33639],{"class":238},[123,49426,512],{"class":133},[123,49428,33619],{"class":5226},[123,49430,179],{"class":129},[123,49432,33648],{"class":238},[123,49434,140],{"class":133},[123,49436,49437],{"class":125,"line":33782},[123,49438,33656],{"class":192},[123,49440,49441],{"class":125,"line":33792},[123,49442,33662],{"class":133},[123,49444,49445],{"class":125,"line":33798},[123,49446,33668],{"class":192},[123,49448,49449,49451,49453],{"class":125,"line":33803},[123,49450,33674],{"class":133},[123,49452,33677],{"class":238},[123,49454,140],{"class":133},[123,49456,49457,49459,49461],{"class":125,"line":33809},[123,49458,33685],{"class":133},[123,49460,33688],{"class":238},[123,49462,140],{"class":133},[123,49464,49465],{"class":125,"line":33822},[123,49466,33696],{"class":192},[123,49468,49469,49471,49473,49475,49477,49479,49481],{"class":125,"line":33828},[123,49470,31738],{"class":133},[123,49472,351],{"class":182},[123,49474,512],{"class":133},[123,49476,211],{"class":182},[123,49478,512],{"class":133},[123,49480,211],{"class":182},[123,49482,140],{"class":133},[123,49484,49485,49487,49489,49491,49493,49495,49497,49499,49501],{"class":125,"line":33839},[123,49486,33605],{"class":133},[123,49488,33608],{"class":238},[123,49490,33723],{"class":133},[123,49492,33614],{"class":238},[123,49494,512],{"class":133},[123,49496,33619],{"class":5226},[123,49498,179],{"class":129},[123,49500,33734],{"class":238},[123,49502,140],{"class":133},[123,49504,49505,49507,49509,49511,49513,49515,49517,49519,49521],{"class":125,"line":33850},[123,49506,33605],{"class":133},[123,49508,33608],{"class":238},[123,49510,33746],{"class":133},[123,49512,33639],{"class":238},[123,49514,512],{"class":133},[123,49516,33619],{"class":5226},[123,49518,179],{"class":129},[123,49520,33757],{"class":238},[123,49522,140],{"class":133},[123,49524,49525],{"class":125,"line":33869},[123,49526,33765],{"class":192},[123,49528,49530],{"class":125,"line":49529},219,[123,49531,33662],{"class":133},[123,49533,49535,49537,49539],{"class":125,"line":49534},220,[123,49536,33674],{"class":133},[123,49538,33608],{"class":238},[123,49540,140],{"class":133},[123,49542,49544,49546,49548],{"class":125,"line":49543},221,[123,49545,33685],{"class":133},[123,49547,33787],{"class":238},[123,49549,140],{"class":133},[123,49551,49553],{"class":125,"line":49552},222,[123,49554,33795],{"class":133},[123,49556,49558],{"class":125,"line":49557},223,[123,49559,2409],{"emptyLinePlaceholder":50},[123,49561,49563],{"class":125,"line":49562},224,[123,49564,33806],{"class":192},[123,49566,49568,49570,49572,49574,49576],{"class":125,"line":49567},225,[123,49569,1540],{"class":129},[123,49571,31231],{"class":182},[123,49573,2958],{"class":129},[123,49575,31236],{"class":238},[123,49577,3748],{"class":133},[123,49579,49581],{"class":125,"line":49580},226,[123,49582,33825],{"class":192},[123,49584,49586,49588,49590],{"class":125,"line":49585},227,[123,49587,44557],{"class":133},[123,49589,179],{"class":129},[123,49591,44562],{"class":133},[123,49593,49595,49597,49599],{"class":125,"line":49594},228,[123,49596,33842],{"class":133},[123,49598,179],{"class":129},[123,49600,33847],{"class":133},[123,49602,49604,49606,49608,49610,49612,49614,49616],{"class":125,"line":49603},229,[123,49605,33404],{"class":133},[123,49607,179],{"class":129},[123,49609,44579],{"class":133},[123,49611,33860],{"class":5226},[123,49613,179],{"class":129},[123,49615,1041],{"class":182},[123,49617,140],{"class":133},[123,49619,49621],{"class":125,"line":49620},230,[123,49622,33872],{"class":133},[22008,49624,49626],{"id":49625},"_242测试代码","2.4.2.测试代码",[14,49628,49629],{},"使用测试集进行测试与推理",[114,49631,49633],{"className":30389,"code":49632,"language":30391,"meta":37,"style":37},"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",[120,49634,49635,49641,49651,49661,49672,49682,49686,49690,49698,49703,49707,49724,49728,49732,49736,49740,49744,49776,49780,49788,49792,49804,49808,49812,49816,49820,49824,49828,49832,49836,49854,49868,49872,49882,49892,49902,49908,49912,49916,49924,49928,49944,49952,49956,49960,49968,49976,49980,49984,49988,49992,49998,50002,50012,50020,50028,50032,50036,50040,50048,50052,50068,50072,50076,50080,50092,50096,50108,50112,50116,50128,50132,50142,50146,50150,50162,50166,50174,50178,50182,50190,50194,50202,50206,50210,50214,50218,50222,50238,50246,50250,50254,50272,50278,50282,50292,50300,50308,50312,50316,50320,50324,50332,50336,50352,50356,50364,50372],{"__ignoreMap":37},[123,49636,49637,49639],{"class":125,"line":126},[123,49638,30403],{"class":129},[123,49640,30406],{"class":133},[123,49642,49643,49645,49647,49649],{"class":125,"line":45},[123,49644,30403],{"class":129},[123,49646,31426],{"class":133},[123,49648,31394],{"class":129},[123,49650,31431],{"class":133},[123,49652,49653,49655,49657,49659],{"class":125,"line":1189},[123,49654,30748],{"class":129},[123,49656,31409],{"class":133},[123,49658,30403],{"class":129},[123,49660,31414],{"class":133},[123,49662,49663,49665,49667,49669],{"class":125,"line":1204},[123,49664,30748],{"class":129},[123,49666,31379],{"class":133},[123,49668,30403],{"class":129},[123,49670,49671],{"class":133}," ImageFolder\n",[123,49673,49674,49676,49678,49680],{"class":125,"line":1210},[123,49675,30748],{"class":129},[123,49677,31925],{"class":133},[123,49679,30403],{"class":129},[123,49681,44651],{"class":133},[123,49683,49684],{"class":125,"line":1224},[123,49685,2409],{"emptyLinePlaceholder":50},[123,49687,49688],{"class":125,"line":1230},[123,49689,33962],{"class":192},[123,49691,49692,49694,49696],{"class":125,"line":1321},[123,49693,31958],{"class":129},[123,49695,33969],{"class":1972},[123,49697,31964],{"class":133},[123,49699,49700],{"class":125,"line":1327},[123,49701,49702],{"class":192},"   # 导入自己的数据集，并进行数据处理\n",[123,49704,49705],{"class":125,"line":1339},[123,49706,47972],{"class":192},[123,49708,49709,49711,49713,49715,49717,49719,49722],{"class":125,"line":1621},[123,49710,47977],{"class":182},[123,49712,179],{"class":129},[123,49714,804],{"class":129},[123,49716,385],{"class":238},[123,49718,692],{"class":182},[123,49720,49721],{"class":47988},"\u002Fdata\u002Ftest",[123,49723,25144],{"class":238},[123,49725,49726],{"class":125,"line":1626},[123,49727,2409],{"emptyLinePlaceholder":50},[123,49729,49730],{"class":125,"line":1632},[123,49731,48000],{"class":192},[123,49733,49734],{"class":125,"line":1637},[123,49735,48005],{"class":192},[123,49737,49738],{"class":125,"line":1651},[123,49739,48010],{"class":192},[123,49741,49742],{"class":125,"line":1656},[123,49743,48015],{"class":192},[123,49745,49746,49748,49750,49752,49754,49756,49758,49760,49762,49764,49766,49768,49770,49772,49774],{"class":125,"line":1662},[123,49747,48020],{"class":133},[123,49749,179],{"class":129},[123,49751,48025],{"class":133},[123,49753,48028],{"class":182},[123,49755,512],{"class":133},[123,49757,48033],{"class":182},[123,49759,512],{"class":133},[123,49761,48038],{"class":182},[123,49763,48041],{"class":133},[123,49765,48044],{"class":182},[123,49767,512],{"class":133},[123,49769,48049],{"class":182},[123,49771,512],{"class":133},[123,49773,48054],{"class":182},[123,49775,4666],{"class":133},[123,49777,49778],{"class":125,"line":1683},[123,49779,48061],{"class":192},[123,49781,49782,49784,49786],{"class":125,"line":1688},[123,49783,48066],{"class":133},[123,49785,179],{"class":129},[123,49787,48071],{"class":133},[123,49789,49790],{"class":125,"line":1702},[123,49791,48076],{"class":192},[123,49793,49794,49796,49798,49800,49802],{"class":125,"line":1707},[123,49795,48081],{"class":133},[123,49797,31512],{"class":182},[123,49799,512],{"class":133},[123,49801,31512],{"class":182},[123,49803,42633],{"class":133},[123,49805,49806],{"class":125,"line":1736},[123,49807,48094],{"class":192},[123,49809,49810],{"class":125,"line":1741},[123,49811,48099],{"class":133},[123,49813,49814],{"class":125,"line":1758},[123,49815,48104],{"class":133},[123,49817,49818],{"class":125,"line":1763},[123,49819,48109],{"class":192},[123,49821,49822],{"class":125,"line":1768},[123,49823,48114],{"class":192},[123,49825,49826],{"class":125,"line":1773},[123,49827,2409],{"emptyLinePlaceholder":50},[123,49829,49830],{"class":125,"line":1787},[123,49831,48123],{"class":192},[123,49833,49834],{"class":125,"line":1792},[123,49835,48128],{"class":192},[123,49837,49838,49840,49842,49844,49846,49848,49850,49852],{"class":125,"line":2586},[123,49839,33976],{"class":133},[123,49841,179],{"class":129},[123,49843,48137],{"class":133},[123,49845,48140],{"class":182},[123,49847,512],{"class":133},[123,49849,48145],{"class":5226},[123,49851,179],{"class":129},[123,49853,48150],{"class":133},[123,49855,49856,49858,49860,49862,49864,49866],{"class":125,"line":2600},[123,49857,34033],{"class":133},[123,49859,179],{"class":129},[123,49861,31545],{"class":133},[123,49863,31548],{"class":5226},[123,49865,179],{"class":129},[123,49867,34044],{"class":133},[123,49869,49870],{"class":125,"line":2608},[123,49871,34049],{"class":192},[123,49873,49874,49876,49878,49880],{"class":125,"line":2613},[123,49875,34054],{"class":5226},[123,49877,179],{"class":129},[123,49879,351],{"class":182},[123,49881,31477],{"class":133},[123,49883,49884,49886,49888,49890],{"class":125,"line":2619},[123,49885,34065],{"class":5226},[123,49887,179],{"class":129},[123,49889,31487],{"class":182},[123,49891,31477],{"class":133},[123,49893,49894,49896,49898,49900],{"class":125,"line":2625},[123,49895,34076],{"class":5226},[123,49897,179],{"class":129},[123,49899,325],{"class":182},[123,49901,140],{"class":133},[123,49903,49904,49906],{"class":125,"line":2630},[123,49905,4099],{"class":129},[123,49907,34089],{"class":133},[123,49909,49910],{"class":125,"line":7958},[123,49911,2409],{"emptyLinePlaceholder":50},[123,49913,49914],{"class":125,"line":7982},[123,49915,34098],{"class":192},[123,49917,49918,49920,49922],{"class":125,"line":7987},[123,49919,31958],{"class":129},[123,49921,34105],{"class":1972},[123,49923,34108],{"class":133},[123,49925,49926],{"class":125,"line":7993},[123,49927,34113],{"class":192},[123,49929,49930,49932,49934,49936,49938,49940,49942],{"class":125,"line":8020},[123,49931,31248],{"class":133},[123,49933,179],{"class":129},[123,49935,31255],{"class":238},[123,49937,1713],{"class":129},[123,49939,31260],{"class":133},[123,49941,1710],{"class":129},[123,49943,34130],{"class":238},[123,49945,49946,49948,49950],{"class":125,"line":8025},[123,49947,31300],{"class":133},[123,49949,179],{"class":129},[123,49951,32300],{"class":133},[123,49953,49954],{"class":125,"line":8031},[123,49955,2409],{"emptyLinePlaceholder":50},[123,49957,49958],{"class":125,"line":8043},[123,49959,34147],{"class":192},[123,49961,49962,49964,49966],{"class":125,"line":8055},[123,49963,34152],{"class":133},[123,49965,179],{"class":129},[123,49967,32353],{"class":182},[123,49969,49970,49972,49974],{"class":125,"line":8067},[123,49971,34161],{"class":133},[123,49973,179],{"class":129},[123,49975,3094],{"class":182},[123,49977,49978],{"class":125,"line":9726},[123,49979,2409],{"emptyLinePlaceholder":50},[123,49981,49982],{"class":125,"line":9751},[123,49983,34174],{"class":192},[123,49985,49986],{"class":125,"line":9774},[123,49987,34179],{"class":192},[123,49989,49990],{"class":125,"line":9798},[123,49991,34184],{"class":192},[123,49993,49994,49996],{"class":125,"line":9803},[123,49995,34189],{"class":129},[123,49997,32895],{"class":133},[123,49999,50000],{"class":125,"line":9808},[123,50001,34196],{"class":192},[123,50003,50004,50006,50008,50010],{"class":125,"line":9813},[123,50005,3412],{"class":129},[123,50007,34203],{"class":133},[123,50009,26054],{"class":129},[123,50011,34208],{"class":133},[123,50013,50014,50016,50018],{"class":125,"line":9822},[123,50015,34213],{"class":133},[123,50017,179],{"class":129},[123,50019,34218],{"class":133},[123,50021,50022,50024,50026],{"class":125,"line":9827},[123,50023,34223],{"class":133},[123,50025,179],{"class":129},[123,50027,34228],{"class":133},[123,50029,50030],{"class":125,"line":9833},[123,50031,34233],{"class":192},[123,50033,50034],{"class":125,"line":9854},[123,50035,32886],{"class":133},[123,50037,50038],{"class":125,"line":9860},[123,50039,34242],{"class":192},[123,50041,50042,50044,50046],{"class":125,"line":9874},[123,50043,32671],{"class":133},[123,50045,179],{"class":129},[123,50047,34251],{"class":133},[123,50049,50050],{"class":125,"line":9880},[123,50051,34256],{"class":192},[123,50053,50054,50056,50058,50060,50062,50064,50066],{"class":125,"line":9907},[123,50055,32688],{"class":133},[123,50057,179],{"class":129},[123,50059,32693],{"class":133},[123,50061,32696],{"class":5226},[123,50063,179],{"class":129},[123,50065,351],{"class":182},[123,50067,140],{"class":133},[123,50069,50070],{"class":125,"line":9916},[123,50071,34277],{"class":192},[123,50073,50074],{"class":125,"line":9922},[123,50075,34282],{"class":192},[123,50077,50078],{"class":125,"line":9930},[123,50079,34287],{"class":192},[123,50081,50082,50084,50086,50088,50090],{"class":125,"line":9935},[123,50083,34292],{"class":133},[123,50085,9487],{"class":129},[123,50087,32798],{"class":133},[123,50089,2958],{"class":129},[123,50091,34301],{"class":133},[123,50093,50094],{"class":125,"line":16614},[123,50095,34306],{"class":192},[123,50097,50098,50100,50102,50104,50106],{"class":125,"line":16620},[123,50099,34311],{"class":133},[123,50101,9487],{"class":129},[123,50103,34316],{"class":133},[123,50105,325],{"class":182},[123,50107,140],{"class":133},[123,50109,50110],{"class":125,"line":16643},[123,50111,2409],{"emptyLinePlaceholder":50},[123,50113,50114],{"class":125,"line":16649},[123,50115,34329],{"class":192},[123,50117,50118,50120,50122,50124,50126],{"class":125,"line":16672},[123,50119,34334],{"class":133},[123,50121,179],{"class":129},[123,50123,34339],{"class":133},[123,50125,718],{"class":129},[123,50127,34344],{"class":133},[123,50129,50130],{"class":125,"line":16686},[123,50131,34349],{"class":192},[123,50133,50134,50136,50138,50140],{"class":125,"line":16706},[123,50135,32462],{"class":182},[123,50137,134],{"class":133},[123,50139,34358],{"class":238},[123,50141,34361],{"class":133},[123,50143,50144],{"class":125,"line":16712},[123,50145,2409],{"emptyLinePlaceholder":50},[123,50147,50148],{"class":125,"line":16723},[123,50149,34370],{"class":192},[123,50151,50152,50154,50156,50158,50160],{"class":125,"line":16746},[123,50153,1540],{"class":129},[123,50155,31231],{"class":182},[123,50157,2958],{"class":129},[123,50159,31236],{"class":238},[123,50161,3748],{"class":133},[123,50163,50164],{"class":125,"line":16768},[123,50165,34387],{"class":192},[123,50167,50168,50170,50172],{"class":125,"line":16773},[123,50169,31300],{"class":133},[123,50171,179],{"class":129},[123,50173,44562],{"class":133},[123,50175,50176],{"class":125,"line":16779},[123,50177,34400],{"class":192},[123,50179,50180],{"class":125,"line":16793},[123,50181,34405],{"class":192},[123,50183,50184,50186,50188],{"class":125,"line":16806},[123,50185,34410],{"class":133},[123,50187,34413],{"class":238},[123,50189,30508],{"class":133},[123,50191,50192],{"class":125,"line":16811},[123,50193,34420],{"class":192},[123,50195,50196,50198,50200],{"class":125,"line":16825},[123,50197,34033],{"class":133},[123,50199,179],{"class":129},[123,50201,34429],{"class":133},[123,50203,50204],{"class":125,"line":16830},[123,50205,34434],{"class":192},[123,50207,50208],{"class":125,"line":16836},[123,50209,34439],{"class":133},[123,50211,50212],{"class":125,"line":16841},[123,50213,2409],{"emptyLinePlaceholder":50},[123,50215,50216],{"class":125,"line":16855},[123,50217,34448],{"class":192},[123,50219,50220],{"class":125,"line":16860},[123,50221,34453],{"class":192},[123,50223,50224,50226,50228,50230,50232,50234,50236],{"class":125,"line":16865},[123,50225,31248],{"class":133},[123,50227,179],{"class":129},[123,50229,31255],{"class":238},[123,50231,1713],{"class":129},[123,50233,31260],{"class":133},[123,50235,1710],{"class":129},[123,50237,34130],{"class":238},[123,50239,50240,50242,50244],{"class":125,"line":16879},[123,50241,31300],{"class":133},[123,50243,179],{"class":129},[123,50245,32300],{"class":133},[123,50247,50248],{"class":125,"line":16891},[123,50249,34482],{"class":192},[123,50251,50252],{"class":125,"line":16896},[123,50253,34487],{"class":192},[123,50255,50256,50258,50260,50262,50265,50267,50270],{"class":125,"line":16909},[123,50257,34492],{"class":133},[123,50259,179],{"class":129},[123,50261,1024],{"class":133},[123,50263,50264],{"class":238},"'猫'",[123,50266,512],{"class":133},[123,50268,50269],{"class":238},"'狗'",[123,50271,33257],{"class":133},[123,50273,50274,50276],{"class":125,"line":16914},[123,50275,34189],{"class":129},[123,50277,32895],{"class":133},[123,50279,50280],{"class":125,"line":16919},[123,50281,34557],{"class":192},[123,50283,50284,50286,50288,50290],{"class":125,"line":16924},[123,50285,3412],{"class":129},[123,50287,34564],{"class":133},[123,50289,26054],{"class":129},[123,50291,34208],{"class":133},[123,50293,50294,50296,50298],{"class":125,"line":16937},[123,50295,32621],{"class":133},[123,50297,179],{"class":129},[123,50299,32626],{"class":133},[123,50301,50302,50304,50306],{"class":125,"line":16942},[123,50303,32636],{"class":133},[123,50305,179],{"class":129},[123,50307,32641],{"class":133},[123,50309,50310],{"class":125,"line":32644},[123,50311,2409],{"emptyLinePlaceholder":50},[123,50313,50314],{"class":125,"line":32650},[123,50315,34593],{"class":192},[123,50317,50318],{"class":125,"line":32656},[123,50319,32886],{"class":133},[123,50321,50322],{"class":125,"line":32662},[123,50323,34602],{"class":192},[123,50325,50326,50328,50330],{"class":125,"line":32668},[123,50327,32671],{"class":133},[123,50329,179],{"class":129},[123,50331,32676],{"class":133},[123,50333,50334],{"class":125,"line":32679},[123,50335,34615],{"class":192},[123,50337,50338,50340,50342,50344,50346,50348,50350],{"class":125,"line":32685},[123,50339,32688],{"class":133},[123,50341,179],{"class":129},[123,50343,32693],{"class":133},[123,50345,32696],{"class":5226},[123,50347,179],{"class":129},[123,50349,351],{"class":182},[123,50351,140],{"class":133},[123,50353,50354],{"class":125,"line":32705},[123,50355,34636],{"class":192},[123,50357,50358,50360,50362],{"class":125,"line":32711},[123,50359,34641],{"class":133},[123,50361,179],{"class":129},[123,50363,34646],{"class":133},[123,50365,50366,50368,50370],{"class":125,"line":32722},[123,50367,34651],{"class":133},[123,50369,179],{"class":129},[123,50371,34656],{"class":133},[123,50373,50374,50376,50378,50380,50382,50384,50386,50388],{"class":125,"line":32728},[123,50375,34661],{"class":182},[123,50377,134],{"class":133},[123,50379,34666],{"class":238},[123,50381,34669],{"class":133},[123,50383,34672],{"class":238},[123,50385,512],{"class":133},[123,50387,34677],{"class":238},[123,50389,34680],{"class":133},[5136,50391,50392],{},"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":37,"searchDepth":45,"depth":45,"links":50394},[50395,50396,50397,50398],{"id":30602,"depth":1189,"text":30603},{"id":37850,"depth":1189,"text":37851},{"id":41283,"depth":1189,"text":41284},{"id":45292,"depth":1189,"text":45293},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30594,"description":47},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50405,"title":50406,"body":50407,"description":47,"extension":48,"meta":50414,"navigation":50,"path":50415,"seo":50416,"stem":50417,"__hash__":50418},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50408,"toc":50412},[50409],[10,50410,50406],{"id":50411},"_3yolo模型学习",{"title":37,"searchDepth":45,"depth":45,"links":50413},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50406,"description":47},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50420,"title":50421,"body":50422,"description":50429,"extension":48,"meta":50430,"navigation":50,"path":50432,"seo":50433,"stem":50434,"__hash__":50435},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50423,"toc":50427},[50424],[14,50425,50426],{},"yolo模型还未补充",{"title":37,"searchDepth":45,"depth":45,"links":50428},[],"深度学习学习",{"category":50431},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50421,"description":50429},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50437,"title":50438,"body":50439,"description":47,"extension":48,"meta":50464,"navigation":50,"path":50465,"seo":50466,"stem":50467,"__hash__":50468},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50440,"toc":50462},[50441,50444,50447,50452,50459],[10,50442,50438],{"id":50443},"_1工具",[14,50445,50446],{},"提示错误插件：有问题会提前报错",[14,50448,50449],{},[35,50450],{"alt":37,"src":50451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50453,50454],{},[372,50455,50458],{"href":50456,"rel":50457},"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",[23875],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50460,50461],{},"alt键加上下箭头可以实现语句的移动",{"title":37,"searchDepth":45,"depth":45,"links":50463},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50438,"description":47},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50470,"title":50471,"body":50472,"description":47,"extension":48,"meta":53336,"navigation":50,"path":53337,"seo":53338,"stem":53339,"__hash__":53340},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50473,"toc":53287},[50474,50477,50481,50485,50490,50493,50498,50502,50509,50514,50521,50526,50533,50538,50542,50547,50550,50554,50559,50563,50568,50571,50574,50577,50580,50583,50586,50589,50592,50597,50602,50607,50611,50614,50617,50621,50626,50629,50637,50642,50659,50667,50672,50677,50682,50687,50692,50695,50700,50705,50709,50718,50723,50728,50732,50737,50740,50744,50749,50757,50762,50767,50770,50775,50780,50785,50788,50791,50794,50799,50804,50807,50812,50815,50820,50823,50826,50829,50834,50837,50840,50855,50860,50865,50870,50873,50876,50879,50893,50896,50901,50906,50909,50912,50915,50918,50921,50924,50927,50931,50935,50940,50944,50947,50952,50957,50960,50965,50968,50972,50977,50980,50983,50986,50989,50992,50995,50998,51001,51004,51008,51013,51018,51023,51026,51029,51033,51038,51041,51045,51048,51051,51056,51059,51062,51066,51070,51073,51078,51083,51086,51115,51120,51125,51130,51135,51139,51144,51148,51153,51156,51160,51164,51169,51173,51178,51183,51187,51192,51195,51197,51200,51205,51209,51214,51218,51222,51227,51232,51237,51242,51246,51251,51256,51261,51264,51267,51272,51275,51280,51285,51290,51295,51299,52106,52110,52453,52458,52461,52464,52467,52470,52473,52476,52479,52482,52484,52487,52489,52492,52496,52501,52504,52507,52510,52514,52519,52524,52544,52547,52551,52556,52561,52578,52582,52611,52615,52637,52639,52678,52686,52692,52696,52699,52702,52707,52712,52715,52718,52721,52726,52731,52734,52737,52740,52743,52746,52749,52752,52755,52758,52761,52764,52766,52769,52772,52775,52778,52781,52784,52787,52790,52794,52799,52802,52807,52810,52813,52816,52819,52822,52825,52828,52830,52833,52836,52839,52842,52845,52848,52852,52855,52864,52867,52872,52875,52880,52883,52886,52889,52892,52895,52898,52901,52905,52909,52912,52915,52920,52925,52930,52934,52939,52944,52947,52950,52953,52956,52959,52964,52967,52972,52974,52979,52982,52986,52991,52994,52997,53002,53006,53009,53014,53017,53020,53049,53054,53057,53060,53063,53066,53069,53073,53076,53162,53166,53169,53174,53179,53186,53189,53192,53195,53198,53201,53206,53211,53214,53217,53220,53223,53226,53229,53232,53235,53238,53240,53243,53247,53252,53257,53262,53265,53270,53275,53278,53281,53284],[10,50475,50471],{"id":50476},"_2基础语法",[65,50478,50480],{"id":50479},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[94,50482,50484],{"id":50483},"_211-js组成","2.1.1 js组成",[77,50486,50487],{},[80,50488,50489],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50491,50492],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[77,50494,50495],{"start":45},[80,50496,50497],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[94,50499,50501],{"id":50500},"_212-js书写位置","2.1.2 js书写位置",[77,50503,50504],{},[80,50505,50506],{},[283,50507,50508],{},"内部 JavaScript",[14,50510,50511],{},[35,50512],{"alt":37,"src":50513},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[77,50515,50516],{"start":45},[80,50517,50518],{},[283,50519,50520],{},"外部 JavaScript",[14,50522,50523],{},[35,50524],{"alt":37,"src":50525},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[77,50527,50528],{"start":1189},[80,50529,50530],{},[283,50531,50532],{},"内联 JavaScript",[14,50534,50535],{},[35,50536],{"alt":37,"src":50537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[94,50539,50541],{"id":50540},"_213-javascript注释","2.1.3 JavaScript注释",[14,50543,50544],{},[35,50545],{"alt":37,"src":50546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50548,50549],{},"alt+shift+a一定要记住！",[94,50551,50553],{"id":50552},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,50555,50556],{},[35,50557],{"alt":37,"src":50558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[94,50560,50562],{"id":50561},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[77,50564,50565],{},[80,50566,50567],{},"输出语法：",[14,50569,50570],{},"①document.write('要出的内容')",[14,50572,50573],{},"向body内输出内容；",[14,50575,50576],{},"如果输出的内容写的是标签，也会被解析cheng",[14,50578,50579],{},"②alert('要出的内容')",[14,50581,50582],{},"页面弹出警告对话框",[14,50584,50585],{},"③console.log('控制台打印')",[14,50587,50588],{},"控制台输出语法，程序员调试使用",[14,50590,50591],{},"输入log就行，自动生成：",[14,50593,50594],{},[35,50595],{"alt":37,"src":50596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[77,50598,50599],{"start":45},[80,50600,50601],{},"输入语法：",[14,50603,50604],{},[35,50605],{"alt":37,"src":50606},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[94,50608,50610],{"id":50609},"_2116-字面量","21.1.6 字面量",[14,50612,50613],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,50615,50616],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[65,50618,50620],{"id":50619},"_22-变量","2.2 变量",[77,50622,50623],{},[80,50624,50625],{},"变量声明",[14,50627,50628],{},"let 变量名",[1141,50630,50631,50634],{},[80,50632,50633],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[80,50635,50636],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[77,50638,50639],{"start":45},[80,50640,50641],{},"变量赋值",[114,50643,50647],{"className":50644,"code":50645,"language":50646,"meta":37,"style":37},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[120,50648,50649,50654],{"__ignoreMap":37},[123,50650,50651],{"class":125,"line":126},[123,50652,50653],{"class":133},"let age\n",[123,50655,50656],{"class":125,"line":45},[123,50657,50658],{"class":133},"age=18\n",[77,50660,50661,50664],{"start":1189},[80,50662,50663],{},"连这些（变量的初始化）：let age=18",[80,50665,50666],{},"更新变量",[14,50668,50669],{},[35,50670],{"alt":37,"src":50671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[77,50673,50674],{"start":1210},[80,50675,50676],{},"声明多个变量",[14,50678,50679],{},[35,50680],{"alt":37,"src":50681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[77,50683,50684],{"start":1224},[80,50685,50686],{},"变量命名规则与规范",[14,50688,50689],{},[35,50690],{"alt":37,"src":50691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,50693,50694],{},"遵守小驼峰！",[77,50696,50697],{"start":1230},[80,50698,50699],{},"变量拓展-let和var的区别",[14,50701,50702],{},[35,50703],{"alt":37,"src":50704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[65,50706,50708],{"id":50707},"_23-数组","2.3 数组",[114,50710,50712],{"className":50644,"code":50711,"language":50646,"meta":37,"style":37},"let arr = []\n",[120,50713,50714],{"__ignoreMap":37},[123,50715,50716],{"class":125,"line":126},[123,50717,50711],{"class":133},[14,50719,50720],{},[35,50721],{"alt":37,"src":50722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,50724,50725],{},[35,50726],{"alt":37,"src":50727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[65,50729,50731],{"id":50730},"_24-常量","2.4 常量",[14,50733,50734],{},[35,50735],{"alt":37,"src":50736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,50738,50739],{},"const — 类似于 let ，但是变量的值无法被修改",[65,50741,50743],{"id":50742},"_25-数据类型","2.5 数据类型",[14,50745,50746],{},[35,50747],{"alt":37,"src":50748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[77,50750,50751,50754],{},[80,50752,50753],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[80,50755,50756],{},"算数运算符：",[14,50758,50759],{},[35,50760],{"alt":37,"src":50761},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[77,50763,50764],{"start":1189},[80,50765,50766],{},"数字类型（Number）",[14,50768,50769],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,50771,50772],{},[35,50773],{"alt":37,"src":50774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[77,50776,50777],{"start":1204},[80,50778,50779],{},"字符串类型（string）",[14,50781,50782],{},[35,50783],{"alt":37,"src":50784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,50786,50787],{},"反引号也是可以使用的",[14,50789,50790],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,50792,50793],{},"例如：document.write(\"我今年\"+age+\"岁\")",[77,50795,50796],{"start":1210},[80,50797,50798],{},"模板字符串",[14,50800,50801],{},[35,50802],{"alt":37,"src":50803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,50805,50806],{},"类似于python的字符串格式化",[77,50808,50809],{"start":1224},[80,50810,50811],{},"布尔类型",[14,50813,50814],{},"true 和 false",[77,50816,50817],{"start":1230},[80,50818,50819],{},"未定义类型（underfined）",[14,50821,50822],{},"表示没有赋值",[14,50824,50825],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,50827,50828],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[77,50830,50831],{"start":1321},[80,50832,50833],{},"null（空类型）",[14,50835,50836],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,50838,50839],{},"赋值了，但是内容为空",[114,50841,50843],{"className":50644,"code":50842,"language":50646,"meta":37,"style":37},"typeof null\n输出的是'object'，是一个对象数据类型\n",[120,50844,50845,50850],{"__ignoreMap":37},[123,50846,50847],{"class":125,"line":126},[123,50848,50849],{"class":133},"typeof null\n",[123,50851,50852],{"class":125,"line":45},[123,50853,50854],{"class":133},"输出的是'object'，是一个对象数据类型\n",[77,50856,50857],{"start":1327},[80,50858,50859],{},"控制台检测数据类型",[14,50861,50862],{},[35,50863],{"alt":37,"src":50864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[77,50866,50867],{"start":1339},[80,50868,50869],{},"类型转换",[14,50871,50872],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,50874,50875],{},"转换方式：隐式转换和显示转换",[14,50877,50878],{},"①隐式转换",[1141,50880,50881,50884,50887,50890],{},[80,50882,50883],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[80,50885,50886],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[80,50888,50889],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[80,50891,50892],{},"任何数据和字符串相加结果都是字符串",[14,50894,50895],{},"②显示转换",[14,50897,50898],{},[35,50899],{"alt":37,"src":50900},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,50902,50903],{},[35,50904],{"alt":37,"src":50905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,50907,50908],{},"在输入的时候要用好隐式转换，简单写起来",[14,50910,50911],{},"let num = +prompt(’请输入数字：‘)",[14,50913,50914],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,50916,50917],{},"console.log(parseInt('12.333px'))",[14,50919,50920],{},"输出为：12",[14,50922,50923],{},"console.log(parseInt('a'a'a12.333px'))",[14,50925,50926],{},"输出：NaN",[65,50928,50930],{"id":50929},"_26-运算符","2.6 运算符",[94,50932,50934],{"id":50933},"_261-赋值运算符","2.6.1 赋值运算符",[14,50936,50937],{},[35,50938],{"alt":37,"src":50939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[94,50941,50943],{"id":50942},"_262-一元运算符","2.6.2 一元运算符",[14,50945,50946],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,50948,50949],{},[35,50950],{"alt":37,"src":50951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,50953,50954],{},[35,50955],{"alt":37,"src":50956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,50958,50959],{},"两者的区别：",[14,50961,50962],{},[35,50963],{"alt":37,"src":50964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,50966,50967],{},"前置先自加；后置后加，代码执行完之后再加",[94,50969,50971],{"id":50970},"_263-比较运算符","2.6.3 比较运算符",[14,50973,50974],{},[35,50975],{"alt":37,"src":50976},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,50978,50979],{},"比较运算符也有隐式转换",[14,50981,50982],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,50984,50985],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,50987,50988],{},"要使用三等，开发的时候",[14,50990,50991],{},"NaN不等于任何人，包括它自己",[14,50993,50994],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,50996,50997],{},"7\u002F10=0.7",[14,50999,51000],{},"最后：0.5+0.2=0.7",[14,51002,51003],{},"字符串比较，比较的是字符对应的ASCII码",[94,51005,51007],{"id":51006},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,51009,51010],{},[35,51011],{"alt":37,"src":51012},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,51014,51015],{},[35,51016],{"alt":37,"src":51017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,51019,51020],{},[35,51021],{"alt":37,"src":51022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51024,51025],{},"上述题目选D",[14,51027,51028],{},"与真2假1；或真1假2",[94,51030,51032],{"id":51031},"_265-运算符优先级","2.6.5 运算符优先级",[14,51034,51035],{},[35,51036],{"alt":37,"src":51037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51039,51040],{},"先算逻辑与，后算逻辑或",[65,51042,51044],{"id":51043},"_27-语句","2.7 语句",[14,51046,51047],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51049,51050],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51052,51053],{},[35,51054],{"alt":37,"src":51055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51057,51058],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51060,51061],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[94,51063,51065],{"id":51064},"_271-分支语句","2.7.1 分支语句",[22008,51067,51069],{"id":51068},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51071,51072],{},"if语句单行简单的话，可以不写{}，写在一行就行",[77,51074,51075],{},[80,51076,51077],{},"单分支语句",[14,51079,51080],{},[35,51081],{"alt":37,"src":51082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51084,51085],{},"除了0，所有数字都为真",[114,51087,51089],{"className":50644,"code":51088,"language":50646,"meta":37,"style":37},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[120,51090,51091,51096,51101,51106,51110],{"__ignoreMap":37},[123,51092,51093],{"class":125,"line":126},[123,51094,51095],{"class":133},"if（0) {\n",[123,51097,51098],{"class":125,"line":45},[123,51099,51100],{"class":133},"    let a=1\n",[123,51102,51103],{"class":125,"line":1189},[123,51104,51105],{"class":133},"    alert(typeof a)\n",[123,51107,51108],{"class":125,"line":1204},[123,51109,1574],{"class":133},[123,51111,51112],{"class":125,"line":1210},[123,51113,51114],{"class":133},"不输出，括号为假\n",[77,51116,51117],{"start":45},[80,51118,51119],{},"双分支语句",[14,51121,51122],{},[35,51123],{"alt":37,"src":51124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[77,51126,51127],{"start":1189},[80,51128,51129],{},"多分支语句",[14,51131,51132],{},[35,51133],{"alt":37,"src":51134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[22008,51136,51138],{"id":51137},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51140,51141],{},[35,51142],{"alt":37,"src":51143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[22008,51145,51147],{"id":51146},"_2713-switch语句","2.7.1.3 switch语句",[14,51149,51150],{},[35,51151],{"alt":37,"src":51152},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51154,51155],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[94,51157,51159],{"id":51158},"_272-循环语句","2.7.2 循环语句",[22008,51161,51163],{"id":51162},"_2721-断点演示","2.7.2.1 断点演示",[14,51165,51166],{},[35,51167],{"alt":37,"src":51168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[22008,51170,51172],{"id":51171},"_2722-while循环","2.7.2.2 while循环",[14,51174,51175],{},[35,51176],{"alt":37,"src":51177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51179,51180],{},[35,51181],{"alt":37,"src":51182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[22008,51184,51186],{"id":51185},"_2723-for循环","2.7.2.3 for循环",[14,51188,51189],{},[35,51190],{"alt":37,"src":51191},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51193,51194],{},"for(;;) {",[14,51196,1080],{},[14,51198,51199],{},"表示无限循环",[14,51201,51202],{},[35,51203],{"alt":37,"src":51204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[22008,51206,51208],{"id":51207},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51210,51211],{},[35,51212],{"alt":37,"src":51213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[65,51215,51217],{"id":51216},"_28-数组","2.8 数组",[94,51219,51221],{"id":51220},"_281-基础认识","2.8.1 基础认识",[14,51223,51224],{},[35,51225],{"alt":37,"src":51226},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51228,51229],{},[35,51230],{"alt":37,"src":51231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51233,51234],{},[35,51235],{"alt":37,"src":51236},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51238,51239],{},[35,51240],{"alt":37,"src":51241},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[94,51243,51245],{"id":51244},"_282-操作数组","2.8.2 操作数组",[14,51247,51248],{},[35,51249],{"alt":37,"src":51250},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[77,51252,51253],{},[80,51254,51255],{},"添加元素",[14,51257,51258],{},[35,51259],{"alt":37,"src":51260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51262,51263],{},"console.log(arr.push('green'))",[14,51265,51266],{},"输出结果：为新数组的长度",[14,51268,51269],{},[35,51270],{"alt":37,"src":51271},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51273,51274],{},"push用的非常多，一定要记住",[77,51276,51277],{},[80,51278,51279],{},"删除元素",[14,51281,51282],{},[35,51283],{"alt":37,"src":51284},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51286,51287],{},[35,51288],{"alt":37,"src":51289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51291,51292],{},[35,51293],{"alt":37,"src":51294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[94,51296,51298],{"id":51297},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[114,51300,51302],{"className":50644,"code":51301,"language":50646,"meta":37,"style":37},"\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",[120,51303,51304,51319,51335,51339,51348,51366,51390,51412,51426,51434,51441,51453,51464,51468,51472,51479,51491,51506,51519,51538,51555,51570,51582,51594,51606,51610,51614,51625,51635,51647,51659,51671,51682,51686,51690,51702,51706,51720,51724,51728,51739,51753,51765,51779,51783,51792,51801,51805,51814,51818,51827,51832,51837,51850,51878,51883,51888,51913,51918,51922,51927,51932,51947,51951,51956,51986,51998,52014,52030,52044,52049,52056,52060,52065,52078,52086,52094,52098],{"__ignoreMap":37},[123,51305,51306,51309,51313,51316],{"class":125,"line":126},[123,51307,51308],{"class":133},"\u003C!",[123,51310,51312],{"class":51311},"s9eBZ","DOCTYPE",[123,51314,51315],{"class":1972}," html",[123,51317,51318],{"class":133},">\n",[123,51320,51321,51323,51325,51328,51330,51333],{"class":125,"line":45},[123,51322,1044],{"class":133},[123,51324,50646],{"class":51311},[123,51326,51327],{"class":1972}," lang",[123,51329,179],{"class":133},[123,51331,51332],{"class":238},"\"en\"",[123,51334,51318],{"class":133},[123,51336,51337],{"class":125,"line":1189},[123,51338,2409],{"emptyLinePlaceholder":50},[123,51340,51341,51343,51346],{"class":125,"line":1204},[123,51342,1044],{"class":133},[123,51344,51345],{"class":51311},"head",[123,51347,51318],{"class":133},[123,51349,51350,51353,51356,51359,51361,51364],{"class":125,"line":1210},[123,51351,51352],{"class":133},"    \u003C",[123,51354,51355],{"class":51311},"meta",[123,51357,51358],{"class":1972}," charset",[123,51360,179],{"class":133},[123,51362,51363],{"class":238},"\"UTF-8\"",[123,51365,51318],{"class":133},[123,51367,51368,51370,51372,51375,51377,51380,51383,51385,51388],{"class":125,"line":1224},[123,51369,51352],{"class":133},[123,51371,51355],{"class":51311},[123,51373,51374],{"class":1972}," http-equiv",[123,51376,179],{"class":133},[123,51378,51379],{"class":238},"\"X-UA-Compatible\"",[123,51381,51382],{"class":1972}," content",[123,51384,179],{"class":133},[123,51386,51387],{"class":238},"\"IE=edge\"",[123,51389,51318],{"class":133},[123,51391,51392,51394,51396,51398,51400,51403,51405,51407,51410],{"class":125,"line":1230},[123,51393,51352],{"class":133},[123,51395,51355],{"class":51311},[123,51397,14930],{"class":1972},[123,51399,179],{"class":133},[123,51401,51402],{"class":238},"\"viewport\"",[123,51404,51382],{"class":1972},[123,51406,179],{"class":133},[123,51408,51409],{"class":238},"\"width=device-width, initial-scale=1.0\"",[123,51411,51318],{"class":133},[123,51413,51414,51416,51419,51422,51424],{"class":125,"line":1321},[123,51415,51352],{"class":133},[123,51417,51418],{"class":51311},"title",[123,51420,51421],{"class":133},">Document\u003C\u002F",[123,51423,51418],{"class":51311},[123,51425,51318],{"class":133},[123,51427,51428,51430,51432],{"class":125,"line":1327},[123,51429,51352],{"class":133},[123,51431,5136],{"class":51311},[123,51433,51318],{"class":133},[123,51435,51436,51439],{"class":125,"line":1339},[123,51437,51438],{"class":51311},"        *",[123,51440,15582],{"class":133},[123,51442,51443,51446,51449,51451],{"class":125,"line":1621},[123,51444,51445],{"class":182},"            margin",[123,51447,51448],{"class":133},": ",[123,51450,325],{"class":182},[123,51452,1300],{"class":133},[123,51454,51455,51458,51460,51462],{"class":125,"line":1626},[123,51456,51457],{"class":182},"            padding",[123,51459,51448],{"class":133},[123,51461,325],{"class":182},[123,51463,1300],{"class":133},[123,51465,51466],{"class":125,"line":1632},[123,51467,2538],{"class":133},[123,51469,51470],{"class":125,"line":1637},[123,51471,2409],{"emptyLinePlaceholder":50},[123,51473,51474,51477],{"class":125,"line":1651},[123,51475,51476],{"class":1972},"        .box",[123,51478,15582],{"class":133},[123,51480,51481,51484,51486,51489],{"class":125,"line":1656},[123,51482,51483],{"class":182},"            display",[123,51485,51448],{"class":133},[123,51487,51488],{"class":182},"flex",[123,51490,1300],{"class":133},[123,51492,51493,51496,51498,51501,51504],{"class":125,"line":1662},[123,51494,51495],{"class":182},"            width",[123,51497,51448],{"class":133},[123,51499,51500],{"class":182},"700",[123,51502,51503],{"class":129},"px",[123,51505,1300],{"class":133},[123,51507,51508,51511,51513,51515,51517],{"class":125,"line":1683},[123,51509,51510],{"class":182},"            height",[123,51512,51448],{"class":133},[123,51514,3982],{"class":182},[123,51516,51503],{"class":129},[123,51518,1300],{"class":133},[123,51520,51521,51524,51526,51528,51530,51533,51536],{"class":125,"line":1688},[123,51522,51523],{"class":182},"            border-left",[123,51525,51448],{"class":133},[123,51527,351],{"class":182},[123,51529,51503],{"class":129},[123,51531,51532],{"class":182}," solid",[123,51534,51535],{"class":182}," pink",[123,51537,1300],{"class":133},[123,51539,51540,51543,51545,51547,51549,51551,51553],{"class":125,"line":1702},[123,51541,51542],{"class":182},"            border-bottom",[123,51544,51448],{"class":133},[123,51546,351],{"class":182},[123,51548,51503],{"class":129},[123,51550,51532],{"class":182},[123,51552,51535],{"class":182},[123,51554,1300],{"class":133},[123,51556,51557,51559,51561,51563,51565,51568],{"class":125,"line":1707},[123,51558,51445],{"class":182},[123,51560,51448],{"class":133},[123,51562,790],{"class":182},[123,51564,51503],{"class":129},[123,51566,51567],{"class":182}," auto",[123,51569,1300],{"class":133},[123,51571,51572,51575,51577,51580],{"class":125,"line":1736},[123,51573,51574],{"class":182},"            justify-content",[123,51576,51448],{"class":133},[123,51578,51579],{"class":182},"space-around",[123,51581,1300],{"class":133},[123,51583,51584,51587,51589,51592],{"class":125,"line":1741},[123,51585,51586],{"class":182},"            align-items",[123,51588,51448],{"class":133},[123,51590,51591],{"class":182},"flex-end",[123,51593,1300],{"class":133},[123,51595,51596,51599,51601,51604],{"class":125,"line":1758},[123,51597,51598],{"class":182},"            text-align",[123,51600,51448],{"class":133},[123,51602,51603],{"class":182},"center",[123,51605,1300],{"class":133},[123,51607,51608],{"class":125,"line":1763},[123,51609,2538],{"class":133},[123,51611,51612],{"class":125,"line":1768},[123,51613,2409],{"emptyLinePlaceholder":50},[123,51615,51616,51618,51620,51623],{"class":125,"line":1773},[123,51617,51476],{"class":1972},[123,51619,1094],{"class":129},[123,51621,51622],{"class":51311},"div",[123,51624,15582],{"class":133},[123,51626,51627,51629,51631,51633],{"class":125,"line":1787},[123,51628,51483],{"class":182},[123,51630,51448],{"class":133},[123,51632,51488],{"class":182},[123,51634,1300],{"class":133},[123,51636,51637,51639,51641,51643,51645],{"class":125,"line":1792},[123,51638,51495],{"class":182},[123,51640,51448],{"class":133},[123,51642,790],{"class":182},[123,51644,51503],{"class":129},[123,51646,1300],{"class":133},[123,51648,51649,51652,51654,51657],{"class":125,"line":2586},[123,51650,51651],{"class":182},"            background-color",[123,51653,51448],{"class":133},[123,51655,51656],{"class":182},"pink",[123,51658,1300],{"class":133},[123,51660,51661,51664,51666,51669],{"class":125,"line":2600},[123,51662,51663],{"class":182},"            flex-direction",[123,51665,51448],{"class":133},[123,51667,51668],{"class":182},"column",[123,51670,1300],{"class":133},[123,51672,51673,51675,51677,51680],{"class":125,"line":2608},[123,51674,51574],{"class":182},[123,51676,51448],{"class":133},[123,51678,51679],{"class":182},"space-between",[123,51681,1300],{"class":133},[123,51683,51684],{"class":125,"line":2613},[123,51685,2538],{"class":133},[123,51687,51688],{"class":125,"line":2619},[123,51689,2409],{"emptyLinePlaceholder":50},[123,51691,51692,51694,51697,51700],{"class":125,"line":2625},[123,51693,51476],{"class":1972},[123,51695,51696],{"class":51311}," div",[123,51698,51699],{"class":51311}," span",[123,51701,15582],{"class":133},[123,51703,51704],{"class":125,"line":2630},[123,51705,2409],{"emptyLinePlaceholder":50},[123,51707,51708,51711,51713,51716,51718],{"class":125,"line":7958},[123,51709,51710],{"class":182},"            margin-top",[123,51712,51448],{"class":133},[123,51714,51715],{"class":182},"-20",[123,51717,51503],{"class":129},[123,51719,1300],{"class":133},[123,51721,51722],{"class":125,"line":7982},[123,51723,2538],{"class":133},[123,51725,51726],{"class":125,"line":7987},[123,51727,2409],{"emptyLinePlaceholder":50},[123,51729,51730,51732,51734,51737],{"class":125,"line":7993},[123,51731,51476],{"class":1972},[123,51733,51696],{"class":51311},[123,51735,51736],{"class":51311}," h4",[123,51738,15582],{"class":133},[123,51740,51741,51744,51746,51749,51751],{"class":125,"line":8020},[123,51742,51743],{"class":182},"            margin-bottom",[123,51745,51448],{"class":133},[123,51747,51748],{"class":182},"-35",[123,51750,51503],{"class":129},[123,51752,1300],{"class":133},[123,51754,51755,51757,51759,51761,51763],{"class":125,"line":8025},[123,51756,51495],{"class":182},[123,51758,51448],{"class":133},[123,51760,490],{"class":182},[123,51762,51503],{"class":129},[123,51764,1300],{"class":133},[123,51766,51767,51770,51772,51775,51777],{"class":125,"line":8031},[123,51768,51769],{"class":182},"            margin-left",[123,51771,51448],{"class":133},[123,51773,51774],{"class":182},"-10",[123,51776,51503],{"class":129},[123,51778,1300],{"class":133},[123,51780,51781],{"class":125,"line":8043},[123,51782,2538],{"class":133},[123,51784,51785,51788,51790],{"class":125,"line":8055},[123,51786,51787],{"class":133},"    \u003C\u002F",[123,51789,5136],{"class":51311},[123,51791,51318],{"class":133},[123,51793,51794,51797,51799],{"class":125,"line":8067},[123,51795,51796],{"class":133},"\u003C\u002F",[123,51798,51345],{"class":51311},[123,51800,51318],{"class":133},[123,51802,51803],{"class":125,"line":9726},[123,51804,2409],{"emptyLinePlaceholder":50},[123,51806,51807,51809,51812],{"class":125,"line":9751},[123,51808,1044],{"class":133},[123,51810,51811],{"class":51311},"body",[123,51813,51318],{"class":133},[123,51815,51816],{"class":125,"line":9774},[123,51817,2409],{"emptyLinePlaceholder":50},[123,51819,51820,51822,51825],{"class":125,"line":9798},[123,51821,51352],{"class":133},[123,51823,51824],{"class":51311},"script",[123,51826,51318],{"class":133},[123,51828,51829],{"class":125,"line":9803},[123,51830,51831],{"class":192},"        \u002F\u002F 1. 四次弹框效果\n",[123,51833,51834],{"class":125,"line":9808},[123,51835,51836],{"class":192},"        \u002F\u002F 声明一个新的数组\n",[123,51838,51839,51842,51845,51847],{"class":125,"line":9813},[123,51840,51841],{"class":129},"        let",[123,51843,51844],{"class":133}," arr ",[123,51846,179],{"class":129},[123,51848,51849],{"class":133}," []\n",[123,51851,51852,51854,51856,51859,51861,51863,51865,51867,51869,51872,51874,51876],{"class":125,"line":9822},[123,51853,3412],{"class":129},[123,51855,1667],{"class":133},[123,51857,51858],{"class":129},"let",[123,51860,9448],{"class":133},[123,51862,179],{"class":129},[123,51864,25129],{"class":182},[123,51866,9455],{"class":133},[123,51868,1597],{"class":129},[123,51870,51871],{"class":182}," 4",[123,51873,3223],{"class":133},[123,51875,2301],{"class":129},[123,51877,12452],{"class":133},[123,51879,51880],{"class":125,"line":9827},[123,51881,51882],{"class":192},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[123,51884,51885],{"class":125,"line":9833},[123,51886,51887],{"class":192},"            \u002F\u002F arr.push(num)\n",[123,51889,51890,51893,51896,51898,51901,51903,51906,51908,51911],{"class":125,"line":9854},[123,51891,51892],{"class":133},"            arr.",[123,51894,51895],{"class":1972},"push",[123,51897,134],{"class":133},[123,51899,51900],{"class":1972},"prompt",[123,51902,134],{"class":133},[123,51904,51905],{"class":238},"`请输入第${",[123,51907,575],{"class":133},[123,51909,51910],{"class":238},"}季度的数据:`",[123,51912,30508],{"class":133},[123,51914,51915],{"class":125,"line":9860},[123,51916,51917],{"class":192},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[123,51919,51920],{"class":125,"line":9874},[123,51921,2538],{"class":133},[123,51923,51924],{"class":125,"line":9880},[123,51925,51926],{"class":192},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[123,51928,51929],{"class":125,"line":9907},[123,51930,51931],{"class":192},"        \u002F\u002F 盒子开头\n",[123,51933,51934,51937,51940,51942,51945],{"class":125,"line":9916},[123,51935,51936],{"class":133},"        document.",[123,51938,51939],{"class":1972},"write",[123,51941,134],{"class":133},[123,51943,51944],{"class":238},"` \u003Cdiv class=\"box\">`",[123,51946,140],{"class":133},[123,51948,51949],{"class":125,"line":9922},[123,51950,2409],{"emptyLinePlaceholder":50},[123,51952,51953],{"class":125,"line":9930},[123,51954,51955],{"class":192},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[123,51957,51958,51960,51962,51964,51966,51968,51970,51972,51974,51977,51980,51982,51984],{"class":125,"line":9935},[123,51959,3412],{"class":129},[123,51961,1667],{"class":133},[123,51963,51858],{"class":129},[123,51965,9448],{"class":133},[123,51967,179],{"class":129},[123,51969,4102],{"class":182},[123,51971,9455],{"class":133},[123,51973,1044],{"class":129},[123,51975,51976],{"class":133}," arr.",[123,51978,51979],{"class":182},"length",[123,51981,3223],{"class":133},[123,51983,2301],{"class":129},[123,51985,12452],{"class":133},[123,51987,51988,51991,51993,51995],{"class":125,"line":16614},[123,51989,51990],{"class":133},"            document.",[123,51992,51939],{"class":1972},[123,51994,134],{"class":133},[123,51996,51997],{"class":238},"`\n",[123,51999,52000,52003,52005,52007,52009,52011],{"class":125,"line":16620},[123,52001,52002],{"class":238},"              \u003Cdiv style=\"height: ${",[123,52004,3889],{"class":133},[123,52006,1024],{"class":238},[123,52008,575],{"class":133},[123,52010,1074],{"class":238},[123,52012,52013],{"class":238},"}px;\">\n",[123,52015,52016,52019,52021,52023,52025,52027],{"class":125,"line":16643},[123,52017,52018],{"class":238},"                \u003Cspan>${",[123,52020,3889],{"class":133},[123,52022,1024],{"class":238},[123,52024,575],{"class":133},[123,52026,1074],{"class":238},[123,52028,52029],{"class":238},"}\u003C\u002Fspan>\n",[123,52031,52032,52035,52037,52039,52041],{"class":125,"line":16649},[123,52033,52034],{"class":238},"                \u003Ch4>第${",[123,52036,575],{"class":133},[123,52038,45577],{"class":129},[123,52040,25129],{"class":182},[123,52042,52043],{"class":238},"}季度\u003C\u002Fh4>\n",[123,52045,52046],{"class":125,"line":16672},[123,52047,52048],{"class":238},"              \u003C\u002Fdiv>          \n",[123,52050,52051,52054],{"class":125,"line":16686},[123,52052,52053],{"class":238},"            `",[123,52055,140],{"class":133},[123,52057,52058],{"class":125,"line":16706},[123,52059,2538],{"class":133},[123,52061,52062],{"class":125,"line":16712},[123,52063,52064],{"class":192},"        \u002F\u002F 盒子结尾\n",[123,52066,52067,52069,52071,52073,52076],{"class":125,"line":16723},[123,52068,51936],{"class":133},[123,52070,51939],{"class":1972},[123,52072,134],{"class":133},[123,52074,52075],{"class":238},"` \u003C\u002Fdiv>`",[123,52077,140],{"class":133},[123,52079,52080,52082,52084],{"class":125,"line":16746},[123,52081,51787],{"class":133},[123,52083,51824],{"class":51311},[123,52085,51318],{"class":133},[123,52087,52088,52090,52092],{"class":125,"line":16768},[123,52089,51796],{"class":133},[123,52091,51811],{"class":51311},[123,52093,51318],{"class":133},[123,52095,52096],{"class":125,"line":16773},[123,52097,2409],{"emptyLinePlaceholder":50},[123,52099,52100,52102,52104],{"class":125,"line":16779},[123,52101,51796],{"class":133},[123,52103,50646],{"class":51311},[123,52105,51318],{"class":133},[94,52107,52109],{"id":52108},"_284-冒泡排序","2.8.4 冒泡排序",[114,52111,52113],{"className":50644,"code":52112,"language":50646,"meta":37,"style":37},"\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",[120,52114,52115,52125,52139,52143,52151,52166,52186,52198,52206,52210,52218,52226,52258,52291,52328,52333,52352,52357,52370,52385,52401,52405,52410,52414,52424,52433,52441,52445],{"__ignoreMap":37},[123,52116,52117,52119,52121,52123],{"class":125,"line":126},[123,52118,51308],{"class":133},[123,52120,51312],{"class":51311},[123,52122,51315],{"class":1972},[123,52124,51318],{"class":133},[123,52126,52127,52129,52131,52133,52135,52137],{"class":125,"line":45},[123,52128,1044],{"class":133},[123,52130,50646],{"class":51311},[123,52132,51327],{"class":1972},[123,52134,179],{"class":133},[123,52136,51332],{"class":238},[123,52138,51318],{"class":133},[123,52140,52141],{"class":125,"line":1189},[123,52142,2409],{"emptyLinePlaceholder":50},[123,52144,52145,52147,52149],{"class":125,"line":1204},[123,52146,1044],{"class":133},[123,52148,51345],{"class":51311},[123,52150,51318],{"class":133},[123,52152,52153,52156,52158,52160,52162,52164],{"class":125,"line":1210},[123,52154,52155],{"class":133},"  \u003C",[123,52157,51355],{"class":51311},[123,52159,51358],{"class":1972},[123,52161,179],{"class":133},[123,52163,51363],{"class":238},[123,52165,51318],{"class":133},[123,52167,52168,52170,52172,52174,52176,52178,52180,52182,52184],{"class":125,"line":1224},[123,52169,52155],{"class":133},[123,52171,51355],{"class":51311},[123,52173,14930],{"class":1972},[123,52175,179],{"class":133},[123,52177,51402],{"class":238},[123,52179,51382],{"class":1972},[123,52181,179],{"class":133},[123,52183,51409],{"class":238},[123,52185,51318],{"class":133},[123,52187,52188,52190,52192,52194,52196],{"class":125,"line":1230},[123,52189,52155],{"class":133},[123,52191,51418],{"class":51311},[123,52193,51421],{"class":133},[123,52195,51418],{"class":51311},[123,52197,51318],{"class":133},[123,52199,52200,52202,52204],{"class":125,"line":1321},[123,52201,51796],{"class":133},[123,52203,51345],{"class":51311},[123,52205,51318],{"class":133},[123,52207,52208],{"class":125,"line":1327},[123,52209,2409],{"emptyLinePlaceholder":50},[123,52211,52212,52214,52216],{"class":125,"line":1339},[123,52213,1044],{"class":133},[123,52215,51811],{"class":51311},[123,52217,51318],{"class":133},[123,52219,52220,52222,52224],{"class":125,"line":1621},[123,52221,52155],{"class":133},[123,52223,51824],{"class":51311},[123,52225,51318],{"class":133},[123,52227,52228,52231,52233,52235,52238,52240,52242,52244,52246,52248,52250,52252,52254,52256],{"class":125,"line":1626},[123,52229,52230],{"class":129},"    let",[123,52232,51844],{"class":133},[123,52234,179],{"class":129},[123,52236,52237],{"class":133}," [",[123,52239,453],{"class":182},[123,52241,12445],{"class":133},[123,52243,427],{"class":182},[123,52245,12445],{"class":133},[123,52247,205],{"class":182},[123,52249,12445],{"class":133},[123,52251,211],{"class":182},[123,52253,12445],{"class":133},[123,52255,351],{"class":182},[123,52257,33257],{"class":133},[123,52259,52260,52262,52264,52266,52268,52270,52272,52274,52276,52278,52280,52283,52285,52287,52289],{"class":125,"line":1632},[123,52261,3210],{"class":129},[123,52263,1667],{"class":133},[123,52265,51858],{"class":129},[123,52267,9448],{"class":133},[123,52269,179],{"class":129},[123,52271,4102],{"class":182},[123,52273,9455],{"class":133},[123,52275,1044],{"class":129},[123,52277,51976],{"class":133},[123,52279,51979],{"class":182},[123,52281,52282],{"class":129}," -",[123,52284,25129],{"class":182},[123,52286,3223],{"class":133},[123,52288,2301],{"class":129},[123,52290,12452],{"class":133},[123,52292,52293,52296,52298,52300,52302,52304,52306,52308,52310,52312,52314,52316,52318,52320,52322,52324,52326],{"class":125,"line":1637},[123,52294,52295],{"class":129},"      for",[123,52297,1667],{"class":133},[123,52299,51858],{"class":129},[123,52301,9510],{"class":133},[123,52303,179],{"class":129},[123,52305,4102],{"class":182},[123,52307,9517],{"class":133},[123,52309,1044],{"class":129},[123,52311,51976],{"class":133},[123,52313,51979],{"class":182},[123,52315,52282],{"class":129},[123,52317,9448],{"class":133},[123,52319,666],{"class":129},[123,52321,25129],{"class":182},[123,52323,9524],{"class":133},[123,52325,2301],{"class":129},[123,52327,12452],{"class":133},[123,52329,52330],{"class":125,"line":1651},[123,52331,52332],{"class":192},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[123,52334,52335,52337,52340,52342,52345,52347,52349],{"class":125,"line":1656},[123,52336,2506],{"class":129},[123,52338,52339],{"class":133}," (arr[j] ",[123,52341,1094],{"class":129},[123,52343,52344],{"class":133}," arr[j ",[123,52346,615],{"class":129},[123,52348,25129],{"class":182},[123,52350,52351],{"class":133},"]) {\n",[123,52353,52354],{"class":125,"line":1662},[123,52355,52356],{"class":192},"          \u002F\u002F 交换两个变量\n",[123,52358,52359,52362,52365,52367],{"class":125,"line":1683},[123,52360,52361],{"class":129},"          let",[123,52363,52364],{"class":133}," tmp ",[123,52366,179],{"class":129},[123,52368,52369],{"class":133}," arr[j]\n",[123,52371,52372,52375,52377,52379,52381,52383],{"class":125,"line":1688},[123,52373,52374],{"class":133},"          arr[j] ",[123,52376,179],{"class":129},[123,52378,52344],{"class":133},[123,52380,615],{"class":129},[123,52382,25129],{"class":182},[123,52384,33257],{"class":133},[123,52386,52387,52390,52392,52394,52396,52398],{"class":125,"line":1702},[123,52388,52389],{"class":133},"          arr[j ",[123,52391,615],{"class":129},[123,52393,25129],{"class":182},[123,52395,4452],{"class":133},[123,52397,179],{"class":129},[123,52399,52400],{"class":133}," tmp\n",[123,52402,52403],{"class":125,"line":1707},[123,52404,2538],{"class":133},[123,52406,52407],{"class":125,"line":1736},[123,52408,52409],{"class":133},"      }\n",[123,52411,52412],{"class":125,"line":1741},[123,52413,2196],{"class":133},[123,52415,52416,52419,52421],{"class":125,"line":1758},[123,52417,52418],{"class":133},"    document.",[123,52420,51939],{"class":1972},[123,52422,52423],{"class":133},"(arr)\n",[123,52425,52426,52429,52431],{"class":125,"line":1763},[123,52427,52428],{"class":133},"  \u003C\u002F",[123,52430,51824],{"class":51311},[123,52432,51318],{"class":133},[123,52434,52435,52437,52439],{"class":125,"line":1768},[123,52436,51796],{"class":133},[123,52438,51811],{"class":51311},[123,52440,51318],{"class":133},[123,52442,52443],{"class":125,"line":1773},[123,52444,2409],{"emptyLinePlaceholder":50},[123,52446,52447,52449,52451],{"class":125,"line":1787},[123,52448,51796],{"class":133},[123,52450,50646],{"class":51311},[123,52452,51318],{"class":133},[14,52454,52455],{},[35,52456],{"alt":37,"src":52457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52459,52460],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52462,52463],{},"let arr = [4, 2, 5, 1, 3]",[14,52465,52466],{},"\u002F\u002F 1.升序排列写法",[14,52468,52469],{},"arr.sort(function (a, b) {",[14,52471,52472],{},"return a - b",[14,52474,52475],{},"})",[14,52477,52478],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52480,52481],{},"\u002F\u002F 降序排列写法",[14,52483,52469],{},[14,52485,52486],{},"return b - a",[14,52488,52475],{},[14,52490,52491],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[65,52493,52495],{"id":52494},"_29-函数","2.9 函数",[14,52497,52498],{},[35,52499],{"alt":37,"src":52500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52502,52503],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52505,52506],{},"函数的声明用function",[14,52508,52509],{},"函数里边可以嵌套函数",[94,52511,52513],{"id":52512},"_291-函数传参","2.9.1 函数传参",[14,52515,52516],{},[35,52517],{"alt":37,"src":52518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52520,52521],{},[35,52522],{"alt":37,"src":52523},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1141,52525,52526,52529,52532,52535,52538,52541],{},[80,52527,52528],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[80,52530,52531],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[80,52533,52534],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[80,52536,52537],{},"开发中尽量保持形参和实参个数一致",[80,52539,52540],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[80,52542,52543],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52545,52546],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[94,52548,52550],{"id":52549},"_292-函数的返回值","2.9.2 函数的返回值",[14,52552,52553],{},[35,52554],{"alt":37,"src":52555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,52557,52558],{},[35,52559],{"alt":37,"src":52560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1141,52562,52563,52566,52569,52572,52575],{},[80,52564,52565],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[80,52567,52568],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[80,52570,52571],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[80,52573,52574],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[80,52576,52577],{},"断点调试:进入函数内部看执行过程F11",[94,52579,52581],{"id":52580},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[114,52583,52585],{"className":50644,"code":52584,"language":50646,"meta":37,"style":37},"    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",[120,52586,52587,52592,52597,52601,52606],{"__ignoreMap":37},[123,52588,52589],{"class":125,"line":126},[123,52590,52591],{"class":133},"    function fn(a, b) {\n",[123,52593,52594],{"class":125,"line":45},[123,52595,52596],{"class":133},"      console.log(a + b);\n",[123,52598,52599],{"class":125,"line":1189},[123,52600,2196],{"class":133},[123,52602,52603],{"class":125,"line":1204},[123,52604,52605],{"class":133},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[123,52607,52608],{"class":125,"line":1210},[123,52609,52610],{"class":133},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[94,52612,52614],{"id":52613},"_294-作用域","2.9.4 作用域",[1141,52616,52617,52623,52628,52631,52634],{},[80,52618,52619,52620],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[283,52621,52622],{},"作用域",[80,52624,52625],{},[283,52626,52627],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[80,52629,52630],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[80,52632,52633],{},"函数内部可以直接所使用全局变量",[80,52635,52636],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,52638,14643],{},[114,52640,52642],{"className":50644,"code":52641,"language":50646,"meta":37,"style":37},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[120,52643,52644,52649,52654,52658,52663,52668,52673],{"__ignoreMap":37},[123,52645,52646],{"class":125,"line":126},[123,52647,52648],{"class":133},"    function fun() {\n",[123,52650,52651],{"class":125,"line":45},[123,52652,52653],{"class":133},"      num = 10\n",[123,52655,52656],{"class":125,"line":1189},[123,52657,2196],{"class":133},[123,52659,52660],{"class":125,"line":1204},[123,52661,52662],{"class":133},"    fun()\n",[123,52664,52665],{"class":125,"line":1210},[123,52666,52667],{"class":133},"    console.log(num)\n",[123,52669,52670],{"class":125,"line":1224},[123,52671,52672],{"class":133},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[123,52674,52675],{"class":125,"line":1230},[123,52676,52677],{"class":133},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1141,52679,52680,52683],{},[80,52681,52682],{},"函数内部的形参可以看做是局部变量",[80,52684,52685],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,52687,52688,52689],{},"变量访问原则： ",[283,52690,52691],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[94,52693,52695],{"id":52694},"_295-匿名函数","2.9.5 匿名函数",[14,52697,52698],{},"函数可以分为具名函数和匿名函数",[14,52700,52701],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[77,52703,52704],{},[80,52705,52706],{},"函数表达式",[14,52708,52709],{},[35,52710],{"alt":37,"src":52711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,52713,52714],{},"里边也可以写参数",[14,52716,52717],{},"具名函数调用位置可以随意调整；",[14,52719,52720],{},"匿名函数函数表达式形式只能在声明后才可以使用",[77,52722,52723],{"start":45},[80,52724,52725],{},"立即执行函数",[14,52727,52728],{},[35,52729],{"alt":37,"src":52730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,52732,52733],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,52735,52736],{},"写法：两个小括号，然后在第一个小括号中写function",[14,52738,52739],{},"(function () {})();",[14,52741,52742],{},"不要落下最后的;",[14,52744,52745],{},"立即执行函数必须要加;",[14,52747,52748],{},"分号写前写后都没问题",[14,52750,52751],{},"写前：",[14,52753,52754],{},"(function() {})()",[14,52756,52757],{},";(function () {})();",[14,52759,52760],{},"写后:",[14,52762,52763],{},"(function() {})();",[14,52765,52739],{},[14,52767,52768],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,52770,52771],{},"还有一种写法：",[14,52773,52774],{},"(function(){}());",[14,52776,52777],{},"或者:",[14,52779,52780],{},"!function(){}();",[14,52782,52783],{},"立即执行函数有时候也是可以加名字的：",[14,52785,52786],{},"(function flexible(window,document) {}(window,document));",[14,52788,52789],{},"省一些调用方法",[94,52791,52793],{"id":52792},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,52795,52796],{},[35,52797],{"alt":37,"src":52798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,52800,52801],{},"这样就不用非得给x,y初始化了",[14,52803,52804],{},[35,52805],{"alt":37,"src":52806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,52808,52809],{},"代码执行时先看左边",[14,52811,52812],{},"例如：console.log(false && 3+5)",[14,52814,52815],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,52817,52818],{},"&&都是真时，就返回最后一个真值",[14,52820,52821],{},"console.log(11 && 22)",[14,52823,52824],{},"输出22",[14,52826,52827],{},"逻辑与：遇真则真",[14,52829,14643],{},[14,52831,52832],{},"let age=1",[14,52834,52835],{},"console.log(11 || age++)",[14,52837,52838],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,52840,52841],{},"console.log(11 || 22)",[14,52843,52844],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,52846,52847],{},"||如果都是假的话，就取最后一个假的值了",[94,52849,52851],{"id":52850},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,52853,52854],{},"显示转换：",[14,52856,52857,52860,52861],{},[283,52858,52859],{},"记忆","： ",[283,52862,52863],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,52865,52866],{},"空字符串为假，其他字符串全为真",[14,52868,52869],{},[35,52870],{"alt":37,"src":52871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,52873,52874],{},"隐式转换：",[14,52876,52877],{},[35,52878],{"alt":37,"src":52879},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,52881,52882],{},"隐式转换:",[14,52884,52885],{},"null+3=3",[14,52887,52888],{},"undefined+3=NaN",[14,52890,52891],{},"null==undefined 输出true,他两个都当0看",[14,52893,52894],{},"null===undefined 输出false",[14,52896,52897],{},"undefined做任何操作都是NaN",[14,52899,52900],{},"NaN不等于NaN，NaN表示计算错误",[65,52902,52904],{"id":52903},"_210-对象","2.10 对象",[94,52906,52908],{"id":52907},"_2101-对象的介绍","2.10.1 对象的介绍",[14,52910,52911],{},"对象也是一种数据类型，里边的数据是无序的",[14,52913,52914],{},"对象由属性和方法组成",[14,52916,52917],{},[35,52918],{"alt":37,"src":52919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,52921,52922],{},[35,52923],{"alt":37,"src":52924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,52926,52927],{},[35,52928],{"alt":37,"src":52929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[94,52931,52933],{"id":52932},"_2102-对象属性","2.10.2 对象属性",[14,52935,52936],{},[35,52937],{"alt":37,"src":52938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[77,52940,52941],{},[80,52942,52943],{},"查询对象",[14,52945,52946],{},"对象名.属性 goods.uname",[14,52948,52949],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,52951,52952],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,52954,52955],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,52957,52958],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[77,52960,52961],{"start":45},[80,52962,52963],{},"重新赋值",[14,52965,52966],{},"对象名.属性=新值",[77,52968,52969],{"start":1189},[80,52970,52971],{},"增加新数据",[14,52973,52966],{},[77,52975,52976],{"start":1204},[80,52977,52978],{},"删除对象中的属性",[14,52980,52981],{},"delete 对象名.属性",[94,52983,52985],{"id":52984},"_2103-对象方法","2.10.3 对象方法",[14,52987,52988],{},[35,52989],{"alt":37,"src":52990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,52992,52993],{},"后边跟的是匿名函数",[14,52995,52996],{},"对象外面的叫函数；对象内部的叫方法",[14,52998,52999],{},[35,53000],{"alt":37,"src":53001},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[94,53003,53005],{"id":53004},"_2104-遍历对象","2.10.4 遍历对象",[14,53007,53008],{},"理解为加括号的python字典遍历",[14,53010,53011],{},[35,53012],{"alt":37,"src":53013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,53015,53016],{},"k是字符串类型",[14,53018,53019],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[114,53021,53023],{"className":50644,"code":53022,"language":50646,"meta":37,"style":37},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[120,53024,53025,53030,53035,53040,53045],{"__ignoreMap":37},[123,53026,53027],{"class":125,"line":126},[123,53028,53029],{"class":133},"   let arr = [1, 2, 3]\n",[123,53031,53032],{"class":125,"line":45},[123,53033,53034],{"class":133},"    for (let k in arr) {\n",[123,53036,53037],{"class":125,"line":1189},[123,53038,53039],{"class":133},"      console.log(k)\n",[123,53041,53042],{"class":125,"line":1204},[123,53043,53044],{"class":133},"      console.log(arr[k])\n",[123,53046,53047],{"class":125,"line":1210},[123,53048,2196],{"class":133},[14,53050,53051],{},[35,53052],{"alt":37,"src":53053},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53055,53056],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53058,53059],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53061,53062],{},"for in 得到的k是属性名",[51824,53064,53065],{},"\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,53067,53068],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[94,53070,53072],{"id":53071},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53074,53075],{},"数组中放对象信息",[114,53077,53081],{"className":53078,"code":53079,"language":53080,"meta":37,"style":37},"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",[120,53082,53083,53091,53096,53101,53106,53111,53116,53121,53126,53131,53136,53141,53146,53150,53154],{"__ignoreMap":37},[123,53084,53085,53087,53089],{"class":125,"line":126},[123,53086,1044],{"class":133},[123,53088,51824],{"class":51311},[123,53090,51318],{"class":133},[123,53092,53093],{"class":125,"line":45},[123,53094,53095],{"class":133},"    let students = [\n",[123,53097,53098],{"class":125,"line":1189},[123,53099,53100],{"class":133},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[123,53102,53103],{"class":125,"line":1204},[123,53104,53105],{"class":133},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[123,53107,53108],{"class":125,"line":1210},[123,53109,53110],{"class":133},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[123,53112,53113],{"class":125,"line":1224},[123,53114,53115],{"class":133},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[123,53117,53118],{"class":125,"line":1230},[123,53119,53120],{"class":133},"    ]\n",[123,53122,53123],{"class":125,"line":1321},[123,53124,53125],{"class":133},"    for (let i = 0; i \u003C students.length; i++) {\n",[123,53127,53128],{"class":125,"line":1327},[123,53129,53130],{"class":133},"      for (let k in students[i]) {\n",[123,53132,53133],{"class":125,"line":1339},[123,53134,53135],{"class":133},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[123,53137,53138],{"class":125,"line":1621},[123,53139,53140],{"class":133},"        \u002F\u002F输出每个人的名字：\n",[123,53142,53143],{"class":125,"line":1626},[123,53144,53145],{"class":133},"        \u002F\u002Fconsole.log(students[i].name)\n",[123,53147,53148],{"class":125,"line":1632},[123,53149,52409],{"class":133},[123,53151,53152],{"class":125,"line":1637},[123,53153,2196],{"class":133},[123,53155,53156,53158,53160],{"class":125,"line":1651},[123,53157,52428],{"class":133},[123,53159,51824],{"class":51311},[123,53161,51318],{"class":133},[94,53163,53165],{"id":53164},"_2106-内置对象","2.10.6 内置对象",[14,53167,53168],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[77,53170,53171],{},[80,53172,53173],{},"数学对象Math",[14,53175,53176],{},[35,53177],{"alt":37,"src":53178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53180,53181],{},[372,53182,53185],{"href":53183,"rel":53184},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23875],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53187,53188],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53190,53191],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53193,53194],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53196,53197],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53199,53200],{},"null属于对象数据类型",[77,53202,53203],{"start":45},[80,53204,53205],{},"生成任意范围随机数",[14,53207,53208],{},[35,53209],{"alt":37,"src":53210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53212,53213],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53215,53216],{},"乘以几就取不到几",[14,53218,53219],{},"取数组中的随机元素：",[14,53221,53222],{},"let arr = ['red', 'green', 'blue']",[14,53224,53225],{},"let random = Math.floor(Math.random() * arr.length)",[14,53227,53228],{},"console.log(arr[random])",[14,53230,53231],{},"这个函数得到的是全闭区间",[14,53233,53234],{},"function getRandom(N, M) {",[14,53236,53237],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53239,1080],{},[14,53241,53242],{},"console.log(getRandom(4, 8))",[94,53244,53246],{"id":53245},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53248,53249],{},[35,53250],{"alt":37,"src":53251},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53253,53254],{},[35,53255],{"alt":37,"src":53256},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53258,53259],{},[35,53260],{"alt":37,"src":53261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53263,53264],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53266,53267],{},[35,53268],{"alt":37,"src":53269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53271,53272],{},[35,53273],{"alt":37,"src":53274},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53276,53277],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53279,53280],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53282,53283],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5136,53285,53286],{},"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":37,"searchDepth":45,"depth":45,"links":53288},[53289,53297,53298,53299,53300,53301,53308,53312,53318,53327],{"id":50479,"depth":45,"text":50480,"children":53290},[53291,53292,53293,53294,53295,53296],{"id":50483,"depth":1189,"text":50484},{"id":50500,"depth":1189,"text":50501},{"id":50540,"depth":1189,"text":50541},{"id":50552,"depth":1189,"text":50553},{"id":50561,"depth":1189,"text":50562},{"id":50609,"depth":1189,"text":50610},{"id":50619,"depth":45,"text":50620},{"id":50707,"depth":45,"text":50708},{"id":50730,"depth":45,"text":50731},{"id":50742,"depth":45,"text":50743},{"id":50929,"depth":45,"text":50930,"children":53302},[53303,53304,53305,53306,53307],{"id":50933,"depth":1189,"text":50934},{"id":50942,"depth":1189,"text":50943},{"id":50970,"depth":1189,"text":50971},{"id":51006,"depth":1189,"text":51007},{"id":51031,"depth":1189,"text":51032},{"id":51043,"depth":45,"text":51044,"children":53309},[53310,53311],{"id":51064,"depth":1189,"text":51065},{"id":51158,"depth":1189,"text":51159},{"id":51216,"depth":45,"text":51217,"children":53313},[53314,53315,53316,53317],{"id":51220,"depth":1189,"text":51221},{"id":51244,"depth":1189,"text":51245},{"id":51297,"depth":1189,"text":51298},{"id":52108,"depth":1189,"text":52109},{"id":52494,"depth":45,"text":52495,"children":53319},[53320,53321,53322,53323,53324,53325,53326],{"id":52512,"depth":1189,"text":52513},{"id":52549,"depth":1189,"text":52550},{"id":52580,"depth":1189,"text":52581},{"id":52613,"depth":1189,"text":52614},{"id":52694,"depth":1189,"text":52695},{"id":52792,"depth":1189,"text":52793},{"id":52850,"depth":1189,"text":52851},{"id":52903,"depth":45,"text":52904,"children":53328},[53329,53330,53331,53332,53333,53334,53335],{"id":52907,"depth":1189,"text":52908},{"id":52932,"depth":1189,"text":52933},{"id":52984,"depth":1189,"text":52985},{"id":53004,"depth":1189,"text":53005},{"id":53071,"depth":1189,"text":53072},{"id":53164,"depth":1189,"text":53165},{"id":53245,"depth":1189,"text":53246},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50471,"description":47},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53342,"title":53343,"body":53344,"description":47,"extension":48,"meta":76684,"navigation":50,"path":76685,"seo":76686,"stem":76687,"__hash__":76688},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53345,"toc":76624},[53346,53349,53352,53355,53360,53363,53366,53369,53373,53377,53383,53388,53396,53403,53406,53410,53415,53420,53425,53428,53431,53442,53445,53449,53452,53455,53460,53465,53470,53473,53476,53568,53571,53576,53579,53584,53587,53590,53595,53598,53603,53607,53610,53624,53628,53633,53636,53639,53643,53648,53651,53655,53659,53664,53668,53673,53676,53679,53682,53685,53688,53691,53696,53701,53729,53732,53735,53738,53743,53746,53749,53752,53755,53759,53788,53792,53797,53802,53805,53808,53811,53816,53931,53936,53941,54102,54107,54110,54114,54119,54124,54127,54130,54133,54136,54139,54142,54145,54148,54151,54154,54157,54160,54163,54166,54168,54171,54174,54177,54182,54186,54583,54586,54592,54596,54601,55883,55888,55891,55894,55897,55902,57098,57102,57108,57113,57116,57121,57126,57130,57134,57139,57142,57147,57150,57153,57157,58065,58068,58072,58293,58296,58299,58302,58528,58531,58755,58758,58762,58767,58770,58773,59001,59004,59037,59040,59044,59049,59053,59056,59059,59062,59065,59068,59071,59074,59079,60359,60363,60366,61459,61463,61466,61469,61472,61475,61479,61482,61485,61487,61495,62976,62980,62983,62986,62989,63198,63201,63205,63209,63214,63219,63222,63225,63230,63234,63239,63242,63351,63355,63360,63365,63368,63371,63375,63380,63385,63390,63393,63396,63407,63410,63415,63420,63423,63426,63499,63503,63508,63511,63513,63524,63528,63533,64859,64862,64865,64868,64870,64873,64876,64879,64882,64885,64888,64891,64894,64897,64900,64903,64906,64908,64910,64913,64917,66011,66014,66017,66033,66047,66050,66055,66061,66066,66070,66074,66079,66083,66088,66530,66535,66538,66542,66547,66550,66553,66557,66562,66566,66571,66576,66580,66585,66590,66593,66598,66603,66607,66612,66617,66721,66724,66728,66733,67099,67102,67105,67108,67111,67114,67117,67120,67123,68419,68423,68428,68433,68436,68439,68442,68445,68447,68452,68457,68460,68464,68469,68474,68479,68482,68485,68488,68491,68494,68499,68502,68506,68511,68516,68520,68525,68528,68533,68536,68539,68542,68545,68548,68553,68556,68559,68562,68565,68569,68574,68577,68581,68586,68589,68592,68596,68625,68628,68632,68636,68641,68645,68650,68653,68656,68659,68662,68665,68668,68671,68674,68677,68680,68683,68686,68689,68692,68696,68701,68706,68709,68713,68717,68722,68725,68729,68732,68735,68740,68745,68750,68755,68760,68763,68766,68771,68776,68780,68785,68788,68793,68796,68799,68802,68805,68810,68813,68822,68826,68831,68834,68837,68841,68844,68849,68853,68856,68862,68868,68872,68898,68901,70462,70465,70961,70964,70969,70974,70979,70983,70988,70993,70998,71002,71007,71010,71013,71016,71019,71023,71026,71031,71034,71039,71043,71048,71051,71056,71061,71066,71069,71072,71077,71082,71085,71088,71092,71095,71100,71103,71108,71111,71116,71121,71126,71129,71134,71199,71202,71213,71217,71222,71394,71398,71403,71406,71409,71412,71416,71427,71431,71434,71439,71444,71447,71450,71453,71456,71459,71461,71464,71467,71470,71475,71478,71483,71486,71490,71493,71496,71510,71514,71517,71572,71577,71580,71583,71588,71591,71595,71600,71730,71734,71739,71744,71825,71830,71834,71837,71842,71847,71853,71856,71859,71862,71866,71871,71874,71885,71889,71906,74953,74957,74960,74963,74966,74987,74991,74994,75002,75005,75010,75013,75016,75021,75026,75030,75051,75055,75060,75063,75066,75069,75072,75076,75081,75084,75088,75093,75096,75101,75104,75109,75112,75117,76320,76324,76329,76332,76337,76621],[10,53347,53343],{"id":53348},"_3web-apis",[14,53350,53351],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53353,53354],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53356,53357],{},[35,53358],{"alt":37,"src":53359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53361,53362],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53364,53365],{},"建议数组和对象使用 const 来声明",[14,53367,53368],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[65,53370,53372],{"id":53371},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[94,53374,53376],{"id":53375},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53378,53379,53382],{},[120,53380,53381],{},"document"," = HTML 文件解析后的对象化表示；",[14,53384,53385,53387],{},[120,53386,53381],{}," ≠ HTML 文件本身",[14,53389,53390,53395],{},[283,53391,53392],{},[120,53393,53394],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53397,53398,53402],{},[283,53399,53400],{},[120,53401,53381],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53404,53405],{},"document实际上为window.document的简写",[94,53407,53409],{"id":53408},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53411,53412],{},[35,53413],{"alt":37,"src":53414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53416,53417],{},[35,53418],{"alt":37,"src":53419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53421,53422],{},[35,53423],{"alt":37,"src":53424},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53426,53427],{},"console.dir()",[14,53429,53430],{},"dir用来打印对象",[1141,53432,53433,53436,53439],{},[80,53434,53435],{},"任何一个标签，都是一个对象",[80,53437,53438],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[80,53440,53441],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53443,53444],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[94,53446,53448],{"id":53447},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53450,53451],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53453,53454],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53456,53457],{},[283,53458,53459],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[77,53461,53462],{},[80,53463,53464],{},"利用CSS选择器来获取标签元素",[14,53466,53467],{},[35,53468],{"alt":37,"src":53469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53471,53472],{},"里边的选择器必须必须加引号！！！",[14,53474,53475],{},"只选择第一个元素",[114,53477,53479],{"className":53078,"code":53478,"language":53080,"meta":37,"style":37},"\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",[120,53480,53481,53489,53510,53529,53537,53542,53547,53552,53560],{"__ignoreMap":37},[123,53482,53483,53485,53487],{"class":125,"line":126},[123,53484,1044],{"class":133},[123,53486,51811],{"class":51311},[123,53488,51318],{"class":133},[123,53490,53491,53493,53495,53498,53500,53503,53506,53508],{"class":125,"line":45},[123,53492,52155],{"class":133},[123,53494,51622],{"class":51311},[123,53496,53497],{"class":1972}," class",[123,53499,179],{"class":133},[123,53501,53502],{"class":238},"\"box\"",[123,53504,53505],{"class":133},">123\u003C\u002F",[123,53507,51622],{"class":51311},[123,53509,51318],{"class":133},[123,53511,53512,53514,53516,53518,53520,53522,53525,53527],{"class":125,"line":1189},[123,53513,52155],{"class":133},[123,53515,51622],{"class":51311},[123,53517,53497],{"class":1972},[123,53519,179],{"class":133},[123,53521,53502],{"class":238},[123,53523,53524],{"class":133},">456\u003C\u002F",[123,53526,51622],{"class":51311},[123,53528,51318],{"class":133},[123,53530,53531,53533,53535],{"class":125,"line":1204},[123,53532,52155],{"class":133},[123,53534,51824],{"class":51311},[123,53536,51318],{"class":133},[123,53538,53539],{"class":125,"line":1210},[123,53540,53541],{"class":133},"    \u002F\u002F 1.获取匹配的第一个元素\n",[123,53543,53544],{"class":125,"line":1224},[123,53545,53546],{"class":133},"    const box = document.querySelector('div')\n",[123,53548,53549],{"class":125,"line":1230},[123,53550,53551],{"class":133},"    console.dir(box)\n",[123,53553,53554,53556,53558],{"class":125,"line":1321},[123,53555,52428],{"class":133},[123,53557,51824],{"class":51311},[123,53559,51318],{"class":133},[123,53561,53562,53564,53566],{"class":125,"line":1327},[123,53563,51796],{"class":133},[123,53565,51811],{"class":51311},[123,53567,51318],{"class":133},[14,53569,53570],{},"只选123，不选456",[14,53572,53573],{},[35,53574],{"alt":37,"src":53575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,53577,53578],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,53580,53581],{},[35,53582],{"alt":37,"src":53583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,53585,53586],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,53588,53589],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[77,53591,53592],{"start":45},[80,53593,53594],{},"其他方法来获取标签元素",[14,53596,53597],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,53599,53600],{},[35,53601],{"alt":37,"src":53602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[94,53604,53606],{"id":53605},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,53608,53609],{},"设置修改DOM元素内容有两种方式：",[1141,53611,53612,53615,53618,53621],{},[80,53613,53614],{},"元素.innerText=''",[80,53616,53617],{},"元素.innerHTML=''",[80,53619,53620],{},"不写字符串输出数字也是可以的",[80,53622,53623],{},"元素.innerHtml=1",[22008,53625,53627],{"id":53626},"_3131-innertext","3.1.3.1 innerText",[14,53629,53630],{},[35,53631],{"alt":37,"src":53632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,53634,53635],{},"思路：实现了修改盒子中的内容！",[14,53637,53638],{},"它只显示纯文本，不解析标签",[22008,53640,53642],{"id":53641},"_3132-innerhtml","3.1.3.2 innerHTML",[14,53644,53645],{},[35,53646],{"alt":37,"src":53647},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,53649,53650],{},"相比于innerText，他的强大之处在于可以解析标签",[94,53652,53654],{"id":53653},"_314-操作元素属性","3.1.4 操作元素属性",[22008,53656,53658],{"id":53657},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,53660,53661],{},[35,53662],{"alt":37,"src":53663},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[22008,53665,53667],{"id":53666},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,53669,53670],{},[35,53671],{"alt":37,"src":53672},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,53674,53675],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,53677,53678],{},"div.style.backgroundColor = 'hotpink'",[14,53680,53681],{},"如果按照css的写法，-表示减，就会出错",[14,53683,53684],{},"body元素不需要再获取，直接用就行！！！！！！",[14,53686,53687],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,53689,53690],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,53692,53693],{},[35,53694],{"alt":37,"src":53695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,53697,53698],{},[35,53699],{"alt":37,"src":53700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[77,53702,53703,53706,53709,53712,53715,53718],{},[80,53704,53705],{},"className这个方式就是修改很多样式的时候来使用的！",[80,53707,53708],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[80,53710,53711],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[80,53713,53714],{},"className为属性名，如果还用class的话就导致与关键字冲突",[80,53716,53717],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[80,53719,53720,53721,53726],{},"解析标签的时候就变为了",[51622,53722],{"className":53723},[53724,53725],"nav","box",[53727,53728],"br",{},[14,53730,53731],{},"例子：",[51622,53733],{"className":53734},[53724],[51824,53736,53737],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,53739,53740],{},[35,53741],{"alt":37,"src":53742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,53744,53745],{},"追加和删除类名用classList",[14,53747,53748],{},"常用于类似于开关的操作",[14,53750,53751],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,53753,53754],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[22008,53756,53758],{"id":53757},"_3143-牢记点","3.1.4.3 牢记点",[77,53760,53761,53764,53767,53770,53773,53776,53779,53782,53785],{},[80,53762,53763],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[80,53765,53766],{},"使用style属性操作css时不要忘记引号",[80,53768,53769],{},"使用className或者classList时也不要忘记引号",[80,53771,53772],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[80,53774,53775],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[80,53777,53778],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[80,53780,53781],{},"若： let arr=['1','2',3] arr[0]=1",[80,53783,53784],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[80,53786,53787],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[94,53789,53791],{"id":53790},"_315-操作表单元素","3.1.5 操作表单元素",[77,53793,53794],{},[80,53795,53796],{},"天生的属性",[14,53798,53799],{},[35,53800],{"alt":37,"src":53801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,53803,53804],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,53806,53807],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,53809,53810],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,53812,53813],{},[35,53814],{"alt":37,"src":53815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[114,53817,53819],{"className":50644,"code":53818,"language":50646,"meta":37,"style":37},"在复选框中如果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",[120,53820,53821,53826,53858,53863,53868,53873,53878,53882,53887,53892,53909,53921,53926],{"__ignoreMap":37},[123,53822,53823],{"class":125,"line":126},[123,53824,53825],{"class":133},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[123,53827,53828,53830,53833,53836,53838,53841,53843,53845,53847,53849,53851,53853,53856],{"class":125,"line":45},[123,53829,1044],{"class":133},[123,53831,53832],{"class":51311},"input",[123,53834,53835],{"class":1972}," type",[123,53837,179],{"class":133},[123,53839,53840],{"class":238},"\"checkbox\"",[123,53842,14930],{"class":1972},[123,53844,179],{"class":133},[123,53846,7662],{"class":238},[123,53848,14969],{"class":1972},[123,53850,179],{"class":133},[123,53852,7662],{"class":238},[123,53854,53855],{"class":1972}," checked",[123,53857,51318],{"class":133},[123,53859,53860],{"class":125,"line":1189},[123,53861,53862],{"class":133},"不选的话：\n",[123,53864,53865],{"class":125,"line":1204},[123,53866,53867],{"class":133},"const input = document.querySelector('input')\n",[123,53869,53870],{"class":125,"line":1210},[123,53871,53872],{"class":133},"input.checked=false\n",[123,53874,53875],{"class":125,"line":1224},[123,53876,53877],{"class":133},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[123,53879,53880],{"class":125,"line":1230},[123,53881,2409],{"emptyLinePlaceholder":50},[123,53883,53884],{"class":125,"line":1321},[123,53885,53886],{"class":133},"禁用按钮：\n",[123,53888,53889],{"class":125,"line":1327},[123,53890,53891],{"class":133},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[123,53893,53894,53896,53899,53902,53905,53907],{"class":125,"line":1339},[123,53895,1044],{"class":133},[123,53897,53898],{"class":51311},"button",[123,53900,53901],{"class":1972}," disabled",[123,53903,53904],{"class":133},">点击\u003C\u002F",[123,53906,53898],{"class":51311},[123,53908,51318],{"class":133},[123,53910,53911,53913,53915,53917,53919],{"class":125,"line":1621},[123,53912,1044],{"class":133},[123,53914,53898],{"class":51311},[123,53916,53904],{"class":133},[123,53918,53898],{"class":51311},[123,53920,51318],{"class":133},[123,53922,53923],{"class":125,"line":1626},[123,53924,53925],{"class":133},"const bt = document.querySelector('button')\n",[123,53927,53928],{"class":125,"line":1632},[123,53929,53930],{"class":133},"bt.disabled = false\n",[77,53932,53933],{"start":45},[80,53934,53935],{},"自定义属性",[14,53937,53938],{},[35,53939],{"alt":37,"src":53940},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[114,53942,53944],{"className":53078,"code":53943,"language":53080,"meta":37,"style":37},"\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",[120,53945,53946,53954,53982,54001,54020,54039,54058,54066,54071,54076,54081,54086,54094],{"__ignoreMap":37},[123,53947,53948,53950,53952],{"class":125,"line":126},[123,53949,1044],{"class":133},[123,53951,51811],{"class":51311},[123,53953,51318],{"class":133},[123,53955,53956,53958,53960,53963,53965,53967,53970,53972,53975,53978,53980],{"class":125,"line":45},[123,53957,52155],{"class":133},[123,53959,51622],{"class":51311},[123,53961,53962],{"class":1972}," data-id",[123,53964,179],{"class":133},[123,53966,3687],{"class":238},[123,53968,53969],{"class":1972}," data-spm",[123,53971,179],{"class":133},[123,53973,53974],{"class":238},"\"我不知道\"",[123,53976,53977],{"class":133},">1\u003C\u002F",[123,53979,51622],{"class":51311},[123,53981,51318],{"class":133},[123,53983,53984,53986,53988,53990,53992,53994,53997,53999],{"class":125,"line":1189},[123,53985,52155],{"class":133},[123,53987,51622],{"class":51311},[123,53989,53962],{"class":1972},[123,53991,179],{"class":133},[123,53993,3710],{"class":238},[123,53995,53996],{"class":133},">2\u003C\u002F",[123,53998,51622],{"class":51311},[123,54000,51318],{"class":133},[123,54002,54003,54005,54007,54009,54011,54013,54016,54018],{"class":125,"line":1204},[123,54004,52155],{"class":133},[123,54006,51622],{"class":51311},[123,54008,53962],{"class":1972},[123,54010,179],{"class":133},[123,54012,3723],{"class":238},[123,54014,54015],{"class":133},">3\u003C\u002F",[123,54017,51622],{"class":51311},[123,54019,51318],{"class":133},[123,54021,54022,54024,54026,54028,54030,54032,54035,54037],{"class":125,"line":1210},[123,54023,52155],{"class":133},[123,54025,51622],{"class":51311},[123,54027,53962],{"class":1972},[123,54029,179],{"class":133},[123,54031,3736],{"class":238},[123,54033,54034],{"class":133},">4\u003C\u002F",[123,54036,51622],{"class":51311},[123,54038,51318],{"class":133},[123,54040,54041,54043,54045,54047,54049,54051,54054,54056],{"class":125,"line":1224},[123,54042,52155],{"class":133},[123,54044,51622],{"class":51311},[123,54046,53962],{"class":1972},[123,54048,179],{"class":133},[123,54050,3757],{"class":238},[123,54052,54053],{"class":133},">5\u003C\u002F",[123,54055,51622],{"class":51311},[123,54057,51318],{"class":133},[123,54059,54060,54062,54064],{"class":125,"line":1230},[123,54061,52155],{"class":133},[123,54063,51824],{"class":51311},[123,54065,51318],{"class":133},[123,54067,54068],{"class":125,"line":1321},[123,54069,54070],{"class":133},"    const one = document.querySelector('div')\n",[123,54072,54073],{"class":125,"line":1327},[123,54074,54075],{"class":133},"    console.log(one.dataset)\n",[123,54077,54078],{"class":125,"line":1339},[123,54079,54080],{"class":133},"    console.log(one.dataset.id)\n",[123,54082,54083],{"class":125,"line":1621},[123,54084,54085],{"class":133},"    console.log(one.dataset.spm)\n",[123,54087,54088,54090,54092],{"class":125,"line":1626},[123,54089,52428],{"class":133},[123,54091,51824],{"class":51311},[123,54093,51318],{"class":133},[123,54095,54096,54098,54100],{"class":125,"line":1632},[123,54097,51796],{"class":133},[123,54099,51811],{"class":51311},[123,54101,51318],{"class":133},[14,54103,54104],{},[35,54105],{"alt":37,"src":54106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54108,54109],{},"document.querySelector选择的是第一个对象（元素）",[94,54111,54113],{"id":54112},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54115,54116],{},[35,54117],{"alt":37,"src":54118},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54120,54121],{},[35,54122],{"alt":37,"src":54123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54125,54126],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51824,54128,54129],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54131,54132],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51824,54134,54135],{},"\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,54137,54138],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54140,54141],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54143,54144],{},"单位为毫秒！！！",[14,54146,54147],{},"可以搭配匿名函数来用！！！",[14,54149,54150],{},"setInterval(function () {",[14,54152,54153],{},"alert('两秒执行一次')",[14,54155,54156],{},"}, 2000)",[14,54158,54159],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54161,54162],{},"function fn() {",[14,54164,54165],{},"document.write(1)",[14,54167,1080],{},[14,54169,54170],{},"setInterval(fn, 1000)",[14,54172,54173],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54175,54176],{},"setInterval('fn()', 1000)",[14,54178,54179],{},[35,54180],{"alt":37,"src":54181},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[22008,54183,54185],{"id":54184},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[114,54187,54189],{"className":50644,"code":54188,"language":50646,"meta":37,"style":37},"\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",[120,54190,54191,54201,54215,54219,54227,54241,54261,54273,54281,54285,54293,54330,54335,54340,54345,54353,54361,54383,54391,54396,54418,54423,54428,54439,54444,54464,54472,54487,54502,54513,54518,54528,54538,54542,54551,54555,54563,54571,54575],{"__ignoreMap":37},[123,54192,54193,54195,54197,54199],{"class":125,"line":126},[123,54194,51308],{"class":133},[123,54196,51312],{"class":51311},[123,54198,51315],{"class":1972},[123,54200,51318],{"class":133},[123,54202,54203,54205,54207,54209,54211,54213],{"class":125,"line":45},[123,54204,1044],{"class":133},[123,54206,50646],{"class":51311},[123,54208,51327],{"class":1972},[123,54210,179],{"class":133},[123,54212,51332],{"class":238},[123,54214,51318],{"class":133},[123,54216,54217],{"class":125,"line":1189},[123,54218,2409],{"emptyLinePlaceholder":50},[123,54220,54221,54223,54225],{"class":125,"line":1204},[123,54222,1044],{"class":133},[123,54224,51345],{"class":51311},[123,54226,51318],{"class":133},[123,54228,54229,54231,54233,54235,54237,54239],{"class":125,"line":1210},[123,54230,52155],{"class":133},[123,54232,51355],{"class":51311},[123,54234,51358],{"class":1972},[123,54236,179],{"class":133},[123,54238,51363],{"class":238},[123,54240,51318],{"class":133},[123,54242,54243,54245,54247,54249,54251,54253,54255,54257,54259],{"class":125,"line":1224},[123,54244,52155],{"class":133},[123,54246,51355],{"class":51311},[123,54248,14930],{"class":1972},[123,54250,179],{"class":133},[123,54252,51402],{"class":238},[123,54254,51382],{"class":1972},[123,54256,179],{"class":133},[123,54258,51409],{"class":238},[123,54260,51318],{"class":133},[123,54262,54263,54265,54267,54269,54271],{"class":125,"line":1230},[123,54264,52155],{"class":133},[123,54266,51418],{"class":51311},[123,54268,51421],{"class":133},[123,54270,51418],{"class":51311},[123,54272,51318],{"class":133},[123,54274,54275,54277,54279],{"class":125,"line":1321},[123,54276,51796],{"class":133},[123,54278,51345],{"class":51311},[123,54280,51318],{"class":133},[123,54282,54283],{"class":125,"line":1327},[123,54284,2409],{"emptyLinePlaceholder":50},[123,54286,54287,54289,54291],{"class":125,"line":1339},[123,54288,1044],{"class":133},[123,54290,51811],{"class":51311},[123,54292,51318],{"class":133},[123,54294,54295,54297,54300,54302,54304,54306,54308,54310,54312,54315,54317,54320,54323,54325,54328],{"class":125,"line":1621},[123,54296,52155],{"class":133},[123,54298,54299],{"class":51311},"textarea",[123,54301,14930],{"class":1972},[123,54303,179],{"class":133},[123,54305,7662],{"class":238},[123,54307,14969],{"class":1972},[123,54309,179],{"class":133},[123,54311,7662],{"class":238},[123,54313,54314],{"class":1972}," cols",[123,54316,179],{"class":133},[123,54318,54319],{"class":238},"\"30\"",[123,54321,54322],{"class":1972}," rows",[123,54324,179],{"class":133},[123,54326,54327],{"class":238},"\"10\"",[123,54329,51318],{"class":133},[123,54331,54332],{"class":125,"line":1626},[123,54333,54334],{"class":133},"        用户注册协议\n",[123,54336,54337],{"class":125,"line":1632},[123,54338,54339],{"class":133},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[123,54341,54342],{"class":125,"line":1637},[123,54343,54344],{"class":133},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[123,54346,54347,54349,54351],{"class":125,"line":1651},[123,54348,51787],{"class":133},[123,54350,54299],{"class":51311},[123,54352,51318],{"class":133},[123,54354,54355,54357,54359],{"class":125,"line":1656},[123,54356,52155],{"class":133},[123,54358,53727],{"class":51311},[123,54360,51318],{"class":133},[123,54362,54363,54365,54367,54369,54371,54374,54376,54379,54381],{"class":125,"line":1662},[123,54364,52155],{"class":133},[123,54366,53898],{"class":51311},[123,54368,53497],{"class":1972},[123,54370,179],{"class":133},[123,54372,54373],{"class":238},"\"btn\"",[123,54375,53901],{"class":1972},[123,54377,54378],{"class":133},">我已经阅读用户协议(5)\u003C\u002F",[123,54380,53898],{"class":51311},[123,54382,51318],{"class":133},[123,54384,54385,54387,54389],{"class":125,"line":1683},[123,54386,52155],{"class":133},[123,54388,51824],{"class":51311},[123,54390,51318],{"class":133},[123,54392,54393],{"class":125,"line":1688},[123,54394,54395],{"class":192},"    \u002F\u002F 1. 获取元素\n",[123,54397,54398,54400,54403,54405,54408,54411,54413,54416],{"class":125,"line":1702},[123,54399,11231],{"class":129},[123,54401,54402],{"class":182}," btn",[123,54404,13574],{"class":129},[123,54406,54407],{"class":133}," document.",[123,54409,54410],{"class":1972},"querySelector",[123,54412,134],{"class":133},[123,54414,54415],{"class":238},"'.btn'",[123,54417,140],{"class":133},[123,54419,54420],{"class":125,"line":1707},[123,54421,54422],{"class":192},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[123,54424,54425],{"class":125,"line":1736},[123,54426,54427],{"class":192},"    \u002F\u002F 2. 倒计时\n",[123,54429,54430,54432,54434,54436],{"class":125,"line":1741},[123,54431,52230],{"class":129},[123,54433,9448],{"class":133},[123,54435,179],{"class":129},[123,54437,54438],{"class":182}," 5\n",[123,54440,54441],{"class":125,"line":1758},[123,54442,54443],{"class":192},"    \u002F\u002F 2.1 开启定时器\n",[123,54445,54446,54448,54451,54453,54456,54458,54461],{"class":125,"line":1763},[123,54447,52230],{"class":129},[123,54449,54450],{"class":133}," n ",[123,54452,179],{"class":129},[123,54454,54455],{"class":1972}," setInterval",[123,54457,134],{"class":133},[123,54459,54460],{"class":129},"function",[123,54462,54463],{"class":133}," () {\n",[123,54465,54466,54469],{"class":125,"line":1768},[123,54467,54468],{"class":133},"      i",[123,54470,54471],{"class":129},"--\n",[123,54473,54474,54477,54479,54482,54484],{"class":125,"line":1773},[123,54475,54476],{"class":133},"      btn.innerHTML ",[123,54478,179],{"class":129},[123,54480,54481],{"class":238}," `我已经阅读用户协议(${",[123,54483,575],{"class":133},[123,54485,54486],{"class":238},"})`\n",[123,54488,54489,54492,54495,54498,54500],{"class":125,"line":1787},[123,54490,54491],{"class":129},"      if",[123,54493,54494],{"class":133}," (i ",[123,54496,54497],{"class":129},"===",[123,54499,4102],{"class":182},[123,54501,12452],{"class":133},[123,54503,54504,54507,54510],{"class":125,"line":1792},[123,54505,54506],{"class":1972},"        clearInterval",[123,54508,54509],{"class":133},"(n)  ",[123,54511,54512],{"class":192},"\u002F\u002F 关闭定时器\n",[123,54514,54515],{"class":125,"line":2586},[123,54516,54517],{"class":192},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[123,54519,54520,54523,54525],{"class":125,"line":2600},[123,54521,54522],{"class":133},"        btn.disabled ",[123,54524,179],{"class":129},[123,54526,54527],{"class":182}," false\n",[123,54529,54530,54533,54535],{"class":125,"line":2608},[123,54531,54532],{"class":133},"        btn.innerHTML ",[123,54534,179],{"class":129},[123,54536,54537],{"class":238}," '同意'\n",[123,54539,54540],{"class":125,"line":2613},[123,54541,52409],{"class":133},[123,54543,54544,54547,54549],{"class":125,"line":2619},[123,54545,54546],{"class":133},"    }, ",[123,54548,6420],{"class":182},[123,54550,140],{"class":133},[123,54552,54553],{"class":125,"line":2625},[123,54554,2409],{"emptyLinePlaceholder":50},[123,54556,54557,54559,54561],{"class":125,"line":2630},[123,54558,52428],{"class":133},[123,54560,51824],{"class":51311},[123,54562,51318],{"class":133},[123,54564,54565,54567,54569],{"class":125,"line":7958},[123,54566,51796],{"class":133},[123,54568,51811],{"class":51311},[123,54570,51318],{"class":133},[123,54572,54573],{"class":125,"line":7982},[123,54574,2409],{"emptyLinePlaceholder":50},[123,54576,54577,54579,54581],{"class":125,"line":7987},[123,54578,51796],{"class":133},[123,54580,50646],{"class":51311},[123,54582,51318],{"class":133},[14,54584,54585],{},"不要一直想着用死循环,避免死循环",[14,54587,54588,54591],{},[120,54589,54590],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[22008,54593,54595],{"id":54594},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[77,54597,54598],{},[80,54599,54600],{},"法1",[114,54602,54604],{"className":50644,"code":54603,"language":50646,"meta":37,"style":37},"\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",[120,54605,54606,54616,54630,54634,54642,54656,54676,54688,54696,54702,54713,54724,54728,54732,54739,54751,54755,54759,54766,54778,54792,54805,54819,54823,54827,54834,54845,54856,54867,54879,54891,54903,54907,54911,54919,54929,54942,54954,54967,54971,54975,54982,54992,55004,55016,55027,55038,55048,55060,55072,55076,55080,55089,55101,55113,55141,55154,55158,55162,55169,55180,55184,55192,55200,55204,55212,55226,55241,55265,55273,55288,55301,55309,55330,55342,55354,55366,55378,55390,55402,55414,55423,55431,55439,55447,55459,55482,55501,55520,55539,55558,55577,55596,55616,55620,55640,55659,55679,55700,55711,55728,55738,55748,55758,55763,55768,55773,55778,55803,55816,55820,55843,55847,55855,55863,55871,55875],{"__ignoreMap":37},[123,54607,54608,54610,54612,54614],{"class":125,"line":126},[123,54609,51308],{"class":133},[123,54611,51312],{"class":51311},[123,54613,51315],{"class":1972},[123,54615,51318],{"class":133},[123,54617,54618,54620,54622,54624,54626,54628],{"class":125,"line":45},[123,54619,1044],{"class":133},[123,54621,50646],{"class":51311},[123,54623,51327],{"class":1972},[123,54625,179],{"class":133},[123,54627,51332],{"class":238},[123,54629,51318],{"class":133},[123,54631,54632],{"class":125,"line":1189},[123,54633,2409],{"emptyLinePlaceholder":50},[123,54635,54636,54638,54640],{"class":125,"line":1204},[123,54637,1044],{"class":133},[123,54639,51345],{"class":51311},[123,54641,51318],{"class":133},[123,54643,54644,54646,54648,54650,54652,54654],{"class":125,"line":1210},[123,54645,52155],{"class":133},[123,54647,51355],{"class":51311},[123,54649,51358],{"class":1972},[123,54651,179],{"class":133},[123,54653,51363],{"class":238},[123,54655,51318],{"class":133},[123,54657,54658,54660,54662,54664,54666,54668,54670,54672,54674],{"class":125,"line":1224},[123,54659,52155],{"class":133},[123,54661,51355],{"class":51311},[123,54663,14930],{"class":1972},[123,54665,179],{"class":133},[123,54667,51402],{"class":238},[123,54669,51382],{"class":1972},[123,54671,179],{"class":133},[123,54673,51409],{"class":238},[123,54675,51318],{"class":133},[123,54677,54678,54680,54682,54684,54686],{"class":125,"line":1230},[123,54679,52155],{"class":133},[123,54681,51418],{"class":51311},[123,54683,51421],{"class":133},[123,54685,51418],{"class":51311},[123,54687,51318],{"class":133},[123,54689,54690,54692,54694],{"class":125,"line":1321},[123,54691,52155],{"class":133},[123,54693,5136],{"class":51311},[123,54695,51318],{"class":133},[123,54697,54698,54700],{"class":125,"line":1327},[123,54699,6413],{"class":51311},[123,54701,15582],{"class":133},[123,54703,54704,54707,54709,54711],{"class":125,"line":1339},[123,54705,54706],{"class":182},"      padding",[123,54708,51448],{"class":133},[123,54710,325],{"class":182},[123,54712,1300],{"class":133},[123,54714,54715,54718,54720,54722],{"class":125,"line":1621},[123,54716,54717],{"class":182},"      margin",[123,54719,51448],{"class":133},[123,54721,325],{"class":182},[123,54723,1300],{"class":133},[123,54725,54726],{"class":125,"line":1626},[123,54727,2196],{"class":133},[123,54729,54730],{"class":125,"line":1632},[123,54731,2409],{"emptyLinePlaceholder":50},[123,54733,54734,54737],{"class":125,"line":1637},[123,54735,54736],{"class":51311},"    li",[123,54738,15582],{"class":133},[123,54740,54741,54744,54746,54749],{"class":125,"line":1651},[123,54742,54743],{"class":182},"      list-style",[123,54745,51448],{"class":133},[123,54747,54748],{"class":182},"none",[123,54750,1300],{"class":133},[123,54752,54753],{"class":125,"line":1656},[123,54754,2196],{"class":133},[123,54756,54757],{"class":125,"line":1662},[123,54758,2409],{"emptyLinePlaceholder":50},[123,54760,54761,54764],{"class":125,"line":1683},[123,54762,54763],{"class":1972},"    .box",[123,54765,15582],{"class":133},[123,54767,54768,54771,54773,54776],{"class":125,"line":1688},[123,54769,54770],{"class":182},"      position",[123,54772,51448],{"class":133},[123,54774,54775],{"class":182},"relative",[123,54777,1300],{"class":133},[123,54779,54780,54783,54785,54788,54790],{"class":125,"line":1702},[123,54781,54782],{"class":182},"      width",[123,54784,51448],{"class":133},[123,54786,54787],{"class":182},"976",[123,54789,51503],{"class":129},[123,54791,1300],{"class":133},[123,54793,54794,54797,54799,54801,54803],{"class":125,"line":1707},[123,54795,54796],{"class":182},"      height",[123,54798,51448],{"class":133},[123,54800,1548],{"class":182},[123,54802,51503],{"class":129},[123,54804,1300],{"class":133},[123,54806,54807,54809,54811,54813,54815,54817],{"class":125,"line":1736},[123,54808,54717],{"class":182},[123,54810,51448],{"class":133},[123,54812,445],{"class":182},[123,54814,51503],{"class":129},[123,54816,51567],{"class":182},[123,54818,1300],{"class":133},[123,54820,54821],{"class":125,"line":1741},[123,54822,2196],{"class":133},[123,54824,54825],{"class":125,"line":1758},[123,54826,2409],{"emptyLinePlaceholder":50},[123,54828,54829,54832],{"class":125,"line":1763},[123,54830,54831],{"class":1972},"    .slider-footer",[123,54833,15582],{"class":133},[123,54835,54836,54838,54840,54843],{"class":125,"line":1768},[123,54837,54770],{"class":182},[123,54839,51448],{"class":133},[123,54841,54842],{"class":182},"absolute",[123,54844,1300],{"class":133},[123,54846,54847,54850,54852,54854],{"class":125,"line":1773},[123,54848,54849],{"class":182},"      left",[123,54851,51448],{"class":133},[123,54853,325],{"class":182},[123,54855,1300],{"class":133},[123,54857,54858,54861,54863,54865],{"class":125,"line":1787},[123,54859,54860],{"class":182},"      bottom",[123,54862,51448],{"class":133},[123,54864,325],{"class":182},[123,54866,1300],{"class":133},[123,54868,54869,54871,54873,54875,54877],{"class":125,"line":1792},[123,54870,54782],{"class":182},[123,54872,51448],{"class":133},[123,54874,445],{"class":182},[123,54876,462],{"class":129},[123,54878,1300],{"class":133},[123,54880,54881,54883,54885,54887,54889],{"class":125,"line":2586},[123,54882,54796],{"class":182},[123,54884,51448],{"class":133},[123,54886,709],{"class":182},[123,54888,462],{"class":129},[123,54890,1300],{"class":133},[123,54892,54893,54896,54898,54901],{"class":125,"line":2600},[123,54894,54895],{"class":182},"      background-color",[123,54897,51448],{"class":133},[123,54899,54900],{"class":182},"skyblue",[123,54902,1300],{"class":133},[123,54904,54905],{"class":125,"line":2608},[123,54906,2196],{"class":133},[123,54908,54909],{"class":125,"line":2613},[123,54910,2409],{"emptyLinePlaceholder":50},[123,54912,54913,54915,54917],{"class":125,"line":2619},[123,54914,54831],{"class":1972},[123,54916,6835],{"class":51311},[123,54918,15582],{"class":133},[123,54920,54921,54923,54925,54927],{"class":125,"line":2625},[123,54922,54770],{"class":182},[123,54924,51448],{"class":133},[123,54926,54842],{"class":182},[123,54928,1300],{"class":133},[123,54930,54931,54934,54936,54938,54940],{"class":125,"line":2630},[123,54932,54933],{"class":182},"      font-size",[123,54935,51448],{"class":133},[123,54937,1035],{"class":182},[123,54939,51503],{"class":129},[123,54941,1300],{"class":133},[123,54943,54944,54946,54948,54950,54952],{"class":125,"line":7958},[123,54945,54849],{"class":182},[123,54947,51448],{"class":133},[123,54949,834],{"class":182},[123,54951,51503],{"class":129},[123,54953,1300],{"class":133},[123,54955,54956,54959,54961,54963,54965],{"class":125,"line":7982},[123,54957,54958],{"class":182},"      top",[123,54960,51448],{"class":133},[123,54962,453],{"class":182},[123,54964,51503],{"class":129},[123,54966,1300],{"class":133},[123,54968,54969],{"class":125,"line":7987},[123,54970,2196],{"class":133},[123,54972,54973],{"class":125,"line":7993},[123,54974,2409],{"emptyLinePlaceholder":50},[123,54976,54977,54980],{"class":125,"line":8020},[123,54978,54979],{"class":51311},"    ul",[123,54981,15582],{"class":133},[123,54983,54984,54986,54988,54990],{"class":125,"line":8025},[123,54985,54770],{"class":182},[123,54987,51448],{"class":133},[123,54989,54842],{"class":182},[123,54991,1300],{"class":133},[123,54993,54994,54996,54998,55000,55002],{"class":125,"line":8031},[123,54995,54958],{"class":182},[123,54997,51448],{"class":133},[123,54999,915],{"class":182},[123,55001,51503],{"class":129},[123,55003,1300],{"class":133},[123,55005,55006,55008,55010,55012,55014],{"class":125,"line":8043},[123,55007,54849],{"class":182},[123,55009,51448],{"class":133},[123,55011,834],{"class":182},[123,55013,51503],{"class":129},[123,55015,1300],{"class":133},[123,55017,55018,55021,55023,55025],{"class":125,"line":8055},[123,55019,55020],{"class":182},"      display",[123,55022,51448],{"class":133},[123,55024,51488],{"class":182},[123,55026,1300],{"class":133},[123,55028,55029,55032,55034,55036],{"class":125,"line":8067},[123,55030,55031],{"class":182},"      justify-content",[123,55033,51448],{"class":133},[123,55035,51679],{"class":182},[123,55037,1300],{"class":133},[123,55039,55040,55042,55044,55046],{"class":125,"line":9726},[123,55041,54770],{"class":182},[123,55043,51448],{"class":133},[123,55045,54842],{"class":182},[123,55047,1300],{"class":133},[123,55049,55050,55052,55054,55056,55058],{"class":125,"line":9751},[123,55051,54782],{"class":182},[123,55053,51448],{"class":133},[123,55055,4001],{"class":182},[123,55057,51503],{"class":129},[123,55059,1300],{"class":133},[123,55061,55062,55064,55066,55068,55070],{"class":125,"line":9774},[123,55063,54796],{"class":182},[123,55065,51448],{"class":133},[123,55067,834],{"class":182},[123,55069,51503],{"class":129},[123,55071,1300],{"class":133},[123,55073,55074],{"class":125,"line":9798},[123,55075,2196],{"class":133},[123,55077,55078],{"class":125,"line":9803},[123,55079,2409],{"emptyLinePlaceholder":50},[123,55081,55082,55084,55087],{"class":125,"line":9808},[123,55083,54979],{"class":51311},[123,55085,55086],{"class":51311}," li",[123,55088,15582],{"class":133},[123,55090,55091,55093,55095,55097,55099],{"class":125,"line":9813},[123,55092,54782],{"class":182},[123,55094,51448],{"class":133},[123,55096,834],{"class":182},[123,55098,51503],{"class":129},[123,55100,1300],{"class":133},[123,55102,55103,55105,55107,55109,55111],{"class":125,"line":9822},[123,55104,54796],{"class":182},[123,55106,51448],{"class":133},[123,55108,834],{"class":182},[123,55110,51503],{"class":129},[123,55112,1300],{"class":133},[123,55114,55115,55117,55119,55122,55124,55126,55128,55130,55132,55134,55136,55139],{"class":125,"line":9827},[123,55116,54895],{"class":182},[123,55118,51448],{"class":133},[123,55120,55121],{"class":182},"rgba",[123,55123,134],{"class":133},[123,55125,325],{"class":182},[123,55127,12445],{"class":133},[123,55129,325],{"class":182},[123,55131,12445],{"class":133},[123,55133,325],{"class":182},[123,55135,12445],{"class":133},[123,55137,55138],{"class":182},".4",[123,55140,2728],{"class":133},[123,55142,55143,55146,55148,55150,55152],{"class":125,"line":9833},[123,55144,55145],{"class":182},"      border-radius",[123,55147,51448],{"class":133},[123,55149,580],{"class":182},[123,55151,51503],{"class":129},[123,55153,1300],{"class":133},[123,55155,55156],{"class":125,"line":9854},[123,55157,2196],{"class":133},[123,55159,55160],{"class":125,"line":9860},[123,55161,2409],{"emptyLinePlaceholder":50},[123,55163,55164,55167],{"class":125,"line":9874},[123,55165,55166],{"class":1972},"    .activate",[123,55168,15582],{"class":133},[123,55170,55171,55173,55175,55178],{"class":125,"line":9880},[123,55172,54895],{"class":182},[123,55174,51448],{"class":133},[123,55176,55177],{"class":182},"#f7f7f7",[123,55179,1300],{"class":133},[123,55181,55182],{"class":125,"line":9907},[123,55183,2196],{"class":133},[123,55185,55186,55188,55190],{"class":125,"line":9916},[123,55187,52428],{"class":133},[123,55189,5136],{"class":51311},[123,55191,51318],{"class":133},[123,55193,55194,55196,55198],{"class":125,"line":9922},[123,55195,51796],{"class":133},[123,55197,51345],{"class":51311},[123,55199,51318],{"class":133},[123,55201,55202],{"class":125,"line":9930},[123,55203,2409],{"emptyLinePlaceholder":50},[123,55205,55206,55208,55210],{"class":125,"line":9935},[123,55207,1044],{"class":133},[123,55209,51811],{"class":51311},[123,55211,51318],{"class":133},[123,55213,55214,55216,55218,55220,55222,55224],{"class":125,"line":16614},[123,55215,52155],{"class":133},[123,55217,51622],{"class":51311},[123,55219,53497],{"class":1972},[123,55221,179],{"class":133},[123,55223,53502],{"class":238},[123,55225,51318],{"class":133},[123,55227,55228,55230,55232,55234,55236,55239],{"class":125,"line":16620},[123,55229,51352],{"class":133},[123,55231,51622],{"class":51311},[123,55233,53497],{"class":1972},[123,55235,179],{"class":133},[123,55237,55238],{"class":238},"\"slider-wrapper\"",[123,55240,51318],{"class":133},[123,55242,55243,55246,55248,55251,55253,55256,55259,55261,55263],{"class":125,"line":16643},[123,55244,55245],{"class":133},"      \u003C",[123,55247,35],{"class":51311},[123,55249,55250],{"class":1972}," src",[123,55252,179],{"class":133},[123,55254,55255],{"class":238},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[123,55257,55258],{"class":1972}," alt",[123,55260,179],{"class":133},[123,55262,7662],{"class":238},[123,55264,51318],{"class":133},[123,55266,55267,55269,55271],{"class":125,"line":16649},[123,55268,51787],{"class":133},[123,55270,51622],{"class":51311},[123,55272,51318],{"class":133},[123,55274,55275,55277,55279,55281,55283,55286],{"class":125,"line":16672},[123,55276,51352],{"class":133},[123,55278,51622],{"class":51311},[123,55280,53497],{"class":1972},[123,55282,179],{"class":133},[123,55284,55285],{"class":238},"\"slider-footer\"",[123,55287,51318],{"class":133},[123,55289,55290,55292,55294,55297,55299],{"class":125,"line":16686},[123,55291,55245],{"class":133},[123,55293,14],{"class":51311},[123,55295,55296],{"class":133},">对人类来说会不会太超前了?\u003C\u002F",[123,55298,14],{"class":51311},[123,55300,51318],{"class":133},[123,55302,55303,55305,55307],{"class":125,"line":16706},[123,55304,55245],{"class":133},[123,55306,1141],{"class":51311},[123,55308,51318],{"class":133},[123,55310,55311,55314,55316,55318,55320,55323,55326,55328],{"class":125,"line":16712},[123,55312,55313],{"class":133},"        \u003C",[123,55315,80],{"class":51311},[123,55317,53497],{"class":1972},[123,55319,179],{"class":133},[123,55321,55322],{"class":238},"\"activate\"",[123,55324,55325],{"class":133},">\u003C\u002F",[123,55327,80],{"class":51311},[123,55329,51318],{"class":133},[123,55331,55332,55334,55336,55338,55340],{"class":125,"line":16723},[123,55333,55313],{"class":133},[123,55335,80],{"class":51311},[123,55337,55325],{"class":133},[123,55339,80],{"class":51311},[123,55341,51318],{"class":133},[123,55343,55344,55346,55348,55350,55352],{"class":125,"line":16746},[123,55345,55313],{"class":133},[123,55347,80],{"class":51311},[123,55349,55325],{"class":133},[123,55351,80],{"class":51311},[123,55353,51318],{"class":133},[123,55355,55356,55358,55360,55362,55364],{"class":125,"line":16768},[123,55357,55313],{"class":133},[123,55359,80],{"class":51311},[123,55361,55325],{"class":133},[123,55363,80],{"class":51311},[123,55365,51318],{"class":133},[123,55367,55368,55370,55372,55374,55376],{"class":125,"line":16773},[123,55369,55313],{"class":133},[123,55371,80],{"class":51311},[123,55373,55325],{"class":133},[123,55375,80],{"class":51311},[123,55377,51318],{"class":133},[123,55379,55380,55382,55384,55386,55388],{"class":125,"line":16779},[123,55381,55313],{"class":133},[123,55383,80],{"class":51311},[123,55385,55325],{"class":133},[123,55387,80],{"class":51311},[123,55389,51318],{"class":133},[123,55391,55392,55394,55396,55398,55400],{"class":125,"line":16793},[123,55393,55313],{"class":133},[123,55395,80],{"class":51311},[123,55397,55325],{"class":133},[123,55399,80],{"class":51311},[123,55401,51318],{"class":133},[123,55403,55404,55406,55408,55410,55412],{"class":125,"line":16806},[123,55405,55313],{"class":133},[123,55407,80],{"class":51311},[123,55409,55325],{"class":133},[123,55411,80],{"class":51311},[123,55413,51318],{"class":133},[123,55415,55416,55419,55421],{"class":125,"line":16811},[123,55417,55418],{"class":133},"      \u003C\u002F",[123,55420,1141],{"class":51311},[123,55422,51318],{"class":133},[123,55424,55425,55427,55429],{"class":125,"line":16825},[123,55426,51787],{"class":133},[123,55428,51622],{"class":51311},[123,55430,51318],{"class":133},[123,55432,55433,55435,55437],{"class":125,"line":16830},[123,55434,52428],{"class":133},[123,55436,51622],{"class":51311},[123,55438,51318],{"class":133},[123,55440,55441,55443,55445],{"class":125,"line":16836},[123,55442,52155],{"class":133},[123,55444,51824],{"class":51311},[123,55446,51318],{"class":133},[123,55448,55449,55451,55454,55456],{"class":125,"line":16841},[123,55450,11231],{"class":129},[123,55452,55453],{"class":182}," arrImage",[123,55455,13574],{"class":129},[123,55457,55458],{"class":133}," [\n",[123,55460,55461,55464,55467,55470,55473,55476,55479],{"class":125,"line":16855},[123,55462,55463],{"class":133},"      { url: ",[123,55465,55466],{"class":238},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[123,55468,55469],{"class":133},", title: ",[123,55471,55472],{"class":238},"'对人类来说会不会太超前了?'",[123,55474,55475],{"class":133},", color: ",[123,55477,55478],{"class":238},"'rgba(100,67,68)'",[123,55480,55481],{"class":133}," },\n",[123,55483,55484,55486,55489,55491,55494,55496,55499],{"class":125,"line":16860},[123,55485,55463],{"class":133},[123,55487,55488],{"class":238},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[123,55490,55469],{"class":133},[123,55492,55493],{"class":238},"'开启剑与雪的黑暗传说!'",[123,55495,55475],{"class":133},[123,55497,55498],{"class":238},"'rgba(43,35,26)'",[123,55500,55481],{"class":133},[123,55502,55503,55505,55508,55510,55513,55515,55518],{"class":125,"line":16865},[123,55504,55463],{"class":133},[123,55506,55507],{"class":238},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[123,55509,55469],{"class":133},[123,55511,55512],{"class":238},"'真正的jo厨出现了!'",[123,55514,55475],{"class":133},[123,55516,55517],{"class":238},"'rgba(36,31,33)'",[123,55519,55481],{"class":133},[123,55521,55522,55524,55527,55529,55532,55534,55537],{"class":125,"line":16879},[123,55523,55463],{"class":133},[123,55525,55526],{"class":238},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[123,55528,55469],{"class":133},[123,55530,55531],{"class":238},"'李玉刚:让世界通过b站看到东方大国文化'",[123,55533,55475],{"class":133},[123,55535,55536],{"class":238},"'rgba(139,98,66)'",[123,55538,55481],{"class":133},[123,55540,55541,55543,55546,55548,55551,55553,55556],{"class":125,"line":16891},[123,55542,55463],{"class":133},[123,55544,55545],{"class":238},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[123,55547,55469],{"class":133},[123,55549,55550],{"class":238},"'快来分享你的寒假日常吧'",[123,55552,55475],{"class":133},[123,55554,55555],{"class":238},"'rgba(67,90,92)'",[123,55557,55481],{"class":133},[123,55559,55560,55562,55565,55567,55570,55572,55575],{"class":125,"line":16896},[123,55561,55463],{"class":133},[123,55563,55564],{"class":238},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[123,55566,55469],{"class":133},[123,55568,55569],{"class":238},"'哔哩哔哩小年YEAR'",[123,55571,55475],{"class":133},[123,55573,55574],{"class":238},"'rgba(166,131,143)'",[123,55576,55481],{"class":133},[123,55578,55579,55581,55584,55586,55589,55591,55594],{"class":125,"line":16909},[123,55580,55463],{"class":133},[123,55582,55583],{"class":238},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[123,55585,55469],{"class":133},[123,55587,55588],{"class":238},"'一站式解决你的电脑配置问题'",[123,55590,55475],{"class":133},[123,55592,55593],{"class":238},"'rgba(53,29,25)'",[123,55595,55481],{"class":133},[123,55597,55598,55600,55603,55605,55608,55610,55613],{"class":125,"line":16914},[123,55599,55463],{"class":133},[123,55601,55602],{"class":238},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[123,55604,55469],{"class":133},[123,55606,55607],{"class":238},"'谁不想和小猫咪贴贴呢?'",[123,55609,55475],{"class":133},[123,55611,55612],{"class":238},"'rgba(99,72,114)'",[123,55614,55615],{"class":133}," }\n",[123,55617,55618],{"class":125,"line":16919},[123,55619,53120],{"class":133},[123,55621,55622,55624,55627,55629,55631,55633,55635,55638],{"class":125,"line":16924},[123,55623,11231],{"class":129},[123,55625,55626],{"class":182}," img",[123,55628,13574],{"class":129},[123,55630,54407],{"class":133},[123,55632,54410],{"class":1972},[123,55634,134],{"class":133},[123,55636,55637],{"class":238},"'.slider-wrapper img'",[123,55639,140],{"class":133},[123,55641,55642,55644,55646,55648,55650,55652,55654,55657],{"class":125,"line":16937},[123,55643,11231],{"class":129},[123,55645,6835],{"class":182},[123,55647,13574],{"class":129},[123,55649,54407],{"class":133},[123,55651,54410],{"class":1972},[123,55653,134],{"class":133},[123,55655,55656],{"class":238},"'.slider-footer p'",[123,55658,140],{"class":133},[123,55660,55661,55663,55666,55668,55670,55672,55674,55677],{"class":125,"line":16942},[123,55662,11231],{"class":129},[123,55664,55665],{"class":182}," color",[123,55667,13574],{"class":129},[123,55669,54407],{"class":133},[123,55671,54410],{"class":1972},[123,55673,134],{"class":133},[123,55675,55676],{"class":238},"'.slider-footer'",[123,55678,140],{"class":133},[123,55680,55681,55683,55686,55688,55690,55693,55695,55698],{"class":125,"line":32644},[123,55682,11231],{"class":129},[123,55684,55685],{"class":182}," lis",[123,55687,13574],{"class":129},[123,55689,54407],{"class":133},[123,55691,55692],{"class":1972},"querySelectorAll",[123,55694,134],{"class":133},[123,55696,55697],{"class":238},"'.slider-footer ul li'",[123,55699,140],{"class":133},[123,55701,55702,55704,55706,55708],{"class":125,"line":32650},[123,55703,52230],{"class":129},[123,55705,9448],{"class":133},[123,55707,179],{"class":129},[123,55709,55710],{"class":182}," 1\n",[123,55712,55713,55715,55718,55720,55722,55724,55726],{"class":125,"line":32656},[123,55714,52230],{"class":129},[123,55716,55717],{"class":133}," timer ",[123,55719,179],{"class":129},[123,55721,54455],{"class":1972},[123,55723,134],{"class":133},[123,55725,54460],{"class":129},[123,55727,54463],{"class":133},[123,55729,55730,55733,55735],{"class":125,"line":32662},[123,55731,55732],{"class":133},"      img.src ",[123,55734,179],{"class":129},[123,55736,55737],{"class":133}," arrImage[i].url\n",[123,55739,55740,55743,55745],{"class":125,"line":32668},[123,55741,55742],{"class":133},"      p.innerHTML ",[123,55744,179],{"class":129},[123,55746,55747],{"class":133}," arrImage[i].title\n",[123,55749,55750,55753,55755],{"class":125,"line":32679},[123,55751,55752],{"class":133},"      color.style.backgroundColor ",[123,55754,179],{"class":129},[123,55756,55757],{"class":133}," arrImage[i].color\n",[123,55759,55760],{"class":125,"line":32685},[123,55761,55762],{"class":192},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[123,55764,55765],{"class":125,"line":32705},[123,55766,55767],{"class":192},"      \u002F\u002F li.classList.add('activate')\n",[123,55769,55770],{"class":125,"line":32711},[123,55771,55772],{"class":192},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[123,55774,55775],{"class":125,"line":32722},[123,55776,55777],{"class":192},"      \u002F\u002F lis[i].classList.remove('activate')\n",[123,55779,55780,55783,55785,55787,55790,55793,55796,55798,55801],{"class":125,"line":32728},[123,55781,55782],{"class":133},"      document.",[123,55784,54410],{"class":1972},[123,55786,134],{"class":133},[123,55788,55789],{"class":238},"'.activate'",[123,55791,55792],{"class":133},")?.classList.",[123,55794,55795],{"class":1972},"toggle",[123,55797,134],{"class":133},[123,55799,55800],{"class":238},"'activate'",[123,55802,140],{"class":133},[123,55804,55805,55808,55810,55812,55814],{"class":125,"line":32734},[123,55806,55807],{"class":133},"      lis[i].classList.",[123,55809,5344],{"class":1972},[123,55811,134],{"class":133},[123,55813,55800],{"class":238},[123,55815,140],{"class":133},[123,55817,55818],{"class":125,"line":32740},[123,55819,2409],{"emptyLinePlaceholder":50},[123,55821,55822,55825,55827,55829,55831,55833,55835,55837,55840],{"class":125,"line":32746},[123,55823,55824],{"class":133},"      i ",[123,55826,179],{"class":129},[123,55828,54494],{"class":133},[123,55830,615],{"class":129},[123,55832,25129],{"class":182},[123,55834,13724],{"class":133},[123,55836,462],{"class":129},[123,55838,55839],{"class":133}," arrImage.",[123,55841,55842],{"class":182},"length\n",[123,55844,55845],{"class":125,"line":32752},[123,55846,2409],{"emptyLinePlaceholder":50},[123,55848,55849,55851,55853],{"class":125,"line":32758},[123,55850,54546],{"class":133},[123,55852,6420],{"class":182},[123,55854,140],{"class":133},[123,55856,55857,55859,55861],{"class":125,"line":32764},[123,55858,52428],{"class":133},[123,55860,51824],{"class":51311},[123,55862,51318],{"class":133},[123,55864,55865,55867,55869],{"class":125,"line":32784},[123,55866,51796],{"class":133},[123,55868,51811],{"class":51311},[123,55870,51318],{"class":133},[123,55872,55873],{"class":125,"line":32790},[123,55874,2409],{"emptyLinePlaceholder":50},[123,55876,55877,55879,55881],{"class":125,"line":32806},[123,55878,51796],{"class":133},[123,55880,50646],{"class":51311},[123,55882,51318],{"class":133},[14,55884,55885],{},[35,55886],{"alt":37,"src":55887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,55889,55890],{},"?.就是短路保护,确保输出正常进行",[14,55892,55893],{},"不要忘记取余%,有时候可以用",[14,55895,55896],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[77,55898,55899],{"start":45},[80,55900,55901],{},"法2",[114,55903,55905],{"className":50644,"code":55904,"language":50646,"meta":37,"style":37},"\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",[120,55906,55907,55917,55931,55935,55943,55957,55977,55989,55997,56003,56013,56023,56027,56031,56037,56047,56051,56055,56061,56071,56083,56095,56109,56113,56117,56123,56133,56143,56153,56165,56177,56187,56191,56195,56203,56213,56225,56237,56249,56253,56257,56263,56273,56285,56297,56307,56317,56327,56339,56351,56355,56359,56367,56379,56391,56417,56429,56433,56437,56443,56453,56457,56465,56473,56477,56485,56499,56513,56533,56541,56555,56567,56575,56593,56605,56617,56629,56641,56653,56665,56677,56685,56693,56701,56709,56720,56736,56752,56768,56784,56800,56816,56832,56848,56852,56857,56875,56893,56903,56908,56913,56924,56930,56945,56954,56958,56963,56972,56977,56986,56991,56996,57001,57024,57054,57058,57066,57070,57078,57086,57090],{"__ignoreMap":37},[123,55908,55909,55911,55913,55915],{"class":125,"line":126},[123,55910,51308],{"class":133},[123,55912,51312],{"class":51311},[123,55914,51315],{"class":1972},[123,55916,51318],{"class":133},[123,55918,55919,55921,55923,55925,55927,55929],{"class":125,"line":45},[123,55920,1044],{"class":133},[123,55922,50646],{"class":51311},[123,55924,51327],{"class":1972},[123,55926,179],{"class":133},[123,55928,51332],{"class":238},[123,55930,51318],{"class":133},[123,55932,55933],{"class":125,"line":1189},[123,55934,2409],{"emptyLinePlaceholder":50},[123,55936,55937,55939,55941],{"class":125,"line":1204},[123,55938,1044],{"class":133},[123,55940,51345],{"class":51311},[123,55942,51318],{"class":133},[123,55944,55945,55947,55949,55951,55953,55955],{"class":125,"line":1210},[123,55946,52155],{"class":133},[123,55948,51355],{"class":51311},[123,55950,51358],{"class":1972},[123,55952,179],{"class":133},[123,55954,51363],{"class":238},[123,55956,51318],{"class":133},[123,55958,55959,55961,55963,55965,55967,55969,55971,55973,55975],{"class":125,"line":1224},[123,55960,52155],{"class":133},[123,55962,51355],{"class":51311},[123,55964,14930],{"class":1972},[123,55966,179],{"class":133},[123,55968,51402],{"class":238},[123,55970,51382],{"class":1972},[123,55972,179],{"class":133},[123,55974,51409],{"class":238},[123,55976,51318],{"class":133},[123,55978,55979,55981,55983,55985,55987],{"class":125,"line":1230},[123,55980,52155],{"class":133},[123,55982,51418],{"class":51311},[123,55984,51421],{"class":133},[123,55986,51418],{"class":51311},[123,55988,51318],{"class":133},[123,55990,55991,55993,55995],{"class":125,"line":1321},[123,55992,52155],{"class":133},[123,55994,5136],{"class":51311},[123,55996,51318],{"class":133},[123,55998,55999,56001],{"class":125,"line":1327},[123,56000,6413],{"class":51311},[123,56002,15582],{"class":133},[123,56004,56005,56007,56009,56011],{"class":125,"line":1339},[123,56006,54706],{"class":182},[123,56008,51448],{"class":133},[123,56010,325],{"class":182},[123,56012,1300],{"class":133},[123,56014,56015,56017,56019,56021],{"class":125,"line":1621},[123,56016,54717],{"class":182},[123,56018,51448],{"class":133},[123,56020,325],{"class":182},[123,56022,1300],{"class":133},[123,56024,56025],{"class":125,"line":1626},[123,56026,2196],{"class":133},[123,56028,56029],{"class":125,"line":1632},[123,56030,2409],{"emptyLinePlaceholder":50},[123,56032,56033,56035],{"class":125,"line":1637},[123,56034,54736],{"class":51311},[123,56036,15582],{"class":133},[123,56038,56039,56041,56043,56045],{"class":125,"line":1651},[123,56040,54743],{"class":182},[123,56042,51448],{"class":133},[123,56044,54748],{"class":182},[123,56046,1300],{"class":133},[123,56048,56049],{"class":125,"line":1656},[123,56050,2196],{"class":133},[123,56052,56053],{"class":125,"line":1662},[123,56054,2409],{"emptyLinePlaceholder":50},[123,56056,56057,56059],{"class":125,"line":1683},[123,56058,54763],{"class":1972},[123,56060,15582],{"class":133},[123,56062,56063,56065,56067,56069],{"class":125,"line":1688},[123,56064,54770],{"class":182},[123,56066,51448],{"class":133},[123,56068,54775],{"class":182},[123,56070,1300],{"class":133},[123,56072,56073,56075,56077,56079,56081],{"class":125,"line":1702},[123,56074,54782],{"class":182},[123,56076,51448],{"class":133},[123,56078,54787],{"class":182},[123,56080,51503],{"class":129},[123,56082,1300],{"class":133},[123,56084,56085,56087,56089,56091,56093],{"class":125,"line":1707},[123,56086,54796],{"class":182},[123,56088,51448],{"class":133},[123,56090,1548],{"class":182},[123,56092,51503],{"class":129},[123,56094,1300],{"class":133},[123,56096,56097,56099,56101,56103,56105,56107],{"class":125,"line":1736},[123,56098,54717],{"class":182},[123,56100,51448],{"class":133},[123,56102,445],{"class":182},[123,56104,51503],{"class":129},[123,56106,51567],{"class":182},[123,56108,1300],{"class":133},[123,56110,56111],{"class":125,"line":1741},[123,56112,2196],{"class":133},[123,56114,56115],{"class":125,"line":1758},[123,56116,2409],{"emptyLinePlaceholder":50},[123,56118,56119,56121],{"class":125,"line":1763},[123,56120,54831],{"class":1972},[123,56122,15582],{"class":133},[123,56124,56125,56127,56129,56131],{"class":125,"line":1768},[123,56126,54770],{"class":182},[123,56128,51448],{"class":133},[123,56130,54842],{"class":182},[123,56132,1300],{"class":133},[123,56134,56135,56137,56139,56141],{"class":125,"line":1773},[123,56136,54849],{"class":182},[123,56138,51448],{"class":133},[123,56140,325],{"class":182},[123,56142,1300],{"class":133},[123,56144,56145,56147,56149,56151],{"class":125,"line":1787},[123,56146,54860],{"class":182},[123,56148,51448],{"class":133},[123,56150,325],{"class":182},[123,56152,1300],{"class":133},[123,56154,56155,56157,56159,56161,56163],{"class":125,"line":1792},[123,56156,54782],{"class":182},[123,56158,51448],{"class":133},[123,56160,445],{"class":182},[123,56162,462],{"class":129},[123,56164,1300],{"class":133},[123,56166,56167,56169,56171,56173,56175],{"class":125,"line":2586},[123,56168,54796],{"class":182},[123,56170,51448],{"class":133},[123,56172,709],{"class":182},[123,56174,462],{"class":129},[123,56176,1300],{"class":133},[123,56178,56179,56181,56183,56185],{"class":125,"line":2600},[123,56180,54895],{"class":182},[123,56182,51448],{"class":133},[123,56184,54900],{"class":182},[123,56186,1300],{"class":133},[123,56188,56189],{"class":125,"line":2608},[123,56190,2196],{"class":133},[123,56192,56193],{"class":125,"line":2613},[123,56194,2409],{"emptyLinePlaceholder":50},[123,56196,56197,56199,56201],{"class":125,"line":2619},[123,56198,54831],{"class":1972},[123,56200,6835],{"class":51311},[123,56202,15582],{"class":133},[123,56204,56205,56207,56209,56211],{"class":125,"line":2625},[123,56206,54770],{"class":182},[123,56208,51448],{"class":133},[123,56210,54842],{"class":182},[123,56212,1300],{"class":133},[123,56214,56215,56217,56219,56221,56223],{"class":125,"line":2630},[123,56216,54933],{"class":182},[123,56218,51448],{"class":133},[123,56220,1035],{"class":182},[123,56222,51503],{"class":129},[123,56224,1300],{"class":133},[123,56226,56227,56229,56231,56233,56235],{"class":125,"line":7958},[123,56228,54849],{"class":182},[123,56230,51448],{"class":133},[123,56232,834],{"class":182},[123,56234,51503],{"class":129},[123,56236,1300],{"class":133},[123,56238,56239,56241,56243,56245,56247],{"class":125,"line":7982},[123,56240,54958],{"class":182},[123,56242,51448],{"class":133},[123,56244,453],{"class":182},[123,56246,51503],{"class":129},[123,56248,1300],{"class":133},[123,56250,56251],{"class":125,"line":7987},[123,56252,2196],{"class":133},[123,56254,56255],{"class":125,"line":7993},[123,56256,2409],{"emptyLinePlaceholder":50},[123,56258,56259,56261],{"class":125,"line":8020},[123,56260,54979],{"class":51311},[123,56262,15582],{"class":133},[123,56264,56265,56267,56269,56271],{"class":125,"line":8025},[123,56266,54770],{"class":182},[123,56268,51448],{"class":133},[123,56270,54842],{"class":182},[123,56272,1300],{"class":133},[123,56274,56275,56277,56279,56281,56283],{"class":125,"line":8031},[123,56276,54958],{"class":182},[123,56278,51448],{"class":133},[123,56280,915],{"class":182},[123,56282,51503],{"class":129},[123,56284,1300],{"class":133},[123,56286,56287,56289,56291,56293,56295],{"class":125,"line":8043},[123,56288,54849],{"class":182},[123,56290,51448],{"class":133},[123,56292,834],{"class":182},[123,56294,51503],{"class":129},[123,56296,1300],{"class":133},[123,56298,56299,56301,56303,56305],{"class":125,"line":8055},[123,56300,55020],{"class":182},[123,56302,51448],{"class":133},[123,56304,51488],{"class":182},[123,56306,1300],{"class":133},[123,56308,56309,56311,56313,56315],{"class":125,"line":8067},[123,56310,55031],{"class":182},[123,56312,51448],{"class":133},[123,56314,51679],{"class":182},[123,56316,1300],{"class":133},[123,56318,56319,56321,56323,56325],{"class":125,"line":9726},[123,56320,54770],{"class":182},[123,56322,51448],{"class":133},[123,56324,54842],{"class":182},[123,56326,1300],{"class":133},[123,56328,56329,56331,56333,56335,56337],{"class":125,"line":9751},[123,56330,54782],{"class":182},[123,56332,51448],{"class":133},[123,56334,4001],{"class":182},[123,56336,51503],{"class":129},[123,56338,1300],{"class":133},[123,56340,56341,56343,56345,56347,56349],{"class":125,"line":9774},[123,56342,54796],{"class":182},[123,56344,51448],{"class":133},[123,56346,834],{"class":182},[123,56348,51503],{"class":129},[123,56350,1300],{"class":133},[123,56352,56353],{"class":125,"line":9798},[123,56354,2196],{"class":133},[123,56356,56357],{"class":125,"line":9803},[123,56358,2409],{"emptyLinePlaceholder":50},[123,56360,56361,56363,56365],{"class":125,"line":9808},[123,56362,54979],{"class":51311},[123,56364,55086],{"class":51311},[123,56366,15582],{"class":133},[123,56368,56369,56371,56373,56375,56377],{"class":125,"line":9813},[123,56370,54782],{"class":182},[123,56372,51448],{"class":133},[123,56374,834],{"class":182},[123,56376,51503],{"class":129},[123,56378,1300],{"class":133},[123,56380,56381,56383,56385,56387,56389],{"class":125,"line":9822},[123,56382,54796],{"class":182},[123,56384,51448],{"class":133},[123,56386,834],{"class":182},[123,56388,51503],{"class":129},[123,56390,1300],{"class":133},[123,56392,56393,56395,56397,56399,56401,56403,56405,56407,56409,56411,56413,56415],{"class":125,"line":9827},[123,56394,54895],{"class":182},[123,56396,51448],{"class":133},[123,56398,55121],{"class":182},[123,56400,134],{"class":133},[123,56402,325],{"class":182},[123,56404,12445],{"class":133},[123,56406,325],{"class":182},[123,56408,12445],{"class":133},[123,56410,325],{"class":182},[123,56412,12445],{"class":133},[123,56414,55138],{"class":182},[123,56416,2728],{"class":133},[123,56418,56419,56421,56423,56425,56427],{"class":125,"line":9833},[123,56420,55145],{"class":182},[123,56422,51448],{"class":133},[123,56424,580],{"class":182},[123,56426,51503],{"class":129},[123,56428,1300],{"class":133},[123,56430,56431],{"class":125,"line":9854},[123,56432,2196],{"class":133},[123,56434,56435],{"class":125,"line":9860},[123,56436,2409],{"emptyLinePlaceholder":50},[123,56438,56439,56441],{"class":125,"line":9874},[123,56440,55166],{"class":1972},[123,56442,15582],{"class":133},[123,56444,56445,56447,56449,56451],{"class":125,"line":9880},[123,56446,54895],{"class":182},[123,56448,51448],{"class":133},[123,56450,55177],{"class":182},[123,56452,1300],{"class":133},[123,56454,56455],{"class":125,"line":9907},[123,56456,2196],{"class":133},[123,56458,56459,56461,56463],{"class":125,"line":9916},[123,56460,52428],{"class":133},[123,56462,5136],{"class":51311},[123,56464,51318],{"class":133},[123,56466,56467,56469,56471],{"class":125,"line":9922},[123,56468,51796],{"class":133},[123,56470,51345],{"class":51311},[123,56472,51318],{"class":133},[123,56474,56475],{"class":125,"line":9930},[123,56476,2409],{"emptyLinePlaceholder":50},[123,56478,56479,56481,56483],{"class":125,"line":9935},[123,56480,1044],{"class":133},[123,56482,51811],{"class":51311},[123,56484,51318],{"class":133},[123,56486,56487,56489,56491,56493,56495,56497],{"class":125,"line":16614},[123,56488,52155],{"class":133},[123,56490,51622],{"class":51311},[123,56492,53497],{"class":1972},[123,56494,179],{"class":133},[123,56496,53502],{"class":238},[123,56498,51318],{"class":133},[123,56500,56501,56503,56505,56507,56509,56511],{"class":125,"line":16620},[123,56502,51352],{"class":133},[123,56504,51622],{"class":51311},[123,56506,53497],{"class":1972},[123,56508,179],{"class":133},[123,56510,55238],{"class":238},[123,56512,51318],{"class":133},[123,56514,56515,56517,56519,56521,56523,56525,56527,56529,56531],{"class":125,"line":16643},[123,56516,55245],{"class":133},[123,56518,35],{"class":51311},[123,56520,55250],{"class":1972},[123,56522,179],{"class":133},[123,56524,55255],{"class":238},[123,56526,55258],{"class":1972},[123,56528,179],{"class":133},[123,56530,7662],{"class":238},[123,56532,51318],{"class":133},[123,56534,56535,56537,56539],{"class":125,"line":16649},[123,56536,51787],{"class":133},[123,56538,51622],{"class":51311},[123,56540,51318],{"class":133},[123,56542,56543,56545,56547,56549,56551,56553],{"class":125,"line":16672},[123,56544,51352],{"class":133},[123,56546,51622],{"class":51311},[123,56548,53497],{"class":1972},[123,56550,179],{"class":133},[123,56552,55285],{"class":238},[123,56554,51318],{"class":133},[123,56556,56557,56559,56561,56563,56565],{"class":125,"line":16686},[123,56558,55245],{"class":133},[123,56560,14],{"class":51311},[123,56562,55296],{"class":133},[123,56564,14],{"class":51311},[123,56566,51318],{"class":133},[123,56568,56569,56571,56573],{"class":125,"line":16706},[123,56570,55245],{"class":133},[123,56572,1141],{"class":51311},[123,56574,51318],{"class":133},[123,56576,56577,56579,56581,56583,56585,56587,56589,56591],{"class":125,"line":16712},[123,56578,55313],{"class":133},[123,56580,80],{"class":51311},[123,56582,53497],{"class":1972},[123,56584,179],{"class":133},[123,56586,55322],{"class":238},[123,56588,55325],{"class":133},[123,56590,80],{"class":51311},[123,56592,51318],{"class":133},[123,56594,56595,56597,56599,56601,56603],{"class":125,"line":16723},[123,56596,55313],{"class":133},[123,56598,80],{"class":51311},[123,56600,55325],{"class":133},[123,56602,80],{"class":51311},[123,56604,51318],{"class":133},[123,56606,56607,56609,56611,56613,56615],{"class":125,"line":16746},[123,56608,55313],{"class":133},[123,56610,80],{"class":51311},[123,56612,55325],{"class":133},[123,56614,80],{"class":51311},[123,56616,51318],{"class":133},[123,56618,56619,56621,56623,56625,56627],{"class":125,"line":16768},[123,56620,55313],{"class":133},[123,56622,80],{"class":51311},[123,56624,55325],{"class":133},[123,56626,80],{"class":51311},[123,56628,51318],{"class":133},[123,56630,56631,56633,56635,56637,56639],{"class":125,"line":16773},[123,56632,55313],{"class":133},[123,56634,80],{"class":51311},[123,56636,55325],{"class":133},[123,56638,80],{"class":51311},[123,56640,51318],{"class":133},[123,56642,56643,56645,56647,56649,56651],{"class":125,"line":16779},[123,56644,55313],{"class":133},[123,56646,80],{"class":51311},[123,56648,55325],{"class":133},[123,56650,80],{"class":51311},[123,56652,51318],{"class":133},[123,56654,56655,56657,56659,56661,56663],{"class":125,"line":16793},[123,56656,55313],{"class":133},[123,56658,80],{"class":51311},[123,56660,55325],{"class":133},[123,56662,80],{"class":51311},[123,56664,51318],{"class":133},[123,56666,56667,56669,56671,56673,56675],{"class":125,"line":16806},[123,56668,55313],{"class":133},[123,56670,80],{"class":51311},[123,56672,55325],{"class":133},[123,56674,80],{"class":51311},[123,56676,51318],{"class":133},[123,56678,56679,56681,56683],{"class":125,"line":16811},[123,56680,55418],{"class":133},[123,56682,1141],{"class":51311},[123,56684,51318],{"class":133},[123,56686,56687,56689,56691],{"class":125,"line":16825},[123,56688,51787],{"class":133},[123,56690,51622],{"class":51311},[123,56692,51318],{"class":133},[123,56694,56695,56697,56699],{"class":125,"line":16830},[123,56696,52428],{"class":133},[123,56698,51622],{"class":51311},[123,56700,51318],{"class":133},[123,56702,56703,56705,56707],{"class":125,"line":16836},[123,56704,52155],{"class":133},[123,56706,51824],{"class":51311},[123,56708,51318],{"class":133},[123,56710,56711,56713,56716,56718],{"class":125,"line":16841},[123,56712,11231],{"class":129},[123,56714,56715],{"class":182}," sliderData",[123,56717,13574],{"class":129},[123,56719,55458],{"class":133},[123,56721,56722,56724,56726,56728,56730,56732,56734],{"class":125,"line":16855},[123,56723,55463],{"class":133},[123,56725,55466],{"class":238},[123,56727,55469],{"class":133},[123,56729,55472],{"class":238},[123,56731,55475],{"class":133},[123,56733,55478],{"class":238},[123,56735,55481],{"class":133},[123,56737,56738,56740,56742,56744,56746,56748,56750],{"class":125,"line":16860},[123,56739,55463],{"class":133},[123,56741,55488],{"class":238},[123,56743,55469],{"class":133},[123,56745,55493],{"class":238},[123,56747,55475],{"class":133},[123,56749,55498],{"class":238},[123,56751,55481],{"class":133},[123,56753,56754,56756,56758,56760,56762,56764,56766],{"class":125,"line":16865},[123,56755,55463],{"class":133},[123,56757,55507],{"class":238},[123,56759,55469],{"class":133},[123,56761,55512],{"class":238},[123,56763,55475],{"class":133},[123,56765,55517],{"class":238},[123,56767,55481],{"class":133},[123,56769,56770,56772,56774,56776,56778,56780,56782],{"class":125,"line":16879},[123,56771,55463],{"class":133},[123,56773,55526],{"class":238},[123,56775,55469],{"class":133},[123,56777,55531],{"class":238},[123,56779,55475],{"class":133},[123,56781,55536],{"class":238},[123,56783,55481],{"class":133},[123,56785,56786,56788,56790,56792,56794,56796,56798],{"class":125,"line":16891},[123,56787,55463],{"class":133},[123,56789,55545],{"class":238},[123,56791,55469],{"class":133},[123,56793,55550],{"class":238},[123,56795,55475],{"class":133},[123,56797,55555],{"class":238},[123,56799,55481],{"class":133},[123,56801,56802,56804,56806,56808,56810,56812,56814],{"class":125,"line":16896},[123,56803,55463],{"class":133},[123,56805,55564],{"class":238},[123,56807,55469],{"class":133},[123,56809,55569],{"class":238},[123,56811,55475],{"class":133},[123,56813,55574],{"class":238},[123,56815,55481],{"class":133},[123,56817,56818,56820,56822,56824,56826,56828,56830],{"class":125,"line":16909},[123,56819,55463],{"class":133},[123,56821,55583],{"class":238},[123,56823,55469],{"class":133},[123,56825,55588],{"class":238},[123,56827,55475],{"class":133},[123,56829,55593],{"class":238},[123,56831,55481],{"class":133},[123,56833,56834,56836,56838,56840,56842,56844,56846],{"class":125,"line":16914},[123,56835,55463],{"class":133},[123,56837,55602],{"class":238},[123,56839,55469],{"class":133},[123,56841,55607],{"class":238},[123,56843,55475],{"class":133},[123,56845,55612],{"class":238},[123,56847,55615],{"class":133},[123,56849,56850],{"class":125,"line":16919},[123,56851,53120],{"class":133},[123,56853,56854],{"class":125,"line":16924},[123,56855,56856],{"class":192},"    \u002F\u002F 1.获取元素\n",[123,56858,56859,56861,56863,56865,56867,56869,56871,56873],{"class":125,"line":16937},[123,56860,11231],{"class":129},[123,56862,55626],{"class":182},[123,56864,13574],{"class":129},[123,56866,54407],{"class":133},[123,56868,54410],{"class":1972},[123,56870,134],{"class":133},[123,56872,55637],{"class":238},[123,56874,140],{"class":133},[123,56876,56877,56879,56881,56883,56885,56887,56889,56891],{"class":125,"line":16942},[123,56878,11231],{"class":129},[123,56880,6835],{"class":182},[123,56882,13574],{"class":129},[123,56884,54407],{"class":133},[123,56886,54410],{"class":1972},[123,56888,134],{"class":133},[123,56890,55656],{"class":238},[123,56892,140],{"class":133},[123,56894,56895,56897,56899,56901],{"class":125,"line":32644},[123,56896,52230],{"class":129},[123,56898,9448],{"class":133},[123,56900,179],{"class":129},[123,56902,47344],{"class":182},[123,56904,56905],{"class":125,"line":32650},[123,56906,56907],{"class":192},"    \u002F\u002F 2.开启定时器\n",[123,56909,56910],{"class":125,"line":32656},[123,56911,56912],{"class":192},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[123,56914,56915,56918,56920,56922],{"class":125,"line":32662},[123,56916,56917],{"class":1972},"    setInterval",[123,56919,134],{"class":133},[123,56921,54460],{"class":129},[123,56923,54463],{"class":133},[123,56925,56926,56928],{"class":125,"line":32668},[123,56927,54468],{"class":133},[123,56929,2711],{"class":129},[123,56931,56932,56934,56936,56938,56941,56943],{"class":125,"line":32679},[123,56933,54491],{"class":129},[123,56935,54494],{"class":133},[123,56937,1719],{"class":129},[123,56939,56940],{"class":133}," sliderData.",[123,56942,51979],{"class":182},[123,56944,12452],{"class":133},[123,56946,56947,56950,56952],{"class":125,"line":32685},[123,56948,56949],{"class":133},"        i ",[123,56951,179],{"class":129},[123,56953,47344],{"class":182},[123,56955,56956],{"class":125,"line":32705},[123,56957,52409],{"class":133},[123,56959,56960],{"class":125,"line":32711},[123,56961,56962],{"class":192},"      \u002F\u002F 更换图片路径\n",[123,56964,56965,56967,56969],{"class":125,"line":32722},[123,56966,55732],{"class":133},[123,56968,179],{"class":129},[123,56970,56971],{"class":133}," sliderData[i].url\n",[123,56973,56974],{"class":125,"line":32728},[123,56975,56976],{"class":192},"      \u002F\u002F 把文字写到p里面\n",[123,56978,56979,56981,56983],{"class":125,"line":32734},[123,56980,55742],{"class":133},[123,56982,179],{"class":129},[123,56984,56985],{"class":133}," sliderData[i].title\n",[123,56987,56988],{"class":125,"line":32740},[123,56989,56990],{"class":192},"      \u002F\u002F 小圆点\n",[123,56992,56993],{"class":125,"line":32746},[123,56994,56995],{"class":192},"      \u002F\u002F 先删除以前的active\n",[123,56997,56998],{"class":125,"line":32752},[123,56999,57000],{"class":192},"      \u002F\u002F 只让当前li添加active\n",[123,57002,57003,57005,57007,57009,57012,57015,57018,57020,57022],{"class":125,"line":32758},[123,57004,55782],{"class":133},[123,57006,54410],{"class":1972},[123,57008,134],{"class":133},[123,57010,57011],{"class":238},"'.slider-footer .activate'",[123,57013,57014],{"class":133},").classList.",[123,57016,57017],{"class":1972},"remove",[123,57019,134],{"class":133},[123,57021,55800],{"class":238},[123,57023,140],{"class":133},[123,57025,57026,57028,57030,57032,57035,57037,57039,57041,57044,57046,57048,57050,57052],{"class":125,"line":32764},[123,57027,55782],{"class":133},[123,57029,54410],{"class":1972},[123,57031,134],{"class":133},[123,57033,57034],{"class":238},"`.slider-footer ul li:nth-child(${",[123,57036,575],{"class":133},[123,57038,45577],{"class":129},[123,57040,25129],{"class":182},[123,57042,57043],{"class":238},"})`",[123,57045,57014],{"class":133},[123,57047,5344],{"class":1972},[123,57049,134],{"class":133},[123,57051,55800],{"class":238},[123,57053,140],{"class":133},[123,57055,57056],{"class":125,"line":32784},[123,57057,2409],{"emptyLinePlaceholder":50},[123,57059,57060,57062,57064],{"class":125,"line":32790},[123,57061,54546],{"class":133},[123,57063,6420],{"class":182},[123,57065,140],{"class":133},[123,57067,57068],{"class":125,"line":32806},[123,57069,2409],{"emptyLinePlaceholder":50},[123,57071,57072,57074,57076],{"class":125,"line":32812},[123,57073,52428],{"class":133},[123,57075,51824],{"class":51311},[123,57077,51318],{"class":133},[123,57079,57080,57082,57084],{"class":125,"line":32826},[123,57081,51796],{"class":133},[123,57083,51811],{"class":51311},[123,57085,51318],{"class":133},[123,57087,57088],{"class":125,"line":32832},[123,57089,2409],{"emptyLinePlaceholder":50},[123,57091,57092,57094,57096],{"class":125,"line":32847},[123,57093,51796],{"class":133},[123,57095,50646],{"class":51311},[123,57097,51318],{"class":133},[94,57099,57101],{"id":57100},"_317-重要知识点","3.1.7 重要知识点",[14,57103,57104,57105],{},"浏览器在渲染文本时， ",[283,57106,57107],{},"没有空格或换行符就没有“断行点”",[14,57109,57110],{},[35,57111],{"alt":37,"src":57112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57114,57115],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57117,57118],{},[35,57119],{"alt":37,"src":57120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57122,57123],{},[35,57124],{"alt":37,"src":57125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[65,57127,57129],{"id":57128},"_32-dom事件基础","3.2 DOM事件基础",[94,57131,57133],{"id":57132},"_321-事件监听","3.2.1 事件监听",[14,57135,57136],{},[35,57137],{"alt":37,"src":57138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57140,57141],{},"事件监听有响应的发生",[14,57143,57144],{},[35,57145],{"alt":37,"src":57146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57148,57149],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57151,57152],{},"对于有名函数,要执行的函数名后边不要加()",[94,57154,57156],{"id":57155},"_322-随机点名案例","3.2.2 随机点名案例",[114,57158,57160],{"className":50644,"code":57159,"language":50646,"meta":37,"style":37},"\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",[120,57161,57162,57172,57186,57190,57198,57212,57232,57244,57252,57258,57268,57278,57282,57286,57293,57304,57308,57312,57318,57330,57344,57354,57366,57379,57383,57387,57394,57398,57411,57423,57435,57439,57443,57447,57454,57464,57468,57472,57481,57493,57505,57520,57524,57532,57540,57544,57552,57565,57579,57592,57612,57620,57635,57655,57675,57683,57687,57695,57700,57736,57756,57761,57780,57785,57796,57801,57812,57817,57836,57851,57856,57882,57892,57901,57906,57922,57927,57932,57937,57952,57956,57960,57965,57984,58001,58009,58014,58029,58033,58037,58045,58053,58057],{"__ignoreMap":37},[123,57163,57164,57166,57168,57170],{"class":125,"line":126},[123,57165,51308],{"class":133},[123,57167,51312],{"class":51311},[123,57169,51315],{"class":1972},[123,57171,51318],{"class":133},[123,57173,57174,57176,57178,57180,57182,57184],{"class":125,"line":45},[123,57175,1044],{"class":133},[123,57177,50646],{"class":51311},[123,57179,51327],{"class":1972},[123,57181,179],{"class":133},[123,57183,51332],{"class":238},[123,57185,51318],{"class":133},[123,57187,57188],{"class":125,"line":1189},[123,57189,2409],{"emptyLinePlaceholder":50},[123,57191,57192,57194,57196],{"class":125,"line":1204},[123,57193,1044],{"class":133},[123,57195,51345],{"class":51311},[123,57197,51318],{"class":133},[123,57199,57200,57202,57204,57206,57208,57210],{"class":125,"line":1210},[123,57201,52155],{"class":133},[123,57203,51355],{"class":51311},[123,57205,51358],{"class":1972},[123,57207,179],{"class":133},[123,57209,51363],{"class":238},[123,57211,51318],{"class":133},[123,57213,57214,57216,57218,57220,57222,57224,57226,57228,57230],{"class":125,"line":1224},[123,57215,52155],{"class":133},[123,57217,51355],{"class":51311},[123,57219,14930],{"class":1972},[123,57221,179],{"class":133},[123,57223,51402],{"class":238},[123,57225,51382],{"class":1972},[123,57227,179],{"class":133},[123,57229,51409],{"class":238},[123,57231,51318],{"class":133},[123,57233,57234,57236,57238,57240,57242],{"class":125,"line":1230},[123,57235,52155],{"class":133},[123,57237,51418],{"class":51311},[123,57239,51421],{"class":133},[123,57241,51418],{"class":51311},[123,57243,51318],{"class":133},[123,57245,57246,57248,57250],{"class":125,"line":1321},[123,57247,52155],{"class":133},[123,57249,5136],{"class":51311},[123,57251,51318],{"class":133},[123,57253,57254,57256],{"class":125,"line":1327},[123,57255,6413],{"class":51311},[123,57257,15582],{"class":133},[123,57259,57260,57262,57264,57266],{"class":125,"line":1339},[123,57261,54717],{"class":182},[123,57263,51448],{"class":133},[123,57265,325],{"class":182},[123,57267,1300],{"class":133},[123,57269,57270,57272,57274,57276],{"class":125,"line":1621},[123,57271,54706],{"class":182},[123,57273,51448],{"class":133},[123,57275,325],{"class":182},[123,57277,1300],{"class":133},[123,57279,57280],{"class":125,"line":1626},[123,57281,2196],{"class":133},[123,57283,57284],{"class":125,"line":1632},[123,57285,2409],{"emptyLinePlaceholder":50},[123,57287,57288,57291],{"class":125,"line":1637},[123,57289,57290],{"class":51311},"    h2",[123,57292,15582],{"class":133},[123,57294,57295,57298,57300,57302],{"class":125,"line":1651},[123,57296,57297],{"class":182},"      text-align",[123,57299,51448],{"class":133},[123,57301,51603],{"class":182},[123,57303,1300],{"class":133},[123,57305,57306],{"class":125,"line":1656},[123,57307,2196],{"class":133},[123,57309,57310],{"class":125,"line":1662},[123,57311,2409],{"emptyLinePlaceholder":50},[123,57313,57314,57316],{"class":125,"line":1683},[123,57315,54763],{"class":1972},[123,57317,15582],{"class":133},[123,57319,57320,57322,57324,57326,57328],{"class":125,"line":1688},[123,57321,54782],{"class":182},[123,57323,51448],{"class":133},[123,57325,1548],{"class":182},[123,57327,51503],{"class":129},[123,57329,1300],{"class":133},[123,57331,57332,57334,57336,57338,57340,57342],{"class":125,"line":1702},[123,57333,54717],{"class":182},[123,57335,51448],{"class":133},[123,57337,790],{"class":182},[123,57339,51503],{"class":129},[123,57341,51567],{"class":182},[123,57343,1300],{"class":133},[123,57345,57346,57348,57350,57352],{"class":125,"line":1707},[123,57347,55020],{"class":182},[123,57349,51448],{"class":133},[123,57351,51488],{"class":182},[123,57353,1300],{"class":133},[123,57355,57356,57358,57360,57362,57364],{"class":125,"line":1736},[123,57357,54933],{"class":182},[123,57359,51448],{"class":133},[123,57361,959],{"class":182},[123,57363,51503],{"class":129},[123,57365,1300],{"class":133},[123,57367,57368,57371,57373,57375,57377],{"class":125,"line":1741},[123,57369,57370],{"class":182},"      line-height",[123,57372,51448],{"class":133},[123,57374,535],{"class":182},[123,57376,51503],{"class":129},[123,57378,1300],{"class":133},[123,57380,57381],{"class":125,"line":1758},[123,57382,2196],{"class":133},[123,57384,57385],{"class":125,"line":1763},[123,57386,2409],{"emptyLinePlaceholder":50},[123,57388,57389,57392],{"class":125,"line":1768},[123,57390,57391],{"class":1972},"    .qs",[123,57393,15582],{"class":133},[123,57395,57396],{"class":125,"line":1773},[123,57397,2409],{"emptyLinePlaceholder":50},[123,57399,57400,57402,57404,57407,57409],{"class":125,"line":1787},[123,57401,54782],{"class":182},[123,57403,51448],{"class":133},[123,57405,57406],{"class":182},"450",[123,57408,51503],{"class":129},[123,57410,1300],{"class":133},[123,57412,57413,57415,57417,57419,57421],{"class":125,"line":1792},[123,57414,54796],{"class":182},[123,57416,51448],{"class":133},[123,57418,535],{"class":182},[123,57420,51503],{"class":129},[123,57422,1300],{"class":133},[123,57424,57425,57428,57430,57433],{"class":125,"line":2586},[123,57426,57427],{"class":182},"      color",[123,57429,51448],{"class":133},[123,57431,57432],{"class":182},"red",[123,57434,1300],{"class":133},[123,57436,57437],{"class":125,"line":2600},[123,57438,2409],{"emptyLinePlaceholder":50},[123,57440,57441],{"class":125,"line":2608},[123,57442,2196],{"class":133},[123,57444,57445],{"class":125,"line":2613},[123,57446,2409],{"emptyLinePlaceholder":50},[123,57448,57449,57452],{"class":125,"line":2619},[123,57450,57451],{"class":1972},"    .btns",[123,57453,15582],{"class":133},[123,57455,57456,57458,57460,57462],{"class":125,"line":2625},[123,57457,57297],{"class":182},[123,57459,51448],{"class":133},[123,57461,51603],{"class":182},[123,57463,1300],{"class":133},[123,57465,57466],{"class":125,"line":2630},[123,57467,2196],{"class":133},[123,57469,57470],{"class":125,"line":7958},[123,57471,2409],{"emptyLinePlaceholder":50},[123,57473,57474,57476,57479],{"class":125,"line":7982},[123,57475,57451],{"class":1972},[123,57477,57478],{"class":51311}," button",[123,57480,15582],{"class":133},[123,57482,57483,57485,57487,57489,57491],{"class":125,"line":7987},[123,57484,54782],{"class":182},[123,57486,51448],{"class":133},[123,57488,951],{"class":182},[123,57490,51503],{"class":129},[123,57492,1300],{"class":133},[123,57494,57495,57497,57499,57501,57503],{"class":125,"line":7993},[123,57496,54796],{"class":182},[123,57498,51448],{"class":133},[123,57500,407],{"class":182},[123,57502,51503],{"class":129},[123,57504,1300],{"class":133},[123,57506,57507,57509,57511,57513,57516,57518],{"class":125,"line":8020},[123,57508,54717],{"class":182},[123,57510,51448],{"class":133},[123,57512,325],{"class":182},[123,57514,57515],{"class":182}," 50",[123,57517,51503],{"class":129},[123,57519,1300],{"class":133},[123,57521,57522],{"class":125,"line":8025},[123,57523,2196],{"class":133},[123,57525,57526,57528,57530],{"class":125,"line":8031},[123,57527,52428],{"class":133},[123,57529,5136],{"class":51311},[123,57531,51318],{"class":133},[123,57533,57534,57536,57538],{"class":125,"line":8043},[123,57535,51796],{"class":133},[123,57537,51345],{"class":51311},[123,57539,51318],{"class":133},[123,57541,57542],{"class":125,"line":8055},[123,57543,2409],{"emptyLinePlaceholder":50},[123,57545,57546,57548,57550],{"class":125,"line":8067},[123,57547,1044],{"class":133},[123,57549,51811],{"class":51311},[123,57551,51318],{"class":133},[123,57553,57554,57556,57558,57561,57563],{"class":125,"line":9726},[123,57555,52155],{"class":133},[123,57557,65],{"class":51311},[123,57559,57560],{"class":133},">随机点名\u003C\u002F",[123,57562,65],{"class":51311},[123,57564,51318],{"class":133},[123,57566,57567,57569,57571,57573,57575,57577],{"class":125,"line":9751},[123,57568,52155],{"class":133},[123,57570,51622],{"class":51311},[123,57572,53497],{"class":1972},[123,57574,179],{"class":133},[123,57576,53502],{"class":238},[123,57578,51318],{"class":133},[123,57580,57581,57583,57585,57588,57590],{"class":125,"line":9774},[123,57582,51352],{"class":133},[123,57584,123],{"class":51311},[123,57586,57587],{"class":133},">名字是：\u003C\u002F",[123,57589,123],{"class":51311},[123,57591,51318],{"class":133},[123,57593,57594,57596,57598,57600,57602,57605,57608,57610],{"class":125,"line":9798},[123,57595,51352],{"class":133},[123,57597,51622],{"class":51311},[123,57599,53497],{"class":1972},[123,57601,179],{"class":133},[123,57603,57604],{"class":238},"\"qs\"",[123,57606,57607],{"class":133},">这里显示姓名\u003C\u002F",[123,57609,51622],{"class":51311},[123,57611,51318],{"class":133},[123,57613,57614,57616,57618],{"class":125,"line":9803},[123,57615,52428],{"class":133},[123,57617,51622],{"class":51311},[123,57619,51318],{"class":133},[123,57621,57622,57624,57626,57628,57630,57633],{"class":125,"line":9808},[123,57623,52155],{"class":133},[123,57625,51622],{"class":51311},[123,57627,53497],{"class":1972},[123,57629,179],{"class":133},[123,57631,57632],{"class":238},"\"btns\"",[123,57634,51318],{"class":133},[123,57636,57637,57639,57641,57643,57645,57648,57651,57653],{"class":125,"line":9813},[123,57638,51352],{"class":133},[123,57640,53898],{"class":51311},[123,57642,53497],{"class":1972},[123,57644,179],{"class":133},[123,57646,57647],{"class":238},"\"start\"",[123,57649,57650],{"class":133},">开始\u003C\u002F",[123,57652,53898],{"class":51311},[123,57654,51318],{"class":133},[123,57656,57657,57659,57661,57663,57665,57668,57671,57673],{"class":125,"line":9822},[123,57658,51352],{"class":133},[123,57660,53898],{"class":51311},[123,57662,53497],{"class":1972},[123,57664,179],{"class":133},[123,57666,57667],{"class":238},"\"end\"",[123,57669,57670],{"class":133},">结束\u003C\u002F",[123,57672,53898],{"class":51311},[123,57674,51318],{"class":133},[123,57676,57677,57679,57681],{"class":125,"line":9827},[123,57678,52428],{"class":133},[123,57680,51622],{"class":51311},[123,57682,51318],{"class":133},[123,57684,57685],{"class":125,"line":9833},[123,57686,2409],{"emptyLinePlaceholder":50},[123,57688,57689,57691,57693],{"class":125,"line":9854},[123,57690,52155],{"class":133},[123,57692,51824],{"class":51311},[123,57694,51318],{"class":133},[123,57696,57697],{"class":125,"line":9860},[123,57698,57699],{"class":192},"    \u002F\u002F 数据数组\n",[123,57701,57702,57704,57707,57709,57711,57714,57716,57719,57721,57724,57726,57729,57731,57734],{"class":125,"line":9874},[123,57703,11231],{"class":129},[123,57705,57706],{"class":182}," arr",[123,57708,13574],{"class":129},[123,57710,52237],{"class":133},[123,57712,57713],{"class":238},"'马超'",[123,57715,12445],{"class":133},[123,57717,57718],{"class":238},"'黄忠'",[123,57720,12445],{"class":133},[123,57722,57723],{"class":238},"'赵云'",[123,57725,12445],{"class":133},[123,57727,57728],{"class":238},"'关羽'",[123,57730,12445],{"class":133},[123,57732,57733],{"class":238},"'张飞'",[123,57735,33257],{"class":133},[123,57737,57738,57740,57743,57745,57747,57749,57751,57754],{"class":125,"line":9880},[123,57739,11231],{"class":129},[123,57741,57742],{"class":182}," qs",[123,57744,13574],{"class":129},[123,57746,54407],{"class":133},[123,57748,54410],{"class":1972},[123,57750,134],{"class":133},[123,57752,57753],{"class":238},"'.qs'",[123,57755,140],{"class":133},[123,57757,57758],{"class":125,"line":9907},[123,57759,57760],{"class":192},"    \u002F\u002F 1.业务1.开始按钮模块\n",[123,57762,57763,57765,57767,57769,57771,57773,57775,57778],{"class":125,"line":9916},[123,57764,11231],{"class":129},[123,57766,4193],{"class":182},[123,57768,13574],{"class":129},[123,57770,54407],{"class":133},[123,57772,54410],{"class":1972},[123,57774,134],{"class":133},[123,57776,57777],{"class":238},"'.start'",[123,57779,140],{"class":133},[123,57781,57782],{"class":125,"line":9922},[123,57783,57784],{"class":192},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[123,57786,57787,57789,57792,57794],{"class":125,"line":9930},[123,57788,52230],{"class":129},[123,57790,57791],{"class":133}," timerId ",[123,57793,179],{"class":129},[123,57795,47344],{"class":182},[123,57797,57798],{"class":125,"line":9935},[123,57799,57800],{"class":192},"    \u002F\u002F 随机号要全局变量\n",[123,57802,57803,57805,57808,57810],{"class":125,"line":16614},[123,57804,52230],{"class":129},[123,57806,57807],{"class":133}," random ",[123,57809,179],{"class":129},[123,57811,47344],{"class":182},[123,57813,57814],{"class":125,"line":16620},[123,57815,57816],{"class":192},"    \u002F\u002F 1.1 添加点击事件\n",[123,57818,57819,57822,57825,57827,57830,57832,57834],{"class":125,"line":16643},[123,57820,57821],{"class":133},"    start.",[123,57823,57824],{"class":1972},"addEventListener",[123,57826,134],{"class":133},[123,57828,57829],{"class":238},"'click'",[123,57831,12445],{"class":133},[123,57833,54460],{"class":129},[123,57835,54463],{"class":133},[123,57837,57838,57841,57843,57845,57847,57849],{"class":125,"line":16649},[123,57839,57840],{"class":133},"      timerId ",[123,57842,179],{"class":129},[123,57844,54455],{"class":1972},[123,57846,134],{"class":133},[123,57848,54460],{"class":129},[123,57850,54463],{"class":133},[123,57852,57853],{"class":125,"line":16672},[123,57854,57855],{"class":192},"        \u002F\u002F 随机数\n",[123,57857,57858,57861,57863,57866,57869,57872,57874,57876,57878,57880],{"class":125,"line":16686},[123,57859,57860],{"class":133},"        random ",[123,57862,179],{"class":129},[123,57864,57865],{"class":1972}," parseInt",[123,57867,57868],{"class":133},"(Math.",[123,57870,57871],{"class":1972},"random",[123,57873,13060],{"class":133},[123,57875,589],{"class":129},[123,57877,51976],{"class":133},[123,57879,51979],{"class":182},[123,57881,140],{"class":133},[123,57883,57884,57887,57889],{"class":125,"line":16706},[123,57885,57886],{"class":133},"        qs.innerHTML ",[123,57888,179],{"class":129},[123,57890,57891],{"class":133}," arr[random]\n",[123,57893,57894,57897,57899],{"class":125,"line":16712},[123,57895,57896],{"class":133},"      }, ",[123,57898,407],{"class":182},[123,57900,140],{"class":133},[123,57902,57903],{"class":125,"line":16723},[123,57904,57905],{"class":192},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[123,57907,57908,57910,57913,57915,57918,57920],{"class":125,"line":16746},[123,57909,54491],{"class":129},[123,57911,57912],{"class":133}," (arr.",[123,57914,51979],{"class":182},[123,57916,57917],{"class":129}," ===",[123,57919,25129],{"class":182},[123,57921,12452],{"class":133},[123,57923,57924],{"class":125,"line":16768},[123,57925,57926],{"class":192},"        \u002F\u002F start.disabled = true\n",[123,57928,57929],{"class":125,"line":16773},[123,57930,57931],{"class":192},"        \u002F\u002F end.disabled = true\n",[123,57933,57934],{"class":125,"line":16779},[123,57935,57936],{"class":192},"        \u002F\u002F 可以合起来写\n",[123,57938,57939,57942,57944,57947,57949],{"class":125,"line":16793},[123,57940,57941],{"class":133},"        start.disabled ",[123,57943,179],{"class":129},[123,57945,57946],{"class":133}," end.disabled ",[123,57948,179],{"class":129},[123,57950,57951],{"class":182}," true\n",[123,57953,57954],{"class":125,"line":16806},[123,57955,52409],{"class":133},[123,57957,57958],{"class":125,"line":16811},[123,57959,33472],{"class":133},[123,57961,57962],{"class":125,"line":16825},[123,57963,57964],{"class":192},"    \u002F\u002F 1.2 关闭按钮模块\n",[123,57966,57967,57969,57971,57973,57975,57977,57979,57982],{"class":125,"line":16830},[123,57968,11231],{"class":129},[123,57970,4209],{"class":182},[123,57972,13574],{"class":129},[123,57974,54407],{"class":133},[123,57976,54410],{"class":1972},[123,57978,134],{"class":133},[123,57980,57981],{"class":238},"'.end'",[123,57983,140],{"class":133},[123,57985,57986,57989,57991,57993,57995,57997,57999],{"class":125,"line":16836},[123,57987,57988],{"class":133},"    end.",[123,57990,57824],{"class":1972},[123,57992,134],{"class":133},[123,57994,57829],{"class":238},[123,57996,12445],{"class":133},[123,57998,54460],{"class":129},[123,58000,54463],{"class":133},[123,58002,58003,58006],{"class":125,"line":16841},[123,58004,58005],{"class":1972},"      clearInterval",[123,58007,58008],{"class":133},"(timerId)\n",[123,58010,58011],{"class":125,"line":16855},[123,58012,58013],{"class":192},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[123,58015,58016,58019,58022,58025,58027],{"class":125,"line":16860},[123,58017,58018],{"class":133},"      arr.",[123,58020,58021],{"class":1972},"splice",[123,58023,58024],{"class":133},"(random, ",[123,58026,351],{"class":182},[123,58028,140],{"class":133},[123,58030,58031],{"class":125,"line":16865},[123,58032,33472],{"class":133},[123,58034,58035],{"class":125,"line":16879},[123,58036,2409],{"emptyLinePlaceholder":50},[123,58038,58039,58041,58043],{"class":125,"line":16891},[123,58040,52428],{"class":133},[123,58042,51824],{"class":51311},[123,58044,51318],{"class":133},[123,58046,58047,58049,58051],{"class":125,"line":16896},[123,58048,51796],{"class":133},[123,58050,51811],{"class":51311},[123,58052,51318],{"class":133},[123,58054,58055],{"class":125,"line":16909},[123,58056,2409],{"emptyLinePlaceholder":50},[123,58058,58059,58061,58063],{"class":125,"line":16914},[123,58060,51796],{"class":133},[123,58062,50646],{"class":51311},[123,58064,51318],{"class":133},[14,58066,58067],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[94,58069,58071],{"id":58070},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[114,58073,58075],{"className":50644,"code":58074,"language":50646,"meta":37,"style":37},"\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",[120,58076,58077,58087,58101,58105,58113,58127,58147,58159,58167,58171,58179,58191,58199,58218,58235,58251,58261,58265,58273,58281,58285],{"__ignoreMap":37},[123,58078,58079,58081,58083,58085],{"class":125,"line":126},[123,58080,51308],{"class":133},[123,58082,51312],{"class":51311},[123,58084,51315],{"class":1972},[123,58086,51318],{"class":133},[123,58088,58089,58091,58093,58095,58097,58099],{"class":125,"line":45},[123,58090,1044],{"class":133},[123,58092,50646],{"class":51311},[123,58094,51327],{"class":1972},[123,58096,179],{"class":133},[123,58098,51332],{"class":238},[123,58100,51318],{"class":133},[123,58102,58103],{"class":125,"line":1189},[123,58104,2409],{"emptyLinePlaceholder":50},[123,58106,58107,58109,58111],{"class":125,"line":1204},[123,58108,1044],{"class":133},[123,58110,51345],{"class":51311},[123,58112,51318],{"class":133},[123,58114,58115,58117,58119,58121,58123,58125],{"class":125,"line":1210},[123,58116,52155],{"class":133},[123,58118,51355],{"class":51311},[123,58120,51358],{"class":1972},[123,58122,179],{"class":133},[123,58124,51363],{"class":238},[123,58126,51318],{"class":133},[123,58128,58129,58131,58133,58135,58137,58139,58141,58143,58145],{"class":125,"line":1224},[123,58130,52155],{"class":133},[123,58132,51355],{"class":51311},[123,58134,14930],{"class":1972},[123,58136,179],{"class":133},[123,58138,51402],{"class":238},[123,58140,51382],{"class":1972},[123,58142,179],{"class":133},[123,58144,51409],{"class":238},[123,58146,51318],{"class":133},[123,58148,58149,58151,58153,58155,58157],{"class":125,"line":1230},[123,58150,52155],{"class":133},[123,58152,51418],{"class":51311},[123,58154,51421],{"class":133},[123,58156,51418],{"class":51311},[123,58158,51318],{"class":133},[123,58160,58161,58163,58165],{"class":125,"line":1321},[123,58162,51796],{"class":133},[123,58164,51345],{"class":51311},[123,58166,51318],{"class":133},[123,58168,58169],{"class":125,"line":1327},[123,58170,2409],{"emptyLinePlaceholder":50},[123,58172,58173,58175,58177],{"class":125,"line":1339},[123,58174,1044],{"class":133},[123,58176,51811],{"class":51311},[123,58178,51318],{"class":133},[123,58180,58181,58183,58185,58187,58189],{"class":125,"line":1621},[123,58182,52155],{"class":133},[123,58184,53898],{"class":51311},[123,58186,53904],{"class":133},[123,58188,53898],{"class":51311},[123,58190,51318],{"class":133},[123,58192,58193,58195,58197],{"class":125,"line":1626},[123,58194,52155],{"class":133},[123,58196,51824],{"class":51311},[123,58198,51318],{"class":133},[123,58200,58201,58203,58205,58207,58209,58211,58213,58216],{"class":125,"line":1632},[123,58202,11231],{"class":129},[123,58204,54402],{"class":182},[123,58206,13574],{"class":129},[123,58208,54407],{"class":133},[123,58210,54410],{"class":1972},[123,58212,134],{"class":133},[123,58214,58215],{"class":238},"'button'",[123,58217,140],{"class":133},[123,58219,58220,58223,58225,58227,58229,58231,58233],{"class":125,"line":1637},[123,58221,58222],{"class":133},"    btn.",[123,58224,57824],{"class":1972},[123,58226,134],{"class":133},[123,58228,57829],{"class":238},[123,58230,12445],{"class":133},[123,58232,54460],{"class":129},[123,58234,54463],{"class":133},[123,58236,58237,58240,58242,58244,58247,58249],{"class":125,"line":1651},[123,58238,58239],{"class":129},"      const",[123,58241,2249],{"class":182},[123,58243,13574],{"class":129},[123,58245,58246],{"class":133}," Math.",[123,58248,57871],{"class":1972},[123,58250,1985],{"class":133},[123,58252,58253,58256,58259],{"class":125,"line":1656},[123,58254,58255],{"class":133},"      console.",[123,58257,58258],{"class":1972},"log",[123,58260,147],{"class":133},[123,58262,58263],{"class":125,"line":1662},[123,58264,33472],{"class":133},[123,58266,58267,58269,58271],{"class":125,"line":1683},[123,58268,52428],{"class":133},[123,58270,51824],{"class":51311},[123,58272,51318],{"class":133},[123,58274,58275,58277,58279],{"class":125,"line":1688},[123,58276,51796],{"class":133},[123,58278,51811],{"class":51311},[123,58280,51318],{"class":133},[123,58282,58283],{"class":125,"line":1702},[123,58284,2409],{"emptyLinePlaceholder":50},[123,58286,58287,58289,58291],{"class":125,"line":1707},[123,58288,51796],{"class":133},[123,58290,50646],{"class":51311},[123,58292,51318],{"class":133},[14,58294,58295],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58297,58298],{},"常量不可以重新赋值",[14,58300,58301],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[114,58303,58305],{"className":50644,"code":58304,"language":50646,"meta":37,"style":37},"\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",[120,58306,58307,58317,58331,58335,58343,58357,58377,58389,58397,58401,58409,58421,58429,58440,58458,58474,58488,58496,58500,58508,58516,58520],{"__ignoreMap":37},[123,58308,58309,58311,58313,58315],{"class":125,"line":126},[123,58310,51308],{"class":133},[123,58312,51312],{"class":51311},[123,58314,51315],{"class":1972},[123,58316,51318],{"class":133},[123,58318,58319,58321,58323,58325,58327,58329],{"class":125,"line":45},[123,58320,1044],{"class":133},[123,58322,50646],{"class":51311},[123,58324,51327],{"class":1972},[123,58326,179],{"class":133},[123,58328,51332],{"class":238},[123,58330,51318],{"class":133},[123,58332,58333],{"class":125,"line":1189},[123,58334,2409],{"emptyLinePlaceholder":50},[123,58336,58337,58339,58341],{"class":125,"line":1204},[123,58338,1044],{"class":133},[123,58340,51345],{"class":51311},[123,58342,51318],{"class":133},[123,58344,58345,58347,58349,58351,58353,58355],{"class":125,"line":1210},[123,58346,52155],{"class":133},[123,58348,51355],{"class":51311},[123,58350,51358],{"class":1972},[123,58352,179],{"class":133},[123,58354,51363],{"class":238},[123,58356,51318],{"class":133},[123,58358,58359,58361,58363,58365,58367,58369,58371,58373,58375],{"class":125,"line":1224},[123,58360,52155],{"class":133},[123,58362,51355],{"class":51311},[123,58364,14930],{"class":1972},[123,58366,179],{"class":133},[123,58368,51402],{"class":238},[123,58370,51382],{"class":1972},[123,58372,179],{"class":133},[123,58374,51409],{"class":238},[123,58376,51318],{"class":133},[123,58378,58379,58381,58383,58385,58387],{"class":125,"line":1230},[123,58380,52155],{"class":133},[123,58382,51418],{"class":51311},[123,58384,51421],{"class":133},[123,58386,51418],{"class":51311},[123,58388,51318],{"class":133},[123,58390,58391,58393,58395],{"class":125,"line":1321},[123,58392,51796],{"class":133},[123,58394,51345],{"class":51311},[123,58396,51318],{"class":133},[123,58398,58399],{"class":125,"line":1327},[123,58400,2409],{"emptyLinePlaceholder":50},[123,58402,58403,58405,58407],{"class":125,"line":1339},[123,58404,1044],{"class":133},[123,58406,51811],{"class":51311},[123,58408,51318],{"class":133},[123,58410,58411,58413,58415,58417,58419],{"class":125,"line":1621},[123,58412,52155],{"class":133},[123,58414,53898],{"class":51311},[123,58416,53904],{"class":133},[123,58418,53898],{"class":51311},[123,58420,51318],{"class":133},[123,58422,58423,58425,58427],{"class":125,"line":1626},[123,58424,52155],{"class":133},[123,58426,51824],{"class":51311},[123,58428,51318],{"class":133},[123,58430,58431,58433,58435,58437],{"class":125,"line":1632},[123,58432,11231],{"class":129},[123,58434,2249],{"class":182},[123,58436,13574],{"class":129},[123,58438,58439],{"class":182}," 10\n",[123,58441,58442,58444,58446,58448,58450,58452,58454,58456],{"class":125,"line":1637},[123,58443,11231],{"class":129},[123,58445,54402],{"class":182},[123,58447,13574],{"class":129},[123,58449,54407],{"class":133},[123,58451,54410],{"class":1972},[123,58453,134],{"class":133},[123,58455,58215],{"class":238},[123,58457,140],{"class":133},[123,58459,58460,58462,58464,58466,58468,58470,58472],{"class":125,"line":1651},[123,58461,58222],{"class":133},[123,58463,57824],{"class":1972},[123,58465,134],{"class":133},[123,58467,57829],{"class":238},[123,58469,12445],{"class":133},[123,58471,54460],{"class":129},[123,58473,54463],{"class":133},[123,58475,58476,58478,58480,58482,58484,58486],{"class":125,"line":1656},[123,58477,58239],{"class":129},[123,58479,2249],{"class":182},[123,58481,13574],{"class":129},[123,58483,58246],{"class":133},[123,58485,57871],{"class":1972},[123,58487,1985],{"class":133},[123,58489,58490,58492,58494],{"class":125,"line":1662},[123,58491,58255],{"class":133},[123,58493,58258],{"class":1972},[123,58495,147],{"class":133},[123,58497,58498],{"class":125,"line":1683},[123,58499,33472],{"class":133},[123,58501,58502,58504,58506],{"class":125,"line":1688},[123,58503,52428],{"class":133},[123,58505,51824],{"class":51311},[123,58507,51318],{"class":133},[123,58509,58510,58512,58514],{"class":125,"line":1702},[123,58511,51796],{"class":133},[123,58513,51811],{"class":51311},[123,58515,51318],{"class":133},[123,58517,58518],{"class":125,"line":1707},[123,58519,2409],{"emptyLinePlaceholder":50},[123,58521,58522,58524,58526],{"class":125,"line":1736},[123,58523,51796],{"class":133},[123,58525,50646],{"class":51311},[123,58527,51318],{"class":133},[14,58529,58530],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[114,58532,58534],{"className":50644,"code":58533,"language":50646,"meta":37,"style":37},"\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",[120,58535,58536,58546,58560,58564,58572,58586,58606,58618,58626,58630,58638,58650,58658,58668,58686,58702,58715,58723,58727,58735,58743,58747],{"__ignoreMap":37},[123,58537,58538,58540,58542,58544],{"class":125,"line":126},[123,58539,51308],{"class":133},[123,58541,51312],{"class":51311},[123,58543,51315],{"class":1972},[123,58545,51318],{"class":133},[123,58547,58548,58550,58552,58554,58556,58558],{"class":125,"line":45},[123,58549,1044],{"class":133},[123,58551,50646],{"class":51311},[123,58553,51327],{"class":1972},[123,58555,179],{"class":133},[123,58557,51332],{"class":238},[123,58559,51318],{"class":133},[123,58561,58562],{"class":125,"line":1189},[123,58563,2409],{"emptyLinePlaceholder":50},[123,58565,58566,58568,58570],{"class":125,"line":1204},[123,58567,1044],{"class":133},[123,58569,51345],{"class":51311},[123,58571,51318],{"class":133},[123,58573,58574,58576,58578,58580,58582,58584],{"class":125,"line":1210},[123,58575,52155],{"class":133},[123,58577,51355],{"class":51311},[123,58579,51358],{"class":1972},[123,58581,179],{"class":133},[123,58583,51363],{"class":238},[123,58585,51318],{"class":133},[123,58587,58588,58590,58592,58594,58596,58598,58600,58602,58604],{"class":125,"line":1224},[123,58589,52155],{"class":133},[123,58591,51355],{"class":51311},[123,58593,14930],{"class":1972},[123,58595,179],{"class":133},[123,58597,51402],{"class":238},[123,58599,51382],{"class":1972},[123,58601,179],{"class":133},[123,58603,51409],{"class":238},[123,58605,51318],{"class":133},[123,58607,58608,58610,58612,58614,58616],{"class":125,"line":1230},[123,58609,52155],{"class":133},[123,58611,51418],{"class":51311},[123,58613,51421],{"class":133},[123,58615,51418],{"class":51311},[123,58617,51318],{"class":133},[123,58619,58620,58622,58624],{"class":125,"line":1321},[123,58621,51796],{"class":133},[123,58623,51345],{"class":51311},[123,58625,51318],{"class":133},[123,58627,58628],{"class":125,"line":1327},[123,58629,2409],{"emptyLinePlaceholder":50},[123,58631,58632,58634,58636],{"class":125,"line":1339},[123,58633,1044],{"class":133},[123,58635,51811],{"class":51311},[123,58637,51318],{"class":133},[123,58639,58640,58642,58644,58646,58648],{"class":125,"line":1621},[123,58641,52155],{"class":133},[123,58643,53898],{"class":51311},[123,58645,53904],{"class":133},[123,58647,53898],{"class":51311},[123,58649,51318],{"class":133},[123,58651,58652,58654,58656],{"class":125,"line":1626},[123,58653,52155],{"class":133},[123,58655,51824],{"class":51311},[123,58657,51318],{"class":133},[123,58659,58660,58662,58664,58666],{"class":125,"line":1632},[123,58661,11231],{"class":129},[123,58663,2249],{"class":182},[123,58665,13574],{"class":129},[123,58667,58439],{"class":182},[123,58669,58670,58672,58674,58676,58678,58680,58682,58684],{"class":125,"line":1637},[123,58671,11231],{"class":129},[123,58673,54402],{"class":182},[123,58675,13574],{"class":129},[123,58677,54407],{"class":133},[123,58679,54410],{"class":1972},[123,58681,134],{"class":133},[123,58683,58215],{"class":238},[123,58685,140],{"class":133},[123,58687,58688,58690,58692,58694,58696,58698,58700],{"class":125,"line":1651},[123,58689,58222],{"class":133},[123,58691,57824],{"class":1972},[123,58693,134],{"class":133},[123,58695,57829],{"class":238},[123,58697,12445],{"class":133},[123,58699,54460],{"class":129},[123,58701,54463],{"class":133},[123,58703,58704,58707,58709,58711,58713],{"class":125,"line":1656},[123,58705,58706],{"class":133},"      num ",[123,58708,179],{"class":129},[123,58710,58246],{"class":133},[123,58712,57871],{"class":1972},[123,58714,1985],{"class":133},[123,58716,58717,58719,58721],{"class":125,"line":1662},[123,58718,58255],{"class":133},[123,58720,58258],{"class":1972},[123,58722,147],{"class":133},[123,58724,58725],{"class":125,"line":1683},[123,58726,33472],{"class":133},[123,58728,58729,58731,58733],{"class":125,"line":1688},[123,58730,52428],{"class":133},[123,58732,51824],{"class":51311},[123,58734,51318],{"class":133},[123,58736,58737,58739,58741],{"class":125,"line":1702},[123,58738,51796],{"class":133},[123,58740,51811],{"class":51311},[123,58742,51318],{"class":133},[123,58744,58745],{"class":125,"line":1707},[123,58746,2409],{"emptyLinePlaceholder":50},[123,58748,58749,58751,58753],{"class":125,"line":1736},[123,58750,51796],{"class":133},[123,58752,50646],{"class":51311},[123,58754,51318],{"class":133},[14,58756,58757],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[94,58759,58761],{"id":58760},"_324-事件监听版本","3.2.4 事件监听版本",[14,58763,58764],{},[35,58765],{"alt":37,"src":58766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,58768,58769],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,58771,58772],{},"这种方式会覆盖前边的事件监听:",[114,58774,58776],{"className":50644,"code":58775,"language":50646,"meta":37,"style":37},"\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",[120,58777,58778,58788,58802,58806,58814,58828,58848,58860,58868,58872,58880,58892,58900,58918,58932,58943,58947,58959,58969,58973,58981,58989,58993],{"__ignoreMap":37},[123,58779,58780,58782,58784,58786],{"class":125,"line":126},[123,58781,51308],{"class":133},[123,58783,51312],{"class":51311},[123,58785,51315],{"class":1972},[123,58787,51318],{"class":133},[123,58789,58790,58792,58794,58796,58798,58800],{"class":125,"line":45},[123,58791,1044],{"class":133},[123,58793,50646],{"class":51311},[123,58795,51327],{"class":1972},[123,58797,179],{"class":133},[123,58799,51332],{"class":238},[123,58801,51318],{"class":133},[123,58803,58804],{"class":125,"line":1189},[123,58805,2409],{"emptyLinePlaceholder":50},[123,58807,58808,58810,58812],{"class":125,"line":1204},[123,58809,1044],{"class":133},[123,58811,51345],{"class":51311},[123,58813,51318],{"class":133},[123,58815,58816,58818,58820,58822,58824,58826],{"class":125,"line":1210},[123,58817,52155],{"class":133},[123,58819,51355],{"class":51311},[123,58821,51358],{"class":1972},[123,58823,179],{"class":133},[123,58825,51363],{"class":238},[123,58827,51318],{"class":133},[123,58829,58830,58832,58834,58836,58838,58840,58842,58844,58846],{"class":125,"line":1224},[123,58831,52155],{"class":133},[123,58833,51355],{"class":51311},[123,58835,14930],{"class":1972},[123,58837,179],{"class":133},[123,58839,51402],{"class":238},[123,58841,51382],{"class":1972},[123,58843,179],{"class":133},[123,58845,51409],{"class":238},[123,58847,51318],{"class":133},[123,58849,58850,58852,58854,58856,58858],{"class":125,"line":1230},[123,58851,52155],{"class":133},[123,58853,51418],{"class":51311},[123,58855,51421],{"class":133},[123,58857,51418],{"class":51311},[123,58859,51318],{"class":133},[123,58861,58862,58864,58866],{"class":125,"line":1321},[123,58863,51796],{"class":133},[123,58865,51345],{"class":51311},[123,58867,51318],{"class":133},[123,58869,58870],{"class":125,"line":1327},[123,58871,2409],{"emptyLinePlaceholder":50},[123,58873,58874,58876,58878],{"class":125,"line":1339},[123,58875,1044],{"class":133},[123,58877,51811],{"class":51311},[123,58879,51318],{"class":133},[123,58881,58882,58884,58886,58888,58890],{"class":125,"line":1621},[123,58883,52155],{"class":133},[123,58885,53898],{"class":51311},[123,58887,53904],{"class":133},[123,58889,53898],{"class":51311},[123,58891,51318],{"class":133},[123,58893,58894,58896,58898],{"class":125,"line":1626},[123,58895,52155],{"class":133},[123,58897,51824],{"class":51311},[123,58899,51318],{"class":133},[123,58901,58902,58904,58906,58908,58910,58912,58914,58916],{"class":125,"line":1632},[123,58903,11231],{"class":129},[123,58905,54402],{"class":182},[123,58907,13574],{"class":129},[123,58909,54407],{"class":133},[123,58911,54410],{"class":1972},[123,58913,134],{"class":133},[123,58915,58215],{"class":238},[123,58917,140],{"class":133},[123,58919,58920,58922,58925,58927,58930],{"class":125,"line":1637},[123,58921,58222],{"class":133},[123,58923,58924],{"class":1972},"onclick",[123,58926,13574],{"class":129},[123,58928,58929],{"class":129}," function",[123,58931,54463],{"class":133},[123,58933,58934,58937,58939,58941],{"class":125,"line":1651},[123,58935,58936],{"class":1972},"      alert",[123,58938,134],{"class":133},[123,58940,606],{"class":182},[123,58942,140],{"class":133},[123,58944,58945],{"class":125,"line":1656},[123,58946,2196],{"class":133},[123,58948,58949,58951,58953,58955,58957],{"class":125,"line":1662},[123,58950,58222],{"class":133},[123,58952,58924],{"class":1972},[123,58954,13574],{"class":129},[123,58956,58929],{"class":129},[123,58958,54463],{"class":133},[123,58960,58961,58963,58965,58967],{"class":125,"line":1683},[123,58962,58936],{"class":1972},[123,58964,134],{"class":133},[123,58966,884],{"class":182},[123,58968,140],{"class":133},[123,58970,58971],{"class":125,"line":1688},[123,58972,2196],{"class":133},[123,58974,58975,58977,58979],{"class":125,"line":1702},[123,58976,52428],{"class":133},[123,58978,51824],{"class":51311},[123,58980,51318],{"class":133},[123,58982,58983,58985,58987],{"class":125,"line":1707},[123,58984,51796],{"class":133},[123,58986,51811],{"class":51311},[123,58988,51318],{"class":133},[123,58990,58991],{"class":125,"line":1736},[123,58992,2409],{"emptyLinePlaceholder":50},[123,58994,58995,58997,58999],{"class":125,"line":1741},[123,58996,51796],{"class":133},[123,58998,50646],{"class":51311},[123,59000,51318],{"class":133},[14,59002,59003],{},"只要点击就输出结果为22,前边11被覆盖了",[114,59005,59007],{"className":50644,"code":59006,"language":50646,"meta":37,"style":37},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[120,59008,59009,59014,59019,59023,59028,59033],{"__ignoreMap":37},[123,59010,59011],{"class":125,"line":126},[123,59012,59013],{"class":133},"  btn.addEventListener('click', function () {\n",[123,59015,59016],{"class":125,"line":45},[123,59017,59018],{"class":133},"      alert(11)\n",[123,59020,59021],{"class":125,"line":1189},[123,59022,33472],{"class":133},[123,59024,59025],{"class":125,"line":1204},[123,59026,59027],{"class":133},"    btn.addEventListener('click', function () {\n",[123,59029,59030],{"class":125,"line":1210},[123,59031,59032],{"class":133},"      alert(22)\n",[123,59034,59035],{"class":125,"line":1224},[123,59036,33472],{"class":133},[14,59038,59039],{},"点击第一次输出11,第二次点击为22",[94,59041,59043],{"id":59042},"_325-事件类型","3.2.5 事件类型",[14,59045,59046],{},[35,59047],{"alt":37,"src":59048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[22008,59050,59052],{"id":59051},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59054,59055],{},"补充知识:",[14,59057,59058],{},"轮播图自动播放模块,可以使用",[14,59060,59061],{},"let timerId = setInterval(function () {",[14,59063,59064],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59066,59067],{},"用js方法模拟进行点击事件,click必须加()",[14,59069,59070],{},"next.click()",[14,59072,59073],{},"}, 1000)",[14,59075,59076],{},[35,59077],{"alt":37,"src":59078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[114,59080,59082],{"className":53078,"code":59081,"language":53080,"meta":37,"style":37},"\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",[120,59083,59084,59088,59098,59112,59116,59124,59139,59159,59179,59192,59200,59205,59210,59214,59218,59223,59228,59233,59238,59242,59246,59251,59256,59261,59265,59269,59274,59278,59283,59288,59292,59296,59301,59306,59311,59316,59321,59325,59329,59334,59339,59344,59349,59354,59358,59362,59367,59372,59377,59382,59387,59392,59397,59402,59407,59412,59416,59420,59425,59430,59434,59438,59443,59448,59452,59457,59462,59466,59470,59475,59479,59484,59489,59493,59498,59502,59506,59511,59516,59521,59526,59531,59536,59541,59545,59549,59553,59558,59563,59568,59573,59577,59585,59593,59597,59605,59620,59634,59655,59663,59677,59690,59705,59724,59736,59748,59760,59772,59784,59796,59808,59816,59831,59855,59879,59887,59895,59903,59911,59916,59921,59926,59931,59936,59941,59946,59951,59956,59961,59965,59970,59975,59980,59985,59990,59995,60000,60005,60010,60014,60019,60024,60029,60034,60039,60044,60049,60054,60059,60064,60069,60074,60078,60082,60087,60092,60097,60101,60106,60111,60116,60121,60126,60130,60135,60139,60143,60147,60151,60155,60159,60164,60169,60174,60179,60184,60189,60194,60199,60204,60208,60212,60217,60222,60227,60232,60237,60241,60246,60251,60256,60261,60266,60271,60275,60279,60284,60288,60293,60297,60302,60307,60312,60317,60322,60327,60331,60339,60347,60351],{"__ignoreMap":37},[123,59085,59086],{"class":125,"line":126},[123,59087,2409],{"emptyLinePlaceholder":50},[123,59089,59090,59092,59094,59096],{"class":125,"line":45},[123,59091,51308],{"class":133},[123,59093,51312],{"class":129},[123,59095,51315],{"class":182},[123,59097,51318],{"class":133},[123,59099,59100,59102,59104,59106,59108,59110],{"class":125,"line":1189},[123,59101,1044],{"class":133},[123,59103,50646],{"class":51311},[123,59105,51327],{"class":1972},[123,59107,179],{"class":133},[123,59109,51332],{"class":238},[123,59111,51318],{"class":133},[123,59113,59114],{"class":125,"line":1204},[123,59115,2409],{"emptyLinePlaceholder":50},[123,59117,59118,59120,59122],{"class":125,"line":1210},[123,59119,1044],{"class":133},[123,59121,51345],{"class":51311},[123,59123,51318],{"class":133},[123,59125,59126,59128,59130,59132,59134,59136],{"class":125,"line":1224},[123,59127,52155],{"class":133},[123,59129,51355],{"class":51311},[123,59131,51358],{"class":1972},[123,59133,179],{"class":133},[123,59135,51363],{"class":238},[123,59137,59138],{"class":133}," \u002F>\n",[123,59140,59141,59143,59145,59147,59149,59151,59153,59155,59157],{"class":125,"line":1230},[123,59142,52155],{"class":133},[123,59144,51355],{"class":51311},[123,59146,51374],{"class":1972},[123,59148,179],{"class":133},[123,59150,51379],{"class":238},[123,59152,51382],{"class":1972},[123,59154,179],{"class":133},[123,59156,51387],{"class":238},[123,59158,59138],{"class":133},[123,59160,59161,59163,59165,59167,59169,59171,59173,59175,59177],{"class":125,"line":1321},[123,59162,52155],{"class":133},[123,59164,51355],{"class":51311},[123,59166,14930],{"class":1972},[123,59168,179],{"class":133},[123,59170,51402],{"class":238},[123,59172,51382],{"class":1972},[123,59174,179],{"class":133},[123,59176,51409],{"class":238},[123,59178,59138],{"class":133},[123,59180,59181,59183,59185,59188,59190],{"class":125,"line":1327},[123,59182,52155],{"class":133},[123,59184,51418],{"class":51311},[123,59186,59187],{"class":133},">轮播图点击切换\u003C\u002F",[123,59189,51418],{"class":51311},[123,59191,51318],{"class":133},[123,59193,59194,59196,59198],{"class":125,"line":1339},[123,59195,52155],{"class":133},[123,59197,5136],{"class":51311},[123,59199,51318],{"class":133},[123,59201,59202],{"class":125,"line":1621},[123,59203,59204],{"class":133},"    * {\n",[123,59206,59207],{"class":125,"line":1626},[123,59208,59209],{"class":133},"      box-sizing: border-box;\n",[123,59211,59212],{"class":125,"line":1632},[123,59213,2196],{"class":133},[123,59215,59216],{"class":125,"line":1637},[123,59217,2409],{"emptyLinePlaceholder":50},[123,59219,59220],{"class":125,"line":1651},[123,59221,59222],{"class":133},"    .slider {\n",[123,59224,59225],{"class":125,"line":1656},[123,59226,59227],{"class":133},"      width: 560px;\n",[123,59229,59230],{"class":125,"line":1662},[123,59231,59232],{"class":133},"      height: 400px;\n",[123,59234,59235],{"class":125,"line":1683},[123,59236,59237],{"class":133},"      overflow: hidden;\n",[123,59239,59240],{"class":125,"line":1688},[123,59241,2196],{"class":133},[123,59243,59244],{"class":125,"line":1702},[123,59245,2409],{"emptyLinePlaceholder":50},[123,59247,59248],{"class":125,"line":1707},[123,59249,59250],{"class":133},"    .slider-wrapper {\n",[123,59252,59253],{"class":125,"line":1736},[123,59254,59255],{"class":133},"      width: 100%;\n",[123,59257,59258],{"class":125,"line":1741},[123,59259,59260],{"class":133},"      height: 320px;\n",[123,59262,59263],{"class":125,"line":1758},[123,59264,2196],{"class":133},[123,59266,59267],{"class":125,"line":1763},[123,59268,2409],{"emptyLinePlaceholder":50},[123,59270,59271],{"class":125,"line":1768},[123,59272,59273],{"class":133},"    .slider-wrapper img {\n",[123,59275,59276],{"class":125,"line":1773},[123,59277,59255],{"class":133},[123,59279,59280],{"class":125,"line":1787},[123,59281,59282],{"class":133},"      height: 100%;\n",[123,59284,59285],{"class":125,"line":1792},[123,59286,59287],{"class":133},"      display: block;\n",[123,59289,59290],{"class":125,"line":2586},[123,59291,2196],{"class":133},[123,59293,59294],{"class":125,"line":2600},[123,59295,2409],{"emptyLinePlaceholder":50},[123,59297,59298],{"class":125,"line":2608},[123,59299,59300],{"class":133},"    .slider-footer {\n",[123,59302,59303],{"class":125,"line":2613},[123,59304,59305],{"class":133},"      height: 80px;\n",[123,59307,59308],{"class":125,"line":2619},[123,59309,59310],{"class":133},"      background-color: rgb(100, 67, 68);\n",[123,59312,59313],{"class":125,"line":2625},[123,59314,59315],{"class":133},"      padding: 12px 12px 0 12px;\n",[123,59317,59318],{"class":125,"line":2630},[123,59319,59320],{"class":133},"      position: relative;\n",[123,59322,59323],{"class":125,"line":7958},[123,59324,2196],{"class":133},[123,59326,59327],{"class":125,"line":7982},[123,59328,2409],{"emptyLinePlaceholder":50},[123,59330,59331],{"class":125,"line":7987},[123,59332,59333],{"class":133},"    .slider-footer .toggle {\n",[123,59335,59336],{"class":125,"line":7993},[123,59337,59338],{"class":133},"      position: absolute;\n",[123,59340,59341],{"class":125,"line":8020},[123,59342,59343],{"class":133},"      right: 0;\n",[123,59345,59346],{"class":125,"line":8025},[123,59347,59348],{"class":133},"      top: 12px;\n",[123,59350,59351],{"class":125,"line":8031},[123,59352,59353],{"class":133},"      display: flex;\n",[123,59355,59356],{"class":125,"line":8043},[123,59357,2196],{"class":133},[123,59359,59360],{"class":125,"line":8055},[123,59361,2409],{"emptyLinePlaceholder":50},[123,59363,59364],{"class":125,"line":8067},[123,59365,59366],{"class":133},"    .slider-footer .toggle button {\n",[123,59368,59369],{"class":125,"line":9726},[123,59370,59371],{"class":133},"      margin-right: 12px;\n",[123,59373,59374],{"class":125,"line":9751},[123,59375,59376],{"class":133},"      width: 28px;\n",[123,59378,59379],{"class":125,"line":9774},[123,59380,59381],{"class":133},"      height: 28px;\n",[123,59383,59384],{"class":125,"line":9798},[123,59385,59386],{"class":133},"      appearance: none;\n",[123,59388,59389],{"class":125,"line":9803},[123,59390,59391],{"class":133},"      border: none;\n",[123,59393,59394],{"class":125,"line":9808},[123,59395,59396],{"class":133},"      background: rgba(255, 255, 255, 0.1);\n",[123,59398,59399],{"class":125,"line":9813},[123,59400,59401],{"class":133},"      color: #fff;\n",[123,59403,59404],{"class":125,"line":9822},[123,59405,59406],{"class":133},"      border-radius: 4px;\n",[123,59408,59409],{"class":125,"line":9827},[123,59410,59411],{"class":133},"      cursor: pointer;\n",[123,59413,59414],{"class":125,"line":9833},[123,59415,2196],{"class":133},[123,59417,59418],{"class":125,"line":9854},[123,59419,2409],{"emptyLinePlaceholder":50},[123,59421,59422],{"class":125,"line":9860},[123,59423,59424],{"class":133},"    .slider-footer .toggle button:hover {\n",[123,59426,59427],{"class":125,"line":9874},[123,59428,59429],{"class":133},"      background: rgba(255, 255, 255, 0.2);\n",[123,59431,59432],{"class":125,"line":9880},[123,59433,2196],{"class":133},[123,59435,59436],{"class":125,"line":9907},[123,59437,2409],{"emptyLinePlaceholder":50},[123,59439,59440],{"class":125,"line":9916},[123,59441,59442],{"class":133},"    .slider-footer p {\n",[123,59444,59445],{"class":125,"line":9922},[123,59446,59447],{"class":133},"      margin: 0;\n",[123,59449,59450],{"class":125,"line":9930},[123,59451,59401],{"class":133},[123,59453,59454],{"class":125,"line":9935},[123,59455,59456],{"class":133},"      font-size: 18px;\n",[123,59458,59459],{"class":125,"line":16614},[123,59460,59461],{"class":133},"      margin-bottom: 10px;\n",[123,59463,59464],{"class":125,"line":16620},[123,59465,2196],{"class":133},[123,59467,59468],{"class":125,"line":16643},[123,59469,2409],{"emptyLinePlaceholder":50},[123,59471,59472],{"class":125,"line":16649},[123,59473,59474],{"class":133},"    .slider-indicator {\n",[123,59476,59477],{"class":125,"line":16672},[123,59478,59447],{"class":133},[123,59480,59481],{"class":125,"line":16686},[123,59482,59483],{"class":133},"      padding: 0;\n",[123,59485,59486],{"class":125,"line":16706},[123,59487,59488],{"class":133},"      list-style: none;\n",[123,59490,59491],{"class":125,"line":16712},[123,59492,59353],{"class":133},[123,59494,59495],{"class":125,"line":16723},[123,59496,59497],{"class":133},"      align-items: center;\n",[123,59499,59500],{"class":125,"line":16746},[123,59501,2196],{"class":133},[123,59503,59504],{"class":125,"line":16768},[123,59505,2409],{"emptyLinePlaceholder":50},[123,59507,59508],{"class":125,"line":16773},[123,59509,59510],{"class":133},"    .slider-indicator li {\n",[123,59512,59513],{"class":125,"line":16779},[123,59514,59515],{"class":133},"      width: 8px;\n",[123,59517,59518],{"class":125,"line":16793},[123,59519,59520],{"class":133},"      height: 8px;\n",[123,59522,59523],{"class":125,"line":16806},[123,59524,59525],{"class":133},"      margin: 4px;\n",[123,59527,59528],{"class":125,"line":16811},[123,59529,59530],{"class":133},"      border-radius: 50%;\n",[123,59532,59533],{"class":125,"line":16825},[123,59534,59535],{"class":133},"      background: #fff;\n",[123,59537,59538],{"class":125,"line":16830},[123,59539,59540],{"class":133},"      opacity: 0.4;\n",[123,59542,59543],{"class":125,"line":16836},[123,59544,59411],{"class":133},[123,59546,59547],{"class":125,"line":16841},[123,59548,2196],{"class":133},[123,59550,59551],{"class":125,"line":16855},[123,59552,2409],{"emptyLinePlaceholder":50},[123,59554,59555],{"class":125,"line":16860},[123,59556,59557],{"class":133},"    .slider-indicator li.active {\n",[123,59559,59560],{"class":125,"line":16865},[123,59561,59562],{"class":133},"      width: 12px;\n",[123,59564,59565],{"class":125,"line":16879},[123,59566,59567],{"class":133},"      height: 12px;\n",[123,59569,59570],{"class":125,"line":16891},[123,59571,59572],{"class":133},"      opacity: 1;\n",[123,59574,59575],{"class":125,"line":16896},[123,59576,2196],{"class":133},[123,59578,59579,59581,59583],{"class":125,"line":16909},[123,59580,52428],{"class":133},[123,59582,5136],{"class":51311},[123,59584,51318],{"class":133},[123,59586,59587,59589,59591],{"class":125,"line":16914},[123,59588,51796],{"class":133},[123,59590,51345],{"class":51311},[123,59592,51318],{"class":133},[123,59594,59595],{"class":125,"line":16919},[123,59596,2409],{"emptyLinePlaceholder":50},[123,59598,59599,59601,59603],{"class":125,"line":16924},[123,59600,1044],{"class":133},[123,59602,51811],{"class":51311},[123,59604,51318],{"class":133},[123,59606,59607,59609,59611,59613,59615,59618],{"class":125,"line":16937},[123,59608,52155],{"class":133},[123,59610,51622],{"class":51311},[123,59612,53497],{"class":1972},[123,59614,179],{"class":133},[123,59616,59617],{"class":238},"\"slider\"",[123,59619,51318],{"class":133},[123,59621,59622,59624,59626,59628,59630,59632],{"class":125,"line":16942},[123,59623,51352],{"class":133},[123,59625,51622],{"class":51311},[123,59627,53497],{"class":1972},[123,59629,179],{"class":133},[123,59631,55238],{"class":238},[123,59633,51318],{"class":133},[123,59635,59636,59638,59640,59642,59644,59647,59649,59651,59653],{"class":125,"line":32644},[123,59637,55245],{"class":133},[123,59639,35],{"class":51311},[123,59641,55250],{"class":1972},[123,59643,179],{"class":133},[123,59645,59646],{"class":238},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[123,59648,55258],{"class":1972},[123,59650,179],{"class":133},[123,59652,7662],{"class":238},[123,59654,59138],{"class":133},[123,59656,59657,59659,59661],{"class":125,"line":32650},[123,59658,51787],{"class":133},[123,59660,51622],{"class":51311},[123,59662,51318],{"class":133},[123,59664,59665,59667,59669,59671,59673,59675],{"class":125,"line":32656},[123,59666,51352],{"class":133},[123,59668,51622],{"class":51311},[123,59670,53497],{"class":1972},[123,59672,179],{"class":133},[123,59674,55285],{"class":238},[123,59676,51318],{"class":133},[123,59678,59679,59681,59683,59686,59688],{"class":125,"line":32662},[123,59680,55245],{"class":133},[123,59682,14],{"class":51311},[123,59684,59685],{"class":133},">对人类来说会不会太超前了？\u003C\u002F",[123,59687,14],{"class":51311},[123,59689,51318],{"class":133},[123,59691,59692,59694,59696,59698,59700,59703],{"class":125,"line":32668},[123,59693,55245],{"class":133},[123,59695,1141],{"class":51311},[123,59697,53497],{"class":1972},[123,59699,179],{"class":133},[123,59701,59702],{"class":238},"\"slider-indicator\"",[123,59704,51318],{"class":133},[123,59706,59707,59709,59711,59713,59715,59718,59720,59722],{"class":125,"line":32679},[123,59708,55313],{"class":133},[123,59710,80],{"class":51311},[123,59712,53497],{"class":1972},[123,59714,179],{"class":133},[123,59716,59717],{"class":238},"\"active\"",[123,59719,55325],{"class":133},[123,59721,80],{"class":51311},[123,59723,51318],{"class":133},[123,59725,59726,59728,59730,59732,59734],{"class":125,"line":32685},[123,59727,55313],{"class":133},[123,59729,80],{"class":51311},[123,59731,55325],{"class":133},[123,59733,80],{"class":51311},[123,59735,51318],{"class":133},[123,59737,59738,59740,59742,59744,59746],{"class":125,"line":32705},[123,59739,55313],{"class":133},[123,59741,80],{"class":51311},[123,59743,55325],{"class":133},[123,59745,80],{"class":51311},[123,59747,51318],{"class":133},[123,59749,59750,59752,59754,59756,59758],{"class":125,"line":32711},[123,59751,55313],{"class":133},[123,59753,80],{"class":51311},[123,59755,55325],{"class":133},[123,59757,80],{"class":51311},[123,59759,51318],{"class":133},[123,59761,59762,59764,59766,59768,59770],{"class":125,"line":32722},[123,59763,55313],{"class":133},[123,59765,80],{"class":51311},[123,59767,55325],{"class":133},[123,59769,80],{"class":51311},[123,59771,51318],{"class":133},[123,59773,59774,59776,59778,59780,59782],{"class":125,"line":32728},[123,59775,55313],{"class":133},[123,59777,80],{"class":51311},[123,59779,55325],{"class":133},[123,59781,80],{"class":51311},[123,59783,51318],{"class":133},[123,59785,59786,59788,59790,59792,59794],{"class":125,"line":32734},[123,59787,55313],{"class":133},[123,59789,80],{"class":51311},[123,59791,55325],{"class":133},[123,59793,80],{"class":51311},[123,59795,51318],{"class":133},[123,59797,59798,59800,59802,59804,59806],{"class":125,"line":32740},[123,59799,55313],{"class":133},[123,59801,80],{"class":51311},[123,59803,55325],{"class":133},[123,59805,80],{"class":51311},[123,59807,51318],{"class":133},[123,59809,59810,59812,59814],{"class":125,"line":32746},[123,59811,55418],{"class":133},[123,59813,1141],{"class":51311},[123,59815,51318],{"class":133},[123,59817,59818,59820,59822,59824,59826,59829],{"class":125,"line":32752},[123,59819,55245],{"class":133},[123,59821,51622],{"class":51311},[123,59823,53497],{"class":1972},[123,59825,179],{"class":133},[123,59827,59828],{"class":238},"\"toggle\"",[123,59830,51318],{"class":133},[123,59832,59833,59835,59837,59839,59841,59844,59846,59849,59851,59853],{"class":125,"line":32758},[123,59834,55313],{"class":133},[123,59836,53898],{"class":51311},[123,59838,53497],{"class":1972},[123,59840,179],{"class":133},[123,59842,59843],{"class":238},"\"prev\"",[123,59845,1094],{"class":133},[123,59847,59848],{"class":182},"&lt;",[123,59850,51796],{"class":133},[123,59852,53898],{"class":51311},[123,59854,51318],{"class":133},[123,59856,59857,59859,59861,59863,59865,59868,59870,59873,59875,59877],{"class":125,"line":32764},[123,59858,55313],{"class":133},[123,59860,53898],{"class":51311},[123,59862,53497],{"class":1972},[123,59864,179],{"class":133},[123,59866,59867],{"class":238},"\"next\"",[123,59869,1094],{"class":133},[123,59871,59872],{"class":182},"&gt;",[123,59874,51796],{"class":133},[123,59876,53898],{"class":51311},[123,59878,51318],{"class":133},[123,59880,59881,59883,59885],{"class":125,"line":32784},[123,59882,55418],{"class":133},[123,59884,51622],{"class":51311},[123,59886,51318],{"class":133},[123,59888,59889,59891,59893],{"class":125,"line":32790},[123,59890,51787],{"class":133},[123,59892,51622],{"class":51311},[123,59894,51318],{"class":133},[123,59896,59897,59899,59901],{"class":125,"line":32806},[123,59898,52428],{"class":133},[123,59900,51622],{"class":51311},[123,59902,51318],{"class":133},[123,59904,59905,59907,59909],{"class":125,"line":32812},[123,59906,52155],{"class":133},[123,59908,51824],{"class":51311},[123,59910,51318],{"class":133},[123,59912,59913],{"class":125,"line":32826},[123,59914,59915],{"class":133},"    \u002F\u002F 1. 初始数据\n",[123,59917,59918],{"class":125,"line":32832},[123,59919,59920],{"class":133},"    const data = [\n",[123,59922,59923],{"class":125,"line":32847},[123,59924,59925],{"class":133},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[123,59927,59928],{"class":125,"line":32853},[123,59929,59930],{"class":133},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[123,59932,59933],{"class":125,"line":32862},[123,59934,59935],{"class":133},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[123,59937,59938],{"class":125,"line":32868},[123,59939,59940],{"class":133},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[123,59942,59943],{"class":125,"line":32877},[123,59944,59945],{"class":133},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[123,59947,59948],{"class":125,"line":32883},[123,59949,59950],{"class":133},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[123,59952,59953],{"class":125,"line":32889},[123,59954,59955],{"class":133},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[123,59957,59958],{"class":125,"line":32898},[123,59959,59960],{"class":133},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[123,59962,59963],{"class":125,"line":32904},[123,59964,53120],{"class":133},[123,59966,59967],{"class":125,"line":32915},[123,59968,59969],{"class":133},"    \u002F\u002F 获取元素\n",[123,59971,59972],{"class":125,"line":32921},[123,59973,59974],{"class":133},"    const img = document.querySelector('.slider-wrapper img')\n",[123,59976,59977],{"class":125,"line":32940},[123,59978,59979],{"class":133},"    const p = document.querySelector('.slider-footer p')\n",[123,59981,59982],{"class":125,"line":32946},[123,59983,59984],{"class":133},"    const footer = document.querySelector('.slider-footer')\n",[123,59986,59987],{"class":125,"line":32957},[123,59988,59989],{"class":133},"    \u002F\u002F 1. 右按钮业务\n",[123,59991,59992],{"class":125,"line":32963},[123,59993,59994],{"class":133},"    \u002F\u002F 1.1 获取右侧按钮 \n",[123,59996,59997],{"class":125,"line":32983},[123,59998,59999],{"class":133},"    const next = document.querySelector('.next')\n",[123,60001,60002],{"class":125,"line":32999},[123,60003,60004],{"class":133},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[123,60006,60007],{"class":125,"line":33005},[123,60008,60009],{"class":133},"    \u002F\u002F 1.2 注册点击事件\n",[123,60011,60012],{"class":125,"line":33019},[123,60013,2409],{"emptyLinePlaceholder":50},[123,60015,60016],{"class":125,"line":33025},[123,60017,60018],{"class":133},"    next.addEventListener('click', function () {\n",[123,60020,60021],{"class":125,"line":33031},[123,60022,60023],{"class":133},"      \u002F\u002F console.log(11)\n",[123,60025,60026],{"class":125,"line":33042},[123,60027,60028],{"class":133},"      i++\n",[123,60030,60031],{"class":125,"line":33048},[123,60032,60033],{"class":133},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[123,60035,60036],{"class":125,"line":33054},[123,60037,60038],{"class":133},"      \u002F\u002F if (i >= 8) {\n",[123,60040,60041],{"class":125,"line":33064},[123,60042,60043],{"class":133},"      \u002F\u002F   i = 0\n",[123,60045,60046],{"class":125,"line":33070},[123,60047,60048],{"class":133},"      \u002F\u002F }\n",[123,60050,60051],{"class":125,"line":33081},[123,60052,60053],{"class":133},"      i = i >= data.length ? 0 : i\n",[123,60055,60056],{"class":125,"line":33087},[123,60057,60058],{"class":133},"      \u002F\u002F 1.3 得到对应的对象\n",[123,60060,60061],{"class":125,"line":33097},[123,60062,60063],{"class":133},"      \u002F\u002F console.log(data[i])\n",[123,60065,60066],{"class":125,"line":33102},[123,60067,60068],{"class":133},"      \u002F\u002F 调用函数\n",[123,60070,60071],{"class":125,"line":33108},[123,60072,60073],{"class":133},"      toggle()\n",[123,60075,60076],{"class":125,"line":33157},[123,60077,33472],{"class":133},[123,60079,60080],{"class":125,"line":33204},[123,60081,2409],{"emptyLinePlaceholder":50},[123,60083,60084],{"class":125,"line":33209},[123,60085,60086],{"class":133},"    \u002F\u002F 2. 左侧按钮业务\n",[123,60088,60089],{"class":125,"line":33215},[123,60090,60091],{"class":133},"    \u002F\u002F 2.1 获取左侧按钮 \n",[123,60093,60094],{"class":125,"line":33234},[123,60095,60096],{"class":133},"    const prev = document.querySelector('.prev')\n",[123,60098,60099],{"class":125,"line":33240},[123,60100,60009],{"class":133},[123,60102,60103],{"class":125,"line":33260},[123,60104,60105],{"class":133},"    prev.addEventListener('click', function () {\n",[123,60107,60108],{"class":125,"line":33266},[123,60109,60110],{"class":133},"      i--\n",[123,60112,60113],{"class":125,"line":33272},[123,60114,60115],{"class":133},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[123,60117,60118],{"class":125,"line":33282},[123,60119,60120],{"class":133},"      \u002F\u002F if (i \u003C 0) {\n",[123,60122,60123],{"class":125,"line":33287},[123,60124,60125],{"class":133},"      \u002F\u002F   i = 7\n",[123,60127,60128],{"class":125,"line":33293},[123,60129,60048],{"class":133},[123,60131,60132],{"class":125,"line":33309},[123,60133,60134],{"class":133},"      i = i \u003C 0 ? data.length - 1 : i\n",[123,60136,60137],{"class":125,"line":33354},[123,60138,60058],{"class":133},[123,60140,60141],{"class":125,"line":33360},[123,60142,60063],{"class":133},[123,60144,60145],{"class":125,"line":33366},[123,60146,60068],{"class":133},[123,60148,60149],{"class":125,"line":33372},[123,60150,60073],{"class":133},[123,60152,60153],{"class":125,"line":33383},[123,60154,33472],{"class":133},[123,60156,60157],{"class":125,"line":33389},[123,60158,2409],{"emptyLinePlaceholder":50},[123,60160,60161],{"class":125,"line":33395},[123,60162,60163],{"class":133},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[123,60165,60166],{"class":125,"line":33401},[123,60167,60168],{"class":133},"    function toggle() {\n",[123,60170,60171],{"class":125,"line":33419},[123,60172,60173],{"class":133},"      \u002F\u002F 1.4 渲染对应的数据\n",[123,60175,60176],{"class":125,"line":33433},[123,60177,60178],{"class":133},"      img.src = data[i].url\n",[123,60180,60181],{"class":125,"line":33442},[123,60182,60183],{"class":133},"      p.innerHTML = data[i].title\n",[123,60185,60186],{"class":125,"line":33451},[123,60187,60188],{"class":133},"      footer.style.backgroundColor = data[i].color\n",[123,60190,60191],{"class":125,"line":33460},[123,60192,60193],{"class":133},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[123,60195,60196],{"class":125,"line":33469},[123,60197,60198],{"class":133},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[123,60200,60201],{"class":125,"line":33475},[123,60202,60203],{"class":133},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[123,60205,60206],{"class":125,"line":33481},[123,60207,2196],{"class":133},[123,60209,60210],{"class":125,"line":33489},[123,60211,2409],{"emptyLinePlaceholder":50},[123,60213,60214],{"class":125,"line":33494},[123,60215,60216],{"class":133},"    \u002F\u002F 3. 自动播放模块\n",[123,60218,60219],{"class":125,"line":33500},[123,60220,60221],{"class":133},"    let timerId = setInterval(function () {\n",[123,60223,60224],{"class":125,"line":33511},[123,60225,60226],{"class":133},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[123,60228,60229],{"class":125,"line":33517},[123,60230,60231],{"class":133},"      next.click()\n",[123,60233,60234],{"class":125,"line":33537},[123,60235,60236],{"class":133},"    }, 1000)\n",[123,60238,60239],{"class":125,"line":33543},[123,60240,2409],{"emptyLinePlaceholder":50},[123,60242,60243],{"class":125,"line":33549},[123,60244,60245],{"class":133},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[123,60247,60248],{"class":125,"line":33555},[123,60249,60250],{"class":133},"    const slider = document.querySelector('.slider')\n",[123,60252,60253],{"class":125,"line":33572},[123,60254,60255],{"class":133},"    \u002F\u002F 注册事件\n",[123,60257,60258],{"class":125,"line":33578},[123,60259,60260],{"class":133},"    slider.addEventListener('mouseenter', function () {\n",[123,60262,60263],{"class":125,"line":33584},[123,60264,60265],{"class":133},"      \u002F\u002F 停止定时器\n",[123,60267,60268],{"class":125,"line":33590},[123,60269,60270],{"class":133},"      clearInterval(timerId)\n",[123,60272,60273],{"class":125,"line":33596},[123,60274,33472],{"class":133},[123,60276,60277],{"class":125,"line":33602},[123,60278,2409],{"emptyLinePlaceholder":50},[123,60280,60281],{"class":125,"line":33629},[123,60282,60283],{"class":133},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[123,60285,60286],{"class":125,"line":33653},[123,60287,60255],{"class":133},[123,60289,60290],{"class":125,"line":33659},[123,60291,60292],{"class":133},"    slider.addEventListener('mouseleave', function () {\n",[123,60294,60295],{"class":125,"line":33665},[123,60296,60265],{"class":133},[123,60298,60299],{"class":125,"line":33671},[123,60300,60301],{"class":133},"      if (timerId) clearInterval(timerId)\n",[123,60303,60304],{"class":125,"line":33682},[123,60305,60306],{"class":133},"      \u002F\u002F 开启定时器\n",[123,60308,60309],{"class":125,"line":33693},[123,60310,60311],{"class":133},"      timerId = setInterval(function () {\n",[123,60313,60314],{"class":125,"line":33699},[123,60315,60316],{"class":133},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[123,60318,60319],{"class":125,"line":33716},[123,60320,60321],{"class":133},"        next.click()\n",[123,60323,60324],{"class":125,"line":33739},[123,60325,60326],{"class":133},"      }, 1000)\n",[123,60328,60329],{"class":125,"line":33762},[123,60330,33472],{"class":133},[123,60332,60333,60335,60337],{"class":125,"line":33768},[123,60334,52428],{"class":133},[123,60336,51824],{"class":51311},[123,60338,51318],{"class":133},[123,60340,60341,60343,60345],{"class":125,"line":33773},[123,60342,51796],{"class":133},[123,60344,51811],{"class":51311},[123,60346,51318],{"class":133},[123,60348,60349],{"class":125,"line":33782},[123,60350,2409],{"emptyLinePlaceholder":50},[123,60352,60353,60355,60357],{"class":125,"line":33792},[123,60354,51796],{"class":133},[123,60356,50646],{"class":51311},[123,60358,51318],{"class":133},[22008,60360,60362],{"id":60361},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60364,60365],{},"小米搜索框案例：",[114,60367,60369],{"className":50644,"code":60368,"language":50646,"meta":37,"style":37},"\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",[120,60370,60371,60381,60395,60399,60407,60421,60441,60461,60473,60481,60487,60497,60507,60519,60523,60527,60534,60538,60549,60553,60557,60564,60575,60588,60602,60606,60610,60619,60631,60643,60657,60670,60683,60701,60712,60716,60720,60729,60746,60750,60754,60761,60771,60781,60792,60805,60817,60833,60844,60856,60860,60864,60872,60883,60900,60912,60924,60935,60939,60943,60954,60965,60969,60977,60981,60989,60993,61001,61016,61039,61054,61085,61112,61139,61166,61193,61220,61247,61256,61264,61272,61277,61297,61317,61322,61327,61345,61350,61360,61365,61379,61384,61389,61406,61415,61427,61431,61439,61447,61451],{"__ignoreMap":37},[123,60372,60373,60375,60377,60379],{"class":125,"line":126},[123,60374,51308],{"class":133},[123,60376,51312],{"class":51311},[123,60378,51315],{"class":1972},[123,60380,51318],{"class":133},[123,60382,60383,60385,60387,60389,60391,60393],{"class":125,"line":45},[123,60384,1044],{"class":133},[123,60386,50646],{"class":51311},[123,60388,51327],{"class":1972},[123,60390,179],{"class":133},[123,60392,51332],{"class":238},[123,60394,51318],{"class":133},[123,60396,60397],{"class":125,"line":1189},[123,60398,2409],{"emptyLinePlaceholder":50},[123,60400,60401,60403,60405],{"class":125,"line":1204},[123,60402,1044],{"class":133},[123,60404,51345],{"class":51311},[123,60406,51318],{"class":133},[123,60408,60409,60411,60413,60415,60417,60419],{"class":125,"line":1210},[123,60410,51352],{"class":133},[123,60412,51355],{"class":51311},[123,60414,51358],{"class":1972},[123,60416,179],{"class":133},[123,60418,51363],{"class":238},[123,60420,51318],{"class":133},[123,60422,60423,60425,60427,60429,60431,60433,60435,60437,60439],{"class":125,"line":1224},[123,60424,51352],{"class":133},[123,60426,51355],{"class":51311},[123,60428,51374],{"class":1972},[123,60430,179],{"class":133},[123,60432,51379],{"class":238},[123,60434,51382],{"class":1972},[123,60436,179],{"class":133},[123,60438,51387],{"class":238},[123,60440,51318],{"class":133},[123,60442,60443,60445,60447,60449,60451,60453,60455,60457,60459],{"class":125,"line":1230},[123,60444,51352],{"class":133},[123,60446,51355],{"class":51311},[123,60448,14930],{"class":1972},[123,60450,179],{"class":133},[123,60452,51402],{"class":238},[123,60454,51382],{"class":1972},[123,60456,179],{"class":133},[123,60458,51409],{"class":238},[123,60460,51318],{"class":133},[123,60462,60463,60465,60467,60469,60471],{"class":125,"line":1321},[123,60464,51352],{"class":133},[123,60466,51418],{"class":51311},[123,60468,51421],{"class":133},[123,60470,51418],{"class":51311},[123,60472,51318],{"class":133},[123,60474,60475,60477,60479],{"class":125,"line":1327},[123,60476,51352],{"class":133},[123,60478,5136],{"class":51311},[123,60480,51318],{"class":133},[123,60482,60483,60485],{"class":125,"line":1339},[123,60484,51438],{"class":51311},[123,60486,15582],{"class":133},[123,60488,60489,60491,60493,60495],{"class":125,"line":1621},[123,60490,51445],{"class":182},[123,60492,51448],{"class":133},[123,60494,325],{"class":182},[123,60496,1300],{"class":133},[123,60498,60499,60501,60503,60505],{"class":125,"line":1626},[123,60500,51457],{"class":182},[123,60502,51448],{"class":133},[123,60504,325],{"class":182},[123,60506,1300],{"class":133},[123,60508,60509,60512,60514,60517],{"class":125,"line":1632},[123,60510,60511],{"class":182},"            box-sizing",[123,60513,51448],{"class":133},[123,60515,60516],{"class":182},"border-box",[123,60518,1300],{"class":133},[123,60520,60521],{"class":125,"line":1637},[123,60522,2538],{"class":133},[123,60524,60525],{"class":125,"line":1651},[123,60526,2409],{"emptyLinePlaceholder":50},[123,60528,60529,60532],{"class":125,"line":1656},[123,60530,60531],{"class":51311},"        ul",[123,60533,15582],{"class":133},[123,60535,60536],{"class":125,"line":1662},[123,60537,2409],{"emptyLinePlaceholder":50},[123,60539,60540,60543,60545,60547],{"class":125,"line":1683},[123,60541,60542],{"class":182},"            list-style",[123,60544,51448],{"class":133},[123,60546,54748],{"class":182},[123,60548,1300],{"class":133},[123,60550,60551],{"class":125,"line":1688},[123,60552,2538],{"class":133},[123,60554,60555],{"class":125,"line":1702},[123,60556,2409],{"emptyLinePlaceholder":50},[123,60558,60559,60562],{"class":125,"line":1707},[123,60560,60561],{"class":1972},"        .mi",[123,60563,15582],{"class":133},[123,60565,60566,60569,60571,60573],{"class":125,"line":1736},[123,60567,60568],{"class":182},"            position",[123,60570,51448],{"class":133},[123,60572,54775],{"class":182},[123,60574,1300],{"class":133},[123,60576,60577,60579,60581,60584,60586],{"class":125,"line":1741},[123,60578,51495],{"class":182},[123,60580,51448],{"class":133},[123,60582,60583],{"class":182},"223",[123,60585,51503],{"class":129},[123,60587,1300],{"class":133},[123,60589,60590,60592,60594,60596,60598,60600],{"class":125,"line":1758},[123,60591,51445],{"class":182},[123,60593,51448],{"class":133},[123,60595,445],{"class":182},[123,60597,51503],{"class":129},[123,60599,51567],{"class":182},[123,60601,1300],{"class":133},[123,60603,60604],{"class":125,"line":1763},[123,60605,2538],{"class":133},[123,60607,60608],{"class":125,"line":1768},[123,60609,2409],{"emptyLinePlaceholder":50},[123,60611,60612,60614,60617],{"class":125,"line":1773},[123,60613,60561],{"class":1972},[123,60615,60616],{"class":51311}," input",[123,60618,15582],{"class":133},[123,60620,60621,60623,60625,60627,60629],{"class":125,"line":1787},[123,60622,51495],{"class":182},[123,60624,51448],{"class":133},[123,60626,60583],{"class":182},[123,60628,51503],{"class":129},[123,60630,1300],{"class":133},[123,60632,60633,60635,60637,60639,60641],{"class":125,"line":1792},[123,60634,51510],{"class":182},[123,60636,51448],{"class":133},[123,60638,741],{"class":182},[123,60640,51503],{"class":129},[123,60642,1300],{"class":133},[123,60644,60645,60647,60649,60651,60653,60655],{"class":125,"line":2586},[123,60646,51457],{"class":182},[123,60648,51448],{"class":133},[123,60650,325],{"class":182},[123,60652,2047],{"class":182},[123,60654,51503],{"class":129},[123,60656,1300],{"class":133},[123,60658,60659,60662,60664,60666,60668],{"class":125,"line":2600},[123,60660,60661],{"class":182},"            font-size",[123,60663,51448],{"class":133},[123,60665,683],{"class":182},[123,60667,51503],{"class":129},[123,60669,1300],{"class":133},[123,60671,60672,60675,60677,60679,60681],{"class":125,"line":2608},[123,60673,60674],{"class":182},"            line-height",[123,60676,51448],{"class":133},[123,60678,741],{"class":182},[123,60680,51503],{"class":129},[123,60682,1300],{"class":133},[123,60684,60685,60688,60690,60692,60694,60696,60699],{"class":125,"line":2613},[123,60686,60687],{"class":182},"            border",[123,60689,51448],{"class":133},[123,60691,351],{"class":182},[123,60693,51503],{"class":129},[123,60695,51532],{"class":182},[123,60697,60698],{"class":182}," #e0e0e0",[123,60700,1300],{"class":133},[123,60702,60703,60706,60708,60710],{"class":125,"line":2619},[123,60704,60705],{"class":182},"            outline",[123,60707,51448],{"class":133},[123,60709,54748],{"class":182},[123,60711,1300],{"class":133},[123,60713,60714],{"class":125,"line":2625},[123,60715,2538],{"class":133},[123,60717,60718],{"class":125,"line":2630},[123,60719,2409],{"emptyLinePlaceholder":50},[123,60721,60722,60724,60727],{"class":125,"line":7958},[123,60723,60561],{"class":1972},[123,60725,60726],{"class":1972}," .search",[123,60728,15582],{"class":133},[123,60730,60731,60733,60735,60737,60739,60741,60744],{"class":125,"line":7982},[123,60732,60687],{"class":182},[123,60734,51448],{"class":133},[123,60736,351],{"class":182},[123,60738,51503],{"class":129},[123,60740,51532],{"class":182},[123,60742,60743],{"class":182}," #ff6700",[123,60745,1300],{"class":133},[123,60747,60748],{"class":125,"line":7987},[123,60749,2538],{"class":133},[123,60751,60752],{"class":125,"line":7993},[123,60753,2409],{"emptyLinePlaceholder":50},[123,60755,60756,60759],{"class":125,"line":8020},[123,60757,60758],{"class":1972},"        .result-list",[123,60760,15582],{"class":133},[123,60762,60763,60765,60767,60769],{"class":125,"line":8025},[123,60764,51483],{"class":182},[123,60766,51448],{"class":133},[123,60768,54748],{"class":182},[123,60770,1300],{"class":133},[123,60772,60773,60775,60777,60779],{"class":125,"line":8031},[123,60774,60568],{"class":182},[123,60776,51448],{"class":133},[123,60778,54842],{"class":182},[123,60780,1300],{"class":133},[123,60782,60783,60786,60788,60790],{"class":125,"line":8043},[123,60784,60785],{"class":182},"            left",[123,60787,51448],{"class":133},[123,60789,325],{"class":182},[123,60791,1300],{"class":133},[123,60793,60794,60797,60799,60801,60803],{"class":125,"line":8055},[123,60795,60796],{"class":182},"            top",[123,60798,51448],{"class":133},[123,60800,741],{"class":182},[123,60802,51503],{"class":129},[123,60804,1300],{"class":133},[123,60806,60807,60809,60811,60813,60815],{"class":125,"line":8067},[123,60808,51495],{"class":182},[123,60810,51448],{"class":133},[123,60812,60583],{"class":182},[123,60814,51503],{"class":129},[123,60816,1300],{"class":133},[123,60818,60819,60821,60823,60825,60827,60829,60831],{"class":125,"line":9726},[123,60820,60687],{"class":182},[123,60822,51448],{"class":133},[123,60824,351],{"class":182},[123,60826,51503],{"class":129},[123,60828,51532],{"class":182},[123,60830,60743],{"class":182},[123,60832,1300],{"class":133},[123,60834,60835,60838,60840,60842],{"class":125,"line":9751},[123,60836,60837],{"class":182},"            border-top",[123,60839,51448],{"class":133},[123,60841,325],{"class":182},[123,60843,1300],{"class":133},[123,60845,60846,60849,60851,60854],{"class":125,"line":9774},[123,60847,60848],{"class":182},"            background",[123,60850,51448],{"class":133},[123,60852,60853],{"class":182},"#fff",[123,60855,1300],{"class":133},[123,60857,60858],{"class":125,"line":9798},[123,60859,2538],{"class":133},[123,60861,60862],{"class":125,"line":9803},[123,60863,2409],{"emptyLinePlaceholder":50},[123,60865,60866,60868,60870],{"class":125,"line":9808},[123,60867,60758],{"class":1972},[123,60869,1408],{"class":51311},[123,60871,15582],{"class":133},[123,60873,60874,60876,60878,60881],{"class":125,"line":9813},[123,60875,51483],{"class":182},[123,60877,51448],{"class":133},[123,60879,60880],{"class":182},"block",[123,60882,1300],{"class":133},[123,60884,60885,60887,60889,60891,60893,60896,60898],{"class":125,"line":9822},[123,60886,51457],{"class":182},[123,60888,51448],{"class":133},[123,60890,478],{"class":182},[123,60892,51503],{"class":129},[123,60894,60895],{"class":182}," 15",[123,60897,51503],{"class":129},[123,60899,1300],{"class":133},[123,60901,60902,60904,60906,60908,60910],{"class":125,"line":9827},[123,60903,60661],{"class":182},[123,60905,51448],{"class":133},[123,60907,632],{"class":182},[123,60909,51503],{"class":129},[123,60911,1300],{"class":133},[123,60913,60914,60917,60919,60922],{"class":125,"line":9833},[123,60915,60916],{"class":182},"            color",[123,60918,51448],{"class":133},[123,60920,60921],{"class":182},"#424242",[123,60923,1300],{"class":133},[123,60925,60926,60929,60931,60933],{"class":125,"line":9854},[123,60927,60928],{"class":182},"            text-decoration",[123,60930,51448],{"class":133},[123,60932,54748],{"class":182},[123,60934,1300],{"class":133},[123,60936,60937],{"class":125,"line":9860},[123,60938,2538],{"class":133},[123,60940,60941],{"class":125,"line":9874},[123,60942,2409],{"emptyLinePlaceholder":50},[123,60944,60945,60947,60949,60952],{"class":125,"line":9880},[123,60946,60758],{"class":1972},[123,60948,1408],{"class":51311},[123,60950,60951],{"class":1972},":hover",[123,60953,15582],{"class":133},[123,60955,60956,60958,60960,60963],{"class":125,"line":9907},[123,60957,51651],{"class":182},[123,60959,51448],{"class":133},[123,60961,60962],{"class":182},"#eee",[123,60964,1300],{"class":133},[123,60966,60967],{"class":125,"line":9916},[123,60968,2538],{"class":133},[123,60970,60971,60973,60975],{"class":125,"line":9922},[123,60972,51787],{"class":133},[123,60974,5136],{"class":51311},[123,60976,51318],{"class":133},[123,60978,60979],{"class":125,"line":9930},[123,60980,2409],{"emptyLinePlaceholder":50},[123,60982,60983,60985,60987],{"class":125,"line":9935},[123,60984,51796],{"class":133},[123,60986,51345],{"class":51311},[123,60988,51318],{"class":133},[123,60990,60991],{"class":125,"line":16614},[123,60992,2409],{"emptyLinePlaceholder":50},[123,60994,60995,60997,60999],{"class":125,"line":16620},[123,60996,1044],{"class":133},[123,60998,51811],{"class":51311},[123,61000,51318],{"class":133},[123,61002,61003,61005,61007,61009,61011,61014],{"class":125,"line":16643},[123,61004,51352],{"class":133},[123,61006,51622],{"class":51311},[123,61008,53497],{"class":1972},[123,61010,179],{"class":133},[123,61012,61013],{"class":238},"\"mi\"",[123,61015,51318],{"class":133},[123,61017,61018,61020,61022,61024,61026,61029,61032,61034,61037],{"class":125,"line":16649},[123,61019,55313],{"class":133},[123,61021,53832],{"class":51311},[123,61023,53835],{"class":1972},[123,61025,179],{"class":133},[123,61027,61028],{"class":238},"\"search\"",[123,61030,61031],{"class":1972}," placeholder",[123,61033,179],{"class":133},[123,61035,61036],{"class":238},"\"小米笔记本\"",[123,61038,51318],{"class":133},[123,61040,61041,61043,61045,61047,61049,61052],{"class":125,"line":16672},[123,61042,55313],{"class":133},[123,61044,1141],{"class":51311},[123,61046,53497],{"class":1972},[123,61048,179],{"class":133},[123,61050,61051],{"class":238},"\"result-list\"",[123,61053,51318],{"class":133},[123,61055,61056,61059,61061,61064,61066,61069,61071,61074,61077,61079,61081,61083],{"class":125,"line":16686},[123,61057,61058],{"class":133},"            \u003C",[123,61060,80],{"class":51311},[123,61062,61063],{"class":133},">\u003C",[123,61065,372],{"class":51311},[123,61067,61068],{"class":1972}," href",[123,61070,179],{"class":133},[123,61072,61073],{"class":238},"\"#\"",[123,61075,61076],{"class":133},">全部商品\u003C\u002F",[123,61078,372],{"class":51311},[123,61080,55325],{"class":133},[123,61082,80],{"class":51311},[123,61084,51318],{"class":133},[123,61086,61087,61089,61091,61093,61095,61097,61099,61101,61104,61106,61108,61110],{"class":125,"line":16706},[123,61088,61058],{"class":133},[123,61090,80],{"class":51311},[123,61092,61063],{"class":133},[123,61094,372],{"class":51311},[123,61096,61068],{"class":1972},[123,61098,179],{"class":133},[123,61100,61073],{"class":238},[123,61102,61103],{"class":133},">小米11\u003C\u002F",[123,61105,372],{"class":51311},[123,61107,55325],{"class":133},[123,61109,80],{"class":51311},[123,61111,51318],{"class":133},[123,61113,61114,61116,61118,61120,61122,61124,61126,61128,61131,61133,61135,61137],{"class":125,"line":16712},[123,61115,61058],{"class":133},[123,61117,80],{"class":51311},[123,61119,61063],{"class":133},[123,61121,372],{"class":51311},[123,61123,61068],{"class":1972},[123,61125,179],{"class":133},[123,61127,61073],{"class":238},[123,61129,61130],{"class":133},">小米10S\u003C\u002F",[123,61132,372],{"class":51311},[123,61134,55325],{"class":133},[123,61136,80],{"class":51311},[123,61138,51318],{"class":133},[123,61140,61141,61143,61145,61147,61149,61151,61153,61155,61158,61160,61162,61164],{"class":125,"line":16723},[123,61142,61058],{"class":133},[123,61144,80],{"class":51311},[123,61146,61063],{"class":133},[123,61148,372],{"class":51311},[123,61150,61068],{"class":1972},[123,61152,179],{"class":133},[123,61154,61073],{"class":238},[123,61156,61157],{"class":133},">小米笔记本\u003C\u002F",[123,61159,372],{"class":51311},[123,61161,55325],{"class":133},[123,61163,80],{"class":51311},[123,61165,51318],{"class":133},[123,61167,61168,61170,61172,61174,61176,61178,61180,61182,61185,61187,61189,61191],{"class":125,"line":16746},[123,61169,61058],{"class":133},[123,61171,80],{"class":51311},[123,61173,61063],{"class":133},[123,61175,372],{"class":51311},[123,61177,61068],{"class":1972},[123,61179,179],{"class":133},[123,61181,61073],{"class":238},[123,61183,61184],{"class":133},">小米手机\u003C\u002F",[123,61186,372],{"class":51311},[123,61188,55325],{"class":133},[123,61190,80],{"class":51311},[123,61192,51318],{"class":133},[123,61194,61195,61197,61199,61201,61203,61205,61207,61209,61212,61214,61216,61218],{"class":125,"line":16768},[123,61196,61058],{"class":133},[123,61198,80],{"class":51311},[123,61200,61063],{"class":133},[123,61202,372],{"class":51311},[123,61204,61068],{"class":1972},[123,61206,179],{"class":133},[123,61208,61073],{"class":238},[123,61210,61211],{"class":133},">黑鲨4\u003C\u002F",[123,61213,372],{"class":51311},[123,61215,55325],{"class":133},[123,61217,80],{"class":51311},[123,61219,51318],{"class":133},[123,61221,61222,61224,61226,61228,61230,61232,61234,61236,61239,61241,61243,61245],{"class":125,"line":16773},[123,61223,61058],{"class":133},[123,61225,80],{"class":51311},[123,61227,61063],{"class":133},[123,61229,372],{"class":51311},[123,61231,61068],{"class":1972},[123,61233,179],{"class":133},[123,61235,61073],{"class":238},[123,61237,61238],{"class":133},">空调\u003C\u002F",[123,61240,372],{"class":51311},[123,61242,55325],{"class":133},[123,61244,80],{"class":51311},[123,61246,51318],{"class":133},[123,61248,61249,61252,61254],{"class":125,"line":16779},[123,61250,61251],{"class":133},"        \u003C\u002F",[123,61253,1141],{"class":51311},[123,61255,51318],{"class":133},[123,61257,61258,61260,61262],{"class":125,"line":16793},[123,61259,51787],{"class":133},[123,61261,51622],{"class":51311},[123,61263,51318],{"class":133},[123,61265,61266,61268,61270],{"class":125,"line":16806},[123,61267,51352],{"class":133},[123,61269,51824],{"class":51311},[123,61271,51318],{"class":133},[123,61273,61274],{"class":125,"line":16811},[123,61275,61276],{"class":192},"        \u002F\u002F 1. 获取元素\n",[123,61278,61279,61282,61284,61286,61288,61290,61292,61295],{"class":125,"line":16825},[123,61280,61281],{"class":129},"        const",[123,61283,60616],{"class":182},[123,61285,13574],{"class":129},[123,61287,54407],{"class":133},[123,61289,54410],{"class":1972},[123,61291,134],{"class":133},[123,61293,61294],{"class":238},"'[type=search]'",[123,61296,140],{"class":133},[123,61298,61299,61301,61304,61306,61308,61310,61312,61315],{"class":125,"line":16830},[123,61300,61281],{"class":129},[123,61302,61303],{"class":182}," ul",[123,61305,13574],{"class":129},[123,61307,54407],{"class":133},[123,61309,54410],{"class":1972},[123,61311,134],{"class":133},[123,61313,61314],{"class":238},"'.result-list'",[123,61316,140],{"class":133},[123,61318,61319],{"class":125,"line":16836},[123,61320,61321],{"class":192},"        \u002F\u002F console.log(input)\n",[123,61323,61324],{"class":125,"line":16841},[123,61325,61326],{"class":192},"        \u002F\u002F 2. 监听事件 获得焦点\n",[123,61328,61329,61332,61334,61336,61339,61341,61343],{"class":125,"line":16855},[123,61330,61331],{"class":133},"        input.",[123,61333,57824],{"class":1972},[123,61335,134],{"class":133},[123,61337,61338],{"class":238},"'focus'",[123,61340,12445],{"class":133},[123,61342,54460],{"class":129},[123,61344,54463],{"class":133},[123,61346,61347],{"class":125,"line":16860},[123,61348,61349],{"class":192},"            \u002F\u002F ul显示\n",[123,61351,61352,61355,61357],{"class":125,"line":16865},[123,61353,61354],{"class":133},"            ul.style.display ",[123,61356,179],{"class":129},[123,61358,61359],{"class":238}," 'block'\n",[123,61361,61362],{"class":125,"line":16879},[123,61363,61364],{"class":192},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[123,61366,61367,61370,61372,61374,61377],{"class":125,"line":16891},[123,61368,61369],{"class":133},"            input.classList.",[123,61371,5344],{"class":1972},[123,61373,134],{"class":133},[123,61375,61376],{"class":238},"'search'",[123,61378,140],{"class":133},[123,61380,61381],{"class":125,"line":16896},[123,61382,61383],{"class":133},"        })\n",[123,61385,61386],{"class":125,"line":16909},[123,61387,61388],{"class":192},"        \u002F\u002F 3. 监听事件 失去焦点\n",[123,61390,61391,61393,61395,61397,61400,61402,61404],{"class":125,"line":16914},[123,61392,61331],{"class":133},[123,61394,57824],{"class":1972},[123,61396,134],{"class":133},[123,61398,61399],{"class":238},"'blur'",[123,61401,12445],{"class":133},[123,61403,54460],{"class":129},[123,61405,54463],{"class":133},[123,61407,61408,61410,61412],{"class":125,"line":16919},[123,61409,61354],{"class":133},[123,61411,179],{"class":129},[123,61413,61414],{"class":238}," 'none'\n",[123,61416,61417,61419,61421,61423,61425],{"class":125,"line":16924},[123,61418,61369],{"class":133},[123,61420,57017],{"class":1972},[123,61422,134],{"class":133},[123,61424,61376],{"class":238},[123,61426,140],{"class":133},[123,61428,61429],{"class":125,"line":16937},[123,61430,61383],{"class":133},[123,61432,61433,61435,61437],{"class":125,"line":16942},[123,61434,51787],{"class":133},[123,61436,51824],{"class":51311},[123,61438,51318],{"class":133},[123,61440,61441,61443,61445],{"class":125,"line":32644},[123,61442,51796],{"class":133},[123,61444,51811],{"class":51311},[123,61446,51318],{"class":133},[123,61448,61449],{"class":125,"line":32650},[123,61450,2409],{"emptyLinePlaceholder":50},[123,61452,61453,61455,61457],{"class":125,"line":32656},[123,61454,51796],{"class":133},[123,61456,50646],{"class":51311},[123,61458,51318],{"class":133},[22008,61460,61462],{"id":61461},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61464,61465],{},"评论字数统计案例",[14,61467,61468],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61470,61471],{},"牢记focus伪类选择器",[51355,61473],{"charSet":61474},"UTF-8",[51355,61476],{"name":61477,"content":61478},"viewport","width=device-width, initial-scale=1.0",[51418,61480,61481],{},"Document",[5136,61483,61484],{},"\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",[53832,61486],{"type":5197},[1141,61488,61489,61492],{},[80,61490,61491],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[80,61493,61494],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[114,61496,61498],{"className":50644,"code":61497,"language":50646,"meta":37,"style":37},"\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",[120,61499,61500,61510,61524,61528,61536,61550,61570,61590,61603,61611,61618,61631,61645,61655,61665,61669,61673,61680,61692,61704,61716,61728,61757,61770,61774,61778,61787,61798,61810,61821,61832,61844,61855,61867,61883,61895,61899,61903,61914,61925,61935,61947,61951,61955,61963,61974,61984,61995,62007,62020,62032,62044,62048,62052,62061,62073,62084,62097,62108,62122,62126,62130,62137,62149,62161,62171,62175,62179,62188,62200,62210,62214,62218,62229,62239,62258,62271,62275,62279,62289,62299,62303,62307,62318,62329,62341,62353,62357,62361,62372,62383,62397,62401,62405,62416,62426,62438,62442,62450,62458,62462,62470,62485,62504,62544,62557,62565,62579,62599,62607,62622,62645,62663,62678,62698,62718,62738,62746,62754,62762,62770,62790,62810,62815,62832,62841,62845,62850,62866,62874,62878,62883,62900,62905,62930,62934,62938,62943,62948,62956,62964,62968],{"__ignoreMap":37},[123,61501,61502,61504,61506,61508],{"class":125,"line":126},[123,61503,51308],{"class":133},[123,61505,51312],{"class":51311},[123,61507,51315],{"class":1972},[123,61509,51318],{"class":133},[123,61511,61512,61514,61516,61518,61520,61522],{"class":125,"line":45},[123,61513,1044],{"class":133},[123,61515,50646],{"class":51311},[123,61517,51327],{"class":1972},[123,61519,179],{"class":133},[123,61521,51332],{"class":238},[123,61523,51318],{"class":133},[123,61525,61526],{"class":125,"line":1189},[123,61527,2409],{"emptyLinePlaceholder":50},[123,61529,61530,61532,61534],{"class":125,"line":1204},[123,61531,1044],{"class":133},[123,61533,51345],{"class":51311},[123,61535,51318],{"class":133},[123,61537,61538,61540,61542,61544,61546,61548],{"class":125,"line":1210},[123,61539,52155],{"class":133},[123,61541,51355],{"class":51311},[123,61543,51358],{"class":1972},[123,61545,179],{"class":133},[123,61547,51363],{"class":238},[123,61549,51318],{"class":133},[123,61551,61552,61554,61556,61558,61560,61562,61564,61566,61568],{"class":125,"line":1224},[123,61553,52155],{"class":133},[123,61555,51355],{"class":51311},[123,61557,51374],{"class":1972},[123,61559,179],{"class":133},[123,61561,51379],{"class":238},[123,61563,51382],{"class":1972},[123,61565,179],{"class":133},[123,61567,51387],{"class":238},[123,61569,51318],{"class":133},[123,61571,61572,61574,61576,61578,61580,61582,61584,61586,61588],{"class":125,"line":1230},[123,61573,52155],{"class":133},[123,61575,51355],{"class":51311},[123,61577,14930],{"class":1972},[123,61579,179],{"class":133},[123,61581,51402],{"class":238},[123,61583,51382],{"class":1972},[123,61585,179],{"class":133},[123,61587,51409],{"class":238},[123,61589,51318],{"class":133},[123,61591,61592,61594,61596,61599,61601],{"class":125,"line":1321},[123,61593,52155],{"class":133},[123,61595,51418],{"class":51311},[123,61597,61598],{"class":133},">评论回车发布\u003C\u002F",[123,61600,51418],{"class":51311},[123,61602,51318],{"class":133},[123,61604,61605,61607,61609],{"class":125,"line":1327},[123,61606,52155],{"class":133},[123,61608,5136],{"class":51311},[123,61610,51318],{"class":133},[123,61612,61613,61616],{"class":125,"line":1339},[123,61614,61615],{"class":1972},"    .wrapper",[123,61617,15582],{"class":133},[123,61619,61620,61623,61625,61627,61629],{"class":125,"line":1621},[123,61621,61622],{"class":182},"      min-width",[123,61624,51448],{"class":133},[123,61626,3996],{"class":182},[123,61628,51503],{"class":129},[123,61630,1300],{"class":133},[123,61632,61633,61636,61638,61641,61643],{"class":125,"line":1626},[123,61634,61635],{"class":182},"      max-width",[123,61637,51448],{"class":133},[123,61639,61640],{"class":182},"800",[123,61642,51503],{"class":129},[123,61644,1300],{"class":133},[123,61646,61647,61649,61651,61653],{"class":125,"line":1632},[123,61648,55020],{"class":182},[123,61650,51448],{"class":133},[123,61652,51488],{"class":182},[123,61654,1300],{"class":133},[123,61656,61657,61659,61661,61663],{"class":125,"line":1637},[123,61658,55031],{"class":182},[123,61660,51448],{"class":133},[123,61662,51591],{"class":182},[123,61664,1300],{"class":133},[123,61666,61667],{"class":125,"line":1651},[123,61668,2196],{"class":133},[123,61670,61671],{"class":125,"line":1656},[123,61672,2409],{"emptyLinePlaceholder":50},[123,61674,61675,61678],{"class":125,"line":1662},[123,61676,61677],{"class":1972},"    .avatar",[123,61679,15582],{"class":133},[123,61681,61682,61684,61686,61688,61690],{"class":125,"line":1683},[123,61683,54782],{"class":182},[123,61685,51448],{"class":133},[123,61687,741],{"class":182},[123,61689,51503],{"class":129},[123,61691,1300],{"class":133},[123,61693,61694,61696,61698,61700,61702],{"class":125,"line":1688},[123,61695,54796],{"class":182},[123,61697,51448],{"class":133},[123,61699,741],{"class":182},[123,61701,51503],{"class":129},[123,61703,1300],{"class":133},[123,61705,61706,61708,61710,61712,61714],{"class":125,"line":1702},[123,61707,55145],{"class":182},[123,61709,51448],{"class":133},[123,61711,790],{"class":182},[123,61713,462],{"class":129},[123,61715,1300],{"class":133},[123,61717,61718,61721,61723,61726],{"class":125,"line":1707},[123,61719,61720],{"class":182},"      overflow",[123,61722,51448],{"class":133},[123,61724,61725],{"class":182},"hidden",[123,61727,1300],{"class":133},[123,61729,61730,61733,61735,61738,61740,61743,61745,61748,61750,61752,61755],{"class":125,"line":1736},[123,61731,61732],{"class":182},"      background",[123,61734,51448],{"class":133},[123,61736,61737],{"class":182},"url",[123,61739,134],{"class":133},[123,61741,61742],{"class":5226},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[123,61744,13724],{"class":133},[123,61746,61747],{"class":182},"no-repeat",[123,61749,17154],{"class":182},[123,61751,24989],{"class":133},[123,61753,61754],{"class":182},"cover",[123,61756,1300],{"class":133},[123,61758,61759,61762,61764,61766,61768],{"class":125,"line":1741},[123,61760,61761],{"class":182},"      margin-right",[123,61763,51448],{"class":133},[123,61765,834],{"class":182},[123,61767,51503],{"class":129},[123,61769,1300],{"class":133},[123,61771,61772],{"class":125,"line":1758},[123,61773,2196],{"class":133},[123,61775,61776],{"class":125,"line":1763},[123,61777,2409],{"emptyLinePlaceholder":50},[123,61779,61780,61782,61785],{"class":125,"line":1768},[123,61781,61615],{"class":1972},[123,61783,61784],{"class":51311}," textarea",[123,61786,15582],{"class":133},[123,61788,61789,61792,61794,61796],{"class":125,"line":1773},[123,61790,61791],{"class":182},"      outline",[123,61793,51448],{"class":133},[123,61795,54748],{"class":182},[123,61797,1300],{"class":133},[123,61799,61800,61803,61805,61808],{"class":125,"line":1787},[123,61801,61802],{"class":182},"      border-color",[123,61804,51448],{"class":133},[123,61806,61807],{"class":182},"transparent",[123,61809,1300],{"class":133},[123,61811,61812,61815,61817,61819],{"class":125,"line":1792},[123,61813,61814],{"class":182},"      resize",[123,61816,51448],{"class":133},[123,61818,54748],{"class":182},[123,61820,1300],{"class":133},[123,61822,61823,61825,61827,61830],{"class":125,"line":2586},[123,61824,61732],{"class":182},[123,61826,51448],{"class":133},[123,61828,61829],{"class":182},"#f5f5f5",[123,61831,1300],{"class":133},[123,61833,61834,61836,61838,61840,61842],{"class":125,"line":2600},[123,61835,55145],{"class":182},[123,61837,51448],{"class":133},[123,61839,427],{"class":182},[123,61841,51503],{"class":129},[123,61843,1300],{"class":133},[123,61845,61846,61849,61851,61853],{"class":125,"line":2608},[123,61847,61848],{"class":182},"      flex",[123,61850,51448],{"class":133},[123,61852,351],{"class":182},[123,61854,1300],{"class":133},[123,61856,61857,61859,61861,61863,61865],{"class":125,"line":2613},[123,61858,54706],{"class":182},[123,61860,51448],{"class":133},[123,61862,580],{"class":182},[123,61864,51503],{"class":129},[123,61866,1300],{"class":133},[123,61868,61869,61872,61874,61876,61879,61881],{"class":125,"line":2619},[123,61870,61871],{"class":182},"      transition",[123,61873,51448],{"class":133},[123,61875,28132],{"class":182},[123,61877,61878],{"class":182}," 0.5",[123,61880,829],{"class":129},[123,61882,1300],{"class":133},[123,61884,61885,61887,61889,61891,61893],{"class":125,"line":2625},[123,61886,54796],{"class":182},[123,61888,51448],{"class":133},[123,61890,1085],{"class":182},[123,61892,51503],{"class":129},[123,61894,1300],{"class":133},[123,61896,61897],{"class":125,"line":2630},[123,61898,2196],{"class":133},[123,61900,61901],{"class":125,"line":7958},[123,61902,2409],{"emptyLinePlaceholder":50},[123,61904,61905,61907,61909,61912],{"class":125,"line":7982},[123,61906,61615],{"class":1972},[123,61908,61784],{"class":51311},[123,61910,61911],{"class":1972},":focus",[123,61913,15582],{"class":133},[123,61915,61916,61918,61920,61923],{"class":125,"line":7987},[123,61917,61802],{"class":182},[123,61919,51448],{"class":133},[123,61921,61922],{"class":182},"#e4e4e4",[123,61924,1300],{"class":133},[123,61926,61927,61929,61931,61933],{"class":125,"line":7993},[123,61928,61732],{"class":182},[123,61930,51448],{"class":133},[123,61932,60853],{"class":182},[123,61934,1300],{"class":133},[123,61936,61937,61939,61941,61943,61945],{"class":125,"line":8020},[123,61938,54796],{"class":182},[123,61940,51448],{"class":133},[123,61942,790],{"class":182},[123,61944,51503],{"class":129},[123,61946,1300],{"class":133},[123,61948,61949],{"class":125,"line":8025},[123,61950,2196],{"class":133},[123,61952,61953],{"class":125,"line":8031},[123,61954,2409],{"emptyLinePlaceholder":50},[123,61956,61957,61959,61961],{"class":125,"line":8043},[123,61958,61615],{"class":1972},[123,61960,57478],{"class":51311},[123,61962,15582],{"class":133},[123,61964,61965,61967,61969,61972],{"class":125,"line":8055},[123,61966,61732],{"class":182},[123,61968,51448],{"class":133},[123,61970,61971],{"class":182},"#00aeec",[123,61973,1300],{"class":133},[123,61975,61976,61978,61980,61982],{"class":125,"line":8067},[123,61977,57427],{"class":182},[123,61979,51448],{"class":133},[123,61981,60853],{"class":182},[123,61983,1300],{"class":133},[123,61985,61986,61989,61991,61993],{"class":125,"line":9726},[123,61987,61988],{"class":182},"      border",[123,61990,51448],{"class":133},[123,61992,54748],{"class":182},[123,61994,1300],{"class":133},[123,61996,61997,61999,62001,62003,62005],{"class":125,"line":9751},[123,61998,55145],{"class":182},[123,62000,51448],{"class":133},[123,62002,427],{"class":182},[123,62004,51503],{"class":129},[123,62006,1300],{"class":133},[123,62008,62009,62012,62014,62016,62018],{"class":125,"line":9774},[123,62010,62011],{"class":182},"      margin-left",[123,62013,51448],{"class":133},[123,62015,580],{"class":182},[123,62017,51503],{"class":129},[123,62019,1300],{"class":133},[123,62021,62022,62024,62026,62028,62030],{"class":125,"line":9798},[123,62023,54782],{"class":182},[123,62025,51448],{"class":133},[123,62027,490],{"class":182},[123,62029,51503],{"class":129},[123,62031,1300],{"class":133},[123,62033,62034,62037,62039,62042],{"class":125,"line":9803},[123,62035,62036],{"class":182},"      cursor",[123,62038,51448],{"class":133},[123,62040,62041],{"class":182},"pointer",[123,62043,1300],{"class":133},[123,62045,62046],{"class":125,"line":9808},[123,62047,2196],{"class":133},[123,62049,62050],{"class":125,"line":9813},[123,62051,2409],{"emptyLinePlaceholder":50},[123,62053,62054,62056,62059],{"class":125,"line":9822},[123,62055,61615],{"class":1972},[123,62057,62058],{"class":1972}," .total",[123,62060,15582],{"class":133},[123,62062,62063,62065,62067,62069,62071],{"class":125,"line":9827},[123,62064,61761],{"class":182},[123,62066,51448],{"class":133},[123,62068,746],{"class":182},[123,62070,51503],{"class":129},[123,62072,1300],{"class":133},[123,62074,62075,62077,62079,62082],{"class":125,"line":9833},[123,62076,57427],{"class":182},[123,62078,51448],{"class":133},[123,62080,62081],{"class":182},"#999",[123,62083,1300],{"class":133},[123,62085,62086,62089,62091,62093,62095],{"class":125,"line":9854},[123,62087,62088],{"class":182},"      margin-top",[123,62090,51448],{"class":133},[123,62092,453],{"class":182},[123,62094,51503],{"class":129},[123,62096,1300],{"class":133},[123,62098,62099,62102,62104,62106],{"class":125,"line":9860},[123,62100,62101],{"class":182},"      opacity",[123,62103,51448],{"class":133},[123,62105,325],{"class":182},[123,62107,1300],{"class":133},[123,62109,62110,62112,62114,62116,62118,62120],{"class":125,"line":9874},[123,62111,61871],{"class":182},[123,62113,51448],{"class":133},[123,62115,28132],{"class":182},[123,62117,61878],{"class":182},[123,62119,829],{"class":129},[123,62121,1300],{"class":133},[123,62123,62124],{"class":125,"line":9880},[123,62125,2196],{"class":133},[123,62127,62128],{"class":125,"line":9907},[123,62129,2409],{"emptyLinePlaceholder":50},[123,62131,62132,62135],{"class":125,"line":9916},[123,62133,62134],{"class":1972},"    .list",[123,62136,15582],{"class":133},[123,62138,62139,62141,62143,62145,62147],{"class":125,"line":9922},[123,62140,61622],{"class":182},[123,62142,51448],{"class":133},[123,62144,3996],{"class":182},[123,62146,51503],{"class":129},[123,62148,1300],{"class":133},[123,62150,62151,62153,62155,62157,62159],{"class":125,"line":9930},[123,62152,61635],{"class":182},[123,62154,51448],{"class":133},[123,62156,61640],{"class":182},[123,62158,51503],{"class":129},[123,62160,1300],{"class":133},[123,62162,62163,62165,62167,62169],{"class":125,"line":9935},[123,62164,55020],{"class":182},[123,62166,51448],{"class":133},[123,62168,51488],{"class":182},[123,62170,1300],{"class":133},[123,62172,62173],{"class":125,"line":16614},[123,62174,2196],{"class":133},[123,62176,62177],{"class":125,"line":16620},[123,62178,2409],{"emptyLinePlaceholder":50},[123,62180,62181,62183,62186],{"class":125,"line":16643},[123,62182,62134],{"class":1972},[123,62184,62185],{"class":1972}," .item",[123,62187,15582],{"class":133},[123,62189,62190,62192,62194,62196,62198],{"class":125,"line":16649},[123,62191,54782],{"class":182},[123,62193,51448],{"class":133},[123,62195,445],{"class":182},[123,62197,462],{"class":129},[123,62199,1300],{"class":133},[123,62201,62202,62204,62206,62208],{"class":125,"line":16672},[123,62203,55020],{"class":182},[123,62205,51448],{"class":133},[123,62207,51488],{"class":182},[123,62209,1300],{"class":133},[123,62211,62212],{"class":125,"line":16686},[123,62213,2196],{"class":133},[123,62215,62216],{"class":125,"line":16706},[123,62217,2409],{"emptyLinePlaceholder":50},[123,62219,62220,62222,62224,62227],{"class":125,"line":16712},[123,62221,62134],{"class":1972},[123,62223,62185],{"class":1972},[123,62225,62226],{"class":1972}," .info",[123,62228,15582],{"class":133},[123,62230,62231,62233,62235,62237],{"class":125,"line":16723},[123,62232,61848],{"class":182},[123,62234,51448],{"class":133},[123,62236,351],{"class":182},[123,62238,1300],{"class":133},[123,62240,62241,62244,62246,62248,62250,62253,62256],{"class":125,"line":16746},[123,62242,62243],{"class":182},"      border-bottom",[123,62245,51448],{"class":133},[123,62247,351],{"class":182},[123,62249,51503],{"class":129},[123,62251,62252],{"class":182}," dashed",[123,62254,62255],{"class":182}," #e4e4e4",[123,62257,1300],{"class":133},[123,62259,62260,62263,62265,62267,62269],{"class":125,"line":16768},[123,62261,62262],{"class":182},"      padding-bottom",[123,62264,51448],{"class":133},[123,62266,580],{"class":182},[123,62268,51503],{"class":129},[123,62270,1300],{"class":133},[123,62272,62273],{"class":125,"line":16773},[123,62274,2196],{"class":133},[123,62276,62277],{"class":125,"line":16779},[123,62278,2409],{"emptyLinePlaceholder":50},[123,62280,62281,62283,62285,62287],{"class":125,"line":16793},[123,62282,62134],{"class":1972},[123,62284,62185],{"class":1972},[123,62286,6835],{"class":51311},[123,62288,15582],{"class":133},[123,62290,62291,62293,62295,62297],{"class":125,"line":16806},[123,62292,54717],{"class":182},[123,62294,51448],{"class":133},[123,62296,325],{"class":182},[123,62298,1300],{"class":133},[123,62300,62301],{"class":125,"line":16811},[123,62302,2196],{"class":133},[123,62304,62305],{"class":125,"line":16825},[123,62306,2409],{"emptyLinePlaceholder":50},[123,62308,62309,62311,62313,62316],{"class":125,"line":16830},[123,62310,62134],{"class":1972},[123,62312,62185],{"class":1972},[123,62314,62315],{"class":1972}," .name",[123,62317,15582],{"class":133},[123,62319,62320,62322,62324,62327],{"class":125,"line":16836},[123,62321,57427],{"class":182},[123,62323,51448],{"class":133},[123,62325,62326],{"class":182},"#FB7299",[123,62328,1300],{"class":133},[123,62330,62331,62333,62335,62337,62339],{"class":125,"line":16841},[123,62332,54933],{"class":182},[123,62334,51448],{"class":133},[123,62336,683],{"class":182},[123,62338,51503],{"class":129},[123,62340,1300],{"class":133},[123,62342,62343,62346,62348,62351],{"class":125,"line":16855},[123,62344,62345],{"class":182},"      font-weight",[123,62347,51448],{"class":133},[123,62349,62350],{"class":182},"bold",[123,62352,1300],{"class":133},[123,62354,62355],{"class":125,"line":16860},[123,62356,2196],{"class":133},[123,62358,62359],{"class":125,"line":16865},[123,62360,2409],{"emptyLinePlaceholder":50},[123,62362,62363,62365,62367,62370],{"class":125,"line":16879},[123,62364,62134],{"class":1972},[123,62366,62185],{"class":1972},[123,62368,62369],{"class":1972}," .text",[123,62371,15582],{"class":133},[123,62373,62374,62376,62378,62381],{"class":125,"line":16891},[123,62375,57427],{"class":182},[123,62377,51448],{"class":133},[123,62379,62380],{"class":182},"#333",[123,62382,1300],{"class":133},[123,62384,62385,62387,62389,62391,62393,62395],{"class":125,"line":16896},[123,62386,54706],{"class":182},[123,62388,51448],{"class":133},[123,62390,580],{"class":182},[123,62392,51503],{"class":129},[123,62394,4102],{"class":182},[123,62396,1300],{"class":133},[123,62398,62399],{"class":125,"line":16909},[123,62400,2196],{"class":133},[123,62402,62403],{"class":125,"line":16914},[123,62404,2409],{"emptyLinePlaceholder":50},[123,62406,62407,62409,62411,62414],{"class":125,"line":16919},[123,62408,62134],{"class":1972},[123,62410,62185],{"class":1972},[123,62412,62413],{"class":1972}," .time",[123,62415,15582],{"class":133},[123,62417,62418,62420,62422,62424],{"class":125,"line":16924},[123,62419,57427],{"class":182},[123,62421,51448],{"class":133},[123,62423,62081],{"class":182},[123,62425,1300],{"class":133},[123,62427,62428,62430,62432,62434,62436],{"class":125,"line":16937},[123,62429,54933],{"class":182},[123,62431,51448],{"class":133},[123,62433,632],{"class":182},[123,62435,51503],{"class":129},[123,62437,1300],{"class":133},[123,62439,62440],{"class":125,"line":16942},[123,62441,2196],{"class":133},[123,62443,62444,62446,62448],{"class":125,"line":32644},[123,62445,52428],{"class":133},[123,62447,5136],{"class":51311},[123,62449,51318],{"class":133},[123,62451,62452,62454,62456],{"class":125,"line":32650},[123,62453,51796],{"class":133},[123,62455,51345],{"class":51311},[123,62457,51318],{"class":133},[123,62459,62460],{"class":125,"line":32656},[123,62461,2409],{"emptyLinePlaceholder":50},[123,62463,62464,62466,62468],{"class":125,"line":32662},[123,62465,1044],{"class":133},[123,62467,51811],{"class":51311},[123,62469,51318],{"class":133},[123,62471,62472,62474,62476,62478,62480,62483],{"class":125,"line":32668},[123,62473,52155],{"class":133},[123,62475,51622],{"class":51311},[123,62477,53497],{"class":1972},[123,62479,179],{"class":133},[123,62481,62482],{"class":238},"\"wrapper\"",[123,62484,51318],{"class":133},[123,62486,62487,62489,62491,62493,62495,62498,62500,62502],{"class":125,"line":32679},[123,62488,51352],{"class":133},[123,62490,575],{"class":51311},[123,62492,53497],{"class":1972},[123,62494,179],{"class":133},[123,62496,62497],{"class":238},"\"avatar\"",[123,62499,55325],{"class":133},[123,62501,575],{"class":51311},[123,62503,51318],{"class":133},[123,62505,62506,62508,62510,62512,62514,62517,62519,62521,62524,62526,62528,62530,62533,62535,62538,62540,62542],{"class":125,"line":32685},[123,62507,51352],{"class":133},[123,62509,54299],{"class":51311},[123,62511,14969],{"class":1972},[123,62513,179],{"class":133},[123,62515,62516],{"class":238},"\"tx\"",[123,62518,61031],{"class":1972},[123,62520,179],{"class":133},[123,62522,62523],{"class":238},"\"发一条友善的评论\"",[123,62525,54322],{"class":1972},[123,62527,179],{"class":133},[123,62529,3710],{"class":238},[123,62531,62532],{"class":1972}," maxlength",[123,62534,179],{"class":133},[123,62536,62537],{"class":238},"\"200\"",[123,62539,55325],{"class":133},[123,62541,54299],{"class":51311},[123,62543,51318],{"class":133},[123,62545,62546,62548,62550,62553,62555],{"class":125,"line":32705},[123,62547,51352],{"class":133},[123,62549,53898],{"class":51311},[123,62551,62552],{"class":133},">发布\u003C\u002F",[123,62554,53898],{"class":51311},[123,62556,51318],{"class":133},[123,62558,62559,62561,62563],{"class":125,"line":32711},[123,62560,52428],{"class":133},[123,62562,51622],{"class":51311},[123,62564,51318],{"class":133},[123,62566,62567,62569,62571,62573,62575,62577],{"class":125,"line":32722},[123,62568,52155],{"class":133},[123,62570,51622],{"class":51311},[123,62572,53497],{"class":1972},[123,62574,179],{"class":133},[123,62576,62482],{"class":238},[123,62578,51318],{"class":133},[123,62580,62581,62583,62585,62587,62589,62592,62595,62597],{"class":125,"line":32728},[123,62582,51352],{"class":133},[123,62584,123],{"class":51311},[123,62586,53497],{"class":1972},[123,62588,179],{"class":133},[123,62590,62591],{"class":238},"\"total\"",[123,62593,62594],{"class":133},">0\u002F200字\u003C\u002F",[123,62596,123],{"class":51311},[123,62598,51318],{"class":133},[123,62600,62601,62603,62605],{"class":125,"line":32734},[123,62602,52428],{"class":133},[123,62604,51622],{"class":51311},[123,62606,51318],{"class":133},[123,62608,62609,62611,62613,62615,62617,62620],{"class":125,"line":32740},[123,62610,52155],{"class":133},[123,62612,51622],{"class":51311},[123,62614,53497],{"class":1972},[123,62616,179],{"class":133},[123,62618,62619],{"class":238},"\"list\"",[123,62621,51318],{"class":133},[123,62623,62624,62626,62628,62630,62632,62635,62638,62640,62643],{"class":125,"line":32746},[123,62625,51352],{"class":133},[123,62627,51622],{"class":51311},[123,62629,53497],{"class":1972},[123,62631,179],{"class":133},[123,62633,62634],{"class":238},"\"item\"",[123,62636,62637],{"class":1972}," style",[123,62639,179],{"class":133},[123,62641,62642],{"class":238},"\"display: none;\"",[123,62644,51318],{"class":133},[123,62646,62647,62649,62651,62653,62655,62657,62659,62661],{"class":125,"line":32752},[123,62648,55245],{"class":133},[123,62650,575],{"class":51311},[123,62652,53497],{"class":1972},[123,62654,179],{"class":133},[123,62656,62497],{"class":238},[123,62658,55325],{"class":133},[123,62660,575],{"class":51311},[123,62662,51318],{"class":133},[123,62664,62665,62667,62669,62671,62673,62676],{"class":125,"line":32758},[123,62666,55245],{"class":133},[123,62668,51622],{"class":51311},[123,62670,53497],{"class":1972},[123,62672,179],{"class":133},[123,62674,62675],{"class":238},"\"info\"",[123,62677,51318],{"class":133},[123,62679,62680,62682,62684,62686,62688,62691,62694,62696],{"class":125,"line":32764},[123,62681,55313],{"class":133},[123,62683,14],{"class":51311},[123,62685,53497],{"class":1972},[123,62687,179],{"class":133},[123,62689,62690],{"class":238},"\"name\"",[123,62692,62693],{"class":133},">清风徐来\u003C\u002F",[123,62695,14],{"class":51311},[123,62697,51318],{"class":133},[123,62699,62700,62702,62704,62706,62708,62711,62714,62716],{"class":125,"line":32784},[123,62701,55313],{"class":133},[123,62703,14],{"class":51311},[123,62705,53497],{"class":1972},[123,62707,179],{"class":133},[123,62709,62710],{"class":238},"\"text\"",[123,62712,62713],{"class":133},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[123,62715,14],{"class":51311},[123,62717,51318],{"class":133},[123,62719,62720,62722,62724,62726,62728,62731,62734,62736],{"class":125,"line":32790},[123,62721,55313],{"class":133},[123,62723,14],{"class":51311},[123,62725,53497],{"class":1972},[123,62727,179],{"class":133},[123,62729,62730],{"class":238},"\"time\"",[123,62732,62733],{"class":133},">2022-10-10 20:29:21\u003C\u002F",[123,62735,14],{"class":51311},[123,62737,51318],{"class":133},[123,62739,62740,62742,62744],{"class":125,"line":32806},[123,62741,55418],{"class":133},[123,62743,51622],{"class":51311},[123,62745,51318],{"class":133},[123,62747,62748,62750,62752],{"class":125,"line":32812},[123,62749,51787],{"class":133},[123,62751,51622],{"class":51311},[123,62753,51318],{"class":133},[123,62755,62756,62758,62760],{"class":125,"line":32826},[123,62757,52428],{"class":133},[123,62759,51622],{"class":51311},[123,62761,51318],{"class":133},[123,62763,62764,62766,62768],{"class":125,"line":32832},[123,62765,52155],{"class":133},[123,62767,51824],{"class":51311},[123,62769,51318],{"class":133},[123,62771,62772,62774,62777,62779,62781,62783,62785,62788],{"class":125,"line":32847},[123,62773,11231],{"class":129},[123,62775,62776],{"class":182}," tx",[123,62778,13574],{"class":129},[123,62780,54407],{"class":133},[123,62782,54410],{"class":1972},[123,62784,134],{"class":133},[123,62786,62787],{"class":238},"'#tx'",[123,62789,140],{"class":133},[123,62791,62792,62794,62797,62799,62801,62803,62805,62808],{"class":125,"line":32853},[123,62793,11231],{"class":129},[123,62795,62796],{"class":182}," total",[123,62798,13574],{"class":129},[123,62800,54407],{"class":133},[123,62802,54410],{"class":1972},[123,62804,134],{"class":133},[123,62806,62807],{"class":238},"'.total'",[123,62809,140],{"class":133},[123,62811,62812],{"class":125,"line":32862},[123,62813,62814],{"class":192},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[123,62816,62817,62820,62822,62824,62826,62828,62830],{"class":125,"line":32868},[123,62818,62819],{"class":133},"    tx.",[123,62821,57824],{"class":1972},[123,62823,134],{"class":133},[123,62825,61338],{"class":238},[123,62827,12445],{"class":133},[123,62829,54460],{"class":129},[123,62831,54463],{"class":133},[123,62833,62834,62837,62839],{"class":125,"line":32877},[123,62835,62836],{"class":133},"      total.style.opacity ",[123,62838,179],{"class":129},[123,62840,55710],{"class":182},[123,62842,62843],{"class":125,"line":32883},[123,62844,33472],{"class":133},[123,62846,62847],{"class":125,"line":32889},[123,62848,62849],{"class":192},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[123,62851,62852,62854,62856,62858,62860,62862,62864],{"class":125,"line":32898},[123,62853,62819],{"class":133},[123,62855,57824],{"class":1972},[123,62857,134],{"class":133},[123,62859,61399],{"class":238},[123,62861,12445],{"class":133},[123,62863,54460],{"class":129},[123,62865,54463],{"class":133},[123,62867,62868,62870,62872],{"class":125,"line":32904},[123,62869,62836],{"class":133},[123,62871,179],{"class":129},[123,62873,47344],{"class":182},[123,62875,62876],{"class":125,"line":32915},[123,62877,33472],{"class":133},[123,62879,62880],{"class":125,"line":32921},[123,62881,62882],{"class":192},"    \u002F\u002F 3. 检测用户输入\n",[123,62884,62885,62887,62889,62891,62894,62896,62898],{"class":125,"line":32940},[123,62886,62819],{"class":133},[123,62888,57824],{"class":1972},[123,62890,134],{"class":133},[123,62892,62893],{"class":238},"'input'",[123,62895,12445],{"class":133},[123,62897,54460],{"class":129},[123,62899,54463],{"class":133},[123,62901,62902],{"class":125,"line":32946},[123,62903,62904],{"class":192},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[123,62906,62907,62910,62912,62915,62918,62920,62923,62925,62927],{"class":125,"line":32957},[123,62908,62909],{"class":133},"      total.innerHTML ",[123,62911,179],{"class":129},[123,62913,62914],{"class":238}," `${",[123,62916,62917],{"class":133},"tx",[123,62919,692],{"class":238},[123,62921,62922],{"class":133},"value",[123,62924,692],{"class":238},[123,62926,51979],{"class":182},[123,62928,62929],{"class":238},"}\u002F200字`\n",[123,62931,62932],{"class":125,"line":32963},[123,62933,33472],{"class":133},[123,62935,62936],{"class":125,"line":32983},[123,62937,2409],{"emptyLinePlaceholder":50},[123,62939,62940],{"class":125,"line":32999},[123,62941,62942],{"class":192},"    \u002F\u002F const str = 'andy'\n",[123,62944,62945],{"class":125,"line":33005},[123,62946,62947],{"class":192},"    \u002F\u002F console.log(str.length)\n",[123,62949,62950,62952,62954],{"class":125,"line":33019},[123,62951,52428],{"class":133},[123,62953,51824],{"class":51311},[123,62955,51318],{"class":133},[123,62957,62958,62960,62962],{"class":125,"line":33025},[123,62959,51796],{"class":133},[123,62961,51811],{"class":51311},[123,62963,51318],{"class":133},[123,62965,62966],{"class":125,"line":33031},[123,62967,2409],{"emptyLinePlaceholder":50},[123,62969,62970,62972,62974],{"class":125,"line":33042},[123,62971,51796],{"class":133},[123,62973,50646],{"class":51311},[123,62975,51318],{"class":133},[22008,62977,62979],{"id":62978},"_3254-change事件","3.2.5.4 change事件",[14,62981,62982],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,62984,62985],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,62987,62988],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[114,62990,62992],{"className":50644,"code":62991,"language":50646,"meta":37,"style":37},"\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",[120,62993,62994,63004,63018,63022,63030,63044,63064,63076,63084,63088,63096,63110,63118,63136,63154,63166,63170,63178,63186,63190],{"__ignoreMap":37},[123,62995,62996,62998,63000,63002],{"class":125,"line":126},[123,62997,51308],{"class":133},[123,62999,51312],{"class":51311},[123,63001,51315],{"class":1972},[123,63003,51318],{"class":133},[123,63005,63006,63008,63010,63012,63014,63016],{"class":125,"line":45},[123,63007,1044],{"class":133},[123,63009,50646],{"class":51311},[123,63011,51327],{"class":1972},[123,63013,179],{"class":133},[123,63015,51332],{"class":238},[123,63017,51318],{"class":133},[123,63019,63020],{"class":125,"line":1189},[123,63021,2409],{"emptyLinePlaceholder":50},[123,63023,63024,63026,63028],{"class":125,"line":1204},[123,63025,1044],{"class":133},[123,63027,51345],{"class":51311},[123,63029,51318],{"class":133},[123,63031,63032,63034,63036,63038,63040,63042],{"class":125,"line":1210},[123,63033,52155],{"class":133},[123,63035,51355],{"class":51311},[123,63037,51358],{"class":1972},[123,63039,179],{"class":133},[123,63041,51363],{"class":238},[123,63043,51318],{"class":133},[123,63045,63046,63048,63050,63052,63054,63056,63058,63060,63062],{"class":125,"line":1224},[123,63047,52155],{"class":133},[123,63049,51355],{"class":51311},[123,63051,14930],{"class":1972},[123,63053,179],{"class":133},[123,63055,51402],{"class":238},[123,63057,51382],{"class":1972},[123,63059,179],{"class":133},[123,63061,51409],{"class":238},[123,63063,51318],{"class":133},[123,63065,63066,63068,63070,63072,63074],{"class":125,"line":1230},[123,63067,52155],{"class":133},[123,63069,51418],{"class":51311},[123,63071,51421],{"class":133},[123,63073,51418],{"class":51311},[123,63075,51318],{"class":133},[123,63077,63078,63080,63082],{"class":125,"line":1321},[123,63079,51796],{"class":133},[123,63081,51345],{"class":51311},[123,63083,51318],{"class":133},[123,63085,63086],{"class":125,"line":1327},[123,63087,2409],{"emptyLinePlaceholder":50},[123,63089,63090,63092,63094],{"class":125,"line":1339},[123,63091,1044],{"class":133},[123,63093,51811],{"class":51311},[123,63095,51318],{"class":133},[123,63097,63098,63100,63102,63104,63106,63108],{"class":125,"line":1621},[123,63099,52155],{"class":133},[123,63101,53832],{"class":51311},[123,63103,53835],{"class":1972},[123,63105,179],{"class":133},[123,63107,62710],{"class":238},[123,63109,51318],{"class":133},[123,63111,63112,63114,63116],{"class":125,"line":1626},[123,63113,52155],{"class":133},[123,63115,51824],{"class":51311},[123,63117,51318],{"class":133},[123,63119,63120,63122,63124,63126,63128,63130,63132,63134],{"class":125,"line":1632},[123,63121,11231],{"class":129},[123,63123,60616],{"class":182},[123,63125,13574],{"class":129},[123,63127,54407],{"class":133},[123,63129,54410],{"class":1972},[123,63131,134],{"class":133},[123,63133,62893],{"class":238},[123,63135,140],{"class":133},[123,63137,63138,63141,63143,63145,63148,63150,63152],{"class":125,"line":1637},[123,63139,63140],{"class":133},"    input.",[123,63142,57824],{"class":1972},[123,63144,134],{"class":133},[123,63146,63147],{"class":238},"'change'",[123,63149,12445],{"class":133},[123,63151,54460],{"class":129},[123,63153,54463],{"class":133},[123,63155,63156,63158,63160,63162,63164],{"class":125,"line":1651},[123,63157,58255],{"class":133},[123,63159,58258],{"class":1972},[123,63161,134],{"class":133},[123,63163,727],{"class":182},[123,63165,140],{"class":133},[123,63167,63168],{"class":125,"line":1656},[123,63169,33472],{"class":133},[123,63171,63172,63174,63176],{"class":125,"line":1662},[123,63173,52428],{"class":133},[123,63175,51824],{"class":51311},[123,63177,51318],{"class":133},[123,63179,63180,63182,63184],{"class":125,"line":1683},[123,63181,51796],{"class":133},[123,63183,51811],{"class":51311},[123,63185,51318],{"class":133},[123,63187,63188],{"class":125,"line":1688},[123,63189,2409],{"emptyLinePlaceholder":50},[123,63191,63192,63194,63196],{"class":125,"line":1702},[123,63193,51796],{"class":133},[123,63195,50646],{"class":51311},[123,63197,51318],{"class":133},[14,63199,63200],{},"总结：内容发生改变才回去触发",[94,63202,63204],{"id":63203},"_326-事件对象","3.2.6 事件对象",[22008,63206,63208],{"id":63207},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63210,63211],{},[35,63212],{"alt":37,"src":63213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63215,63216],{},[35,63217],{"alt":37,"src":63218},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63220,63221],{},"点击一次，就输出了事件对象，它是个对象",[14,63223,63224],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63226,63227],{},[35,63228],{"alt":37,"src":63229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[22008,63231,63233],{"id":63232},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63235,63236],{},[35,63237],{"alt":37,"src":63238},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63240,63241],{},"实现按特殊字符才是实现打印输出效果：",[114,63243,63245],{"className":53078,"code":63244,"language":53080,"meta":37,"style":37},"\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",[120,63246,63247,63255,63260,63274,63282,63287,63292,63297,63302,63307,63312,63317,63322,63327,63331,63335,63343],{"__ignoreMap":37},[123,63248,63249,63251,63253],{"class":125,"line":126},[123,63250,1044],{"class":133},[123,63252,51811],{"class":51311},[123,63254,51318],{"class":133},[123,63256,63257],{"class":125,"line":45},[123,63258,63259],{"class":192},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[123,63261,63262,63264,63266,63268,63270,63272],{"class":125,"line":1189},[123,63263,52155],{"class":133},[123,63265,53832],{"class":51311},[123,63267,53835],{"class":1972},[123,63269,179],{"class":133},[123,63271,62710],{"class":238},[123,63273,51318],{"class":133},[123,63275,63276,63278,63280],{"class":125,"line":1204},[123,63277,52155],{"class":133},[123,63279,51824],{"class":51311},[123,63281,51318],{"class":133},[123,63283,63284],{"class":125,"line":1210},[123,63285,63286],{"class":133},"    \u002F\u002F const btn = document.querySelector('button')\n",[123,63288,63289],{"class":125,"line":1224},[123,63290,63291],{"class":133},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[123,63293,63294],{"class":125,"line":1230},[123,63295,63296],{"class":133},"    \u002F\u002F   console.log(e);\n",[123,63298,63299],{"class":125,"line":1321},[123,63300,63301],{"class":133},"    \u002F\u002F })\n",[123,63303,63304],{"class":125,"line":1327},[123,63305,63306],{"class":133},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[123,63308,63309],{"class":125,"line":1339},[123,63310,63311],{"class":133},"    const input = document.querySelector('input')\n",[123,63313,63314],{"class":125,"line":1621},[123,63315,63316],{"class":133},"    input.addEventListener('keyup', function (e) {\n",[123,63318,63319],{"class":125,"line":1626},[123,63320,63321],{"class":133},"      if (e.key === 'Enter') {\n",[123,63323,63324],{"class":125,"line":1632},[123,63325,63326],{"class":133},"        console.log('我按下了回车键')\n",[123,63328,63329],{"class":125,"line":1637},[123,63330,52409],{"class":133},[123,63332,63333],{"class":125,"line":1651},[123,63334,33472],{"class":133},[123,63336,63337,63339,63341],{"class":125,"line":1656},[123,63338,52428],{"class":133},[123,63340,51824],{"class":51311},[123,63342,51318],{"class":133},[123,63344,63345,63347,63349],{"class":125,"line":1662},[123,63346,51796],{"class":133},[123,63348,51811],{"class":51311},[123,63350,51318],{"class":133},[22008,63352,63354],{"id":63353},"_3263-trim方法","3.2.6.3 trim方法",[14,63356,63357],{},[35,63358],{"alt":37,"src":63359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63361,63362],{},[35,63363],{"alt":37,"src":63364},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63366,63367],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63369,63370],{},"str.trim()",[94,63372,63374],{"id":63373},"_327-环境对象","3.2.7 环境对象",[14,63376,63377],{},[35,63378],{"alt":37,"src":63379},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63381,63382],{},[35,63383],{"alt":37,"src":63384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63386,63387],{},[35,63388],{"alt":37,"src":63389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63391,63392],{},"实际函数调用是window.fn()",[14,63394,63395],{},"普通函数里面this指向的是window",[1141,63397,63398,63401,63404],{},[80,63399,63400],{},"在普通函数下，this指向的是window",[80,63402,63403],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[80,63405,63406],{},"箭头函数没有this",[14,63408,63409],{},"粗略记法就是：谁调用，this就指向谁",[14,63411,63412],{},[35,63413],{"alt":37,"src":63414},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63416,63417],{},[35,63418],{"alt":37,"src":63419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63421,63422],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63424,63425],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[114,63427,63429],{"className":53078,"code":63428,"language":53080,"meta":37,"style":37},"\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",[120,63430,63431,63439,63451,63459,63464,63469,63474,63479,63483,63491],{"__ignoreMap":37},[123,63432,63433,63435,63437],{"class":125,"line":126},[123,63434,1044],{"class":133},[123,63436,51811],{"class":51311},[123,63438,51318],{"class":133},[123,63440,63441,63443,63445,63447,63449],{"class":125,"line":45},[123,63442,52155],{"class":133},[123,63444,53898],{"class":51311},[123,63446,53904],{"class":133},[123,63448,53898],{"class":51311},[123,63450,51318],{"class":133},[123,63452,63453,63455,63457],{"class":125,"line":1189},[123,63454,52155],{"class":133},[123,63456,51824],{"class":51311},[123,63458,51318],{"class":133},[123,63460,63461],{"class":125,"line":1204},[123,63462,63463],{"class":133},"    const button = document.querySelector('button')\n",[123,63465,63466],{"class":125,"line":1210},[123,63467,63468],{"class":133},"    button.addEventListener('click', function () {\n",[123,63470,63471],{"class":125,"line":1224},[123,63472,63473],{"class":133},"      \u002F\u002F console.log(this);\n",[123,63475,63476],{"class":125,"line":1230},[123,63477,63478],{"class":133},"      this.style.color = 'pink'\n",[123,63480,63481],{"class":125,"line":1321},[123,63482,33472],{"class":133},[123,63484,63485,63487,63489],{"class":125,"line":1327},[123,63486,52428],{"class":133},[123,63488,51824],{"class":51311},[123,63490,51318],{"class":133},[123,63492,63493,63495,63497],{"class":125,"line":1339},[123,63494,51796],{"class":133},[123,63496,51811],{"class":51311},[123,63498,51318],{"class":133},[94,63500,63502],{"id":63501},"_328-回调函数","3.2.8 回调函数",[14,63504,63505],{},[35,63506],{"alt":37,"src":63507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63509,63510],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63512,11342],{},[1141,63514,63515,63518,63521],{},[80,63516,63517],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[80,63519,63520],{},"回调函数本质还是函数，只不过把它当成参数使用",[80,63522,63523],{},"使用匿名函数做为回调函数比较常见",[94,63525,63527],{"id":63526},"_329-tab栏切换","3.2.9 tab栏切换",[14,63529,63530],{},[35,63531],{"alt":37,"src":63532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[114,63534,63536],{"className":50644,"code":63535,"language":50646,"meta":37,"style":37},"\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",[120,63537,63538,63548,63562,63566,63574,63588,63608,63628,63641,63649,63655,63665,63675,63679,63683,63690,63703,63716,63728,63744,63748,63752,63759,63771,63783,63795,63805,63815,63819,63823,63832,63844,63855,63867,63871,63875,63883,63893,63903,63913,63917,63921,63931,63945,63957,63961,63965,63977,63988,64005,64015,64019,64023,64038,64049,64059,64063,64067,64074,64089,64093,64097,64105,64115,64119,64123,64132,64142,64146,64154,64162,64166,64174,64189,64204,64217,64225,64259,64286,64313,64340,64367,64375,64383,64398,64435,64470,64505,64540,64575,64583,64591,64599,64604,64609,64629,64634,64663,64668,64673,64691,64696,64701,64706,64728,64733,64749,64753,64758,64763,64784,64789,64818,64822,64827,64831,64839,64847,64851],{"__ignoreMap":37},[123,63539,63540,63542,63544,63546],{"class":125,"line":126},[123,63541,51308],{"class":133},[123,63543,51312],{"class":51311},[123,63545,51315],{"class":1972},[123,63547,51318],{"class":133},[123,63549,63550,63552,63554,63556,63558,63560],{"class":125,"line":45},[123,63551,1044],{"class":133},[123,63553,50646],{"class":51311},[123,63555,51327],{"class":1972},[123,63557,179],{"class":133},[123,63559,51332],{"class":238},[123,63561,51318],{"class":133},[123,63563,63564],{"class":125,"line":1189},[123,63565,2409],{"emptyLinePlaceholder":50},[123,63567,63568,63570,63572],{"class":125,"line":1204},[123,63569,1044],{"class":133},[123,63571,51345],{"class":51311},[123,63573,51318],{"class":133},[123,63575,63576,63578,63580,63582,63584,63586],{"class":125,"line":1210},[123,63577,52155],{"class":133},[123,63579,51355],{"class":51311},[123,63581,51358],{"class":1972},[123,63583,179],{"class":133},[123,63585,51363],{"class":238},[123,63587,59138],{"class":133},[123,63589,63590,63592,63594,63596,63598,63600,63602,63604,63606],{"class":125,"line":1224},[123,63591,52155],{"class":133},[123,63593,51355],{"class":51311},[123,63595,51374],{"class":1972},[123,63597,179],{"class":133},[123,63599,51379],{"class":238},[123,63601,51382],{"class":1972},[123,63603,179],{"class":133},[123,63605,51387],{"class":238},[123,63607,59138],{"class":133},[123,63609,63610,63612,63614,63616,63618,63620,63622,63624,63626],{"class":125,"line":1230},[123,63611,52155],{"class":133},[123,63613,51355],{"class":51311},[123,63615,14930],{"class":1972},[123,63617,179],{"class":133},[123,63619,51402],{"class":238},[123,63621,51382],{"class":1972},[123,63623,179],{"class":133},[123,63625,51409],{"class":238},[123,63627,59138],{"class":133},[123,63629,63630,63632,63634,63637,63639],{"class":125,"line":1321},[123,63631,52155],{"class":133},[123,63633,51418],{"class":51311},[123,63635,63636],{"class":133},">tab栏切换\u003C\u002F",[123,63638,51418],{"class":51311},[123,63640,51318],{"class":133},[123,63642,63643,63645,63647],{"class":125,"line":1327},[123,63644,52155],{"class":133},[123,63646,5136],{"class":51311},[123,63648,51318],{"class":133},[123,63650,63651,63653],{"class":125,"line":1339},[123,63652,6413],{"class":51311},[123,63654,15582],{"class":133},[123,63656,63657,63659,63661,63663],{"class":125,"line":1621},[123,63658,54717],{"class":182},[123,63660,51448],{"class":133},[123,63662,325],{"class":182},[123,63664,1300],{"class":133},[123,63666,63667,63669,63671,63673],{"class":125,"line":1626},[123,63668,54706],{"class":182},[123,63670,51448],{"class":133},[123,63672,325],{"class":182},[123,63674,1300],{"class":133},[123,63676,63677],{"class":125,"line":1632},[123,63678,2196],{"class":133},[123,63680,63681],{"class":125,"line":1637},[123,63682,2409],{"emptyLinePlaceholder":50},[123,63684,63685,63688],{"class":125,"line":1651},[123,63686,63687],{"class":1972},"    .tab",[123,63689,15582],{"class":133},[123,63691,63692,63694,63696,63699,63701],{"class":125,"line":1656},[123,63693,54782],{"class":182},[123,63695,51448],{"class":133},[123,63697,63698],{"class":182},"590",[123,63700,51503],{"class":129},[123,63702,1300],{"class":133},[123,63704,63705,63707,63709,63712,63714],{"class":125,"line":1662},[123,63706,54796],{"class":182},[123,63708,51448],{"class":133},[123,63710,63711],{"class":182},"340",[123,63713,51503],{"class":129},[123,63715,1300],{"class":133},[123,63717,63718,63720,63722,63724,63726],{"class":125,"line":1683},[123,63719,54717],{"class":182},[123,63721,51448],{"class":133},[123,63723,834],{"class":182},[123,63725,51503],{"class":129},[123,63727,1300],{"class":133},[123,63729,63730,63732,63734,63736,63738,63740,63742],{"class":125,"line":1688},[123,63731,61988],{"class":182},[123,63733,51448],{"class":133},[123,63735,351],{"class":182},[123,63737,51503],{"class":129},[123,63739,51532],{"class":182},[123,63741,62255],{"class":182},[123,63743,1300],{"class":133},[123,63745,63746],{"class":125,"line":1702},[123,63747,2196],{"class":133},[123,63749,63750],{"class":125,"line":1707},[123,63751,2409],{"emptyLinePlaceholder":50},[123,63753,63754,63757],{"class":125,"line":1736},[123,63755,63756],{"class":1972},"    .tab-nav",[123,63758,15582],{"class":133},[123,63760,63761,63763,63765,63767,63769],{"class":125,"line":1741},[123,63762,54782],{"class":182},[123,63764,51448],{"class":133},[123,63766,445],{"class":182},[123,63768,462],{"class":129},[123,63770,1300],{"class":133},[123,63772,63773,63775,63777,63779,63781],{"class":125,"line":1758},[123,63774,54796],{"class":182},[123,63776,51448],{"class":133},[123,63778,1041],{"class":182},[123,63780,51503],{"class":129},[123,63782,1300],{"class":133},[123,63784,63785,63787,63789,63791,63793],{"class":125,"line":1763},[123,63786,57370],{"class":182},[123,63788,51448],{"class":133},[123,63790,1041],{"class":182},[123,63792,51503],{"class":129},[123,63794,1300],{"class":133},[123,63796,63797,63799,63801,63803],{"class":125,"line":1768},[123,63798,55020],{"class":182},[123,63800,51448],{"class":133},[123,63802,51488],{"class":182},[123,63804,1300],{"class":133},[123,63806,63807,63809,63811,63813],{"class":125,"line":1773},[123,63808,55031],{"class":182},[123,63810,51448],{"class":133},[123,63812,51679],{"class":182},[123,63814,1300],{"class":133},[123,63816,63817],{"class":125,"line":1787},[123,63818,2196],{"class":133},[123,63820,63821],{"class":125,"line":1792},[123,63822,2409],{"emptyLinePlaceholder":50},[123,63824,63825,63827,63830],{"class":125,"line":2586},[123,63826,63756],{"class":1972},[123,63828,63829],{"class":51311}," h3",[123,63831,15582],{"class":133},[123,63833,63834,63836,63838,63840,63842],{"class":125,"line":2600},[123,63835,54933],{"class":182},[123,63837,51448],{"class":133},[123,63839,934],{"class":182},[123,63841,51503],{"class":129},[123,63843,1300],{"class":133},[123,63845,63846,63848,63850,63853],{"class":125,"line":2608},[123,63847,62345],{"class":182},[123,63849,51448],{"class":133},[123,63851,63852],{"class":182},"normal",[123,63854,1300],{"class":133},[123,63856,63857,63859,63861,63863,63865],{"class":125,"line":2613},[123,63858,62011],{"class":182},[123,63860,51448],{"class":133},[123,63862,834],{"class":182},[123,63864,51503],{"class":129},[123,63866,1300],{"class":133},[123,63868,63869],{"class":125,"line":2619},[123,63870,2196],{"class":133},[123,63872,63873],{"class":125,"line":2625},[123,63874,2409],{"emptyLinePlaceholder":50},[123,63876,63877,63879,63881],{"class":125,"line":2630},[123,63878,63756],{"class":1972},[123,63880,61303],{"class":51311},[123,63882,15582],{"class":133},[123,63884,63885,63887,63889,63891],{"class":125,"line":7958},[123,63886,54743],{"class":182},[123,63888,51448],{"class":133},[123,63890,54748],{"class":182},[123,63892,1300],{"class":133},[123,63894,63895,63897,63899,63901],{"class":125,"line":7982},[123,63896,55020],{"class":182},[123,63898,51448],{"class":133},[123,63900,51488],{"class":182},[123,63902,1300],{"class":133},[123,63904,63905,63907,63909,63911],{"class":125,"line":7987},[123,63906,55031],{"class":182},[123,63908,51448],{"class":133},[123,63910,51591],{"class":182},[123,63912,1300],{"class":133},[123,63914,63915],{"class":125,"line":7993},[123,63916,2196],{"class":133},[123,63918,63919],{"class":125,"line":8020},[123,63920,2409],{"emptyLinePlaceholder":50},[123,63922,63923,63925,63927,63929],{"class":125,"line":8025},[123,63924,63756],{"class":1972},[123,63926,61303],{"class":51311},[123,63928,55086],{"class":51311},[123,63930,15582],{"class":133},[123,63932,63933,63935,63937,63939,63941,63943],{"class":125,"line":8031},[123,63934,54717],{"class":182},[123,63936,51448],{"class":133},[123,63938,325],{"class":182},[123,63940,8960],{"class":182},[123,63942,51503],{"class":129},[123,63944,1300],{"class":133},[123,63946,63947,63949,63951,63953,63955],{"class":125,"line":8043},[123,63948,54933],{"class":182},[123,63950,51448],{"class":133},[123,63952,683],{"class":182},[123,63954,51503],{"class":129},[123,63956,1300],{"class":133},[123,63958,63959],{"class":125,"line":8055},[123,63960,2196],{"class":133},[123,63962,63963],{"class":125,"line":8067},[123,63964,2409],{"emptyLinePlaceholder":50},[123,63966,63967,63969,63971,63973,63975],{"class":125,"line":9726},[123,63968,63756],{"class":1972},[123,63970,61303],{"class":51311},[123,63972,55086],{"class":51311},[123,63974,1408],{"class":51311},[123,63976,15582],{"class":133},[123,63978,63979,63982,63984,63986],{"class":125,"line":9751},[123,63980,63981],{"class":182},"      text-decoration",[123,63983,51448],{"class":133},[123,63985,54748],{"class":182},[123,63987,1300],{"class":133},[123,63989,63990,63992,63994,63996,63998,64000,64003],{"class":125,"line":9774},[123,63991,62243],{"class":182},[123,63993,51448],{"class":133},[123,63995,211],{"class":182},[123,63997,51503],{"class":129},[123,63999,51532],{"class":182},[123,64001,64002],{"class":182}," transparent",[123,64004,1300],{"class":133},[123,64006,64007,64009,64011,64013],{"class":125,"line":9798},[123,64008,57427],{"class":182},[123,64010,51448],{"class":133},[123,64012,62380],{"class":182},[123,64014,1300],{"class":133},[123,64016,64017],{"class":125,"line":9803},[123,64018,2196],{"class":133},[123,64020,64021],{"class":125,"line":9808},[123,64022,2409],{"emptyLinePlaceholder":50},[123,64024,64025,64027,64029,64031,64033,64036],{"class":125,"line":9813},[123,64026,63756],{"class":1972},[123,64028,61303],{"class":51311},[123,64030,55086],{"class":51311},[123,64032,1408],{"class":51311},[123,64034,64035],{"class":1972},".active",[123,64037,15582],{"class":133},[123,64039,64040,64042,64044,64047],{"class":125,"line":9822},[123,64041,61802],{"class":182},[123,64043,51448],{"class":133},[123,64045,64046],{"class":182},"#e1251b",[123,64048,1300],{"class":133},[123,64050,64051,64053,64055,64057],{"class":125,"line":9827},[123,64052,57427],{"class":182},[123,64054,51448],{"class":133},[123,64056,64046],{"class":182},[123,64058,1300],{"class":133},[123,64060,64061],{"class":125,"line":9833},[123,64062,2196],{"class":133},[123,64064,64065],{"class":125,"line":9854},[123,64066,2409],{"emptyLinePlaceholder":50},[123,64068,64069,64072],{"class":125,"line":9860},[123,64070,64071],{"class":1972},"    .tab-content",[123,64073,15582],{"class":133},[123,64075,64076,64078,64080,64082,64085,64087],{"class":125,"line":9874},[123,64077,54706],{"class":182},[123,64079,51448],{"class":133},[123,64081,325],{"class":182},[123,64083,64084],{"class":182}," 16",[123,64086,51503],{"class":129},[123,64088,1300],{"class":133},[123,64090,64091],{"class":125,"line":9880},[123,64092,2196],{"class":133},[123,64094,64095],{"class":125,"line":9907},[123,64096,2409],{"emptyLinePlaceholder":50},[123,64098,64099,64101,64103],{"class":125,"line":9916},[123,64100,64071],{"class":1972},[123,64102,62185],{"class":1972},[123,64104,15582],{"class":133},[123,64106,64107,64109,64111,64113],{"class":125,"line":9922},[123,64108,55020],{"class":182},[123,64110,51448],{"class":133},[123,64112,54748],{"class":182},[123,64114,1300],{"class":133},[123,64116,64117],{"class":125,"line":9930},[123,64118,2196],{"class":133},[123,64120,64121],{"class":125,"line":9935},[123,64122,2409],{"emptyLinePlaceholder":50},[123,64124,64125,64127,64130],{"class":125,"line":16614},[123,64126,64071],{"class":1972},[123,64128,64129],{"class":1972}," .item.active",[123,64131,15582],{"class":133},[123,64133,64134,64136,64138,64140],{"class":125,"line":16620},[123,64135,55020],{"class":182},[123,64137,51448],{"class":133},[123,64139,60880],{"class":182},[123,64141,1300],{"class":133},[123,64143,64144],{"class":125,"line":16643},[123,64145,2196],{"class":133},[123,64147,64148,64150,64152],{"class":125,"line":16649},[123,64149,52428],{"class":133},[123,64151,5136],{"class":51311},[123,64153,51318],{"class":133},[123,64155,64156,64158,64160],{"class":125,"line":16672},[123,64157,51796],{"class":133},[123,64159,51345],{"class":51311},[123,64161,51318],{"class":133},[123,64163,64164],{"class":125,"line":16686},[123,64165,2409],{"emptyLinePlaceholder":50},[123,64167,64168,64170,64172],{"class":125,"line":16706},[123,64169,1044],{"class":133},[123,64171,51811],{"class":51311},[123,64173,51318],{"class":133},[123,64175,64176,64178,64180,64182,64184,64187],{"class":125,"line":16712},[123,64177,52155],{"class":133},[123,64179,51622],{"class":51311},[123,64181,53497],{"class":1972},[123,64183,179],{"class":133},[123,64185,64186],{"class":238},"\"tab\"",[123,64188,51318],{"class":133},[123,64190,64191,64193,64195,64197,64199,64202],{"class":125,"line":16723},[123,64192,51352],{"class":133},[123,64194,51622],{"class":51311},[123,64196,53497],{"class":1972},[123,64198,179],{"class":133},[123,64200,64201],{"class":238},"\"tab-nav\"",[123,64203,51318],{"class":133},[123,64205,64206,64208,64210,64213,64215],{"class":125,"line":16746},[123,64207,55245],{"class":133},[123,64209,94],{"class":51311},[123,64211,64212],{"class":133},">每日特价\u003C\u002F",[123,64214,94],{"class":51311},[123,64216,51318],{"class":133},[123,64218,64219,64221,64223],{"class":125,"line":16768},[123,64220,55245],{"class":133},[123,64222,1141],{"class":51311},[123,64224,51318],{"class":133},[123,64226,64227,64229,64231,64233,64235,64237,64239,64241,64243,64245,64248,64251,64253,64255,64257],{"class":125,"line":16773},[123,64228,55313],{"class":133},[123,64230,80],{"class":51311},[123,64232,61063],{"class":133},[123,64234,372],{"class":51311},[123,64236,53497],{"class":1972},[123,64238,179],{"class":133},[123,64240,59717],{"class":238},[123,64242,61068],{"class":1972},[123,64244,179],{"class":133},[123,64246,64247],{"class":238},"\"javascript:;\"",[123,64249,64250],{"class":133},">精选\u003C\u002F",[123,64252,372],{"class":51311},[123,64254,55325],{"class":133},[123,64256,80],{"class":51311},[123,64258,51318],{"class":133},[123,64260,64261,64263,64265,64267,64269,64271,64273,64275,64278,64280,64282,64284],{"class":125,"line":16779},[123,64262,55313],{"class":133},[123,64264,80],{"class":51311},[123,64266,61063],{"class":133},[123,64268,372],{"class":51311},[123,64270,61068],{"class":1972},[123,64272,179],{"class":133},[123,64274,64247],{"class":238},[123,64276,64277],{"class":133},">美食\u003C\u002F",[123,64279,372],{"class":51311},[123,64281,55325],{"class":133},[123,64283,80],{"class":51311},[123,64285,51318],{"class":133},[123,64287,64288,64290,64292,64294,64296,64298,64300,64302,64305,64307,64309,64311],{"class":125,"line":16793},[123,64289,55313],{"class":133},[123,64291,80],{"class":51311},[123,64293,61063],{"class":133},[123,64295,372],{"class":51311},[123,64297,61068],{"class":1972},[123,64299,179],{"class":133},[123,64301,64247],{"class":238},[123,64303,64304],{"class":133},">百货\u003C\u002F",[123,64306,372],{"class":51311},[123,64308,55325],{"class":133},[123,64310,80],{"class":51311},[123,64312,51318],{"class":133},[123,64314,64315,64317,64319,64321,64323,64325,64327,64329,64332,64334,64336,64338],{"class":125,"line":16806},[123,64316,55313],{"class":133},[123,64318,80],{"class":51311},[123,64320,61063],{"class":133},[123,64322,372],{"class":51311},[123,64324,61068],{"class":1972},[123,64326,179],{"class":133},[123,64328,64247],{"class":238},[123,64330,64331],{"class":133},">个护\u003C\u002F",[123,64333,372],{"class":51311},[123,64335,55325],{"class":133},[123,64337,80],{"class":51311},[123,64339,51318],{"class":133},[123,64341,64342,64344,64346,64348,64350,64352,64354,64356,64359,64361,64363,64365],{"class":125,"line":16811},[123,64343,55313],{"class":133},[123,64345,80],{"class":51311},[123,64347,61063],{"class":133},[123,64349,372],{"class":51311},[123,64351,61068],{"class":1972},[123,64353,179],{"class":133},[123,64355,64247],{"class":238},[123,64357,64358],{"class":133},">预告\u003C\u002F",[123,64360,372],{"class":51311},[123,64362,55325],{"class":133},[123,64364,80],{"class":51311},[123,64366,51318],{"class":133},[123,64368,64369,64371,64373],{"class":125,"line":16825},[123,64370,55418],{"class":133},[123,64372,1141],{"class":51311},[123,64374,51318],{"class":133},[123,64376,64377,64379,64381],{"class":125,"line":16830},[123,64378,51787],{"class":133},[123,64380,51622],{"class":51311},[123,64382,51318],{"class":133},[123,64384,64385,64387,64389,64391,64393,64396],{"class":125,"line":16836},[123,64386,51352],{"class":133},[123,64388,51622],{"class":51311},[123,64390,53497],{"class":1972},[123,64392,179],{"class":133},[123,64394,64395],{"class":238},"\"tab-content\"",[123,64397,51318],{"class":133},[123,64399,64400,64402,64404,64406,64408,64411,64413,64415,64417,64419,64422,64424,64426,64428,64431,64433],{"class":125,"line":16841},[123,64401,55245],{"class":133},[123,64403,51622],{"class":51311},[123,64405,53497],{"class":1972},[123,64407,179],{"class":133},[123,64409,64410],{"class":238},"\"item active\"",[123,64412,61063],{"class":133},[123,64414,35],{"class":51311},[123,64416,55250],{"class":1972},[123,64418,179],{"class":133},[123,64420,64421],{"class":238},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[123,64423,55258],{"class":1972},[123,64425,179],{"class":133},[123,64427,7662],{"class":238},[123,64429,64430],{"class":133}," \u002F>\u003C\u002F",[123,64432,51622],{"class":51311},[123,64434,51318],{"class":133},[123,64436,64437,64439,64441,64443,64445,64447,64449,64451,64453,64455,64458,64460,64462,64464,64466,64468],{"class":125,"line":16855},[123,64438,55245],{"class":133},[123,64440,51622],{"class":51311},[123,64442,53497],{"class":1972},[123,64444,179],{"class":133},[123,64446,62634],{"class":238},[123,64448,61063],{"class":133},[123,64450,35],{"class":51311},[123,64452,55250],{"class":1972},[123,64454,179],{"class":133},[123,64456,64457],{"class":238},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[123,64459,55258],{"class":1972},[123,64461,179],{"class":133},[123,64463,7662],{"class":238},[123,64465,64430],{"class":133},[123,64467,51622],{"class":51311},[123,64469,51318],{"class":133},[123,64471,64472,64474,64476,64478,64480,64482,64484,64486,64488,64490,64493,64495,64497,64499,64501,64503],{"class":125,"line":16860},[123,64473,55245],{"class":133},[123,64475,51622],{"class":51311},[123,64477,53497],{"class":1972},[123,64479,179],{"class":133},[123,64481,62634],{"class":238},[123,64483,61063],{"class":133},[123,64485,35],{"class":51311},[123,64487,55250],{"class":1972},[123,64489,179],{"class":133},[123,64491,64492],{"class":238},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[123,64494,55258],{"class":1972},[123,64496,179],{"class":133},[123,64498,7662],{"class":238},[123,64500,64430],{"class":133},[123,64502,51622],{"class":51311},[123,64504,51318],{"class":133},[123,64506,64507,64509,64511,64513,64515,64517,64519,64521,64523,64525,64528,64530,64532,64534,64536,64538],{"class":125,"line":16865},[123,64508,55245],{"class":133},[123,64510,51622],{"class":51311},[123,64512,53497],{"class":1972},[123,64514,179],{"class":133},[123,64516,62634],{"class":238},[123,64518,61063],{"class":133},[123,64520,35],{"class":51311},[123,64522,55250],{"class":1972},[123,64524,179],{"class":133},[123,64526,64527],{"class":238},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[123,64529,55258],{"class":1972},[123,64531,179],{"class":133},[123,64533,7662],{"class":238},[123,64535,64430],{"class":133},[123,64537,51622],{"class":51311},[123,64539,51318],{"class":133},[123,64541,64542,64544,64546,64548,64550,64552,64554,64556,64558,64560,64563,64565,64567,64569,64571,64573],{"class":125,"line":16879},[123,64543,55245],{"class":133},[123,64545,51622],{"class":51311},[123,64547,53497],{"class":1972},[123,64549,179],{"class":133},[123,64551,62634],{"class":238},[123,64553,61063],{"class":133},[123,64555,35],{"class":51311},[123,64557,55250],{"class":1972},[123,64559,179],{"class":133},[123,64561,64562],{"class":238},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[123,64564,55258],{"class":1972},[123,64566,179],{"class":133},[123,64568,7662],{"class":238},[123,64570,64430],{"class":133},[123,64572,51622],{"class":51311},[123,64574,51318],{"class":133},[123,64576,64577,64579,64581],{"class":125,"line":16891},[123,64578,51787],{"class":133},[123,64580,51622],{"class":51311},[123,64582,51318],{"class":133},[123,64584,64585,64587,64589],{"class":125,"line":16896},[123,64586,52428],{"class":133},[123,64588,51622],{"class":51311},[123,64590,51318],{"class":133},[123,64592,64593,64595,64597],{"class":125,"line":16909},[123,64594,52155],{"class":133},[123,64596,51824],{"class":51311},[123,64598,51318],{"class":133},[123,64600,64601],{"class":125,"line":16914},[123,64602,64603],{"class":192},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[123,64605,64606],{"class":125,"line":16919},[123,64607,64608],{"class":192},"    \u002F\u002F 1.1 获取 a 元素 \n",[123,64610,64611,64613,64616,64618,64620,64622,64624,64627],{"class":125,"line":16924},[123,64612,11231],{"class":129},[123,64614,64615],{"class":182}," as",[123,64617,13574],{"class":129},[123,64619,54407],{"class":133},[123,64621,55692],{"class":1972},[123,64623,134],{"class":133},[123,64625,64626],{"class":238},"'.tab-nav a'",[123,64628,140],{"class":133},[123,64630,64631],{"class":125,"line":16937},[123,64632,64633],{"class":192},"    \u002F\u002F console.log(as) \n",[123,64635,64636,64638,64640,64642,64644,64646,64648,64650,64652,64655,64657,64659,64661],{"class":125,"line":16942},[123,64637,3210],{"class":129},[123,64639,1667],{"class":133},[123,64641,51858],{"class":129},[123,64643,9448],{"class":133},[123,64645,179],{"class":129},[123,64647,4102],{"class":182},[123,64649,9455],{"class":133},[123,64651,1044],{"class":129},[123,64653,64654],{"class":133}," as.",[123,64656,51979],{"class":182},[123,64658,3223],{"class":133},[123,64660,2301],{"class":129},[123,64662,12452],{"class":133},[123,64664,64665],{"class":125,"line":32644},[123,64666,64667],{"class":192},"      \u002F\u002F console.log(as[i])\n",[123,64669,64670],{"class":125,"line":32650},[123,64671,64672],{"class":192},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[123,64674,64675,64678,64680,64682,64685,64687,64689],{"class":125,"line":32656},[123,64676,64677],{"class":133},"      as[i].",[123,64679,57824],{"class":1972},[123,64681,134],{"class":133},[123,64683,64684],{"class":238},"'mouseenter'",[123,64686,12445],{"class":133},[123,64688,54460],{"class":129},[123,64690,54463],{"class":133},[123,64692,64693],{"class":125,"line":32662},[123,64694,64695],{"class":192},"        \u002F\u002F console.log('鼠标经过')\n",[123,64697,64698],{"class":125,"line":32668},[123,64699,64700],{"class":192},"        \u002F\u002F 排他思想  \n",[123,64702,64703],{"class":125,"line":32679},[123,64704,64705],{"class":192},"        \u002F\u002F 干掉别人 移除类active\n",[123,64707,64708,64710,64712,64714,64717,64719,64721,64723,64726],{"class":125,"line":32685},[123,64709,51936],{"class":133},[123,64711,54410],{"class":1972},[123,64713,134],{"class":133},[123,64715,64716],{"class":238},"'.tab-nav .active'",[123,64718,57014],{"class":133},[123,64720,57017],{"class":1972},[123,64722,134],{"class":133},[123,64724,64725],{"class":238},"'active'",[123,64727,140],{"class":133},[123,64729,64730],{"class":125,"line":32705},[123,64731,64732],{"class":192},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[123,64734,64735,64738,64741,64743,64745,64747],{"class":125,"line":32711},[123,64736,64737],{"class":182},"        this",[123,64739,64740],{"class":133},".classList.",[123,64742,5344],{"class":1972},[123,64744,134],{"class":133},[123,64746,64725],{"class":238},[123,64748,140],{"class":133},[123,64750,64751],{"class":125,"line":32722},[123,64752,2409],{"emptyLinePlaceholder":50},[123,64754,64755],{"class":125,"line":32728},[123,64756,64757],{"class":192},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[123,64759,64760],{"class":125,"line":32734},[123,64761,64762],{"class":192},"        \u002F\u002F 干掉别人\n",[123,64764,64765,64767,64769,64771,64774,64776,64778,64780,64782],{"class":125,"line":32740},[123,64766,51936],{"class":133},[123,64768,54410],{"class":1972},[123,64770,134],{"class":133},[123,64772,64773],{"class":238},"'.tab-content .active'",[123,64775,57014],{"class":133},[123,64777,57017],{"class":1972},[123,64779,134],{"class":133},[123,64781,64725],{"class":238},[123,64783,140],{"class":133},[123,64785,64786],{"class":125,"line":32746},[123,64787,64788],{"class":192},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[123,64790,64791,64793,64795,64797,64800,64802,64804,64806,64808,64810,64812,64814,64816],{"class":125,"line":32752},[123,64792,51936],{"class":133},[123,64794,54410],{"class":1972},[123,64796,134],{"class":133},[123,64798,64799],{"class":238},"`.tab-content .item:nth-child(${",[123,64801,575],{"class":133},[123,64803,45577],{"class":129},[123,64805,25129],{"class":182},[123,64807,57043],{"class":238},[123,64809,57014],{"class":133},[123,64811,5344],{"class":1972},[123,64813,134],{"class":133},[123,64815,64725],{"class":238},[123,64817,140],{"class":133},[123,64819,64820],{"class":125,"line":32758},[123,64821,2409],{"emptyLinePlaceholder":50},[123,64823,64824],{"class":125,"line":32764},[123,64825,64826],{"class":133},"      })\n",[123,64828,64829],{"class":125,"line":32784},[123,64830,2196],{"class":133},[123,64832,64833,64835,64837],{"class":125,"line":32790},[123,64834,52428],{"class":133},[123,64836,51824],{"class":51311},[123,64838,51318],{"class":133},[123,64840,64841,64843,64845],{"class":125,"line":32806},[123,64842,51796],{"class":133},[123,64844,51811],{"class":51311},[123,64846,51318],{"class":133},[123,64848,64849],{"class":125,"line":32812},[123,64850,2409],{"emptyLinePlaceholder":50},[123,64852,64853,64855,64857],{"class":125,"line":32826},[123,64854,51796],{"class":133},[123,64856,50646],{"class":51311},[123,64858,51318],{"class":133},[14,64860,64861],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,64863,64864],{},"在监听事件中，this指向的就是他的调用者",[14,64866,64867],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,64869,53731],{},[14,64871,64872],{},"(function () {",[14,64874,64875],{},"const list = document.querySelector('.xtx-elevator-list')",[14,64877,64878],{},"list.addEventListener('click', function (e) {",[14,64880,64881],{},"if (e.target.tagName === 'A') {",[14,64883,64884],{},"\u002F\u002F 排他思想",[14,64886,64887],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,64889,64890],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,64892,64893],{},"\u002F\u002F console.log(old);",[14,64895,64896],{},"\u002F\u002F 判断",[14,64898,64899],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,64901,64902],{},"if (old) old.classList.remove('active')",[14,64904,64905],{},"e.target.classList.add('active')",[14,64907,1080],{},[14,64909,52475],{},[14,64911,64912],{},"})();",[94,64914,64916],{"id":64915},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[114,64918,64920],{"className":50644,"code":64919,"language":50646,"meta":37,"style":37},"\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",[120,64921,64922,64932,64936,64944,64948,64962,64976,64988,64996,65002,65012,65022,65026,65030,65037,65049,65060,65077,65090,65104,65114,65118,65122,65129,65140,65158,65168,65180,65184,65188,65195,65212,65223,65235,65239,65243,65250,65262,65266,65274,65282,65286,65294,65302,65310,65325,65369,65377,65390,65403,65416,65424,65432,65440,65468,65476,65488,65501,65514,65522,65530,65538,65564,65572,65585,65597,65610,65618,65626,65634,65660,65668,65681,65693,65706,65714,65722,65730,65735,65755,65760,65780,65785,65802,65807,65815,65820,65849,65862,65866,65870,65875,65879,65907,65912,65929,65934,65939,65944,65949,65975,65979,65983,65991,65999,66003],{"__ignoreMap":37},[123,64923,64924,64926,64928,64930],{"class":125,"line":126},[123,64925,51308],{"class":133},[123,64927,51312],{"class":51311},[123,64929,51315],{"class":1972},[123,64931,51318],{"class":133},[123,64933,64934],{"class":125,"line":45},[123,64935,2409],{"emptyLinePlaceholder":50},[123,64937,64938,64940,64942],{"class":125,"line":1189},[123,64939,1044],{"class":133},[123,64941,50646],{"class":51311},[123,64943,51318],{"class":133},[123,64945,64946],{"class":125,"line":1204},[123,64947,2409],{"emptyLinePlaceholder":50},[123,64949,64950,64952,64954,64956,64958,64960],{"class":125,"line":1210},[123,64951,1044],{"class":133},[123,64953,51345],{"class":51311},[123,64955,51327],{"class":1972},[123,64957,179],{"class":133},[123,64959,51332],{"class":238},[123,64961,51318],{"class":133},[123,64963,64964,64966,64968,64970,64972,64974],{"class":125,"line":1224},[123,64965,52155],{"class":133},[123,64967,51355],{"class":51311},[123,64969,51358],{"class":1972},[123,64971,179],{"class":133},[123,64973,51363],{"class":238},[123,64975,51318],{"class":133},[123,64977,64978,64980,64982,64984,64986],{"class":125,"line":1230},[123,64979,52155],{"class":133},[123,64981,51418],{"class":51311},[123,64983,55325],{"class":133},[123,64985,51418],{"class":51311},[123,64987,51318],{"class":133},[123,64989,64990,64992,64994],{"class":125,"line":1321},[123,64991,52155],{"class":133},[123,64993,5136],{"class":51311},[123,64995,51318],{"class":133},[123,64997,64998,65000],{"class":125,"line":1327},[123,64999,6413],{"class":51311},[123,65001,15582],{"class":133},[123,65003,65004,65006,65008,65010],{"class":125,"line":1339},[123,65005,54717],{"class":182},[123,65007,51448],{"class":133},[123,65009,325],{"class":182},[123,65011,1300],{"class":133},[123,65013,65014,65016,65018,65020],{"class":125,"line":1621},[123,65015,54706],{"class":182},[123,65017,51448],{"class":133},[123,65019,325],{"class":182},[123,65021,1300],{"class":133},[123,65023,65024],{"class":125,"line":1626},[123,65025,2196],{"class":133},[123,65027,65028],{"class":125,"line":1632},[123,65029,2409],{"emptyLinePlaceholder":50},[123,65031,65032,65035],{"class":125,"line":1637},[123,65033,65034],{"class":51311},"    table",[123,65036,15582],{"class":133},[123,65038,65039,65042,65044,65047],{"class":125,"line":1651},[123,65040,65041],{"class":182},"      border-collapse",[123,65043,51448],{"class":133},[123,65045,65046],{"class":182},"collapse",[123,65048,1300],{"class":133},[123,65050,65051,65054,65056,65058],{"class":125,"line":1656},[123,65052,65053],{"class":182},"      border-spacing",[123,65055,51448],{"class":133},[123,65057,325],{"class":182},[123,65059,1300],{"class":133},[123,65061,65062,65064,65066,65068,65070,65072,65075],{"class":125,"line":1662},[123,65063,61988],{"class":182},[123,65065,51448],{"class":133},[123,65067,351],{"class":182},[123,65069,51503],{"class":129},[123,65071,51532],{"class":182},[123,65073,65074],{"class":182}," #c0c0c0",[123,65076,1300],{"class":133},[123,65078,65079,65081,65083,65086,65088],{"class":125,"line":1683},[123,65080,54782],{"class":182},[123,65082,51448],{"class":133},[123,65084,65085],{"class":182},"500",[123,65087,51503],{"class":129},[123,65089,1300],{"class":133},[123,65091,65092,65094,65096,65098,65100,65102],{"class":125,"line":1688},[123,65093,54717],{"class":182},[123,65095,51448],{"class":133},[123,65097,445],{"class":182},[123,65099,51503],{"class":129},[123,65101,51567],{"class":182},[123,65103,1300],{"class":133},[123,65105,65106,65108,65110,65112],{"class":125,"line":1702},[123,65107,57297],{"class":182},[123,65109,51448],{"class":133},[123,65111,51603],{"class":182},[123,65113,1300],{"class":133},[123,65115,65116],{"class":125,"line":1707},[123,65117,2196],{"class":133},[123,65119,65120],{"class":125,"line":1736},[123,65121,2409],{"emptyLinePlaceholder":50},[123,65123,65124,65127],{"class":125,"line":1741},[123,65125,65126],{"class":51311},"    th",[123,65128,15582],{"class":133},[123,65130,65131,65133,65135,65138],{"class":125,"line":1758},[123,65132,54895],{"class":182},[123,65134,51448],{"class":133},[123,65136,65137],{"class":182},"#09c",[123,65139,1300],{"class":133},[123,65141,65142,65145,65147,65149,65151,65153,65156],{"class":125,"line":1763},[123,65143,65144],{"class":182},"      font",[123,65146,51448],{"class":133},[123,65148,62350],{"class":182},[123,65150,64084],{"class":182},[123,65152,51503],{"class":129},[123,65154,65155],{"class":238}," \"微软雅黑\"",[123,65157,1300],{"class":133},[123,65159,65160,65162,65164,65166],{"class":125,"line":1768},[123,65161,57427],{"class":182},[123,65163,51448],{"class":133},[123,65165,60853],{"class":182},[123,65167,1300],{"class":133},[123,65169,65170,65172,65174,65176,65178],{"class":125,"line":1773},[123,65171,54796],{"class":182},[123,65173,51448],{"class":133},[123,65175,934],{"class":182},[123,65177,51503],{"class":129},[123,65179,1300],{"class":133},[123,65181,65182],{"class":125,"line":1787},[123,65183,2196],{"class":133},[123,65185,65186],{"class":125,"line":1792},[123,65187,2409],{"emptyLinePlaceholder":50},[123,65189,65190,65193],{"class":125,"line":2586},[123,65191,65192],{"class":51311},"    td",[123,65194,15582],{"class":133},[123,65196,65197,65199,65201,65203,65205,65207,65210],{"class":125,"line":2600},[123,65198,61988],{"class":182},[123,65200,51448],{"class":133},[123,65202,351],{"class":182},[123,65204,51503],{"class":129},[123,65206,51532],{"class":182},[123,65208,65209],{"class":182}," #d0d0d0",[123,65211,1300],{"class":133},[123,65213,65214,65216,65218,65221],{"class":125,"line":2608},[123,65215,57427],{"class":182},[123,65217,51448],{"class":133},[123,65219,65220],{"class":182},"#404060",[123,65222,1300],{"class":133},[123,65224,65225,65227,65229,65231,65233],{"class":125,"line":2613},[123,65226,54706],{"class":182},[123,65228,51448],{"class":133},[123,65230,580],{"class":182},[123,65232,51503],{"class":129},[123,65234,1300],{"class":133},[123,65236,65237],{"class":125,"line":2619},[123,65238,2196],{"class":133},[123,65240,65241],{"class":125,"line":2625},[123,65242,2409],{"emptyLinePlaceholder":50},[123,65244,65245,65248],{"class":125,"line":2630},[123,65246,65247],{"class":1972},"    .allCheck",[123,65249,15582],{"class":133},[123,65251,65252,65254,65256,65258,65260],{"class":125,"line":7958},[123,65253,54782],{"class":182},[123,65255,51448],{"class":133},[123,65257,746],{"class":182},[123,65259,51503],{"class":129},[123,65261,1300],{"class":133},[123,65263,65264],{"class":125,"line":7982},[123,65265,2196],{"class":133},[123,65267,65268,65270,65272],{"class":125,"line":7987},[123,65269,52428],{"class":133},[123,65271,5136],{"class":51311},[123,65273,51318],{"class":133},[123,65275,65276,65278,65280],{"class":125,"line":7993},[123,65277,51796],{"class":133},[123,65279,51345],{"class":51311},[123,65281,51318],{"class":133},[123,65283,65284],{"class":125,"line":8020},[123,65285,2409],{"emptyLinePlaceholder":50},[123,65287,65288,65290,65292],{"class":125,"line":8025},[123,65289,1044],{"class":133},[123,65291,51811],{"class":51311},[123,65293,51318],{"class":133},[123,65295,65296,65298,65300],{"class":125,"line":8031},[123,65297,52155],{"class":133},[123,65299,271],{"class":51311},[123,65301,51318],{"class":133},[123,65303,65304,65306,65308],{"class":125,"line":8043},[123,65305,51352],{"class":133},[123,65307,277],{"class":51311},[123,65309,51318],{"class":133},[123,65311,65312,65314,65316,65318,65320,65323],{"class":125,"line":8055},[123,65313,55245],{"class":133},[123,65315,280],{"class":51311},[123,65317,53497],{"class":1972},[123,65319,179],{"class":133},[123,65321,65322],{"class":238},"\"allCheck\"",[123,65324,51318],{"class":133},[123,65326,65327,65329,65331,65333,65335,65337,65339,65341,65343,65345,65347,65350,65353,65355,65357,65359,65362,65365,65367],{"class":125,"line":8067},[123,65328,55313],{"class":133},[123,65330,53832],{"class":51311},[123,65332,53835],{"class":1972},[123,65334,179],{"class":133},[123,65336,53840],{"class":238},[123,65338,14930],{"class":1972},[123,65340,179],{"class":133},[123,65342,7662],{"class":238},[123,65344,14969],{"class":1972},[123,65346,179],{"class":133},[123,65348,65349],{"class":238},"\"checkAll\"",[123,65351,65352],{"class":133},"> \u003C",[123,65354,123],{"class":51311},[123,65356,53497],{"class":1972},[123,65358,179],{"class":133},[123,65360,65361],{"class":238},"\"all\"",[123,65363,65364],{"class":133},">全选\u003C\u002F",[123,65366,123],{"class":51311},[123,65368,51318],{"class":133},[123,65370,65371,65373,65375],{"class":125,"line":9726},[123,65372,55418],{"class":133},[123,65374,280],{"class":51311},[123,65376,51318],{"class":133},[123,65378,65379,65381,65383,65386,65388],{"class":125,"line":9751},[123,65380,55245],{"class":133},[123,65382,280],{"class":51311},[123,65384,65385],{"class":133},">商品\u003C\u002F",[123,65387,280],{"class":51311},[123,65389,51318],{"class":133},[123,65391,65392,65394,65396,65399,65401],{"class":125,"line":9774},[123,65393,55245],{"class":133},[123,65395,280],{"class":51311},[123,65397,65398],{"class":133},">商家\u003C\u002F",[123,65400,280],{"class":51311},[123,65402,51318],{"class":133},[123,65404,65405,65407,65409,65412,65414],{"class":125,"line":9798},[123,65406,55245],{"class":133},[123,65408,280],{"class":51311},[123,65410,65411],{"class":133},">价格\u003C\u002F",[123,65413,280],{"class":51311},[123,65415,51318],{"class":133},[123,65417,65418,65420,65422],{"class":125,"line":9803},[123,65419,51787],{"class":133},[123,65421,277],{"class":51311},[123,65423,51318],{"class":133},[123,65425,65426,65428,65430],{"class":125,"line":9808},[123,65427,51352],{"class":133},[123,65429,277],{"class":51311},[123,65431,51318],{"class":133},[123,65433,65434,65436,65438],{"class":125,"line":9813},[123,65435,55245],{"class":133},[123,65437,323],{"class":51311},[123,65439,51318],{"class":133},[123,65441,65442,65444,65446,65448,65450,65452,65454,65456,65459,65461,65463,65466],{"class":125,"line":9822},[123,65443,55313],{"class":133},[123,65445,53832],{"class":51311},[123,65447,53835],{"class":1972},[123,65449,179],{"class":133},[123,65451,53840],{"class":238},[123,65453,14930],{"class":1972},[123,65455,179],{"class":133},[123,65457,65458],{"class":238},"\"check\"",[123,65460,53497],{"class":1972},[123,65462,179],{"class":133},[123,65464,65465],{"class":238},"\"ck\"",[123,65467,51318],{"class":133},[123,65469,65470,65472,65474],{"class":125,"line":9827},[123,65471,55418],{"class":133},[123,65473,323],{"class":51311},[123,65475,51318],{"class":133},[123,65477,65478,65480,65482,65484,65486],{"class":125,"line":9833},[123,65479,55245],{"class":133},[123,65481,323],{"class":51311},[123,65483,61184],{"class":133},[123,65485,323],{"class":51311},[123,65487,51318],{"class":133},[123,65489,65490,65492,65494,65497,65499],{"class":125,"line":9854},[123,65491,55245],{"class":133},[123,65493,323],{"class":51311},[123,65495,65496],{"class":133},">小米\u003C\u002F",[123,65498,323],{"class":51311},[123,65500,51318],{"class":133},[123,65502,65503,65505,65507,65510,65512],{"class":125,"line":9860},[123,65504,55245],{"class":133},[123,65506,323],{"class":51311},[123,65508,65509],{"class":133},">￥1999\u003C\u002F",[123,65511,323],{"class":51311},[123,65513,51318],{"class":133},[123,65515,65516,65518,65520],{"class":125,"line":9874},[123,65517,51787],{"class":133},[123,65519,277],{"class":51311},[123,65521,51318],{"class":133},[123,65523,65524,65526,65528],{"class":125,"line":9880},[123,65525,51352],{"class":133},[123,65527,277],{"class":51311},[123,65529,51318],{"class":133},[123,65531,65532,65534,65536],{"class":125,"line":9907},[123,65533,55245],{"class":133},[123,65535,323],{"class":51311},[123,65537,51318],{"class":133},[123,65539,65540,65542,65544,65546,65548,65550,65552,65554,65556,65558,65560,65562],{"class":125,"line":9916},[123,65541,55313],{"class":133},[123,65543,53832],{"class":51311},[123,65545,53835],{"class":1972},[123,65547,179],{"class":133},[123,65549,53840],{"class":238},[123,65551,14930],{"class":1972},[123,65553,179],{"class":133},[123,65555,65458],{"class":238},[123,65557,53497],{"class":1972},[123,65559,179],{"class":133},[123,65561,65465],{"class":238},[123,65563,51318],{"class":133},[123,65565,65566,65568,65570],{"class":125,"line":9922},[123,65567,55418],{"class":133},[123,65569,323],{"class":51311},[123,65571,51318],{"class":133},[123,65573,65574,65576,65578,65581,65583],{"class":125,"line":9930},[123,65575,55245],{"class":133},[123,65577,323],{"class":51311},[123,65579,65580],{"class":133},">小米净水器\u003C\u002F",[123,65582,323],{"class":51311},[123,65584,51318],{"class":133},[123,65586,65587,65589,65591,65593,65595],{"class":125,"line":9935},[123,65588,55245],{"class":133},[123,65590,323],{"class":51311},[123,65592,65496],{"class":133},[123,65594,323],{"class":51311},[123,65596,51318],{"class":133},[123,65598,65599,65601,65603,65606,65608],{"class":125,"line":16614},[123,65600,55245],{"class":133},[123,65602,323],{"class":51311},[123,65604,65605],{"class":133},">￥4999\u003C\u002F",[123,65607,323],{"class":51311},[123,65609,51318],{"class":133},[123,65611,65612,65614,65616],{"class":125,"line":16620},[123,65613,51787],{"class":133},[123,65615,277],{"class":51311},[123,65617,51318],{"class":133},[123,65619,65620,65622,65624],{"class":125,"line":16643},[123,65621,51352],{"class":133},[123,65623,277],{"class":51311},[123,65625,51318],{"class":133},[123,65627,65628,65630,65632],{"class":125,"line":16649},[123,65629,55245],{"class":133},[123,65631,323],{"class":51311},[123,65633,51318],{"class":133},[123,65635,65636,65638,65640,65642,65644,65646,65648,65650,65652,65654,65656,65658],{"class":125,"line":16672},[123,65637,55313],{"class":133},[123,65639,53832],{"class":51311},[123,65641,53835],{"class":1972},[123,65643,179],{"class":133},[123,65645,53840],{"class":238},[123,65647,14930],{"class":1972},[123,65649,179],{"class":133},[123,65651,65458],{"class":238},[123,65653,53497],{"class":1972},[123,65655,179],{"class":133},[123,65657,65465],{"class":238},[123,65659,51318],{"class":133},[123,65661,65662,65664,65666],{"class":125,"line":16686},[123,65663,55418],{"class":133},[123,65665,323],{"class":51311},[123,65667,51318],{"class":133},[123,65669,65670,65672,65674,65677,65679],{"class":125,"line":16706},[123,65671,55245],{"class":133},[123,65673,323],{"class":51311},[123,65675,65676],{"class":133},">小米电视\u003C\u002F",[123,65678,323],{"class":51311},[123,65680,51318],{"class":133},[123,65682,65683,65685,65687,65689,65691],{"class":125,"line":16712},[123,65684,55245],{"class":133},[123,65686,323],{"class":51311},[123,65688,65496],{"class":133},[123,65690,323],{"class":51311},[123,65692,51318],{"class":133},[123,65694,65695,65697,65699,65702,65704],{"class":125,"line":16723},[123,65696,55245],{"class":133},[123,65698,323],{"class":51311},[123,65700,65701],{"class":133},">￥5999\u003C\u002F",[123,65703,323],{"class":51311},[123,65705,51318],{"class":133},[123,65707,65708,65710,65712],{"class":125,"line":16746},[123,65709,51787],{"class":133},[123,65711,277],{"class":51311},[123,65713,51318],{"class":133},[123,65715,65716,65718,65720],{"class":125,"line":16768},[123,65717,52428],{"class":133},[123,65719,271],{"class":51311},[123,65721,51318],{"class":133},[123,65723,65724,65726,65728],{"class":125,"line":16773},[123,65725,52155],{"class":133},[123,65727,51824],{"class":51311},[123,65729,51318],{"class":133},[123,65731,65732],{"class":125,"line":16779},[123,65733,65734],{"class":192},"    \u002F\u002F 1. 获取大复选框\n",[123,65736,65737,65739,65742,65744,65746,65748,65750,65753],{"class":125,"line":16793},[123,65738,11231],{"class":129},[123,65740,65741],{"class":182}," checkAll",[123,65743,13574],{"class":129},[123,65745,54407],{"class":133},[123,65747,54410],{"class":1972},[123,65749,134],{"class":133},[123,65751,65752],{"class":238},"'#checkAll'",[123,65754,140],{"class":133},[123,65756,65757],{"class":125,"line":16806},[123,65758,65759],{"class":192},"    \u002F\u002F 2. 获取所有的小复选框\n",[123,65761,65762,65764,65767,65769,65771,65773,65775,65778],{"class":125,"line":16811},[123,65763,11231],{"class":129},[123,65765,65766],{"class":182}," cks",[123,65768,13574],{"class":129},[123,65770,54407],{"class":133},[123,65772,55692],{"class":1972},[123,65774,134],{"class":133},[123,65776,65777],{"class":238},"'.ck'",[123,65779,140],{"class":133},[123,65781,65782],{"class":125,"line":16825},[123,65783,65784],{"class":192},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[123,65786,65787,65790,65792,65794,65796,65798,65800],{"class":125,"line":16830},[123,65788,65789],{"class":133},"    checkAll.",[123,65791,57824],{"class":1972},[123,65793,134],{"class":133},[123,65795,57829],{"class":238},[123,65797,12445],{"class":133},[123,65799,54460],{"class":129},[123,65801,54463],{"class":133},[123,65803,65804],{"class":125,"line":16836},[123,65805,65806],{"class":192},"      \u002F\u002F 得到当前大复选框的选中状态\n",[123,65808,65809,65812],{"class":125,"line":16841},[123,65810,65811],{"class":192},"      \u002F\u002F console.log(checkAll.checked)",[123,65813,65814],{"class":192},"  \u002F\u002F 得到 是 true 或者是 false\n",[123,65816,65817],{"class":125,"line":16855},[123,65818,65819],{"class":192},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[123,65821,65822,65824,65826,65828,65830,65832,65834,65836,65838,65841,65843,65845,65847],{"class":125,"line":16860},[123,65823,52295],{"class":129},[123,65825,1667],{"class":133},[123,65827,51858],{"class":129},[123,65829,9448],{"class":133},[123,65831,179],{"class":129},[123,65833,4102],{"class":182},[123,65835,9455],{"class":133},[123,65837,1044],{"class":129},[123,65839,65840],{"class":133}," cks.",[123,65842,51979],{"class":182},[123,65844,3223],{"class":133},[123,65846,2301],{"class":129},[123,65848,12452],{"class":133},[123,65850,65851,65854,65856,65859],{"class":125,"line":16865},[123,65852,65853],{"class":133},"        cks[i].checked ",[123,65855,179],{"class":129},[123,65857,65858],{"class":182}," this",[123,65860,65861],{"class":133},".checked\n",[123,65863,65864],{"class":125,"line":16879},[123,65865,52409],{"class":133},[123,65867,65868],{"class":125,"line":16891},[123,65869,33472],{"class":133},[123,65871,65872],{"class":125,"line":16896},[123,65873,65874],{"class":192},"    \u002F\u002F 5. 小复选框控制大复选框\n",[123,65876,65877],{"class":125,"line":16909},[123,65878,2409],{"emptyLinePlaceholder":50},[123,65880,65881,65883,65885,65887,65889,65891,65893,65895,65897,65899,65901,65903,65905],{"class":125,"line":16914},[123,65882,3210],{"class":129},[123,65884,1667],{"class":133},[123,65886,51858],{"class":129},[123,65888,9448],{"class":133},[123,65890,179],{"class":129},[123,65892,4102],{"class":182},[123,65894,9455],{"class":133},[123,65896,1044],{"class":129},[123,65898,65840],{"class":133},[123,65900,51979],{"class":182},[123,65902,3223],{"class":133},[123,65904,2301],{"class":129},[123,65906,12452],{"class":133},[123,65908,65909],{"class":125,"line":16919},[123,65910,65911],{"class":192},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[123,65913,65914,65917,65919,65921,65923,65925,65927],{"class":125,"line":16924},[123,65915,65916],{"class":133},"      cks[i].",[123,65918,57824],{"class":1972},[123,65920,134],{"class":133},[123,65922,57829],{"class":238},[123,65924,12445],{"class":133},[123,65926,54460],{"class":129},[123,65928,54463],{"class":133},[123,65930,65931],{"class":125,"line":16937},[123,65932,65933],{"class":192},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[123,65935,65936],{"class":125,"line":16942},[123,65937,65938],{"class":192},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[123,65940,65941],{"class":125,"line":32644},[123,65942,65943],{"class":192},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[123,65945,65946],{"class":125,"line":32650},[123,65947,65948],{"class":192},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[123,65950,65951,65954,65956,65958,65960,65962,65965,65967,65969,65971,65973],{"class":125,"line":32656},[123,65952,65953],{"class":133},"        checkAll.checked ",[123,65955,179],{"class":129},[123,65957,54407],{"class":133},[123,65959,55692],{"class":1972},[123,65961,134],{"class":133},[123,65963,65964],{"class":238},"'.ck:checked'",[123,65966,30837],{"class":133},[123,65968,51979],{"class":182},[123,65970,57917],{"class":129},[123,65972,65840],{"class":133},[123,65974,55842],{"class":182},[123,65976,65977],{"class":125,"line":32662},[123,65978,64826],{"class":133},[123,65980,65981],{"class":125,"line":32668},[123,65982,2196],{"class":133},[123,65984,65985,65987,65989],{"class":125,"line":32679},[123,65986,52428],{"class":133},[123,65988,51824],{"class":51311},[123,65990,51318],{"class":133},[123,65992,65993,65995,65997],{"class":125,"line":32685},[123,65994,51796],{"class":133},[123,65996,51811],{"class":51311},[123,65998,51318],{"class":133},[123,66000,66001],{"class":125,"line":32705},[123,66002,2409],{"emptyLinePlaceholder":50},[123,66004,66005,66007,66009],{"class":125,"line":32711},[123,66006,51796],{"class":133},[123,66008,50646],{"class":51311},[123,66010,51318],{"class":133},[14,66012,66013],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,66015,66016],{},"用好之间比较得到的布尔值！！！",[14,66018,66019,66020,66023,66024,1667,66027,718,66029,66032],{},"在 JS 里访问的时候，",[120,66021,66022],{},"checkbox.checked"," 是一个 ",[283,66025,66026],{},"布尔值",[120,66028,1372],{},[120,66030,66031],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66034,66035,66036,66039,66040],{},"HTML 的 ",[120,66037,66038],{},"checked=\"checked\""," 只是 ",[283,66041,66042,66043,66046],{},"初始值；JS 的 ",[120,66044,66045],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66048,66049],{},"：checked是一个伪类选择器",[14,66051,66052],{},[35,66053],{"alt":37,"src":66054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66056,66057,66060],{},[66058,66059],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66062,66063],{},[35,66064],{"alt":37,"src":66065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[65,66067,66069],{"id":66068},"_33-dom事件进阶","3.3 DOM事件进阶",[94,66071,66073],{"id":66072},"_331-事件流","3.3.1 事件流",[14,66075,66076],{},[35,66077],{"alt":37,"src":66078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[22008,66080,66082],{"id":66081},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66084,66085],{},[35,66086],{"alt":37,"src":66087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[114,66089,66091],{"className":50644,"code":66090,"language":50646,"meta":37,"style":37},"\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",[120,66092,66093,66103,66117,66121,66129,66143,66163,66175,66183,66190,66202,66214,66224,66228,66232,66239,66251,66263,66273,66277,66285,66293,66297,66305,66320,66339,66347,66355,66375,66395,66411,66422,66430,66447,66458,66466,66483,66494,66502,66510,66518,66522],{"__ignoreMap":37},[123,66094,66095,66097,66099,66101],{"class":125,"line":126},[123,66096,51308],{"class":133},[123,66098,51312],{"class":51311},[123,66100,51315],{"class":1972},[123,66102,51318],{"class":133},[123,66104,66105,66107,66109,66111,66113,66115],{"class":125,"line":45},[123,66106,1044],{"class":133},[123,66108,50646],{"class":51311},[123,66110,51327],{"class":1972},[123,66112,179],{"class":133},[123,66114,51332],{"class":238},[123,66116,51318],{"class":133},[123,66118,66119],{"class":125,"line":1189},[123,66120,2409],{"emptyLinePlaceholder":50},[123,66122,66123,66125,66127],{"class":125,"line":1204},[123,66124,1044],{"class":133},[123,66126,51345],{"class":51311},[123,66128,51318],{"class":133},[123,66130,66131,66133,66135,66137,66139,66141],{"class":125,"line":1210},[123,66132,52155],{"class":133},[123,66134,51355],{"class":51311},[123,66136,51358],{"class":1972},[123,66138,179],{"class":133},[123,66140,51363],{"class":238},[123,66142,51318],{"class":133},[123,66144,66145,66147,66149,66151,66153,66155,66157,66159,66161],{"class":125,"line":1224},[123,66146,52155],{"class":133},[123,66148,51355],{"class":51311},[123,66150,14930],{"class":1972},[123,66152,179],{"class":133},[123,66154,51402],{"class":238},[123,66156,51382],{"class":1972},[123,66158,179],{"class":133},[123,66160,51409],{"class":238},[123,66162,51318],{"class":133},[123,66164,66165,66167,66169,66171,66173],{"class":125,"line":1230},[123,66166,52155],{"class":133},[123,66168,51418],{"class":51311},[123,66170,51421],{"class":133},[123,66172,51418],{"class":51311},[123,66174,51318],{"class":133},[123,66176,66177,66179,66181],{"class":125,"line":1321},[123,66178,52155],{"class":133},[123,66180,5136],{"class":51311},[123,66182,51318],{"class":133},[123,66184,66185,66188],{"class":125,"line":1327},[123,66186,66187],{"class":1972},"    .father",[123,66189,15582],{"class":133},[123,66191,66192,66194,66196,66198,66200],{"class":125,"line":1339},[123,66193,54782],{"class":182},[123,66195,51448],{"class":133},[123,66197,65085],{"class":182},[123,66199,51503],{"class":129},[123,66201,1300],{"class":133},[123,66203,66204,66206,66208,66210,66212],{"class":125,"line":1621},[123,66205,54796],{"class":182},[123,66207,51448],{"class":133},[123,66209,65085],{"class":182},[123,66211,51503],{"class":129},[123,66213,1300],{"class":133},[123,66215,66216,66218,66220,66222],{"class":125,"line":1626},[123,66217,54895],{"class":182},[123,66219,51448],{"class":133},[123,66221,51656],{"class":182},[123,66223,1300],{"class":133},[123,66225,66226],{"class":125,"line":1632},[123,66227,2196],{"class":133},[123,66229,66230],{"class":125,"line":1637},[123,66231,2409],{"emptyLinePlaceholder":50},[123,66233,66234,66237],{"class":125,"line":1651},[123,66235,66236],{"class":1972},"    .son",[123,66238,15582],{"class":133},[123,66240,66241,66243,66245,66247,66249],{"class":125,"line":1656},[123,66242,54782],{"class":182},[123,66244,51448],{"class":133},[123,66246,1731],{"class":182},[123,66248,51503],{"class":129},[123,66250,1300],{"class":133},[123,66252,66253,66255,66257,66259,66261],{"class":125,"line":1662},[123,66254,54796],{"class":182},[123,66256,51448],{"class":133},[123,66258,1731],{"class":182},[123,66260,51503],{"class":129},[123,66262,1300],{"class":133},[123,66264,66265,66267,66269,66271],{"class":125,"line":1683},[123,66266,54895],{"class":182},[123,66268,51448],{"class":133},[123,66270,54900],{"class":182},[123,66272,1300],{"class":133},[123,66274,66275],{"class":125,"line":1688},[123,66276,2196],{"class":133},[123,66278,66279,66281,66283],{"class":125,"line":1702},[123,66280,52428],{"class":133},[123,66282,5136],{"class":51311},[123,66284,51318],{"class":133},[123,66286,66287,66289,66291],{"class":125,"line":1707},[123,66288,51796],{"class":133},[123,66290,51345],{"class":51311},[123,66292,51318],{"class":133},[123,66294,66295],{"class":125,"line":1736},[123,66296,2409],{"emptyLinePlaceholder":50},[123,66298,66299,66301,66303],{"class":125,"line":1741},[123,66300,1044],{"class":133},[123,66302,51811],{"class":51311},[123,66304,51318],{"class":133},[123,66306,66307,66309,66311,66313,66315,66318],{"class":125,"line":1758},[123,66308,52155],{"class":133},[123,66310,51622],{"class":51311},[123,66312,53497],{"class":1972},[123,66314,179],{"class":133},[123,66316,66317],{"class":238},"\"father\"",[123,66319,51318],{"class":133},[123,66321,66322,66324,66326,66328,66330,66333,66335,66337],{"class":125,"line":1763},[123,66323,51352],{"class":133},[123,66325,51622],{"class":51311},[123,66327,53497],{"class":1972},[123,66329,179],{"class":133},[123,66331,66332],{"class":238},"\"son\"",[123,66334,55325],{"class":133},[123,66336,51622],{"class":51311},[123,66338,51318],{"class":133},[123,66340,66341,66343,66345],{"class":125,"line":1768},[123,66342,52428],{"class":133},[123,66344,51622],{"class":51311},[123,66346,51318],{"class":133},[123,66348,66349,66351,66353],{"class":125,"line":1773},[123,66350,52155],{"class":133},[123,66352,51824],{"class":51311},[123,66354,51318],{"class":133},[123,66356,66357,66359,66362,66364,66366,66368,66370,66373],{"class":125,"line":1787},[123,66358,11231],{"class":129},[123,66360,66361],{"class":182}," fa",[123,66363,13574],{"class":129},[123,66365,54407],{"class":133},[123,66367,54410],{"class":1972},[123,66369,134],{"class":133},[123,66371,66372],{"class":238},"'.father'",[123,66374,140],{"class":133},[123,66376,66377,66379,66382,66384,66386,66388,66390,66393],{"class":125,"line":1792},[123,66378,11231],{"class":129},[123,66380,66381],{"class":182}," son",[123,66383,13574],{"class":129},[123,66385,54407],{"class":133},[123,66387,54410],{"class":1972},[123,66389,134],{"class":133},[123,66391,66392],{"class":238},"'.son'",[123,66394,140],{"class":133},[123,66396,66397,66399,66401,66403,66405,66407,66409],{"class":125,"line":2586},[123,66398,52418],{"class":133},[123,66400,57824],{"class":1972},[123,66402,134],{"class":133},[123,66404,57829],{"class":238},[123,66406,12445],{"class":133},[123,66408,54460],{"class":129},[123,66410,54463],{"class":133},[123,66412,66413,66415,66417,66420],{"class":125,"line":2600},[123,66414,58936],{"class":1972},[123,66416,134],{"class":133},[123,66418,66419],{"class":238},"'woshiu1'",[123,66421,140],{"class":133},[123,66423,66424,66426,66428],{"class":125,"line":2608},[123,66425,54546],{"class":133},[123,66427,1372],{"class":182},[123,66429,140],{"class":133},[123,66431,66432,66435,66437,66439,66441,66443,66445],{"class":125,"line":2613},[123,66433,66434],{"class":133},"    fa.",[123,66436,57824],{"class":1972},[123,66438,134],{"class":133},[123,66440,57829],{"class":238},[123,66442,12445],{"class":133},[123,66444,54460],{"class":129},[123,66446,54463],{"class":133},[123,66448,66449,66451,66453,66456],{"class":125,"line":2619},[123,66450,58936],{"class":1972},[123,66452,134],{"class":133},[123,66454,66455],{"class":238},"'1'",[123,66457,140],{"class":133},[123,66459,66460,66462,66464],{"class":125,"line":2625},[123,66461,54546],{"class":133},[123,66463,1372],{"class":182},[123,66465,140],{"class":133},[123,66467,66468,66471,66473,66475,66477,66479,66481],{"class":125,"line":2630},[123,66469,66470],{"class":133},"    son.",[123,66472,57824],{"class":1972},[123,66474,134],{"class":133},[123,66476,57829],{"class":238},[123,66478,12445],{"class":133},[123,66480,54460],{"class":129},[123,66482,54463],{"class":133},[123,66484,66485,66487,66489,66492],{"class":125,"line":7958},[123,66486,58936],{"class":1972},[123,66488,134],{"class":133},[123,66490,66491],{"class":238},"'2'",[123,66493,140],{"class":133},[123,66495,66496,66498,66500],{"class":125,"line":7982},[123,66497,54546],{"class":133},[123,66499,1372],{"class":182},[123,66501,140],{"class":133},[123,66503,66504,66506,66508],{"class":125,"line":7987},[123,66505,52428],{"class":133},[123,66507,51824],{"class":51311},[123,66509,51318],{"class":133},[123,66511,66512,66514,66516],{"class":125,"line":7993},[123,66513,51796],{"class":133},[123,66515,51811],{"class":51311},[123,66517,51318],{"class":133},[123,66519,66520],{"class":125,"line":8020},[123,66521,2409],{"emptyLinePlaceholder":50},[123,66523,66524,66526,66528],{"class":125,"line":8025},[123,66525,51796],{"class":133},[123,66527,50646],{"class":51311},[123,66529,51318],{"class":133},[14,66531,66532],{},[35,66533],{"alt":37,"src":66534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66536,66537],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[22008,66539,66541],{"id":66540},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66543,66544],{},[35,66545],{"alt":37,"src":66546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66548,66549],{},"反着来",[14,66551,66552],{},"注意是同名事件，比如都是‘click’",[22008,66554,66556],{"id":66555},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,66558,66559],{},[35,66560],{"alt":37,"src":66561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[22008,66563,66565],{"id":66564},"_3314-解绑事件","3.3.1.4 解绑事件",[14,66567,66568],{},[35,66569],{"alt":37,"src":66570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,66572,66573],{},[35,66574],{"alt":37,"src":66575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[22008,66577,66579],{"id":66578},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[77,66581,66582],{},[80,66583,66584],{},"事件类型的区别",[14,66586,66587],{},[35,66588],{"alt":37,"src":66589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,66591,66592],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[77,66594,66595],{"start":45},[80,66596,66597],{},"注册事件的区别",[14,66599,66600],{},[35,66601],{"alt":37,"src":66602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[22008,66604,66606],{"id":66605},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,66608,66609],{},[35,66610],{"alt":37,"src":66611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,66613,66614],{},[35,66615],{"alt":37,"src":66616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[114,66618,66620],{"className":53078,"code":66619,"language":53080,"meta":37,"style":37},"\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",[120,66621,66622,66630,66647,66670,66678,66683,66688,66693,66697,66705,66713],{"__ignoreMap":37},[123,66623,66624,66626,66628],{"class":125,"line":126},[123,66625,1044],{"class":133},[123,66627,51811],{"class":51311},[123,66629,51318],{"class":133},[123,66631,66632,66634,66637,66640,66642,66645],{"class":125,"line":45},[123,66633,52155],{"class":133},[123,66635,66636],{"class":51311},"form",[123,66638,66639],{"class":1972}," action",[123,66641,179],{"class":133},[123,66643,66644],{"class":238},"\"http:\u002F\u002Fwww.itcast.cn\"",[123,66646,51318],{"class":133},[123,66648,66649,66651,66653,66655,66657,66660,66663,66665,66668],{"class":125,"line":1189},[123,66650,51352],{"class":133},[123,66652,53832],{"class":51311},[123,66654,53835],{"class":1972},[123,66656,179],{"class":133},[123,66658,66659],{"class":238},"\"submit\"",[123,66661,66662],{"class":1972}," value",[123,66664,179],{"class":133},[123,66666,66667],{"class":238},"\"免费注册\"",[123,66669,51318],{"class":133},[123,66671,66672,66674,66676],{"class":125,"line":1204},[123,66673,51352],{"class":133},[123,66675,51824],{"class":51311},[123,66677,51318],{"class":133},[123,66679,66680],{"class":125,"line":1210},[123,66681,66682],{"class":133},"      const form = document.querySelector('form')\n",[123,66684,66685],{"class":125,"line":1224},[123,66686,66687],{"class":133},"      form.addEventListener('submit', function (e) {\n",[123,66689,66690],{"class":125,"line":1230},[123,66691,66692],{"class":133},"        e.preventDefault()\n",[123,66694,66695],{"class":125,"line":1321},[123,66696,64826],{"class":133},[123,66698,66699,66701,66703],{"class":125,"line":1327},[123,66700,51787],{"class":133},[123,66702,51824],{"class":51311},[123,66704,51318],{"class":133},[123,66706,66707,66709,66711],{"class":125,"line":1339},[123,66708,52428],{"class":133},[123,66710,66636],{"class":51311},[123,66712,51318],{"class":133},[123,66714,66715,66717,66719],{"class":125,"line":1621},[123,66716,51796],{"class":133},[123,66718,51811],{"class":51311},[123,66720,51318],{"class":133},[14,66722,66723],{},"点击不在跳转！！！",[94,66725,66727],{"id":66726},"_332-事件委托","3.3.2 事件委托",[14,66729,66730],{},[35,66731],{"alt":37,"src":66732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[114,66734,66736],{"className":50644,"code":66735,"language":50646,"meta":37,"style":37},"\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",[120,66737,66738,66748,66762,66766,66774,66788,66808,66820,66828,66832,66840,66848,66860,66872,66884,66896,66908,66921,66929,66937,66942,66961,66982,66987,66992,66997,67002,67011,67015,67025,67029,67034,67039,67053,67063,67067,67071,67079,67087,67091],{"__ignoreMap":37},[123,66739,66740,66742,66744,66746],{"class":125,"line":126},[123,66741,51308],{"class":133},[123,66743,51312],{"class":51311},[123,66745,51315],{"class":1972},[123,66747,51318],{"class":133},[123,66749,66750,66752,66754,66756,66758,66760],{"class":125,"line":45},[123,66751,1044],{"class":133},[123,66753,50646],{"class":51311},[123,66755,51327],{"class":1972},[123,66757,179],{"class":133},[123,66759,51332],{"class":238},[123,66761,51318],{"class":133},[123,66763,66764],{"class":125,"line":1189},[123,66765,2409],{"emptyLinePlaceholder":50},[123,66767,66768,66770,66772],{"class":125,"line":1204},[123,66769,1044],{"class":133},[123,66771,51345],{"class":51311},[123,66773,51318],{"class":133},[123,66775,66776,66778,66780,66782,66784,66786],{"class":125,"line":1210},[123,66777,52155],{"class":133},[123,66779,51355],{"class":51311},[123,66781,51358],{"class":1972},[123,66783,179],{"class":133},[123,66785,51363],{"class":238},[123,66787,51318],{"class":133},[123,66789,66790,66792,66794,66796,66798,66800,66802,66804,66806],{"class":125,"line":1224},[123,66791,52155],{"class":133},[123,66793,51355],{"class":51311},[123,66795,14930],{"class":1972},[123,66797,179],{"class":133},[123,66799,51402],{"class":238},[123,66801,51382],{"class":1972},[123,66803,179],{"class":133},[123,66805,51409],{"class":238},[123,66807,51318],{"class":133},[123,66809,66810,66812,66814,66816,66818],{"class":125,"line":1230},[123,66811,52155],{"class":133},[123,66813,51418],{"class":51311},[123,66815,51421],{"class":133},[123,66817,51418],{"class":51311},[123,66819,51318],{"class":133},[123,66821,66822,66824,66826],{"class":125,"line":1321},[123,66823,51796],{"class":133},[123,66825,51345],{"class":51311},[123,66827,51318],{"class":133},[123,66829,66830],{"class":125,"line":1327},[123,66831,2409],{"emptyLinePlaceholder":50},[123,66833,66834,66836,66838],{"class":125,"line":1339},[123,66835,1044],{"class":133},[123,66837,51811],{"class":51311},[123,66839,51318],{"class":133},[123,66841,66842,66844,66846],{"class":125,"line":1621},[123,66843,52155],{"class":133},[123,66845,1141],{"class":51311},[123,66847,51318],{"class":133},[123,66849,66850,66852,66854,66856,66858],{"class":125,"line":1626},[123,66851,51352],{"class":133},[123,66853,80],{"class":51311},[123,66855,53977],{"class":133},[123,66857,80],{"class":51311},[123,66859,51318],{"class":133},[123,66861,66862,66864,66866,66868,66870],{"class":125,"line":1632},[123,66863,51352],{"class":133},[123,66865,80],{"class":51311},[123,66867,53996],{"class":133},[123,66869,80],{"class":51311},[123,66871,51318],{"class":133},[123,66873,66874,66876,66878,66880,66882],{"class":125,"line":1637},[123,66875,51352],{"class":133},[123,66877,80],{"class":51311},[123,66879,54015],{"class":133},[123,66881,80],{"class":51311},[123,66883,51318],{"class":133},[123,66885,66886,66888,66890,66892,66894],{"class":125,"line":1651},[123,66887,51352],{"class":133},[123,66889,80],{"class":51311},[123,66891,54034],{"class":133},[123,66893,80],{"class":51311},[123,66895,51318],{"class":133},[123,66897,66898,66900,66902,66904,66906],{"class":125,"line":1656},[123,66899,51352],{"class":133},[123,66901,80],{"class":51311},[123,66903,54053],{"class":133},[123,66905,80],{"class":51311},[123,66907,51318],{"class":133},[123,66909,66910,66912,66914,66917,66919],{"class":125,"line":1662},[123,66911,51352],{"class":133},[123,66913,14],{"class":51311},[123,66915,66916],{"class":133},">我不需要变色\u003C\u002F",[123,66918,14],{"class":51311},[123,66920,51318],{"class":133},[123,66922,66923,66925,66927],{"class":125,"line":1683},[123,66924,52428],{"class":133},[123,66926,1141],{"class":51311},[123,66928,51318],{"class":133},[123,66930,66931,66933,66935],{"class":125,"line":1688},[123,66932,52155],{"class":133},[123,66934,51824],{"class":51311},[123,66936,51318],{"class":133},[123,66938,66939],{"class":125,"line":1702},[123,66940,66941],{"class":192},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[123,66943,66944,66946,66948,66950,66952,66954,66956,66959],{"class":125,"line":1707},[123,66945,11231],{"class":129},[123,66947,61303],{"class":182},[123,66949,13574],{"class":129},[123,66951,54407],{"class":133},[123,66953,54410],{"class":1972},[123,66955,134],{"class":133},[123,66957,66958],{"class":238},"'ul'",[123,66960,140],{"class":133},[123,66962,66963,66966,66968,66970,66972,66974,66976,66978,66980],{"class":125,"line":1736},[123,66964,66965],{"class":133},"    ul.",[123,66967,57824],{"class":1972},[123,66969,134],{"class":133},[123,66971,57829],{"class":238},[123,66973,12445],{"class":133},[123,66975,54460],{"class":129},[123,66977,1667],{"class":133},[123,66979,208],{"class":5226},[123,66981,12452],{"class":133},[123,66983,66984],{"class":125,"line":1741},[123,66985,66986],{"class":192},"      \u002F\u002F alert(1)\n",[123,66988,66989],{"class":125,"line":1758},[123,66990,66991],{"class":192},"      \u002F\u002F e.target就是我们点击的对象\n",[123,66993,66994],{"class":125,"line":1763},[123,66995,66996],{"class":192},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[123,66998,66999],{"class":125,"line":1768},[123,67000,67001],{"class":192},"      \u002F\u002F e.target.style.color = 'red'\n",[123,67003,67004,67006,67008],{"class":125,"line":1773},[123,67005,58255],{"class":133},[123,67007,58258],{"class":1972},[123,67009,67010],{"class":133},"(e)\n",[123,67012,67013],{"class":125,"line":1787},[123,67014,2409],{"emptyLinePlaceholder":50},[123,67016,67017,67019,67022],{"class":125,"line":1792},[123,67018,58255],{"class":133},[123,67020,67021],{"class":1972},"dir",[123,67023,67024],{"class":133},"(e.target)\n",[123,67026,67027],{"class":125,"line":2586},[123,67028,2409],{"emptyLinePlaceholder":50},[123,67030,67031],{"class":125,"line":2600},[123,67032,67033],{"class":192},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[123,67035,67036],{"class":125,"line":2608},[123,67037,67038],{"class":192},"      \u002F\u002F 通过tagName来进行判断\n",[123,67040,67041,67043,67046,67048,67051],{"class":125,"line":2613},[123,67042,54491],{"class":129},[123,67044,67045],{"class":133}," (e.target.tagName ",[123,67047,54497],{"class":129},[123,67049,67050],{"class":238}," 'LI'",[123,67052,12452],{"class":133},[123,67054,67055,67058,67060],{"class":125,"line":2619},[123,67056,67057],{"class":133},"        e.target.style.color ",[123,67059,179],{"class":129},[123,67061,67062],{"class":238}," 'red'\n",[123,67064,67065],{"class":125,"line":2625},[123,67066,52409],{"class":133},[123,67068,67069],{"class":125,"line":2630},[123,67070,33472],{"class":133},[123,67072,67073,67075,67077],{"class":125,"line":7958},[123,67074,52428],{"class":133},[123,67076,51824],{"class":51311},[123,67078,51318],{"class":133},[123,67080,67081,67083,67085],{"class":125,"line":7982},[123,67082,51796],{"class":133},[123,67084,51811],{"class":51311},[123,67086,51318],{"class":133},[123,67088,67089],{"class":125,"line":7987},[123,67090,2409],{"emptyLinePlaceholder":50},[123,67092,67093,67095,67097],{"class":125,"line":7993},[123,67094,51796],{"class":133},[123,67096,50646],{"class":51311},[123,67098,51318],{"class":133},[14,67100,67101],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67103,67104],{},"if(e.target.ragName==='P') {}",[14,67106,67107],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67109,67110],{},"通过事件委托的方式实现tab栏切换改造：",[14,67112,67113],{},"一定要记住自定义属性！！！！！！",[14,67115,67116],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67118,67119],{},"id是自定义的属性名",[14,67121,67122],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[114,67124,67126],{"className":50644,"code":67125,"language":50646,"meta":37,"style":37},"\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",[120,67127,67128,67138,67152,67156,67164,67178,67198,67218,67230,67238,67244,67254,67264,67268,67272,67278,67290,67302,67314,67330,67334,67338,67344,67356,67368,67380,67390,67400,67404,67408,67416,67428,67438,67450,67454,67458,67466,67476,67486,67496,67500,67504,67514,67528,67540,67544,67548,67560,67570,67586,67596,67600,67604,67618,67628,67638,67642,67646,67652,67666,67670,67674,67682,67692,67696,67700,67709,67719,67723,67731,67739,67743,67751,67765,67779,67791,67799,67838,67870,67902,67934,67966,67974,67982,67996,68030,68064,68098,68132,68166,68174,68182,68190,68195,68200,68219,68224,68244,68252,68257,68270,68291,68304,68308,68313,68318,68331,68351,68379,68383,68387,68391,68399,68407,68411],{"__ignoreMap":37},[123,67129,67130,67132,67134,67136],{"class":125,"line":126},[123,67131,51308],{"class":133},[123,67133,51312],{"class":51311},[123,67135,51315],{"class":1972},[123,67137,51318],{"class":133},[123,67139,67140,67142,67144,67146,67148,67150],{"class":125,"line":45},[123,67141,1044],{"class":133},[123,67143,50646],{"class":51311},[123,67145,51327],{"class":1972},[123,67147,179],{"class":133},[123,67149,51332],{"class":238},[123,67151,51318],{"class":133},[123,67153,67154],{"class":125,"line":1189},[123,67155,2409],{"emptyLinePlaceholder":50},[123,67157,67158,67160,67162],{"class":125,"line":1204},[123,67159,1044],{"class":133},[123,67161,51345],{"class":51311},[123,67163,51318],{"class":133},[123,67165,67166,67168,67170,67172,67174,67176],{"class":125,"line":1210},[123,67167,52155],{"class":133},[123,67169,51355],{"class":51311},[123,67171,51358],{"class":1972},[123,67173,179],{"class":133},[123,67175,51363],{"class":238},[123,67177,59138],{"class":133},[123,67179,67180,67182,67184,67186,67188,67190,67192,67194,67196],{"class":125,"line":1224},[123,67181,52155],{"class":133},[123,67183,51355],{"class":51311},[123,67185,51374],{"class":1972},[123,67187,179],{"class":133},[123,67189,51379],{"class":238},[123,67191,51382],{"class":1972},[123,67193,179],{"class":133},[123,67195,51387],{"class":238},[123,67197,59138],{"class":133},[123,67199,67200,67202,67204,67206,67208,67210,67212,67214,67216],{"class":125,"line":1230},[123,67201,52155],{"class":133},[123,67203,51355],{"class":51311},[123,67205,14930],{"class":1972},[123,67207,179],{"class":133},[123,67209,51402],{"class":238},[123,67211,51382],{"class":1972},[123,67213,179],{"class":133},[123,67215,51409],{"class":238},[123,67217,59138],{"class":133},[123,67219,67220,67222,67224,67226,67228],{"class":125,"line":1321},[123,67221,52155],{"class":133},[123,67223,51418],{"class":51311},[123,67225,63636],{"class":133},[123,67227,51418],{"class":51311},[123,67229,51318],{"class":133},[123,67231,67232,67234,67236],{"class":125,"line":1327},[123,67233,52155],{"class":133},[123,67235,5136],{"class":51311},[123,67237,51318],{"class":133},[123,67239,67240,67242],{"class":125,"line":1339},[123,67241,6413],{"class":51311},[123,67243,15582],{"class":133},[123,67245,67246,67248,67250,67252],{"class":125,"line":1621},[123,67247,54717],{"class":182},[123,67249,51448],{"class":133},[123,67251,325],{"class":182},[123,67253,1300],{"class":133},[123,67255,67256,67258,67260,67262],{"class":125,"line":1626},[123,67257,54706],{"class":182},[123,67259,51448],{"class":133},[123,67261,325],{"class":182},[123,67263,1300],{"class":133},[123,67265,67266],{"class":125,"line":1632},[123,67267,2196],{"class":133},[123,67269,67270],{"class":125,"line":1637},[123,67271,2409],{"emptyLinePlaceholder":50},[123,67273,67274,67276],{"class":125,"line":1651},[123,67275,63687],{"class":1972},[123,67277,15582],{"class":133},[123,67279,67280,67282,67284,67286,67288],{"class":125,"line":1656},[123,67281,54782],{"class":182},[123,67283,51448],{"class":133},[123,67285,63698],{"class":182},[123,67287,51503],{"class":129},[123,67289,1300],{"class":133},[123,67291,67292,67294,67296,67298,67300],{"class":125,"line":1662},[123,67293,54796],{"class":182},[123,67295,51448],{"class":133},[123,67297,63711],{"class":182},[123,67299,51503],{"class":129},[123,67301,1300],{"class":133},[123,67303,67304,67306,67308,67310,67312],{"class":125,"line":1683},[123,67305,54717],{"class":182},[123,67307,51448],{"class":133},[123,67309,834],{"class":182},[123,67311,51503],{"class":129},[123,67313,1300],{"class":133},[123,67315,67316,67318,67320,67322,67324,67326,67328],{"class":125,"line":1688},[123,67317,61988],{"class":182},[123,67319,51448],{"class":133},[123,67321,351],{"class":182},[123,67323,51503],{"class":129},[123,67325,51532],{"class":182},[123,67327,62255],{"class":182},[123,67329,1300],{"class":133},[123,67331,67332],{"class":125,"line":1702},[123,67333,2196],{"class":133},[123,67335,67336],{"class":125,"line":1707},[123,67337,2409],{"emptyLinePlaceholder":50},[123,67339,67340,67342],{"class":125,"line":1736},[123,67341,63756],{"class":1972},[123,67343,15582],{"class":133},[123,67345,67346,67348,67350,67352,67354],{"class":125,"line":1741},[123,67347,54782],{"class":182},[123,67349,51448],{"class":133},[123,67351,445],{"class":182},[123,67353,462],{"class":129},[123,67355,1300],{"class":133},[123,67357,67358,67360,67362,67364,67366],{"class":125,"line":1758},[123,67359,54796],{"class":182},[123,67361,51448],{"class":133},[123,67363,1041],{"class":182},[123,67365,51503],{"class":129},[123,67367,1300],{"class":133},[123,67369,67370,67372,67374,67376,67378],{"class":125,"line":1763},[123,67371,57370],{"class":182},[123,67373,51448],{"class":133},[123,67375,1041],{"class":182},[123,67377,51503],{"class":129},[123,67379,1300],{"class":133},[123,67381,67382,67384,67386,67388],{"class":125,"line":1768},[123,67383,55020],{"class":182},[123,67385,51448],{"class":133},[123,67387,51488],{"class":182},[123,67389,1300],{"class":133},[123,67391,67392,67394,67396,67398],{"class":125,"line":1773},[123,67393,55031],{"class":182},[123,67395,51448],{"class":133},[123,67397,51679],{"class":182},[123,67399,1300],{"class":133},[123,67401,67402],{"class":125,"line":1787},[123,67403,2196],{"class":133},[123,67405,67406],{"class":125,"line":1792},[123,67407,2409],{"emptyLinePlaceholder":50},[123,67409,67410,67412,67414],{"class":125,"line":2586},[123,67411,63756],{"class":1972},[123,67413,63829],{"class":51311},[123,67415,15582],{"class":133},[123,67417,67418,67420,67422,67424,67426],{"class":125,"line":2600},[123,67419,54933],{"class":182},[123,67421,51448],{"class":133},[123,67423,934],{"class":182},[123,67425,51503],{"class":129},[123,67427,1300],{"class":133},[123,67429,67430,67432,67434,67436],{"class":125,"line":2608},[123,67431,62345],{"class":182},[123,67433,51448],{"class":133},[123,67435,63852],{"class":182},[123,67437,1300],{"class":133},[123,67439,67440,67442,67444,67446,67448],{"class":125,"line":2613},[123,67441,62011],{"class":182},[123,67443,51448],{"class":133},[123,67445,834],{"class":182},[123,67447,51503],{"class":129},[123,67449,1300],{"class":133},[123,67451,67452],{"class":125,"line":2619},[123,67453,2196],{"class":133},[123,67455,67456],{"class":125,"line":2625},[123,67457,2409],{"emptyLinePlaceholder":50},[123,67459,67460,67462,67464],{"class":125,"line":2630},[123,67461,63756],{"class":1972},[123,67463,61303],{"class":51311},[123,67465,15582],{"class":133},[123,67467,67468,67470,67472,67474],{"class":125,"line":7958},[123,67469,54743],{"class":182},[123,67471,51448],{"class":133},[123,67473,54748],{"class":182},[123,67475,1300],{"class":133},[123,67477,67478,67480,67482,67484],{"class":125,"line":7982},[123,67479,55020],{"class":182},[123,67481,51448],{"class":133},[123,67483,51488],{"class":182},[123,67485,1300],{"class":133},[123,67487,67488,67490,67492,67494],{"class":125,"line":7987},[123,67489,55031],{"class":182},[123,67491,51448],{"class":133},[123,67493,51591],{"class":182},[123,67495,1300],{"class":133},[123,67497,67498],{"class":125,"line":7993},[123,67499,2196],{"class":133},[123,67501,67502],{"class":125,"line":8020},[123,67503,2409],{"emptyLinePlaceholder":50},[123,67505,67506,67508,67510,67512],{"class":125,"line":8025},[123,67507,63756],{"class":1972},[123,67509,61303],{"class":51311},[123,67511,55086],{"class":51311},[123,67513,15582],{"class":133},[123,67515,67516,67518,67520,67522,67524,67526],{"class":125,"line":8031},[123,67517,54717],{"class":182},[123,67519,51448],{"class":133},[123,67521,325],{"class":182},[123,67523,8960],{"class":182},[123,67525,51503],{"class":129},[123,67527,1300],{"class":133},[123,67529,67530,67532,67534,67536,67538],{"class":125,"line":8043},[123,67531,54933],{"class":182},[123,67533,51448],{"class":133},[123,67535,683],{"class":182},[123,67537,51503],{"class":129},[123,67539,1300],{"class":133},[123,67541,67542],{"class":125,"line":8055},[123,67543,2196],{"class":133},[123,67545,67546],{"class":125,"line":8067},[123,67547,2409],{"emptyLinePlaceholder":50},[123,67549,67550,67552,67554,67556,67558],{"class":125,"line":9726},[123,67551,63756],{"class":1972},[123,67553,61303],{"class":51311},[123,67555,55086],{"class":51311},[123,67557,1408],{"class":51311},[123,67559,15582],{"class":133},[123,67561,67562,67564,67566,67568],{"class":125,"line":9751},[123,67563,63981],{"class":182},[123,67565,51448],{"class":133},[123,67567,54748],{"class":182},[123,67569,1300],{"class":133},[123,67571,67572,67574,67576,67578,67580,67582,67584],{"class":125,"line":9774},[123,67573,62243],{"class":182},[123,67575,51448],{"class":133},[123,67577,211],{"class":182},[123,67579,51503],{"class":129},[123,67581,51532],{"class":182},[123,67583,64002],{"class":182},[123,67585,1300],{"class":133},[123,67587,67588,67590,67592,67594],{"class":125,"line":9798},[123,67589,57427],{"class":182},[123,67591,51448],{"class":133},[123,67593,62380],{"class":182},[123,67595,1300],{"class":133},[123,67597,67598],{"class":125,"line":9803},[123,67599,2196],{"class":133},[123,67601,67602],{"class":125,"line":9808},[123,67603,2409],{"emptyLinePlaceholder":50},[123,67605,67606,67608,67610,67612,67614,67616],{"class":125,"line":9813},[123,67607,63756],{"class":1972},[123,67609,61303],{"class":51311},[123,67611,55086],{"class":51311},[123,67613,1408],{"class":51311},[123,67615,64035],{"class":1972},[123,67617,15582],{"class":133},[123,67619,67620,67622,67624,67626],{"class":125,"line":9822},[123,67621,61802],{"class":182},[123,67623,51448],{"class":133},[123,67625,64046],{"class":182},[123,67627,1300],{"class":133},[123,67629,67630,67632,67634,67636],{"class":125,"line":9827},[123,67631,57427],{"class":182},[123,67633,51448],{"class":133},[123,67635,64046],{"class":182},[123,67637,1300],{"class":133},[123,67639,67640],{"class":125,"line":9833},[123,67641,2196],{"class":133},[123,67643,67644],{"class":125,"line":9854},[123,67645,2409],{"emptyLinePlaceholder":50},[123,67647,67648,67650],{"class":125,"line":9860},[123,67649,64071],{"class":1972},[123,67651,15582],{"class":133},[123,67653,67654,67656,67658,67660,67662,67664],{"class":125,"line":9874},[123,67655,54706],{"class":182},[123,67657,51448],{"class":133},[123,67659,325],{"class":182},[123,67661,64084],{"class":182},[123,67663,51503],{"class":129},[123,67665,1300],{"class":133},[123,67667,67668],{"class":125,"line":9880},[123,67669,2196],{"class":133},[123,67671,67672],{"class":125,"line":9907},[123,67673,2409],{"emptyLinePlaceholder":50},[123,67675,67676,67678,67680],{"class":125,"line":9916},[123,67677,64071],{"class":1972},[123,67679,62185],{"class":1972},[123,67681,15582],{"class":133},[123,67683,67684,67686,67688,67690],{"class":125,"line":9922},[123,67685,55020],{"class":182},[123,67687,51448],{"class":133},[123,67689,54748],{"class":182},[123,67691,1300],{"class":133},[123,67693,67694],{"class":125,"line":9930},[123,67695,2196],{"class":133},[123,67697,67698],{"class":125,"line":9935},[123,67699,2409],{"emptyLinePlaceholder":50},[123,67701,67702,67704,67707],{"class":125,"line":16614},[123,67703,64071],{"class":1972},[123,67705,67706],{"class":1972}," .active",[123,67708,15582],{"class":133},[123,67710,67711,67713,67715,67717],{"class":125,"line":16620},[123,67712,55020],{"class":182},[123,67714,51448],{"class":133},[123,67716,60880],{"class":182},[123,67718,1300],{"class":133},[123,67720,67721],{"class":125,"line":16643},[123,67722,2196],{"class":133},[123,67724,67725,67727,67729],{"class":125,"line":16649},[123,67726,52428],{"class":133},[123,67728,5136],{"class":51311},[123,67730,51318],{"class":133},[123,67732,67733,67735,67737],{"class":125,"line":16672},[123,67734,51796],{"class":133},[123,67736,51345],{"class":51311},[123,67738,51318],{"class":133},[123,67740,67741],{"class":125,"line":16686},[123,67742,2409],{"emptyLinePlaceholder":50},[123,67744,67745,67747,67749],{"class":125,"line":16706},[123,67746,1044],{"class":133},[123,67748,51811],{"class":51311},[123,67750,51318],{"class":133},[123,67752,67753,67755,67757,67759,67761,67763],{"class":125,"line":16712},[123,67754,52155],{"class":133},[123,67756,51622],{"class":51311},[123,67758,53497],{"class":1972},[123,67760,179],{"class":133},[123,67762,64186],{"class":238},[123,67764,51318],{"class":133},[123,67766,67767,67769,67771,67773,67775,67777],{"class":125,"line":16723},[123,67768,51352],{"class":133},[123,67770,51622],{"class":51311},[123,67772,53497],{"class":1972},[123,67774,179],{"class":133},[123,67776,64201],{"class":238},[123,67778,51318],{"class":133},[123,67780,67781,67783,67785,67787,67789],{"class":125,"line":16746},[123,67782,55245],{"class":133},[123,67784,94],{"class":51311},[123,67786,64212],{"class":133},[123,67788,94],{"class":51311},[123,67790,51318],{"class":133},[123,67792,67793,67795,67797],{"class":125,"line":16768},[123,67794,55245],{"class":133},[123,67796,1141],{"class":51311},[123,67798,51318],{"class":133},[123,67800,67801,67803,67805,67807,67809,67811,67813,67815,67817,67819,67821,67823,67825,67828,67830,67832,67834,67836],{"class":125,"line":16773},[123,67802,55313],{"class":133},[123,67804,80],{"class":51311},[123,67806,61063],{"class":133},[123,67808,372],{"class":51311},[123,67810,53497],{"class":1972},[123,67812,179],{"class":133},[123,67814,59717],{"class":238},[123,67816,61068],{"class":1972},[123,67818,179],{"class":133},[123,67820,64247],{"class":238},[123,67822,53962],{"class":1972},[123,67824,179],{"class":133},[123,67826,67827],{"class":238},"\"0\"",[123,67829,64250],{"class":133},[123,67831,372],{"class":51311},[123,67833,55325],{"class":133},[123,67835,80],{"class":51311},[123,67837,51318],{"class":133},[123,67839,67840,67842,67844,67846,67848,67850,67852,67854,67856,67858,67860,67862,67864,67866,67868],{"class":125,"line":16779},[123,67841,55313],{"class":133},[123,67843,80],{"class":51311},[123,67845,61063],{"class":133},[123,67847,372],{"class":51311},[123,67849,61068],{"class":1972},[123,67851,179],{"class":133},[123,67853,64247],{"class":238},[123,67855,53962],{"class":1972},[123,67857,179],{"class":133},[123,67859,3687],{"class":238},[123,67861,64277],{"class":133},[123,67863,372],{"class":51311},[123,67865,55325],{"class":133},[123,67867,80],{"class":51311},[123,67869,51318],{"class":133},[123,67871,67872,67874,67876,67878,67880,67882,67884,67886,67888,67890,67892,67894,67896,67898,67900],{"class":125,"line":16793},[123,67873,55313],{"class":133},[123,67875,80],{"class":51311},[123,67877,61063],{"class":133},[123,67879,372],{"class":51311},[123,67881,61068],{"class":1972},[123,67883,179],{"class":133},[123,67885,64247],{"class":238},[123,67887,53962],{"class":1972},[123,67889,179],{"class":133},[123,67891,3710],{"class":238},[123,67893,64304],{"class":133},[123,67895,372],{"class":51311},[123,67897,55325],{"class":133},[123,67899,80],{"class":51311},[123,67901,51318],{"class":133},[123,67903,67904,67906,67908,67910,67912,67914,67916,67918,67920,67922,67924,67926,67928,67930,67932],{"class":125,"line":16806},[123,67905,55313],{"class":133},[123,67907,80],{"class":51311},[123,67909,61063],{"class":133},[123,67911,372],{"class":51311},[123,67913,61068],{"class":1972},[123,67915,179],{"class":133},[123,67917,64247],{"class":238},[123,67919,53962],{"class":1972},[123,67921,179],{"class":133},[123,67923,3723],{"class":238},[123,67925,64331],{"class":133},[123,67927,372],{"class":51311},[123,67929,55325],{"class":133},[123,67931,80],{"class":51311},[123,67933,51318],{"class":133},[123,67935,67936,67938,67940,67942,67944,67946,67948,67950,67952,67954,67956,67958,67960,67962,67964],{"class":125,"line":16811},[123,67937,55313],{"class":133},[123,67939,80],{"class":51311},[123,67941,61063],{"class":133},[123,67943,372],{"class":51311},[123,67945,61068],{"class":1972},[123,67947,179],{"class":133},[123,67949,64247],{"class":238},[123,67951,53962],{"class":1972},[123,67953,179],{"class":133},[123,67955,3736],{"class":238},[123,67957,64358],{"class":133},[123,67959,372],{"class":51311},[123,67961,55325],{"class":133},[123,67963,80],{"class":51311},[123,67965,51318],{"class":133},[123,67967,67968,67970,67972],{"class":125,"line":16825},[123,67969,55418],{"class":133},[123,67971,1141],{"class":51311},[123,67973,51318],{"class":133},[123,67975,67976,67978,67980],{"class":125,"line":16830},[123,67977,51787],{"class":133},[123,67979,51622],{"class":51311},[123,67981,51318],{"class":133},[123,67983,67984,67986,67988,67990,67992,67994],{"class":125,"line":16836},[123,67985,51352],{"class":133},[123,67987,51622],{"class":51311},[123,67989,53497],{"class":1972},[123,67991,179],{"class":133},[123,67993,64395],{"class":238},[123,67995,51318],{"class":133},[123,67997,67998,68000,68002,68004,68006,68008,68010,68012,68014,68016,68018,68020,68022,68024,68026,68028],{"class":125,"line":16841},[123,67999,55245],{"class":133},[123,68001,51622],{"class":51311},[123,68003,53497],{"class":1972},[123,68005,179],{"class":133},[123,68007,64410],{"class":238},[123,68009,61063],{"class":133},[123,68011,35],{"class":51311},[123,68013,55250],{"class":1972},[123,68015,179],{"class":133},[123,68017,64421],{"class":238},[123,68019,55258],{"class":1972},[123,68021,179],{"class":133},[123,68023,7662],{"class":238},[123,68025,64430],{"class":133},[123,68027,51622],{"class":51311},[123,68029,51318],{"class":133},[123,68031,68032,68034,68036,68038,68040,68042,68044,68046,68048,68050,68052,68054,68056,68058,68060,68062],{"class":125,"line":16855},[123,68033,55245],{"class":133},[123,68035,51622],{"class":51311},[123,68037,53497],{"class":1972},[123,68039,179],{"class":133},[123,68041,62634],{"class":238},[123,68043,61063],{"class":133},[123,68045,35],{"class":51311},[123,68047,55250],{"class":1972},[123,68049,179],{"class":133},[123,68051,64457],{"class":238},[123,68053,55258],{"class":1972},[123,68055,179],{"class":133},[123,68057,7662],{"class":238},[123,68059,64430],{"class":133},[123,68061,51622],{"class":51311},[123,68063,51318],{"class":133},[123,68065,68066,68068,68070,68072,68074,68076,68078,68080,68082,68084,68086,68088,68090,68092,68094,68096],{"class":125,"line":16860},[123,68067,55245],{"class":133},[123,68069,51622],{"class":51311},[123,68071,53497],{"class":1972},[123,68073,179],{"class":133},[123,68075,62634],{"class":238},[123,68077,61063],{"class":133},[123,68079,35],{"class":51311},[123,68081,55250],{"class":1972},[123,68083,179],{"class":133},[123,68085,64492],{"class":238},[123,68087,55258],{"class":1972},[123,68089,179],{"class":133},[123,68091,7662],{"class":238},[123,68093,64430],{"class":133},[123,68095,51622],{"class":51311},[123,68097,51318],{"class":133},[123,68099,68100,68102,68104,68106,68108,68110,68112,68114,68116,68118,68120,68122,68124,68126,68128,68130],{"class":125,"line":16865},[123,68101,55245],{"class":133},[123,68103,51622],{"class":51311},[123,68105,53497],{"class":1972},[123,68107,179],{"class":133},[123,68109,62634],{"class":238},[123,68111,61063],{"class":133},[123,68113,35],{"class":51311},[123,68115,55250],{"class":1972},[123,68117,179],{"class":133},[123,68119,64527],{"class":238},[123,68121,55258],{"class":1972},[123,68123,179],{"class":133},[123,68125,7662],{"class":238},[123,68127,64430],{"class":133},[123,68129,51622],{"class":51311},[123,68131,51318],{"class":133},[123,68133,68134,68136,68138,68140,68142,68144,68146,68148,68150,68152,68154,68156,68158,68160,68162,68164],{"class":125,"line":16879},[123,68135,55245],{"class":133},[123,68137,51622],{"class":51311},[123,68139,53497],{"class":1972},[123,68141,179],{"class":133},[123,68143,62634],{"class":238},[123,68145,61063],{"class":133},[123,68147,35],{"class":51311},[123,68149,55250],{"class":1972},[123,68151,179],{"class":133},[123,68153,64562],{"class":238},[123,68155,55258],{"class":1972},[123,68157,179],{"class":133},[123,68159,7662],{"class":238},[123,68161,64430],{"class":133},[123,68163,51622],{"class":51311},[123,68165,51318],{"class":133},[123,68167,68168,68170,68172],{"class":125,"line":16891},[123,68169,51787],{"class":133},[123,68171,51622],{"class":51311},[123,68173,51318],{"class":133},[123,68175,68176,68178,68180],{"class":125,"line":16896},[123,68177,52428],{"class":133},[123,68179,51622],{"class":51311},[123,68181,51318],{"class":133},[123,68183,68184,68186,68188],{"class":125,"line":16909},[123,68185,52155],{"class":133},[123,68187,51824],{"class":51311},[123,68189,51318],{"class":133},[123,68191,68192],{"class":125,"line":16914},[123,68193,68194],{"class":192},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[123,68196,68197],{"class":125,"line":16919},[123,68198,68199],{"class":192},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[123,68201,68202,68204,68206,68208,68210,68212,68214,68217],{"class":125,"line":16924},[123,68203,11231],{"class":129},[123,68205,61303],{"class":182},[123,68207,13574],{"class":129},[123,68209,54407],{"class":133},[123,68211,54410],{"class":1972},[123,68213,134],{"class":133},[123,68215,68216],{"class":238},"'.tab-nav ul'",[123,68218,140],{"class":133},[123,68220,68221],{"class":125,"line":16937},[123,68222,68223],{"class":192},"    \u002F\u002F 2.添加事件\n",[123,68225,68226,68228,68230,68232,68234,68236,68238,68240,68242],{"class":125,"line":16942},[123,68227,66965],{"class":133},[123,68229,57824],{"class":1972},[123,68231,134],{"class":133},[123,68233,57829],{"class":238},[123,68235,12445],{"class":133},[123,68237,54460],{"class":129},[123,68239,1667],{"class":133},[123,68241,208],{"class":5226},[123,68243,12452],{"class":133},[123,68245,68246,68248,68250],{"class":125,"line":32644},[123,68247,58255],{"class":133},[123,68249,67021],{"class":1972},[123,68251,67024],{"class":133},[123,68253,68254],{"class":125,"line":32650},[123,68255,68256],{"class":192},"      \u002F\u002Fe.targer是我们点击的对象\n",[123,68258,68259,68261,68263,68265,68268],{"class":125,"line":32656},[123,68260,54491],{"class":129},[123,68262,67045],{"class":133},[123,68264,54497],{"class":129},[123,68266,68267],{"class":238}," 'A'",[123,68269,12452],{"class":133},[123,68271,68272,68274,68276,68278,68281,68283,68285,68287,68289],{"class":125,"line":32662},[123,68273,51936],{"class":133},[123,68275,54410],{"class":1972},[123,68277,134],{"class":133},[123,68279,68280],{"class":238},"'.active'",[123,68282,57014],{"class":133},[123,68284,57017],{"class":1972},[123,68286,134],{"class":133},[123,68288,64725],{"class":238},[123,68290,140],{"class":133},[123,68292,68293,68296,68298,68300,68302],{"class":125,"line":32668},[123,68294,68295],{"class":133},"        e.target.classList.",[123,68297,5344],{"class":1972},[123,68299,134],{"class":133},[123,68301,64725],{"class":238},[123,68303,140],{"class":133},[123,68305,68306],{"class":125,"line":32679},[123,68307,2409],{"emptyLinePlaceholder":50},[123,68309,68310],{"class":125,"line":32685},[123,68311,68312],{"class":192},"        \u002F\u002F 下面大盒子模块\n",[123,68314,68315],{"class":125,"line":32705},[123,68316,68317],{"class":192},"        \u002F\u002F console.log(e.target.dataset.id)\n",[123,68319,68320,68322,68324,68326,68328],{"class":125,"line":32711},[123,68321,61281],{"class":129},[123,68323,3041],{"class":182},[123,68325,13574],{"class":129},[123,68327,45577],{"class":129},[123,68329,68330],{"class":133},"e.target.dataset.id\n",[123,68332,68333,68335,68337,68339,68341,68343,68345,68347,68349],{"class":125,"line":32722},[123,68334,51936],{"class":133},[123,68336,54410],{"class":1972},[123,68338,134],{"class":133},[123,68340,64773],{"class":238},[123,68342,57014],{"class":133},[123,68344,57017],{"class":1972},[123,68346,134],{"class":133},[123,68348,64725],{"class":238},[123,68350,140],{"class":133},[123,68352,68353,68355,68357,68359,68361,68363,68365,68367,68369,68371,68373,68375,68377],{"class":125,"line":32728},[123,68354,51936],{"class":133},[123,68356,54410],{"class":1972},[123,68358,134],{"class":133},[123,68360,64799],{"class":238},[123,68362,575],{"class":133},[123,68364,45577],{"class":129},[123,68366,25129],{"class":182},[123,68368,57043],{"class":238},[123,68370,57014],{"class":133},[123,68372,5344],{"class":1972},[123,68374,134],{"class":133},[123,68376,64725],{"class":238},[123,68378,140],{"class":133},[123,68380,68381],{"class":125,"line":32734},[123,68382,2409],{"emptyLinePlaceholder":50},[123,68384,68385],{"class":125,"line":32740},[123,68386,52409],{"class":133},[123,68388,68389],{"class":125,"line":32746},[123,68390,33472],{"class":133},[123,68392,68393,68395,68397],{"class":125,"line":32752},[123,68394,52428],{"class":133},[123,68396,51824],{"class":51311},[123,68398,51318],{"class":133},[123,68400,68401,68403,68405],{"class":125,"line":32758},[123,68402,51796],{"class":133},[123,68404,51811],{"class":51311},[123,68406,51318],{"class":133},[123,68408,68409],{"class":125,"line":32764},[123,68410,2409],{"emptyLinePlaceholder":50},[123,68412,68413,68415,68417],{"class":125,"line":32784},[123,68414,51796],{"class":133},[123,68416,50646],{"class":51311},[123,68418,51318],{"class":133},[94,68420,68422],{"id":68421},"_333-页面加载事件","3.3.3 页面加载事件",[77,68424,68425],{},[80,68426,68427],{},"load",[14,68429,68430],{},[35,68431],{"alt":37,"src":68432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68434,68435],{},"window代表整个窗口，比document还要大",[14,68437,68438],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68440,68441],{},"img.addEventListener('load', function () {",[14,68443,68444],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68446,52475],{},[77,68448,68449],{"start":45},[80,68450,68451],{},"DOMContentLoaded",[14,68453,68454],{},[35,68455],{"alt":37,"src":68456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68458,68459],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[94,68461,68463],{"id":68462},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68465,68466],{},[35,68467],{"alt":37,"src":68468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68470,68471],{},[35,68472],{"alt":37,"src":68473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68475,68476],{},[35,68477],{"alt":37,"src":68478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68480,68481],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68483,68484],{},"获得的是数字型数据，不带单位",[14,68486,68487],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68489,68490],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68492,68493],{},"它是通过document.documentElement来获取",[14,68495,68496],{},[35,68497],{"alt":37,"src":68498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68500,68501],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[94,68503,68505],{"id":68504},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68507,68508],{},[35,68509],{"alt":37,"src":68510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68512,68513],{},[35,68514],{"alt":37,"src":68515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[94,68517,68519],{"id":68518},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68521,68522],{},[35,68523],{"alt":37,"src":68524},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68526,68527],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68529,68530],{},[35,68531],{"alt":37,"src":68532},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68534,68535],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68537,68538],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68540,68541],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68543,68544],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68546,68547],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68549,68550],{},[35,68551],{"alt":37,"src":68552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,68554,68555],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,68557,68558],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,68560,68561],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,68563,68564],{},"e.pageX-box.getBoundingClientRect()",[94,68566,68568],{"id":68567},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,68570,68571],{},[35,68572],{"alt":37,"src":68573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,68575,68576],{},"这个是相对于视口来说的，它是个方法，不是属性值",[94,68578,68580],{"id":68579},"_338-总结","3.3.8 总结",[14,68582,68583],{},[35,68584],{"alt":37,"src":68585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,68587,68588],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,68590,68591],{},"修改盒子的宽高只能通过width和height来实现",[94,68593,68595],{"id":68594},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[114,68597,68599],{"className":50644,"code":68598,"language":50646,"meta":37,"style":37},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[120,68600,68601,68606,68611,68616,68621],{"__ignoreMap":37},[123,68602,68603],{"class":125,"line":126},[123,68604,68605],{"class":133},"\u002F* 页面滑动 *\u002F\n",[123,68607,68608],{"class":125,"line":45},[123,68609,68610],{"class":133},"html {\n",[123,68612,68613],{"class":125,"line":1189},[123,68614,68615],{"class":133},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[123,68617,68618],{"class":125,"line":1204},[123,68619,68620],{"class":133},"  scroll-behavior: smooth;\n",[123,68622,68623],{"class":125,"line":1210},[123,68624,1574],{"class":133},[14,68626,68627],{},"默认是auto",[94,68629,68631],{"id":68630},"_3310-日期对象","3.3.10 日期对象",[22008,68633,68635],{"id":68634},"_33101-实例化","3.3.10.1 实例化",[14,68637,68638],{},[35,68639],{"alt":37,"src":68640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[22008,68642,68644],{"id":68643},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,68646,68647],{},[35,68648],{"alt":37,"src":68649},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,68651,68652],{},"月份+1",[14,68654,68655],{},"老外认为第一天为0，星期天",[14,68657,68658],{},"方法使用的时候必须要跟括号",[14,68660,68661],{},"快速获得日期",[14,68663,68664],{},"\u002F\u002F 得到年月日",[14,68666,68667],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,68669,68670],{},"\u002F\u002F 得到当地日期",[14,68672,68673],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,68675,68676],{},"\u002F\u002F 得到当地时间",[14,68678,68679],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,68681,68682],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,68684,68685],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51824,68687,68688],{},"\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,68690,68691],{},"学会去封装函数！",[22008,68693,68695],{"id":68694},"_33103-时间戳","3.3.10.3 时间戳",[14,68697,68698],{},[35,68699],{"alt":37,"src":68700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,68702,68703],{},[35,68704],{"alt":37,"src":68705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,68707,68708],{},"三种方法记住一个就可以",[94,68710,68712],{"id":68711},"_3311-节点操作","3.3.11 节点操作",[22008,68714,68716],{"id":68715},"_33111-dom节点","3.3.11.1 DOM节点",[14,68718,68719],{},[35,68720],{"alt":37,"src":68721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,68723,68724],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[22008,68726,68728],{"id":68727},"_33112-查找节点","3.3.11.2 查找节点",[14,68730,68731],{},"前边的document.querySelector()是获取的元素",[14,68733,68734],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,68736,68737],{},[35,68738],{"alt":37,"src":68739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[77,68741,68742],{},[80,68743,68744],{},"父节点",[14,68746,68747],{},[35,68748],{"alt":37,"src":68749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[77,68751,68752],{"start":45},[80,68753,68754],{},"子节点",[14,68756,68757],{},[35,68758],{"alt":37,"src":68759},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,68761,68762],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,68764,68765],{},"children获得的是伪数组，是亲儿子",[77,68767,68768],{"start":1189},[80,68769,68770],{},"兄弟节点",[14,68772,68773],{},[35,68774],{"alt":37,"src":68775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[22008,68777,68779],{"id":68778},"_33113-增加节点","3.3.11.3 增加节点",[14,68781,68782],{},[35,68783],{"alt":37,"src":68784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,68786,68787],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,68789,68790],{},[35,68791],{"alt":37,"src":68792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,68794,68795],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,68797,68798],{},"下面是写法的部分展示，就按照下边的格式来写",[14,68800,68801],{},"例：",[51824,68803,68804],{},"\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,68806,68807],{},[35,68808],{"alt":37,"src":68809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,68811,68812],{},"false只克隆标签，里边的内容不会克隆过来",[114,68814,68816],{"className":50644,"code":68815,"language":50646,"meta":37,"style":37},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[120,68817,68818],{"__ignoreMap":37},[123,68819,68820],{"class":125,"line":126},[123,68821,68815],{"class":133},[22008,68823,68825],{"id":68824},"_33114-删除节点","3.3.11.4 删除节点",[14,68827,68828],{},[35,68829],{"alt":37,"src":68830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,68832,68833],{},"父亲删儿子",[14,68835,68836],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[94,68838,68840],{"id":68839},"_3312-m端事件","3.3.12 M端事件",[14,68842,68843],{},"M端就是移动端",[14,68845,68846],{},[35,68847],{"alt":37,"src":68848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[94,68850,68852],{"id":68851},"_3313-插件","3.3.13 插件",[14,68854,68855],{},"要熟悉官网！！！",[14,68857,68858],{},[372,68859,68860],{"href":68860,"rel":68861},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23875],[14,68863,68864],{},[372,68865,68866],{"href":68866,"rel":68867},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23875],[94,68869,68871],{"id":68870},"_3314-学生信息表","3.3.14 学生信息表",[77,68873,68874,68877,68880,68883,68886,68889,68892,68895],{},[80,68875,68876],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[80,68878,68879],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[80,68881,68882],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[80,68884,68885],{},"用好表单元素自带的属性，value,name等",[80,68887,68888],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[80,68890,68891],{},"不要忘记事件对象",[80,68893,68894],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[80,68896,68897],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,68899,68900],{},"结构：",[114,68902,68904],{"className":50644,"code":68903,"language":50646,"meta":37,"style":37},"\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",[120,68905,68906,68916,68930,68934,68942,68956,68976,68997,69010,69034,69042,69046,69054,69067,69088,69116,69144,69149,69171,69191,69210,69218,69246,69268,69288,69308,69328,69348,69368,69376,69396,69404,69408,69421,69429,69437,69445,69458,69471,69484,69497,69510,69523,69536,69544,69552,69560,69565,69570,69575,69580,69585,69590,69595,69600,69605,69610,69615,69620,69625,69633,69641,69649,69653,69673,69692,69712,69732,69752,69772,69776,69781,69801,69806,69816,69821,69826,69846,69868,69873,69883,69887,69891,69896,69901,69930,69944,69959,69963,69967,69971,69976,69987,70000,70005,70010,70015,70020,70025,70029,70034,70039,70048,70053,70058,70070,70075,70082,70086,70091,70101,70106,70116,70121,70149,70170,70180,70200,70218,70235,70252,70269,70286,70290,70300,70305,70310,70315,70326,70330,70334,70338,70343,70348,70369,70381,70386,70391,70396,70410,70415,70422,70426,70430,70438,70442,70450,70454],{"__ignoreMap":37},[123,68907,68908,68910,68912,68914],{"class":125,"line":126},[123,68909,51308],{"class":133},[123,68911,51312],{"class":51311},[123,68913,51315],{"class":1972},[123,68915,51318],{"class":133},[123,68917,68918,68920,68922,68924,68926,68928],{"class":125,"line":45},[123,68919,1044],{"class":133},[123,68921,50646],{"class":51311},[123,68923,51327],{"class":1972},[123,68925,179],{"class":133},[123,68927,51332],{"class":238},[123,68929,51318],{"class":133},[123,68931,68932],{"class":125,"line":1189},[123,68933,2409],{"emptyLinePlaceholder":50},[123,68935,68936,68938,68940],{"class":125,"line":1204},[123,68937,1044],{"class":133},[123,68939,51345],{"class":51311},[123,68941,51318],{"class":133},[123,68943,68944,68946,68948,68950,68952,68954],{"class":125,"line":1210},[123,68945,52155],{"class":133},[123,68947,51355],{"class":51311},[123,68949,51358],{"class":1972},[123,68951,179],{"class":133},[123,68953,51363],{"class":238},[123,68955,59138],{"class":133},[123,68957,68958,68960,68962,68964,68966,68968,68970,68972,68974],{"class":125,"line":1224},[123,68959,52155],{"class":133},[123,68961,51355],{"class":51311},[123,68963,14930],{"class":1972},[123,68965,179],{"class":133},[123,68967,51402],{"class":238},[123,68969,51382],{"class":1972},[123,68971,179],{"class":133},[123,68973,51409],{"class":238},[123,68975,59138],{"class":133},[123,68977,68978,68980,68982,68984,68986,68988,68990,68992,68995],{"class":125,"line":1230},[123,68979,52155],{"class":133},[123,68981,51355],{"class":51311},[123,68983,51374],{"class":1972},[123,68985,179],{"class":133},[123,68987,51379],{"class":238},[123,68989,51382],{"class":1972},[123,68991,179],{"class":133},[123,68993,68994],{"class":238},"\"ie=edge\"",[123,68996,59138],{"class":133},[123,68998,68999,69001,69003,69006,69008],{"class":125,"line":1321},[123,69000,52155],{"class":133},[123,69002,51418],{"class":51311},[123,69004,69005],{"class":133},">学生信息管理\u003C\u002F",[123,69007,51418],{"class":51311},[123,69009,51318],{"class":133},[123,69011,69012,69014,69017,69020,69022,69025,69027,69029,69032],{"class":125,"line":1327},[123,69013,52155],{"class":133},[123,69015,69016],{"class":51311},"link",[123,69018,69019],{"class":1972}," rel",[123,69021,179],{"class":133},[123,69023,69024],{"class":238},"\"stylesheet\"",[123,69026,61068],{"class":1972},[123,69028,179],{"class":133},[123,69030,69031],{"class":238},"\"css\u002Findex.css\"",[123,69033,59138],{"class":133},[123,69035,69036,69038,69040],{"class":125,"line":1339},[123,69037,51796],{"class":133},[123,69039,51345],{"class":51311},[123,69041,51318],{"class":133},[123,69043,69044],{"class":125,"line":1621},[123,69045,2409],{"emptyLinePlaceholder":50},[123,69047,69048,69050,69052],{"class":125,"line":1626},[123,69049,1044],{"class":133},[123,69051,51811],{"class":51311},[123,69053,51318],{"class":133},[123,69055,69056,69058,69060,69063,69065],{"class":125,"line":1632},[123,69057,52155],{"class":133},[123,69059,10],{"class":51311},[123,69061,69062],{"class":133},">新增学员\u003C\u002F",[123,69064,10],{"class":51311},[123,69066,51318],{"class":133},[123,69068,69069,69071,69073,69075,69077,69079,69082,69084,69086],{"class":125,"line":1637},[123,69070,52155],{"class":133},[123,69072,66636],{"class":51311},[123,69074,53497],{"class":1972},[123,69076,179],{"class":133},[123,69078,62675],{"class":238},[123,69080,69081],{"class":1972}," autocomplete",[123,69083,179],{"class":133},[123,69085,31787],{"class":238},[123,69087,51318],{"class":133},[123,69089,69090,69093,69095,69097,69099,69101,69103,69105,69108,69110,69112,69114],{"class":125,"line":1651},[123,69091,69092],{"class":133},"    姓名：\u003C",[123,69094,53832],{"class":51311},[123,69096,53835],{"class":1972},[123,69098,179],{"class":133},[123,69100,62710],{"class":238},[123,69102,53497],{"class":1972},[123,69104,179],{"class":133},[123,69106,69107],{"class":238},"\"uname\"",[123,69109,14930],{"class":1972},[123,69111,179],{"class":133},[123,69113,69107],{"class":238},[123,69115,59138],{"class":133},[123,69117,69118,69121,69123,69125,69127,69129,69131,69133,69136,69138,69140,69142],{"class":125,"line":1656},[123,69119,69120],{"class":133},"    年龄：\u003C",[123,69122,53832],{"class":51311},[123,69124,53835],{"class":1972},[123,69126,179],{"class":133},[123,69128,62710],{"class":238},[123,69130,53497],{"class":1972},[123,69132,179],{"class":133},[123,69134,69135],{"class":238},"\"age\"",[123,69137,14930],{"class":1972},[123,69139,179],{"class":133},[123,69141,69135],{"class":238},[123,69143,59138],{"class":133},[123,69145,69146],{"class":125,"line":1662},[123,69147,69148],{"class":133},"    性别:\n",[123,69150,69151,69153,69156,69158,69160,69163,69165,69167,69169],{"class":125,"line":1683},[123,69152,51352],{"class":133},[123,69154,69155],{"class":51311},"select",[123,69157,14930],{"class":1972},[123,69159,179],{"class":133},[123,69161,69162],{"class":238},"\"gender\"",[123,69164,53497],{"class":1972},[123,69166,179],{"class":133},[123,69168,69162],{"class":238},[123,69170,51318],{"class":133},[123,69172,69173,69175,69178,69180,69182,69184,69187,69189],{"class":125,"line":1688},[123,69174,55245],{"class":133},[123,69176,69177],{"class":51311},"option",[123,69179,66662],{"class":1972},[123,69181,179],{"class":133},[123,69183,9971],{"class":238},[123,69185,69186],{"class":133},">男\u003C\u002F",[123,69188,69177],{"class":51311},[123,69190,51318],{"class":133},[123,69192,69193,69195,69197,69199,69201,69203,69206,69208],{"class":125,"line":1702},[123,69194,55245],{"class":133},[123,69196,69177],{"class":51311},[123,69198,66662],{"class":1972},[123,69200,179],{"class":133},[123,69202,10040],{"class":238},[123,69204,69205],{"class":133},">女\u003C\u002F",[123,69207,69177],{"class":51311},[123,69209,51318],{"class":133},[123,69211,69212,69214,69216],{"class":125,"line":1707},[123,69213,51787],{"class":133},[123,69215,69155],{"class":51311},[123,69217,51318],{"class":133},[123,69219,69220,69223,69225,69227,69229,69231,69233,69235,69238,69240,69242,69244],{"class":125,"line":1736},[123,69221,69222],{"class":133},"    薪资：\u003C",[123,69224,53832],{"class":51311},[123,69226,53835],{"class":1972},[123,69228,179],{"class":133},[123,69230,62710],{"class":238},[123,69232,53497],{"class":1972},[123,69234,179],{"class":133},[123,69236,69237],{"class":238},"\"salary\"",[123,69239,14930],{"class":1972},[123,69241,179],{"class":133},[123,69243,69237],{"class":238},[123,69245,59138],{"class":133},[123,69247,69248,69251,69253,69255,69257,69260,69262,69264,69266],{"class":125,"line":1741},[123,69249,69250],{"class":133},"    就业城市：\u003C",[123,69252,69155],{"class":51311},[123,69254,14930],{"class":1972},[123,69256,179],{"class":133},[123,69258,69259],{"class":238},"\"city\"",[123,69261,53497],{"class":1972},[123,69263,179],{"class":133},[123,69265,69259],{"class":238},[123,69267,51318],{"class":133},[123,69269,69270,69272,69274,69276,69278,69281,69284,69286],{"class":125,"line":1758},[123,69271,55245],{"class":133},[123,69273,69177],{"class":51311},[123,69275,66662],{"class":1972},[123,69277,179],{"class":133},[123,69279,69280],{"class":238},"\"北京\"",[123,69282,69283],{"class":133},">北京\u003C\u002F",[123,69285,69177],{"class":51311},[123,69287,51318],{"class":133},[123,69289,69290,69292,69294,69296,69298,69301,69304,69306],{"class":125,"line":1763},[123,69291,55245],{"class":133},[123,69293,69177],{"class":51311},[123,69295,66662],{"class":1972},[123,69297,179],{"class":133},[123,69299,69300],{"class":238},"\"上海\"",[123,69302,69303],{"class":133},">上海\u003C\u002F",[123,69305,69177],{"class":51311},[123,69307,51318],{"class":133},[123,69309,69310,69312,69314,69316,69318,69321,69324,69326],{"class":125,"line":1768},[123,69311,55245],{"class":133},[123,69313,69177],{"class":51311},[123,69315,66662],{"class":1972},[123,69317,179],{"class":133},[123,69319,69320],{"class":238},"\"广州\"",[123,69322,69323],{"class":133},">广州\u003C\u002F",[123,69325,69177],{"class":51311},[123,69327,51318],{"class":133},[123,69329,69330,69332,69334,69336,69338,69341,69344,69346],{"class":125,"line":1773},[123,69331,55245],{"class":133},[123,69333,69177],{"class":51311},[123,69335,66662],{"class":1972},[123,69337,179],{"class":133},[123,69339,69340],{"class":238},"\"深圳\"",[123,69342,69343],{"class":133},">深圳\u003C\u002F",[123,69345,69177],{"class":51311},[123,69347,51318],{"class":133},[123,69349,69350,69352,69354,69356,69358,69361,69364,69366],{"class":125,"line":1787},[123,69351,55245],{"class":133},[123,69353,69177],{"class":51311},[123,69355,66662],{"class":1972},[123,69357,179],{"class":133},[123,69359,69360],{"class":238},"\"曹县\"",[123,69362,69363],{"class":133},">曹县\u003C\u002F",[123,69365,69177],{"class":51311},[123,69367,51318],{"class":133},[123,69369,69370,69372,69374],{"class":125,"line":1792},[123,69371,51787],{"class":133},[123,69373,69155],{"class":51311},[123,69375,51318],{"class":133},[123,69377,69378,69380,69382,69384,69386,69389,69392,69394],{"class":125,"line":2586},[123,69379,51352],{"class":133},[123,69381,53898],{"class":51311},[123,69383,53497],{"class":1972},[123,69385,179],{"class":133},[123,69387,69388],{"class":238},"\"add\"",[123,69390,69391],{"class":133},">录入\u003C\u002F",[123,69393,53898],{"class":51311},[123,69395,51318],{"class":133},[123,69397,69398,69400,69402],{"class":125,"line":2600},[123,69399,52428],{"class":133},[123,69401,66636],{"class":51311},[123,69403,51318],{"class":133},[123,69405,69406],{"class":125,"line":2608},[123,69407,2409],{"emptyLinePlaceholder":50},[123,69409,69410,69412,69414,69417,69419],{"class":125,"line":2613},[123,69411,52155],{"class":133},[123,69413,10],{"class":51311},[123,69415,69416],{"class":133},">就业榜\u003C\u002F",[123,69418,10],{"class":51311},[123,69420,51318],{"class":133},[123,69422,69423,69425,69427],{"class":125,"line":2619},[123,69424,52155],{"class":133},[123,69426,271],{"class":51311},[123,69428,51318],{"class":133},[123,69430,69431,69433,69435],{"class":125,"line":2625},[123,69432,51352],{"class":133},[123,69434,274],{"class":51311},[123,69436,51318],{"class":133},[123,69438,69439,69441,69443],{"class":125,"line":2630},[123,69440,55245],{"class":133},[123,69442,277],{"class":51311},[123,69444,51318],{"class":133},[123,69446,69447,69449,69451,69454,69456],{"class":125,"line":7958},[123,69448,55313],{"class":133},[123,69450,280],{"class":51311},[123,69452,69453],{"class":133},">序号\u003C\u002F",[123,69455,280],{"class":51311},[123,69457,51318],{"class":133},[123,69459,69460,69462,69464,69467,69469],{"class":125,"line":7982},[123,69461,55313],{"class":133},[123,69463,280],{"class":51311},[123,69465,69466],{"class":133},">姓名\u003C\u002F",[123,69468,280],{"class":51311},[123,69470,51318],{"class":133},[123,69472,69473,69475,69477,69480,69482],{"class":125,"line":7987},[123,69474,55313],{"class":133},[123,69476,280],{"class":51311},[123,69478,69479],{"class":133},">年龄\u003C\u002F",[123,69481,280],{"class":51311},[123,69483,51318],{"class":133},[123,69485,69486,69488,69490,69493,69495],{"class":125,"line":7993},[123,69487,55313],{"class":133},[123,69489,280],{"class":51311},[123,69491,69492],{"class":133},">性别\u003C\u002F",[123,69494,280],{"class":51311},[123,69496,51318],{"class":133},[123,69498,69499,69501,69503,69506,69508],{"class":125,"line":8020},[123,69500,55313],{"class":133},[123,69502,280],{"class":51311},[123,69504,69505],{"class":133},">薪资\u003C\u002F",[123,69507,280],{"class":51311},[123,69509,51318],{"class":133},[123,69511,69512,69514,69516,69519,69521],{"class":125,"line":8025},[123,69513,55313],{"class":133},[123,69515,280],{"class":51311},[123,69517,69518],{"class":133},">就业城市\u003C\u002F",[123,69520,280],{"class":51311},[123,69522,51318],{"class":133},[123,69524,69525,69527,69529,69532,69534],{"class":125,"line":8031},[123,69526,55313],{"class":133},[123,69528,280],{"class":51311},[123,69530,69531],{"class":133},">操作\u003C\u002F",[123,69533,280],{"class":51311},[123,69535,51318],{"class":133},[123,69537,69538,69540,69542],{"class":125,"line":8043},[123,69539,55418],{"class":133},[123,69541,277],{"class":51311},[123,69543,51318],{"class":133},[123,69545,69546,69548,69550],{"class":125,"line":8055},[123,69547,51787],{"class":133},[123,69549,274],{"class":51311},[123,69551,51318],{"class":133},[123,69553,69554,69556,69558],{"class":125,"line":8067},[123,69555,51352],{"class":133},[123,69557,318],{"class":51311},[123,69559,51318],{"class":133},[123,69561,69562],{"class":125,"line":9726},[123,69563,69564],{"class":192},"      \u003C!-- \n",[123,69566,69567],{"class":125,"line":9751},[123,69568,69569],{"class":192},"        \u003Ctr>\n",[123,69571,69572],{"class":125,"line":9774},[123,69573,69574],{"class":192},"          \u003Ctd>1001\u003C\u002Ftd>\n",[123,69576,69577],{"class":125,"line":9798},[123,69578,69579],{"class":192},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[123,69581,69582],{"class":125,"line":9803},[123,69583,69584],{"class":192},"          \u003Ctd>19\u003C\u002Ftd>\n",[123,69586,69587],{"class":125,"line":9808},[123,69588,69589],{"class":192},"          \u003Ctd>男\u003C\u002Ftd>\n",[123,69591,69592],{"class":125,"line":9813},[123,69593,69594],{"class":192},"          \u003Ctd>15000\u003C\u002Ftd>\n",[123,69596,69597],{"class":125,"line":9822},[123,69598,69599],{"class":192},"          \u003Ctd>上海\u003C\u002Ftd>\n",[123,69601,69602],{"class":125,"line":9827},[123,69603,69604],{"class":192},"          \u003Ctd>\n",[123,69606,69607],{"class":125,"line":9833},[123,69608,69609],{"class":192},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[123,69611,69612],{"class":125,"line":9854},[123,69613,69614],{"class":192},"          \u003C\u002Ftd>\n",[123,69616,69617],{"class":125,"line":9860},[123,69618,69619],{"class":192},"        \u003C\u002Ftr> \n",[123,69621,69622],{"class":125,"line":9874},[123,69623,69624],{"class":192},"        -->\n",[123,69626,69627,69629,69631],{"class":125,"line":9880},[123,69628,51787],{"class":133},[123,69630,318],{"class":51311},[123,69632,51318],{"class":133},[123,69634,69635,69637,69639],{"class":125,"line":9907},[123,69636,52428],{"class":133},[123,69638,271],{"class":51311},[123,69640,51318],{"class":133},[123,69642,69643,69645,69647],{"class":125,"line":9916},[123,69644,52155],{"class":133},[123,69646,51824],{"class":51311},[123,69648,51318],{"class":133},[123,69650,69651],{"class":125,"line":9922},[123,69652,59969],{"class":192},[123,69654,69655,69657,69660,69662,69664,69666,69668,69671],{"class":125,"line":9930},[123,69656,11231],{"class":129},[123,69658,69659],{"class":182}," uname",[123,69661,13574],{"class":129},[123,69663,54407],{"class":133},[123,69665,54410],{"class":1972},[123,69667,134],{"class":133},[123,69669,69670],{"class":238},"'.uname'",[123,69672,140],{"class":133},[123,69674,69675,69677,69679,69681,69683,69685,69687,69690],{"class":125,"line":9935},[123,69676,11231],{"class":129},[123,69678,15699],{"class":182},[123,69680,13574],{"class":129},[123,69682,54407],{"class":133},[123,69684,54410],{"class":1972},[123,69686,134],{"class":133},[123,69688,69689],{"class":238},"'.age'",[123,69691,140],{"class":133},[123,69693,69694,69696,69699,69701,69703,69705,69707,69710],{"class":125,"line":16614},[123,69695,11231],{"class":129},[123,69697,69698],{"class":182}," gender",[123,69700,13574],{"class":129},[123,69702,54407],{"class":133},[123,69704,54410],{"class":1972},[123,69706,134],{"class":133},[123,69708,69709],{"class":238},"'.gender'",[123,69711,140],{"class":133},[123,69713,69714,69716,69719,69721,69723,69725,69727,69730],{"class":125,"line":16620},[123,69715,11231],{"class":129},[123,69717,69718],{"class":182}," salary",[123,69720,13574],{"class":129},[123,69722,54407],{"class":133},[123,69724,54410],{"class":1972},[123,69726,134],{"class":133},[123,69728,69729],{"class":238},"'.salary'",[123,69731,140],{"class":133},[123,69733,69734,69736,69739,69741,69743,69745,69747,69750],{"class":125,"line":16643},[123,69735,11231],{"class":129},[123,69737,69738],{"class":182}," city",[123,69740,13574],{"class":129},[123,69742,54407],{"class":133},[123,69744,54410],{"class":1972},[123,69746,134],{"class":133},[123,69748,69749],{"class":238},"'.city'",[123,69751,140],{"class":133},[123,69753,69754,69756,69759,69761,69763,69765,69767,69770],{"class":125,"line":16649},[123,69755,11231],{"class":129},[123,69757,69758],{"class":182}," tbody",[123,69760,13574],{"class":129},[123,69762,54407],{"class":133},[123,69764,54410],{"class":1972},[123,69766,134],{"class":133},[123,69768,69769],{"class":238},"'tbody'",[123,69771,140],{"class":133},[123,69773,69774],{"class":125,"line":16672},[123,69775,2409],{"emptyLinePlaceholder":50},[123,69777,69778],{"class":125,"line":16686},[123,69779,69780],{"class":192},"    \u002F\u002F 获取所有带有name属性的元素\n",[123,69782,69783,69785,69788,69790,69792,69794,69796,69799],{"class":125,"line":16706},[123,69784,11231],{"class":129},[123,69786,69787],{"class":182}," items",[123,69789,13574],{"class":129},[123,69791,54407],{"class":133},[123,69793,55692],{"class":1972},[123,69795,134],{"class":133},[123,69797,69798],{"class":238},"'[name]'",[123,69800,140],{"class":133},[123,69802,69803],{"class":125,"line":16712},[123,69804,69805],{"class":192},"    \u002F\u002F 声明一个空的数组\n",[123,69807,69808,69810,69812,69814],{"class":125,"line":16723},[123,69809,11231],{"class":129},[123,69811,57706],{"class":182},[123,69813,13574],{"class":129},[123,69815,51849],{"class":133},[123,69817,69818],{"class":125,"line":16746},[123,69819,69820],{"class":192},"    \u002F\u002F 1.录入模块\n",[123,69822,69823],{"class":125,"line":16768},[123,69824,69825],{"class":192},"    \u002F\u002F 1.1这是一个表单提交事件\n",[123,69827,69828,69830,69833,69835,69837,69839,69841,69844],{"class":125,"line":16773},[123,69829,11231],{"class":129},[123,69831,69832],{"class":182}," info",[123,69834,13574],{"class":129},[123,69836,54407],{"class":133},[123,69838,54410],{"class":1972},[123,69840,134],{"class":133},[123,69842,69843],{"class":238},"'.info'",[123,69845,140],{"class":133},[123,69847,69848,69851,69853,69855,69858,69860,69862,69864,69866],{"class":125,"line":16779},[123,69849,69850],{"class":133},"    info.",[123,69852,57824],{"class":1972},[123,69854,134],{"class":133},[123,69856,69857],{"class":238},"'submit'",[123,69859,12445],{"class":133},[123,69861,54460],{"class":129},[123,69863,1667],{"class":133},[123,69865,208],{"class":5226},[123,69867,12452],{"class":133},[123,69869,69870],{"class":125,"line":16793},[123,69871,69872],{"class":192},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[123,69874,69875,69878,69881],{"class":125,"line":16806},[123,69876,69877],{"class":133},"      e.",[123,69879,69880],{"class":1972},"preventDefault",[123,69882,1985],{"class":133},[123,69884,69885],{"class":125,"line":16811},[123,69886,60023],{"class":192},[123,69888,69889],{"class":125,"line":16825},[123,69890,2409],{"emptyLinePlaceholder":50},[123,69892,69893],{"class":125,"line":16830},[123,69894,69895],{"class":192},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[123,69897,69898],{"class":125,"line":16836},[123,69899,69900],{"class":192},"      \u002F\u002F 先遍历循环\n",[123,69902,69903,69905,69907,69909,69911,69913,69915,69917,69919,69922,69924,69926,69928],{"class":125,"line":16841},[123,69904,52295],{"class":129},[123,69906,1667],{"class":133},[123,69908,51858],{"class":129},[123,69910,9448],{"class":133},[123,69912,179],{"class":129},[123,69914,4102],{"class":182},[123,69916,9455],{"class":133},[123,69918,1044],{"class":129},[123,69920,69921],{"class":133}," items.",[123,69923,51979],{"class":182},[123,69925,3223],{"class":133},[123,69927,2301],{"class":129},[123,69929,12452],{"class":133},[123,69931,69932,69934,69937,69939,69942],{"class":125,"line":16855},[123,69933,2506],{"class":129},[123,69935,69936],{"class":133}," (items[i].value ",[123,69938,54497],{"class":129},[123,69940,69941],{"class":238}," ''",[123,69943,12452],{"class":133},[123,69945,69946,69949,69952,69954,69957],{"class":125,"line":16860},[123,69947,69948],{"class":129},"          return",[123,69950,69951],{"class":1972}," alert",[123,69953,134],{"class":133},[123,69955,69956],{"class":238},"'输入内容不能为空'",[123,69958,140],{"class":133},[123,69960,69961],{"class":125,"line":16865},[123,69962,2538],{"class":133},[123,69964,69965],{"class":125,"line":16879},[123,69966,52409],{"class":133},[123,69968,69969],{"class":125,"line":16891},[123,69970,2409],{"emptyLinePlaceholder":50},[123,69972,69973],{"class":125,"line":16896},[123,69974,69975],{"class":192},"      \u002F\u002F 创建新的对象\n",[123,69977,69978,69980,69983,69985],{"class":125,"line":16909},[123,69979,58239],{"class":129},[123,69981,69982],{"class":182}," obj",[123,69984,13574],{"class":129},[123,69986,15582],{"class":133},[123,69988,69989,69992,69994,69996,69998],{"class":125,"line":16914},[123,69990,69991],{"class":133},"        stuID: arr.",[123,69993,51979],{"class":182},[123,69995,45577],{"class":129},[123,69997,25129],{"class":182},[123,69999,31477],{"class":133},[123,70001,70002],{"class":125,"line":16919},[123,70003,70004],{"class":133},"        uname: uname.value,\n",[123,70006,70007],{"class":125,"line":16924},[123,70008,70009],{"class":133},"        age: age.value,\n",[123,70011,70012],{"class":125,"line":16937},[123,70013,70014],{"class":133},"        gender: gender.value,\n",[123,70016,70017],{"class":125,"line":16942},[123,70018,70019],{"class":133},"        salary: salary.value,\n",[123,70021,70022],{"class":125,"line":32644},[123,70023,70024],{"class":133},"        city: city.value\n",[123,70026,70027],{"class":125,"line":32650},[123,70028,52409],{"class":133},[123,70030,70031],{"class":125,"line":32656},[123,70032,70033],{"class":192},"      \u002F\u002F console.log(obj);\n",[123,70035,70036],{"class":125,"line":32662},[123,70037,70038],{"class":192},"      \u002F\u002F 追加到数组里面\n",[123,70040,70041,70043,70045],{"class":125,"line":32668},[123,70042,58018],{"class":133},[123,70044,51895],{"class":1972},[123,70046,70047],{"class":133},"(obj)\n",[123,70049,70050],{"class":125,"line":32679},[123,70051,70052],{"class":192},"      \u002F\u002F console.log(arr);\n",[123,70054,70055],{"class":125,"line":32685},[123,70056,70057],{"class":192},"      \u002F\u002F 清空表单  reset重置表单\n",[123,70059,70060,70063,70065,70068],{"class":125,"line":32705},[123,70061,70062],{"class":182},"      this",[123,70064,692],{"class":133},[123,70066,70067],{"class":1972},"reset",[123,70069,1985],{"class":133},[123,70071,70072],{"class":125,"line":32711},[123,70073,70074],{"class":192},"      \u002F\u002F 调用渲染函数\n",[123,70076,70077,70080],{"class":125,"line":32722},[123,70078,70079],{"class":1972},"      render",[123,70081,1985],{"class":133},[123,70083,70084],{"class":125,"line":32728},[123,70085,33472],{"class":133},[123,70087,70088],{"class":125,"line":32734},[123,70089,70090],{"class":192},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[123,70092,70093,70096,70099],{"class":125,"line":32740},[123,70094,70095],{"class":129},"    function",[123,70097,70098],{"class":1972}," render",[123,70100,10863],{"class":133},[123,70102,70103],{"class":125,"line":32746},[123,70104,70105],{"class":192},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[123,70107,70108,70111,70113],{"class":125,"line":32752},[123,70109,70110],{"class":133},"      tbody.innerHTML ",[123,70112,179],{"class":129},[123,70114,70115],{"class":238}," ''\n",[123,70117,70118],{"class":125,"line":32758},[123,70119,70120],{"class":192},"      \u002F\u002F 遍历数组\n",[123,70122,70123,70125,70127,70129,70131,70133,70135,70137,70139,70141,70143,70145,70147],{"class":125,"line":32764},[123,70124,52295],{"class":129},[123,70126,1667],{"class":133},[123,70128,51858],{"class":129},[123,70130,9448],{"class":133},[123,70132,179],{"class":129},[123,70134,4102],{"class":182},[123,70136,9455],{"class":133},[123,70138,1044],{"class":129},[123,70140,51976],{"class":133},[123,70142,51979],{"class":182},[123,70144,3223],{"class":133},[123,70146,2301],{"class":129},[123,70148,12452],{"class":133},[123,70150,70151,70153,70156,70158,70160,70163,70165,70168],{"class":125,"line":32784},[123,70152,61281],{"class":129},[123,70154,70155],{"class":182}," tr",[123,70157,13574],{"class":129},[123,70159,54407],{"class":133},[123,70161,70162],{"class":1972},"createElement",[123,70164,134],{"class":133},[123,70166,70167],{"class":238},"'tr'",[123,70169,140],{"class":133},[123,70171,70172,70175,70177],{"class":125,"line":32790},[123,70173,70174],{"class":133},"        tr.innerHTML ",[123,70176,179],{"class":129},[123,70178,70179],{"class":238}," `\n",[123,70181,70182,70185,70187,70189,70191,70194,70197],{"class":125,"line":32806},[123,70183,70184],{"class":238},"        \u003Ctd>${",[123,70186,3889],{"class":133},[123,70188,1024],{"class":238},[123,70190,575],{"class":133},[123,70192,70193],{"class":238},"].",[123,70195,70196],{"class":133},"stuID",[123,70198,70199],{"class":238},"}\u003C\u002Ftd>\n",[123,70201,70202,70205,70207,70209,70211,70213,70216],{"class":125,"line":32812},[123,70203,70204],{"class":238},"          \u003Ctd>${",[123,70206,3889],{"class":133},[123,70208,1024],{"class":238},[123,70210,575],{"class":133},[123,70212,70193],{"class":238},[123,70214,70215],{"class":133},"uname",[123,70217,70199],{"class":238},[123,70219,70220,70222,70224,70226,70228,70230,70233],{"class":125,"line":32826},[123,70221,70204],{"class":238},[123,70223,3889],{"class":133},[123,70225,1024],{"class":238},[123,70227,575],{"class":133},[123,70229,70193],{"class":238},[123,70231,70232],{"class":133},"age",[123,70234,70199],{"class":238},[123,70236,70237,70239,70241,70243,70245,70247,70250],{"class":125,"line":32832},[123,70238,70204],{"class":238},[123,70240,3889],{"class":133},[123,70242,1024],{"class":238},[123,70244,575],{"class":133},[123,70246,70193],{"class":238},[123,70248,70249],{"class":133},"gender",[123,70251,70199],{"class":238},[123,70253,70254,70256,70258,70260,70262,70264,70267],{"class":125,"line":32847},[123,70255,70204],{"class":238},[123,70257,3889],{"class":133},[123,70259,1024],{"class":238},[123,70261,575],{"class":133},[123,70263,70193],{"class":238},[123,70265,70266],{"class":133},"salary",[123,70268,70199],{"class":238},[123,70270,70271,70273,70275,70277,70279,70281,70284],{"class":125,"line":32853},[123,70272,70204],{"class":238},[123,70274,3889],{"class":133},[123,70276,1024],{"class":238},[123,70278,575],{"class":133},[123,70280,70193],{"class":238},[123,70282,70283],{"class":133},"city",[123,70285,70199],{"class":238},[123,70287,70288],{"class":125,"line":32862},[123,70289,69604],{"class":238},[123,70291,70292,70295,70297],{"class":125,"line":32868},[123,70293,70294],{"class":238},"            \u003Ca href=\"javascript:\" data-id=${",[123,70296,575],{"class":133},[123,70298,70299],{"class":238},"}>删除\u003C\u002Fa>\n",[123,70301,70302],{"class":125,"line":32877},[123,70303,70304],{"class":238},"          \u003C\u002Ftd> \n",[123,70306,70307],{"class":125,"line":32883},[123,70308,70309],{"class":238},"          `\n",[123,70311,70312],{"class":125,"line":32889},[123,70313,70314],{"class":192},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[123,70316,70317,70320,70323],{"class":125,"line":32898},[123,70318,70319],{"class":133},"        tbody.",[123,70321,70322],{"class":1972},"appendChild",[123,70324,70325],{"class":133},"(tr)\n",[123,70327,70328],{"class":125,"line":32904},[123,70329,52409],{"class":133},[123,70331,70332],{"class":125,"line":32915},[123,70333,2196],{"class":133},[123,70335,70336],{"class":125,"line":32921},[123,70337,2409],{"emptyLinePlaceholder":50},[123,70339,70340],{"class":125,"line":32940},[123,70341,70342],{"class":192},"    \u002F\u002F 3.删除委托\n",[123,70344,70345],{"class":125,"line":32946},[123,70346,70347],{"class":192},"    \u002F\u002F 3.1 事件委托 tbody\n",[123,70349,70350,70353,70355,70357,70359,70361,70363,70365,70367],{"class":125,"line":32957},[123,70351,70352],{"class":133},"    tbody.",[123,70354,57824],{"class":1972},[123,70356,134],{"class":133},[123,70358,57829],{"class":238},[123,70360,12445],{"class":133},[123,70362,54460],{"class":129},[123,70364,1667],{"class":133},[123,70366,208],{"class":5226},[123,70368,12452],{"class":133},[123,70370,70371,70373,70375,70377,70379],{"class":125,"line":32963},[123,70372,54491],{"class":129},[123,70374,67045],{"class":133},[123,70376,54497],{"class":129},[123,70378,68267],{"class":238},[123,70380,12452],{"class":133},[123,70382,70383],{"class":125,"line":32983},[123,70384,70385],{"class":192},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[123,70387,70388],{"class":125,"line":32999},[123,70389,70390],{"class":192},"        \u002F\u002F console.log(e.target.dataset.id);\n",[123,70392,70393],{"class":125,"line":33005},[123,70394,70395],{"class":192},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[123,70397,70398,70401,70403,70406,70408],{"class":125,"line":33019},[123,70399,70400],{"class":133},"        arr.",[123,70402,58021],{"class":1972},[123,70404,70405],{"class":133},"(e.target.dataset.id, ",[123,70407,351],{"class":182},[123,70409,140],{"class":133},[123,70411,70412],{"class":125,"line":33025},[123,70413,70414],{"class":192},"        \u002F\u002F 重新渲染一次\n",[123,70416,70417,70420],{"class":125,"line":33031},[123,70418,70419],{"class":1972},"        render",[123,70421,1985],{"class":133},[123,70423,70424],{"class":125,"line":33042},[123,70425,52409],{"class":133},[123,70427,70428],{"class":125,"line":33048},[123,70429,33472],{"class":133},[123,70431,70432,70434,70436],{"class":125,"line":33054},[123,70433,52428],{"class":133},[123,70435,51824],{"class":51311},[123,70437,51318],{"class":133},[123,70439,70440],{"class":125,"line":33064},[123,70441,2409],{"emptyLinePlaceholder":50},[123,70443,70444,70446,70448],{"class":125,"line":33070},[123,70445,51796],{"class":133},[123,70447,51811],{"class":51311},[123,70449,51318],{"class":133},[123,70451,70452],{"class":125,"line":33081},[123,70453,2409],{"emptyLinePlaceholder":50},[123,70455,70456,70458,70460],{"class":125,"line":33087},[123,70457,51796],{"class":133},[123,70459,50646],{"class":51311},[123,70461,51318],{"class":133},[14,70463,70464],{},"样式：",[114,70466,70470],{"className":70467,"code":70468,"language":70469,"meta":37,"style":37},"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",[120,70471,70472,70477,70487,70496,70500,70504,70509,70519,70524,70528,70533,70543,70548,70557,70561,70565,70570,70575,70585,70595,70600,70604,70609,70618,70628,70633,70643,70653,70657,70662,70670,70674,70679,70684,70689,70697,70706,70710,70715,70724,70728,70733,70742,70746,70751,70760,70769,70777,70781,70786,70795,70805,70814,70824,70830,70839,70849,70859,70863,70868,70877,70885,70895,70903,70912,70921,70931,70939,70943,70948,70957],{"__ignoreMap":37},[123,70473,70474],{"class":125,"line":126},[123,70475,70476],{"class":133},"* {\n",[123,70478,70479,70482,70484],{"class":125,"line":45},[123,70480,70481],{"class":51311},"  margin",[123,70483,51448],{"class":133},[123,70485,70486],{"class":238},"0;\n",[123,70488,70489,70492,70494],{"class":125,"line":1189},[123,70490,70491],{"class":238},"  padding",[123,70493,51448],{"class":133},[123,70495,70486],{"class":238},[123,70497,70498],{"class":125,"line":1204},[123,70499,1574],{"class":133},[123,70501,70502],{"class":125,"line":1210},[123,70503,2409],{"emptyLinePlaceholder":50},[123,70505,70506],{"class":125,"line":1224},[123,70507,70508],{"class":238},"a {\n",[123,70510,70511,70514,70516],{"class":125,"line":1230},[123,70512,70513],{"class":51311},"  text-decoration",[123,70515,51448],{"class":133},[123,70517,70518],{"class":238},"none;\n",[123,70520,70521],{"class":125,"line":1321},[123,70522,70523],{"class":238},"  color:#721c24;\n",[123,70525,70526],{"class":125,"line":1327},[123,70527,1574],{"class":133},[123,70529,70530],{"class":125,"line":1339},[123,70531,70532],{"class":238},"h1 {\n",[123,70534,70535,70538,70540],{"class":125,"line":1621},[123,70536,70537],{"class":51311},"  text-align",[123,70539,51448],{"class":133},[123,70541,70542],{"class":238},"center;\n",[123,70544,70545],{"class":125,"line":1626},[123,70546,70547],{"class":238},"  color:#333;\n",[123,70549,70550,70552,70554],{"class":125,"line":1632},[123,70551,70481],{"class":51311},[123,70553,51448],{"class":133},[123,70555,70556],{"class":238},"20px 0;\n",[123,70558,70559],{"class":125,"line":1637},[123,70560,2683],{"class":133},[123,70562,70563],{"class":125,"line":1651},[123,70564,1574],{"class":133},[123,70566,70567],{"class":125,"line":1656},[123,70568,70569],{"class":238},"table {\n",[123,70571,70572],{"class":125,"line":1662},[123,70573,70574],{"class":238},"  margin:0 auto;\n",[123,70576,70577,70580,70582],{"class":125,"line":1683},[123,70578,70579],{"class":51311},"  width",[123,70581,51448],{"class":133},[123,70583,70584],{"class":238},"800px;\n",[123,70586,70587,70590,70592],{"class":125,"line":1688},[123,70588,70589],{"class":51311},"  border-collapse",[123,70591,51448],{"class":133},[123,70593,70594],{"class":238},"collapse;\n",[123,70596,70597],{"class":125,"line":1702},[123,70598,70599],{"class":238},"  color:#004085;\n",[123,70601,70602],{"class":125,"line":1707},[123,70603,1574],{"class":133},[123,70605,70606],{"class":125,"line":1736},[123,70607,70608],{"class":238},"th {\n",[123,70610,70611,70613,70615],{"class":125,"line":1741},[123,70612,70491],{"class":51311},[123,70614,51448],{"class":133},[123,70616,70617],{"class":238},"10px;\n",[123,70619,70620,70623,70625],{"class":125,"line":1758},[123,70621,70622],{"class":51311},"  background",[123,70624,51448],{"class":133},[123,70626,70627],{"class":192},"#cfe5ff;\n",[123,70629,70630],{"class":125,"line":1763},[123,70631,70632],{"class":133},"  \n",[123,70634,70635,70638,70640],{"class":125,"line":1768},[123,70636,70637],{"class":51311},"  font-size",[123,70639,51448],{"class":133},[123,70641,70642],{"class":238},"20px;\n",[123,70644,70645,70648,70650],{"class":125,"line":1773},[123,70646,70647],{"class":51311},"  font-weight",[123,70649,51448],{"class":133},[123,70651,70652],{"class":238},"400;\n",[123,70654,70655],{"class":125,"line":1787},[123,70656,1574],{"class":133},[123,70658,70659],{"class":125,"line":1792},[123,70660,70661],{"class":238},"td,th {\n",[123,70663,70664,70667],{"class":125,"line":2586},[123,70665,70666],{"class":238},"  border:1px solid",[123,70668,70669],{"class":192}," #b8daff;\n",[123,70671,70672],{"class":125,"line":2600},[123,70673,1574],{"class":133},[123,70675,70676],{"class":125,"line":2608},[123,70677,70678],{"class":238},"td {\n",[123,70680,70681],{"class":125,"line":2613},[123,70682,70683],{"class":238},"  padding:10px;\n",[123,70685,70686],{"class":125,"line":2619},[123,70687,70688],{"class":238},"  color:#666;\n",[123,70690,70691,70693,70695],{"class":125,"line":2625},[123,70692,70537],{"class":51311},[123,70694,51448],{"class":133},[123,70696,70542],{"class":238},[123,70698,70699,70701,70703],{"class":125,"line":2630},[123,70700,70637],{"class":51311},[123,70702,51448],{"class":133},[123,70704,70705],{"class":238},"16px;\n",[123,70707,70708],{"class":125,"line":7958},[123,70709,1574],{"class":133},[123,70711,70712],{"class":125,"line":7982},[123,70713,70714],{"class":238},"tbody tr {\n",[123,70716,70717,70719,70721],{"class":125,"line":7987},[123,70718,70622],{"class":51311},[123,70720,51448],{"class":133},[123,70722,70723],{"class":192},"#fff;\n",[123,70725,70726],{"class":125,"line":7993},[123,70727,1574],{"class":133},[123,70729,70730],{"class":125,"line":8020},[123,70731,70732],{"class":238},"tbody tr:hover {\n",[123,70734,70735,70737,70739],{"class":125,"line":8025},[123,70736,70622],{"class":51311},[123,70738,51448],{"class":133},[123,70740,70741],{"class":192},"#e1ecf8;\n",[123,70743,70744],{"class":125,"line":8031},[123,70745,1574],{"class":133},[123,70747,70748],{"class":125,"line":8043},[123,70749,70750],{"class":238},".info {\n",[123,70752,70753,70755,70757],{"class":125,"line":8055},[123,70754,70579],{"class":51311},[123,70756,51448],{"class":133},[123,70758,70759],{"class":238},"900px;\n",[123,70761,70762,70764,70766],{"class":125,"line":8067},[123,70763,70481],{"class":51311},[123,70765,51448],{"class":133},[123,70767,70768],{"class":238},"50px auto;\n",[123,70770,70771,70773,70775],{"class":125,"line":9726},[123,70772,70537],{"class":51311},[123,70774,51448],{"class":133},[123,70776,70542],{"class":238},[123,70778,70779],{"class":125,"line":9751},[123,70780,1574],{"class":133},[123,70782,70783],{"class":125,"line":9774},[123,70784,70785],{"class":238},".info  input, .info select {\n",[123,70787,70788,70790,70792],{"class":125,"line":9798},[123,70789,70579],{"class":51311},[123,70791,51448],{"class":133},[123,70793,70794],{"class":238},"80px;\n",[123,70796,70797,70800,70802],{"class":125,"line":9803},[123,70798,70799],{"class":51311},"  height",[123,70801,51448],{"class":133},[123,70803,70804],{"class":238},"27px;\n",[123,70806,70807,70810,70812],{"class":125,"line":9808},[123,70808,70809],{"class":51311},"  outline",[123,70811,51448],{"class":133},[123,70813,70518],{"class":238},[123,70815,70816,70819,70821],{"class":125,"line":9813},[123,70817,70818],{"class":51311},"  border-radius",[123,70820,51448],{"class":133},[123,70822,70823],{"class":238},"5px;\n",[123,70825,70826,70828],{"class":125,"line":9822},[123,70827,70666],{"class":238},[123,70829,70669],{"class":192},[123,70831,70832,70835,70837],{"class":125,"line":9827},[123,70833,70834],{"class":51311},"  padding-left",[123,70836,51448],{"class":133},[123,70838,70823],{"class":238},[123,70840,70841,70844,70846],{"class":125,"line":9833},[123,70842,70843],{"class":51311},"  box-sizing",[123,70845,51448],{"class":133},[123,70847,70848],{"class":238},"border-box;\n",[123,70850,70851,70854,70856],{"class":125,"line":9854},[123,70852,70853],{"class":51311},"  margin-right",[123,70855,51448],{"class":133},[123,70857,70858],{"class":238},"15px;\n",[123,70860,70861],{"class":125,"line":9860},[123,70862,1574],{"class":133},[123,70864,70865],{"class":125,"line":9874},[123,70866,70867],{"class":238},".info button {\n",[123,70869,70870,70872,70874],{"class":125,"line":9880},[123,70871,70579],{"class":51311},[123,70873,51448],{"class":133},[123,70875,70876],{"class":238},"60px;\n",[123,70878,70879,70881,70883],{"class":125,"line":9907},[123,70880,70799],{"class":51311},[123,70882,51448],{"class":133},[123,70884,70804],{"class":238},[123,70886,70887,70890,70892],{"class":125,"line":9916},[123,70888,70889],{"class":51311},"  background-color",[123,70891,51448],{"class":133},[123,70893,70894],{"class":192},"#004085;\n",[123,70896,70897,70899,70901],{"class":125,"line":9922},[123,70898,70809],{"class":51311},[123,70900,51448],{"class":133},[123,70902,70518],{"class":238},[123,70904,70905,70908,70910],{"class":125,"line":9930},[123,70906,70907],{"class":51311},"  border",[123,70909,51448],{"class":133},[123,70911,70486],{"class":238},[123,70913,70914,70917,70919],{"class":125,"line":9935},[123,70915,70916],{"class":51311},"  color",[123,70918,51448],{"class":133},[123,70920,70723],{"class":192},[123,70922,70923,70926,70928],{"class":125,"line":16614},[123,70924,70925],{"class":51311},"  cursor",[123,70927,51448],{"class":133},[123,70929,70930],{"class":238},"pointer;\n",[123,70932,70933,70935,70937],{"class":125,"line":16620},[123,70934,70818],{"class":51311},[123,70936,51448],{"class":133},[123,70938,70823],{"class":238},[123,70940,70941],{"class":125,"line":16643},[123,70942,1574],{"class":133},[123,70944,70945],{"class":125,"line":16649},[123,70946,70947],{"class":238},".info .age {\n",[123,70949,70950,70952,70954],{"class":125,"line":16672},[123,70951,70579],{"class":51311},[123,70953,51448],{"class":133},[123,70955,70956],{"class":238},"50px;\n",[123,70958,70959],{"class":125,"line":16686},[123,70960,1574],{"class":133},[14,70962,70963],{},"思路：",[14,70965,70966],{},[35,70967],{"alt":37,"src":70968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,70970,70971],{},[35,70972],{"alt":37,"src":70973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,70975,70976],{},[35,70977],{"alt":37,"src":70978},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[94,70980,70982],{"id":70981},"_3315-重绘回流","3.3.15 重绘回流",[14,70984,70985],{},[35,70986],{"alt":37,"src":70987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,70989,70990],{},[35,70991],{"alt":37,"src":70992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,70994,70995],{},[35,70996],{"alt":37,"src":70997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[65,70999,71001],{"id":71000},"_34-bom","3.4 BOM",[14,71003,71004],{},[35,71005],{"alt":37,"src":71006},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,71008,71009],{},"平时写的document省略了window而已，实际上是window.document",[14,71011,71012],{},"函数也是这样，调用的时候实际为window.fn()",[14,71014,71015],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,71017,71018],{},"window大部分情况下可以省略",[94,71020,71022],{"id":71021},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71024,71025],{},"只执行一次",[14,71027,71028],{},[35,71029],{"alt":37,"src":71030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71032,71033],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71035,71036],{},[35,71037],{"alt":37,"src":71038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[94,71040,71042],{"id":71041},"_342-js执行机制","3.4.2 JS执行机制",[14,71044,71045],{},[35,71046],{"alt":37,"src":71047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71049,71050],{},"两个的结果都是1111 3333 2222",[14,71052,71053],{},[35,71054],{"alt":37,"src":71055},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71057,71058],{},[35,71059],{"alt":37,"src":71060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71062,71063],{},[35,71064],{"alt":37,"src":71065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71067,71068],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71070,71071],{},"工作流程：",[14,71073,71074],{},[35,71075],{"alt":37,"src":71076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71078,71079],{},[35,71080],{"alt":37,"src":71081},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71083,71084],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71086,71087],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[94,71089,71091],{"id":71090},"_343-location对象","3.4.3 location对象",[14,71093,71094],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71096,71097],{},[35,71098],{"alt":37,"src":71099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71101,71102],{},"href可以跳转页面",[77,71104,71105],{},[80,71106,71107],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71109,71110],{},"search得到提交信息之后网站后边的地址",[14,71112,71113],{},[35,71114],{"alt":37,"src":71115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71117,71118],{},[35,71119],{"alt":37,"src":71120},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[77,71122,71123],{"start":45},[80,71124,71125],{},"hash:这个获取单页面应用#后边的地址",[14,71127,71128],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71130,71131],{},[35,71132],{"alt":37,"src":71133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[114,71135,71137],{"className":53078,"code":71136,"language":53080,"meta":37,"style":37},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[120,71138,71139,71159,71179],{"__ignoreMap":37},[123,71140,71141,71143,71145,71147,71149,71152,71155,71157],{"class":125,"line":126},[123,71142,52155],{"class":133},[123,71144,372],{"class":51311},[123,71146,61068],{"class":1972},[123,71148,179],{"class":133},[123,71150,71151],{"class":238},"\"#\u002Fmy\"",[123,71153,71154],{"class":133},">我的\u003C\u002F",[123,71156,372],{"class":51311},[123,71158,51318],{"class":133},[123,71160,71161,71163,71165,71167,71169,71172,71175,71177],{"class":125,"line":45},[123,71162,52155],{"class":133},[123,71164,372],{"class":51311},[123,71166,61068],{"class":1972},[123,71168,179],{"class":133},[123,71170,71171],{"class":238},"\"#\u002Ffriend\"",[123,71173,71174],{"class":133},">关注\u003C\u002F",[123,71176,372],{"class":51311},[123,71178,51318],{"class":133},[123,71180,71181,71183,71185,71187,71189,71192,71195,71197],{"class":125,"line":1189},[123,71182,52155],{"class":133},[123,71184,372],{"class":51311},[123,71186,61068],{"class":1972},[123,71188,179],{"class":133},[123,71190,71191],{"class":238},"\"#\u002Fdownload\"",[123,71193,71194],{"class":133},">下载\u003C\u002F",[123,71196,372],{"class":51311},[123,71198,51318],{"class":133},[14,71200,71201],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[77,71203,71204],{"start":1189},[80,71205,71206,71207,71209,71210,71212],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53727,71208],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53727,71211],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[94,71214,71216],{"id":71215},"_345-navigator对象","3.4.5 navigator对象",[14,71218,71219],{},[35,71220],{"alt":37,"src":71221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[114,71223,71227],{"className":71224,"code":71225,"language":71226,"meta":37,"style":37},"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",[120,71228,71229,71234,71245,71257,71262,71313,71354,71359,71372,71384,71389],{"__ignoreMap":37},[123,71230,71231],{"class":125,"line":126},[123,71232,71233],{"class":192},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[123,71235,71236,71238,71240,71242],{"class":125,"line":45},[123,71237,360],{"class":129},[123,71239,134],{"class":133},[123,71241,54460],{"class":129},[123,71243,71244],{"class":133}," () { \n",[123,71246,71247,71249,71252,71254],{"class":125,"line":1189},[123,71248,6802],{"class":129},[123,71250,71251],{"class":182}," userAgent",[123,71253,13574],{"class":129},[123,71255,71256],{"class":133}," navigator.userAgent \n",[123,71258,71259],{"class":125,"line":1204},[123,71260,71261],{"class":192},"\u002F\u002F 验证是否为Android或iPhone \n",[123,71263,71264,71266,71269,71271,71274,71277,71279,71281,71284,71286,71289,71293,71295,71297,71299,71302,71304,71306,71308,71310],{"class":125,"line":1210},[123,71265,6802],{"class":129},[123,71267,71268],{"class":182}," android",[123,71270,13574],{"class":129},[123,71272,71273],{"class":133}," userAgent.",[123,71275,71276],{"class":1972},"match",[123,71278,134],{"class":133},[123,71280,718],{"class":238},[123,71282,71283],{"class":47988},"(Android);",[123,71285,1120],{"class":129},[123,71287,71288],{"class":182},"[\\s",[123,71290,71292],{"class":71291},"snhLl","\\\u002F",[123,71294,1074],{"class":182},[123,71296,615],{"class":129},[123,71298,134],{"class":47988},[123,71300,71301],{"class":182},"[\\d.]",[123,71303,615],{"class":129},[123,71305,563],{"class":47988},[123,71307,1120],{"class":129},[123,71309,718],{"class":238},[123,71311,71312],{"class":133},") \n",[123,71314,71315,71317,71320,71322,71324,71326,71328,71330,71333,71336,71339,71341,71343,71346,71348,71350,71352],{"class":125,"line":1224},[123,71316,6802],{"class":129},[123,71318,71319],{"class":182}," iphone",[123,71321,13574],{"class":129},[123,71323,71273],{"class":133},[123,71325,71276],{"class":1972},[123,71327,134],{"class":133},[123,71329,718],{"class":238},[123,71331,71332],{"class":47988},"(iPhone",[123,71334,71335],{"class":182},"\\s",[123,71337,71338],{"class":47988},"OS)",[123,71340,71335],{"class":182},[123,71342,134],{"class":47988},[123,71344,71345],{"class":182},"[\\d_]",[123,71347,615],{"class":129},[123,71349,563],{"class":47988},[123,71351,718],{"class":238},[123,71353,71312],{"class":133},[123,71355,71356],{"class":125,"line":1230},[123,71357,71358],{"class":192},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[123,71360,71361,71363,71366,71369],{"class":125,"line":1321},[123,71362,1540],{"class":129},[123,71364,71365],{"class":133}," (android ",[123,71367,71368],{"class":129},"||",[123,71370,71371],{"class":133}," iphone) { \n",[123,71373,71374,71377,71379,71382],{"class":125,"line":1327},[123,71375,71376],{"class":133},"location.href ",[123,71378,179],{"class":129},[123,71380,71381],{"class":238}," 'http:\u002F\u002Fm.itcast.cn'",[123,71383,2683],{"class":133},[123,71385,71386],{"class":125,"line":1339},[123,71387,71388],{"class":133},"} \n",[123,71390,71391],{"class":125,"line":1621},[123,71392,71393],{"class":133},"})()\n",[94,71395,71397],{"id":71396},"_346-histroy对象","3.4.6 histroy对象",[14,71399,71400],{},[35,71401],{"alt":37,"src":71402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71404,71405],{},"浏览器地址的前进与后退!!!",[14,71407,71408],{},"history.back() 等效于 history.go(-1)",[14,71410,71411],{},"history.forward() 等效于 history.go(1)",[65,71413,71415],{"id":71414},"_35-本地存储","3.5 本地存储",[77,71417,71418,71421,71424],{},[80,71419,71420],{},"数据存储在用户浏览器中",[80,71422,71423],{},"设置、读取方便、甚至页面刷新不丢失数据",[80,71425,71426],{},"容量较大，sessionStorage和localStorage约 5M 左右",[94,71428,71430],{"id":71429},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71432,71433],{},"只能存储字符串",[14,71435,71436],{},[35,71437],{"alt":37,"src":71438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71440,71441],{},[35,71442],{"alt":37,"src":71443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71445,71446],{},"键值对要加引号,不然就会当变量来看了",[14,71448,71449],{},"localStorage.setItem('uname', 'pink')",[14,71451,71452],{},"刷新之后信息不再丢失",[14,71454,71455],{},"操作key,value会跟着变",[14,71457,71458],{},"删除只删除键就可以,即名字",[14,71460,71449],{},[14,71462,71463],{},"改:",[14,71465,71466],{},"localStorage.setItem('uname','red')",[14,71468,71469],{},"有这个键就是改,没有这个键就是改",[14,71471,71472],{},[35,71473],{"alt":37,"src":71474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71476,71477],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71479,71480],{},[35,71481],{"alt":37,"src":71482},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71484,71485],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[94,71487,71489],{"id":71488},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71491,71492],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71494,71495],{},"特性:",[77,71497,71498,71501,71504,71507],{},[80,71499,71500],{},"生命周期为关闭浏览器窗口",[80,71502,71503],{},"在同一个窗口(页面)下数据可以共享",[80,71505,71506],{},"以键值对的形式存储使用",[80,71508,71509],{},"用法跟localStorage 基本相同",[94,71511,71513],{"id":71512},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71515,71516],{},"本地只能存储字符串,无法直接存储复杂数据类型",[114,71518,71520],{"className":53078,"code":71519,"language":53080,"meta":37,"style":37},"\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",[120,71521,71522,71530,71535,71540,71545,71550,71554,71559,71564],{"__ignoreMap":37},[123,71523,71524,71526,71528],{"class":125,"line":126},[123,71525,1044],{"class":133},[123,71527,51824],{"class":51311},[123,71529,51318],{"class":133},[123,71531,71532],{"class":125,"line":45},[123,71533,71534],{"class":133},"    const obj = {\n",[123,71536,71537],{"class":125,"line":1189},[123,71538,71539],{"class":133},"      uname: 'pink老师',\n",[123,71541,71542],{"class":125,"line":1204},[123,71543,71544],{"class":133},"      age: 18,\n",[123,71546,71547],{"class":125,"line":1210},[123,71548,71549],{"class":133},"      gender: '女'\n",[123,71551,71552],{"class":125,"line":1224},[123,71553,2196],{"class":133},[123,71555,71556],{"class":125,"line":1230},[123,71557,71558],{"class":133},"    \u002F\u002F 存储复杂数据类型\n",[123,71560,71561],{"class":125,"line":1321},[123,71562,71563],{"class":133},"    localStorage.setItem('obj', obj)\n",[123,71565,71566,71568,71570],{"class":125,"line":1327},[123,71567,52428],{"class":133},[123,71569,51824],{"class":51311},[123,71571,51318],{"class":133},[14,71573,71574],{},[35,71575],{"alt":37,"src":71576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,71578,71579],{},"如果获取一下数据:",[14,71581,71582],{},"log(localStorage.getItem('obj'))",[14,71584,71585],{},[35,71586],{"alt":37,"src":71587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,71589,71590],{},"发现直接存对象是使用不了的!!!",[22008,71592,71594],{"id":71593},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,71596,71597],{},[35,71598],{"alt":37,"src":71599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[114,71601,71603],{"className":50644,"code":71602,"language":50646,"meta":37,"style":37},"\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",[120,71604,71605,71613,71623,71633,71642,71650,71654,71658,71684,71703,71711,71715,71720,71725],{"__ignoreMap":37},[123,71606,71607,71609,71611],{"class":125,"line":126},[123,71608,1044],{"class":133},[123,71610,51824],{"class":51311},[123,71612,51318],{"class":133},[123,71614,71615,71617,71619,71621],{"class":125,"line":45},[123,71616,11231],{"class":129},[123,71618,69982],{"class":182},[123,71620,13574],{"class":129},[123,71622,15582],{"class":133},[123,71624,71625,71628,71631],{"class":125,"line":1189},[123,71626,71627],{"class":133},"      uname: ",[123,71629,71630],{"class":238},"'pink老师'",[123,71632,31477],{"class":133},[123,71634,71635,71638,71640],{"class":125,"line":1204},[123,71636,71637],{"class":133},"      age: ",[123,71639,784],{"class":182},[123,71641,31477],{"class":133},[123,71643,71644,71647],{"class":125,"line":1210},[123,71645,71646],{"class":133},"      gender: ",[123,71648,71649],{"class":238},"'女'\n",[123,71651,71652],{"class":125,"line":1224},[123,71653,2196],{"class":133},[123,71655,71656],{"class":125,"line":1230},[123,71657,71558],{"class":192},[123,71659,71660,71663,71666,71668,71671,71673,71676,71678,71681],{"class":125,"line":1321},[123,71661,71662],{"class":133},"  localStorage.",[123,71664,71665],{"class":1972},"setItem",[123,71667,134],{"class":133},[123,71669,71670],{"class":238},"'obj'",[123,71672,12445],{"class":133},[123,71674,71675],{"class":182},"JSON",[123,71677,692],{"class":133},[123,71679,71680],{"class":1972},"stringify",[123,71682,71683],{"class":133},"(obj))\n",[123,71685,71686,71689,71691,71694,71697,71699,71701],{"class":125,"line":1327},[123,71687,71688],{"class":133},"  console.",[123,71690,58258],{"class":1972},[123,71692,71693],{"class":133},"(localStorage.",[123,71695,71696],{"class":1972},"getItem",[123,71698,134],{"class":133},[123,71700,71670],{"class":238},[123,71702,30508],{"class":133},[123,71704,71705,71707,71709],{"class":125,"line":1339},[123,71706,52428],{"class":133},[123,71708,51824],{"class":51311},[123,71710,51318],{"class":133},[123,71712,71713],{"class":125,"line":1621},[123,71714,70632],{"class":133},[123,71716,71717],{"class":125,"line":1626},[123,71718,71719],{"class":133},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[123,71721,71722],{"class":125,"line":1632},[123,71723,71724],{"class":133},"  类型是字符串的\n",[123,71726,71727],{"class":125,"line":1637},[123,71728,71729],{"class":133},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[22008,71731,71733],{"id":71732},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,71735,71736],{},[35,71737],{"alt":37,"src":71738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,71740,71741],{},[35,71742],{"alt":37,"src":71743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[114,71745,71747],{"className":53078,"code":71746,"language":53080,"meta":37,"style":37},"  \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",[120,71748,71749,71757,71761,71765,71769,71773,71777,71782,71787,71792,71797,71802,71807,71812,71817],{"__ignoreMap":37},[123,71750,71751,71753,71755],{"class":125,"line":126},[123,71752,52155],{"class":133},[123,71754,51824],{"class":51311},[123,71756,51318],{"class":133},[123,71758,71759],{"class":125,"line":45},[123,71760,71534],{"class":133},[123,71762,71763],{"class":125,"line":1189},[123,71764,71539],{"class":133},[123,71766,71767],{"class":125,"line":1204},[123,71768,71544],{"class":133},[123,71770,71771],{"class":125,"line":1210},[123,71772,71549],{"class":133},[123,71774,71775],{"class":125,"line":1224},[123,71776,2196],{"class":133},[123,71778,71779],{"class":125,"line":1230},[123,71780,71781],{"class":133},"    \u002F\u002F 1.存储复杂数据类型\n",[123,71783,71784],{"class":125,"line":1321},[123,71785,71786],{"class":133},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[123,71788,71789],{"class":125,"line":1327},[123,71790,71791],{"class":133},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[123,71793,71794],{"class":125,"line":1339},[123,71795,71796],{"class":133},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[123,71798,71799],{"class":125,"line":1621},[123,71800,71801],{"class":133},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[123,71803,71804],{"class":125,"line":1626},[123,71805,71806],{"class":133},"    \u002F\u002F 取\n",[123,71808,71809],{"class":125,"line":1632},[123,71810,71811],{"class":133},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[123,71813,71814],{"class":125,"line":1637},[123,71815,71816],{"class":133},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[123,71818,71819,71821,71823],{"class":125,"line":1651},[123,71820,52428],{"class":133},[123,71822,51824],{"class":51311},[123,71824,51318],{"class":133},[14,71826,71827],{},[35,71828],{"alt":37,"src":71829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[94,71831,71833],{"id":71832},"_356-数组map方法","3.5.6 数组map方法",[14,71835,71836],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,71838,71839],{},[35,71840],{"alt":37,"src":71841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,71843,71844],{},[35,71845],{"alt":37,"src":71846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,71848,71849,71852],{},[283,71850,71851],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,71854,71855],{},"map有返回值，但是forEach没有返回值",[14,71857,71858],{},"map是个方法。用的时候要加 ()",[14,71860,71861],{},"map返回的是一个数组",[94,71863,71865],{"id":71864},"_357-数组中join方法","3.5.7 数组中join方法",[14,71867,71868],{},[35,71869],{"alt":37,"src":71870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,71872,71873],{},"类似于python中拼接字符串一样！",[77,71875,71876,71879,71882],{},[80,71877,71878],{},"小括号为空则逗号分开",[80,71880,71881],{},"小括号为空字符串 ''，则元素之间没有分隔符",[80,71883,71884],{},"小括号用啥符号就用进行分割",[94,71886,71888],{"id":71887},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[77,71890,71891,71894,71897,71900,71903],{},[80,71892,71893],{},"记住本地时间获取快速方式：new Date().toDateString()",[80,71895,71896],{},"尽量减少DOM操作，用好map+join的渲染方式",[80,71898,71899],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[80,71901,71902],{},"return可以实现函数的结束",[80,71904,71905],{},"禁止跳转是 preventDefault() 不要忘记",[114,71907,71909],{"className":50644,"code":71908,"language":50646,"meta":37,"style":37},"\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",[120,71910,71911,71921,71935,71939,71947,71961,71981,71993,72001,72007,72017,72027,72031,72035,72041,72051,72063,72067,72071,72078,72090,72104,72114,72118,72122,72129,72136,72143,72155,72167,72177,72189,72193,72197,72204,72211,72223,72235,72245,72257,72287,72291,72295,72302,72314,72326,72350,72360,72370,72374,72378,72386,72397,72409,72421,72433,72450,72462,72474,72478,72482,72489,72501,72513,72525,72536,72554,72567,72579,72603,72614,72618,72622,72630,72640,72644,72648,72654,72666,72677,72687,72691,72695,72701,72723,72727,72731,72737,72743,72755,72765,72777,72807,72820,72837,72841,72845,72856,72878,72888,72892,72896,72909,72919,72931,72943,72955,72967,72977,72987,72997,73008,73021,73025,73033,73041,73045,73053,73066,73086,73119,73152,73185,73211,73229,73247,73255,73281,73299,73317,73335,73353,73371,73379,73387,73405,73413,73442,73450,73458,73466,73479,73491,73503,73515,73527,73539,73552,73564,73572,73580,73588,73593,73598,73602,73606,73610,73614,73618,73622,73627,73632,73637,73642,73650,73658,73666,73671,73676,73681,73686,73691,73696,73701,73706,73711,73716,73721,73726,73731,73736,73740,73745,73750,73760,73769,73773,73778,73787,73803,73845,73885,73924,73989,73997,74001,74006,74024,74032,74037,74042,74072,74078,74083,74096,74108,74120,74132,74144,74156,74168,74172,74182,74186,74191,74196,74200,74209,74213,74218,74223,74242,74247,74267,74271,74276,74280,74285,74303,74321,74339,74358,74377,74396,74401,74407,74428,74434,74443,74449,74455,74461,74488,74501,74506,74516,74522,74528,74534,74540,74545,74551,74557,74563,74569,74602,74607,74612,74617,74622,74628,74634,74640,74651,74656,74662,74669,74683,74689,74713,74718,74723,74729,74735,74756,74762,74775,74781,74787,74793,74799,74804,74810,74816,74822,74840,74854,74860,74868,74874,74896,74901,74906,74911,74916,74921,74930,74939,74944],{"__ignoreMap":37},[123,71912,71913,71915,71917,71919],{"class":125,"line":126},[123,71914,51308],{"class":133},[123,71916,51312],{"class":51311},[123,71918,51315],{"class":1972},[123,71920,51318],{"class":133},[123,71922,71923,71925,71927,71929,71931,71933],{"class":125,"line":45},[123,71924,1044],{"class":133},[123,71926,50646],{"class":51311},[123,71928,51327],{"class":1972},[123,71930,179],{"class":133},[123,71932,51332],{"class":238},[123,71934,51318],{"class":133},[123,71936,71937],{"class":125,"line":1189},[123,71938,2409],{"emptyLinePlaceholder":50},[123,71940,71941,71943,71945],{"class":125,"line":1204},[123,71942,1044],{"class":133},[123,71944,51345],{"class":51311},[123,71946,51318],{"class":133},[123,71948,71949,71951,71953,71955,71957,71959],{"class":125,"line":1210},[123,71950,52155],{"class":133},[123,71952,51355],{"class":51311},[123,71954,51358],{"class":1972},[123,71956,179],{"class":133},[123,71958,51363],{"class":238},[123,71960,51318],{"class":133},[123,71962,71963,71965,71967,71969,71971,71973,71975,71977,71979],{"class":125,"line":1224},[123,71964,52155],{"class":133},[123,71966,51355],{"class":51311},[123,71968,14930],{"class":1972},[123,71970,179],{"class":133},[123,71972,51402],{"class":238},[123,71974,51382],{"class":1972},[123,71976,179],{"class":133},[123,71978,51409],{"class":238},[123,71980,51318],{"class":133},[123,71982,71983,71985,71987,71989,71991],{"class":125,"line":1230},[123,71984,52155],{"class":133},[123,71986,51418],{"class":51311},[123,71988,51421],{"class":133},[123,71990,51418],{"class":51311},[123,71992,51318],{"class":133},[123,71994,71995,71997,71999],{"class":125,"line":1321},[123,71996,52155],{"class":133},[123,71998,5136],{"class":51311},[123,72000,51318],{"class":133},[123,72002,72003,72005],{"class":125,"line":1327},[123,72004,6413],{"class":51311},[123,72006,15582],{"class":133},[123,72008,72009,72011,72013,72015],{"class":125,"line":1339},[123,72010,54706],{"class":182},[123,72012,51448],{"class":133},[123,72014,325],{"class":182},[123,72016,1300],{"class":133},[123,72018,72019,72021,72023,72025],{"class":125,"line":1621},[123,72020,54717],{"class":182},[123,72022,51448],{"class":133},[123,72024,325],{"class":182},[123,72026,1300],{"class":133},[123,72028,72029],{"class":125,"line":1626},[123,72030,2196],{"class":133},[123,72032,72033],{"class":125,"line":1632},[123,72034,2409],{"emptyLinePlaceholder":50},[123,72036,72037,72039],{"class":125,"line":1637},[123,72038,57290],{"class":51311},[123,72040,15582],{"class":133},[123,72042,72043,72045,72047,72049],{"class":125,"line":1651},[123,72044,57297],{"class":182},[123,72046,51448],{"class":133},[123,72048,51603],{"class":182},[123,72050,1300],{"class":133},[123,72052,72053,72055,72057,72059,72061],{"class":125,"line":1656},[123,72054,62088],{"class":182},[123,72056,51448],{"class":133},[123,72058,834],{"class":182},[123,72060,51503],{"class":129},[123,72062,1300],{"class":133},[123,72064,72065],{"class":125,"line":1662},[123,72066,2196],{"class":133},[123,72068,72069],{"class":125,"line":1683},[123,72070,2409],{"emptyLinePlaceholder":50},[123,72072,72073,72076],{"class":125,"line":1688},[123,72074,72075],{"class":1972},"    .info",[123,72077,15582],{"class":133},[123,72079,72080,72082,72084,72086,72088],{"class":125,"line":1702},[123,72081,54782],{"class":182},[123,72083,51448],{"class":133},[123,72085,51500],{"class":182},[123,72087,51503],{"class":129},[123,72089,1300],{"class":133},[123,72091,72092,72094,72096,72098,72100,72102],{"class":125,"line":1707},[123,72093,54717],{"class":182},[123,72095,51448],{"class":133},[123,72097,580],{"class":182},[123,72099,51503],{"class":129},[123,72101,51567],{"class":182},[123,72103,1300],{"class":133},[123,72105,72106,72108,72110,72112],{"class":125,"line":1736},[123,72107,57297],{"class":182},[123,72109,51448],{"class":133},[123,72111,51603],{"class":182},[123,72113,1300],{"class":133},[123,72115,72116],{"class":125,"line":1741},[123,72117,2196],{"class":133},[123,72119,72120],{"class":125,"line":1758},[123,72121,2409],{"emptyLinePlaceholder":50},[123,72123,72124,72127],{"class":125,"line":1763},[123,72125,72126],{"class":1972},"    .uname",[123,72128,31477],{"class":133},[123,72130,72131,72134],{"class":125,"line":1768},[123,72132,72133],{"class":1972},"    .age",[123,72135,31477],{"class":133},[123,72137,72138,72141],{"class":125,"line":1773},[123,72139,72140],{"class":1972},"    .salary",[123,72142,15582],{"class":133},[123,72144,72145,72147,72149,72151,72153],{"class":125,"line":1787},[123,72146,54782],{"class":182},[123,72148,51448],{"class":133},[123,72150,445],{"class":182},[123,72152,51503],{"class":129},[123,72154,1300],{"class":133},[123,72156,72157,72159,72161,72163,72165],{"class":125,"line":1792},[123,72158,54796],{"class":182},[123,72160,51448],{"class":133},[123,72162,834],{"class":182},[123,72164,51503],{"class":129},[123,72166,1300],{"class":133},[123,72168,72169,72171,72173,72175],{"class":125,"line":2586},[123,72170,61791],{"class":182},[123,72172,51448],{"class":133},[123,72174,54748],{"class":182},[123,72176,1300],{"class":133},[123,72178,72179,72181,72183,72185,72187],{"class":125,"line":2600},[123,72180,61761],{"class":182},[123,72182,51448],{"class":133},[123,72184,709],{"class":182},[123,72186,51503],{"class":129},[123,72188,1300],{"class":133},[123,72190,72191],{"class":125,"line":2608},[123,72192,2196],{"class":133},[123,72194,72195],{"class":125,"line":2613},[123,72196,2409],{"emptyLinePlaceholder":50},[123,72198,72199,72202],{"class":125,"line":2619},[123,72200,72201],{"class":1972},"    .gender",[123,72203,31477],{"class":133},[123,72205,72206,72209],{"class":125,"line":2625},[123,72207,72208],{"class":1972},"    .city",[123,72210,15582],{"class":133},[123,72212,72213,72215,72217,72219,72221],{"class":125,"line":2630},[123,72214,54782],{"class":182},[123,72216,51448],{"class":133},[123,72218,445],{"class":182},[123,72220,51503],{"class":129},[123,72222,1300],{"class":133},[123,72224,72225,72227,72229,72231,72233],{"class":125,"line":7958},[123,72226,54796],{"class":182},[123,72228,51448],{"class":133},[123,72230,959],{"class":182},[123,72232,51503],{"class":129},[123,72234,1300],{"class":133},[123,72236,72237,72239,72241,72243],{"class":125,"line":7982},[123,72238,61791],{"class":182},[123,72240,51448],{"class":133},[123,72242,54748],{"class":182},[123,72244,1300],{"class":133},[123,72246,72247,72249,72251,72253,72255],{"class":125,"line":7987},[123,72248,61761],{"class":182},[123,72250,51448],{"class":133},[123,72252,709],{"class":182},[123,72254,51503],{"class":129},[123,72256,1300],{"class":133},[123,72258,72259,72261,72263,72265,72267,72269,72272,72274,72276,72278,72281,72283,72285],{"class":125,"line":7993},[123,72260,61988],{"class":182},[123,72262,51448],{"class":133},[123,72264,351],{"class":182},[123,72266,51503],{"class":129},[123,72268,51532],{"class":182},[123,72270,72271],{"class":182}," rgb",[123,72273,134],{"class":133},[123,72275,1731],{"class":182},[123,72277,12445],{"class":133},[123,72279,72280],{"class":182},"197",[123,72282,12445],{"class":133},[123,72284,72280],{"class":182},[123,72286,2728],{"class":133},[123,72288,72289],{"class":125,"line":8020},[123,72290,2196],{"class":133},[123,72292,72293],{"class":125,"line":8025},[123,72294,2409],{"emptyLinePlaceholder":50},[123,72296,72297,72300],{"class":125,"line":8031},[123,72298,72299],{"class":51311},"    button",[123,72301,15582],{"class":133},[123,72303,72304,72306,72308,72310,72312],{"class":125,"line":8043},[123,72305,54796],{"class":182},[123,72307,51448],{"class":133},[123,72309,959],{"class":182},[123,72311,51503],{"class":129},[123,72313,1300],{"class":133},[123,72315,72316,72318,72320,72322,72324],{"class":125,"line":8055},[123,72317,54782],{"class":182},[123,72319,51448],{"class":133},[123,72321,618],{"class":182},[123,72323,51503],{"class":129},[123,72325,1300],{"class":133},[123,72327,72328,72330,72332,72335,72337,72339,72341,72344,72346,72348],{"class":125,"line":8067},[123,72329,54895],{"class":182},[123,72331,51448],{"class":133},[123,72333,72334],{"class":182},"rgb",[123,72336,134],{"class":133},[123,72338,1103],{"class":182},[123,72340,12445],{"class":133},[123,72342,72343],{"class":182},"187",[123,72345,12445],{"class":133},[123,72347,433],{"class":182},[123,72349,2728],{"class":133},[123,72351,72352,72354,72356,72358],{"class":125,"line":9726},[123,72353,57427],{"class":182},[123,72355,51448],{"class":133},[123,72357,60853],{"class":182},[123,72359,1300],{"class":133},[123,72361,72362,72364,72366,72368],{"class":125,"line":9751},[123,72363,61988],{"class":182},[123,72365,51448],{"class":133},[123,72367,325],{"class":182},[123,72369,1300],{"class":133},[123,72371,72372],{"class":125,"line":9774},[123,72373,2196],{"class":133},[123,72375,72376],{"class":125,"line":9798},[123,72377,2409],{"emptyLinePlaceholder":50},[123,72379,72380,72382,72384],{"class":125,"line":9803},[123,72381,72299],{"class":51311},[123,72383,51699],{"class":51311},[123,72385,15582],{"class":133},[123,72387,72388,72390,72392,72395],{"class":125,"line":9808},[123,72389,55020],{"class":182},[123,72391,51448],{"class":133},[123,72393,72394],{"class":182},"inline-block",[123,72396,1300],{"class":133},[123,72398,72399,72401,72403,72405,72407],{"class":125,"line":9813},[123,72400,54782],{"class":182},[123,72402,51448],{"class":133},[123,72404,580],{"class":182},[123,72406,51503],{"class":129},[123,72408,1300],{"class":133},[123,72410,72411,72413,72415,72417,72419],{"class":125,"line":9822},[123,72412,54796],{"class":182},[123,72414,51448],{"class":133},[123,72416,580],{"class":182},[123,72418,51503],{"class":129},[123,72420,1300],{"class":133},[123,72422,72423,72425,72427,72429,72431],{"class":125,"line":9827},[123,72424,57370],{"class":182},[123,72426,51448],{"class":133},[123,72428,606],{"class":182},[123,72430,51503],{"class":129},[123,72432,1300],{"class":133},[123,72434,72435,72437,72439,72441,72443,72445,72448],{"class":125,"line":9833},[123,72436,61988],{"class":182},[123,72438,51448],{"class":133},[123,72440,351],{"class":182},[123,72442,51503],{"class":129},[123,72444,51532],{"class":182},[123,72446,72447],{"class":182}," #fff",[123,72449,1300],{"class":133},[123,72451,72452,72454,72456,72458,72460],{"class":125,"line":9854},[123,72453,55145],{"class":182},[123,72455,51448],{"class":133},[123,72457,453],{"class":182},[123,72459,51503],{"class":129},[123,72461,1300],{"class":133},[123,72463,72464,72466,72468,72470,72472],{"class":125,"line":9860},[123,72465,61761],{"class":182},[123,72467,51448],{"class":133},[123,72469,351],{"class":182},[123,72471,51503],{"class":129},[123,72473,1300],{"class":133},[123,72475,72476],{"class":125,"line":9874},[123,72477,2196],{"class":133},[123,72479,72480],{"class":125,"line":9880},[123,72481,2409],{"emptyLinePlaceholder":50},[123,72483,72484,72487],{"class":125,"line":9907},[123,72485,72486],{"class":1972},"    .total",[123,72488,15582],{"class":133},[123,72490,72491,72493,72495,72497,72499],{"class":125,"line":9916},[123,72492,54782],{"class":182},[123,72494,51448],{"class":133},[123,72496,61640],{"class":182},[123,72498,51503],{"class":129},[123,72500,1300],{"class":133},[123,72502,72503,72505,72507,72509,72511],{"class":125,"line":9922},[123,72504,54796],{"class":182},[123,72506,51448],{"class":133},[123,72508,535],{"class":182},[123,72510,51503],{"class":129},[123,72512,1300],{"class":133},[123,72514,72515,72517,72519,72521,72523],{"class":125,"line":9930},[123,72516,57370],{"class":182},[123,72518,51448],{"class":133},[123,72520,535],{"class":182},[123,72522,51503],{"class":129},[123,72524,1300],{"class":133},[123,72526,72527,72529,72531,72534],{"class":125,"line":9935},[123,72528,57297],{"class":182},[123,72530,51448],{"class":133},[123,72532,72533],{"class":182},"right",[123,72535,1300],{"class":133},[123,72537,72538,72540,72542,72544,72546,72548,72550,72552],{"class":125,"line":16614},[123,72539,54717],{"class":182},[123,72541,51448],{"class":133},[123,72543,535],{"class":182},[123,72545,51503],{"class":129},[123,72547,51567],{"class":182},[123,72549,2047],{"class":182},[123,72551,51503],{"class":129},[123,72553,1300],{"class":133},[123,72555,72556,72559,72561,72563,72565],{"class":125,"line":16620},[123,72557,72558],{"class":182},"      padding-right",[123,72560,51448],{"class":133},[123,72562,580],{"class":182},[123,72564,51503],{"class":129},[123,72566,1300],{"class":133},[123,72568,72569,72571,72573,72575,72577],{"class":125,"line":16643},[123,72570,54933],{"class":182},[123,72572,51448],{"class":133},[123,72574,657],{"class":182},[123,72576,51503],{"class":129},[123,72578,1300],{"class":133},[123,72580,72581,72583,72585,72587,72589,72592,72594,72597,72599,72601],{"class":125,"line":16649},[123,72582,54895],{"class":182},[123,72584,51448],{"class":133},[123,72586,72334],{"class":182},[123,72588,134],{"class":133},[123,72590,72591],{"class":182},"237",[123,72593,12445],{"class":133},[123,72595,72596],{"class":182},"235",[123,72598,12445],{"class":133},[123,72600,72596],{"class":182},[123,72602,2728],{"class":133},[123,72604,72605,72608,72610,72612],{"class":125,"line":16672},[123,72606,72607],{"class":182},"      box-sizing",[123,72609,51448],{"class":133},[123,72611,60516],{"class":182},[123,72613,1300],{"class":133},[123,72615,72616],{"class":125,"line":16686},[123,72617,2196],{"class":133},[123,72619,72620],{"class":125,"line":16706},[123,72621,2409],{"emptyLinePlaceholder":50},[123,72623,72624,72626,72628],{"class":125,"line":16712},[123,72625,72486],{"class":1972},[123,72627,51699],{"class":51311},[123,72629,15582],{"class":133},[123,72631,72632,72634,72636,72638],{"class":125,"line":16723},[123,72633,57427],{"class":182},[123,72635,51448],{"class":133},[123,72637,57432],{"class":182},[123,72639,1300],{"class":133},[123,72641,72642],{"class":125,"line":16746},[123,72643,2196],{"class":133},[123,72645,72646],{"class":125,"line":16768},[123,72647,2409],{"emptyLinePlaceholder":50},[123,72649,72650,72652],{"class":125,"line":16773},[123,72651,65034],{"class":51311},[123,72653,15582],{"class":133},[123,72655,72656,72658,72660,72662,72664],{"class":125,"line":16779},[123,72657,54782],{"class":182},[123,72659,51448],{"class":133},[123,72661,61640],{"class":182},[123,72663,51503],{"class":129},[123,72665,1300],{"class":133},[123,72667,72668,72670,72672,72675],{"class":125,"line":16793},[123,72669,54717],{"class":182},[123,72671,51448],{"class":133},[123,72673,72674],{"class":182},"auto",[123,72676,1300],{"class":133},[123,72678,72679,72681,72683,72685],{"class":125,"line":16806},[123,72680,65041],{"class":182},[123,72682,51448],{"class":133},[123,72684,65046],{"class":182},[123,72686,1300],{"class":133},[123,72688,72689],{"class":125,"line":16811},[123,72690,2196],{"class":133},[123,72692,72693],{"class":125,"line":16825},[123,72694,2409],{"emptyLinePlaceholder":50},[123,72696,72697,72699],{"class":125,"line":16830},[123,72698,65126],{"class":51311},[123,72700,15582],{"class":133},[123,72702,72703,72705,72707,72709,72711,72713,72715,72717,72719,72721],{"class":125,"line":16836},[123,72704,54895],{"class":182},[123,72706,51448],{"class":133},[123,72708,72334],{"class":182},[123,72710,134],{"class":133},[123,72712,72591],{"class":182},[123,72714,12445],{"class":133},[123,72716,72596],{"class":182},[123,72718,12445],{"class":133},[123,72720,72596],{"class":182},[123,72722,2728],{"class":133},[123,72724,72725],{"class":125,"line":16841},[123,72726,2196],{"class":133},[123,72728,72729],{"class":125,"line":16855},[123,72730,2409],{"emptyLinePlaceholder":50},[123,72732,72733,72735],{"class":125,"line":16860},[123,72734,65126],{"class":51311},[123,72736,31477],{"class":133},[123,72738,72739,72741],{"class":125,"line":16865},[123,72740,65192],{"class":51311},[123,72742,15582],{"class":133},[123,72744,72745,72747,72749,72751,72753],{"class":125,"line":16879},[123,72746,54796],{"class":182},[123,72748,51448],{"class":133},[123,72750,407],{"class":182},[123,72752,51503],{"class":129},[123,72754,1300],{"class":133},[123,72756,72757,72759,72761,72763],{"class":125,"line":16891},[123,72758,57297],{"class":182},[123,72760,51448],{"class":133},[123,72762,23746],{"class":182},[123,72764,1300],{"class":133},[123,72766,72767,72769,72771,72773,72775],{"class":125,"line":16896},[123,72768,54933],{"class":182},[123,72770,51448],{"class":133},[123,72772,683],{"class":182},[123,72774,51503],{"class":129},[123,72776,1300],{"class":133},[123,72778,72779,72781,72783,72785,72787,72789,72791,72793,72796,72798,72801,72803,72805],{"class":125,"line":16909},[123,72780,61988],{"class":182},[123,72782,51448],{"class":133},[123,72784,351],{"class":182},[123,72786,51503],{"class":129},[123,72788,51532],{"class":182},[123,72790,72271],{"class":182},[123,72792,134],{"class":133},[123,72794,72795],{"class":182},"228",[123,72797,12445],{"class":133},[123,72799,72800],{"class":182},"225",[123,72802,12445],{"class":133},[123,72804,72800],{"class":182},[123,72806,2728],{"class":133},[123,72808,72809,72812,72814,72816,72818],{"class":125,"line":16914},[123,72810,72811],{"class":182},"      padding-left",[123,72813,51448],{"class":133},[123,72815,453],{"class":182},[123,72817,51503],{"class":129},[123,72819,1300],{"class":133},[123,72821,72822,72824,72826,72828,72831,72833,72835],{"class":125,"line":16919},[123,72823,61871],{"class":182},[123,72825,51448],{"class":133},[123,72827,28132],{"class":182},[123,72829,72830],{"class":182}," linear",[123,72832,61878],{"class":182},[123,72834,829],{"class":129},[123,72836,1300],{"class":133},[123,72838,72839],{"class":125,"line":16924},[123,72840,2196],{"class":133},[123,72842,72843],{"class":125,"line":16937},[123,72844,2409],{"emptyLinePlaceholder":50},[123,72846,72847,72850,72852,72854],{"class":125,"line":16942},[123,72848,72849],{"class":51311},"    tbody",[123,72851,70155],{"class":51311},[123,72853,60951],{"class":1972},[123,72855,15582],{"class":133},[123,72857,72858,72860,72862,72864,72866,72868,72870,72872,72874,72876],{"class":125,"line":32644},[123,72859,54895],{"class":182},[123,72861,51448],{"class":133},[123,72863,72334],{"class":182},[123,72865,134],{"class":133},[123,72867,72591],{"class":182},[123,72869,12445],{"class":133},[123,72871,72596],{"class":182},[123,72873,12445],{"class":133},[123,72875,72596],{"class":182},[123,72877,2728],{"class":133},[123,72879,72880,72882,72884,72886],{"class":125,"line":32650},[123,72881,62036],{"class":182},[123,72883,51448],{"class":133},[123,72885,62041],{"class":182},[123,72887,1300],{"class":133},[123,72889,72890],{"class":125,"line":32656},[123,72891,2196],{"class":133},[123,72893,72894],{"class":125,"line":32662},[123,72895,2409],{"emptyLinePlaceholder":50},[123,72897,72898,72900,72902,72905,72907],{"class":125,"line":32668},[123,72899,72849],{"class":51311},[123,72901,70155],{"class":51311},[123,72903,72904],{"class":51311}," td",[123,72906,1408],{"class":51311},[123,72908,15582],{"class":133},[123,72910,72911,72913,72915,72917],{"class":125,"line":32679},[123,72912,55020],{"class":182},[123,72914,51448],{"class":133},[123,72916,60880],{"class":182},[123,72918,1300],{"class":133},[123,72920,72921,72923,72925,72927,72929],{"class":125,"line":32685},[123,72922,54782],{"class":182},[123,72924,51448],{"class":133},[123,72926,1041],{"class":182},[123,72928,51503],{"class":129},[123,72930,1300],{"class":133},[123,72932,72933,72935,72937,72939,72941],{"class":125,"line":32705},[123,72934,54796],{"class":182},[123,72936,51448],{"class":133},[123,72938,959],{"class":182},[123,72940,51503],{"class":129},[123,72942,1300],{"class":133},[123,72944,72945,72947,72949,72951,72953],{"class":125,"line":32711},[123,72946,57370],{"class":182},[123,72948,51448],{"class":133},[123,72950,959],{"class":182},[123,72952,51503],{"class":129},[123,72954,1300],{"class":133},[123,72956,72957,72959,72961,72963,72965],{"class":125,"line":32722},[123,72958,62088],{"class":182},[123,72960,51448],{"class":133},[123,72962,211],{"class":182},[123,72964,51503],{"class":129},[123,72966,1300],{"class":133},[123,72968,72969,72971,72973,72975],{"class":125,"line":32728},[123,72970,57427],{"class":182},[123,72972,51448],{"class":133},[123,72974,60853],{"class":182},[123,72976,1300],{"class":133},[123,72978,72979,72981,72983,72985],{"class":125,"line":32734},[123,72980,57297],{"class":182},[123,72982,51448],{"class":133},[123,72984,51603],{"class":182},[123,72986,1300],{"class":133},[123,72988,72989,72991,72993,72995],{"class":125,"line":32740},[123,72990,63981],{"class":182},[123,72992,51448],{"class":133},[123,72994,54748],{"class":182},[123,72996,1300],{"class":133},[123,72998,72999,73001,73003,73006],{"class":125,"line":32746},[123,73000,54895],{"class":182},[123,73002,51448],{"class":133},[123,73004,73005],{"class":182},"orange",[123,73007,1300],{"class":133},[123,73009,73010,73012,73014,73017,73019],{"class":125,"line":32752},[123,73011,55145],{"class":182},[123,73013,51448],{"class":133},[123,73015,73016],{"class":182},"12.5",[123,73018,51503],{"class":129},[123,73020,1300],{"class":133},[123,73022,73023],{"class":125,"line":32758},[123,73024,2196],{"class":133},[123,73026,73027,73029,73031],{"class":125,"line":32764},[123,73028,52428],{"class":133},[123,73030,5136],{"class":51311},[123,73032,51318],{"class":133},[123,73034,73035,73037,73039],{"class":125,"line":32784},[123,73036,51796],{"class":133},[123,73038,51345],{"class":51311},[123,73040,51318],{"class":133},[123,73042,73043],{"class":125,"line":32790},[123,73044,2409],{"emptyLinePlaceholder":50},[123,73046,73047,73049,73051],{"class":125,"line":32806},[123,73048,1044],{"class":133},[123,73050,51811],{"class":51311},[123,73052,51318],{"class":133},[123,73054,73055,73057,73059,73062,73064],{"class":125,"line":32812},[123,73056,52155],{"class":133},[123,73058,65],{"class":51311},[123,73060,73061],{"class":133},">学生就业统计表\u003C\u002F",[123,73063,65],{"class":51311},[123,73065,51318],{"class":133},[123,73067,73068,73070,73072,73074,73076,73078,73080,73082,73084],{"class":125,"line":32826},[123,73069,52155],{"class":133},[123,73071,66636],{"class":51311},[123,73073,53497],{"class":1972},[123,73075,179],{"class":133},[123,73077,62675],{"class":238},[123,73079,69081],{"class":1972},[123,73081,179],{"class":133},[123,73083,31787],{"class":238},[123,73085,51318],{"class":133},[123,73087,73088,73090,73092,73094,73096,73098,73100,73102,73104,73106,73108,73111,73113,73115,73117],{"class":125,"line":32832},[123,73089,51352],{"class":133},[123,73091,53832],{"class":51311},[123,73093,53835],{"class":1972},[123,73095,179],{"class":133},[123,73097,62710],{"class":238},[123,73099,14930],{"class":1972},[123,73101,179],{"class":133},[123,73103,69107],{"class":238},[123,73105,61031],{"class":1972},[123,73107,179],{"class":133},[123,73109,73110],{"class":238},"\"姓名\"",[123,73112,53497],{"class":1972},[123,73114,179],{"class":133},[123,73116,69107],{"class":238},[123,73118,51318],{"class":133},[123,73120,73121,73123,73125,73127,73129,73131,73133,73135,73137,73139,73141,73144,73146,73148,73150],{"class":125,"line":32847},[123,73122,51352],{"class":133},[123,73124,53832],{"class":51311},[123,73126,53835],{"class":1972},[123,73128,179],{"class":133},[123,73130,62710],{"class":238},[123,73132,14930],{"class":1972},[123,73134,179],{"class":133},[123,73136,69135],{"class":238},[123,73138,61031],{"class":1972},[123,73140,179],{"class":133},[123,73142,73143],{"class":238},"\"年龄\"",[123,73145,53497],{"class":1972},[123,73147,179],{"class":133},[123,73149,69135],{"class":238},[123,73151,51318],{"class":133},[123,73153,73154,73156,73158,73160,73162,73164,73166,73168,73170,73172,73174,73177,73179,73181,73183],{"class":125,"line":32853},[123,73155,51352],{"class":133},[123,73157,53832],{"class":51311},[123,73159,53835],{"class":1972},[123,73161,179],{"class":133},[123,73163,62710],{"class":238},[123,73165,14930],{"class":1972},[123,73167,179],{"class":133},[123,73169,69237],{"class":238},[123,73171,61031],{"class":1972},[123,73173,179],{"class":133},[123,73175,73176],{"class":238},"\"薪资\"",[123,73178,53497],{"class":1972},[123,73180,179],{"class":133},[123,73182,69237],{"class":238},[123,73184,51318],{"class":133},[123,73186,73187,73189,73191,73193,73195,73197,73199,73201,73203,73205,73207,73209],{"class":125,"line":32862},[123,73188,51352],{"class":133},[123,73190,69155],{"class":51311},[123,73192,14930],{"class":1972},[123,73194,179],{"class":133},[123,73196,69162],{"class":238},[123,73198,14969],{"class":1972},[123,73200,179],{"class":133},[123,73202,7662],{"class":238},[123,73204,53497],{"class":1972},[123,73206,179],{"class":133},[123,73208,69162],{"class":238},[123,73210,51318],{"class":133},[123,73212,73213,73215,73217,73219,73221,73223,73225,73227],{"class":125,"line":32868},[123,73214,55245],{"class":133},[123,73216,69177],{"class":51311},[123,73218,66662],{"class":1972},[123,73220,179],{"class":133},[123,73222,9971],{"class":238},[123,73224,69186],{"class":133},[123,73226,69177],{"class":51311},[123,73228,51318],{"class":133},[123,73230,73231,73233,73235,73237,73239,73241,73243,73245],{"class":125,"line":32877},[123,73232,55245],{"class":133},[123,73234,69177],{"class":51311},[123,73236,66662],{"class":1972},[123,73238,179],{"class":133},[123,73240,10040],{"class":238},[123,73242,69205],{"class":133},[123,73244,69177],{"class":51311},[123,73246,51318],{"class":133},[123,73248,73249,73251,73253],{"class":125,"line":32883},[123,73250,51787],{"class":133},[123,73252,69155],{"class":51311},[123,73254,51318],{"class":133},[123,73256,73257,73259,73261,73263,73265,73267,73269,73271,73273,73275,73277,73279],{"class":125,"line":32889},[123,73258,51352],{"class":133},[123,73260,69155],{"class":51311},[123,73262,14930],{"class":1972},[123,73264,179],{"class":133},[123,73266,69259],{"class":238},[123,73268,14969],{"class":1972},[123,73270,179],{"class":133},[123,73272,7662],{"class":238},[123,73274,53497],{"class":1972},[123,73276,179],{"class":133},[123,73278,69259],{"class":238},[123,73280,51318],{"class":133},[123,73282,73283,73285,73287,73289,73291,73293,73295,73297],{"class":125,"line":32898},[123,73284,55245],{"class":133},[123,73286,69177],{"class":51311},[123,73288,66662],{"class":1972},[123,73290,179],{"class":133},[123,73292,69280],{"class":238},[123,73294,69283],{"class":133},[123,73296,69177],{"class":51311},[123,73298,51318],{"class":133},[123,73300,73301,73303,73305,73307,73309,73311,73313,73315],{"class":125,"line":32904},[123,73302,55245],{"class":133},[123,73304,69177],{"class":51311},[123,73306,66662],{"class":1972},[123,73308,179],{"class":133},[123,73310,69300],{"class":238},[123,73312,69303],{"class":133},[123,73314,69177],{"class":51311},[123,73316,51318],{"class":133},[123,73318,73319,73321,73323,73325,73327,73329,73331,73333],{"class":125,"line":32915},[123,73320,55245],{"class":133},[123,73322,69177],{"class":51311},[123,73324,66662],{"class":1972},[123,73326,179],{"class":133},[123,73328,69320],{"class":238},[123,73330,69323],{"class":133},[123,73332,69177],{"class":51311},[123,73334,51318],{"class":133},[123,73336,73337,73339,73341,73343,73345,73347,73349,73351],{"class":125,"line":32921},[123,73338,55245],{"class":133},[123,73340,69177],{"class":51311},[123,73342,66662],{"class":1972},[123,73344,179],{"class":133},[123,73346,69340],{"class":238},[123,73348,69343],{"class":133},[123,73350,69177],{"class":51311},[123,73352,51318],{"class":133},[123,73354,73355,73357,73359,73361,73363,73365,73367,73369],{"class":125,"line":32940},[123,73356,55245],{"class":133},[123,73358,69177],{"class":51311},[123,73360,66662],{"class":1972},[123,73362,179],{"class":133},[123,73364,69360],{"class":238},[123,73366,69363],{"class":133},[123,73368,69177],{"class":51311},[123,73370,51318],{"class":133},[123,73372,73373,73375,73377],{"class":125,"line":32946},[123,73374,51787],{"class":133},[123,73376,69155],{"class":51311},[123,73378,51318],{"class":133},[123,73380,73381,73383,73385],{"class":125,"line":32957},[123,73382,51352],{"class":133},[123,73384,53898],{"class":51311},[123,73386,51318],{"class":133},[123,73388,73389,73391,73393,73396,73398,73401,73403],{"class":125,"line":32963},[123,73390,55245],{"class":133},[123,73392,123],{"class":51311},[123,73394,73395],{"class":133},">+\u003C\u002F",[123,73397,123],{"class":51311},[123,73399,73400],{"class":133},">添加\u003C\u002F",[123,73402,53898],{"class":51311},[123,73404,51318],{"class":133},[123,73406,73407,73409,73411],{"class":125,"line":32983},[123,73408,52428],{"class":133},[123,73410,66636],{"class":51311},[123,73412,51318],{"class":133},[123,73414,73415,73417,73419,73421,73423,73425,73428,73430,73433,73435,73438,73440],{"class":125,"line":32999},[123,73416,52155],{"class":133},[123,73418,51622],{"class":51311},[123,73420,53497],{"class":1972},[123,73422,179],{"class":133},[123,73424,62591],{"class":238},[123,73426,73427],{"class":133},">共有数据 \u003C",[123,73429,123],{"class":51311},[123,73431,73432],{"class":133},">0\u003C\u002F",[123,73434,123],{"class":51311},[123,73436,73437],{"class":133},"> 条\u003C\u002F",[123,73439,51622],{"class":51311},[123,73441,51318],{"class":133},[123,73443,73444,73446,73448],{"class":125,"line":33005},[123,73445,52155],{"class":133},[123,73447,271],{"class":51311},[123,73449,51318],{"class":133},[123,73451,73452,73454,73456],{"class":125,"line":33019},[123,73453,51352],{"class":133},[123,73455,274],{"class":51311},[123,73457,51318],{"class":133},[123,73459,73460,73462,73464],{"class":125,"line":33025},[123,73461,55245],{"class":133},[123,73463,277],{"class":51311},[123,73465,51318],{"class":133},[123,73467,73468,73470,73472,73475,73477],{"class":125,"line":33031},[123,73469,55313],{"class":133},[123,73471,280],{"class":51311},[123,73473,73474],{"class":133},">ID\u003C\u002F",[123,73476,280],{"class":51311},[123,73478,51318],{"class":133},[123,73480,73481,73483,73485,73487,73489],{"class":125,"line":33042},[123,73482,55313],{"class":133},[123,73484,280],{"class":51311},[123,73486,69466],{"class":133},[123,73488,280],{"class":51311},[123,73490,51318],{"class":133},[123,73492,73493,73495,73497,73499,73501],{"class":125,"line":33048},[123,73494,55313],{"class":133},[123,73496,280],{"class":51311},[123,73498,69479],{"class":133},[123,73500,280],{"class":51311},[123,73502,51318],{"class":133},[123,73504,73505,73507,73509,73511,73513],{"class":125,"line":33054},[123,73506,55313],{"class":133},[123,73508,280],{"class":51311},[123,73510,69492],{"class":133},[123,73512,280],{"class":51311},[123,73514,51318],{"class":133},[123,73516,73517,73519,73521,73523,73525],{"class":125,"line":33064},[123,73518,55313],{"class":133},[123,73520,280],{"class":51311},[123,73522,69505],{"class":133},[123,73524,280],{"class":51311},[123,73526,51318],{"class":133},[123,73528,73529,73531,73533,73535,73537],{"class":125,"line":33070},[123,73530,55313],{"class":133},[123,73532,280],{"class":51311},[123,73534,69518],{"class":133},[123,73536,280],{"class":51311},[123,73538,51318],{"class":133},[123,73540,73541,73543,73545,73548,73550],{"class":125,"line":33081},[123,73542,55313],{"class":133},[123,73544,280],{"class":51311},[123,73546,73547],{"class":133},">录入时间\u003C\u002F",[123,73549,280],{"class":51311},[123,73551,51318],{"class":133},[123,73553,73554,73556,73558,73560,73562],{"class":125,"line":33087},[123,73555,55313],{"class":133},[123,73557,280],{"class":51311},[123,73559,69531],{"class":133},[123,73561,280],{"class":51311},[123,73563,51318],{"class":133},[123,73565,73566,73568,73570],{"class":125,"line":33097},[123,73567,55418],{"class":133},[123,73569,277],{"class":51311},[123,73571,51318],{"class":133},[123,73573,73574,73576,73578],{"class":125,"line":33102},[123,73575,51787],{"class":133},[123,73577,274],{"class":51311},[123,73579,51318],{"class":133},[123,73581,73582,73584,73586],{"class":125,"line":33108},[123,73583,51352],{"class":133},[123,73585,318],{"class":51311},[123,73587,51318],{"class":133},[123,73589,73590],{"class":125,"line":33157},[123,73591,73592],{"class":192},"      \u003C!-- \u003Ctr>\n",[123,73594,73595],{"class":125,"line":33204},[123,73596,73597],{"class":192},"        \u003Ctd>1\u003C\u002Ftd>\n",[123,73599,73600],{"class":125,"line":33209},[123,73601,73597],{"class":192},[123,73603,73604],{"class":125,"line":33215},[123,73605,73597],{"class":192},[123,73607,73608],{"class":125,"line":33234},[123,73609,73597],{"class":192},[123,73611,73612],{"class":125,"line":33240},[123,73613,73597],{"class":192},[123,73615,73616],{"class":125,"line":33260},[123,73617,73597],{"class":192},[123,73619,73620],{"class":125,"line":33266},[123,73621,73597],{"class":192},[123,73623,73624],{"class":125,"line":33272},[123,73625,73626],{"class":192},"        \u003Ctd>\n",[123,73628,73629],{"class":125,"line":33282},[123,73630,73631],{"class":192},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[123,73633,73634],{"class":125,"line":33287},[123,73635,73636],{"class":192},"        \u003C\u002Ftd>\n",[123,73638,73639],{"class":125,"line":33293},[123,73640,73641],{"class":192},"      \u003C\u002Ftr> -->\n",[123,73643,73644,73646,73648],{"class":125,"line":33309},[123,73645,51787],{"class":133},[123,73647,318],{"class":51311},[123,73649,51318],{"class":133},[123,73651,73652,73654,73656],{"class":125,"line":33354},[123,73653,52428],{"class":133},[123,73655,271],{"class":51311},[123,73657,51318],{"class":133},[123,73659,73660,73662,73664],{"class":125,"line":33360},[123,73661,52155],{"class":133},[123,73663,51824],{"class":51311},[123,73665,51318],{"class":133},[123,73667,73668],{"class":125,"line":33366},[123,73669,73670],{"class":192},"    \u002F\u002F const initData = [{\n",[123,73672,73673],{"class":125,"line":33372},[123,73674,73675],{"class":192},"    \u002F\u002F   unameId: 1,\n",[123,73677,73678],{"class":125,"line":33383},[123,73679,73680],{"class":192},"    \u002F\u002F   uname: '华晨宇',\n",[123,73682,73683],{"class":125,"line":33389},[123,73684,73685],{"class":192},"    \u002F\u002F   age: 22,\n",[123,73687,73688],{"class":125,"line":33395},[123,73689,73690],{"class":192},"    \u002F\u002F   salary: 12000,\n",[123,73692,73693],{"class":125,"line":33401},[123,73694,73695],{"class":192},"    \u002F\u002F   gender: '男',\n",[123,73697,73698],{"class":125,"line":33419},[123,73699,73700],{"class":192},"    \u002F\u002F   city: '北京',\n",[123,73702,73703],{"class":125,"line":33433},[123,73704,73705],{"class":192},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[123,73707,73708],{"class":125,"line":33442},[123,73709,73710],{"class":192},"    \u002F\u002F }]\n",[123,73712,73713],{"class":125,"line":33451},[123,73714,73715],{"class":192},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[123,73717,73718],{"class":125,"line":33460},[123,73719,73720],{"class":192},"    \u002F\u002F 1.渲染业务\n",[123,73722,73723],{"class":125,"line":33469},[123,73724,73725],{"class":192},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[123,73727,73728],{"class":125,"line":33475},[123,73729,73730],{"class":192},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[123,73732,73733],{"class":125,"line":33481},[123,73734,73735],{"class":192},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[123,73737,73738],{"class":125,"line":33489},[123,73739,2409],{"emptyLinePlaceholder":50},[123,73741,73742],{"class":125,"line":33494},[123,73743,73744],{"class":192},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[123,73746,73747],{"class":125,"line":33500},[123,73748,73749],{"class":192},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[123,73751,73752,73754,73756,73758],{"class":125,"line":33511},[123,73753,11231],{"class":129},[123,73755,57706],{"class":182},[123,73757,13574],{"class":129},[123,73759,51849],{"class":133},[123,73761,73762,73765,73767],{"class":125,"line":33517},[123,73763,73764],{"class":133},"    console.",[123,73766,58258],{"class":1972},[123,73768,52423],{"class":133},[123,73770,73771],{"class":125,"line":33537},[123,73772,2409],{"emptyLinePlaceholder":50},[123,73774,73775],{"class":125,"line":33543},[123,73776,73777],{"class":192},"    \u002F\u002F 时间函数\n",[123,73779,73780,73782,73785],{"class":125,"line":33549},[123,73781,70095],{"class":129},[123,73783,73784],{"class":1972}," getTime",[123,73786,10863],{"class":133},[123,73788,73789,73791,73794,73796,73798,73801],{"class":125,"line":33555},[123,73790,58239],{"class":129},[123,73792,73793],{"class":182}," date",[123,73795,13574],{"class":129},[123,73797,11588],{"class":129},[123,73799,73800],{"class":1972}," Date",[123,73802,1985],{"class":133},[123,73804,73805,73807,73809,73811,73814,73817,73819,73821,73823,73826,73829,73831,73833,73835,73837,73839,73841,73843],{"class":125,"line":33572},[123,73806,58239],{"class":129},[123,73808,16101],{"class":182},[123,73810,13574],{"class":129},[123,73812,73813],{"class":133}," date.",[123,73815,73816],{"class":1972},"getHours",[123,73818,13060],{"class":133},[123,73820,1044],{"class":129},[123,73822,2047],{"class":182},[123,73824,73825],{"class":129}," ?",[123,73827,73828],{"class":238}," '0'",[123,73830,45577],{"class":129},[123,73832,73813],{"class":133},[123,73834,73816],{"class":1972},[123,73836,13060],{"class":133},[123,73838,993],{"class":129},[123,73840,73813],{"class":133},[123,73842,73816],{"class":1972},[123,73844,1985],{"class":133},[123,73846,73847,73849,73852,73854,73856,73859,73861,73863,73865,73867,73869,73871,73873,73875,73877,73879,73881,73883],{"class":125,"line":33578},[123,73848,58239],{"class":129},[123,73850,73851],{"class":182}," m",[123,73853,13574],{"class":129},[123,73855,73813],{"class":133},[123,73857,73858],{"class":1972},"getMinutes",[123,73860,13060],{"class":133},[123,73862,1044],{"class":129},[123,73864,2047],{"class":182},[123,73866,73825],{"class":129},[123,73868,73828],{"class":238},[123,73870,45577],{"class":129},[123,73872,73813],{"class":133},[123,73874,73858],{"class":1972},[123,73876,13060],{"class":133},[123,73878,993],{"class":129},[123,73880,73813],{"class":133},[123,73882,73858],{"class":1972},[123,73884,1985],{"class":133},[123,73886,73887,73889,73891,73893,73895,73898,73900,73902,73904,73906,73908,73910,73912,73914,73916,73918,73920,73922],{"class":125,"line":33584},[123,73888,58239],{"class":129},[123,73890,8438],{"class":182},[123,73892,13574],{"class":129},[123,73894,73813],{"class":133},[123,73896,73897],{"class":1972},"getSeconds",[123,73899,13060],{"class":133},[123,73901,1044],{"class":129},[123,73903,2047],{"class":182},[123,73905,73825],{"class":129},[123,73907,73828],{"class":238},[123,73909,45577],{"class":129},[123,73911,73813],{"class":133},[123,73913,73897],{"class":1972},[123,73915,13060],{"class":133},[123,73917,993],{"class":129},[123,73919,73813],{"class":133},[123,73921,73897],{"class":1972},[123,73923,1985],{"class":133},[123,73925,73926,73928,73931,73933,73935,73938,73940,73943,73945,73948,73950,73952,73955,73957,73959,73961,73963,73965,73967,73970,73972,73975,73977,73980,73982,73984,73986],{"class":125,"line":33590},[123,73927,58239],{"class":129},[123,73929,73930],{"class":182}," str",[123,73932,13574],{"class":129},[123,73934,62914],{"class":238},[123,73936,73937],{"class":133},"date",[123,73939,692],{"class":238},[123,73941,73942],{"class":1972},"getFullYear",[123,73944,2436],{"class":238},[123,73946,73947],{"class":238},"}\u002F${",[123,73949,73937],{"class":133},[123,73951,692],{"class":238},[123,73953,73954],{"class":1972},"getMonth",[123,73956,13060],{"class":238},[123,73958,615],{"class":129},[123,73960,25129],{"class":182},[123,73962,73947],{"class":238},[123,73964,73937],{"class":133},[123,73966,692],{"class":238},[123,73968,73969],{"class":1972},"getDate",[123,73971,2436],{"class":238},[123,73973,73974],{"class":238},"} ${",[123,73976,549],{"class":133},[123,73978,73979],{"class":238},"}:${",[123,73981,678],{"class":133},[123,73983,73979],{"class":238},[123,73985,829],{"class":133},[123,73987,73988],{"class":238},"}`\n",[123,73990,73991,73994],{"class":125,"line":33596},[123,73992,73993],{"class":129},"      return",[123,73995,73996],{"class":133}," str\n",[123,73998,73999],{"class":125,"line":33602},[123,74000,2196],{"class":133},[123,74002,74003],{"class":125,"line":33629},[123,74004,74005],{"class":192},"    \u002F\u002F 渲染函数\n",[123,74007,74008,74010,74012,74014,74016,74018,74020,74022],{"class":125,"line":33653},[123,74009,11231],{"class":129},[123,74011,69758],{"class":182},[123,74013,13574],{"class":129},[123,74015,54407],{"class":133},[123,74017,54410],{"class":1972},[123,74019,134],{"class":133},[123,74021,69769],{"class":238},[123,74023,140],{"class":133},[123,74025,74026,74028,74030],{"class":125,"line":33659},[123,74027,70095],{"class":129},[123,74029,70098],{"class":1972},[123,74031,10863],{"class":133},[123,74033,74034],{"class":125,"line":33665},[123,74035,74036],{"class":192},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[123,74038,74039],{"class":125,"line":33671},[123,74040,74041],{"class":192},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[123,74043,74044,74046,74049,74051,74053,74056,74058,74060,74062,74065,74067,74070],{"class":125,"line":33682},[123,74045,58239],{"class":129},[123,74047,74048],{"class":182}," trArr",[123,74050,13574],{"class":129},[123,74052,51976],{"class":133},[123,74054,74055],{"class":1972},"map",[123,74057,134],{"class":133},[123,74059,54460],{"class":129},[123,74061,1667],{"class":133},[123,74063,74064],{"class":5226},"ele",[123,74066,12445],{"class":133},[123,74068,74069],{"class":5226},"index",[123,74071,12452],{"class":133},[123,74073,74074,74076],{"class":125,"line":33693},[123,74075,14762],{"class":129},[123,74077,70179],{"class":238},[123,74079,74080],{"class":125,"line":33699},[123,74081,74082],{"class":238},"      \u003Ctr>\n",[123,74084,74085,74087,74089,74091,74094],{"class":125,"line":33716},[123,74086,70184],{"class":238},[123,74088,74064],{"class":133},[123,74090,692],{"class":238},[123,74092,74093],{"class":133},"unameId",[123,74095,70199],{"class":238},[123,74097,74098,74100,74102,74104,74106],{"class":125,"line":33739},[123,74099,70184],{"class":238},[123,74101,74064],{"class":133},[123,74103,692],{"class":238},[123,74105,70215],{"class":133},[123,74107,70199],{"class":238},[123,74109,74110,74112,74114,74116,74118],{"class":125,"line":33762},[123,74111,70184],{"class":238},[123,74113,74064],{"class":133},[123,74115,692],{"class":238},[123,74117,70232],{"class":133},[123,74119,70199],{"class":238},[123,74121,74122,74124,74126,74128,74130],{"class":125,"line":33768},[123,74123,70184],{"class":238},[123,74125,74064],{"class":133},[123,74127,692],{"class":238},[123,74129,70249],{"class":133},[123,74131,70199],{"class":238},[123,74133,74134,74136,74138,74140,74142],{"class":125,"line":33773},[123,74135,70184],{"class":238},[123,74137,74064],{"class":133},[123,74139,692],{"class":238},[123,74141,70266],{"class":133},[123,74143,70199],{"class":238},[123,74145,74146,74148,74150,74152,74154],{"class":125,"line":33782},[123,74147,70184],{"class":238},[123,74149,74064],{"class":133},[123,74151,692],{"class":238},[123,74153,70283],{"class":133},[123,74155,70199],{"class":238},[123,74157,74158,74160,74162,74164,74166],{"class":125,"line":33792},[123,74159,70184],{"class":238},[123,74161,74064],{"class":133},[123,74163,692],{"class":238},[123,74165,2396],{"class":133},[123,74167,70199],{"class":238},[123,74169,74170],{"class":125,"line":33798},[123,74171,73626],{"class":238},[123,74173,74174,74177,74179],{"class":125,"line":33803},[123,74175,74176],{"class":238},"          \u003Ca href=\"#\" data-id=\"${",[123,74178,74069],{"class":133},[123,74180,74181],{"class":238},"}\">删除\u003C\u002Fa>\n",[123,74183,74184],{"class":125,"line":33809},[123,74185,73636],{"class":238},[123,74187,74188],{"class":125,"line":33822},[123,74189,74190],{"class":238},"      \u003C\u002Ftr>\n",[123,74192,74193],{"class":125,"line":33828},[123,74194,74195],{"class":238},"  `\n",[123,74197,74198],{"class":125,"line":33839},[123,74199,64826],{"class":133},[123,74201,74202,74204,74206],{"class":125,"line":33850},[123,74203,58255],{"class":133},[123,74205,58258],{"class":1972},[123,74207,74208],{"class":133},"(trArr)\n",[123,74210,74211],{"class":125,"line":33869},[123,74212,2409],{"emptyLinePlaceholder":50},[123,74214,74215],{"class":125,"line":49529},[123,74216,74217],{"class":192},"      \u002F\u002F (2) 把数组转换为字符串join\n",[123,74219,74220],{"class":125,"line":49534},[123,74221,74222],{"class":192},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[123,74224,74225,74227,74229,74232,74235,74237,74240],{"class":125,"line":49543},[123,74226,70110],{"class":133},[123,74228,179],{"class":129},[123,74230,74231],{"class":133}," trArr.",[123,74233,74234],{"class":1972},"join",[123,74236,134],{"class":133},[123,74238,74239],{"class":238},"''",[123,74241,140],{"class":133},[123,74243,74244],{"class":125,"line":49552},[123,74245,74246],{"class":192},"      \u002F\u002F 显示共有几条\n",[123,74248,74249,74251,74253,74255,74258,74261,74263,74265],{"class":125,"line":49557},[123,74250,55782],{"class":133},[123,74252,54410],{"class":1972},[123,74254,134],{"class":133},[123,74256,74257],{"class":238},"'.total span'",[123,74259,74260],{"class":133},").innerHTML ",[123,74262,179],{"class":129},[123,74264,51976],{"class":133},[123,74266,55842],{"class":182},[123,74268,74269],{"class":125,"line":49562},[123,74270,2196],{"class":133},[123,74272,74273],{"class":125,"line":49567},[123,74274,74275],{"class":192},"    \u002F\u002F render()\n",[123,74277,74278],{"class":125,"line":49580},[123,74279,2409],{"emptyLinePlaceholder":50},[123,74281,74282],{"class":125,"line":49585},[123,74283,74284],{"class":192},"    \u002F\u002F 获取DOM对象\n",[123,74286,74287,74289,74291,74293,74295,74297,74299,74301],{"class":125,"line":49594},[123,74288,11231],{"class":129},[123,74290,69832],{"class":182},[123,74292,13574],{"class":129},[123,74294,54407],{"class":133},[123,74296,54410],{"class":1972},[123,74298,134],{"class":133},[123,74300,69843],{"class":238},[123,74302,140],{"class":133},[123,74304,74305,74307,74309,74311,74313,74315,74317,74319],{"class":125,"line":49603},[123,74306,11231],{"class":129},[123,74308,69659],{"class":182},[123,74310,13574],{"class":129},[123,74312,54407],{"class":133},[123,74314,54410],{"class":1972},[123,74316,134],{"class":133},[123,74318,69670],{"class":238},[123,74320,140],{"class":133},[123,74322,74323,74325,74327,74329,74331,74333,74335,74337],{"class":125,"line":49620},[123,74324,11231],{"class":129},[123,74326,15699],{"class":182},[123,74328,13574],{"class":129},[123,74330,54407],{"class":133},[123,74332,54410],{"class":1972},[123,74334,134],{"class":133},[123,74336,69689],{"class":238},[123,74338,140],{"class":133},[123,74340,74342,74344,74346,74348,74350,74352,74354,74356],{"class":125,"line":74341},231,[123,74343,11231],{"class":129},[123,74345,69718],{"class":182},[123,74347,13574],{"class":129},[123,74349,54407],{"class":133},[123,74351,54410],{"class":1972},[123,74353,134],{"class":133},[123,74355,69729],{"class":238},[123,74357,140],{"class":133},[123,74359,74361,74363,74365,74367,74369,74371,74373,74375],{"class":125,"line":74360},232,[123,74362,11231],{"class":129},[123,74364,69698],{"class":182},[123,74366,13574],{"class":129},[123,74368,54407],{"class":133},[123,74370,54410],{"class":1972},[123,74372,134],{"class":133},[123,74374,69709],{"class":238},[123,74376,140],{"class":133},[123,74378,74380,74382,74384,74386,74388,74390,74392,74394],{"class":125,"line":74379},233,[123,74381,11231],{"class":129},[123,74383,69738],{"class":182},[123,74385,13574],{"class":129},[123,74387,54407],{"class":133},[123,74389,54410],{"class":1972},[123,74391,134],{"class":133},[123,74393,69749],{"class":238},[123,74395,140],{"class":133},[123,74397,74399],{"class":125,"line":74398},234,[123,74400,2409],{"emptyLinePlaceholder":50},[123,74402,74404],{"class":125,"line":74403},235,[123,74405,74406],{"class":192},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[123,74408,74410,74412,74414,74416,74418,74420,74422,74424,74426],{"class":125,"line":74409},236,[123,74411,69850],{"class":133},[123,74413,57824],{"class":1972},[123,74415,134],{"class":133},[123,74417,69857],{"class":238},[123,74419,12445],{"class":133},[123,74421,54460],{"class":129},[123,74423,1667],{"class":133},[123,74425,208],{"class":5226},[123,74427,12452],{"class":133},[123,74429,74431],{"class":125,"line":74430},237,[123,74432,74433],{"class":192},"      \u002F\u002F 禁止浏览器跳转\n",[123,74435,74437,74439,74441],{"class":125,"line":74436},238,[123,74438,69877],{"class":133},[123,74440,69880],{"class":1972},[123,74442,1985],{"class":133},[123,74444,74446],{"class":125,"line":74445},239,[123,74447,74448],{"class":192},"      \u002F\u002F 非空判断\n",[123,74450,74452],{"class":125,"line":74451},240,[123,74453,74454],{"class":192},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[123,74456,74458],{"class":125,"line":74457},241,[123,74459,74460],{"class":192},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[123,74462,74464,74466,74468,74470,74473,74475,74478,74481,74483,74485],{"class":125,"line":74463},242,[123,74465,54491],{"class":129},[123,74467,1667],{"class":133},[123,74469,360],{"class":129},[123,74471,74472],{"class":133},"uname.value ",[123,74474,71368],{"class":129},[123,74476,74477],{"class":129}," !",[123,74479,74480],{"class":133},"age.value ",[123,74482,71368],{"class":129},[123,74484,74477],{"class":129},[123,74486,74487],{"class":133},"salary.value) {\n",[123,74489,74491,74493,74495,74497,74499],{"class":125,"line":74490},243,[123,74492,14762],{"class":129},[123,74494,69951],{"class":1972},[123,74496,134],{"class":133},[123,74498,69956],{"class":238},[123,74500,140],{"class":133},[123,74502,74504],{"class":125,"line":74503},244,[123,74505,52409],{"class":133},[123,74507,74509,74511,74513],{"class":125,"line":74508},245,[123,74510,58018],{"class":133},[123,74512,51895],{"class":1972},[123,74514,74515],{"class":133},"({\n",[123,74517,74519],{"class":125,"line":74518},246,[123,74520,74521],{"class":192},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[123,74523,74525],{"class":125,"line":74524},247,[123,74526,74527],{"class":192},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[123,74529,74531],{"class":125,"line":74530},248,[123,74532,74533],{"class":192},"        \u002F\u002F 对象的序号应为数组长度+1\n",[123,74535,74537],{"class":125,"line":74536},249,[123,74538,74539],{"class":192},"        \u002F\u002F unameId: arr.length + 1,\n",[123,74541,74543],{"class":125,"line":74542},250,[123,74544,2409],{"emptyLinePlaceholder":50},[123,74546,74548],{"class":125,"line":74547},251,[123,74549,74550],{"class":192},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[123,74552,74554],{"class":125,"line":74553},252,[123,74555,74556],{"class":192},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[123,74558,74560],{"class":125,"line":74559},253,[123,74561,74562],{"class":192},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[123,74564,74566],{"class":125,"line":74565},254,[123,74567,74568],{"class":192},"        \u002F\u002F 0当假看\n",[123,74570,74572,74575,74577,74579,74582,74584,74586,74588,74591,74593,74595,74598,74600],{"class":125,"line":74571},255,[123,74573,74574],{"class":133},"        unameId: arr.",[123,74576,51979],{"class":182},[123,74578,73825],{"class":129},[123,74580,74581],{"class":133}," arr[arr.",[123,74583,51979],{"class":182},[123,74585,52282],{"class":129},[123,74587,25129],{"class":182},[123,74589,74590],{"class":133},"].unameId ",[123,74592,615],{"class":129},[123,74594,25129],{"class":182},[123,74596,74597],{"class":129}," :",[123,74599,25129],{"class":182},[123,74601,31477],{"class":133},[123,74603,74605],{"class":125,"line":74604},256,[123,74606,70004],{"class":133},[123,74608,74610],{"class":125,"line":74609},257,[123,74611,70009],{"class":133},[123,74613,74615],{"class":125,"line":74614},258,[123,74616,70019],{"class":133},[123,74618,74620],{"class":125,"line":74619},259,[123,74621,70014],{"class":133},[123,74623,74625],{"class":125,"line":74624},260,[123,74626,74627],{"class":133},"        city: city.value,\n",[123,74629,74631],{"class":125,"line":74630},261,[123,74632,74633],{"class":192},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[123,74635,74637],{"class":125,"line":74636},262,[123,74638,74639],{"class":192},"        \u002F\u002F time: new Date().toDateString()\n",[123,74641,74643,74646,74649],{"class":125,"line":74642},263,[123,74644,74645],{"class":133},"        time: ",[123,74647,74648],{"class":1972},"getTime",[123,74650,1985],{"class":133},[123,74652,74654],{"class":125,"line":74653},264,[123,74655,64826],{"class":133},[123,74657,74659],{"class":125,"line":74658},265,[123,74660,74661],{"class":192},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[123,74663,74665,74667],{"class":125,"line":74664},266,[123,74666,70079],{"class":1972},[123,74668,1985],{"class":133},[123,74670,74672,74674,74676,74678,74680],{"class":125,"line":74671},267,[123,74673,70062],{"class":182},[123,74675,692],{"class":133},[123,74677,70067],{"class":1972},[123,74679,13060],{"class":133},[123,74681,74682],{"class":192},"\u002F\u002F重置表单\n",[123,74684,74686],{"class":125,"line":74685},268,[123,74687,74688],{"class":192},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[123,74690,74692,74695,74697,74699,74702,74704,74706,74708,74710],{"class":125,"line":74691},269,[123,74693,74694],{"class":133},"      localStorage.",[123,74696,71665],{"class":1972},[123,74698,134],{"class":133},[123,74700,74701],{"class":238},"'data'",[123,74703,12445],{"class":133},[123,74705,71675],{"class":182},[123,74707,692],{"class":133},[123,74709,71680],{"class":1972},[123,74711,74712],{"class":133},"(arr))\n",[123,74714,74716],{"class":125,"line":74715},270,[123,74717,33472],{"class":133},[123,74719,74721],{"class":125,"line":74720},271,[123,74722,2409],{"emptyLinePlaceholder":50},[123,74724,74726],{"class":125,"line":74725},272,[123,74727,74728],{"class":192},"    \u002F\u002F 3.删除业务\n",[123,74730,74732],{"class":125,"line":74731},273,[123,74733,74734],{"class":192},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[123,74736,74738,74740,74742,74744,74746,74748,74750,74752,74754],{"class":125,"line":74737},274,[123,74739,70352],{"class":133},[123,74741,57824],{"class":1972},[123,74743,134],{"class":133},[123,74745,57829],{"class":238},[123,74747,12445],{"class":133},[123,74749,54460],{"class":129},[123,74751,1667],{"class":133},[123,74753,208],{"class":5226},[123,74755,12452],{"class":133},[123,74757,74759],{"class":125,"line":74758},275,[123,74760,74761],{"class":192},"      \u002F\u002F 判断是否点击的是删除按钮\n",[123,74763,74765,74767,74769,74771,74773],{"class":125,"line":74764},276,[123,74766,54491],{"class":129},[123,74768,67045],{"class":133},[123,74770,54497],{"class":129},[123,74772,68267],{"class":238},[123,74774,12452],{"class":133},[123,74776,74778],{"class":125,"line":74777},277,[123,74779,74780],{"class":192},"        \u002F\u002F alert(1)\n",[123,74782,74784],{"class":125,"line":74783},278,[123,74785,74786],{"class":192},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[123,74788,74790],{"class":125,"line":74789},279,[123,74791,74792],{"class":192},"        \u002F\u002F console.log(e.target)\n",[123,74794,74796],{"class":125,"line":74795},280,[123,74797,74798],{"class":192},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[123,74800,74802],{"class":125,"line":74801},281,[123,74803,2409],{"emptyLinePlaceholder":50},[123,74805,74807],{"class":125,"line":74806},282,[123,74808,74809],{"class":192},"        \u002F\u002F 确认框，确然是否真的要删除\n",[123,74811,74813],{"class":125,"line":74812},283,[123,74814,74815],{"class":192},"        \u002F\u002F confirm()为确认框\n",[123,74817,74819],{"class":125,"line":74818},284,[123,74820,74821],{"class":192},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[123,74823,74825,74827,74829,74832,74834,74837],{"class":125,"line":74824},285,[123,74826,2506],{"class":129},[123,74828,1667],{"class":133},[123,74830,74831],{"class":1972},"confirm",[123,74833,134],{"class":133},[123,74835,74836],{"class":238},"'您确定要删除这条数据吗？'",[123,74838,74839],{"class":133},")) {\n",[123,74841,74843,74846,74848,74850,74852],{"class":125,"line":74842},286,[123,74844,74845],{"class":133},"          arr.",[123,74847,58021],{"class":1972},[123,74849,70405],{"class":133},[123,74851,351],{"class":182},[123,74853,140],{"class":133},[123,74855,74857],{"class":125,"line":74856},287,[123,74858,74859],{"class":192},"          \u002F\u002F 3.4 重新渲染页面\n",[123,74861,74863,74866],{"class":125,"line":74862},288,[123,74864,74865],{"class":1972},"          render",[123,74867,1985],{"class":133},[123,74869,74871],{"class":125,"line":74870},289,[123,74872,74873],{"class":192},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[123,74875,74877,74880,74882,74884,74886,74888,74890,74892,74894],{"class":125,"line":74876},290,[123,74878,74879],{"class":133},"          localStorage.",[123,74881,71665],{"class":1972},[123,74883,134],{"class":133},[123,74885,74701],{"class":238},[123,74887,12445],{"class":133},[123,74889,71675],{"class":182},[123,74891,692],{"class":133},[123,74893,71680],{"class":1972},[123,74895,74712],{"class":133},[123,74897,74899],{"class":125,"line":74898},291,[123,74900,2538],{"class":133},[123,74902,74904],{"class":125,"line":74903},292,[123,74905,52409],{"class":133},[123,74907,74909],{"class":125,"line":74908},293,[123,74910,2409],{"emptyLinePlaceholder":50},[123,74912,74914],{"class":125,"line":74913},294,[123,74915,33472],{"class":133},[123,74917,74919],{"class":125,"line":74918},295,[123,74920,2409],{"emptyLinePlaceholder":50},[123,74922,74924,74926,74928],{"class":125,"line":74923},296,[123,74925,52428],{"class":133},[123,74927,51824],{"class":51311},[123,74929,51318],{"class":133},[123,74931,74933,74935,74937],{"class":125,"line":74932},297,[123,74934,51796],{"class":133},[123,74936,51811],{"class":51311},[123,74938,51318],{"class":133},[123,74940,74942],{"class":125,"line":74941},298,[123,74943,2409],{"emptyLinePlaceholder":50},[123,74945,74947,74949,74951],{"class":125,"line":74946},299,[123,74948,51796],{"class":133},[123,74950,50646],{"class":51311},[123,74952,51318],{"class":133},[65,74954,74956],{"id":74955},"_36-正则表达式","3.6 正则表达式",[14,74958,74959],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,74961,74962],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,74964,74965],{},"正则表达式的作用：",[1141,74967,74968,74975,74981],{},[80,74969,74970,74971,74974],{},"表单验证（ ",[283,74972,74973],{},"匹配"," ）",[80,74976,74977,74978,74974],{},"过滤敏感词（ ",[283,74979,74980],{},"替换",[80,74982,74983,74984,74974],{},"字符串中提取我们想要的部分（ ",[283,74985,74986],{},"提取",[94,74988,74990],{"id":74989},"_361-语法","3.6.1 语法",[14,74992,74993],{},"正则表达式使用步骤：",[77,74995,74996,74999],{},[80,74997,74998],{},"定义规则",[80,75000,75001],{},"查找是否匹配",[14,75003,75004],{},"正则表达式里边不需要写引号",[14,75006,75007],{},[35,75008],{"alt":37,"src":75009},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,75011,75012],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,75014,75015],{},"reg.test(str)",[14,75017,75018],{},[35,75019],{"alt":37,"src":75020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75022,75023],{},[35,75024],{"alt":37,"src":75025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[94,75027,75029],{"id":75028},"_362-元字符","3.6.2 元字符",[77,75031,75032,75035,75038,75041,75048],{},[80,75033,75034],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[80,75036,75037],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[80,75039,75040],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[80,75042,75043,75044],{},"正则验证工具：",[372,75045,75046],{"href":75046,"rel":75047},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23875],[80,75049,75050],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[22008,75052,75054],{"id":75053},"_3621-边界符","3.6.2.1 边界符",[14,75056,75057],{},[35,75058],{"alt":37,"src":75059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75061,75062],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75064,75065],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75067,75068],{},"只匹配一次",[14,75070,75071],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[22008,75073,75075],{"id":75074},"_3622-量词","3.6.2.2 量词",[14,75077,75078],{},[35,75079],{"alt":37,"src":75080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75082,75083],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[22008,75085,75087],{"id":75086},"_3623-元字符","3.6.2.3 元字符",[14,75089,75090],{},[35,75091],{"alt":37,"src":75092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75094,75095],{},"匹配的是a或b或c []只选一个",[14,75097,75098],{},[35,75099],{"alt":37,"src":75100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75102,75103],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75105,75106],{},[35,75107],{"alt":37,"src":75108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75110,75111],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75113,75114],{},[35,75115],{"alt":37,"src":75116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[114,75118,75120],{"className":50644,"code":75119,"language":50646,"meta":37,"style":37},"\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",[120,75121,75122,75132,75146,75150,75158,75172,75192,75204,75212,75216,75224,75232,75237,75268,75295,75323,75327,75332,75360,75391,75396,75401,75432,75464,75496,75500,75505,75536,75566,75596,75600,75605,75636,75667,75697,75727,75731,75736,75769,75773,75778,75809,75840,75844,75849,75880,75910,75941,75945,75950,75982,76013,76044,76071,76102,76134,76167,76198,76229,76261,76292,76300,76308,76312],{"__ignoreMap":37},[123,75123,75124,75126,75128,75130],{"class":125,"line":126},[123,75125,51308],{"class":133},[123,75127,51312],{"class":51311},[123,75129,51315],{"class":1972},[123,75131,51318],{"class":133},[123,75133,75134,75136,75138,75140,75142,75144],{"class":125,"line":45},[123,75135,1044],{"class":133},[123,75137,50646],{"class":51311},[123,75139,51327],{"class":1972},[123,75141,179],{"class":133},[123,75143,51332],{"class":238},[123,75145,51318],{"class":133},[123,75147,75148],{"class":125,"line":1189},[123,75149,2409],{"emptyLinePlaceholder":50},[123,75151,75152,75154,75156],{"class":125,"line":1204},[123,75153,1044],{"class":133},[123,75155,51345],{"class":51311},[123,75157,51318],{"class":133},[123,75159,75160,75162,75164,75166,75168,75170],{"class":125,"line":1210},[123,75161,52155],{"class":133},[123,75163,51355],{"class":51311},[123,75165,51358],{"class":1972},[123,75167,179],{"class":133},[123,75169,51363],{"class":238},[123,75171,51318],{"class":133},[123,75173,75174,75176,75178,75180,75182,75184,75186,75188,75190],{"class":125,"line":1224},[123,75175,52155],{"class":133},[123,75177,51355],{"class":51311},[123,75179,14930],{"class":1972},[123,75181,179],{"class":133},[123,75183,51402],{"class":238},[123,75185,51382],{"class":1972},[123,75187,179],{"class":133},[123,75189,51409],{"class":238},[123,75191,51318],{"class":133},[123,75193,75194,75196,75198,75200,75202],{"class":125,"line":1230},[123,75195,52155],{"class":133},[123,75197,51418],{"class":51311},[123,75199,51421],{"class":133},[123,75201,51418],{"class":51311},[123,75203,51318],{"class":133},[123,75205,75206,75208,75210],{"class":125,"line":1321},[123,75207,51796],{"class":133},[123,75209,51345],{"class":51311},[123,75211,51318],{"class":133},[123,75213,75214],{"class":125,"line":1327},[123,75215,2409],{"emptyLinePlaceholder":50},[123,75217,75218,75220,75222],{"class":125,"line":1339},[123,75219,1044],{"class":133},[123,75221,51811],{"class":51311},[123,75223,51318],{"class":133},[123,75225,75226,75228,75230],{"class":125,"line":1621},[123,75227,52155],{"class":133},[123,75229,51824],{"class":51311},[123,75231,51318],{"class":133},[123,75233,75234],{"class":125,"line":1626},[123,75235,75236],{"class":192},"    \u002F\u002F 元字符中\n",[123,75238,75239,75241,75243,75245,75247,75250,75252,75254,75257,75259,75262,75265],{"class":125,"line":1632},[123,75240,73764],{"class":133},[123,75242,58258],{"class":1972},[123,75244,134],{"class":133},[123,75246,718],{"class":238},[123,75248,75249],{"class":47988},"哈",[123,75251,718],{"class":238},[123,75253,692],{"class":133},[123,75255,75256],{"class":1972},"test",[123,75258,134],{"class":133},[123,75260,75261],{"class":238},"'哈'",[123,75263,75264],{"class":133},"))  ",[123,75266,75267],{"class":192},"\u002F\u002Ftrue\n",[123,75269,75270,75272,75274,75276,75278,75280,75282,75284,75286,75288,75291,75293],{"class":125,"line":1637},[123,75271,73764],{"class":133},[123,75273,58258],{"class":1972},[123,75275,134],{"class":133},[123,75277,718],{"class":238},[123,75279,75249],{"class":47988},[123,75281,718],{"class":238},[123,75283,692],{"class":133},[123,75285,75256],{"class":1972},[123,75287,134],{"class":133},[123,75289,75290],{"class":238},"'哈哈'",[123,75292,75264],{"class":133},[123,75294,75267],{"class":192},[123,75296,75297,75299,75301,75303,75305,75307,75309,75311,75313,75315,75318,75321],{"class":125,"line":1651},[123,75298,73764],{"class":133},[123,75300,58258],{"class":1972},[123,75302,134],{"class":133},[123,75304,718],{"class":238},[123,75306,75249],{"class":47988},[123,75308,718],{"class":238},[123,75310,692],{"class":133},[123,75312,75256],{"class":1972},[123,75314,134],{"class":133},[123,75316,75317],{"class":238},"'二哈'",[123,75319,75320],{"class":133},"))   ",[123,75322,75267],{"class":192},[123,75324,75325],{"class":125,"line":1656},[123,75326,2409],{"emptyLinePlaceholder":50},[123,75328,75329],{"class":125,"line":1662},[123,75330,75331],{"class":192},"    \u002F\u002F 1.边界符\n",[123,75333,75334,75336,75338,75340,75342,75344,75346,75348,75350,75352,75354,75356,75358],{"class":125,"line":1683},[123,75335,73764],{"class":133},[123,75337,58258],{"class":1972},[123,75339,134],{"class":133},[123,75341,718],{"class":238},[123,75343,1100],{"class":129},[123,75345,75249],{"class":47988},[123,75347,718],{"class":238},[123,75349,692],{"class":133},[123,75351,75256],{"class":1972},[123,75353,134],{"class":133},[123,75355,75261],{"class":238},[123,75357,75264],{"class":133},[123,75359,75267],{"class":192},[123,75361,75362,75364,75366,75368,75370,75372,75374,75376,75378,75380,75382,75384,75386,75388],{"class":125,"line":1688},[123,75363,73764],{"class":133},[123,75365,58258],{"class":1972},[123,75367,134],{"class":133},[123,75369,718],{"class":238},[123,75371,1100],{"class":129},[123,75373,75249],{"class":47988},[123,75375,436],{"class":129},[123,75377,718],{"class":238},[123,75379,692],{"class":133},[123,75381,75256],{"class":1972},[123,75383,134],{"class":133},[123,75385,75290],{"class":238},[123,75387,75264],{"class":133},[123,75389,75390],{"class":192},"\u002F\u002Ffalse\n",[123,75392,75393],{"class":125,"line":1702},[123,75394,75395],{"class":192},"    \u002F\u002F 2.量词\n",[123,75397,75398],{"class":125,"line":1707},[123,75399,75400],{"class":192},"    \u002F\u002F 量词 * 类似于 >= 0\n",[123,75402,75403,75405,75407,75409,75411,75413,75415,75418,75420,75422,75424,75426,75428,75430],{"class":125,"line":1736},[123,75404,73764],{"class":133},[123,75406,58258],{"class":1972},[123,75408,134],{"class":133},[123,75410,718],{"class":238},[123,75412,1100],{"class":129},[123,75414,75249],{"class":47988},[123,75416,75417],{"class":129},"*$",[123,75419,718],{"class":238},[123,75421,692],{"class":133},[123,75423,75256],{"class":1972},[123,75425,134],{"class":133},[123,75427,75290],{"class":238},[123,75429,75264],{"class":133},[123,75431,75267],{"class":192},[123,75433,75434,75436,75438,75440,75442,75444,75446,75448,75450,75452,75454,75456,75459,75461],{"class":125,"line":1741},[123,75435,73764],{"class":133},[123,75437,58258],{"class":1972},[123,75439,134],{"class":133},[123,75441,718],{"class":238},[123,75443,1100],{"class":129},[123,75445,75249],{"class":47988},[123,75447,75417],{"class":129},[123,75449,718],{"class":238},[123,75451,692],{"class":133},[123,75453,75256],{"class":1972},[123,75455,134],{"class":133},[123,75457,75458],{"class":238},"'二哈好傻'",[123,75460,75264],{"class":133},[123,75462,75463],{"class":192},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[123,75465,75466,75468,75470,75472,75474,75476,75478,75480,75482,75484,75486,75488,75491,75493],{"class":125,"line":1758},[123,75467,73764],{"class":133},[123,75469,58258],{"class":1972},[123,75471,134],{"class":133},[123,75473,718],{"class":238},[123,75475,1100],{"class":129},[123,75477,75249],{"class":47988},[123,75479,75417],{"class":129},[123,75481,718],{"class":238},[123,75483,692],{"class":133},[123,75485,75256],{"class":1972},[123,75487,134],{"class":133},[123,75489,75490],{"class":238},"'哈好哈'",[123,75492,75320],{"class":133},[123,75494,75495],{"class":192},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[123,75497,75498],{"class":125,"line":1763},[123,75499,2409],{"emptyLinePlaceholder":50},[123,75501,75502],{"class":125,"line":1768},[123,75503,75504],{"class":192},"    \u002F\u002F +类似于>=1\n",[123,75506,75507,75509,75511,75513,75515,75517,75519,75522,75524,75526,75528,75530,75532,75534],{"class":125,"line":1773},[123,75508,73764],{"class":133},[123,75510,58258],{"class":1972},[123,75512,134],{"class":133},[123,75514,718],{"class":238},[123,75516,1100],{"class":129},[123,75518,75249],{"class":47988},[123,75520,75521],{"class":129},"+$",[123,75523,718],{"class":238},[123,75525,692],{"class":133},[123,75527,75256],{"class":1972},[123,75529,134],{"class":133},[123,75531,75290],{"class":238},[123,75533,75264],{"class":133},[123,75535,75267],{"class":192},[123,75537,75538,75540,75542,75544,75546,75548,75550,75552,75554,75556,75558,75560,75562,75564],{"class":125,"line":1787},[123,75539,73764],{"class":133},[123,75541,58258],{"class":1972},[123,75543,134],{"class":133},[123,75545,718],{"class":238},[123,75547,1100],{"class":129},[123,75549,75249],{"class":47988},[123,75551,75521],{"class":129},[123,75553,718],{"class":238},[123,75555,692],{"class":133},[123,75557,75256],{"class":1972},[123,75559,134],{"class":133},[123,75561,75458],{"class":238},[123,75563,75264],{"class":133},[123,75565,75463],{"class":192},[123,75567,75568,75570,75572,75574,75576,75578,75580,75582,75584,75586,75588,75590,75592,75594],{"class":125,"line":1792},[123,75569,73764],{"class":133},[123,75571,58258],{"class":1972},[123,75573,134],{"class":133},[123,75575,718],{"class":238},[123,75577,1100],{"class":129},[123,75579,75249],{"class":47988},[123,75581,75521],{"class":129},[123,75583,718],{"class":238},[123,75585,692],{"class":133},[123,75587,75256],{"class":1972},[123,75589,134],{"class":133},[123,75591,75490],{"class":238},[123,75593,75320],{"class":133},[123,75595,75390],{"class":192},[123,75597,75598],{"class":125,"line":2586},[123,75599,2409],{"emptyLinePlaceholder":50},[123,75601,75602],{"class":125,"line":2600},[123,75603,75604],{"class":192},"    \u002F\u002F ?类似于0次或一次\n",[123,75606,75607,75609,75611,75613,75615,75617,75620,75622,75624,75626,75628,75630,75632,75634],{"class":125,"line":2608},[123,75608,73764],{"class":133},[123,75610,58258],{"class":1972},[123,75612,134],{"class":133},[123,75614,718],{"class":238},[123,75616,1100],{"class":129},[123,75618,75619],{"class":47988},"哈？",[123,75621,436],{"class":129},[123,75623,718],{"class":238},[123,75625,692],{"class":133},[123,75627,75256],{"class":1972},[123,75629,134],{"class":133},[123,75631,74239],{"class":238},[123,75633,75320],{"class":133},[123,75635,75267],{"class":192},[123,75637,75638,75640,75642,75644,75646,75648,75650,75653,75655,75657,75659,75661,75663,75665],{"class":125,"line":2613},[123,75639,73764],{"class":133},[123,75641,58258],{"class":1972},[123,75643,134],{"class":133},[123,75645,718],{"class":238},[123,75647,1100],{"class":129},[123,75649,75249],{"class":47988},[123,75651,75652],{"class":129},"?$",[123,75654,718],{"class":238},[123,75656,692],{"class":133},[123,75658,75256],{"class":1972},[123,75660,134],{"class":133},[123,75662,75290],{"class":238},[123,75664,75264],{"class":133},[123,75666,75390],{"class":192},[123,75668,75669,75671,75673,75675,75677,75679,75681,75683,75685,75687,75689,75691,75693,75695],{"class":125,"line":2619},[123,75670,73764],{"class":133},[123,75672,58258],{"class":1972},[123,75674,134],{"class":133},[123,75676,718],{"class":238},[123,75678,1100],{"class":129},[123,75680,75249],{"class":47988},[123,75682,75652],{"class":129},[123,75684,718],{"class":238},[123,75686,692],{"class":133},[123,75688,75256],{"class":1972},[123,75690,134],{"class":133},[123,75692,75458],{"class":238},[123,75694,75264],{"class":133},[123,75696,75463],{"class":192},[123,75698,75699,75701,75703,75705,75707,75709,75711,75713,75715,75717,75719,75721,75723,75725],{"class":125,"line":2625},[123,75700,73764],{"class":133},[123,75702,58258],{"class":1972},[123,75704,134],{"class":133},[123,75706,718],{"class":238},[123,75708,1100],{"class":129},[123,75710,75249],{"class":47988},[123,75712,75652],{"class":129},[123,75714,718],{"class":238},[123,75716,692],{"class":133},[123,75718,75256],{"class":1972},[123,75720,134],{"class":133},[123,75722,75490],{"class":238},[123,75724,75264],{"class":133},[123,75726,75390],{"class":192},[123,75728,75729],{"class":125,"line":2630},[123,75730,2409],{"emptyLinePlaceholder":50},[123,75732,75733],{"class":125,"line":7958},[123,75734,75735],{"class":192},"    \u002F\u002F {n}写几，就必须出现几次\n",[123,75737,75738,75740,75742,75744,75746,75748,75750,75753,75755,75757,75759,75761,75764,75767],{"class":125,"line":7982},[123,75739,73764],{"class":133},[123,75741,58258],{"class":1972},[123,75743,134],{"class":133},[123,75745,718],{"class":238},[123,75747,1100],{"class":129},[123,75749,75249],{"class":47988},[123,75751,75752],{"class":129},"{4}$",[123,75754,718],{"class":238},[123,75756,692],{"class":133},[123,75758,75256],{"class":1972},[123,75760,134],{"class":133},[123,75762,75763],{"class":238},"'哈哈哈哈'",[123,75765,75766],{"class":133},")) ",[123,75768,75267],{"class":192},[123,75770,75771],{"class":125,"line":7987},[123,75772,2409],{"emptyLinePlaceholder":50},[123,75774,75775],{"class":125,"line":7993},[123,75776,75777],{"class":192},"    \u002F\u002F {n,}大于等于n次\n",[123,75779,75780,75782,75784,75786,75788,75790,75792,75795,75797,75799,75801,75803,75805,75807],{"class":125,"line":8020},[123,75781,73764],{"class":133},[123,75783,58258],{"class":1972},[123,75785,134],{"class":133},[123,75787,718],{"class":238},[123,75789,1100],{"class":129},[123,75791,75249],{"class":47988},[123,75793,75794],{"class":129},"{4,}$",[123,75796,718],{"class":238},[123,75798,692],{"class":133},[123,75800,75256],{"class":1972},[123,75802,134],{"class":133},[123,75804,75763],{"class":238},[123,75806,75766],{"class":133},[123,75808,75267],{"class":192},[123,75810,75811,75813,75815,75817,75819,75821,75823,75825,75827,75829,75831,75833,75836,75838],{"class":125,"line":8025},[123,75812,73764],{"class":133},[123,75814,58258],{"class":1972},[123,75816,134],{"class":133},[123,75818,718],{"class":238},[123,75820,1100],{"class":129},[123,75822,75249],{"class":47988},[123,75824,75794],{"class":129},[123,75826,718],{"class":238},[123,75828,692],{"class":133},[123,75830,75256],{"class":1972},[123,75832,134],{"class":133},[123,75834,75835],{"class":238},"'哈哈哈哈哈'",[123,75837,75766],{"class":133},[123,75839,75267],{"class":192},[123,75841,75842],{"class":125,"line":8031},[123,75843,2409],{"emptyLinePlaceholder":50},[123,75845,75846],{"class":125,"line":8043},[123,75847,75848],{"class":192},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[123,75850,75851,75853,75855,75857,75859,75861,75863,75866,75868,75870,75872,75874,75876,75878],{"class":125,"line":8055},[123,75852,73764],{"class":133},[123,75854,58258],{"class":1972},[123,75856,134],{"class":133},[123,75858,718],{"class":238},[123,75860,1100],{"class":129},[123,75862,75249],{"class":47988},[123,75864,75865],{"class":129},"{4,6}$",[123,75867,718],{"class":238},[123,75869,692],{"class":133},[123,75871,75256],{"class":1972},[123,75873,134],{"class":133},[123,75875,75763],{"class":238},[123,75877,75766],{"class":133},[123,75879,75267],{"class":192},[123,75881,75882,75884,75886,75888,75890,75892,75894,75896,75898,75900,75902,75904,75906,75908],{"class":125,"line":8067},[123,75883,73764],{"class":133},[123,75885,58258],{"class":1972},[123,75887,134],{"class":133},[123,75889,718],{"class":238},[123,75891,1100],{"class":129},[123,75893,75249],{"class":47988},[123,75895,75865],{"class":129},[123,75897,718],{"class":238},[123,75899,692],{"class":133},[123,75901,75256],{"class":1972},[123,75903,134],{"class":133},[123,75905,75835],{"class":238},[123,75907,75766],{"class":133},[123,75909,75267],{"class":192},[123,75911,75912,75914,75916,75918,75920,75922,75924,75926,75928,75930,75932,75934,75937,75939],{"class":125,"line":9726},[123,75913,73764],{"class":133},[123,75915,58258],{"class":1972},[123,75917,134],{"class":133},[123,75919,718],{"class":238},[123,75921,1100],{"class":129},[123,75923,75249],{"class":47988},[123,75925,75865],{"class":129},[123,75927,718],{"class":238},[123,75929,692],{"class":133},[123,75931,75256],{"class":1972},[123,75933,134],{"class":133},[123,75935,75936],{"class":238},"'哈哈哈哈哈哈哈'",[123,75938,75766],{"class":133},[123,75940,75390],{"class":192},[123,75942,75943],{"class":125,"line":9751},[123,75944,2409],{"emptyLinePlaceholder":50},[123,75946,75947],{"class":125,"line":9774},[123,75948,75949],{"class":192},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[123,75951,75952,75954,75956,75958,75960,75962,75965,75967,75969,75971,75973,75975,75978,75980],{"class":125,"line":9798},[123,75953,73764],{"class":133},[123,75955,58258],{"class":1972},[123,75957,134],{"class":133},[123,75959,718],{"class":238},[123,75961,1100],{"class":129},[123,75963,75964],{"class":182},"[abc]",[123,75966,436],{"class":129},[123,75968,718],{"class":238},[123,75970,692],{"class":133},[123,75972,75256],{"class":1972},[123,75974,134],{"class":133},[123,75976,75977],{"class":238},"'a'",[123,75979,75264],{"class":133},[123,75981,75267],{"class":192},[123,75983,75984,75986,75988,75990,75992,75994,75996,75998,76000,76002,76004,76006,76009,76011],{"class":125,"line":9803},[123,75985,73764],{"class":133},[123,75987,58258],{"class":1972},[123,75989,134],{"class":133},[123,75991,718],{"class":238},[123,75993,1100],{"class":129},[123,75995,75964],{"class":182},[123,75997,436],{"class":129},[123,75999,718],{"class":238},[123,76001,692],{"class":133},[123,76003,75256],{"class":1972},[123,76005,134],{"class":133},[123,76007,76008],{"class":238},"'b'",[123,76010,75264],{"class":133},[123,76012,75267],{"class":192},[123,76014,76015,76017,76019,76021,76023,76025,76027,76029,76031,76033,76035,76037,76040,76042],{"class":125,"line":9808},[123,76016,73764],{"class":133},[123,76018,58258],{"class":1972},[123,76020,134],{"class":133},[123,76022,718],{"class":238},[123,76024,1100],{"class":129},[123,76026,75964],{"class":182},[123,76028,436],{"class":129},[123,76030,718],{"class":238},[123,76032,692],{"class":133},[123,76034,75256],{"class":1972},[123,76036,134],{"class":133},[123,76038,76039],{"class":238},"'c'",[123,76041,75264],{"class":133},[123,76043,75267],{"class":192},[123,76045,76046,76048,76050,76052,76054,76056,76058,76060,76062,76064,76067,76069],{"class":125,"line":9813},[123,76047,73764],{"class":133},[123,76049,58258],{"class":1972},[123,76051,134],{"class":133},[123,76053,718],{"class":238},[123,76055,75964],{"class":182},[123,76057,718],{"class":238},[123,76059,692],{"class":133},[123,76061,75256],{"class":1972},[123,76063,134],{"class":133},[123,76065,76066],{"class":238},"'ab'",[123,76068,75264],{"class":133},[123,76070,75267],{"class":192},[123,76072,76073,76075,76077,76079,76081,76083,76085,76087,76089,76091,76093,76095,76097,76099],{"class":125,"line":9822},[123,76074,73764],{"class":133},[123,76076,58258],{"class":1972},[123,76078,134],{"class":133},[123,76080,718],{"class":238},[123,76082,1100],{"class":129},[123,76084,75964],{"class":182},[123,76086,436],{"class":129},[123,76088,718],{"class":238},[123,76090,692],{"class":133},[123,76092,75256],{"class":1972},[123,76094,134],{"class":133},[123,76096,76066],{"class":238},[123,76098,75264],{"class":133},[123,76100,76101],{"class":192},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[123,76103,76104,76106,76108,76110,76112,76114,76116,76119,76121,76123,76125,76127,76129,76131],{"class":125,"line":9827},[123,76105,73764],{"class":133},[123,76107,58258],{"class":1972},[123,76109,134],{"class":133},[123,76111,718],{"class":238},[123,76113,1100],{"class":129},[123,76115,75964],{"class":182},[123,76117,76118],{"class":129},"{2}$",[123,76120,718],{"class":238},[123,76122,692],{"class":133},[123,76124,75256],{"class":1972},[123,76126,134],{"class":133},[123,76128,76066],{"class":238},[123,76130,75264],{"class":133},[123,76132,76133],{"class":192},"\u002F\u002Ftrue   可以选两个\n",[123,76135,76136,76138,76140,76142,76144,76146,76149,76151,76153,76155,76157,76159,76162,76164],{"class":125,"line":9833},[123,76137,73764],{"class":133},[123,76139,58258],{"class":1972},[123,76141,134],{"class":133},[123,76143,718],{"class":238},[123,76145,1100],{"class":129},[123,76147,76148],{"class":182},"[a-z]",[123,76150,436],{"class":129},[123,76152,718],{"class":238},[123,76154,692],{"class":133},[123,76156,75256],{"class":1972},[123,76158,134],{"class":133},[123,76160,76161],{"class":238},"'p'",[123,76163,75320],{"class":133},[123,76165,76166],{"class":192},"\u002F\u002Ftrue   依然只能选一个\n",[123,76168,76169,76171,76173,76175,76177,76179,76182,76184,76186,76188,76190,76192,76194,76196],{"class":125,"line":9854},[123,76170,73764],{"class":133},[123,76172,58258],{"class":1972},[123,76174,134],{"class":133},[123,76176,718],{"class":238},[123,76178,1100],{"class":129},[123,76180,76181],{"class":182},"[A-Z]",[123,76183,436],{"class":129},[123,76185,718],{"class":238},[123,76187,692],{"class":133},[123,76189,75256],{"class":1972},[123,76191,134],{"class":133},[123,76193,76161],{"class":238},[123,76195,75320],{"class":133},[123,76197,75390],{"class":192},[123,76199,76200,76202,76204,76206,76208,76210,76212,76214,76216,76218,76220,76222,76225,76227],{"class":125,"line":9860},[123,76201,73764],{"class":133},[123,76203,58258],{"class":1972},[123,76205,134],{"class":133},[123,76207,718],{"class":238},[123,76209,1100],{"class":129},[123,76211,76181],{"class":182},[123,76213,436],{"class":129},[123,76215,718],{"class":238},[123,76217,692],{"class":133},[123,76219,75256],{"class":1972},[123,76221,134],{"class":133},[123,76223,76224],{"class":238},"'P'",[123,76226,75320],{"class":133},[123,76228,75267],{"class":192},[123,76230,76231,76233,76235,76237,76239,76241,76244,76246,76248,76250,76252,76254,76257,76259],{"class":125,"line":9874},[123,76232,73764],{"class":133},[123,76234,58258],{"class":1972},[123,76236,134],{"class":133},[123,76238,718],{"class":238},[123,76240,1100],{"class":129},[123,76242,76243],{"class":182},"[0-9]",[123,76245,436],{"class":129},[123,76247,718],{"class":238},[123,76249,692],{"class":133},[123,76251,75256],{"class":1972},[123,76253,134],{"class":133},[123,76255,76256],{"class":238},"'0'",[123,76258,75320],{"class":133},[123,76260,75267],{"class":192},[123,76262,76263,76265,76267,76269,76271,76273,76276,76278,76280,76282,76284,76286,76288,76290],{"class":125,"line":9880},[123,76264,73764],{"class":133},[123,76266,58258],{"class":1972},[123,76268,134],{"class":133},[123,76270,718],{"class":238},[123,76272,1100],{"class":129},[123,76274,76275],{"class":182},"[a-zA-Z0-9]",[123,76277,436],{"class":129},[123,76279,718],{"class":238},[123,76281,692],{"class":133},[123,76283,75256],{"class":1972},[123,76285,134],{"class":133},[123,76287,76161],{"class":238},[123,76289,75264],{"class":133},[123,76291,75267],{"class":192},[123,76293,76294,76296,76298],{"class":125,"line":9907},[123,76295,52428],{"class":133},[123,76297,51824],{"class":51311},[123,76299,51318],{"class":133},[123,76301,76302,76304,76306],{"class":125,"line":9916},[123,76303,51796],{"class":133},[123,76305,51811],{"class":51311},[123,76307,51318],{"class":133},[123,76309,76310],{"class":125,"line":9922},[123,76311,2409],{"emptyLinePlaceholder":50},[123,76313,76314,76316,76318],{"class":125,"line":9930},[123,76315,51796],{"class":133},[123,76317,50646],{"class":51311},[123,76319,51318],{"class":133},[22008,76321,76323],{"id":76322},"_3624-修饰符","3.6.2.4 修饰符",[14,76325,76326],{},[35,76327],{"alt":37,"src":76328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76330,76331],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76333,76334],{},[35,76335],{"alt":37,"src":76336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[114,76338,76340],{"className":50644,"code":76339,"language":50646,"meta":37,"style":37},"\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",[120,76341,76342,76352,76366,76374,76388,76408,76420,76428,76436,76444,76476,76507,76512,76544,76555,76588,76597,76605,76613],{"__ignoreMap":37},[123,76343,76344,76346,76348,76350],{"class":125,"line":126},[123,76345,51308],{"class":133},[123,76347,51312],{"class":51311},[123,76349,51315],{"class":1972},[123,76351,51318],{"class":133},[123,76353,76354,76356,76358,76360,76362,76364],{"class":125,"line":45},[123,76355,1044],{"class":133},[123,76357,50646],{"class":51311},[123,76359,51327],{"class":1972},[123,76361,179],{"class":133},[123,76363,51332],{"class":238},[123,76365,51318],{"class":133},[123,76367,76368,76370,76372],{"class":125,"line":1189},[123,76369,1044],{"class":133},[123,76371,51345],{"class":51311},[123,76373,51318],{"class":133},[123,76375,76376,76378,76380,76382,76384,76386],{"class":125,"line":1204},[123,76377,52155],{"class":133},[123,76379,51355],{"class":51311},[123,76381,51358],{"class":1972},[123,76383,179],{"class":133},[123,76385,51363],{"class":238},[123,76387,51318],{"class":133},[123,76389,76390,76392,76394,76396,76398,76400,76402,76404,76406],{"class":125,"line":1210},[123,76391,52155],{"class":133},[123,76393,51355],{"class":51311},[123,76395,14930],{"class":1972},[123,76397,179],{"class":133},[123,76399,51402],{"class":238},[123,76401,51382],{"class":1972},[123,76403,179],{"class":133},[123,76405,51409],{"class":238},[123,76407,51318],{"class":133},[123,76409,76410,76412,76414,76416,76418],{"class":125,"line":1224},[123,76411,52155],{"class":133},[123,76413,51418],{"class":51311},[123,76415,51421],{"class":133},[123,76417,51418],{"class":51311},[123,76419,51318],{"class":133},[123,76421,76422,76424,76426],{"class":125,"line":1230},[123,76423,51796],{"class":133},[123,76425,51345],{"class":51311},[123,76427,51318],{"class":133},[123,76429,76430,76432,76434],{"class":125,"line":1321},[123,76431,1044],{"class":133},[123,76433,51811],{"class":51311},[123,76435,51318],{"class":133},[123,76437,76438,76440,76442],{"class":125,"line":1327},[123,76439,52155],{"class":133},[123,76441,51824],{"class":51311},[123,76443,51318],{"class":133},[123,76445,76446,76448,76450,76452,76454,76456,76459,76461,76463,76465,76467,76469,76472,76474],{"class":125,"line":1339},[123,76447,73764],{"class":133},[123,76449,58258],{"class":1972},[123,76451,134],{"class":133},[123,76453,718],{"class":238},[123,76455,1100],{"class":129},[123,76457,76458],{"class":47988},"java",[123,76460,436],{"class":129},[123,76462,718],{"class":238},[123,76464,692],{"class":133},[123,76466,75256],{"class":1972},[123,76468,134],{"class":133},[123,76470,76471],{"class":238},"'java'",[123,76473,75766],{"class":133},[123,76475,75267],{"class":192},[123,76477,76478,76480,76482,76484,76486,76488,76490,76492,76494,76496,76498,76500,76503,76505],{"class":125,"line":1621},[123,76479,73764],{"class":133},[123,76481,58258],{"class":1972},[123,76483,134],{"class":133},[123,76485,718],{"class":238},[123,76487,1100],{"class":129},[123,76489,76458],{"class":47988},[123,76491,436],{"class":129},[123,76493,718],{"class":238},[123,76495,692],{"class":133},[123,76497,75256],{"class":1972},[123,76499,134],{"class":133},[123,76501,76502],{"class":238},"'Java'",[123,76504,75766],{"class":133},[123,76506,75390],{"class":192},[123,76508,76509],{"class":125,"line":1626},[123,76510,76511],{"class":192},"    \u002F\u002F 不区分大小写、\n",[123,76513,76514,76516,76518,76520,76522,76524,76526,76528,76530,76532,76534,76536,76538,76540,76542],{"class":125,"line":1632},[123,76515,73764],{"class":133},[123,76517,58258],{"class":1972},[123,76519,134],{"class":133},[123,76521,718],{"class":238},[123,76523,1100],{"class":129},[123,76525,76458],{"class":47988},[123,76527,436],{"class":129},[123,76529,718],{"class":238},[123,76531,575],{"class":129},[123,76533,692],{"class":133},[123,76535,75256],{"class":1972},[123,76537,134],{"class":133},[123,76539,76502],{"class":238},[123,76541,75766],{"class":133},[123,76543,75267],{"class":192},[123,76545,76546,76548,76550,76552],{"class":125,"line":1637},[123,76547,11231],{"class":129},[123,76549,73930],{"class":182},[123,76551,13574],{"class":129},[123,76553,76554],{"class":238}," 'java是一门编程语言，学完java工资很高'\n",[123,76556,76557,76559,76562,76564,76567,76570,76572,76574,76576,76578,76581,76583,76586],{"class":125,"line":1651},[123,76558,11231],{"class":129},[123,76560,76561],{"class":182}," result",[123,76563,13574],{"class":129},[123,76565,76566],{"class":133}," str.",[123,76568,76569],{"class":1972},"replace",[123,76571,134],{"class":133},[123,76573,718],{"class":238},[123,76575,76458],{"class":47988},[123,76577,718],{"class":238},[123,76579,76580],{"class":129},"ig",[123,76582,12445],{"class":133},[123,76584,76585],{"class":238},"'前端'",[123,76587,140],{"class":133},[123,76589,76590,76592,76594],{"class":125,"line":1656},[123,76591,73764],{"class":133},[123,76593,58258],{"class":1972},[123,76595,76596],{"class":133},"(result)\n",[123,76598,76599,76601,76603],{"class":125,"line":1662},[123,76600,52428],{"class":133},[123,76602,51824],{"class":51311},[123,76604,51318],{"class":133},[123,76606,76607,76609,76611],{"class":125,"line":1683},[123,76608,51796],{"class":133},[123,76610,51811],{"class":51311},[123,76612,51318],{"class":133},[123,76614,76615,76617,76619],{"class":125,"line":1688},[123,76616,51796],{"class":133},[123,76618,50646],{"class":51311},[123,76620,51318],{"class":133},[5136,76622,76623],{},"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":37,"searchDepth":45,"depth":45,"links":76625},[76626,76636,76648,76665,76672,76680],{"id":53371,"depth":45,"text":53372,"children":76627},[76628,76629,76630,76631,76632,76633,76634,76635],{"id":53375,"depth":1189,"text":53376},{"id":53408,"depth":1189,"text":53409},{"id":53447,"depth":1189,"text":53448},{"id":53605,"depth":1189,"text":53606},{"id":53653,"depth":1189,"text":53654},{"id":53790,"depth":1189,"text":53791},{"id":54112,"depth":1189,"text":54113},{"id":57100,"depth":1189,"text":57101},{"id":57128,"depth":45,"text":57129,"children":76637},[76638,76639,76640,76641,76642,76643,76644,76645,76646,76647],{"id":57132,"depth":1189,"text":57133},{"id":57155,"depth":1189,"text":57156},{"id":58070,"depth":1189,"text":58071},{"id":58760,"depth":1189,"text":58761},{"id":59042,"depth":1189,"text":59043},{"id":63203,"depth":1189,"text":63204},{"id":63373,"depth":1189,"text":63374},{"id":63501,"depth":1189,"text":63502},{"id":63526,"depth":1189,"text":63527},{"id":64915,"depth":1189,"text":64916},{"id":66068,"depth":45,"text":66069,"children":76649},[76650,76651,76652,76653,76654,76655,76656,76657,76658,76659,76660,76661,76662,76663,76664],{"id":66072,"depth":1189,"text":66073},{"id":66726,"depth":1189,"text":66727},{"id":68421,"depth":1189,"text":68422},{"id":68462,"depth":1189,"text":68463},{"id":68504,"depth":1189,"text":68505},{"id":68518,"depth":1189,"text":68519},{"id":68567,"depth":1189,"text":68568},{"id":68579,"depth":1189,"text":68580},{"id":68594,"depth":1189,"text":68595},{"id":68630,"depth":1189,"text":68631},{"id":68711,"depth":1189,"text":68712},{"id":68839,"depth":1189,"text":68840},{"id":68851,"depth":1189,"text":68852},{"id":68870,"depth":1189,"text":68871},{"id":70981,"depth":1189,"text":70982},{"id":71000,"depth":45,"text":71001,"children":76666},[76667,76668,76669,76670,76671],{"id":71021,"depth":1189,"text":71022},{"id":71041,"depth":1189,"text":71042},{"id":71090,"depth":1189,"text":71091},{"id":71215,"depth":1189,"text":71216},{"id":71396,"depth":1189,"text":71397},{"id":71414,"depth":45,"text":71415,"children":76673},[76674,76675,76676,76677,76678,76679],{"id":71429,"depth":1189,"text":71430},{"id":71488,"depth":1189,"text":71489},{"id":71512,"depth":1189,"text":71513},{"id":71832,"depth":1189,"text":71833},{"id":71864,"depth":1189,"text":71865},{"id":71887,"depth":1189,"text":71888},{"id":74955,"depth":45,"text":74956,"children":76681},[76682,76683],{"id":74989,"depth":1189,"text":74990},{"id":75028,"depth":1189,"text":75029},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53343,"description":47},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76690,"title":76691,"body":76692,"description":47,"extension":48,"meta":92829,"navigation":50,"path":92830,"seo":92831,"stem":92832,"__hash__":92833},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76693,"toc":92765},[76694,76697,76700,76704,76708,76713,76718,76729,76733,76738,76741,76745,76748,76753,76757,76761,76764,76769,76772,76776,76779,76787,76790,76794,76799,76804,76807,76811,76816,76821,76824,76828,76833,76836,76841,76844,76849,76852,76857,76862,76865,76868,76872,76877,76882,76885,76889,76893,76896,76899,76902,76906,76910,76915,76920,76923,76927,76932,76937,76940,76943,76946,76949,76952,76955,76958,76961,76964,76969,76973,76978,76983,76986,76989,76992,76995,76998,77001,77004,77007,77011,77015,77018,77021,77024,77029,77031,77034,77037,77040,77043,77046,77049,77052,77055,77058,77061,77064,77067,77070,77075,77080,77085,77088,77092,77095,77100,77104,77106,77117,77122,77223,77226,77229,77232,77235,77238,77241,77244,77247,77249,77252,77255,77258,77261,77264,77266,77269,77272,77275,77278,77281,77284,77286,77289,77291,77293,77296,77300,77304,77307,77310,77313,77316,77319,77322,77325,77328,77331,77336,77456,77459,77462,77467,77470,77473,77476,77479,77484,77487,77490,77493,77496,77501,77504,77604,77669,77743,77747,77750,77753,77757,77760,77774,77803,77806,77809,77812,77815,77818,77821,77824,77826,77829,77832,77835,77838,77842,77847,77851,77856,77931,77934,78117,78120,78123,78126,78129,78132,78134,78137,78140,78143,78146,78149,78152,78154,78158,78161,78166,78169,78172,78175,78178,78180,78185,78188,78191,78194,78197,78199,78204,78207,78210,78212,78214,78217,78221,78224,78227,78232,78235,78238,78241,78291,78296,78300,78305,78308,78377,78380,78389,78393,78398,78401,78404,78412,78415,78432,80234,80238,80242,80247,80250,80254,80260,80266,80418,80423,80428,80431,80434,80437,80440,80443,80446,80449,80452,80455,80458,80461,80464,80469,80473,80476,80487,80491,80496,80499,80502,80505,80508,80511,80513,80516,80519,80522,80525,80527,80544,80547,80551,80554,80559,80564,80567,80570,80574,80577,80580,80589,80592,80596,80599,80604,80609,80676,80680,80683,80686,80691,80696,80782,80787,80791,80794,80797,80812,80815,80820,80824,80829,80938,80941,80952,81102,81106,81111,81220,81224,81229,81234,81239,81242,81249,81269,81305,81469,81474,81477,81482,81489,81492,81495,81498,81557,81613,81669,81673,81678,81993,81996,82000,82003,82008,82117,82122,82126,82131,82135,82206,82210,82212,82215,82218,82256,82532,82536,82553,82619,82653,82657,82660,82665,82694,82701,82710,82715,82730,82735,82744,82747,82884,82888,82950,82954,82959,83204,83208,83213,83216,83219,83222,83225,83229,83234,84815,84819,84823,84829,84832,84837,84841,84844,84849,84852,84863,84867,84872,84876,84881,84886,84889,84894,84898,84902,84905,84910,84915,84918,84921,84924,85046,85051,85153,85156,85159,85163,85168,85340,85345,85349,85352,85357,85423,85428,85431,85562,85565,85570,85573,85576,85667,85672,85675,85678,85681,85684,85689,85694,85697,85702,85707,85712,85716,85719,85722,85727,85732,85737,85742,85796,85799,85802,85807,85810,85813,85818,85823,85828,85832,85837,85851,85856,85859,85864,85868,85873,85878,85883,85888,85893,85898,85903,85908,85911,85915,85920,85923,85926,85929,85934,85939,85942,85945,85949,85952,85955,85960,85965,85970,85975,85978,85983,85988,86049,86054,86057,86062,87303,87308,87312,87316,87321,87324,87329,87334,87337,87342,87344,87349,87353,87356,87359,87370,87374,87379,87384,87439,87444,87449,87454,87665,87670,87674,87679,87682,87684,87687,87690,88137,88142,88149,88155,88158,88161,88425,88430,88434,88699,88704,88708,88713,88718,88723,88728,89059,89062,89067,89072,89075,89079,89083,89088,89093,89098,89103,89108,89113,89117,89120,89125,89130,89133,89207,89212,89217,89222,89224,89227,89597,89602,89607,89612,89615,89618,89720,89725,89730,89833,89837,89842,89846,89850,89855,89860,89863,89868,89871,89874,90267,90272,90275,90278,90281,90284,90804,90808,90813,90818,90823,90826,90831,90834,90837,91219,91224,91226,91228,91231,91234,91746,91750,91811,91814,91817,91820,91824,91827,91832,91837,92762],[10,76695,76691],{"id":76696},"_4js进阶",[14,76698,76699],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[65,76701,76703],{"id":76702},"_41-作用域","4.1 作用域",[94,76705,76707],{"id":76706},"_411-局部作用域","4.1.1 局部作用域",[14,76709,76710],{},[35,76711],{"alt":37,"src":76712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,76714,76715],{},[35,76716],{"alt":37,"src":76717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1141,76719,76720,76723,76726],{},[80,76721,76722],{},"函数作用域在函数内部",[80,76724,76725],{},"块级作用域在{}",[80,76727,76728],{},"对象的那个{}不是作用域，不是块作用域",[94,76730,76732],{"id":76731},"_412-全局作用域","4.1.2 全局作用域",[14,76734,76735],{},[35,76736],{"alt":37,"src":76737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,76739,76740],{},"window.a=10不要这样写",[94,76742,76744],{"id":76743},"_413-作用域链","4.1.3 作用域链",[14,76746,76747],{},"变量查找机制",[14,76749,76750],{},[35,76751],{"alt":37,"src":76752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[65,76754,76756],{"id":76755},"_42-垃圾回收机制","4.2 垃圾回收机制",[94,76758,76760],{"id":76759},"_421-大体介绍","4.2.1 大体介绍",[14,76762,76763],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,76765,76766],{},[35,76767],{"alt":37,"src":76768},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,76770,76771],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[94,76773,76775],{"id":76774},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,76777,76778],{},"堆栈空间分配区别：",[77,76780,76781,76784],{},[80,76782,76783],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[80,76785,76786],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,76788,76789],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[22008,76791,76793],{"id":76792},"_4221-引用计数","4.2.2.1 引用计数",[14,76795,76796],{},[35,76797],{"alt":37,"src":76798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,76800,76801],{},[35,76802],{"alt":37,"src":76803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,76805,76806],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[22008,76808,76810],{"id":76809},"_4222-标记清除法","4.2.2.2 标记清除法",[14,76812,76813],{},[35,76814],{"alt":37,"src":76815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,76817,76818],{},[35,76819],{"alt":37,"src":76820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,76822,76823],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[65,76825,76827],{"id":76826},"_43-闭包","4.3 闭包",[14,76829,76830],{},[35,76831],{"alt":37,"src":76832},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,76834,76835],{},"闭包：内层函数+外层函数的变量",[14,76837,76838],{},[35,76839],{"alt":37,"src":76840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,76842,76843],{},"closure就是闭包",[14,76845,76846],{},[35,76847],{"alt":37,"src":76848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,76850,76851],{},"内层函数必须包含外层函数的变量才是闭包",[14,76853,76854],{},[35,76855],{"alt":37,"src":76856},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,76858,76859],{},[35,76860],{"alt":37,"src":76861},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,76863,76864],{},"闭包可能会引起内存泄漏",[14,76866,76867],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[65,76869,76871],{"id":76870},"_44-变量提升","4.4 变量提升",[14,76873,76874],{},[35,76875],{"alt":37,"src":76876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,76878,76879],{},[35,76880],{"alt":37,"src":76881},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,76883,76884],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[65,76886,76888],{"id":76887},"_45-函数进阶","4.5 函数进阶",[94,76890,76892],{"id":76891},"_451-函数提升","4.5.1 函数提升",[14,76894,76895],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,76897,76898],{},"只提升函数声明，不提升函数调用",[51824,76900,76901],{},"\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",[94,76903,76905],{"id":76904},"_452-函数参数","4.5.2 函数参数",[22008,76907,76909],{"id":76908},"_4521-动态参数","4.5.2.1 动态参数",[14,76911,76912],{},[35,76913],{"alt":37,"src":76914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,76916,76917],{},[35,76918],{"alt":37,"src":76919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,76921,76922],{},"箭头函数里边没有arguments",[22008,76924,76926],{"id":76925},"_4522-剩余参数","4.5.2.2 剩余参数",[14,76928,76929],{},[35,76930],{"alt":37,"src":76931},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,76933,76934],{},[35,76935],{"alt":37,"src":76936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,76938,76939],{},"剩余参数使用的时候不需要写...",[14,76941,76942],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,76944,76945],{},"  function getSum(a,b,...arr) {",[14,76947,76948],{},"  console.log(11)",[14,76950,76951],{},"  }",[14,76953,76954],{},"  getSum(1,2,3,4)",[14,76956,76957],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,76959,76960],{},"  getSum(1,2)",[14,76962,76963],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,76965,76966],{},[35,76967],{"alt":37,"src":76968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[22008,76970,76972],{"id":76971},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,76974,76975],{},[35,76976],{"alt":37,"src":76977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,76979,76980],{},[35,76981],{"alt":37,"src":76982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,76984,76985],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,76987,76988],{},"展开运算符可以用于数组之间的合并：",[14,76990,76991],{},"const arr1 = [1, 2, 3]",[14,76993,76994],{},"const arr2 = [3, 4, 5]",[14,76996,76997],{},"const arr = [...arr1, ...arr2]",[14,76999,77000],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,77002,77003],{},"剩余参数：函数参数使用，得到真数组",[14,77005,77006],{},"展开运算符：数组中使用，数组展开",[94,77008,77010],{"id":77009},"_453-箭头函数","4.5.3 箭头函数",[22008,77012,77014],{"id":77013},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,77016,77017],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,77019,77020],{},"它不是万能的！！！",[14,77022,77023],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77025,77026],{},[35,77027],{"alt":37,"src":77028},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77030,163],{},[14,77032,77033],{},"① 只有一个形参的时候，可以省略小括号：",[14,77035,77036],{},"const fn=x=>{console.log(x)}",[14,77038,77039],{},"② 只有一行代码时可以省略大括号：",[14,77041,77042],{},"const fn=x=>console.log(11)",[14,77044,77045],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77047,77048],{},"const fn=x=>x+x",[14,77050,77051],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77053,77054],{},"⑤ 阻止表单默认提交：",[14,77056,77057],{},"const form = document.querySelector('form')",[14,77059,77060],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77062,77063],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77065,77066],{},"const fn=uname=>({uname:uname})",[14,77068,77069],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77071,77072],{},[35,77073],{"alt":37,"src":77074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77076,77077],{},[35,77078],{"alt":37,"src":77079},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77081,77082],{},[35,77083],{"alt":37,"src":77084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77086,77087],{},"一定不要忘记用()，有()就理解为自带return",[22008,77089,77091],{"id":77090},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77093,77094],{},"箭头函数是没有动态参数的arguments",[14,77096,77097],{},[35,77098],{"alt":37,"src":77099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[22008,77101,77103],{"id":77102},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77105,11342],{},[77,77107,77108,77111,77114],{},[80,77109,77110],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[80,77112,77113],{},"事件回调函数使用箭头函数时，this 为全局的 window",[80,77115,77116],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77118,77119],{},[35,77120],{"alt":37,"src":77121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[114,77123,77125],{"className":53078,"code":77124,"language":53080,"meta":37,"style":37},"  \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",[120,77126,77127,77135,77140,77145,77150,77155,77160,77164,77169,77173,77177,77182,77187,77192,77196,77200,77205,77210,77215],{"__ignoreMap":37},[123,77128,77129,77131,77133],{"class":125,"line":126},[123,77130,52155],{"class":133},[123,77132,51824],{"class":51311},[123,77134,51318],{"class":133},[123,77136,77137],{"class":125,"line":45},[123,77138,77139],{"class":133},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[123,77141,77142],{"class":125,"line":1189},[123,77143,77144],{"class":133},"    console.log(this) \u002F\u002F指向window\n",[123,77146,77147],{"class":125,"line":1204},[123,77148,77149],{"class":133},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[123,77151,77152],{"class":125,"line":1210},[123,77153,77154],{"class":133},"    function fn() {\n",[123,77156,77157],{"class":125,"line":1224},[123,77158,77159],{"class":133},"      console.log(this)  \u002F\u002F指向window\n",[123,77161,77162],{"class":125,"line":1230},[123,77163,2196],{"class":133},[123,77165,77166],{"class":125,"line":1321},[123,77167,77168],{"class":133},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[123,77170,77171],{"class":125,"line":1327},[123,77172,2409],{"emptyLinePlaceholder":50},[123,77174,77175],{"class":125,"line":1339},[123,77176,71534],{"class":133},[123,77178,77179],{"class":125,"line":1621},[123,77180,77181],{"class":133},"      name: 'andy',\n",[123,77183,77184],{"class":125,"line":1626},[123,77185,77186],{"class":133},"      sayHai: function () {\n",[123,77188,77189],{"class":125,"line":1632},[123,77190,77191],{"class":133},"        console.log(this)\n",[123,77193,77194],{"class":125,"line":1637},[123,77195,52409],{"class":133},[123,77197,77198],{"class":125,"line":1651},[123,77199,2196],{"class":133},[123,77201,77202],{"class":125,"line":1656},[123,77203,77204],{"class":133},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[123,77206,77207],{"class":125,"line":1662},[123,77208,77209],{"class":133},"    \u002F\u002F 2.箭头函数的this\n",[123,77211,77212],{"class":125,"line":1683},[123,77213,77214],{"class":133},"    const fn = () => console.log(this)\n",[123,77216,77217,77219,77221],{"class":125,"line":1688},[123,77218,52428],{"class":133},[123,77220,51824],{"class":51311},[123,77222,51318],{"class":133},[14,77224,77225],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77227,77228],{},"const fn = () => console.log(this)",[14,77230,77231],{},"fn() \u002F\u002F指向window",[14,77233,77234],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77236,77237],{},"①",[14,77239,77240],{},"const obj = {",[14,77242,77243],{},"uname: 'pink老师',",[14,77245,77246],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77248,1080],{},[14,77250,77251],{},"调用对象里边的函数",[14,77253,77254],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77256,77257],{},"obj.sayHai()",[14,77259,77260],{},"②",[14,77262,77263],{},"const obj1 = {",[14,77265,77243],{},[14,77267,77268],{},"sayHai: function () {",[14,77270,77271],{},"let i = 10",[14,77273,77274],{},"const count = () => {",[14,77276,77277],{},"console.log(this)",[14,77279,77280],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77282,77283],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77285,1080],{},[14,77287,77288],{},"count()",[14,77290,1080],{},[14,77292,1080],{},[14,77294,77295],{},"obj1.sayHai()",[65,77297,77299],{"id":77298},"_46-解构赋值","4.6 解构赋值",[94,77301,77303],{"id":77302},"_461-数组解构","4.6.1 数组解构",[14,77305,77306],{},"以前要是使用数组中的值的话：",[14,77308,77309],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77311,77312],{},"const arr=[100,60,80]",[14,77314,77315],{},"const max=arr[0]",[14,77317,77318],{},"const min=arr[1]",[14,77320,77321],{},"const avg=arr[2]",[14,77323,77324],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77326,77327],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77329,77330],{},"这个写法就类似于上边的那种用很多const的方法",[14,77332,77333],{},[35,77334],{"alt":37,"src":77335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[114,77337,77339],{"className":50644,"code":77338,"language":50646,"meta":37,"style":37},"①变量之间交换值:\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",[120,77340,77341,77346,77351,77356,77361,77366,77370,77374,77379,77383,77388,77393,77397,77402,77407,77418,77428,77433,77438,77443,77447,77451],{"__ignoreMap":37},[123,77342,77343],{"class":125,"line":126},[123,77344,77345],{"class":133},"①变量之间交换值:\n",[123,77347,77348],{"class":125,"line":45},[123,77349,77350],{"class":133},"let a=1\n",[123,77352,77353],{"class":125,"line":1189},[123,77354,77355],{"class":133},"let b=2;\n",[123,77357,77358],{"class":125,"line":1204},[123,77359,77360],{"class":133},"必须加这行代码，不然就会报错\n",[123,77362,77363],{"class":125,"line":1210},[123,77364,77365],{"class":133},"[b,a]=[a,b]\n",[123,77367,77368],{"class":125,"line":1224},[123,77369,2409],{"emptyLinePlaceholder":50},[123,77371,77372],{"class":125,"line":1230},[123,77373,2409],{"emptyLinePlaceholder":50},[123,77375,77376],{"class":125,"line":1321},[123,77377,77378],{"class":133},"可以写成下面的方式：\n",[123,77380,77381],{"class":125,"line":1327},[123,77382,77350],{"class":133},[123,77384,77385],{"class":125,"line":1339},[123,77386,77387],{"class":133},"let b=2\n",[123,77389,77390],{"class":125,"line":1621},[123,77391,77392],{"class":133},";[b,a]=[a,b]\n",[123,77394,77395],{"class":125,"line":1626},[123,77396,2409],{"emptyLinePlaceholder":50},[123,77398,77399],{"class":125,"line":1632},[123,77400,77401],{"class":133},"②排序\n",[123,77403,77404],{"class":125,"line":1637},[123,77405,77406],{"class":133},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[123,77408,77409,77412,77415],{"class":125,"line":1651},[123,77410,77411],{"class":133},"for (let i = 0; i ",[123,77413,1044],{"class":77414},"s7hpK",[123,77416,77417],{"class":133}," arr1.length; i++) {\n",[123,77419,77420,77423,77425],{"class":125,"line":1656},[123,77421,77422],{"class":133},"   for (let j = 0; j ",[123,77424,1044],{"class":77414},[123,77426,77427],{"class":133}," arr1.length - 1; j++) {\n",[123,77429,77430],{"class":125,"line":1662},[123,77431,77432],{"class":133},"      if (arr1[j] > arr1[j + 1]) {\n",[123,77434,77435],{"class":125,"line":1683},[123,77436,77437],{"class":133},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[123,77439,77440],{"class":125,"line":1688},[123,77441,77442],{"class":133},"       }\n",[123,77444,77445],{"class":125,"line":1702},[123,77446,4318],{"class":133},[123,77448,77449],{"class":125,"line":1707},[123,77450,1574],{"class":133},[123,77452,77453],{"class":125,"line":1736},[123,77454,77455],{"class":133},"console.log(arr1)\n",[14,77457,77458],{},"数组解构的细节：",[14,77460,77461],{},"①变量多，单元值少",[14,77463,77464],{},[35,77465],{"alt":37,"src":77466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77468,77469],{},"防止出现undefined的方法：",[14,77471,77472],{},"const [a=0,b=0] =[1]",[14,77474,77475],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77477,77478],{},"②变量少，单元值多",[14,77480,77481],{},[35,77482],{"alt":37,"src":77483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77485,77486],{},"此时可以使用剩余参数来接收多余的值",[14,77488,77489],{},"const [a,b,...c]=[1,2,3,4]",[14,77491,77492],{},"console.log(c) 输出[3,4]",[14,77494,77495],{},"③可以按需导入，忽略某些返回值",[14,77497,77498],{},[35,77499],{"alt":37,"src":77500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77502,77503],{},"④支持多维数组的结构",[114,77505,77509],{"className":77506,"code":77507,"language":77508,"meta":37,"style":37},"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",[120,77510,77511,77539,77555,77570,77585],{"__ignoreMap":37},[123,77512,77513,77515,77517,77519,77521,77523,77525,77527,77530,77532,77534,77536],{"class":125,"line":126},[123,77514,6802],{"class":129},[123,77516,51844],{"class":133},[123,77518,179],{"class":129},[123,77520,52237],{"class":133},[123,77522,351],{"class":182},[123,77524,12445],{"class":133},[123,77526,211],{"class":182},[123,77528,77529],{"class":133},", [",[123,77531,205],{"class":182},[123,77533,12445],{"class":133},[123,77535,427],{"class":182},[123,77537,77538],{"class":133},"]]\n",[123,77540,77541,77544,77546,77548,77550,77552],{"class":125,"line":45},[123,77542,77543],{"class":133},"console.",[123,77545,58258],{"class":1972},[123,77547,3860],{"class":133},[123,77549,325],{"class":182},[123,77551,4225],{"class":133},[123,77553,77554],{"class":192},"  \u002F\u002F1\n",[123,77556,77557,77559,77561,77563,77565,77567],{"class":125,"line":1189},[123,77558,77543],{"class":133},[123,77560,58258],{"class":1972},[123,77562,3860],{"class":133},[123,77564,351],{"class":182},[123,77566,4225],{"class":133},[123,77568,77569],{"class":192},"  \u002F\u002F2\n",[123,77571,77572,77574,77576,77578,77580,77582],{"class":125,"line":1204},[123,77573,77543],{"class":133},[123,77575,58258],{"class":1972},[123,77577,3860],{"class":133},[123,77579,211],{"class":182},[123,77581,4225],{"class":133},[123,77583,77584],{"class":192},"  \u002F\u002F[3,4]\n",[123,77586,77587,77589,77591,77593,77595,77597,77599,77601],{"class":125,"line":1210},[123,77588,77543],{"class":133},[123,77590,58258],{"class":1972},[123,77592,3860],{"class":133},[123,77594,211],{"class":182},[123,77596,4910],{"class":133},[123,77598,325],{"class":182},[123,77600,4225],{"class":133},[123,77602,77603],{"class":192},"  \u002F\u002F3\n",[114,77605,77607],{"className":77506,"code":77606,"language":77508,"meta":37,"style":37},"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",[120,77608,77609,77636,77647,77658],{"__ignoreMap":37},[123,77610,77611,77613,77616,77618,77620,77622,77624,77626,77628,77630,77632,77634],{"class":125,"line":126},[123,77612,6802],{"class":129},[123,77614,77615],{"class":133}," [a, b, c] ",[123,77617,179],{"class":129},[123,77619,52237],{"class":133},[123,77621,351],{"class":182},[123,77623,12445],{"class":133},[123,77625,211],{"class":182},[123,77627,77529],{"class":133},[123,77629,205],{"class":182},[123,77631,12445],{"class":133},[123,77633,427],{"class":182},[123,77635,77538],{"class":133},[123,77637,77638,77640,77642,77645],{"class":125,"line":45},[123,77639,77543],{"class":133},[123,77641,58258],{"class":1972},[123,77643,77644],{"class":133},"(a)",[123,77646,77554],{"class":192},[123,77648,77649,77651,77653,77656],{"class":125,"line":1189},[123,77650,77543],{"class":133},[123,77652,58258],{"class":1972},[123,77654,77655],{"class":133},"(b)",[123,77657,77569],{"class":192},[123,77659,77660,77662,77664,77667],{"class":125,"line":1204},[123,77661,77543],{"class":133},[123,77663,58258],{"class":1972},[123,77665,77666],{"class":133},"(c)",[123,77668,77584],{"class":192},[114,77670,77672],{"className":77506,"code":77671,"language":77508,"meta":37,"style":37},"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",[120,77673,77674,77701,77711,77721,77731],{"__ignoreMap":37},[123,77675,77676,77678,77681,77683,77685,77687,77689,77691,77693,77695,77697,77699],{"class":125,"line":126},[123,77677,6802],{"class":129},[123,77679,77680],{"class":133}," [a, b, [c, d]] ",[123,77682,179],{"class":129},[123,77684,52237],{"class":133},[123,77686,351],{"class":182},[123,77688,12445],{"class":133},[123,77690,211],{"class":182},[123,77692,77529],{"class":133},[123,77694,205],{"class":182},[123,77696,12445],{"class":133},[123,77698,427],{"class":182},[123,77700,77538],{"class":133},[123,77702,77703,77705,77707,77709],{"class":125,"line":45},[123,77704,77543],{"class":133},[123,77706,58258],{"class":1972},[123,77708,77644],{"class":133},[123,77710,77554],{"class":192},[123,77712,77713,77715,77717,77719],{"class":125,"line":1189},[123,77714,77543],{"class":133},[123,77716,58258],{"class":1972},[123,77718,77655],{"class":133},[123,77720,77569],{"class":192},[123,77722,77723,77725,77727,77729],{"class":125,"line":1204},[123,77724,77543],{"class":133},[123,77726,58258],{"class":1972},[123,77728,77666],{"class":133},[123,77730,77603],{"class":192},[123,77732,77733,77735,77737,77740],{"class":125,"line":1210},[123,77734,77543],{"class":133},[123,77736,58258],{"class":1972},[123,77738,77739],{"class":133},"(d)",[123,77741,77742],{"class":192},"  \u002F\u002F4\n",[94,77744,77746],{"id":77745},"_462-对象解构","4.6.2 对象解构",[14,77748,77749],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,77751,77752],{},"用的非常非常多！！！！！！",[22008,77754,77756],{"id":77755},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,77758,77759],{},"基本语法：",[77,77761,77762,77765,77768,77771],{},[80,77763,77764],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[80,77766,77767],{},"对象属性的值将被赋值给与属性名相同的变量",[80,77769,77770],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[80,77772,77773],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[114,77775,77777],{"className":50644,"code":77776,"language":50646,"meta":37,"style":37},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[120,77778,77779,77784,77789,77794,77798],{"__ignoreMap":37},[123,77780,77781],{"class":125,"line":126},[123,77782,77783],{"class":133},"const obj = {\n",[123,77785,77786],{"class":125,"line":45},[123,77787,77788],{"class":133},"   uname: 'pink老师',\n",[123,77790,77791],{"class":125,"line":1189},[123,77792,77793],{"class":133},"   age: 18,\n",[123,77795,77796],{"class":125,"line":1204},[123,77797,1574],{"class":133},[123,77799,77800],{"class":125,"line":1210},[123,77801,77802],{"class":133},"const { uname, age } = obj\n",[14,77804,77805],{},"上方代码这样写等价于：",[14,77807,77808],{},"const uname等价于obj.uname",[14,77810,77811],{},"变量名可以重新改名：",[14,77813,77814],{},"const uname='red老师'",[14,77816,77817],{},"const user={",[14,77819,77820],{},"  uname:'pink老师',",[14,77822,77823],{},"  age:18",[14,77825,1080],{},[14,77827,77828],{},"const {uname,age}=user",[14,77830,77831],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,77833,77834],{},"const {旧变量名：新变量名}=对象",[14,77836,77837],{},"const {uname:username,age}=user",[22008,77839,77841],{"id":77840},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,77843,77844],{},[35,77845],{"alt":37,"src":77846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[22008,77848,77850],{"id":77849},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,77852,77853],{},[35,77854],{"alt":37,"src":77855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[114,77857,77859],{"className":53078,"code":77858,"language":53080,"meta":37,"style":37},"  \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",[120,77860,77861,77869,77874,77879,77884,77889,77894,77899,77904,77909,77913,77918,77923],{"__ignoreMap":37},[123,77862,77863,77865,77867],{"class":125,"line":126},[123,77864,52155],{"class":133},[123,77866,51824],{"class":51311},[123,77868,51318],{"class":133},[123,77870,77871],{"class":125,"line":45},[123,77872,77873],{"class":133},"    const pig = {\n",[123,77875,77876],{"class":125,"line":1189},[123,77877,77878],{"class":133},"      name: '佩奇',\n",[123,77880,77881],{"class":125,"line":1204},[123,77882,77883],{"class":133},"      family: {\n",[123,77885,77886],{"class":125,"line":1210},[123,77887,77888],{"class":133},"        mother: '猪妈妈',\n",[123,77890,77891],{"class":125,"line":1224},[123,77892,77893],{"class":133},"        father: '猪爸爸',\n",[123,77895,77896],{"class":125,"line":1230},[123,77897,77898],{"class":133},"        sister: '乔治'\n",[123,77900,77901],{"class":125,"line":1321},[123,77902,77903],{"class":133},"      },\n",[123,77905,77906],{"class":125,"line":1327},[123,77907,77908],{"class":133},"      age: 6\n",[123,77910,77911],{"class":125,"line":1339},[123,77912,2196],{"class":133},[123,77914,77915],{"class":125,"line":1621},[123,77916,77917],{"class":133},"    \u002F\u002F 多级对象解构\n",[123,77919,77920],{"class":125,"line":1626},[123,77921,77922],{"class":133},"    const { name, family: { mother, father, sister }, age } = pig\n",[123,77924,77925,77927,77929],{"class":125,"line":1632},[123,77926,52428],{"class":133},[123,77928,51824],{"class":51311},[123,77930,51318],{"class":133},[14,77932,77933],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[114,77935,77938],{"className":77936,"code":77937,"language":76458,"meta":37,"style":37},"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",[120,77939,77940,77945,77956,77968,77980,77989,77993,78004,78016,78026,78031,78035,78045,78056,78065,78069,78073,78084,78095,78104,78108,78113],{"__ignoreMap":37},[123,77941,77942],{"class":125,"line":126},[123,77943,77944],{"class":192},"    \u002F\u002F 这是后台传递过来的数据\n",[123,77946,77947,77949,77952,77954],{"class":125,"line":45},[123,77948,11231],{"class":129},[123,77950,77951],{"class":133}," msg ",[123,77953,179],{"class":129},[123,77955,15582],{"class":133},[123,77957,77958,77961,77963,77966],{"class":125,"line":1189},[123,77959,77960],{"class":238},"      \"code\"",[123,77962,993],{"class":129},[123,77964,77965],{"class":182}," 200",[123,77967,31477],{"class":133},[123,77969,77970,77973,77975,77978],{"class":125,"line":1204},[123,77971,77972],{"class":238},"      \"msg\"",[123,77974,993],{"class":129},[123,77976,77977],{"class":238}," \"获取新闻列表成功\"",[123,77979,31477],{"class":133},[123,77981,77982,77985,77987],{"class":125,"line":1210},[123,77983,77984],{"class":238},"      \"data\"",[123,77986,993],{"class":129},[123,77988,55458],{"class":133},[123,77990,77991],{"class":125,"line":1224},[123,77992,2519],{"class":133},[123,77994,77995,77998,78000,78002],{"class":125,"line":1230},[123,77996,77997],{"class":238},"          \"id\"",[123,77999,993],{"class":129},[123,78001,25129],{"class":182},[123,78003,31477],{"class":133},[123,78005,78006,78009,78011,78014],{"class":125,"line":1321},[123,78007,78008],{"class":238},"          \"title\"",[123,78010,993],{"class":129},[123,78012,78013],{"class":238}," \"5G商用自己，三大运用商收入下降\"",[123,78015,31477],{"class":133},[123,78017,78018,78021,78023],{"class":125,"line":1327},[123,78019,78020],{"class":238},"          \"count\"",[123,78022,993],{"class":129},[123,78024,78025],{"class":182}," 58\n",[123,78027,78028],{"class":125,"line":1339},[123,78029,78030],{"class":133},"        },\n",[123,78032,78033],{"class":125,"line":1621},[123,78034,2519],{"class":133},[123,78036,78037,78039,78041,78043],{"class":125,"line":1626},[123,78038,77997],{"class":238},[123,78040,993],{"class":129},[123,78042,14765],{"class":182},[123,78044,31477],{"class":133},[123,78046,78047,78049,78051,78054],{"class":125,"line":1632},[123,78048,78008],{"class":238},[123,78050,993],{"class":129},[123,78052,78053],{"class":238}," \"国际媒体头条速览\"",[123,78055,31477],{"class":133},[123,78057,78058,78060,78062],{"class":125,"line":1637},[123,78059,78020],{"class":238},[123,78061,993],{"class":129},[123,78063,78064],{"class":182}," 56\n",[123,78066,78067],{"class":125,"line":1651},[123,78068,78030],{"class":133},[123,78070,78071],{"class":125,"line":1656},[123,78072,2519],{"class":133},[123,78074,78075,78077,78079,78082],{"class":125,"line":1662},[123,78076,77997],{"class":238},[123,78078,993],{"class":129},[123,78080,78081],{"class":182}," 3",[123,78083,31477],{"class":133},[123,78085,78086,78088,78090,78093],{"class":125,"line":1683},[123,78087,78008],{"class":238},[123,78089,993],{"class":129},[123,78091,78092],{"class":238}," \"乌克兰和俄罗斯持续冲突\"",[123,78094,31477],{"class":133},[123,78096,78097,78099,78101],{"class":125,"line":1688},[123,78098,78020],{"class":238},[123,78100,993],{"class":129},[123,78102,78103],{"class":182}," 1669\n",[123,78105,78106],{"class":125,"line":1702},[123,78107,78030],{"class":133},[123,78109,78110],{"class":125,"line":1707},[123,78111,78112],{"class":133},"      ]\n",[123,78114,78115],{"class":125,"line":1736},[123,78116,2196],{"class":133},[14,78118,78119],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78121,78122],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78124,78125],{},"\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,78127,78128],{},"function({data}) {",[14,78130,78131],{},"console.log(data)",[14,78133,1080],{},[14,78135,78136],{},"render(msg)",[14,78138,78139],{},"实参传递给形参的时候解构了",[14,78141,78142],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78144,78145],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78147,78148],{},"function render({data:mydata}) {",[14,78150,78151],{},"  console.log(data)",[14,78153,1080],{},[94,78155,78157],{"id":78156},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78159,78160],{},"有两种情况：一个是数组结构，一个是立即执行函数",[77,78162,78163],{},[80,78164,78165],{},"如果对一个数组进行遍历，有两种方式：",[14,78167,78168],{},"①法1",[14,78170,78171],{},"const arr=[1,2,3]",[14,78173,78174],{},"arr.map(function(item,index) {",[14,78176,78177],{},"  console.log(item)",[14,78179,52475],{},[14,78181,78182],{},[35,78183],{"alt":37,"src":78184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78186,78187],{},"②法2",[14,78189,78190],{},"const str='pink'",[14,78192,78193],{},"[1,2,3].map(function(item,index) {",[14,78195,78196],{},"console.log(item)",[14,78198,52475],{},[14,78200,78201],{},[35,78202],{"alt":37,"src":78203},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78205,78206],{},"此时会报错",[14,78208,78209],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78211,78196],{},[14,78213,52475],{},[14,78215,78216],{},"内部会当成这样处理，所以我们用分号进行隔开",[65,78218,78220],{"id":78219},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78222,78223],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78225,78226],{},"可以理解为加强版的for循环",[14,78228,78229],{},[35,78230],{"alt":37,"src":78231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78233,78234],{},"里边不写return，不返回数组，只遍历不返回",[14,78236,78237],{},"map是返回数组",[14,78239,78240],{},"forEach主要用于遍历数组对象",[114,78242,78244],{"className":53078,"code":78243,"language":53080,"meta":37,"style":37},"  \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",[120,78245,78246,78254,78259,78264,78269,78274,78278,78283],{"__ignoreMap":37},[123,78247,78248,78250,78252],{"class":125,"line":126},[123,78249,52155],{"class":133},[123,78251,51824],{"class":51311},[123,78253,51318],{"class":133},[123,78255,78256],{"class":125,"line":45},[123,78257,78258],{"class":133},"    const arr = ['red', 'green', 'pink']\n",[123,78260,78261],{"class":125,"line":1189},[123,78262,78263],{"class":133},"    const result = arr.forEach(function (item, index) {\n",[123,78265,78266],{"class":125,"line":1204},[123,78267,78268],{"class":133},"      console.log(item)\n",[123,78270,78271],{"class":125,"line":1210},[123,78272,78273],{"class":133},"      console.log(index)\n",[123,78275,78276],{"class":125,"line":1224},[123,78277,33472],{"class":133},[123,78279,78280],{"class":125,"line":1230},[123,78281,78282],{"class":133},"    console.log(result)\n",[123,78284,78285,78287,78289],{"class":125,"line":1321},[123,78286,52428],{"class":133},[123,78288,51824],{"class":51311},[123,78290,51318],{"class":133},[14,78292,78293],{},[35,78294],{"alt":37,"src":78295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[65,78297,78299],{"id":78298},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78301,78302],{},[35,78303],{"alt":37,"src":78304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78306,78307],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[114,78309,78311],{"className":53078,"code":78310,"language":53080,"meta":37,"style":37},"\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",[120,78312,78313,78321,78329,78334,78339,78343,78347,78352,78356,78361,78369],{"__ignoreMap":37},[123,78314,78315,78317,78319],{"class":125,"line":126},[123,78316,1044],{"class":133},[123,78318,51811],{"class":51311},[123,78320,51318],{"class":133},[123,78322,78323,78325,78327],{"class":125,"line":45},[123,78324,52155],{"class":133},[123,78326,51824],{"class":51311},[123,78328,51318],{"class":133},[123,78330,78331],{"class":125,"line":1189},[123,78332,78333],{"class":133},"    const arr = [10, 20, 30]\n",[123,78335,78336],{"class":125,"line":1204},[123,78337,78338],{"class":133},"    const newArr = arr.filter(function (item, index) {\n",[123,78340,78341],{"class":125,"line":1210},[123,78342,78268],{"class":133},[123,78344,78345],{"class":125,"line":1224},[123,78346,78273],{"class":133},[123,78348,78349],{"class":125,"line":1230},[123,78350,78351],{"class":133},"      return item >= 20\n",[123,78353,78354],{"class":125,"line":1321},[123,78355,33472],{"class":133},[123,78357,78358],{"class":125,"line":1327},[123,78359,78360],{"class":133},"    console.log(newArr)\n",[123,78362,78363,78365,78367],{"class":125,"line":1339},[123,78364,52428],{"class":133},[123,78366,51824],{"class":51311},[123,78368,51318],{"class":133},[123,78370,78371,78373,78375],{"class":125,"line":1621},[123,78372,51796],{"class":133},[123,78374,51811],{"class":51311},[123,78376,51318],{"class":133},[14,78378,78379],{},"这个也可以写成箭头函数：",[114,78381,78383],{"className":50644,"code":78382,"language":50646,"meta":37,"style":37},"const newArr = arr.filter(item => item >= 20)\n",[120,78384,78385],{"__ignoreMap":37},[123,78386,78387],{"class":125,"line":126},[123,78388,78382],{"class":133},[65,78390,78392],{"id":78391},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78394,78395],{},[35,78396],{"alt":37,"src":78397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78399,78400],{},"步骤：",[14,78402,78403],{},"①：渲染页面模块",[1141,78405,78406,78409],{},[80,78407,78408],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[80,78410,78411],{},"用forEach+字符串的形式",[14,78413,78414],{},"②：点击不同需求，显示不同页面内容",[1141,78416,78417,78420,78423,78426,78429],{},[80,78418,78419],{},"点击采取事件委托方式 .filter",[80,78421,78422],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[80,78424,78425],{},"筛选条件是根据点击的 data-index 来判断",[80,78427,78428],{},"可以使用对象解构，把事件对象解构",[80,78430,78431],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[114,78433,78435],{"className":50644,"code":78434,"language":50646,"meta":37,"style":37},"\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",[120,78436,78437,78447,78461,78465,78473,78487,78507,78519,78527,78533,78543,78553,78563,78567,78571,78577,78590,78602,78612,78624,78628,78632,78639,78652,78664,78681,78699,78712,78716,78720,78732,78742,78746,78750,78757,78798,78825,78835,78839,78843,78851,78863,78867,78871,78879,78891,78903,78914,78918,78922,78931,78943,78954,78958,78962,78971,78983,78995,78999,79003,79010,79020,79032,79044,79059,79063,79067,79075,79091,79101,79111,79121,79133,79137,79141,79151,79162,79172,79176,79184,79192,79196,79204,79219,79245,79270,79295,79314,79322,79336,79341,79346,79351,79356,79361,79369,79377,79382,79393,79398,79408,79418,79428,79438,79442,79446,79455,79464,79473,79482,79486,79490,79499,79508,79517,79526,79530,79534,79543,79552,79561,79570,79574,79578,79587,79596,79605,79614,79618,79622,79631,79640,79649,79658,79662,79666,79675,79684,79693,79702,79706,79710,79719,79728,79736,79745,79749,79753,79757,79762,79774,79779,79791,79795,79812,79840,79849,79854,79864,79874,79883,79888,79893,79897,79902,79919,79923,79928,79936,79941,79968,79973,79993,79998,80010,80015,80020,80025,80036,80050,80087,80105,80138,80155,80179,80183,80188,80194,80198,80202,80206,80214,80222,80226],{"__ignoreMap":37},[123,78438,78439,78441,78443,78445],{"class":125,"line":126},[123,78440,51308],{"class":133},[123,78442,51312],{"class":51311},[123,78444,51315],{"class":1972},[123,78446,51318],{"class":133},[123,78448,78449,78451,78453,78455,78457,78459],{"class":125,"line":45},[123,78450,1044],{"class":133},[123,78452,50646],{"class":51311},[123,78454,51327],{"class":1972},[123,78456,179],{"class":133},[123,78458,51332],{"class":238},[123,78460,51318],{"class":133},[123,78462,78463],{"class":125,"line":1189},[123,78464,2409],{"emptyLinePlaceholder":50},[123,78466,78467,78469,78471],{"class":125,"line":1204},[123,78468,1044],{"class":133},[123,78470,51345],{"class":51311},[123,78472,51318],{"class":133},[123,78474,78475,78477,78479,78481,78483,78485],{"class":125,"line":1210},[123,78476,52155],{"class":133},[123,78478,51355],{"class":51311},[123,78480,51358],{"class":1972},[123,78482,179],{"class":133},[123,78484,51363],{"class":238},[123,78486,51318],{"class":133},[123,78488,78489,78491,78493,78495,78497,78499,78501,78503,78505],{"class":125,"line":1224},[123,78490,52155],{"class":133},[123,78492,51355],{"class":51311},[123,78494,14930],{"class":1972},[123,78496,179],{"class":133},[123,78498,51402],{"class":238},[123,78500,51382],{"class":1972},[123,78502,179],{"class":133},[123,78504,51409],{"class":238},[123,78506,51318],{"class":133},[123,78508,78509,78511,78513,78515,78517],{"class":125,"line":1230},[123,78510,52155],{"class":133},[123,78512,51418],{"class":51311},[123,78514,51421],{"class":133},[123,78516,51418],{"class":51311},[123,78518,51318],{"class":133},[123,78520,78521,78523,78525],{"class":125,"line":1321},[123,78522,52155],{"class":133},[123,78524,5136],{"class":51311},[123,78526,51318],{"class":133},[123,78528,78529,78531],{"class":125,"line":1327},[123,78530,6413],{"class":51311},[123,78532,15582],{"class":133},[123,78534,78535,78537,78539,78541],{"class":125,"line":1339},[123,78536,54706],{"class":182},[123,78538,51448],{"class":133},[123,78540,325],{"class":182},[123,78542,1300],{"class":133},[123,78544,78545,78547,78549,78551],{"class":125,"line":1621},[123,78546,54717],{"class":182},[123,78548,51448],{"class":133},[123,78550,325],{"class":182},[123,78552,1300],{"class":133},[123,78554,78555,78557,78559,78561],{"class":125,"line":1626},[123,78556,72607],{"class":182},[123,78558,51448],{"class":133},[123,78560,60516],{"class":182},[123,78562,1300],{"class":133},[123,78564,78565],{"class":125,"line":1632},[123,78566,2196],{"class":133},[123,78568,78569],{"class":125,"line":1637},[123,78570,2409],{"emptyLinePlaceholder":50},[123,78572,78573,78575],{"class":125,"line":1651},[123,78574,62134],{"class":1972},[123,78576,15582],{"class":133},[123,78578,78579,78581,78583,78586,78588],{"class":125,"line":1656},[123,78580,54782],{"class":182},[123,78582,51448],{"class":133},[123,78584,78585],{"class":182},"990",[123,78587,51503],{"class":129},[123,78589,1300],{"class":133},[123,78591,78592,78594,78596,78598,78600],{"class":125,"line":1662},[123,78593,54717],{"class":182},[123,78595,51448],{"class":133},[123,78597,325],{"class":182},[123,78599,51567],{"class":182},[123,78601,1300],{"class":133},[123,78603,78604,78606,78608,78610],{"class":125,"line":1683},[123,78605,55020],{"class":182},[123,78607,51448],{"class":133},[123,78609,51488],{"class":182},[123,78611,1300],{"class":133},[123,78613,78614,78617,78619,78622],{"class":125,"line":1688},[123,78615,78616],{"class":182},"      flex-wrap",[123,78618,51448],{"class":133},[123,78620,78621],{"class":182},"wrap",[123,78623,1300],{"class":133},[123,78625,78626],{"class":125,"line":1702},[123,78627,2196],{"class":133},[123,78629,78630],{"class":125,"line":1707},[123,78631,2409],{"emptyLinePlaceholder":50},[123,78633,78634,78637],{"class":125,"line":1736},[123,78635,78636],{"class":1972},"    .item",[123,78638,15582],{"class":133},[123,78640,78641,78643,78645,78648,78650],{"class":125,"line":1741},[123,78642,54782],{"class":182},[123,78644,51448],{"class":133},[123,78646,78647],{"class":182},"240",[123,78649,51503],{"class":129},[123,78651,1300],{"class":133},[123,78653,78654,78656,78658,78660,78662],{"class":125,"line":1758},[123,78655,62011],{"class":182},[123,78657,51448],{"class":133},[123,78659,580],{"class":182},[123,78661,51503],{"class":129},[123,78663,1300],{"class":133},[123,78665,78666,78668,78670,78672,78674,78677,78679],{"class":125,"line":1763},[123,78667,54706],{"class":182},[123,78669,51448],{"class":133},[123,78671,834],{"class":182},[123,78673,51503],{"class":129},[123,78675,78676],{"class":182}," 30",[123,78678,51503],{"class":129},[123,78680,1300],{"class":133},[123,78682,78683,78685,78687,78689,78692,78695,78697],{"class":125,"line":1768},[123,78684,61871],{"class":182},[123,78686,51448],{"class":133},[123,78688,28132],{"class":182},[123,78690,78691],{"class":182}," ease",[123,78693,78694],{"class":182}," .5",[123,78696,829],{"class":129},[123,78698,1300],{"class":133},[123,78700,78701,78704,78706,78708,78710],{"class":125,"line":1773},[123,78702,78703],{"class":182},"      margin-bottom",[123,78705,51448],{"class":133},[123,78707,834],{"class":182},[123,78709,51503],{"class":129},[123,78711,1300],{"class":133},[123,78713,78714],{"class":125,"line":1787},[123,78715,2196],{"class":133},[123,78717,78718],{"class":125,"line":1792},[123,78719,2409],{"emptyLinePlaceholder":50},[123,78721,78722,78725,78727,78730],{"class":125,"line":2586},[123,78723,78724],{"class":1972},"    .item:nth-child",[123,78726,134],{"class":133},[123,78728,78729],{"class":182},"4n",[123,78731,12452],{"class":133},[123,78733,78734,78736,78738,78740],{"class":125,"line":2600},[123,78735,62011],{"class":182},[123,78737,51448],{"class":133},[123,78739,325],{"class":182},[123,78741,1300],{"class":133},[123,78743,78744],{"class":125,"line":2608},[123,78745,2196],{"class":133},[123,78747,78748],{"class":125,"line":2613},[123,78749,2409],{"emptyLinePlaceholder":50},[123,78751,78752,78755],{"class":125,"line":2619},[123,78753,78754],{"class":1972},"    .item:hover",[123,78756,15582],{"class":133},[123,78758,78759,78762,78764,78766,78768,78770,78772,78774,78776,78779,78781,78783,78785,78787,78789,78791,78793,78796],{"class":125,"line":2625},[123,78760,78761],{"class":182},"      box-shadow",[123,78763,51448],{"class":133},[123,78765,325],{"class":182},[123,78767,51503],{"class":129},[123,78769,4102],{"class":182},[123,78771,51503],{"class":129},[123,78773,2157],{"class":182},[123,78775,51503],{"class":129},[123,78777,78778],{"class":182}," rgba",[123,78780,134],{"class":133},[123,78782,325],{"class":182},[123,78784,12445],{"class":133},[123,78786,325],{"class":182},[123,78788,12445],{"class":133},[123,78790,325],{"class":182},[123,78792,12445],{"class":133},[123,78794,78795],{"class":182},".2",[123,78797,2728],{"class":133},[123,78799,78800,78803,78805,78808,78810,78812,78814,78817,78819,78821,78823],{"class":125,"line":2630},[123,78801,78802],{"class":182},"      transform",[123,78804,51448],{"class":133},[123,78806,78807],{"class":182},"translate3d",[123,78809,134],{"class":133},[123,78811,325],{"class":182},[123,78813,12445],{"class":133},[123,78815,78816],{"class":182},"-4",[123,78818,51503],{"class":129},[123,78820,12445],{"class":133},[123,78822,325],{"class":182},[123,78824,2728],{"class":133},[123,78826,78827,78829,78831,78833],{"class":125,"line":7958},[123,78828,62036],{"class":182},[123,78830,51448],{"class":133},[123,78832,62041],{"class":182},[123,78834,1300],{"class":133},[123,78836,78837],{"class":125,"line":7982},[123,78838,2196],{"class":133},[123,78840,78841],{"class":125,"line":7987},[123,78842,2409],{"emptyLinePlaceholder":50},[123,78844,78845,78847,78849],{"class":125,"line":7993},[123,78846,78636],{"class":1972},[123,78848,55626],{"class":51311},[123,78850,15582],{"class":133},[123,78852,78853,78855,78857,78859,78861],{"class":125,"line":8020},[123,78854,54782],{"class":182},[123,78856,51448],{"class":133},[123,78858,445],{"class":182},[123,78860,462],{"class":129},[123,78862,1300],{"class":133},[123,78864,78865],{"class":125,"line":8025},[123,78866,2196],{"class":133},[123,78868,78869],{"class":125,"line":8031},[123,78870,2409],{"emptyLinePlaceholder":50},[123,78872,78873,78875,78877],{"class":125,"line":8043},[123,78874,78636],{"class":1972},[123,78876,62315],{"class":1972},[123,78878,15582],{"class":133},[123,78880,78881,78883,78885,78887,78889],{"class":125,"line":8055},[123,78882,54933],{"class":182},[123,78884,51448],{"class":133},[123,78886,784],{"class":182},[123,78888,51503],{"class":129},[123,78890,1300],{"class":133},[123,78892,78893,78895,78897,78899,78901],{"class":125,"line":8067},[123,78894,78703],{"class":182},[123,78896,51448],{"class":133},[123,78898,580],{"class":182},[123,78900,51503],{"class":129},[123,78902,1300],{"class":133},[123,78904,78905,78907,78909,78912],{"class":125,"line":9726},[123,78906,57427],{"class":182},[123,78908,51448],{"class":133},[123,78910,78911],{"class":182},"#666",[123,78913,1300],{"class":133},[123,78915,78916],{"class":125,"line":9751},[123,78917,2196],{"class":133},[123,78919,78920],{"class":125,"line":9774},[123,78921,2409],{"emptyLinePlaceholder":50},[123,78923,78924,78926,78929],{"class":125,"line":9798},[123,78925,78636],{"class":1972},[123,78927,78928],{"class":1972}," .price",[123,78930,15582],{"class":133},[123,78932,78933,78935,78937,78939,78941],{"class":125,"line":9803},[123,78934,54933],{"class":182},[123,78936,51448],{"class":133},[123,78938,884],{"class":182},[123,78940,51503],{"class":129},[123,78942,1300],{"class":133},[123,78944,78945,78947,78949,78952],{"class":125,"line":9808},[123,78946,57427],{"class":182},[123,78948,51448],{"class":133},[123,78950,78951],{"class":182},"firebrick",[123,78953,1300],{"class":133},[123,78955,78956],{"class":125,"line":9813},[123,78957,2196],{"class":133},[123,78959,78960],{"class":125,"line":9822},[123,78961,2409],{"emptyLinePlaceholder":50},[123,78963,78964,78966,78969],{"class":125,"line":9827},[123,78965,78636],{"class":1972},[123,78967,78968],{"class":1972}," .price::before",[123,78970,15582],{"class":133},[123,78972,78973,78976,78978,78981],{"class":125,"line":9833},[123,78974,78975],{"class":182},"      content",[123,78977,51448],{"class":133},[123,78979,78980],{"class":238},"'￥'",[123,78982,1300],{"class":133},[123,78984,78985,78987,78989,78991,78993],{"class":125,"line":9854},[123,78986,54933],{"class":182},[123,78988,51448],{"class":133},[123,78990,683],{"class":182},[123,78992,51503],{"class":129},[123,78994,1300],{"class":133},[123,78996,78997],{"class":125,"line":9860},[123,78998,2196],{"class":133},[123,79000,79001],{"class":125,"line":9874},[123,79002,2409],{"emptyLinePlaceholder":50},[123,79004,79005,79008],{"class":125,"line":9880},[123,79006,79007],{"class":1972},"    .filter",[123,79009,15582],{"class":133},[123,79011,79012,79014,79016,79018],{"class":125,"line":9907},[123,79013,55020],{"class":182},[123,79015,51448],{"class":133},[123,79017,51488],{"class":182},[123,79019,1300],{"class":133},[123,79021,79022,79024,79026,79028,79030],{"class":125,"line":9916},[123,79023,54782],{"class":182},[123,79025,51448],{"class":133},[123,79027,78585],{"class":182},[123,79029,51503],{"class":129},[123,79031,1300],{"class":133},[123,79033,79034,79036,79038,79040,79042],{"class":125,"line":9922},[123,79035,54717],{"class":182},[123,79037,51448],{"class":133},[123,79039,325],{"class":182},[123,79041,51567],{"class":182},[123,79043,1300],{"class":133},[123,79045,79046,79048,79050,79052,79054,79056],{"class":125,"line":9930},[123,79047,54706],{"class":182},[123,79049,51448],{"class":133},[123,79051,790],{"class":182},[123,79053,51503],{"class":129},[123,79055,78676],{"class":182},[123,79057,79058],{"class":129},"px\n",[123,79060,79061],{"class":125,"line":9935},[123,79062,2196],{"class":133},[123,79064,79065],{"class":125,"line":16614},[123,79066,2409],{"emptyLinePlaceholder":50},[123,79068,79069,79071,79073],{"class":125,"line":16620},[123,79070,79007],{"class":1972},[123,79072,1408],{"class":51311},[123,79074,15582],{"class":133},[123,79076,79077,79079,79081,79083,79085,79087,79089],{"class":125,"line":16643},[123,79078,54706],{"class":182},[123,79080,51448],{"class":133},[123,79082,580],{"class":182},[123,79084,51503],{"class":129},[123,79086,8960],{"class":182},[123,79088,51503],{"class":129},[123,79090,1300],{"class":133},[123,79092,79093,79095,79097,79099],{"class":125,"line":16649},[123,79094,61732],{"class":182},[123,79096,51448],{"class":133},[123,79098,61829],{"class":182},[123,79100,1300],{"class":133},[123,79102,79103,79105,79107,79109],{"class":125,"line":16672},[123,79104,57427],{"class":182},[123,79106,51448],{"class":133},[123,79108,78911],{"class":182},[123,79110,1300],{"class":133},[123,79112,79113,79115,79117,79119],{"class":125,"line":16686},[123,79114,63981],{"class":182},[123,79116,51448],{"class":133},[123,79118,54748],{"class":182},[123,79120,1300],{"class":133},[123,79122,79123,79125,79127,79129,79131],{"class":125,"line":16706},[123,79124,61761],{"class":182},[123,79126,51448],{"class":133},[123,79128,834],{"class":182},[123,79130,51503],{"class":129},[123,79132,1300],{"class":133},[123,79134,79135],{"class":125,"line":16712},[123,79136,2196],{"class":133},[123,79138,79139],{"class":125,"line":16723},[123,79140,2409],{"emptyLinePlaceholder":50},[123,79142,79143,79145,79147,79149],{"class":125,"line":16746},[123,79144,79007],{"class":1972},[123,79146,1408],{"class":51311},[123,79148,61911],{"class":1972},[123,79150,15582],{"class":133},[123,79152,79153,79155,79157,79160],{"class":125,"line":16768},[123,79154,54895],{"class":182},[123,79156,51448],{"class":133},[123,79158,79159],{"class":182},"#05943c",[123,79161,1300],{"class":133},[123,79163,79164,79166,79168,79170],{"class":125,"line":16773},[123,79165,57427],{"class":182},[123,79167,51448],{"class":133},[123,79169,60853],{"class":182},[123,79171,1300],{"class":133},[123,79173,79174],{"class":125,"line":16779},[123,79175,2196],{"class":133},[123,79177,79178,79180,79182],{"class":125,"line":16793},[123,79179,52428],{"class":133},[123,79181,5136],{"class":51311},[123,79183,51318],{"class":133},[123,79185,79186,79188,79190],{"class":125,"line":16806},[123,79187,51796],{"class":133},[123,79189,51345],{"class":51311},[123,79191,51318],{"class":133},[123,79193,79194],{"class":125,"line":16811},[123,79195,2409],{"emptyLinePlaceholder":50},[123,79197,79198,79200,79202],{"class":125,"line":16825},[123,79199,1044],{"class":133},[123,79201,51811],{"class":51311},[123,79203,51318],{"class":133},[123,79205,79206,79208,79210,79212,79214,79217],{"class":125,"line":16830},[123,79207,52155],{"class":133},[123,79209,51622],{"class":51311},[123,79211,53497],{"class":1972},[123,79213,179],{"class":133},[123,79215,79216],{"class":238},"\"filter\"",[123,79218,51318],{"class":133},[123,79220,79221,79223,79225,79227,79229,79231,79234,79236,79238,79241,79243],{"class":125,"line":16836},[123,79222,51352],{"class":133},[123,79224,372],{"class":51311},[123,79226,61068],{"class":1972},[123,79228,179],{"class":133},[123,79230,61073],{"class":238},[123,79232,79233],{"class":1972}," data-index",[123,79235,179],{"class":133},[123,79237,3687],{"class":238},[123,79239,79240],{"class":133},">0-100元\u003C\u002F",[123,79242,372],{"class":51311},[123,79244,51318],{"class":133},[123,79246,79247,79249,79251,79253,79255,79257,79259,79261,79263,79266,79268],{"class":125,"line":16841},[123,79248,51352],{"class":133},[123,79250,372],{"class":51311},[123,79252,61068],{"class":1972},[123,79254,179],{"class":133},[123,79256,61073],{"class":238},[123,79258,79233],{"class":1972},[123,79260,179],{"class":133},[123,79262,3710],{"class":238},[123,79264,79265],{"class":133},">100-300元\u003C\u002F",[123,79267,372],{"class":51311},[123,79269,51318],{"class":133},[123,79271,79272,79274,79276,79278,79280,79282,79284,79286,79288,79291,79293],{"class":125,"line":16855},[123,79273,51352],{"class":133},[123,79275,372],{"class":51311},[123,79277,61068],{"class":1972},[123,79279,179],{"class":133},[123,79281,61073],{"class":238},[123,79283,79233],{"class":1972},[123,79285,179],{"class":133},[123,79287,3723],{"class":238},[123,79289,79290],{"class":133},">300元以上\u003C\u002F",[123,79292,372],{"class":51311},[123,79294,51318],{"class":133},[123,79296,79297,79299,79301,79303,79305,79307,79310,79312],{"class":125,"line":16860},[123,79298,51352],{"class":133},[123,79300,372],{"class":51311},[123,79302,61068],{"class":1972},[123,79304,179],{"class":133},[123,79306,61073],{"class":238},[123,79308,79309],{"class":133},">全部区间\u003C\u002F",[123,79311,372],{"class":51311},[123,79313,51318],{"class":133},[123,79315,79316,79318,79320],{"class":125,"line":16865},[123,79317,52428],{"class":133},[123,79319,51622],{"class":51311},[123,79321,51318],{"class":133},[123,79323,79324,79326,79328,79330,79332,79334],{"class":125,"line":16879},[123,79325,52155],{"class":133},[123,79327,51622],{"class":51311},[123,79329,53497],{"class":1972},[123,79331,179],{"class":133},[123,79333,62619],{"class":238},[123,79335,51318],{"class":133},[123,79337,79338],{"class":125,"line":16891},[123,79339,79340],{"class":192},"    \u003C!-- \u003Cdiv class=\"item\">\n",[123,79342,79343],{"class":125,"line":16896},[123,79344,79345],{"class":192},"      \u003Cimg src=\"\" alt=\"\">\n",[123,79347,79348],{"class":125,"line":16909},[123,79349,79350],{"class":192},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[123,79352,79353],{"class":125,"line":16914},[123,79354,79355],{"class":192},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[123,79357,79358],{"class":125,"line":16919},[123,79359,79360],{"class":192},"    \u003C\u002Fdiv> -->\n",[123,79362,79363,79365,79367],{"class":125,"line":16924},[123,79364,52428],{"class":133},[123,79366,51622],{"class":51311},[123,79368,51318],{"class":133},[123,79370,79371,79373,79375],{"class":125,"line":16937},[123,79372,52155],{"class":133},[123,79374,51824],{"class":51311},[123,79376,51318],{"class":133},[123,79378,79379],{"class":125,"line":16942},[123,79380,79381],{"class":192},"    \u002F\u002F 2. 初始化数据\n",[123,79383,79384,79386,79389,79391],{"class":125,"line":32644},[123,79385,11231],{"class":129},[123,79387,79388],{"class":182}," goodsList",[123,79390,13574],{"class":129},[123,79392,55458],{"class":133},[123,79394,79395],{"class":125,"line":32650},[123,79396,79397],{"class":133},"      {\n",[123,79399,79400,79403,79406],{"class":125,"line":32656},[123,79401,79402],{"class":133},"        id: ",[123,79404,79405],{"class":238},"'4001172'",[123,79407,31477],{"class":133},[123,79409,79410,79413,79416],{"class":125,"line":32662},[123,79411,79412],{"class":133},"        name: ",[123,79414,79415],{"class":238},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[123,79417,31477],{"class":133},[123,79419,79420,79423,79426],{"class":125,"line":32668},[123,79421,79422],{"class":133},"        price: ",[123,79424,79425],{"class":238},"'289.00'",[123,79427,31477],{"class":133},[123,79429,79430,79433,79436],{"class":125,"line":32679},[123,79431,79432],{"class":133},"        picture: ",[123,79434,79435],{"class":238},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[123,79437,31477],{"class":133},[123,79439,79440],{"class":125,"line":32685},[123,79441,77903],{"class":133},[123,79443,79444],{"class":125,"line":32705},[123,79445,79397],{"class":133},[123,79447,79448,79450,79453],{"class":125,"line":32711},[123,79449,79402],{"class":133},[123,79451,79452],{"class":238},"'4001594'",[123,79454,31477],{"class":133},[123,79456,79457,79459,79462],{"class":125,"line":32722},[123,79458,79412],{"class":133},[123,79460,79461],{"class":238},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[123,79463,31477],{"class":133},[123,79465,79466,79468,79471],{"class":125,"line":32728},[123,79467,79422],{"class":133},[123,79469,79470],{"class":238},"'288.00'",[123,79472,31477],{"class":133},[123,79474,79475,79477,79480],{"class":125,"line":32734},[123,79476,79432],{"class":133},[123,79478,79479],{"class":238},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[123,79481,31477],{"class":133},[123,79483,79484],{"class":125,"line":32740},[123,79485,77903],{"class":133},[123,79487,79488],{"class":125,"line":32746},[123,79489,79397],{"class":133},[123,79491,79492,79494,79497],{"class":125,"line":32752},[123,79493,79402],{"class":133},[123,79495,79496],{"class":238},"'4001009'",[123,79498,31477],{"class":133},[123,79500,79501,79503,79506],{"class":125,"line":32758},[123,79502,79412],{"class":133},[123,79504,79505],{"class":238},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[123,79507,31477],{"class":133},[123,79509,79510,79512,79515],{"class":125,"line":32764},[123,79511,79422],{"class":133},[123,79513,79514],{"class":238},"'109.00'",[123,79516,31477],{"class":133},[123,79518,79519,79521,79524],{"class":125,"line":32784},[123,79520,79432],{"class":133},[123,79522,79523],{"class":238},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[123,79525,31477],{"class":133},[123,79527,79528],{"class":125,"line":32790},[123,79529,77903],{"class":133},[123,79531,79532],{"class":125,"line":32806},[123,79533,79397],{"class":133},[123,79535,79536,79538,79541],{"class":125,"line":32812},[123,79537,79402],{"class":133},[123,79539,79540],{"class":238},"'4001874'",[123,79542,31477],{"class":133},[123,79544,79545,79547,79550],{"class":125,"line":32826},[123,79546,79412],{"class":133},[123,79548,79549],{"class":238},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[123,79551,31477],{"class":133},[123,79553,79554,79556,79559],{"class":125,"line":32832},[123,79555,79422],{"class":133},[123,79557,79558],{"class":238},"'488.00'",[123,79560,31477],{"class":133},[123,79562,79563,79565,79568],{"class":125,"line":32847},[123,79564,79432],{"class":133},[123,79566,79567],{"class":238},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[123,79569,31477],{"class":133},[123,79571,79572],{"class":125,"line":32853},[123,79573,77903],{"class":133},[123,79575,79576],{"class":125,"line":32862},[123,79577,79397],{"class":133},[123,79579,79580,79582,79585],{"class":125,"line":32868},[123,79581,79402],{"class":133},[123,79583,79584],{"class":238},"'4001649'",[123,79586,31477],{"class":133},[123,79588,79589,79591,79594],{"class":125,"line":32877},[123,79590,79412],{"class":133},[123,79592,79593],{"class":238},"'大师监制龙泉青瓷茶叶罐'",[123,79595,31477],{"class":133},[123,79597,79598,79600,79603],{"class":125,"line":32883},[123,79599,79422],{"class":133},[123,79601,79602],{"class":238},"'139.00'",[123,79604,31477],{"class":133},[123,79606,79607,79609,79612],{"class":125,"line":32889},[123,79608,79432],{"class":133},[123,79610,79611],{"class":238},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[123,79613,31477],{"class":133},[123,79615,79616],{"class":125,"line":32898},[123,79617,77903],{"class":133},[123,79619,79620],{"class":125,"line":32904},[123,79621,79397],{"class":133},[123,79623,79624,79626,79629],{"class":125,"line":32915},[123,79625,79402],{"class":133},[123,79627,79628],{"class":238},"'3997185'",[123,79630,31477],{"class":133},[123,79632,79633,79635,79638],{"class":125,"line":32921},[123,79634,79412],{"class":133},[123,79636,79637],{"class":238},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[123,79639,31477],{"class":133},[123,79641,79642,79644,79647],{"class":125,"line":32940},[123,79643,79422],{"class":133},[123,79645,79646],{"class":238},"'108.00'",[123,79648,31477],{"class":133},[123,79650,79651,79653,79656],{"class":125,"line":32946},[123,79652,79432],{"class":133},[123,79654,79655],{"class":238},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[123,79657,31477],{"class":133},[123,79659,79660],{"class":125,"line":32957},[123,79661,77903],{"class":133},[123,79663,79664],{"class":125,"line":32963},[123,79665,79397],{"class":133},[123,79667,79668,79670,79673],{"class":125,"line":32983},[123,79669,79402],{"class":133},[123,79671,79672],{"class":238},"'3997403'",[123,79674,31477],{"class":133},[123,79676,79677,79679,79682],{"class":125,"line":32999},[123,79678,79412],{"class":133},[123,79680,79681],{"class":238},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[123,79683,31477],{"class":133},[123,79685,79686,79688,79691],{"class":125,"line":33005},[123,79687,79422],{"class":133},[123,79689,79690],{"class":238},"'100.00'",[123,79692,31477],{"class":133},[123,79694,79695,79697,79700],{"class":125,"line":33019},[123,79696,79432],{"class":133},[123,79698,79699],{"class":238},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[123,79701,31477],{"class":133},[123,79703,79704],{"class":125,"line":33025},[123,79705,77903],{"class":133},[123,79707,79708],{"class":125,"line":33031},[123,79709,79397],{"class":133},[123,79711,79712,79714,79717],{"class":125,"line":33042},[123,79713,79402],{"class":133},[123,79715,79716],{"class":238},"'3998274'",[123,79718,31477],{"class":133},[123,79720,79721,79723,79726],{"class":125,"line":33048},[123,79722,79412],{"class":133},[123,79724,79725],{"class":238},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[123,79727,31477],{"class":133},[123,79729,79730,79732,79734],{"class":125,"line":33054},[123,79731,79422],{"class":133},[123,79733,79602],{"class":238},[123,79735,31477],{"class":133},[123,79737,79738,79740,79743],{"class":125,"line":33064},[123,79739,79432],{"class":133},[123,79741,79742],{"class":238},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[123,79744,31477],{"class":133},[123,79746,79747],{"class":125,"line":33070},[123,79748,77903],{"class":133},[123,79750,79751],{"class":125,"line":33081},[123,79752,53120],{"class":133},[123,79754,79755],{"class":125,"line":33087},[123,79756,2409],{"emptyLinePlaceholder":50},[123,79758,79759],{"class":125,"line":33097},[123,79760,79761],{"class":192},"    \u002F\u002F 1.渲染函数\n",[123,79763,79764,79766,79768,79770,79772],{"class":125,"line":33102},[123,79765,70095],{"class":129},[123,79767,70098],{"class":1972},[123,79769,134],{"class":133},[123,79771,3889],{"class":5226},[123,79773,12452],{"class":133},[123,79775,79776],{"class":125,"line":33108},[123,79777,79778],{"class":192},"      \u002F\u002F 声明空字符串\n",[123,79780,79781,79784,79787,79789],{"class":125,"line":33157},[123,79782,79783],{"class":129},"      let",[123,79785,79786],{"class":133}," str ",[123,79788,179],{"class":129},[123,79790,70115],{"class":238},[123,79792,79793],{"class":125,"line":33204},[123,79794,70120],{"class":192},[123,79796,79797,79799,79802,79804,79807,79810],{"class":125,"line":33209},[123,79798,58018],{"class":133},[123,79800,79801],{"class":1972},"forEach",[123,79803,134],{"class":133},[123,79805,79806],{"class":5226},"item",[123,79808,79809],{"class":129}," =>",[123,79811,15582],{"class":133},[123,79813,79814,79816,79819,79822,79824,79827,79829,79832,79835,79837],{"class":125,"line":33215},[123,79815,61281],{"class":129},[123,79817,79818],{"class":133}," { ",[123,79820,79821],{"class":182},"name",[123,79823,12445],{"class":133},[123,79825,79826],{"class":182},"price",[123,79828,12445],{"class":133},[123,79830,79831],{"class":182},"picture",[123,79833,79834],{"class":133}," } ",[123,79836,179],{"class":129},[123,79838,79839],{"class":133}," item\n",[123,79841,79842,79845,79847],{"class":125,"line":33234},[123,79843,79844],{"class":133},"        str ",[123,79846,9487],{"class":129},[123,79848,70179],{"class":238},[123,79850,79851],{"class":125,"line":33240},[123,79852,79853],{"class":238},"          \u003Cdiv class=\"item\">\n",[123,79855,79856,79859,79861],{"class":125,"line":33260},[123,79857,79858],{"class":238},"            \u003Cimg src=\"${",[123,79860,79831],{"class":133},[123,79862,79863],{"class":238},"}\" alt=\"\">\n",[123,79865,79866,79869,79871],{"class":125,"line":33266},[123,79867,79868],{"class":238},"            \u003Cp class=\"name\">${",[123,79870,79821],{"class":133},[123,79872,79873],{"class":238},"}\u003C\u002Fp>\n",[123,79875,79876,79879,79881],{"class":125,"line":33272},[123,79877,79878],{"class":238},"            \u003Cp class=\"price\">${",[123,79880,79826],{"class":133},[123,79882,79873],{"class":238},[123,79884,79885],{"class":125,"line":33282},[123,79886,79887],{"class":238},"          \u003C\u002Fdiv>\n",[123,79889,79890],{"class":125,"line":33287},[123,79891,79892],{"class":238},"        `\n",[123,79894,79895],{"class":125,"line":33293},[123,79896,64826],{"class":133},[123,79898,79899],{"class":125,"line":33309},[123,79900,79901],{"class":192},"      \u002F\u002F 追加给List\n",[123,79903,79904,79906,79908,79910,79913,79915,79917],{"class":125,"line":33354},[123,79905,55782],{"class":133},[123,79907,54410],{"class":1972},[123,79909,134],{"class":133},[123,79911,79912],{"class":238},"'.list'",[123,79914,74260],{"class":133},[123,79916,179],{"class":129},[123,79918,73996],{"class":133},[123,79920,79921],{"class":125,"line":33360},[123,79922,2196],{"class":133},[123,79924,79925],{"class":125,"line":33366},[123,79926,79927],{"class":192},"    \u002F\u002F 页面一打开就需要渲染\n",[123,79929,79930,79933],{"class":125,"line":33372},[123,79931,79932],{"class":1972},"    render",[123,79934,79935],{"class":133},"(goodsList)\n",[123,79937,79938],{"class":125,"line":33383},[123,79939,79940],{"class":192},"    \u002F\u002F 2.过滤筛选\n",[123,79942,79943,79945,79947,79949,79952,79954,79956,79958,79960,79962,79964,79966],{"class":125,"line":33389},[123,79944,52418],{"class":133},[123,79946,54410],{"class":1972},[123,79948,134],{"class":133},[123,79950,79951],{"class":238},"'.filter'",[123,79953,30837],{"class":133},[123,79955,57824],{"class":1972},[123,79957,134],{"class":133},[123,79959,57829],{"class":238},[123,79961,12445],{"class":133},[123,79963,208],{"class":5226},[123,79965,79809],{"class":129},[123,79967,15582],{"class":133},[123,79969,79970],{"class":125,"line":33395},[123,79971,79972],{"class":192},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[123,79974,79975,79977,79979,79982,79984,79986,79988,79990],{"class":125,"line":33401},[123,79976,58239],{"class":129},[123,79978,79818],{"class":133},[123,79980,79981],{"class":182},"tagName",[123,79983,12445],{"class":133},[123,79985,31548],{"class":182},[123,79987,79834],{"class":133},[123,79989,179],{"class":129},[123,79991,79992],{"class":133}," e.target\n",[123,79994,79995],{"class":125,"line":33419},[123,79996,79997],{"class":192},"      \u002F\u002F 判断\n",[123,79999,80000,80002,80004,80006,80008],{"class":125,"line":33433},[123,80001,54491],{"class":129},[123,80003,67045],{"class":133},[123,80005,54497],{"class":129},[123,80007,68267],{"class":238},[123,80009,12452],{"class":133},[123,80011,80012],{"class":125,"line":33442},[123,80013,80014],{"class":192},"        \u002F\u002F console.log(11)\n",[123,80016,80017],{"class":125,"line":33451},[123,80018,80019],{"class":192},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[123,80021,80022],{"class":125,"line":33460},[123,80023,80024],{"class":192},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[123,80026,80027,80029,80031,80033],{"class":125,"line":33469},[123,80028,51841],{"class":129},[123,80030,51844],{"class":133},[123,80032,179],{"class":129},[123,80034,80035],{"class":133}," goodsList\n",[123,80037,80038,80040,80043,80045,80048],{"class":125,"line":33475},[123,80039,2506],{"class":129},[123,80041,80042],{"class":133}," (dataset.index ",[123,80044,54497],{"class":129},[123,80046,80047],{"class":238}," '1'",[123,80049,12452],{"class":133},[123,80051,80052,80055,80057,80060,80063,80065,80067,80069,80072,80074,80076,80079,80081,80083,80085],{"class":125,"line":33481},[123,80053,80054],{"class":133},"          arr ",[123,80056,179],{"class":129},[123,80058,80059],{"class":133}," goodsList.",[123,80061,80062],{"class":1972},"filter",[123,80064,134],{"class":133},[123,80066,79806],{"class":5226},[123,80068,79809],{"class":129},[123,80070,80071],{"class":133}," item.price ",[123,80073,1719],{"class":129},[123,80075,4102],{"class":182},[123,80077,80078],{"class":129}," &&",[123,80080,80071],{"class":133},[123,80082,1597],{"class":129},[123,80084,5764],{"class":182},[123,80086,140],{"class":133},[123,80088,80089,80092,80094,80096,80098,80100,80103],{"class":125,"line":33489},[123,80090,80091],{"class":133},"        } ",[123,80093,1710],{"class":129},[123,80095,1713],{"class":129},[123,80097,80042],{"class":133},[123,80099,54497],{"class":129},[123,80101,80102],{"class":238}," '2'",[123,80104,12452],{"class":133},[123,80106,80107,80109,80111,80113,80115,80117,80119,80121,80123,80125,80127,80129,80131,80133,80136],{"class":125,"line":33494},[123,80108,80054],{"class":133},[123,80110,179],{"class":129},[123,80112,80059],{"class":133},[123,80114,80062],{"class":1972},[123,80116,134],{"class":133},[123,80118,79806],{"class":5226},[123,80120,79809],{"class":129},[123,80122,80071],{"class":133},[123,80124,1719],{"class":129},[123,80126,5764],{"class":182},[123,80128,80078],{"class":129},[123,80130,80071],{"class":133},[123,80132,1597],{"class":129},[123,80134,80135],{"class":182}," 300",[123,80137,140],{"class":133},[123,80139,80140,80142,80144,80146,80148,80150,80153],{"class":125,"line":33500},[123,80141,80091],{"class":133},[123,80143,1710],{"class":129},[123,80145,1713],{"class":129},[123,80147,80042],{"class":133},[123,80149,54497],{"class":129},[123,80151,80152],{"class":238}," '3'",[123,80154,12452],{"class":133},[123,80156,80157,80159,80161,80163,80165,80167,80169,80171,80173,80175,80177],{"class":125,"line":33511},[123,80158,80054],{"class":133},[123,80160,179],{"class":129},[123,80162,80059],{"class":133},[123,80164,80062],{"class":1972},[123,80166,134],{"class":133},[123,80168,79806],{"class":5226},[123,80170,79809],{"class":129},[123,80172,80071],{"class":133},[123,80174,1719],{"class":129},[123,80176,80135],{"class":182},[123,80178,140],{"class":133},[123,80180,80181],{"class":125,"line":33517},[123,80182,2538],{"class":133},[123,80184,80185],{"class":125,"line":33537},[123,80186,80187],{"class":192},"        \u002F\u002F 渲染函数\n",[123,80189,80190,80192],{"class":125,"line":33543},[123,80191,70419],{"class":1972},[123,80193,52423],{"class":133},[123,80195,80196],{"class":125,"line":33549},[123,80197,52409],{"class":133},[123,80199,80200],{"class":125,"line":33555},[123,80201,2409],{"emptyLinePlaceholder":50},[123,80203,80204],{"class":125,"line":33572},[123,80205,33472],{"class":133},[123,80207,80208,80210,80212],{"class":125,"line":33578},[123,80209,52428],{"class":133},[123,80211,51824],{"class":51311},[123,80213,51318],{"class":133},[123,80215,80216,80218,80220],{"class":125,"line":33584},[123,80217,51796],{"class":133},[123,80219,51811],{"class":51311},[123,80221,51318],{"class":133},[123,80223,80224],{"class":125,"line":33590},[123,80225,2409],{"emptyLinePlaceholder":50},[123,80227,80228,80230,80232],{"class":125,"line":33596},[123,80229,51796],{"class":133},[123,80231,50646],{"class":51311},[123,80233,51318],{"class":133},[65,80235,80237],{"id":80236},"_410-深入了解对象","4.10 深入了解对象",[94,80239,80241],{"id":80240},"_4101-创建对象","4.10.1 创建对象",[14,80243,80244],{},[35,80245],{"alt":37,"src":80246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80248,80249],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[94,80251,80253],{"id":80252},"_4102-构造函数","4.10.2 构造函数",[14,80255,80256,80259],{},[283,80257,80258],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80261,80262,80265],{},[283,80263,80264],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[114,80267,80269],{"className":50644,"code":80268,"language":50646,"meta":37,"style":37},"\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",[120,80270,80271,80279,80284,80305,80318,80330,80342,80346,80351,80378,80383,80410],{"__ignoreMap":37},[123,80272,80273,80275,80277],{"class":125,"line":126},[123,80274,1044],{"class":133},[123,80276,51824],{"class":51311},[123,80278,51318],{"class":133},[123,80280,80281],{"class":125,"line":45},[123,80282,80283],{"class":192},"\u002F\u002F例：\n",[123,80285,80286,80288,80291,80293,80295,80297,80299,80301,80303],{"class":125,"line":1189},[123,80287,54460],{"class":129},[123,80289,80290],{"class":1972}," Pig",[123,80292,134],{"class":133},[123,80294,79821],{"class":5226},[123,80296,512],{"class":133},[123,80298,70232],{"class":5226},[123,80300,512],{"class":133},[123,80302,70249],{"class":5226},[123,80304,12452],{"class":133},[123,80306,80307,80310,80313,80315],{"class":125,"line":1204},[123,80308,80309],{"class":182},"    this",[123,80311,80312],{"class":133},".name",[123,80314,179],{"class":129},[123,80316,80317],{"class":133},"name\n",[123,80319,80320,80322,80325,80327],{"class":125,"line":1210},[123,80321,80309],{"class":182},[123,80323,80324],{"class":133},".age",[123,80326,179],{"class":129},[123,80328,80329],{"class":133},"age\n",[123,80331,80332,80334,80337,80339],{"class":125,"line":1224},[123,80333,80309],{"class":182},[123,80335,80336],{"class":133},".gender",[123,80338,179],{"class":129},[123,80340,80341],{"class":133},"gender    \n",[123,80343,80344],{"class":125,"line":1230},[123,80345,1574],{"class":133},[123,80347,80348],{"class":125,"line":1321},[123,80349,80350],{"class":192},"\u002F\u002F创建佩奇对象\n",[123,80352,80353,80355,80358,80360,80362,80364,80367,80369,80371,80373,80376],{"class":125,"line":1327},[123,80354,6802],{"class":129},[123,80356,80357],{"class":182}," Peppa",[123,80359,11727],{"class":129},[123,80361,80290],{"class":1972},[123,80363,134],{"class":133},[123,80365,80366],{"class":238},"'佩奇'",[123,80368,512],{"class":133},[123,80370,478],{"class":182},[123,80372,512],{"class":133},[123,80374,80375],{"class":238},"'女'",[123,80377,140],{"class":133},[123,80379,80380],{"class":125,"line":1339},[123,80381,80382],{"class":192},"\u002F\u002F创建乔治对象\n",[123,80384,80385,80387,80390,80392,80394,80396,80399,80401,80403,80405,80408],{"class":125,"line":1621},[123,80386,6802],{"class":129},[123,80388,80389],{"class":182}," George",[123,80391,11727],{"class":129},[123,80393,80290],{"class":1972},[123,80395,134],{"class":133},[123,80397,80398],{"class":238},"'乔治'",[123,80400,512],{"class":133},[123,80402,205],{"class":182},[123,80404,512],{"class":133},[123,80406,80407],{"class":238},"'男'",[123,80409,140],{"class":133},[123,80411,80412,80414,80416],{"class":125,"line":1626},[123,80413,51796],{"class":133},[123,80415,51824],{"class":51311},[123,80417,51318],{"class":133},[14,80419,80420],{},[35,80421],{"alt":37,"src":80422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80424,80425],{},[35,80426],{"alt":37,"src":80427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80429,80430],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80432,80433],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80435,80436],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80438,80439],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80441,80442],{},"这里用等号是因为：对象.属性=值",[14,80444,80445],{},"①利用对象字面量创建对象",[14,80447,80448],{},"const o={",[14,80450,80451],{},"name:'pink'",[14,80453,80454],{},"} ②利用new Object创建对象",[14,80456,80457],{},"const o=new Object({name:'pink'})",[14,80459,80460],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80462,80463],{},"构造函数创建对象的执行过程：",[14,80465,80466],{},[35,80467],{"alt":37,"src":80468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[94,80470,80472],{"id":80471},"_4103-实例成员","4.10.3 实例成员",[14,80474,80475],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[77,80477,80478,80481,80484],{},[80,80479,80480],{},"实例对象的属性和方法即为实例成员",[80,80482,80483],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[80,80485,80486],{},"构造函数创建的实例对象彼此独立互不影响",[94,80488,80490],{"id":80489},"_4104-静态成员","4.10.4 静态成员",[14,80492,80493],{},[35,80494],{"alt":37,"src":80495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80497,80498],{},"静态成员有Date.now() Math.PI Math.random()",[14,80500,80501],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80503,80504],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80506,80507],{},"function Pig(name) n {",[14,80509,80510],{},"this.name=name",[14,80512,1080],{},[14,80514,80515],{},"Pig.eyes=2",[14,80517,80518],{},"Pig.sayHai=function () { console.log(this) }",[14,80520,80521],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80523,80524],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80526,11342],{},[77,80528,80529,80532,80535,80538,80541],{},[80,80530,80531],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[80,80533,80534],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[80,80536,80537],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[80,80539,80540],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[80,80542,80543],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80545,80546],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[94,80548,80550],{"id":80549},"_4105-内置构造函数","4.10.5 内置构造函数",[14,80552,80553],{},"内置构造函数包含：",[14,80555,80556],{},[35,80557],{"alt":37,"src":80558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,80560,80561],{},[35,80562],{"alt":37,"src":80563},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,80565,80566],{},"这些基本数据类型，js对他们进行了包装",[51824,80568,80569],{},"\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",[22008,80571,80573],{"id":80572},"_41051-object","4.10.5.1 Object",[14,80575,80576],{},"Object 是内置的构造函数，用于创建普通对象",[14,80578,80579],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[114,80581,80583],{"className":50644,"code":80582,"language":50646,"meta":37,"style":37},"const user=new Object({name:'小明',age:15})\n",[120,80584,80585],{"__ignoreMap":37},[123,80586,80587],{"class":125,"line":126},[123,80588,80582],{"class":133},[14,80590,80591],{},"三个常用的静态方法：",[22920,80593,80595],{"id":80594},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,80597,80598],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,80600,80601],{},[35,80602],{"alt":37,"src":80603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,80605,80606],{},[35,80607],{"alt":37,"src":80608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[114,80610,80612],{"className":53078,"code":80611,"language":53080,"meta":37,"style":37},"\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",[120,80613,80614,80622,80630,80635,80640,80645,80650,80655,80660,80668],{"__ignoreMap":37},[123,80615,80616,80618,80620],{"class":125,"line":126},[123,80617,1044],{"class":133},[123,80619,51811],{"class":51311},[123,80621,51318],{"class":133},[123,80623,80624,80626,80628],{"class":125,"line":45},[123,80625,52155],{"class":133},[123,80627,51824],{"class":51311},[123,80629,51318],{"class":133},[123,80631,80632],{"class":125,"line":1189},[123,80633,80634],{"class":133},"    const o = { name: 'pink', age: 6 }\n",[123,80636,80637],{"class":125,"line":1204},[123,80638,80639],{"class":133},"    \u002F\u002F 获得所有属性名\n",[123,80641,80642],{"class":125,"line":1210},[123,80643,80644],{"class":133},"    const arr = Object.keys(o)\n",[123,80646,80647],{"class":125,"line":1224},[123,80648,80649],{"class":133},"    console.log(arr)\n",[123,80651,80652],{"class":125,"line":1230},[123,80653,80654],{"class":133},"    \u002F\u002F 获得所有属性值\n",[123,80656,80657],{"class":125,"line":1321},[123,80658,80659],{"class":133},"    console.log(Object.values(o))\n",[123,80661,80662,80664,80666],{"class":125,"line":1327},[123,80663,52428],{"class":133},[123,80665,51824],{"class":51311},[123,80667,51318],{"class":133},[123,80669,80670,80672,80674],{"class":125,"line":1339},[123,80671,51796],{"class":133},[123,80673,51811],{"class":51311},[123,80675,51318],{"class":133},[22920,80677,80679],{"id":80678},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,80681,80682],{},"Object.assign(oo,o)",[14,80684,80685],{},"后的东西添加给前 是追加",[14,80687,80688],{},[35,80689],{"alt":37,"src":80690},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,80692,80693],{},[35,80694],{"alt":37,"src":80695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[114,80697,80699],{"className":53078,"code":80698,"language":53080,"meta":37,"style":37},"\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",[120,80700,80701,80709,80717,80721,80725,80729,80733,80737,80741,80746,80751,80756,80761,80766,80774],{"__ignoreMap":37},[123,80702,80703,80705,80707],{"class":125,"line":126},[123,80704,1044],{"class":133},[123,80706,51811],{"class":51311},[123,80708,51318],{"class":133},[123,80710,80711,80713,80715],{"class":125,"line":45},[123,80712,52155],{"class":133},[123,80714,51824],{"class":51311},[123,80716,51318],{"class":133},[123,80718,80719],{"class":125,"line":1189},[123,80720,80634],{"class":133},[123,80722,80723],{"class":125,"line":1204},[123,80724,80639],{"class":133},[123,80726,80727],{"class":125,"line":1210},[123,80728,80644],{"class":133},[123,80730,80731],{"class":125,"line":1224},[123,80732,80649],{"class":133},[123,80734,80735],{"class":125,"line":1230},[123,80736,80654],{"class":133},[123,80738,80739],{"class":125,"line":1321},[123,80740,80659],{"class":133},[123,80742,80743],{"class":125,"line":1327},[123,80744,80745],{"class":133},"    const oo = {}\n",[123,80747,80748],{"class":125,"line":1339},[123,80749,80750],{"class":133},"    Object.assign(oo, o)\n",[123,80752,80753],{"class":125,"line":1621},[123,80754,80755],{"class":133},"    console.log(oo)\n",[123,80757,80758],{"class":125,"line":1626},[123,80759,80760],{"class":133},"    Object.assign(o, { gender: '女' })\n",[123,80762,80763],{"class":125,"line":1632},[123,80764,80765],{"class":133},"    console.log(o)\n",[123,80767,80768,80770,80772],{"class":125,"line":1637},[123,80769,52428],{"class":133},[123,80771,51824],{"class":51311},[123,80773,51318],{"class":133},[123,80775,80776,80778,80780],{"class":125,"line":1651},[123,80777,51796],{"class":133},[123,80779,51811],{"class":51311},[123,80781,51318],{"class":133},[14,80783,80784],{},[35,80785],{"alt":37,"src":80786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[22008,80788,80790],{"id":80789},"_41052-array","4.10.5.2 Array",[14,80792,80793],{},"Array 是内置的构造函数，用于创建数组",[14,80795,80796],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[114,80798,80800],{"className":50644,"code":80799,"language":50646,"meta":37,"style":37},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[120,80801,80802,80807],{"__ignoreMap":37},[123,80803,80804],{"class":125,"line":126},[123,80805,80806],{"class":133},"const arr=new Array(3,5)\n",[123,80808,80809],{"class":125,"line":45},[123,80810,80811],{"class":133},"console.log(arr)  \u002F\u002F[3,5]\n",[14,80813,80814],{},"Array的实例方法，这个方法是实例成员",[14,80816,80817],{},[35,80818],{"alt":37,"src":80819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22920,80821,80823],{"id":80822},"_410521-reduce","4.10.5.2.1 reduce",[14,80825,80826],{},[35,80827],{"alt":37,"src":80828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[114,80830,80832],{"className":53078,"code":80831,"language":53080,"meta":37,"style":37},"\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",[120,80833,80834,80842,80850,80855,80860,80865,80870,80874,80879,80884,80889,80893,80898,80903,80907,80912,80917,80922,80930],{"__ignoreMap":37},[123,80835,80836,80838,80840],{"class":125,"line":126},[123,80837,1044],{"class":133},[123,80839,51811],{"class":51311},[123,80841,51318],{"class":133},[123,80843,80844,80846,80848],{"class":125,"line":45},[123,80845,52155],{"class":133},[123,80847,51824],{"class":51311},[123,80849,51318],{"class":133},[123,80851,80852],{"class":125,"line":1189},[123,80853,80854],{"class":133},"    const arr = [1, 5, 8]\n",[123,80856,80857],{"class":125,"line":1204},[123,80858,80859],{"class":133},"    \u002F\u002F 1.没有初始值\n",[123,80861,80862],{"class":125,"line":1210},[123,80863,80864],{"class":133},"    const total = arr.reduce(function (prev, current) {\n",[123,80866,80867],{"class":125,"line":1224},[123,80868,80869],{"class":133},"      return prev + current\n",[123,80871,80872],{"class":125,"line":1230},[123,80873,33472],{"class":133},[123,80875,80876],{"class":125,"line":1321},[123,80877,80878],{"class":133},"    console.log(total)   \u002F\u002F14\n",[123,80880,80881],{"class":125,"line":1327},[123,80882,80883],{"class":133},"    \u002F\u002F 2.有初始值\n",[123,80885,80886],{"class":125,"line":1339},[123,80887,80888],{"class":133},"    const total1 = arr.reduce(function (prev, current) {\n",[123,80890,80891],{"class":125,"line":1621},[123,80892,80869],{"class":133},[123,80894,80895],{"class":125,"line":1626},[123,80896,80897],{"class":133},"    }, 10)\n",[123,80899,80900],{"class":125,"line":1632},[123,80901,80902],{"class":133},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[123,80904,80905],{"class":125,"line":1637},[123,80906,2409],{"emptyLinePlaceholder":50},[123,80908,80909],{"class":125,"line":1651},[123,80910,80911],{"class":133},"    \u002F\u002F 3.箭头函数写法\n",[123,80913,80914],{"class":125,"line":1656},[123,80915,80916],{"class":133},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[123,80918,80919],{"class":125,"line":1662},[123,80920,80921],{"class":133},"    console.log(total2)   \u002F\u002F24\n",[123,80923,80924,80926,80928],{"class":125,"line":1683},[123,80925,52428],{"class":133},[123,80927,51824],{"class":51311},[123,80929,51318],{"class":133},[123,80931,80932,80934,80936],{"class":125,"line":1688},[123,80933,51796],{"class":133},[123,80935,51811],{"class":51311},[123,80937,51318],{"class":133},[14,80939,80940],{},"执行过程：",[77,80942,80943,80946,80949],{},[80,80944,80945],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[80,80947,80948],{},"每一次循环，把返回值给作为下一次循环的上一次值",[80,80950,80951],{},"如果有起始值，则起始值作为上一次值",[114,80953,80955],{"className":53078,"code":80954,"language":53080,"meta":37,"style":37},"\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",[120,80956,80957,80965,80973,80977,80981,80985,80989,80993,80997,81002,81007,81012,81017,81022,81026,81030,81034,81038,81042,81046,81051,81055,81060,81064,81069,81074,81078,81082,81086,81094],{"__ignoreMap":37},[123,80958,80959,80961,80963],{"class":125,"line":126},[123,80960,1044],{"class":133},[123,80962,51811],{"class":51311},[123,80964,51318],{"class":133},[123,80966,80967,80969,80971],{"class":125,"line":45},[123,80968,52155],{"class":133},[123,80970,51824],{"class":51311},[123,80972,51318],{"class":133},[123,80974,80975],{"class":125,"line":1189},[123,80976,80854],{"class":133},[123,80978,80979],{"class":125,"line":1204},[123,80980,80859],{"class":133},[123,80982,80983],{"class":125,"line":1210},[123,80984,80864],{"class":133},[123,80986,80987],{"class":125,"line":1224},[123,80988,80869],{"class":133},[123,80990,80991],{"class":125,"line":1230},[123,80992,33472],{"class":133},[123,80994,80995],{"class":125,"line":1321},[123,80996,80878],{"class":133},[123,80998,80999],{"class":125,"line":1327},[123,81000,81001],{"class":133},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[123,81003,81004],{"class":125,"line":1339},[123,81005,81006],{"class":133},"    \u002F\u002F     1              5                    6\n",[123,81008,81009],{"class":125,"line":1621},[123,81010,81011],{"class":133},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[123,81013,81014],{"class":125,"line":1626},[123,81015,81016],{"class":133},"    \u002F\u002F     6              8                    14\n",[123,81018,81019],{"class":125,"line":1632},[123,81020,81021],{"class":133},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[123,81023,81024],{"class":125,"line":1637},[123,81025,80883],{"class":133},[123,81027,81028],{"class":125,"line":1651},[123,81029,80888],{"class":133},[123,81031,81032],{"class":125,"line":1656},[123,81033,80869],{"class":133},[123,81035,81036],{"class":125,"line":1662},[123,81037,80897],{"class":133},[123,81039,81040],{"class":125,"line":1683},[123,81041,80902],{"class":133},[123,81043,81044],{"class":125,"line":1688},[123,81045,81001],{"class":133},[123,81047,81048],{"class":125,"line":1702},[123,81049,81050],{"class":133},"    \u002F\u002F     10             1                     11\n",[123,81052,81053],{"class":125,"line":1707},[123,81054,81011],{"class":133},[123,81056,81057],{"class":125,"line":1736},[123,81058,81059],{"class":133},"    \u002F\u002F     11             5                    16\n",[123,81061,81062],{"class":125,"line":1741},[123,81063,81011],{"class":133},[123,81065,81066],{"class":125,"line":1758},[123,81067,81068],{"class":133},"    \u002F\u002F     16             8                    24\n",[123,81070,81071],{"class":125,"line":1763},[123,81072,81073],{"class":133},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[123,81075,81076],{"class":125,"line":1768},[123,81077,80911],{"class":133},[123,81079,81080],{"class":125,"line":1773},[123,81081,80916],{"class":133},[123,81083,81084],{"class":125,"line":1787},[123,81085,80921],{"class":133},[123,81087,81088,81090,81092],{"class":125,"line":1792},[123,81089,52428],{"class":133},[123,81091,51824],{"class":51311},[123,81093,51318],{"class":133},[123,81095,81096,81098,81100],{"class":125,"line":2586},[123,81097,51796],{"class":133},[123,81099,51811],{"class":51311},[123,81101,51318],{"class":133},[22920,81103,81105],{"id":81104},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81107,81108],{},[35,81109],{"alt":37,"src":81110},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[114,81112,81114],{"className":53078,"code":81113,"language":53080,"meta":37,"style":37},"\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",[120,81115,81116,81124,81132,81137,81142,81147,81152,81156,81161,81166,81171,81176,81181,81186,81190,81195,81199,81204,81212],{"__ignoreMap":37},[123,81117,81118,81120,81122],{"class":125,"line":126},[123,81119,1044],{"class":133},[123,81121,51811],{"class":51311},[123,81123,51318],{"class":133},[123,81125,81126,81128,81130],{"class":125,"line":45},[123,81127,52155],{"class":133},[123,81129,51824],{"class":51311},[123,81131,51318],{"class":133},[123,81133,81134],{"class":125,"line":1189},[123,81135,81136],{"class":133},"    const arr = [\n",[123,81138,81139],{"class":125,"line":1204},[123,81140,81141],{"class":133},"      { name: '张三', salary: 10000 },\n",[123,81143,81144],{"class":125,"line":1210},[123,81145,81146],{"class":133},"      { name: '李四', salary: 10000 },\n",[123,81148,81149],{"class":125,"line":1224},[123,81150,81151],{"class":133},"      { name: '王五', salary: 10000 }\n",[123,81153,81154],{"class":125,"line":1230},[123,81155,53120],{"class":133},[123,81157,81158],{"class":125,"line":1321},[123,81159,81160],{"class":133},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[123,81162,81163],{"class":125,"line":1327},[123,81164,81165],{"class":133},"    \u002F\u002F prev是累计值\n",[123,81167,81168],{"class":125,"line":1339},[123,81169,81170],{"class":133},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[123,81172,81173],{"class":125,"line":1621},[123,81174,81175],{"class":133},"    console.log(total)\n",[123,81177,81178],{"class":125,"line":1626},[123,81179,81180],{"class":133},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[123,81182,81183],{"class":125,"line":1632},[123,81184,81185],{"class":133},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[123,81187,81188],{"class":125,"line":1637},[123,81189,81180],{"class":133},[123,81191,81192],{"class":125,"line":1651},[123,81193,81194],{"class":133},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[123,81196,81197],{"class":125,"line":1656},[123,81198,81180],{"class":133},[123,81200,81201],{"class":125,"line":1662},[123,81202,81203],{"class":133},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[123,81205,81206,81208,81210],{"class":125,"line":1683},[123,81207,52428],{"class":133},[123,81209,51824],{"class":51311},[123,81211,51318],{"class":133},[123,81213,81214,81216,81218],{"class":125,"line":1688},[123,81215,51796],{"class":133},[123,81217,51811],{"class":51311},[123,81219,51318],{"class":133},[22920,81221,81223],{"id":81222},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81225,81226],{},[35,81227],{"alt":37,"src":81228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81230,81231],{},[35,81232],{"alt":37,"src":81233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[77,81235,81236],{},[80,81237,81238],{},"find()",[14,81240,81241],{},"循环查找，找到第一个就ok",[14,81243,81244],{},[372,81245,81248],{"href":81246,"rel":81247},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23875],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[114,81250,81252],{"className":50644,"code":81251,"language":50646,"meta":37,"style":37},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[120,81253,81254,81259,81264],{"__ignoreMap":37},[123,81255,81256],{"class":125,"line":126},[123,81257,81258],{"class":133},"const array1 = [5, 12, 8, 130, 44]\n",[123,81260,81261],{"class":125,"line":45},[123,81262,81263],{"class":133},"const found = array1.find((element) => element > 10)\n",[123,81265,81266],{"class":125,"line":1189},[123,81267,81268],{"class":133},"console.log(found)  \u002F\u002F12\n",[14,81270,81271,81273,81274,81279,81280,81283,81284,81286,81287,81292,81293,81295,81296,81298,81299,81301,81302],{},[120,81272,81238],{}," 方法是一个",[372,81275,81278],{"href":81276,"rel":81277},"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",[23875],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[120,81281,81282],{},"callbackFn"," 函数，直到 ",[120,81285,81282],{}," 返回一个",[372,81288,81291],{"href":81289,"rel":81290},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23875],"真值","。然后 ",[120,81294,81238],{}," 返回该元素并停止迭代数组。如果 ",[120,81297,81282],{}," 从未返回真值，则 ",[120,81300,81238],{}," 返回 ",[120,81303,81304],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[114,81306,81308],{"className":53078,"code":81307,"language":53080,"meta":37,"style":37},"\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",[120,81309,81310,81318,81326,81331,81336,81341,81345,81350,81355,81359,81364,81369,81373,81377,81382,81387,81391,81395,81400,81405,81410,81415,81420,81424,81429,81434,81439,81444,81448,81453,81461],{"__ignoreMap":37},[123,81311,81312,81314,81316],{"class":125,"line":126},[123,81313,1044],{"class":133},[123,81315,51811],{"class":51311},[123,81317,51318],{"class":133},[123,81319,81320,81322,81324],{"class":125,"line":45},[123,81321,52155],{"class":133},[123,81323,51824],{"class":51311},[123,81325,51318],{"class":133},[123,81327,81328],{"class":125,"line":1189},[123,81329,81330],{"class":133},"    const arr = ['red', 'blue', 'green']\n",[123,81332,81333],{"class":125,"line":1204},[123,81334,81335],{"class":133},"    const found = arr.find(item => item === 'pink')\n",[123,81337,81338],{"class":125,"line":1210},[123,81339,81340],{"class":133},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[123,81342,81343],{"class":125,"line":1224},[123,81344,2409],{"emptyLinePlaceholder":50},[123,81346,81347],{"class":125,"line":1230},[123,81348,81349],{"class":133},"    \u002F\u002F 使用场景，用于查找数据\n",[123,81351,81352],{"class":125,"line":1321},[123,81353,81354],{"class":133},"    const arr1 = [\n",[123,81356,81357],{"class":125,"line":1327},[123,81358,79397],{"class":133},[123,81360,81361],{"class":125,"line":1339},[123,81362,81363],{"class":133},"        name: '小米',\n",[123,81365,81366],{"class":125,"line":1621},[123,81367,81368],{"class":133},"        price: 1999\n",[123,81370,81371],{"class":125,"line":1626},[123,81372,77903],{"class":133},[123,81374,81375],{"class":125,"line":1632},[123,81376,79397],{"class":133},[123,81378,81379],{"class":125,"line":1637},[123,81380,81381],{"class":133},"        name: '华为',\n",[123,81383,81384],{"class":125,"line":1651},[123,81385,81386],{"class":133},"        price: 3999\n",[123,81388,81389],{"class":125,"line":1656},[123,81390,52409],{"class":133},[123,81392,81393],{"class":125,"line":1662},[123,81394,53120],{"class":133},[123,81396,81397],{"class":125,"line":1683},[123,81398,81399],{"class":133},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[123,81401,81402],{"class":125,"line":1688},[123,81403,81404],{"class":133},"    \u002F\u002F const found1 = arr1.find(item => {\n",[123,81406,81407],{"class":125,"line":1702},[123,81408,81409],{"class":133},"    \u002F\u002F   if (item.name === '小米') {\n",[123,81411,81412],{"class":125,"line":1707},[123,81413,81414],{"class":133},"    \u002F\u002F     return item\n",[123,81416,81417],{"class":125,"line":1736},[123,81418,81419],{"class":133},"    \u002F\u002F   }\n",[123,81421,81422],{"class":125,"line":1741},[123,81423,63301],{"class":133},[123,81425,81426],{"class":125,"line":1758},[123,81427,81428],{"class":133},"    \u002F\u002F 另一种写法\n",[123,81430,81431],{"class":125,"line":1763},[123,81432,81433],{"class":133},"    const found1 = arr1.find(item => {\n",[123,81435,81436],{"class":125,"line":1768},[123,81437,81438],{"class":133},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[123,81440,81441],{"class":125,"line":1773},[123,81442,81443],{"class":133},"      return item.name = '小米'\n",[123,81445,81446],{"class":125,"line":1787},[123,81447,33472],{"class":133},[123,81449,81450],{"class":125,"line":1792},[123,81451,81452],{"class":133},"    console.log(found1)\n",[123,81454,81455,81457,81459],{"class":125,"line":2586},[123,81456,52428],{"class":133},[123,81458,51824],{"class":51311},[123,81460,51318],{"class":133},[123,81462,81463,81465,81467],{"class":125,"line":2600},[123,81464,51796],{"class":133},[123,81466,51811],{"class":51311},[123,81468,51318],{"class":133},[14,81470,81471],{},[35,81472],{"alt":37,"src":81473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81475,81476],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[77,81478,81479],{"start":45},[80,81480,81481],{},"every()返回的是布尔值",[14,81483,81484],{},[372,81485,81488],{"href":81486,"rel":81487},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23875],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81490,81491],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81493,81494],{},"some是只有有一个就没问题",[14,81496,81497],{},"every是必须全是才行",[114,81499,81503],{"className":81500,"code":81501,"language":81502,"meta":37,"style":37},"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",[120,81504,81505,81521,81535,81539,81548],{"__ignoreMap":37},[123,81506,81507,81509,81512,81514,81516,81519],{"class":125,"line":126},[123,81508,54460],{"class":129},[123,81510,81511],{"class":133}," isBigEnough(element, ",[123,81513,74069],{"class":129},[123,81515,12445],{"class":133},[123,81517,81518],{"class":129},"array",[123,81520,12452],{"class":133},[123,81522,81523,81526,81529,81531,81533],{"class":125,"line":45},[123,81524,81525],{"class":129},"  return",[123,81527,81528],{"class":133}," element ",[123,81530,1719],{"class":129},[123,81532,2047],{"class":182},[123,81534,1300],{"class":133},[123,81536,81537],{"class":125,"line":1189},[123,81538,1574],{"class":133},[123,81540,81541,81544,81546],{"class":125,"line":1204},[123,81542,81543],{"class":133},"[12, 5, 8, 130, 44].every(isBigEnough); ",[123,81545,33340],{"class":129},[123,81547,54527],{"class":133},[123,81549,81550,81553,81555],{"class":125,"line":1210},[123,81551,81552],{"class":133},"[12, 54, 18, 130, 44].every(isBigEnough); ",[123,81554,33340],{"class":129},[123,81556,57951],{"class":133},[114,81558,81560],{"className":53078,"code":81559,"language":53080,"meta":37,"style":37},"\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",[120,81561,81562,81570,81578,81583,81587,81592,81597,81605],{"__ignoreMap":37},[123,81563,81564,81566,81568],{"class":125,"line":126},[123,81565,1044],{"class":133},[123,81567,51811],{"class":51311},[123,81569,51318],{"class":133},[123,81571,81572,81574,81576],{"class":125,"line":45},[123,81573,52155],{"class":133},[123,81575,51824],{"class":51311},[123,81577,51318],{"class":133},[123,81579,81580],{"class":125,"line":1189},[123,81581,81582],{"class":133},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[123,81584,81585],{"class":125,"line":1204},[123,81586,78333],{"class":133},[123,81588,81589],{"class":125,"line":1210},[123,81590,81591],{"class":133},"    const flag = arr.every(item => item >= 10)\n",[123,81593,81594],{"class":125,"line":1224},[123,81595,81596],{"class":133},"    console.log(flag)    \u002F\u002Ftrue\n",[123,81598,81599,81601,81603],{"class":125,"line":1230},[123,81600,52428],{"class":133},[123,81602,51824],{"class":51311},[123,81604,51318],{"class":133},[123,81606,81607,81609,81611],{"class":125,"line":1321},[123,81608,51796],{"class":133},[123,81610,51811],{"class":51311},[123,81612,51318],{"class":133},[114,81614,81616],{"className":53078,"code":81615,"language":53080,"meta":37,"style":37},"\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",[120,81617,81618,81626,81634,81638,81643,81648,81653,81661],{"__ignoreMap":37},[123,81619,81620,81622,81624],{"class":125,"line":126},[123,81621,1044],{"class":133},[123,81623,51811],{"class":51311},[123,81625,51318],{"class":133},[123,81627,81628,81630,81632],{"class":125,"line":45},[123,81629,52155],{"class":133},[123,81631,51824],{"class":51311},[123,81633,51318],{"class":133},[123,81635,81636],{"class":125,"line":1189},[123,81637,81582],{"class":133},[123,81639,81640],{"class":125,"line":1204},[123,81641,81642],{"class":133},"    const arr = [10, 0, 5]\n",[123,81644,81645],{"class":125,"line":1210},[123,81646,81647],{"class":133},"    const flag = arr.some(item => item >= 10)\n",[123,81649,81650],{"class":125,"line":1224},[123,81651,81652],{"class":133},"    console.log(flag)   \u002F\u002Ftrue\n",[123,81654,81655,81657,81659],{"class":125,"line":1230},[123,81656,52428],{"class":133},[123,81658,51824],{"class":51311},[123,81660,51318],{"class":133},[123,81662,81663,81665,81667],{"class":125,"line":1321},[123,81664,51796],{"class":133},[123,81666,51811],{"class":51311},[123,81668,51318],{"class":133},[22920,81670,81672],{"id":81671},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,81674,81675],{},[35,81676],{"alt":37,"src":81677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[114,81679,81681],{"className":50644,"code":81680,"language":50646,"meta":37,"style":37},"\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",[120,81682,81683,81693,81707,81711,81719,81733,81753,81765,81773,81780,81792,81804,81816,81828,81838,81848,81852,81860,81868,81872,81880,81892,81900,81922,81927,81932,81965,81973,81981,81985],{"__ignoreMap":37},[123,81684,81685,81687,81689,81691],{"class":125,"line":126},[123,81686,51308],{"class":133},[123,81688,51312],{"class":51311},[123,81690,51315],{"class":1972},[123,81692,51318],{"class":133},[123,81694,81695,81697,81699,81701,81703,81705],{"class":125,"line":45},[123,81696,1044],{"class":133},[123,81698,50646],{"class":51311},[123,81700,51327],{"class":1972},[123,81702,179],{"class":133},[123,81704,51332],{"class":238},[123,81706,51318],{"class":133},[123,81708,81709],{"class":125,"line":1189},[123,81710,2409],{"emptyLinePlaceholder":50},[123,81712,81713,81715,81717],{"class":125,"line":1204},[123,81714,1044],{"class":133},[123,81716,51345],{"class":51311},[123,81718,51318],{"class":133},[123,81720,81721,81723,81725,81727,81729,81731],{"class":125,"line":1210},[123,81722,52155],{"class":133},[123,81724,51355],{"class":51311},[123,81726,51358],{"class":1972},[123,81728,179],{"class":133},[123,81730,51363],{"class":238},[123,81732,51318],{"class":133},[123,81734,81735,81737,81739,81741,81743,81745,81747,81749,81751],{"class":125,"line":1224},[123,81736,52155],{"class":133},[123,81738,51355],{"class":51311},[123,81740,14930],{"class":1972},[123,81742,179],{"class":133},[123,81744,51402],{"class":238},[123,81746,51382],{"class":1972},[123,81748,179],{"class":133},[123,81750,51409],{"class":238},[123,81752,51318],{"class":133},[123,81754,81755,81757,81759,81761,81763],{"class":125,"line":1230},[123,81756,52155],{"class":133},[123,81758,51418],{"class":51311},[123,81760,51421],{"class":133},[123,81762,51418],{"class":51311},[123,81764,51318],{"class":133},[123,81766,81767,81769,81771],{"class":125,"line":1321},[123,81768,52155],{"class":133},[123,81770,5136],{"class":51311},[123,81772,51318],{"class":133},[123,81774,81775,81778],{"class":125,"line":1327},[123,81776,81777],{"class":51311},"    div",[123,81779,15582],{"class":133},[123,81781,81782,81784,81786,81788,81790],{"class":125,"line":1339},[123,81783,54782],{"class":182},[123,81785,51448],{"class":133},[123,81787,1731],{"class":182},[123,81789,51503],{"class":129},[123,81791,1300],{"class":133},[123,81793,81794,81796,81798,81800,81802],{"class":125,"line":1621},[123,81795,54796],{"class":182},[123,81797,51448],{"class":133},[123,81799,535],{"class":182},[123,81801,51503],{"class":129},[123,81803,1300],{"class":133},[123,81805,81806,81808,81810,81812,81814],{"class":125,"line":1626},[123,81807,57370],{"class":182},[123,81809,51448],{"class":133},[123,81811,535],{"class":182},[123,81813,51503],{"class":129},[123,81815,1300],{"class":133},[123,81817,81818,81820,81822,81824,81826],{"class":125,"line":1632},[123,81819,65144],{"class":182},[123,81821,51448],{"class":133},[123,81823,632],{"class":182},[123,81825,51503],{"class":129},[123,81827,1300],{"class":133},[123,81829,81830,81832,81834,81836],{"class":125,"line":1637},[123,81831,57297],{"class":182},[123,81833,51448],{"class":133},[123,81835,51603],{"class":182},[123,81837,1300],{"class":133},[123,81839,81840,81842,81844,81846],{"class":125,"line":1651},[123,81841,54895],{"class":182},[123,81843,51448],{"class":133},[123,81845,51656],{"class":182},[123,81847,1300],{"class":133},[123,81849,81850],{"class":125,"line":1656},[123,81851,2196],{"class":133},[123,81853,81854,81856,81858],{"class":125,"line":1662},[123,81855,52428],{"class":133},[123,81857,5136],{"class":51311},[123,81859,51318],{"class":133},[123,81861,81862,81864,81866],{"class":125,"line":1683},[123,81863,51796],{"class":133},[123,81865,51345],{"class":51311},[123,81867,51318],{"class":133},[123,81869,81870],{"class":125,"line":1688},[123,81871,2409],{"emptyLinePlaceholder":50},[123,81873,81874,81876,81878],{"class":125,"line":1702},[123,81875,1044],{"class":133},[123,81877,51811],{"class":51311},[123,81879,51318],{"class":133},[123,81881,81882,81884,81886,81888,81890],{"class":125,"line":1707},[123,81883,52155],{"class":133},[123,81885,51622],{"class":51311},[123,81887,55325],{"class":133},[123,81889,51622],{"class":51311},[123,81891,51318],{"class":133},[123,81893,81894,81896,81898],{"class":125,"line":1736},[123,81895,52155],{"class":133},[123,81897,51824],{"class":51311},[123,81899,51318],{"class":133},[123,81901,81902,81904,81907,81909,81912,81915,81917,81920],{"class":125,"line":1741},[123,81903,11231],{"class":129},[123,81905,81906],{"class":182}," spec",[123,81908,13574],{"class":129},[123,81910,81911],{"class":133}," { size: ",[123,81913,81914],{"class":238},"'40cm*40cm'",[123,81916,55475],{"class":133},[123,81918,81919],{"class":238},"'黑色'",[123,81921,55615],{"class":133},[123,81923,81924],{"class":125,"line":1758},[123,81925,81926],{"class":192},"    \u002F\u002F const arr = Object.values(spec)\n",[123,81928,81929],{"class":125,"line":1763},[123,81930,81931],{"class":192},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[123,81933,81934,81936,81938,81940,81943,81945,81947,81950,81953,81956,81958,81960,81963],{"class":125,"line":1768},[123,81935,52418],{"class":133},[123,81937,54410],{"class":1972},[123,81939,134],{"class":133},[123,81941,81942],{"class":238},"'div'",[123,81944,74260],{"class":133},[123,81946,179],{"class":129},[123,81948,81949],{"class":133}," Object.",[123,81951,81952],{"class":1972},"values",[123,81954,81955],{"class":133},"(spec).",[123,81957,74234],{"class":1972},[123,81959,134],{"class":133},[123,81961,81962],{"class":238},"'\u002F'",[123,81964,140],{"class":133},[123,81966,81967,81969,81971],{"class":125,"line":1773},[123,81968,52428],{"class":133},[123,81970,51824],{"class":51311},[123,81972,51318],{"class":133},[123,81974,81975,81977,81979],{"class":125,"line":1787},[123,81976,51796],{"class":133},[123,81978,51811],{"class":51311},[123,81980,51318],{"class":133},[123,81982,81983],{"class":125,"line":1792},[123,81984,2409],{"emptyLinePlaceholder":50},[123,81986,81987,81989,81991],{"class":125,"line":2586},[123,81988,51796],{"class":133},[123,81990,50646],{"class":51311},[123,81992,51318],{"class":133},[14,81994,81995],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22920,81997,81999],{"id":81998},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,82001,82002],{},"静态方法，将伪数组转换为真数组",[14,82004,82005],{},[35,82006],{"alt":37,"src":82007},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[114,82009,82011],{"className":53078,"code":82010,"language":53080,"meta":37,"style":37},"\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",[120,82012,82013,82021,82029,82041,82053,82065,82073,82081,82086,82091,82096,82101,82109],{"__ignoreMap":37},[123,82014,82015,82017,82019],{"class":125,"line":126},[123,82016,1044],{"class":133},[123,82018,51811],{"class":51311},[123,82020,51318],{"class":133},[123,82022,82023,82025,82027],{"class":125,"line":45},[123,82024,52155],{"class":133},[123,82026,1141],{"class":51311},[123,82028,51318],{"class":133},[123,82030,82031,82033,82035,82037,82039],{"class":125,"line":1189},[123,82032,51352],{"class":133},[123,82034,80],{"class":51311},[123,82036,55325],{"class":133},[123,82038,80],{"class":51311},[123,82040,51318],{"class":133},[123,82042,82043,82045,82047,82049,82051],{"class":125,"line":1204},[123,82044,51352],{"class":133},[123,82046,80],{"class":51311},[123,82048,55325],{"class":133},[123,82050,80],{"class":51311},[123,82052,51318],{"class":133},[123,82054,82055,82057,82059,82061,82063],{"class":125,"line":1210},[123,82056,51352],{"class":133},[123,82058,80],{"class":51311},[123,82060,55325],{"class":133},[123,82062,80],{"class":51311},[123,82064,51318],{"class":133},[123,82066,82067,82069,82071],{"class":125,"line":1224},[123,82068,52428],{"class":133},[123,82070,1141],{"class":51311},[123,82072,51318],{"class":133},[123,82074,82075,82077,82079],{"class":125,"line":1230},[123,82076,52155],{"class":133},[123,82078,51824],{"class":51311},[123,82080,51318],{"class":133},[123,82082,82083],{"class":125,"line":1321},[123,82084,82085],{"class":133},"    const lis = document.querySelectorAll('li')\n",[123,82087,82088],{"class":125,"line":1327},[123,82089,82090],{"class":133},"    const liss = Array.from(lis)\n",[123,82092,82093],{"class":125,"line":1339},[123,82094,82095],{"class":133},"    liss.pop()\n",[123,82097,82098],{"class":125,"line":1621},[123,82099,82100],{"class":133},"    console.log(liss)\n",[123,82102,82103,82105,82107],{"class":125,"line":1626},[123,82104,52428],{"class":133},[123,82106,51824],{"class":51311},[123,82108,51318],{"class":133},[123,82110,82111,82113,82115],{"class":125,"line":1632},[123,82112,51796],{"class":133},[123,82114,51811],{"class":51311},[123,82116,51318],{"class":133},[14,82118,82119],{},[35,82120],{"alt":37,"src":82121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[22008,82123,82125],{"id":82124},"_41053-string","4.10.5.3 String",[14,82127,82128],{},[35,82129],{"alt":37,"src":82130},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22920,82132,82134],{"id":82133},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[114,82136,82138],{"className":53078,"code":82137,"language":53080,"meta":37,"style":37},"\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",[120,82139,82140,82148,82156,82161,82166,82171,82175,82180,82185,82190,82198],{"__ignoreMap":37},[123,82141,82142,82144,82146],{"class":125,"line":126},[123,82143,1044],{"class":133},[123,82145,51811],{"class":51311},[123,82147,51318],{"class":133},[123,82149,82150,82152,82154],{"class":125,"line":45},[123,82151,52155],{"class":133},[123,82153,51824],{"class":51311},[123,82155,51318],{"class":133},[123,82157,82158],{"class":125,"line":1189},[123,82159,82160],{"class":133},"    \u002F\u002F 把字符串转化为数组\n",[123,82162,82163],{"class":125,"line":1204},[123,82164,82165],{"class":133},"    const str = 'pink,red'\n",[123,82167,82168],{"class":125,"line":1210},[123,82169,82170],{"class":133},"    const arr = str.split(',')\n",[123,82172,82173],{"class":125,"line":1224},[123,82174,80649],{"class":133},[123,82176,82177],{"class":125,"line":1230},[123,82178,82179],{"class":133},"    const str1 = '2025-8-25'\n",[123,82181,82182],{"class":125,"line":1321},[123,82183,82184],{"class":133},"    const arr1 = str1.split('-')\n",[123,82186,82187],{"class":125,"line":1327},[123,82188,82189],{"class":133},"    console.log(arr1)\n",[123,82191,82192,82194,82196],{"class":125,"line":1339},[123,82193,52428],{"class":133},[123,82195,51824],{"class":51311},[123,82197,51318],{"class":133},[123,82199,82200,82202,82204],{"class":125,"line":1621},[123,82201,51796],{"class":133},[123,82203,51811],{"class":51311},[123,82205,51318],{"class":133},[22920,82207,82209],{"id":82208},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82211,5191],{},[14,82213,82214],{},"substring(indexStart)",[14,82216,82217],{},"substring(indexStart, indexEnd)",[1141,82219,82220,82231,82243,82253],{},[80,82221,82222,82223,82226,82227,82230],{},"如果省略了 ",[120,82224,82225],{},"indexEnd","，则 ",[120,82228,82229],{},"substring()"," 提取字符直到字符串的末尾",[80,82232,82233,82234,82237,82238,82226,82240,82242],{},"如果 ",[120,82235,82236],{},"indexStart"," 等于 ",[120,82239,82225],{},[120,82241,82229],{}," 返回一个空字符串",[80,82244,82233,82245,82247,82248,82226,82250,82252],{},[120,82246,82236],{}," 大于 ",[120,82249,82225],{},[120,82251,82229],{}," 的效果就像交换了这两个参数一样",[80,82254,82255],{},"结束的索引号不包含想要截取的部分",[114,82257,82259],{"className":81500,"code":82258,"language":81502,"meta":37,"style":37},"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",[120,82260,82261,82273,82277,82311,82341,82345,82376,82380,82407,82437,82467,82471,82502],{"__ignoreMap":37},[123,82262,82263,82266,82268,82271],{"class":125,"line":126},[123,82264,82265],{"class":133},"const anyString ",[123,82267,179],{"class":129},[123,82269,82270],{"class":238}," \"Mozilla\"",[123,82272,1300],{"class":133},[123,82274,82275],{"class":125,"line":45},[123,82276,2409],{"emptyLinePlaceholder":50},[123,82278,82279,82282,82284,82286,82288,82291,82293,82296,82298,82300,82302,82304,82306,82308],{"class":125,"line":1189},[123,82280,82281],{"class":182},"console",[123,82283,692],{"class":133},[123,82285,58258],{"class":182},[123,82287,134],{"class":133},[123,82289,82290],{"class":182},"anyString",[123,82292,692],{"class":133},[123,82294,82295],{"class":182},"substring",[123,82297,134],{"class":133},[123,82299,325],{"class":182},[123,82301,12445],{"class":133},[123,82303,351],{"class":182},[123,82305,75264],{"class":133},[123,82307,33340],{"class":129},[123,82309,82310],{"class":238}," 'M'\n",[123,82312,82313,82315,82317,82319,82321,82323,82325,82327,82329,82331,82333,82335,82337,82339],{"class":125,"line":1204},[123,82314,82281],{"class":182},[123,82316,692],{"class":133},[123,82318,58258],{"class":182},[123,82320,134],{"class":133},[123,82322,82290],{"class":182},[123,82324,692],{"class":133},[123,82326,82295],{"class":182},[123,82328,134],{"class":133},[123,82330,351],{"class":182},[123,82332,12445],{"class":133},[123,82334,325],{"class":182},[123,82336,75264],{"class":133},[123,82338,33340],{"class":129},[123,82340,82310],{"class":238},[123,82342,82343],{"class":125,"line":1210},[123,82344,2409],{"emptyLinePlaceholder":50},[123,82346,82347,82349,82351,82353,82355,82357,82359,82361,82363,82365,82367,82369,82371,82373],{"class":125,"line":1224},[123,82348,82281],{"class":182},[123,82350,692],{"class":133},[123,82352,58258],{"class":182},[123,82354,134],{"class":133},[123,82356,82290],{"class":182},[123,82358,692],{"class":133},[123,82360,82295],{"class":182},[123,82362,134],{"class":133},[123,82364,325],{"class":182},[123,82366,12445],{"class":133},[123,82368,478],{"class":182},[123,82370,75264],{"class":133},[123,82372,33340],{"class":129},[123,82374,82375],{"class":238}," 'Mozill'\n",[123,82377,82378],{"class":125,"line":1230},[123,82379,2409],{"emptyLinePlaceholder":50},[123,82381,82382,82384,82386,82388,82390,82392,82394,82396,82398,82400,82402,82404],{"class":125,"line":1321},[123,82383,82281],{"class":182},[123,82385,692],{"class":133},[123,82387,58258],{"class":182},[123,82389,134],{"class":133},[123,82391,82290],{"class":182},[123,82393,692],{"class":133},[123,82395,82295],{"class":182},[123,82397,134],{"class":133},[123,82399,427],{"class":182},[123,82401,75264],{"class":133},[123,82403,33340],{"class":129},[123,82405,82406],{"class":238}," 'lla'\n",[123,82408,82409,82411,82413,82415,82417,82419,82421,82423,82425,82427,82429,82431,82433,82435],{"class":125,"line":1327},[123,82410,82281],{"class":182},[123,82412,692],{"class":133},[123,82414,58258],{"class":182},[123,82416,134],{"class":133},[123,82418,82290],{"class":182},[123,82420,692],{"class":133},[123,82422,82295],{"class":182},[123,82424,134],{"class":133},[123,82426,427],{"class":182},[123,82428,12445],{"class":133},[123,82430,503],{"class":182},[123,82432,75320],{"class":133},[123,82434,33340],{"class":129},[123,82436,82406],{"class":238},[123,82438,82439,82441,82443,82445,82447,82449,82451,82453,82455,82457,82459,82461,82463,82465],{"class":125,"line":1339},[123,82440,82281],{"class":182},[123,82442,692],{"class":133},[123,82444,58258],{"class":182},[123,82446,134],{"class":133},[123,82448,82290],{"class":182},[123,82450,692],{"class":133},[123,82452,82295],{"class":182},[123,82454,134],{"class":133},[123,82456,503],{"class":182},[123,82458,12445],{"class":133},[123,82460,427],{"class":182},[123,82462,75264],{"class":133},[123,82464,33340],{"class":129},[123,82466,82406],{"class":238},[123,82468,82469],{"class":125,"line":1621},[123,82470,2409],{"emptyLinePlaceholder":50},[123,82472,82473,82475,82477,82479,82481,82483,82485,82487,82489,82491,82493,82495,82497,82499],{"class":125,"line":1626},[123,82474,82281],{"class":182},[123,82476,692],{"class":133},[123,82478,58258],{"class":182},[123,82480,134],{"class":133},[123,82482,82290],{"class":182},[123,82484,692],{"class":133},[123,82486,82295],{"class":182},[123,82488,134],{"class":133},[123,82490,325],{"class":182},[123,82492,12445],{"class":133},[123,82494,503],{"class":182},[123,82496,75264],{"class":133},[123,82498,33340],{"class":129},[123,82500,82501],{"class":238}," 'Mozilla'\n",[123,82503,82504,82506,82508,82510,82512,82514,82516,82518,82520,82522,82524,82526,82528,82530],{"class":125,"line":1632},[123,82505,82281],{"class":182},[123,82507,692],{"class":133},[123,82509,58258],{"class":182},[123,82511,134],{"class":133},[123,82513,82290],{"class":182},[123,82515,692],{"class":133},[123,82517,82295],{"class":182},[123,82519,134],{"class":133},[123,82521,325],{"class":182},[123,82523,12445],{"class":133},[123,82525,580],{"class":182},[123,82527,75264],{"class":133},[123,82529,33340],{"class":129},[123,82531,82501],{"class":238},[22920,82533,82535],{"id":82534},"_410533-startswith","4.10.5.3.3 startsWith",[14,82537,82538,82541,82542,82547,82548,82550,82551],{},[120,82539,82540],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[283,82543,82544],{},[120,82545,82546],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[120,82549,1372],{}," 或 ",[120,82552,66031],{},[114,82554,82556],{"className":77506,"code":82555,"language":77508,"meta":37,"style":37},"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",[120,82557,82558,82570,82589,82594,82614],{"__ignoreMap":37},[123,82559,82560,82562,82565,82567],{"class":125,"line":126},[123,82561,6802],{"class":129},[123,82563,82564],{"class":133}," str1 ",[123,82566,179],{"class":129},[123,82568,82569],{"class":238}," \"Saturday night plans\"\n",[123,82571,82572,82574,82576,82579,82582,82584,82587],{"class":125,"line":45},[123,82573,77543],{"class":133},[123,82575,58258],{"class":1972},[123,82577,82578],{"class":133},"(str1.",[123,82580,82581],{"class":1972},"startsWith",[123,82583,134],{"class":133},[123,82585,82586],{"class":238},"\"Sat\"",[123,82588,30508],{"class":133},[123,82590,82591],{"class":125,"line":1189},[123,82592,82593],{"class":192},"\u002F\u002F Expected output: true\n",[123,82595,82596,82598,82600,82602,82604,82606,82608,82610,82612],{"class":125,"line":1204},[123,82597,77543],{"class":133},[123,82599,58258],{"class":1972},[123,82601,82578],{"class":133},[123,82603,82581],{"class":1972},[123,82605,134],{"class":133},[123,82607,82586],{"class":238},[123,82609,12445],{"class":133},[123,82611,205],{"class":182},[123,82613,30508],{"class":133},[123,82615,82616],{"class":125,"line":1210},[123,82617,82618],{"class":192},"\u002F\u002F Expected output: false\n",[114,82620,82622],{"className":50644,"code":82621,"language":50646,"meta":37,"style":37},"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",[120,82623,82624,82629,82634,82638,82643,82648],{"__ignoreMap":37},[123,82625,82626],{"class":125,"line":126},[123,82627,82628],{"class":133},"startsWith(searchString)\n",[123,82630,82631],{"class":125,"line":45},[123,82632,82633],{"class":133},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[123,82635,82636],{"class":125,"line":1189},[123,82637,2409],{"emptyLinePlaceholder":50},[123,82639,82640],{"class":125,"line":1204},[123,82641,82642],{"class":133},"const str3 = 'pink老师上课中'\n",[123,82644,82645],{"class":125,"line":1210},[123,82646,82647],{"class":133},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[123,82649,82650],{"class":125,"line":1224},[123,82651,82652],{"class":133},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22920,82654,82656],{"id":82655},"_410534-includes","4.10.5.3.4 includes",[14,82658,82659],{},"includes(searchString) includes(searchString, position)",[77,82661,82662],{},[80,82663,82664],{},"searchString:",[14,82666,82667,82668,82670,82671,82676,82677,82682,82683,21510,82686,82689,82690,82693],{},"一个要在 ",[120,82669,1309],{}," 中查找的字符串。",[372,82672,82675],{"href":82673,"rel":82674},"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",[23875],"不能是正则表达式","。所有非正则表达式的值都会被",[372,82678,82681],{"href":82679,"rel":82680},"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",[23875],"强制转换为字符串","，因此如果该参数被省略或传入 ",[120,82684,82685],{},"undefined",[120,82687,82688],{},"includes()"," 方法会在字符串中搜索 ",[120,82691,82692],{},"\"undefined\"","，这通常不是你想要的",[77,82695,82696],{"start":45},[80,82697,82698,993],{},[120,82699,82700],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,82702,82703,82704,82707,82708],{},"在字符串中开始搜索 ",[120,82705,82706],{},"searchString"," 的位置。默认值为 ",[120,82709,325],{},[77,82711,82712],{"start":1189},[80,82713,82714],{},"返回值：",[14,82716,82717,82718,82720,82721,82725,82726],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[120,82719,82706],{}," 为空字符串的情况），则返回 ",[283,82722,82723],{},[120,82724,1372],{}," ，否则返回 ",[283,82727,82728],{},[120,82729,66031],{},[77,82731,82732],{"start":1204},[80,82733,82734],{},"异常：",[14,82736,82233,82737,13805,82739,82743],{},[120,82738,82706],{},[372,82740,82742],{"href":82673,"rel":82741},[23875],"是一个正则表达式","，则会抛出",[14,82745,82746],{},"只要是有就是true，不需要非得以谁开头结尾",[114,82748,82750],{"className":77506,"code":82749,"language":77508,"meta":37,"style":37},"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",[120,82751,82752,82763,82786,82805,82825,82847,82866],{"__ignoreMap":37},[123,82753,82754,82756,82758,82760],{"class":125,"line":126},[123,82755,6802],{"class":129},[123,82757,79786],{"class":133},[123,82759,179],{"class":129},[123,82761,82762],{"class":238}," \"To be, or not to be, that is the question.\"\n",[123,82764,82765,82767,82769,82772,82775,82777,82780,82783],{"class":125,"line":45},[123,82766,77543],{"class":133},[123,82768,58258],{"class":1972},[123,82770,82771],{"class":133},"(str.",[123,82773,82774],{"class":1972},"includes",[123,82776,134],{"class":133},[123,82778,82779],{"class":238},"\"To be\"",[123,82781,82782],{"class":133},"))",[123,82784,82785],{"class":192},"  \u002F\u002F true\n",[123,82787,82788,82790,82792,82794,82796,82798,82801,82803],{"class":125,"line":1189},[123,82789,77543],{"class":133},[123,82791,58258],{"class":1972},[123,82793,82771],{"class":133},[123,82795,82774],{"class":1972},[123,82797,134],{"class":133},[123,82799,82800],{"class":238},"\"question\"",[123,82802,82782],{"class":133},[123,82804,82785],{"class":192},[123,82806,82807,82809,82811,82813,82815,82817,82820,82822],{"class":125,"line":1204},[123,82808,77543],{"class":133},[123,82810,58258],{"class":1972},[123,82812,82771],{"class":133},[123,82814,82774],{"class":1972},[123,82816,134],{"class":133},[123,82818,82819],{"class":238},"\"nonexistent\"",[123,82821,82782],{"class":133},[123,82823,82824],{"class":192},"  \u002F\u002F false\n",[123,82826,82827,82829,82831,82833,82835,82837,82839,82841,82843,82845],{"class":125,"line":1210},[123,82828,77543],{"class":133},[123,82830,58258],{"class":1972},[123,82832,82771],{"class":133},[123,82834,82774],{"class":1972},[123,82836,134],{"class":133},[123,82838,82779],{"class":238},[123,82840,12445],{"class":133},[123,82842,351],{"class":182},[123,82844,82782],{"class":133},[123,82846,82824],{"class":192},[123,82848,82849,82851,82853,82855,82857,82859,82862,82864],{"class":125,"line":1224},[123,82850,77543],{"class":133},[123,82852,58258],{"class":1972},[123,82854,82771],{"class":133},[123,82856,82774],{"class":1972},[123,82858,134],{"class":133},[123,82860,82861],{"class":238},"\"TO BE\"",[123,82863,82782],{"class":133},[123,82865,82824],{"class":192},[123,82867,82868,82870,82872,82874,82876,82878,82880,82882],{"class":125,"line":1230},[123,82869,77543],{"class":133},[123,82871,58258],{"class":1972},[123,82873,82771],{"class":133},[123,82875,82774],{"class":1972},[123,82877,134],{"class":133},[123,82879,7662],{"class":238},[123,82881,82782],{"class":133},[123,82883,82785],{"class":192},[22920,82885,82887],{"id":82886},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[114,82889,82891],{"className":53078,"code":82890,"language":53080,"meta":37,"style":37},"\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",[120,82892,82893,82901,82909,82914,82919,82924,82929,82934,82942],{"__ignoreMap":37},[123,82894,82895,82897,82899],{"class":125,"line":126},[123,82896,1044],{"class":133},[123,82898,51811],{"class":51311},[123,82900,51318],{"class":133},[123,82902,82903,82905,82907],{"class":125,"line":45},[123,82904,52155],{"class":133},[123,82906,51824],{"class":51311},[123,82908,51318],{"class":133},[123,82910,82911],{"class":125,"line":1189},[123,82912,82913],{"class":133},"    const num = 10\n",[123,82915,82916],{"class":125,"line":1204},[123,82917,82918],{"class":133},"    \u002F\u002F 强制转换\n",[123,82920,82921],{"class":125,"line":1210},[123,82922,82923],{"class":133},"    console.log(String(num))\n",[123,82925,82926],{"class":125,"line":1224},[123,82927,82928],{"class":133},"    \u002F\u002F toString()方法转换\n",[123,82930,82931],{"class":125,"line":1230},[123,82932,82933],{"class":133},"    console.log(num.toString())\n",[123,82935,82936,82938,82940],{"class":125,"line":1321},[123,82937,52428],{"class":133},[123,82939,51824],{"class":51311},[123,82941,51318],{"class":133},[123,82943,82944,82946,82948],{"class":125,"line":1327},[123,82945,51796],{"class":133},[123,82947,51811],{"class":51311},[123,82949,51318],{"class":133},[22920,82951,82953],{"id":82952},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,82955,82956],{},[35,82957],{"alt":37,"src":82958},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[114,82960,82962],{"className":50644,"code":82961,"language":50646,"meta":37,"style":37},"\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",[120,82963,82964,82974,82988,82992,83000,83014,83034,83046,83054,83058,83066,83078,83086,83098,83103,83108,83113,83160,83176,83184,83192,83196],{"__ignoreMap":37},[123,82965,82966,82968,82970,82972],{"class":125,"line":126},[123,82967,51308],{"class":133},[123,82969,51312],{"class":51311},[123,82971,51315],{"class":1972},[123,82973,51318],{"class":133},[123,82975,82976,82978,82980,82982,82984,82986],{"class":125,"line":45},[123,82977,1044],{"class":133},[123,82979,50646],{"class":51311},[123,82981,51327],{"class":1972},[123,82983,179],{"class":133},[123,82985,51332],{"class":238},[123,82987,51318],{"class":133},[123,82989,82990],{"class":125,"line":1189},[123,82991,2409],{"emptyLinePlaceholder":50},[123,82993,82994,82996,82998],{"class":125,"line":1204},[123,82995,1044],{"class":133},[123,82997,51345],{"class":51311},[123,82999,51318],{"class":133},[123,83001,83002,83004,83006,83008,83010,83012],{"class":125,"line":1210},[123,83003,52155],{"class":133},[123,83005,51355],{"class":51311},[123,83007,51358],{"class":1972},[123,83009,179],{"class":133},[123,83011,51363],{"class":238},[123,83013,51318],{"class":133},[123,83015,83016,83018,83020,83022,83024,83026,83028,83030,83032],{"class":125,"line":1224},[123,83017,52155],{"class":133},[123,83019,51355],{"class":51311},[123,83021,14930],{"class":1972},[123,83023,179],{"class":133},[123,83025,51402],{"class":238},[123,83027,51382],{"class":1972},[123,83029,179],{"class":133},[123,83031,51409],{"class":238},[123,83033,51318],{"class":133},[123,83035,83036,83038,83040,83042,83044],{"class":125,"line":1230},[123,83037,52155],{"class":133},[123,83039,51418],{"class":51311},[123,83041,51421],{"class":133},[123,83043,51418],{"class":51311},[123,83045,51318],{"class":133},[123,83047,83048,83050,83052],{"class":125,"line":1321},[123,83049,51796],{"class":133},[123,83051,51345],{"class":51311},[123,83053,51318],{"class":133},[123,83055,83056],{"class":125,"line":1327},[123,83057,2409],{"emptyLinePlaceholder":50},[123,83059,83060,83062,83064],{"class":125,"line":1339},[123,83061,1044],{"class":133},[123,83063,51811],{"class":51311},[123,83065,51318],{"class":133},[123,83067,83068,83070,83072,83074,83076],{"class":125,"line":1621},[123,83069,52155],{"class":133},[123,83071,51622],{"class":51311},[123,83073,55325],{"class":133},[123,83075,51622],{"class":51311},[123,83077,51318],{"class":133},[123,83079,83080,83082,83084],{"class":125,"line":1626},[123,83081,52155],{"class":133},[123,83083,51824],{"class":51311},[123,83085,51318],{"class":133},[123,83087,83088,83090,83093,83095],{"class":125,"line":1632},[123,83089,11231],{"class":129},[123,83091,83092],{"class":182}," gift",[123,83094,13574],{"class":129},[123,83096,83097],{"class":238}," '50g的茶叶，清洗球'\n",[123,83099,83100],{"class":125,"line":1637},[123,83101,83102],{"class":192},"    \u002F\u002F 1.把字符串拆分为数组\n",[123,83104,83105],{"class":125,"line":1651},[123,83106,83107],{"class":192},"    \u002F\u002F console.log(gift.split(','))\n",[123,83109,83110],{"class":125,"line":1656},[123,83111,83112],{"class":192},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[123,83114,83115,83117,83119,83121,83124,83127,83129,83132,83134,83136,83138,83140,83142,83145,83147,83150,83152,83154,83156,83158],{"class":125,"line":1662},[123,83116,11231],{"class":129},[123,83118,73930],{"class":182},[123,83120,13574],{"class":129},[123,83122,83123],{"class":133}," gift.",[123,83125,83126],{"class":1972},"split",[123,83128,134],{"class":133},[123,83130,83131],{"class":238},"'，'",[123,83133,30837],{"class":133},[123,83135,74055],{"class":1972},[123,83137,134],{"class":133},[123,83139,79806],{"class":5226},[123,83141,79809],{"class":129},[123,83143,83144],{"class":238}," `\u003Cspan>【赠品】${",[123,83146,79806],{"class":133},[123,83148,83149],{"class":238},"}\u003C\u002Fspan>\u003Cbr>`",[123,83151,30837],{"class":133},[123,83153,74234],{"class":1972},[123,83155,134],{"class":133},[123,83157,74239],{"class":238},[123,83159,140],{"class":133},[123,83161,83162,83164,83166,83168,83170,83172,83174],{"class":125,"line":1683},[123,83163,52418],{"class":133},[123,83165,54410],{"class":1972},[123,83167,134],{"class":133},[123,83169,81942],{"class":238},[123,83171,74260],{"class":133},[123,83173,179],{"class":129},[123,83175,73996],{"class":133},[123,83177,83178,83180,83182],{"class":125,"line":1688},[123,83179,52428],{"class":133},[123,83181,51824],{"class":51311},[123,83183,51318],{"class":133},[123,83185,83186,83188,83190],{"class":125,"line":1702},[123,83187,51796],{"class":133},[123,83189,51811],{"class":51311},[123,83191,51318],{"class":133},[123,83193,83194],{"class":125,"line":1707},[123,83195,2409],{"emptyLinePlaceholder":50},[123,83197,83198,83200,83202],{"class":125,"line":1736},[123,83199,51796],{"class":133},[123,83201,50646],{"class":51311},[123,83203,51318],{"class":133},[22008,83205,83207],{"id":83206},"_41054-number","4.10.5.4 Number",[14,83209,83210],{},[35,83211],{"alt":37,"src":83212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83214,83215],{},"整数也可以进行toFixed来保留小数",[14,83217,83218],{},"比如：",[14,83220,83221],{},"const price=10",[14,83223,83224],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[22008,83226,83228],{"id":83227},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83230,83231],{},[35,83232],{"alt":37,"src":83233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[114,83235,83237],{"className":50644,"code":83236,"language":50646,"meta":37,"style":37},"\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",[120,83238,83239,83249,83263,83267,83275,83289,83309,83321,83329,83335,83345,83355,83365,83369,83373,83379,83391,83405,83409,83413,83419,83431,83447,83457,83473,83477,83481,83487,83497,83507,83511,83515,83523,83535,83547,83559,83563,83567,83575,83587,83591,83595,83606,83616,83628,83640,83650,83654,83658,83666,83675,83687,83697,83707,83711,83715,83723,83732,83739,83749,83761,83765,83769,83778,83788,83799,83811,83823,83827,83831,83840,83850,83861,83865,83869,83875,83887,83899,83909,83919,83937,83949,83953,83957,83966,83978,83988,83998,84010,84014,84022,84030,84034,84042,84056,84064,84078,84106,84114,84122,84132,84136,84144,84152,84161,84169,84178,84188,84192,84196,84204,84212,84221,84229,84237,84250,84254,84258,84266,84274,84283,84291,84299,84314,84318,84322,84330,84338,84347,84355,84363,84377,84385,84389,84393,84398,84424,84429,84466,84471,84494,84499,84553,84558,84594,84598,84604,84609,84618,84632,84641,84660,84669,84679,84684,84689,84702,84707,84761,84787,84795,84803,84807],{"__ignoreMap":37},[123,83240,83241,83243,83245,83247],{"class":125,"line":126},[123,83242,51308],{"class":133},[123,83244,51312],{"class":51311},[123,83246,51315],{"class":1972},[123,83248,51318],{"class":133},[123,83250,83251,83253,83255,83257,83259,83261],{"class":125,"line":45},[123,83252,1044],{"class":133},[123,83254,50646],{"class":51311},[123,83256,51327],{"class":1972},[123,83258,179],{"class":133},[123,83260,51332],{"class":238},[123,83262,51318],{"class":133},[123,83264,83265],{"class":125,"line":1189},[123,83266,2409],{"emptyLinePlaceholder":50},[123,83268,83269,83271,83273],{"class":125,"line":1204},[123,83270,1044],{"class":133},[123,83272,51345],{"class":51311},[123,83274,51318],{"class":133},[123,83276,83277,83279,83281,83283,83285,83287],{"class":125,"line":1210},[123,83278,52155],{"class":133},[123,83280,51355],{"class":51311},[123,83282,51358],{"class":1972},[123,83284,179],{"class":133},[123,83286,51363],{"class":238},[123,83288,51318],{"class":133},[123,83290,83291,83293,83295,83297,83299,83301,83303,83305,83307],{"class":125,"line":1224},[123,83292,52155],{"class":133},[123,83294,51355],{"class":51311},[123,83296,14930],{"class":1972},[123,83298,179],{"class":133},[123,83300,51402],{"class":238},[123,83302,51382],{"class":1972},[123,83304,179],{"class":133},[123,83306,51409],{"class":238},[123,83308,51318],{"class":133},[123,83310,83311,83313,83315,83317,83319],{"class":125,"line":1230},[123,83312,52155],{"class":133},[123,83314,51418],{"class":51311},[123,83316,51421],{"class":133},[123,83318,51418],{"class":51311},[123,83320,51318],{"class":133},[123,83322,83323,83325,83327],{"class":125,"line":1321},[123,83324,52155],{"class":133},[123,83326,5136],{"class":51311},[123,83328,51318],{"class":133},[123,83330,83331,83333],{"class":125,"line":1327},[123,83332,6413],{"class":51311},[123,83334,15582],{"class":133},[123,83336,83337,83339,83341,83343],{"class":125,"line":1339},[123,83338,54706],{"class":182},[123,83340,51448],{"class":133},[123,83342,325],{"class":182},[123,83344,1300],{"class":133},[123,83346,83347,83349,83351,83353],{"class":125,"line":1621},[123,83348,54717],{"class":182},[123,83350,51448],{"class":133},[123,83352,325],{"class":182},[123,83354,1300],{"class":133},[123,83356,83357,83359,83361,83363],{"class":125,"line":1626},[123,83358,72607],{"class":182},[123,83360,51448],{"class":133},[123,83362,60516],{"class":182},[123,83364,1300],{"class":133},[123,83366,83367],{"class":125,"line":1632},[123,83368,2196],{"class":133},[123,83370,83371],{"class":125,"line":1637},[123,83372,2409],{"emptyLinePlaceholder":50},[123,83374,83375,83377],{"class":125,"line":1651},[123,83376,62134],{"class":1972},[123,83378,15582],{"class":133},[123,83380,83381,83383,83385,83387,83389],{"class":125,"line":1656},[123,83382,54782],{"class":182},[123,83384,51448],{"class":133},[123,83386,78585],{"class":182},[123,83388,51503],{"class":129},[123,83390,1300],{"class":133},[123,83392,83393,83395,83397,83399,83401,83403],{"class":125,"line":1662},[123,83394,54717],{"class":182},[123,83396,51448],{"class":133},[123,83398,445],{"class":182},[123,83400,51503],{"class":129},[123,83402,51567],{"class":182},[123,83404,1300],{"class":133},[123,83406,83407],{"class":125,"line":1683},[123,83408,2196],{"class":133},[123,83410,83411],{"class":125,"line":1688},[123,83412,2409],{"emptyLinePlaceholder":50},[123,83414,83415,83417],{"class":125,"line":1702},[123,83416,78636],{"class":1972},[123,83418,15582],{"class":133},[123,83420,83421,83423,83425,83427,83429],{"class":125,"line":1707},[123,83422,54706],{"class":182},[123,83424,51448],{"class":133},[123,83426,709],{"class":182},[123,83428,51503],{"class":129},[123,83430,1300],{"class":133},[123,83432,83433,83435,83437,83439,83441,83443,83445],{"class":125,"line":1736},[123,83434,61871],{"class":182},[123,83436,51448],{"class":133},[123,83438,28132],{"class":182},[123,83440,78691],{"class":182},[123,83442,78694],{"class":182},[123,83444,829],{"class":129},[123,83446,1300],{"class":133},[123,83448,83449,83451,83453,83455],{"class":125,"line":1741},[123,83450,55020],{"class":182},[123,83452,51448],{"class":133},[123,83454,51488],{"class":182},[123,83456,1300],{"class":133},[123,83458,83459,83461,83463,83465,83467,83469,83471],{"class":125,"line":1758},[123,83460,61988],{"class":182},[123,83462,51448],{"class":133},[123,83464,351],{"class":182},[123,83466,51503],{"class":129},[123,83468,51532],{"class":182},[123,83470,62255],{"class":182},[123,83472,1300],{"class":133},[123,83474,83475],{"class":125,"line":1763},[123,83476,2196],{"class":133},[123,83478,83479],{"class":125,"line":1768},[123,83480,2409],{"emptyLinePlaceholder":50},[123,83482,83483,83485],{"class":125,"line":1773},[123,83484,78754],{"class":1972},[123,83486,15582],{"class":133},[123,83488,83489,83491,83493,83495],{"class":125,"line":1787},[123,83490,62036],{"class":182},[123,83492,51448],{"class":133},[123,83494,62041],{"class":182},[123,83496,1300],{"class":133},[123,83498,83499,83501,83503,83505],{"class":125,"line":1792},[123,83500,54895],{"class":182},[123,83502,51448],{"class":133},[123,83504,61829],{"class":182},[123,83506,1300],{"class":133},[123,83508,83509],{"class":125,"line":2586},[123,83510,2196],{"class":133},[123,83512,83513],{"class":125,"line":2600},[123,83514,2409],{"emptyLinePlaceholder":50},[123,83516,83517,83519,83521],{"class":125,"line":2608},[123,83518,78636],{"class":1972},[123,83520,55626],{"class":51311},[123,83522,15582],{"class":133},[123,83524,83525,83527,83529,83531,83533],{"class":125,"line":2613},[123,83526,54782],{"class":182},[123,83528,51448],{"class":133},[123,83530,746],{"class":182},[123,83532,51503],{"class":129},[123,83534,1300],{"class":133},[123,83536,83537,83539,83541,83543,83545],{"class":125,"line":2619},[123,83538,54796],{"class":182},[123,83540,51448],{"class":133},[123,83542,746],{"class":182},[123,83544,51503],{"class":129},[123,83546,1300],{"class":133},[123,83548,83549,83551,83553,83555,83557],{"class":125,"line":2625},[123,83550,61761],{"class":182},[123,83552,51448],{"class":133},[123,83554,453],{"class":182},[123,83556,51503],{"class":129},[123,83558,1300],{"class":133},[123,83560,83561],{"class":125,"line":2630},[123,83562,2196],{"class":133},[123,83564,83565],{"class":125,"line":7958},[123,83566,2409],{"emptyLinePlaceholder":50},[123,83568,83569,83571,83573],{"class":125,"line":7982},[123,83570,78636],{"class":1972},[123,83572,62315],{"class":1972},[123,83574,15582],{"class":133},[123,83576,83577,83579,83581,83583,83585],{"class":125,"line":7987},[123,83578,54782],{"class":182},[123,83580,51448],{"class":133},[123,83582,1731],{"class":182},[123,83584,51503],{"class":129},[123,83586,1300],{"class":133},[123,83588,83589],{"class":125,"line":7993},[123,83590,2196],{"class":133},[123,83592,83593],{"class":125,"line":8020},[123,83594,2409],{"emptyLinePlaceholder":50},[123,83596,83597,83599,83601,83604],{"class":125,"line":8025},[123,83598,78636],{"class":1972},[123,83600,62315],{"class":1972},[123,83602,83603],{"class":1972}," .tag",[123,83605,15582],{"class":133},[123,83607,83608,83610,83612,83614],{"class":125,"line":8031},[123,83609,55020],{"class":182},[123,83611,51448],{"class":133},[123,83613,60880],{"class":182},[123,83615,1300],{"class":133},[123,83617,83618,83620,83622,83624,83626],{"class":125,"line":8043},[123,83619,54706],{"class":182},[123,83621,51448],{"class":133},[123,83623,211],{"class":182},[123,83625,51503],{"class":129},[123,83627,1300],{"class":133},[123,83629,83630,83632,83634,83636,83638],{"class":125,"line":8055},[123,83631,54933],{"class":182},[123,83633,51448],{"class":133},[123,83635,632],{"class":182},[123,83637,51503],{"class":129},[123,83639,1300],{"class":133},[123,83641,83642,83644,83646,83648],{"class":125,"line":8067},[123,83643,57427],{"class":182},[123,83645,51448],{"class":133},[123,83647,62081],{"class":182},[123,83649,1300],{"class":133},[123,83651,83652],{"class":125,"line":9726},[123,83653,2196],{"class":133},[123,83655,83656],{"class":125,"line":9751},[123,83657,2409],{"emptyLinePlaceholder":50},[123,83659,83660,83662,83664],{"class":125,"line":9774},[123,83661,78636],{"class":1972},[123,83663,78928],{"class":1972},[123,83665,31477],{"class":133},[123,83667,83668,83670,83673],{"class":125,"line":9798},[123,83669,78636],{"class":1972},[123,83671,83672],{"class":1972}," .sub-total",[123,83674,15582],{"class":133},[123,83676,83677,83679,83681,83683,83685],{"class":125,"line":9803},[123,83678,54933],{"class":182},[123,83680,51448],{"class":133},[123,83682,784],{"class":182},[123,83684,51503],{"class":129},[123,83686,1300],{"class":133},[123,83688,83689,83691,83693,83695],{"class":125,"line":9808},[123,83690,57427],{"class":182},[123,83692,51448],{"class":133},[123,83694,78951],{"class":182},[123,83696,1300],{"class":133},[123,83698,83699,83701,83703,83705],{"class":125,"line":9813},[123,83700,61848],{"class":182},[123,83702,51448],{"class":133},[123,83704,351],{"class":182},[123,83706,1300],{"class":133},[123,83708,83709],{"class":125,"line":9822},[123,83710,2196],{"class":133},[123,83712,83713],{"class":125,"line":9827},[123,83714,2409],{"emptyLinePlaceholder":50},[123,83716,83717,83719,83721],{"class":125,"line":9833},[123,83718,78636],{"class":1972},[123,83720,78968],{"class":1972},[123,83722,31477],{"class":133},[123,83724,83725,83727,83730],{"class":125,"line":9854},[123,83726,78636],{"class":1972},[123,83728,83729],{"class":1972}," .sub-total::before",[123,83731,31477],{"class":133},[123,83733,83734,83737],{"class":125,"line":9860},[123,83735,83736],{"class":1972},"    .amount::before",[123,83738,15582],{"class":133},[123,83740,83741,83743,83745,83747],{"class":125,"line":9874},[123,83742,78975],{"class":182},[123,83744,51448],{"class":133},[123,83746,78980],{"class":238},[123,83748,1300],{"class":133},[123,83750,83751,83753,83755,83757,83759],{"class":125,"line":9880},[123,83752,54933],{"class":182},[123,83754,51448],{"class":133},[123,83756,632],{"class":182},[123,83758,51503],{"class":129},[123,83760,1300],{"class":133},[123,83762,83763],{"class":125,"line":9907},[123,83764,2196],{"class":133},[123,83766,83767],{"class":125,"line":9916},[123,83768,2409],{"emptyLinePlaceholder":50},[123,83770,83771,83773,83776],{"class":125,"line":9922},[123,83772,78636],{"class":1972},[123,83774,83775],{"class":1972}," .spec",[123,83777,15582],{"class":133},[123,83779,83780,83782,83784,83786],{"class":125,"line":9930},[123,83781,61848],{"class":182},[123,83783,51448],{"class":133},[123,83785,211],{"class":182},[123,83787,1300],{"class":133},[123,83789,83790,83792,83794,83797],{"class":125,"line":9935},[123,83791,57427],{"class":182},[123,83793,51448],{"class":133},[123,83795,83796],{"class":182},"#888",[123,83798,1300],{"class":133},[123,83800,83801,83803,83805,83807,83809],{"class":125,"line":16614},[123,83802,54933],{"class":182},[123,83804,51448],{"class":133},[123,83806,683],{"class":182},[123,83808,51503],{"class":129},[123,83810,1300],{"class":133},[123,83812,83813,83815,83817,83819,83821],{"class":125,"line":16620},[123,83814,62011],{"class":182},[123,83816,51448],{"class":133},[123,83818,834],{"class":182},[123,83820,51503],{"class":129},[123,83822,1300],{"class":133},[123,83824,83825],{"class":125,"line":16643},[123,83826,2196],{"class":133},[123,83828,83829],{"class":125,"line":16649},[123,83830,2409],{"emptyLinePlaceholder":50},[123,83832,83833,83835,83838],{"class":125,"line":16672},[123,83834,78636],{"class":1972},[123,83836,83837],{"class":1972}," .count",[123,83839,15582],{"class":133},[123,83841,83842,83844,83846,83848],{"class":125,"line":16686},[123,83843,61848],{"class":182},[123,83845,51448],{"class":133},[123,83847,351],{"class":182},[123,83849,1300],{"class":133},[123,83851,83852,83854,83856,83859],{"class":125,"line":16706},[123,83853,57427],{"class":182},[123,83855,51448],{"class":133},[123,83857,83858],{"class":182},"#aaa",[123,83860,1300],{"class":133},[123,83862,83863],{"class":125,"line":16712},[123,83864,2196],{"class":133},[123,83866,83867],{"class":125,"line":16723},[123,83868,2409],{"emptyLinePlaceholder":50},[123,83870,83871,83873],{"class":125,"line":16746},[123,83872,72486],{"class":1972},[123,83874,15582],{"class":133},[123,83876,83877,83879,83881,83883,83885],{"class":125,"line":16768},[123,83878,54782],{"class":182},[123,83880,51448],{"class":133},[123,83882,78585],{"class":182},[123,83884,51503],{"class":129},[123,83886,1300],{"class":133},[123,83888,83889,83891,83893,83895,83897],{"class":125,"line":16773},[123,83890,54717],{"class":182},[123,83892,51448],{"class":133},[123,83894,325],{"class":182},[123,83896,51567],{"class":182},[123,83898,1300],{"class":133},[123,83900,83901,83903,83905,83907],{"class":125,"line":16779},[123,83902,55020],{"class":182},[123,83904,51448],{"class":133},[123,83906,51488],{"class":182},[123,83908,1300],{"class":133},[123,83910,83911,83913,83915,83917],{"class":125,"line":16793},[123,83912,55031],{"class":182},[123,83914,51448],{"class":133},[123,83916,51591],{"class":182},[123,83918,1300],{"class":133},[123,83920,83921,83924,83926,83928,83930,83932,83935],{"class":125,"line":16806},[123,83922,83923],{"class":182},"      border-top",[123,83925,51448],{"class":133},[123,83927,351],{"class":182},[123,83929,51503],{"class":129},[123,83931,51532],{"class":182},[123,83933,83934],{"class":182}," #4e4e4e",[123,83936,1300],{"class":133},[123,83938,83939,83941,83943,83945,83947],{"class":125,"line":16811},[123,83940,54706],{"class":182},[123,83942,51448],{"class":133},[123,83944,834],{"class":182},[123,83946,51503],{"class":129},[123,83948,1300],{"class":133},[123,83950,83951],{"class":125,"line":16825},[123,83952,2196],{"class":133},[123,83954,83955],{"class":125,"line":16830},[123,83956,2409],{"emptyLinePlaceholder":50},[123,83958,83959,83961,83964],{"class":125,"line":16836},[123,83960,72486],{"class":1972},[123,83962,83963],{"class":1972}," .amount",[123,83965,15582],{"class":133},[123,83967,83968,83970,83972,83974,83976],{"class":125,"line":16841},[123,83969,54933],{"class":182},[123,83971,51448],{"class":133},[123,83973,784],{"class":182},[123,83975,51503],{"class":129},[123,83977,1300],{"class":133},[123,83979,83980,83982,83984,83986],{"class":125,"line":16855},[123,83981,57427],{"class":182},[123,83983,51448],{"class":133},[123,83985,78951],{"class":182},[123,83987,1300],{"class":133},[123,83989,83990,83992,83994,83996],{"class":125,"line":16860},[123,83991,62345],{"class":182},[123,83993,51448],{"class":133},[123,83995,51500],{"class":182},[123,83997,1300],{"class":133},[123,83999,84000,84002,84004,84006,84008],{"class":125,"line":16865},[123,84001,61761],{"class":182},[123,84003,51448],{"class":133},[123,84005,790],{"class":182},[123,84007,51503],{"class":129},[123,84009,1300],{"class":133},[123,84011,84012],{"class":125,"line":16879},[123,84013,2196],{"class":133},[123,84015,84016,84018,84020],{"class":125,"line":16891},[123,84017,52428],{"class":133},[123,84019,5136],{"class":51311},[123,84021,51318],{"class":133},[123,84023,84024,84026,84028],{"class":125,"line":16896},[123,84025,51796],{"class":133},[123,84027,51345],{"class":51311},[123,84029,51318],{"class":133},[123,84031,84032],{"class":125,"line":16909},[123,84033,2409],{"emptyLinePlaceholder":50},[123,84035,84036,84038,84040],{"class":125,"line":16914},[123,84037,1044],{"class":133},[123,84039,51811],{"class":51311},[123,84041,51318],{"class":133},[123,84043,84044,84046,84048,84050,84052,84054],{"class":125,"line":16919},[123,84045,52155],{"class":133},[123,84047,51622],{"class":51311},[123,84049,53497],{"class":1972},[123,84051,179],{"class":133},[123,84053,62619],{"class":238},[123,84055,51318],{"class":133},[123,84057,84058,84060,84062],{"class":125,"line":16924},[123,84059,52428],{"class":133},[123,84061,51622],{"class":51311},[123,84063,51318],{"class":133},[123,84065,84066,84068,84070,84072,84074,84076],{"class":125,"line":16937},[123,84067,52155],{"class":133},[123,84069,51622],{"class":51311},[123,84071,53497],{"class":1972},[123,84073,179],{"class":133},[123,84075,62591],{"class":238},[123,84077,51318],{"class":133},[123,84079,84080,84082,84084,84087,84089,84091,84093,84096,84098,84100,84102,84104],{"class":125,"line":16942},[123,84081,51352],{"class":133},[123,84083,51622],{"class":51311},[123,84085,84086],{"class":133},">合计：\u003C",[123,84088,123],{"class":51311},[123,84090,53497],{"class":1972},[123,84092,179],{"class":133},[123,84094,84095],{"class":238},"\"amount\"",[123,84097,55325],{"class":133},[123,84099,123],{"class":51311},[123,84101,55325],{"class":133},[123,84103,51622],{"class":51311},[123,84105,51318],{"class":133},[123,84107,84108,84110,84112],{"class":125,"line":32644},[123,84109,52428],{"class":133},[123,84111,51622],{"class":51311},[123,84113,51318],{"class":133},[123,84115,84116,84118,84120],{"class":125,"line":32650},[123,84117,52155],{"class":133},[123,84119,51824],{"class":51311},[123,84121,51318],{"class":133},[123,84123,84124,84126,84128,84130],{"class":125,"line":32656},[123,84125,11231],{"class":129},[123,84127,79388],{"class":182},[123,84129,13574],{"class":129},[123,84131,55458],{"class":133},[123,84133,84134],{"class":125,"line":32662},[123,84135,79397],{"class":133},[123,84137,84138,84140,84142],{"class":125,"line":32668},[123,84139,79402],{"class":133},[123,84141,79405],{"class":238},[123,84143,31477],{"class":133},[123,84145,84146,84148,84150],{"class":125,"line":32679},[123,84147,79412],{"class":133},[123,84149,79415],{"class":238},[123,84151,31477],{"class":133},[123,84153,84154,84156,84159],{"class":125,"line":32685},[123,84155,79422],{"class":133},[123,84157,84158],{"class":182},"289.9",[123,84160,31477],{"class":133},[123,84162,84163,84165,84167],{"class":125,"line":32705},[123,84164,79432],{"class":133},[123,84166,79435],{"class":238},[123,84168,31477],{"class":133},[123,84170,84171,84174,84176],{"class":125,"line":32711},[123,84172,84173],{"class":133},"        count: ",[123,84175,211],{"class":182},[123,84177,31477],{"class":133},[123,84179,84180,84183,84186],{"class":125,"line":32722},[123,84181,84182],{"class":133},"        spec: { color: ",[123,84184,84185],{"class":238},"'白色'",[123,84187,55615],{"class":133},[123,84189,84190],{"class":125,"line":32728},[123,84191,77903],{"class":133},[123,84193,84194],{"class":125,"line":32734},[123,84195,79397],{"class":133},[123,84197,84198,84200,84202],{"class":125,"line":32740},[123,84199,79402],{"class":133},[123,84201,79496],{"class":238},[123,84203,31477],{"class":133},[123,84205,84206,84208,84210],{"class":125,"line":32746},[123,84207,79412],{"class":133},[123,84209,79505],{"class":238},[123,84211,31477],{"class":133},[123,84213,84214,84216,84219],{"class":125,"line":32752},[123,84215,79422],{"class":133},[123,84217,84218],{"class":182},"109.8",[123,84220,31477],{"class":133},[123,84222,84223,84225,84227],{"class":125,"line":32758},[123,84224,79432],{"class":133},[123,84226,79523],{"class":238},[123,84228,31477],{"class":133},[123,84230,84231,84233,84235],{"class":125,"line":32764},[123,84232,84173],{"class":133},[123,84234,205],{"class":182},[123,84236,31477],{"class":133},[123,84238,84239,84242,84244,84246,84248],{"class":125,"line":32784},[123,84240,84241],{"class":133},"        spec: { size: ",[123,84243,81914],{"class":238},[123,84245,55475],{"class":133},[123,84247,81919],{"class":238},[123,84249,55615],{"class":133},[123,84251,84252],{"class":125,"line":32790},[123,84253,77903],{"class":133},[123,84255,84256],{"class":125,"line":32806},[123,84257,79397],{"class":133},[123,84259,84260,84262,84264],{"class":125,"line":32812},[123,84261,79402],{"class":133},[123,84263,79540],{"class":238},[123,84265,31477],{"class":133},[123,84267,84268,84270,84272],{"class":125,"line":32826},[123,84269,79412],{"class":133},[123,84271,79549],{"class":238},[123,84273,31477],{"class":133},[123,84275,84276,84278,84281],{"class":125,"line":32832},[123,84277,79422],{"class":133},[123,84279,84280],{"class":182},"488",[123,84282,31477],{"class":133},[123,84284,84285,84287,84289],{"class":125,"line":32847},[123,84286,79432],{"class":133},[123,84288,79567],{"class":238},[123,84290,31477],{"class":133},[123,84292,84293,84295,84297],{"class":125,"line":32853},[123,84294,84173],{"class":133},[123,84296,351],{"class":182},[123,84298,31477],{"class":133},[123,84300,84301,84303,84306,84309,84312],{"class":125,"line":32862},[123,84302,84182],{"class":133},[123,84304,84305],{"class":238},"'青色'",[123,84307,84308],{"class":133},", sum: ",[123,84310,84311],{"class":238},"'一大四小'",[123,84313,55615],{"class":133},[123,84315,84316],{"class":125,"line":32868},[123,84317,77903],{"class":133},[123,84319,84320],{"class":125,"line":32877},[123,84321,79397],{"class":133},[123,84323,84324,84326,84328],{"class":125,"line":32883},[123,84325,79402],{"class":133},[123,84327,79584],{"class":238},[123,84329,31477],{"class":133},[123,84331,84332,84334,84336],{"class":125,"line":32889},[123,84333,79412],{"class":133},[123,84335,79593],{"class":238},[123,84337,31477],{"class":133},[123,84339,84340,84342,84345],{"class":125,"line":32898},[123,84341,79422],{"class":133},[123,84343,84344],{"class":182},"139",[123,84346,31477],{"class":133},[123,84348,84349,84351,84353],{"class":125,"line":32904},[123,84350,79432],{"class":133},[123,84352,79611],{"class":238},[123,84354,31477],{"class":133},[123,84356,84357,84359,84361],{"class":125,"line":32915},[123,84358,84173],{"class":133},[123,84360,351],{"class":182},[123,84362,31477],{"class":133},[123,84364,84365,84367,84370,84372,84375],{"class":125,"line":32921},[123,84366,84241],{"class":133},[123,84368,84369],{"class":238},"'小号'",[123,84371,55475],{"class":133},[123,84373,84374],{"class":238},"'紫色'",[123,84376,55481],{"class":133},[123,84378,84379,84382],{"class":125,"line":32940},[123,84380,84381],{"class":133},"        gift: ",[123,84383,84384],{"class":238},"'50g茶叶,清洗球'\n",[123,84386,84387],{"class":125,"line":32946},[123,84388,52409],{"class":133},[123,84390,84391],{"class":125,"line":32957},[123,84392,53120],{"class":133},[123,84394,84395],{"class":125,"line":32963},[123,84396,84397],{"class":192},"    \u002F\u002F  1.根据数据渲染页面\n",[123,84399,84400,84402,84404,84406,84408,84410,84412,84414,84416,84418,84420,84422],{"class":125,"line":32983},[123,84401,52418],{"class":133},[123,84403,54410],{"class":1972},[123,84405,134],{"class":133},[123,84407,79912],{"class":238},[123,84409,74260],{"class":133},[123,84411,179],{"class":129},[123,84413,80059],{"class":133},[123,84415,74055],{"class":1972},[123,84417,134],{"class":133},[123,84419,79806],{"class":5226},[123,84421,79809],{"class":129},[123,84423,15582],{"class":133},[123,84425,84426],{"class":125,"line":32999},[123,84427,84428],{"class":192},"      \u002F\u002F 对象解构\n",[123,84430,84431,84433,84435,84437,84439,84441,84443,84446,84448,84450,84452,84455,84457,84460,84462,84464],{"class":125,"line":33005},[123,84432,58239],{"class":129},[123,84434,79818],{"class":133},[123,84436,79831],{"class":182},[123,84438,12445],{"class":133},[123,84440,79821],{"class":182},[123,84442,12445],{"class":133},[123,84444,84445],{"class":182},"count",[123,84447,12445],{"class":133},[123,84449,79826],{"class":182},[123,84451,12445],{"class":133},[123,84453,84454],{"class":182},"spec",[123,84456,12445],{"class":133},[123,84458,84459],{"class":182},"gift",[123,84461,79834],{"class":133},[123,84463,179],{"class":129},[123,84465,79839],{"class":133},[123,84467,84468],{"class":125,"line":33019},[123,84469,84470],{"class":192},"      \u002F\u002F 规格文字模块处理\n",[123,84472,84473,84475,84478,84480,84482,84484,84486,84488,84490,84492],{"class":125,"line":33025},[123,84474,58239],{"class":129},[123,84476,84477],{"class":182}," text",[123,84479,13574],{"class":129},[123,84481,81949],{"class":133},[123,84483,81952],{"class":1972},[123,84485,81955],{"class":133},[123,84487,74234],{"class":1972},[123,84489,134],{"class":133},[123,84491,81962],{"class":238},[123,84493,140],{"class":133},[123,84495,84496],{"class":125,"line":33031},[123,84497,84498],{"class":192},"      \u002F\u002F 处理赠品模块\n",[123,84500,84501,84503,84505,84507,84510,84512,84514,84516,84518,84521,84523,84525,84527,84529,84531,84534,84536,84539,84541,84543,84545,84547,84549,84551],{"class":125,"line":33042},[123,84502,58239],{"class":129},[123,84504,73930],{"class":182},[123,84506,13574],{"class":129},[123,84508,84509],{"class":133}," gift ",[123,84511,1120],{"class":129},[123,84513,83123],{"class":133},[123,84515,83126],{"class":1972},[123,84517,134],{"class":133},[123,84519,84520],{"class":238},"','",[123,84522,30837],{"class":133},[123,84524,74055],{"class":1972},[123,84526,134],{"class":133},[123,84528,79806],{"class":5226},[123,84530,79809],{"class":129},[123,84532,84533],{"class":238}," `\u003Cspan class=\"tag\">【赠品】${",[123,84535,79806],{"class":133},[123,84537,84538],{"class":238},"}\u003C\u002Fspan>`",[123,84540,30837],{"class":133},[123,84542,74234],{"class":1972},[123,84544,134],{"class":133},[123,84546,74239],{"class":238},[123,84548,13724],{"class":133},[123,84550,993],{"class":129},[123,84552,70115],{"class":238},[123,84554,84555],{"class":125,"line":33048},[123,84556,84557],{"class":192},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[123,84559,84560,84562,84565,84567,84570,84572,84574,84576,84579,84581,84583,84585,84588,84590,84592],{"class":125,"line":33054},[123,84561,58239],{"class":129},[123,84563,84564],{"class":182}," subtotal",[123,84566,13574],{"class":129},[123,84568,84569],{"class":133}," ((price ",[123,84571,589],{"class":129},[123,84573,5764],{"class":182},[123,84575,6528],{"class":129},[123,84577,84578],{"class":133}," count) ",[123,84580,718],{"class":129},[123,84582,5764],{"class":182},[123,84584,30837],{"class":133},[123,84586,84587],{"class":1972},"toFixed",[123,84589,134],{"class":133},[123,84591,211],{"class":182},[123,84593,140],{"class":133},[123,84595,84596],{"class":125,"line":33064},[123,84597,2409],{"emptyLinePlaceholder":50},[123,84599,84600,84602],{"class":125,"line":33070},[123,84601,73993],{"class":129},[123,84603,70179],{"class":238},[123,84605,84606],{"class":125,"line":33081},[123,84607,84608],{"class":238},"        \u003Cdiv class=\"item\">\n",[123,84610,84611,84614,84616],{"class":125,"line":33087},[123,84612,84613],{"class":238},"          \u003Cimg src=\"${",[123,84615,79831],{"class":133},[123,84617,79863],{"class":238},[123,84619,84620,84623,84625,84628,84630],{"class":125,"line":33097},[123,84621,84622],{"class":238},"          \u003Cp class=\"name\">${",[123,84624,79821],{"class":133},[123,84626,84627],{"class":238},"}${",[123,84629,1309],{"class":133},[123,84631,79873],{"class":238},[123,84633,84634,84637,84639],{"class":125,"line":33102},[123,84635,84636],{"class":238},"          \u003Cp class=\"spec\">${",[123,84638,5197],{"class":133},[123,84640,79873],{"class":238},[123,84642,84643,84646,84648,84650,84652,84654,84656,84658],{"class":125,"line":33108},[123,84644,84645],{"class":238},"          \u003Cp class=\"price\">${",[123,84647,79826],{"class":133},[123,84649,692],{"class":238},[123,84651,84587],{"class":1972},[123,84653,134],{"class":238},[123,84655,211],{"class":182},[123,84657,563],{"class":238},[123,84659,79873],{"class":238},[123,84661,84662,84665,84667],{"class":125,"line":33157},[123,84663,84664],{"class":238},"          \u003Cp class=\"count\">x${",[123,84666,84445],{"class":133},[123,84668,79873],{"class":238},[123,84670,84671,84674,84677],{"class":125,"line":33204},[123,84672,84673],{"class":238},"          \u003Cp class=\"sub-total\">${",[123,84675,84676],{"class":133},"subtotal",[123,84678,79873],{"class":238},[123,84680,84681],{"class":125,"line":33209},[123,84682,84683],{"class":238},"        \u003C\u002Fdiv> \n",[123,84685,84686],{"class":125,"line":33215},[123,84687,84688],{"class":238},"             `\n",[123,84690,84691,84694,84696,84698,84700],{"class":125,"line":33234},[123,84692,84693],{"class":133},"    }).",[123,84695,74234],{"class":1972},[123,84697,134],{"class":133},[123,84699,74239],{"class":238},[123,84701,140],{"class":133},[123,84703,84704],{"class":125,"line":33240},[123,84705,84706],{"class":192},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[123,84708,84709,84711,84713,84715,84717,84720,84722,84725,84727,84729,84731,84734,84737,84739,84742,84744,84746,84748,84751,84753,84755,84757,84759],{"class":125,"line":33260},[123,84710,11231],{"class":129},[123,84712,62796],{"class":182},[123,84714,13574],{"class":129},[123,84716,80059],{"class":133},[123,84718,84719],{"class":1972},"reduce",[123,84721,2385],{"class":133},[123,84723,84724],{"class":5226},"prev",[123,84726,12445],{"class":133},[123,84728,79806],{"class":5226},[123,84730,13724],{"class":133},[123,84732,84733],{"class":129},"=>",[123,84735,84736],{"class":133}," prev ",[123,84738,615],{"class":129},[123,84740,84741],{"class":133}," (item.price ",[123,84743,589],{"class":129},[123,84745,5764],{"class":182},[123,84747,6528],{"class":129},[123,84749,84750],{"class":133}," item.count) ",[123,84752,718],{"class":129},[123,84754,5764],{"class":182},[123,84756,12445],{"class":133},[123,84758,325],{"class":182},[123,84760,140],{"class":133},[123,84762,84763,84765,84767,84769,84772,84774,84776,84779,84781,84783,84785],{"class":125,"line":33266},[123,84764,52418],{"class":133},[123,84766,54410],{"class":1972},[123,84768,134],{"class":133},[123,84770,84771],{"class":238},"'.amount'",[123,84773,74260],{"class":133},[123,84775,179],{"class":129},[123,84777,84778],{"class":133}," total.",[123,84780,84587],{"class":1972},[123,84782,134],{"class":133},[123,84784,211],{"class":182},[123,84786,140],{"class":133},[123,84788,84789,84791,84793],{"class":125,"line":33272},[123,84790,52428],{"class":133},[123,84792,51824],{"class":51311},[123,84794,51318],{"class":133},[123,84796,84797,84799,84801],{"class":125,"line":33282},[123,84798,51796],{"class":133},[123,84800,51811],{"class":51311},[123,84802,51318],{"class":133},[123,84804,84805],{"class":125,"line":33287},[123,84806,2409],{"emptyLinePlaceholder":50},[123,84808,84809,84811,84813],{"class":125,"line":33293},[123,84810,51796],{"class":133},[123,84812,50646],{"class":51311},[123,84814,51318],{"class":133},[65,84816,84818],{"id":84817},"_411-编程思想","4.11 编程思想",[94,84820,84822],{"id":84821},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,84824,84825,84828],{},[283,84826,84827],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,84830,84831],{},"调用就可以了",[14,84833,84834],{},[35,84835],{"alt":37,"src":84836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[94,84838,84840],{"id":84839},"_4112-面向对象","4.11.2 面向对象",[14,84842,84843],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,84845,84846],{},[35,84847],{"alt":37,"src":84848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,84850,84851],{},"面向对象的特性：",[1141,84853,84854,84857,84860],{},[80,84855,84856],{},"封装性",[80,84858,84859],{},"继承性",[80,84861,84862],{},"多态性",[94,84864,84866],{"id":84865},"_4113-两者比较","4.11.3 两者比较",[14,84868,84869],{},[35,84870],{"alt":37,"src":84871},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[65,84873,84875],{"id":84874},"_412-构造函数回顾","4.12 构造函数回顾",[14,84877,84878],{},[35,84879],{"alt":37,"src":84880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,84882,84883],{},[35,84884],{"alt":37,"src":84885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,84887,84888],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,84890,84891],{},[35,84892],{"alt":37,"src":84893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[65,84895,84897],{"id":84896},"_413-原型","4.13 原型",[94,84899,84901],{"id":84900},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,84903,84904],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,84906,84907],{},[35,84908],{"alt":37,"src":84909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,84911,84912],{},[35,84913],{"alt":37,"src":84914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,84916,84917],{},"原型是构造函数的属性，它也是一个对象",[14,84919,84920],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,84922,84923],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[114,84925,84927],{"className":53078,"code":84926,"language":53080,"meta":37,"style":37},"\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",[120,84928,84929,84937,84942,84950,84955,84960,84965,84970,84975,84979,84983,84987,84992,84997,85001,85006,85011,85016,85021,85026,85030,85038],{"__ignoreMap":37},[123,84930,84931,84933,84935],{"class":125,"line":126},[123,84932,1044],{"class":133},[123,84934,51811],{"class":51311},[123,84936,51318],{"class":133},[123,84938,84939],{"class":125,"line":45},[123,84940,84941],{"class":192},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[123,84943,84944,84946,84948],{"class":125,"line":1189},[123,84945,52155],{"class":133},[123,84947,51824],{"class":51311},[123,84949,51318],{"class":133},[123,84951,84952],{"class":125,"line":1204},[123,84953,84954],{"class":133},"    function Star(uname, age) {\n",[123,84956,84957],{"class":125,"line":1210},[123,84958,84959],{"class":133},"      this.uname = uname,\n",[123,84961,84962],{"class":125,"line":1224},[123,84963,84964],{"class":133},"        this.age = age\n",[123,84966,84967],{"class":125,"line":1230},[123,84968,84969],{"class":133},"      \u002F\u002F this.sing = function () {\n",[123,84971,84972],{"class":125,"line":1321},[123,84973,84974],{"class":133},"      \u002F\u002F   console.log('唱歌')\n",[123,84976,84977],{"class":125,"line":1327},[123,84978,2409],{"emptyLinePlaceholder":50},[123,84980,84981],{"class":125,"line":1339},[123,84982,60048],{"class":133},[123,84984,84985],{"class":125,"line":1621},[123,84986,2196],{"class":133},[123,84988,84989],{"class":125,"line":1626},[123,84990,84991],{"class":133},"    Star.prototype.sing = function () {\n",[123,84993,84994],{"class":125,"line":1632},[123,84995,84996],{"class":133},"      console.log('唱歌')\n",[123,84998,84999],{"class":125,"line":1637},[123,85000,2196],{"class":133},[123,85002,85003],{"class":125,"line":1651},[123,85004,85005],{"class":133},"    \u002F\u002F console.dir(Star.prototype)\n",[123,85007,85008],{"class":125,"line":1656},[123,85009,85010],{"class":133},"    const pink = new Star('pink', 18)\n",[123,85012,85013],{"class":125,"line":1662},[123,85014,85015],{"class":133},"    const red = new Star('red', 20)\n",[123,85017,85018],{"class":125,"line":1683},[123,85019,85020],{"class":133},"    pink.sing()\n",[123,85022,85023],{"class":125,"line":1688},[123,85024,85025],{"class":133},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[123,85027,85028],{"class":125,"line":1702},[123,85029,2409],{"emptyLinePlaceholder":50},[123,85031,85032,85034,85036],{"class":125,"line":1707},[123,85033,52428],{"class":133},[123,85035,51824],{"class":51311},[123,85037,51318],{"class":133},[123,85039,85040,85042,85044],{"class":125,"line":1736},[123,85041,51796],{"class":133},[123,85043,51811],{"class":51311},[123,85045,51318],{"class":133},[14,85047,85048],{},[35,85049],{"alt":37,"src":85050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[114,85052,85054],{"className":53078,"code":85053,"language":53080,"meta":37,"style":37},"\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",[120,85055,85056,85064,85072,85077,85082,85087,85092,85096,85101,85106,85111,85115,85120,85124,85128,85133,85137,85145],{"__ignoreMap":37},[123,85057,85058,85060,85062],{"class":125,"line":126},[123,85059,1044],{"class":133},[123,85061,51811],{"class":51311},[123,85063,51318],{"class":133},[123,85065,85066,85068,85070],{"class":125,"line":45},[123,85067,52155],{"class":133},[123,85069,51824],{"class":51311},[123,85071,51318],{"class":133},[123,85073,85074],{"class":125,"line":1189},[123,85075,85076],{"class":133},"    let that\n",[123,85078,85079],{"class":125,"line":1204},[123,85080,85081],{"class":133},"    function Star(uname) {\n",[123,85083,85084],{"class":125,"line":1210},[123,85085,85086],{"class":133},"      this.uname = uname\n",[123,85088,85089],{"class":125,"line":1224},[123,85090,85091],{"class":133},"      that = this\n",[123,85093,85094],{"class":125,"line":1230},[123,85095,2196],{"class":133},[123,85097,85098],{"class":125,"line":1321},[123,85099,85100],{"class":133},"    \u002F\u002F 实例对象是 ldh\n",[123,85102,85103],{"class":125,"line":1327},[123,85104,85105],{"class":133},"    const ldh = new Star('刘德华')\n",[123,85107,85108],{"class":125,"line":1339},[123,85109,85110],{"class":133},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[123,85112,85113],{"class":125,"line":1621},[123,85114,2409],{"emptyLinePlaceholder":50},[123,85116,85117],{"class":125,"line":1626},[123,85118,85119],{"class":133},"    Star.sing = function () {\n",[123,85121,85122],{"class":125,"line":1632},[123,85123,84996],{"class":133},[123,85125,85126],{"class":125,"line":1637},[123,85127,2196],{"class":133},[123,85129,85130],{"class":125,"line":1651},[123,85131,85132],{"class":133},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[123,85134,85135],{"class":125,"line":1656},[123,85136,2409],{"emptyLinePlaceholder":50},[123,85138,85139,85141,85143],{"class":125,"line":1662},[123,85140,52428],{"class":133},[123,85142,51824],{"class":51311},[123,85144,51318],{"class":133},[123,85146,85147,85149,85151],{"class":125,"line":1683},[123,85148,51796],{"class":133},[123,85150,51811],{"class":51311},[123,85152,51318],{"class":133},[14,85154,85155],{},"构造函数的this指向的是实例对象；",[14,85157,85158],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[94,85160,85162],{"id":85161},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85164,85165],{},[35,85166],{"alt":37,"src":85167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[114,85169,85171],{"className":53078,"code":85170,"language":53080,"meta":37,"style":37},"\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",[120,85172,85173,85181,85189,85194,85199,85204,85209,85214,85219,85224,85229,85234,85239,85243,85248,85253,85258,85263,85267,85272,85277,85282,85287,85291,85296,85301,85306,85311,85315,85320,85324,85332],{"__ignoreMap":37},[123,85174,85175,85177,85179],{"class":125,"line":126},[123,85176,1044],{"class":133},[123,85178,51811],{"class":51311},[123,85180,51318],{"class":133},[123,85182,85183,85185,85187],{"class":125,"line":45},[123,85184,52155],{"class":133},[123,85186,51824],{"class":51311},[123,85188,51318],{"class":133},[123,85190,85191],{"class":125,"line":1189},[123,85192,85193],{"class":133},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[123,85195,85196],{"class":125,"line":1204},[123,85197,85198],{"class":133},"    const arr = [1, 2, 3]\n",[123,85200,85201],{"class":125,"line":1210},[123,85202,85203],{"class":133},"    \u002F\u002F 自己定义数组的扩展方法\n",[123,85205,85206],{"class":125,"line":1224},[123,85207,85208],{"class":133},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[123,85210,85211],{"class":125,"line":1230},[123,85212,85213],{"class":133},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[123,85215,85216],{"class":125,"line":1321},[123,85217,85218],{"class":133},"    \u002F\u002F ①.最大值\n",[123,85220,85221],{"class":125,"line":1327},[123,85222,85223],{"class":133},"    Array.prototype.max = function () {\n",[123,85225,85226],{"class":125,"line":1339},[123,85227,85228],{"class":133},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[123,85230,85231],{"class":125,"line":1621},[123,85232,85233],{"class":133},"      return Math.max(...this)\n",[123,85235,85236],{"class":125,"line":1626},[123,85237,85238],{"class":133},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[123,85240,85241],{"class":125,"line":1632},[123,85242,2196],{"class":133},[123,85244,85245],{"class":125,"line":1637},[123,85246,85247],{"class":133},"    console.log(arr.max())\n",[123,85249,85250],{"class":125,"line":1651},[123,85251,85252],{"class":133},"    \u002F\u002F ②最小值\n",[123,85254,85255],{"class":125,"line":1656},[123,85256,85257],{"class":133},"    Array.prototype.min = function () {\n",[123,85259,85260],{"class":125,"line":1662},[123,85261,85262],{"class":133},"      return Math.min(...this)\n",[123,85264,85265],{"class":125,"line":1683},[123,85266,2196],{"class":133},[123,85268,85269],{"class":125,"line":1688},[123,85270,85271],{"class":133},"    console.log(arr.min())\n",[123,85273,85274],{"class":125,"line":1702},[123,85275,85276],{"class":133},"    \u002F\u002F③求和\n",[123,85278,85279],{"class":125,"line":1707},[123,85280,85281],{"class":133},"    Array.prototype.sum = function () {\n",[123,85283,85284],{"class":125,"line":1736},[123,85285,85286],{"class":133},"      return this.reduce((prev, current) => prev + current, 0)\n",[123,85288,85289],{"class":125,"line":1741},[123,85290,2196],{"class":133},[123,85292,85293],{"class":125,"line":1758},[123,85294,85295],{"class":133},"    console.log(arr.sum())\n",[123,85297,85298],{"class":125,"line":1763},[123,85299,85300],{"class":133},"    \u002F\u002F ③排序\n",[123,85302,85303],{"class":125,"line":1768},[123,85304,85305],{"class":133},"    Array.prototype.rever = function () {\n",[123,85307,85308],{"class":125,"line":1773},[123,85309,85310],{"class":133},"      return this.reverse()\n",[123,85312,85313],{"class":125,"line":1787},[123,85314,2196],{"class":133},[123,85316,85317],{"class":125,"line":1792},[123,85318,85319],{"class":133},"    console.log(arr.rever())\n",[123,85321,85322],{"class":125,"line":2586},[123,85323,2409],{"emptyLinePlaceholder":50},[123,85325,85326,85328,85330],{"class":125,"line":2600},[123,85327,52428],{"class":133},[123,85329,51824],{"class":51311},[123,85331,51318],{"class":133},[123,85333,85334,85336,85338],{"class":125,"line":2608},[123,85335,51796],{"class":133},[123,85337,51811],{"class":51311},[123,85339,51318],{"class":133},[14,85341,85342],{},[35,85343],{"alt":37,"src":85344},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[94,85346,85348],{"id":85347},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85350,85351],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85353,85354],{},[35,85355],{"alt":37,"src":85356},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[114,85358,85360],{"className":53078,"code":85359,"language":53080,"meta":37,"style":37},"\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",[120,85361,85362,85370,85378,85383,85388,85392,85397,85402,85407,85415],{"__ignoreMap":37},[123,85363,85364,85366,85368],{"class":125,"line":126},[123,85365,1044],{"class":133},[123,85367,51811],{"class":51311},[123,85369,51318],{"class":133},[123,85371,85372,85374,85376],{"class":125,"line":45},[123,85373,52155],{"class":133},[123,85375,51824],{"class":51311},[123,85377,51318],{"class":133},[123,85379,85380],{"class":125,"line":1189},[123,85381,85382],{"class":133},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[123,85384,85385],{"class":125,"line":1204},[123,85386,85387],{"class":133},"    function Star() {\n",[123,85389,85390],{"class":125,"line":1210},[123,85391,2196],{"class":133},[123,85393,85394],{"class":125,"line":1224},[123,85395,85396],{"class":133},"    const ldh = new Star()\n",[123,85398,85399],{"class":125,"line":1230},[123,85400,85401],{"class":133},"    console.log(Star.prototype)\n",[123,85403,85404],{"class":125,"line":1321},[123,85405,85406],{"class":133},"    console.log(Star.prototype.constructor === Star)\n",[123,85408,85409,85411,85413],{"class":125,"line":1327},[123,85410,52428],{"class":133},[123,85412,51824],{"class":51311},[123,85414,51318],{"class":133},[123,85416,85417,85419,85421],{"class":125,"line":1339},[123,85418,51796],{"class":133},[123,85420,51811],{"class":51311},[123,85422,51318],{"class":133},[14,85424,85425],{},[35,85426],{"alt":37,"src":85427},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85429,85430],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[114,85432,85434],{"className":53078,"code":85433,"language":53080,"meta":37,"style":37},"  \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",[120,85435,85436,85444,85448,85452,85456,85461,85466,85471,85475,85480,85485,85490,85495,85500,85505,85509,85513,85518,85523,85528,85532,85537,85542,85546,85550,85554],{"__ignoreMap":37},[123,85437,85438,85440,85442],{"class":125,"line":126},[123,85439,52155],{"class":133},[123,85441,51824],{"class":51311},[123,85443,51318],{"class":133},[123,85445,85446],{"class":125,"line":45},[123,85447,85382],{"class":133},[123,85449,85450],{"class":125,"line":1189},[123,85451,85387],{"class":133},[123,85453,85454],{"class":125,"line":1204},[123,85455,2196],{"class":133},[123,85457,85458],{"class":125,"line":1210},[123,85459,85460],{"class":133},"    \u002F\u002F const ldh = new Star()\n",[123,85462,85463],{"class":125,"line":1224},[123,85464,85465],{"class":133},"    \u002F\u002F console.log(Star.prototype)\n",[123,85467,85468],{"class":125,"line":1230},[123,85469,85470],{"class":133},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[123,85472,85473],{"class":125,"line":1321},[123,85474,2409],{"emptyLinePlaceholder":50},[123,85476,85477],{"class":125,"line":1327},[123,85478,85479],{"class":133},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[123,85481,85482],{"class":125,"line":1339},[123,85483,85484],{"class":133},"    \u002F\u002F Star.prototype.sing = function () {\n",[123,85486,85487],{"class":125,"line":1621},[123,85488,85489],{"class":133},"    \u002F\u002F   console.log('唱歌')\n",[123,85491,85492],{"class":125,"line":1626},[123,85493,85494],{"class":133},"    \u002F\u002F }\n",[123,85496,85497],{"class":125,"line":1632},[123,85498,85499],{"class":133},"    \u002F\u002F Star.prototype.dance = function () {\n",[123,85501,85502],{"class":125,"line":1637},[123,85503,85504],{"class":133},"    \u002F\u002F   console.log('跳舞')\n",[123,85506,85507],{"class":125,"line":1651},[123,85508,85494],{"class":133},[123,85510,85511],{"class":125,"line":1656},[123,85512,85401],{"class":133},[123,85514,85515],{"class":125,"line":1662},[123,85516,85517],{"class":133},"    Star.prototype = {\n",[123,85519,85520],{"class":125,"line":1683},[123,85521,85522],{"class":133},"      sing: function () {\n",[123,85524,85525],{"class":125,"line":1688},[123,85526,85527],{"class":133},"        console.log('唱歌')\n",[123,85529,85530],{"class":125,"line":1702},[123,85531,77903],{"class":133},[123,85533,85534],{"class":125,"line":1707},[123,85535,85536],{"class":133},"      dance: function () {\n",[123,85538,85539],{"class":125,"line":1736},[123,85540,85541],{"class":133},"        console.log('跳舞')\n",[123,85543,85544],{"class":125,"line":1741},[123,85545,52409],{"class":133},[123,85547,85548],{"class":125,"line":1758},[123,85549,2196],{"class":133},[123,85551,85552],{"class":125,"line":1763},[123,85553,85401],{"class":133},[123,85555,85556,85558,85560],{"class":125,"line":1768},[123,85557,52428],{"class":133},[123,85559,51824],{"class":51311},[123,85561,51318],{"class":133},[14,85563,85564],{},"进行输出结果后会发现：",[14,85566,85567],{},[35,85568],{"alt":37,"src":85569},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,85571,85572],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,85574,85575],{},"所以，要重新指回创造这个原型对象的构造函数",[114,85577,85579],{"className":71224,"code":85578,"language":71226,"meta":37,"style":37},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[120,85580,85581,85595,85600,85605,85616,85629,85634,85645,85659,85663],{"__ignoreMap":37},[123,85582,85583,85586,85588,85591,85593],{"class":125,"line":126},[123,85584,85585],{"class":182},"Star",[123,85587,692],{"class":133},[123,85589,85590],{"class":182},"prototype",[123,85592,13574],{"class":129},[123,85594,15582],{"class":133},[123,85596,85597],{"class":125,"line":45},[123,85598,85599],{"class":192},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[123,85601,85602],{"class":125,"line":1189},[123,85603,85604],{"class":133},"  constructor: Star,\n",[123,85606,85607,85610,85612,85614],{"class":125,"line":1204},[123,85608,85609],{"class":1972},"  sing",[123,85611,51448],{"class":133},[123,85613,54460],{"class":129},[123,85615,54463],{"class":133},[123,85617,85618,85620,85622,85624,85627],{"class":125,"line":1210},[123,85619,73764],{"class":133},[123,85621,58258],{"class":1972},[123,85623,134],{"class":133},[123,85625,85626],{"class":238},"'唱歌'",[123,85628,140],{"class":133},[123,85630,85631],{"class":125,"line":1224},[123,85632,85633],{"class":133},"   },\n",[123,85635,85636,85639,85641,85643],{"class":125,"line":1230},[123,85637,85638],{"class":1972},"   dance",[123,85640,51448],{"class":133},[123,85642,54460],{"class":129},[123,85644,54463],{"class":133},[123,85646,85647,85650,85652,85654,85657],{"class":125,"line":1321},[123,85648,85649],{"class":133},"     console.",[123,85651,58258],{"class":1972},[123,85653,134],{"class":133},[123,85655,85656],{"class":238},"'跳舞'",[123,85658,140],{"class":133},[123,85660,85661],{"class":125,"line":1327},[123,85662,4318],{"class":133},[123,85664,85665],{"class":125,"line":1339},[123,85666,1574],{"class":133},[14,85668,85669],{},[35,85670],{"alt":37,"src":85671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,85673,85674],{},"总结1：",[14,85676,85677],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,85679,85680],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,85682,85683],{},"constructor指的是他的来源",[14,85685,85686],{},[35,85687],{"alt":37,"src":85688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,85690,85691],{},[35,85692],{"alt":37,"src":85693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,85695,85696],{},"总结2：",[14,85698,85699],{},[35,85700],{"alt":37,"src":85701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,85703,85704],{},[35,85705],{"alt":37,"src":85706},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,85708,85709],{},[35,85710],{"alt":37,"src":85711},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[94,85713,85715],{"id":85714},"_4134-对象原型","4.13.4 对象原型",[14,85717,85718],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,85720,85721],{},"对象原型就是__proto__这个属性",[14,85723,85724],{},[35,85725],{"alt":37,"src":85726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,85728,85729],{},[35,85730],{"alt":37,"src":85731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,85733,85734],{},[35,85735],{"alt":37,"src":85736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,85738,85739],{},[35,85740],{"alt":37,"src":85741},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[114,85743,85745],{"className":53078,"code":85744,"language":53080,"meta":37,"style":37},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[120,85746,85747,85755,85763,85767,85771,85775,85780,85788],{"__ignoreMap":37},[123,85748,85749,85751,85753],{"class":125,"line":126},[123,85750,1044],{"class":133},[123,85752,51811],{"class":51311},[123,85754,51318],{"class":133},[123,85756,85757,85759,85761],{"class":125,"line":45},[123,85758,52155],{"class":133},[123,85760,51824],{"class":51311},[123,85762,51318],{"class":133},[123,85764,85765],{"class":125,"line":1189},[123,85766,85387],{"class":133},[123,85768,85769],{"class":125,"line":1204},[123,85770,2196],{"class":133},[123,85772,85773],{"class":125,"line":1210},[123,85774,85396],{"class":133},[123,85776,85777],{"class":125,"line":1224},[123,85778,85779],{"class":133},"    console.log(ldh)\n",[123,85781,85782,85784,85786],{"class":125,"line":1230},[123,85783,52428],{"class":133},[123,85785,51824],{"class":51311},[123,85787,51318],{"class":133},[123,85789,85790,85792,85794],{"class":125,"line":1321},[123,85791,51796],{"class":133},[123,85793,51811],{"class":51311},[123,85795,51318],{"class":133},[14,85797,85798],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,85800,85801],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,85803,85804],{},[35,85805],{"alt":37,"src":85806},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,85808,85809],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,85811,85812],{},"对象原型指向原型对象",[14,85814,85815],{},[35,85816],{"alt":37,"src":85817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,85819,85820],{},[35,85821],{"alt":37,"src":85822},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,85824,85825],{},[35,85826],{"alt":37,"src":85827},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[94,85829,85831],{"id":85830},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,85833,85834],{},[35,85835],{"alt":37,"src":85836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[77,85838,85839,85842,85845,85848],{},[80,85840,85841],{},"构造函数通过new的形式实例化得到实例对象",[80,85843,85844],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[80,85846,85847],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[80,85849,85850],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,85852,85853],{},[35,85854],{"alt":37,"src":85855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,85857,85858],{},"题目梳理：",[14,85860,85861],{},[35,85862],{"alt":37,"src":85863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[94,85865,85867],{"id":85866},"_4136-原型继承","4.13.6 原型继承",[14,85869,85870],{},[35,85871],{"alt":37,"src":85872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,85874,85875],{},[35,85876],{"alt":37,"src":85877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,85879,85880],{},[35,85881],{"alt":37,"src":85882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,85884,85885],{},[35,85886],{"alt":37,"src":85887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,85889,85890],{},[35,85891],{"alt":37,"src":85892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,85894,85895],{},[35,85896],{"alt":37,"src":85897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,85899,85900],{},[35,85901],{"alt":37,"src":85902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,85904,85905],{},[35,85906],{"alt":37,"src":85907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,85909,85910],{},"回顾：构造函数每次new得到对象都是不同的",[94,85912,85914],{"id":85913},"_4137-原型链","4.13.7 原型链",[14,85916,85917],{},[35,85918],{"alt":37,"src":85919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,85921,85922],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,85924,85925],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,85927,85928],{},"大哥是Object",[14,85930,85931],{},[35,85932],{"alt":37,"src":85933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,85935,85936],{},[35,85937],{"alt":37,"src":85938},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,85940,85941],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,85943,85944],{},"万物皆对象",[94,85946,85948],{"id":85947},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,85950,85951],{},"模态框",[14,85953,85954],{},"以后遇见这个效果直接使用这个就行",[14,85956,85957],{},[35,85958],{"alt":37,"src":85959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,85961,85962],{},[35,85963],{"alt":37,"src":85964},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,85966,85967],{},[35,85968],{"alt":37,"src":85969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,85971,85972],{},[35,85973],{"alt":37,"src":85974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,85976,85977],{},"补充知识点：",[77,85979,85980],{},[80,85981,85982],{},"append()",[14,85984,85985],{},[35,85986],{"alt":37,"src":85987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[114,85989,85991],{"className":50644,"code":85990,"language":50646,"meta":37,"style":37},"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",[120,85992,85993,85998,86003,86008,86012,86016,86020,86025,86030,86035,86039],{"__ignoreMap":37},[123,85994,85995],{"class":125,"line":126},[123,85996,85997],{"class":133},"append(param1)\n",[123,85999,86000],{"class":125,"line":45},[123,86001,86002],{"class":133},"append(param1, param2)\n",[123,86004,86005],{"class":125,"line":1189},[123,86006,86007],{"class":133},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[123,86009,86010],{"class":125,"line":1204},[123,86011,2409],{"emptyLinePlaceholder":50},[123,86013,86014],{"class":125,"line":1210},[123,86015,2409],{"emptyLinePlaceholder":50},[123,86017,86018],{"class":125,"line":1224},[123,86019,2409],{"emptyLinePlaceholder":50},[123,86021,86022],{"class":125,"line":1230},[123,86023,86024],{"class":133},"let div = document.createElement(\"div\");\n",[123,86026,86027],{"class":125,"line":1321},[123,86028,86029],{"class":133},"let p = document.createElement(\"p\");\n",[123,86031,86032],{"class":125,"line":1327},[123,86033,86034],{"class":133},"div.append(p);\n",[123,86036,86037],{"class":125,"line":1339},[123,86038,2409],{"emptyLinePlaceholder":50},[123,86040,86041,86044,86046],{"class":125,"line":1621},[123,86042,86043],{"class":133},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[123,86045,14],{"class":51311},[123,86047,86048],{"class":133},"> ]\n",[77,86050,86051],{"start":45},[80,86052,86053],{},"remove()",[14,86055,86056],{},"自己删自己",[14,86058,86059],{},[35,86060],{"alt":37,"src":86061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[114,86063,86065],{"className":50644,"code":86064,"language":50646,"meta":37,"style":37},"\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",[120,86066,86067,86077,86091,86095,86103,86117,86137,86149,86157,86164,86176,86189,86224,86236,86247,86259,86271,86283,86310,86320,86324,86328,86337,86349,86363,86373,86385,86389,86393,86403,86414,86424,86434,86447,86460,86470,86474,86478,86487,86497,86509,86513,86517,86526,86536,86546,86558,86562,86566,86576,86592,86603,86613,86623,86635,86647,86659,86663,86667,86680,86691,86695,86703,86711,86715,86723,86743,86763,86771,86776,86802,86807,86812,86831,86836,86848,86853,86864,86874,86884,86889,86894,86898,86903,86908,86913,86933,86938,86958,86963,86977,86982,86987,86992,87008,87012,87017,87046,87051,87056,87061,87072,87076,87080,87084,87089,87114,87119,87144,87149,87158,87162,87167,87192,87196,87221,87225,87234,87238,87243,87261,87271,87275,87283,87291,87295],{"__ignoreMap":37},[123,86068,86069,86071,86073,86075],{"class":125,"line":126},[123,86070,51308],{"class":133},[123,86072,51312],{"class":51311},[123,86074,51315],{"class":1972},[123,86076,51318],{"class":133},[123,86078,86079,86081,86083,86085,86087,86089],{"class":125,"line":45},[123,86080,1044],{"class":133},[123,86082,50646],{"class":51311},[123,86084,51327],{"class":1972},[123,86086,179],{"class":133},[123,86088,51332],{"class":238},[123,86090,51318],{"class":133},[123,86092,86093],{"class":125,"line":1189},[123,86094,2409],{"emptyLinePlaceholder":50},[123,86096,86097,86099,86101],{"class":125,"line":1204},[123,86098,1044],{"class":133},[123,86100,51345],{"class":51311},[123,86102,51318],{"class":133},[123,86104,86105,86107,86109,86111,86113,86115],{"class":125,"line":1210},[123,86106,52155],{"class":133},[123,86108,51355],{"class":51311},[123,86110,51358],{"class":1972},[123,86112,179],{"class":133},[123,86114,51363],{"class":238},[123,86116,51318],{"class":133},[123,86118,86119,86121,86123,86125,86127,86129,86131,86133,86135],{"class":125,"line":1224},[123,86120,52155],{"class":133},[123,86122,51355],{"class":51311},[123,86124,14930],{"class":1972},[123,86126,179],{"class":133},[123,86128,51402],{"class":238},[123,86130,51382],{"class":1972},[123,86132,179],{"class":133},[123,86134,51409],{"class":238},[123,86136,51318],{"class":133},[123,86138,86139,86141,86143,86145,86147],{"class":125,"line":1230},[123,86140,52155],{"class":133},[123,86142,51418],{"class":51311},[123,86144,51421],{"class":133},[123,86146,51418],{"class":51311},[123,86148,51318],{"class":133},[123,86150,86151,86153,86155],{"class":125,"line":1321},[123,86152,52155],{"class":133},[123,86154,5136],{"class":51311},[123,86156,51318],{"class":133},[123,86158,86159,86162],{"class":125,"line":1327},[123,86160,86161],{"class":1972},"    .modal",[123,86163,15582],{"class":133},[123,86165,86166,86168,86170,86172,86174],{"class":125,"line":1339},[123,86167,54782],{"class":182},[123,86169,51448],{"class":133},[123,86171,3982],{"class":182},[123,86173,51503],{"class":129},[123,86175,1300],{"class":133},[123,86177,86178,86181,86183,86185,86187],{"class":125,"line":1621},[123,86179,86180],{"class":182},"      min-height",[123,86182,51448],{"class":133},[123,86184,445],{"class":182},[123,86186,51503],{"class":129},[123,86188,1300],{"class":133},[123,86190,86191,86193,86195,86197,86199,86201,86203,86205,86207,86209,86211,86213,86215,86217,86219,86222],{"class":125,"line":1626},[123,86192,78761],{"class":182},[123,86194,51448],{"class":133},[123,86196,325],{"class":182},[123,86198,4102],{"class":182},[123,86200,2047],{"class":182},[123,86202,51503],{"class":129},[123,86204,78778],{"class":182},[123,86206,134],{"class":133},[123,86208,325],{"class":182},[123,86210,12445],{"class":133},[123,86212,325],{"class":182},[123,86214,12445],{"class":133},[123,86216,325],{"class":182},[123,86218,12445],{"class":133},[123,86220,86221],{"class":182},"0.1",[123,86223,2728],{"class":133},[123,86225,86226,86228,86230,86232,86234],{"class":125,"line":1632},[123,86227,55145],{"class":182},[123,86229,51448],{"class":133},[123,86231,427],{"class":182},[123,86233,51503],{"class":129},[123,86235,1300],{"class":133},[123,86237,86238,86240,86242,86245],{"class":125,"line":1637},[123,86239,54770],{"class":182},[123,86241,51448],{"class":133},[123,86243,86244],{"class":182},"fixed",[123,86246,1300],{"class":133},[123,86248,86249,86252,86254,86257],{"class":125,"line":1651},[123,86250,86251],{"class":182},"      z-index",[123,86253,51448],{"class":133},[123,86255,86256],{"class":182},"999",[123,86258,1300],{"class":133},[123,86260,86261,86263,86265,86267,86269],{"class":125,"line":1656},[123,86262,54849],{"class":182},[123,86264,51448],{"class":133},[123,86266,790],{"class":182},[123,86268,462],{"class":129},[123,86270,1300],{"class":133},[123,86272,86273,86275,86277,86279,86281],{"class":125,"line":1662},[123,86274,54958],{"class":182},[123,86276,51448],{"class":133},[123,86278,790],{"class":182},[123,86280,462],{"class":129},[123,86282,1300],{"class":133},[123,86284,86285,86287,86289,86291,86293,86296,86298,86300,86302,86304,86306,86308],{"class":125,"line":1683},[123,86286,78802],{"class":182},[123,86288,51448],{"class":133},[123,86290,78807],{"class":182},[123,86292,134],{"class":133},[123,86294,86295],{"class":182},"-50",[123,86297,462],{"class":129},[123,86299,12445],{"class":133},[123,86301,86295],{"class":182},[123,86303,462],{"class":129},[123,86305,12445],{"class":133},[123,86307,325],{"class":182},[123,86309,2728],{"class":133},[123,86311,86312,86314,86316,86318],{"class":125,"line":1688},[123,86313,54895],{"class":182},[123,86315,51448],{"class":133},[123,86317,60853],{"class":182},[123,86319,1300],{"class":133},[123,86321,86322],{"class":125,"line":1702},[123,86323,2196],{"class":133},[123,86325,86326],{"class":125,"line":1707},[123,86327,2409],{"emptyLinePlaceholder":50},[123,86329,86330,86332,86335],{"class":125,"line":1736},[123,86331,86161],{"class":1972},[123,86333,86334],{"class":1972}," .header",[123,86336,15582],{"class":133},[123,86338,86339,86341,86343,86345,86347],{"class":125,"line":1741},[123,86340,57370],{"class":182},[123,86342,51448],{"class":133},[123,86344,535],{"class":182},[123,86346,51503],{"class":129},[123,86348,1300],{"class":133},[123,86350,86351,86353,86355,86357,86359,86361],{"class":125,"line":1758},[123,86352,54706],{"class":182},[123,86354,51448],{"class":133},[123,86356,325],{"class":182},[123,86358,2047],{"class":182},[123,86360,51503],{"class":129},[123,86362,1300],{"class":133},[123,86364,86365,86367,86369,86371],{"class":125,"line":1763},[123,86366,54770],{"class":182},[123,86368,51448],{"class":133},[123,86370,54775],{"class":182},[123,86372,1300],{"class":133},[123,86374,86375,86377,86379,86381,86383],{"class":125,"line":1768},[123,86376,54933],{"class":182},[123,86378,51448],{"class":133},[123,86380,834],{"class":182},[123,86382,51503],{"class":129},[123,86384,1300],{"class":133},[123,86386,86387],{"class":125,"line":1773},[123,86388,2196],{"class":133},[123,86390,86391],{"class":125,"line":1787},[123,86392,2409],{"emptyLinePlaceholder":50},[123,86394,86395,86397,86399,86401],{"class":125,"line":1792},[123,86396,86161],{"class":1972},[123,86398,86334],{"class":1972},[123,86400,3041],{"class":51311},[123,86402,15582],{"class":133},[123,86404,86405,86408,86410,86412],{"class":125,"line":2586},[123,86406,86407],{"class":182},"      font-style",[123,86409,51448],{"class":133},[123,86411,63852],{"class":182},[123,86413,1300],{"class":133},[123,86415,86416,86418,86420,86422],{"class":125,"line":2600},[123,86417,57427],{"class":182},[123,86419,51448],{"class":133},[123,86421,62081],{"class":182},[123,86423,1300],{"class":133},[123,86425,86426,86428,86430,86432],{"class":125,"line":2608},[123,86427,54770],{"class":182},[123,86429,51448],{"class":133},[123,86431,54842],{"class":182},[123,86433,1300],{"class":133},[123,86435,86436,86439,86441,86443,86445],{"class":125,"line":2613},[123,86437,86438],{"class":182},"      right",[123,86440,51448],{"class":133},[123,86442,709],{"class":182},[123,86444,51503],{"class":129},[123,86446,1300],{"class":133},[123,86448,86449,86451,86453,86456,86458],{"class":125,"line":2619},[123,86450,54958],{"class":182},[123,86452,51448],{"class":133},[123,86454,86455],{"class":182},"-2",[123,86457,51503],{"class":129},[123,86459,1300],{"class":133},[123,86461,86462,86464,86466,86468],{"class":125,"line":2625},[123,86463,62036],{"class":182},[123,86465,51448],{"class":133},[123,86467,62041],{"class":182},[123,86469,1300],{"class":133},[123,86471,86472],{"class":125,"line":2630},[123,86473,2196],{"class":133},[123,86475,86476],{"class":125,"line":7958},[123,86477,2409],{"emptyLinePlaceholder":50},[123,86479,86480,86482,86485],{"class":125,"line":7982},[123,86481,86161],{"class":1972},[123,86483,86484],{"class":1972}," .body",[123,86486,15582],{"class":133},[123,86488,86489,86491,86493,86495],{"class":125,"line":7987},[123,86490,57297],{"class":182},[123,86492,51448],{"class":133},[123,86494,51603],{"class":182},[123,86496,1300],{"class":133},[123,86498,86499,86501,86503,86505,86507],{"class":125,"line":7993},[123,86500,54706],{"class":182},[123,86502,51448],{"class":133},[123,86504,580],{"class":182},[123,86506,51503],{"class":129},[123,86508,1300],{"class":133},[123,86510,86511],{"class":125,"line":8020},[123,86512,2196],{"class":133},[123,86514,86515],{"class":125,"line":8025},[123,86516,2409],{"emptyLinePlaceholder":50},[123,86518,86519,86521,86524],{"class":125,"line":8031},[123,86520,86161],{"class":1972},[123,86522,86523],{"class":1972}," .footer",[123,86525,15582],{"class":133},[123,86527,86528,86530,86532,86534],{"class":125,"line":8043},[123,86529,55020],{"class":182},[123,86531,51448],{"class":133},[123,86533,51488],{"class":182},[123,86535,1300],{"class":133},[123,86537,86538,86540,86542,86544],{"class":125,"line":8055},[123,86539,55031],{"class":182},[123,86541,51448],{"class":133},[123,86543,51591],{"class":182},[123,86545,1300],{"class":133},[123,86547,86548,86550,86552,86554,86556],{"class":125,"line":8067},[123,86549,54706],{"class":182},[123,86551,51448],{"class":133},[123,86553,580],{"class":182},[123,86555,51503],{"class":129},[123,86557,1300],{"class":133},[123,86559,86560],{"class":125,"line":9726},[123,86561,2196],{"class":133},[123,86563,86564],{"class":125,"line":9751},[123,86565,2409],{"emptyLinePlaceholder":50},[123,86567,86568,86570,86572,86574],{"class":125,"line":9774},[123,86569,86161],{"class":1972},[123,86571,86523],{"class":1972},[123,86573,1408],{"class":51311},[123,86575,15582],{"class":133},[123,86577,86578,86580,86582,86584,86586,86588,86590],{"class":125,"line":9798},[123,86579,54706],{"class":182},[123,86581,51448],{"class":133},[123,86583,205],{"class":182},[123,86585,51503],{"class":129},[123,86587,2092],{"class":182},[123,86589,51503],{"class":129},[123,86591,1300],{"class":133},[123,86593,86594,86596,86598,86601],{"class":125,"line":9803},[123,86595,61732],{"class":182},[123,86597,51448],{"class":133},[123,86599,86600],{"class":182},"#ccc",[123,86602,1300],{"class":133},[123,86604,86605,86607,86609,86611],{"class":125,"line":9808},[123,86606,63981],{"class":182},[123,86608,51448],{"class":133},[123,86610,54748],{"class":182},[123,86612,1300],{"class":133},[123,86614,86615,86617,86619,86621],{"class":125,"line":9813},[123,86616,57427],{"class":182},[123,86618,51448],{"class":133},[123,86620,60853],{"class":182},[123,86622,1300],{"class":133},[123,86624,86625,86627,86629,86631,86633],{"class":125,"line":9822},[123,86626,55145],{"class":182},[123,86628,51448],{"class":133},[123,86630,211],{"class":182},[123,86632,51503],{"class":129},[123,86634,1300],{"class":133},[123,86636,86637,86639,86641,86643,86645],{"class":125,"line":9827},[123,86638,61761],{"class":182},[123,86640,51448],{"class":133},[123,86642,580],{"class":182},[123,86644,51503],{"class":129},[123,86646,1300],{"class":133},[123,86648,86649,86651,86653,86655,86657],{"class":125,"line":9833},[123,86650,54933],{"class":182},[123,86652,51448],{"class":133},[123,86654,683],{"class":182},[123,86656,51503],{"class":129},[123,86658,1300],{"class":133},[123,86660,86661],{"class":125,"line":9854},[123,86662,2196],{"class":133},[123,86664,86665],{"class":125,"line":9860},[123,86666,2409],{"emptyLinePlaceholder":50},[123,86668,86669,86671,86673,86675,86678],{"class":125,"line":9874},[123,86670,86161],{"class":1972},[123,86672,86523],{"class":1972},[123,86674,1408],{"class":51311},[123,86676,86677],{"class":1972},".submit",[123,86679,15582],{"class":133},[123,86681,86682,86684,86686,86689],{"class":125,"line":9880},[123,86683,54895],{"class":182},[123,86685,51448],{"class":133},[123,86687,86688],{"class":182},"#369",[123,86690,1300],{"class":133},[123,86692,86693],{"class":125,"line":9907},[123,86694,2196],{"class":133},[123,86696,86697,86699,86701],{"class":125,"line":9916},[123,86698,52428],{"class":133},[123,86700,5136],{"class":51311},[123,86702,51318],{"class":133},[123,86704,86705,86707,86709],{"class":125,"line":9922},[123,86706,51796],{"class":133},[123,86708,51345],{"class":51311},[123,86710,51318],{"class":133},[123,86712,86713],{"class":125,"line":9930},[123,86714,2409],{"emptyLinePlaceholder":50},[123,86716,86717,86719,86721],{"class":125,"line":9935},[123,86718,1044],{"class":133},[123,86720,51811],{"class":51311},[123,86722,51318],{"class":133},[123,86724,86725,86727,86729,86731,86733,86736,86739,86741],{"class":125,"line":16614},[123,86726,52155],{"class":133},[123,86728,53898],{"class":51311},[123,86730,14969],{"class":1972},[123,86732,179],{"class":133},[123,86734,86735],{"class":238},"\"delete\"",[123,86737,86738],{"class":133},">删除\u003C\u002F",[123,86740,53898],{"class":51311},[123,86742,51318],{"class":133},[123,86744,86745,86747,86749,86751,86753,86756,86759,86761],{"class":125,"line":16620},[123,86746,52155],{"class":133},[123,86748,53898],{"class":51311},[123,86750,14969],{"class":1972},[123,86752,179],{"class":133},[123,86754,86755],{"class":238},"\"login\"",[123,86757,86758],{"class":133},">登录\u003C\u002F",[123,86760,53898],{"class":51311},[123,86762,51318],{"class":133},[123,86764,86765,86767,86769],{"class":125,"line":16643},[123,86766,52155],{"class":133},[123,86768,51824],{"class":51311},[123,86770,51318],{"class":133},[123,86772,86773],{"class":125,"line":16649},[123,86774,86775],{"class":192},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[123,86777,86778,86780,86783,86785,86787,86789,86791,86793,86796,86798,86800],{"class":125,"line":16672},[123,86779,70095],{"class":129},[123,86781,86782],{"class":1972}," Modal",[123,86784,134],{"class":133},[123,86786,51418],{"class":5226},[123,86788,13574],{"class":129},[123,86790,69941],{"class":238},[123,86792,12445],{"class":133},[123,86794,86795],{"class":5226},"message",[123,86797,13574],{"class":129},[123,86799,69941],{"class":238},[123,86801,12452],{"class":133},[123,86803,86804],{"class":125,"line":16686},[123,86805,86806],{"class":192},"      \u002F\u002F 创建Model 模态框盒子\n",[123,86808,86809],{"class":125,"line":16706},[123,86810,86811],{"class":192},"      \u002F\u002F 1.1 创建div标签\n",[123,86813,86814,86816,86819,86821,86823,86825,86827,86829],{"class":125,"line":16712},[123,86815,70062],{"class":182},[123,86817,86818],{"class":133},".modalBox ",[123,86820,179],{"class":129},[123,86822,54407],{"class":133},[123,86824,70162],{"class":1972},[123,86826,134],{"class":133},[123,86828,81942],{"class":238},[123,86830,140],{"class":133},[123,86832,86833],{"class":125,"line":16723},[123,86834,86835],{"class":192},"      \u002F\u002F 1.2 给div 添加类名为model\n",[123,86837,86838,86840,86843,86845],{"class":125,"line":16746},[123,86839,70062],{"class":182},[123,86841,86842],{"class":133},".modalBox.className ",[123,86844,179],{"class":129},[123,86846,86847],{"class":238}," 'modal'\n",[123,86849,86850],{"class":125,"line":16768},[123,86851,86852],{"class":192},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[123,86854,86855,86857,86860,86862],{"class":125,"line":16773},[123,86856,70062],{"class":182},[123,86858,86859],{"class":133},".modalBox.innerHTML ",[123,86861,179],{"class":129},[123,86863,70179],{"class":238},[123,86865,86866,86869,86871],{"class":125,"line":16779},[123,86867,86868],{"class":238},"        \u003Cdiv class=\"header\">${",[123,86870,51418],{"class":133},[123,86872,86873],{"class":238},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[123,86875,86876,86879,86881],{"class":125,"line":16793},[123,86877,86878],{"class":238},"        \u003Cdiv class=\"body\">${",[123,86880,86795],{"class":133},[123,86882,86883],{"class":238},"}\u003C\u002Fdiv>\n",[123,86885,86886],{"class":125,"line":16806},[123,86887,86888],{"class":238},"      `\n",[123,86890,86891],{"class":125,"line":16811},[123,86892,86893],{"class":192},"      \u002F\u002F console.log(this.modalBox)\n",[123,86895,86896],{"class":125,"line":16825},[123,86897,2196],{"class":133},[123,86899,86900],{"class":125,"line":16830},[123,86901,86902],{"class":192},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[123,86904,86905],{"class":125,"line":16836},[123,86906,86907],{"class":192},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[123,86909,86910],{"class":125,"line":16841},[123,86911,86912],{"class":192},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[123,86914,86915,86918,86920,86922,86924,86927,86929,86931],{"class":125,"line":16855},[123,86916,86917],{"class":182},"    Modal",[123,86919,692],{"class":133},[123,86921,85590],{"class":182},[123,86923,692],{"class":133},[123,86925,86926],{"class":1972},"open",[123,86928,13574],{"class":129},[123,86930,58929],{"class":129},[123,86932,54463],{"class":133},[123,86934,86935],{"class":125,"line":16860},[123,86936,86937],{"class":192},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[123,86939,86940,86942,86945,86947,86949,86951,86953,86956],{"class":125,"line":16865},[123,86941,58239],{"class":129},[123,86943,86944],{"class":182}," box",[123,86946,13574],{"class":129},[123,86948,54407],{"class":133},[123,86950,54410],{"class":1972},[123,86952,134],{"class":133},[123,86954,86955],{"class":238},"'.modal'",[123,86957,140],{"class":133},[123,86959,86960],{"class":125,"line":16879},[123,86961,86962],{"class":192},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[123,86964,86965,86968,86970,86973,86975],{"class":125,"line":16891},[123,86966,86967],{"class":133},"      box ",[123,86969,1724],{"class":129},[123,86971,86972],{"class":133}," box.",[123,86974,57017],{"class":1972},[123,86976,1985],{"class":133},[123,86978,86979],{"class":125,"line":16896},[123,86980,86981],{"class":192},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[123,86983,86984],{"class":125,"line":16909},[123,86985,86986],{"class":192},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[123,86988,86989],{"class":125,"line":16914},[123,86990,86991],{"class":192},"      \u002F\u002F append可以增加对象\n",[123,86993,86994,86997,87000,87002,87005],{"class":125,"line":16919},[123,86995,86996],{"class":133},"      document.body.",[123,86998,86999],{"class":1972},"append",[123,87001,134],{"class":133},[123,87003,87004],{"class":182},"this",[123,87006,87007],{"class":133},".modalBox)\n",[123,87009,87010],{"class":125,"line":16924},[123,87011,2409],{"emptyLinePlaceholder":50},[123,87013,87014],{"class":125,"line":16937},[123,87015,87016],{"class":192},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[123,87018,87019,87021,87024,87026,87028,87031,87033,87035,87037,87039,87042,87044],{"class":125,"line":16942},[123,87020,70062],{"class":182},[123,87022,87023],{"class":133},".modalBox.",[123,87025,54410],{"class":1972},[123,87027,134],{"class":133},[123,87029,87030],{"class":238},"'i'",[123,87032,30837],{"class":133},[123,87034,57824],{"class":1972},[123,87036,134],{"class":133},[123,87038,57829],{"class":238},[123,87040,87041],{"class":133},", () ",[123,87043,84733],{"class":129},[123,87045,15582],{"class":133},[123,87047,87048],{"class":125,"line":32644},[123,87049,87050],{"class":192},"        \u002F\u002F 这个地方需要用到箭头函数\n",[123,87052,87053],{"class":125,"line":32650},[123,87054,87055],{"class":192},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[123,87057,87058],{"class":125,"line":32656},[123,87059,87060],{"class":192},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[123,87062,87063,87065,87067,87070],{"class":125,"line":32662},[123,87064,64737],{"class":182},[123,87066,692],{"class":133},[123,87068,87069],{"class":1972},"close",[123,87071,1985],{"class":133},[123,87073,87074],{"class":125,"line":32668},[123,87075,64826],{"class":133},[123,87077,87078],{"class":125,"line":32679},[123,87079,2196],{"class":133},[123,87081,87082],{"class":125,"line":32685},[123,87083,2409],{"emptyLinePlaceholder":50},[123,87085,87086],{"class":125,"line":32705},[123,87087,87088],{"class":192},"    \u002F\u002F 测试一下 点击 删除按钮\n",[123,87090,87091,87093,87095,87097,87100,87102,87104,87106,87108,87110,87112],{"class":125,"line":32711},[123,87092,52418],{"class":133},[123,87094,54410],{"class":1972},[123,87096,134],{"class":133},[123,87098,87099],{"class":238},"'#delete'",[123,87101,30837],{"class":133},[123,87103,57824],{"class":1972},[123,87105,134],{"class":133},[123,87107,57829],{"class":238},[123,87109,87041],{"class":133},[123,87111,84733],{"class":129},[123,87113,15582],{"class":133},[123,87115,87116],{"class":125,"line":32722},[123,87117,87118],{"class":192},"      \u002F\u002F 先调用Model构造函数\n",[123,87120,87121,87123,87126,87128,87130,87132,87134,87137,87139,87142],{"class":125,"line":32728},[123,87122,58239],{"class":129},[123,87124,87125],{"class":182}," del",[123,87127,13574],{"class":129},[123,87129,11588],{"class":129},[123,87131,86782],{"class":1972},[123,87133,134],{"class":133},[123,87135,87136],{"class":238},"'温馨的提示'",[123,87138,12445],{"class":133},[123,87140,87141],{"class":238},"'您没有删除权限操作'",[123,87143,140],{"class":133},[123,87145,87146],{"class":125,"line":32734},[123,87147,87148],{"class":192},"      \u002F\u002F 实例对象调用open方法\n",[123,87150,87151,87154,87156],{"class":125,"line":32740},[123,87152,87153],{"class":133},"      del.",[123,87155,86926],{"class":1972},[123,87157,1985],{"class":133},[123,87159,87160],{"class":125,"line":32746},[123,87161,33472],{"class":133},[123,87163,87164],{"class":125,"line":32752},[123,87165,87166],{"class":192},"    \u002F\u002F 测试一下 点击 登录按钮\n",[123,87168,87169,87171,87173,87175,87178,87180,87182,87184,87186,87188,87190],{"class":125,"line":32758},[123,87170,52418],{"class":133},[123,87172,54410],{"class":1972},[123,87174,134],{"class":133},[123,87176,87177],{"class":238},"'#login'",[123,87179,30837],{"class":133},[123,87181,57824],{"class":1972},[123,87183,134],{"class":133},[123,87185,57829],{"class":238},[123,87187,87041],{"class":133},[123,87189,84733],{"class":129},[123,87191,15582],{"class":133},[123,87193,87194],{"class":125,"line":32764},[123,87195,87118],{"class":192},[123,87197,87198,87200,87203,87205,87207,87209,87211,87214,87216,87219],{"class":125,"line":32784},[123,87199,58239],{"class":129},[123,87201,87202],{"class":182}," log",[123,87204,13574],{"class":129},[123,87206,11588],{"class":129},[123,87208,86782],{"class":1972},[123,87210,134],{"class":133},[123,87212,87213],{"class":238},"'友情提示'",[123,87215,12445],{"class":133},[123,87217,87218],{"class":238},"'您还没有登录呢'",[123,87220,140],{"class":133},[123,87222,87223],{"class":125,"line":32790},[123,87224,87148],{"class":192},[123,87226,87227,87230,87232],{"class":125,"line":32806},[123,87228,87229],{"class":133},"      log.",[123,87231,86926],{"class":1972},[123,87233,1985],{"class":133},[123,87235,87236],{"class":125,"line":32812},[123,87237,33472],{"class":133},[123,87239,87240],{"class":125,"line":32826},[123,87241,87242],{"class":192},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[123,87244,87245,87247,87249,87251,87253,87255,87257,87259],{"class":125,"line":32832},[123,87246,86917],{"class":182},[123,87248,692],{"class":133},[123,87250,85590],{"class":182},[123,87252,692],{"class":133},[123,87254,87069],{"class":1972},[123,87256,13574],{"class":129},[123,87258,58929],{"class":129},[123,87260,54463],{"class":133},[123,87262,87263,87265,87267,87269],{"class":125,"line":32847},[123,87264,70062],{"class":182},[123,87266,87023],{"class":133},[123,87268,57017],{"class":1972},[123,87270,1985],{"class":133},[123,87272,87273],{"class":125,"line":32853},[123,87274,2196],{"class":133},[123,87276,87277,87279,87281],{"class":125,"line":32862},[123,87278,52428],{"class":133},[123,87280,51824],{"class":51311},[123,87282,51318],{"class":133},[123,87284,87285,87287,87289],{"class":125,"line":32868},[123,87286,51796],{"class":133},[123,87288,51811],{"class":51311},[123,87290,51318],{"class":133},[123,87292,87293],{"class":125,"line":32877},[123,87294,2409],{"emptyLinePlaceholder":50},[123,87296,87297,87299,87301],{"class":125,"line":32883},[123,87298,51796],{"class":133},[123,87300,50646],{"class":51311},[123,87302,51318],{"class":133},[14,87304,87305],{},[35,87306],{"alt":37,"src":87307},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[65,87309,87311],{"id":87310},"_414-深浅拷贝","4.14 深浅拷贝",[94,87313,87315],{"id":87314},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87317,87318],{},[35,87319],{"alt":37,"src":87320},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87322,87323],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87325,87326],{},[35,87327],{"alt":37,"src":87328},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87330,87331],{},[35,87332],{"alt":37,"src":87333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87335,87336],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87338,87339],{},[35,87340],{"alt":37,"src":87341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87343,11342],{},[14,87345,87346],{},[35,87347],{"alt":37,"src":87348},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[94,87350,87352],{"id":87351},"_4142-深拷贝","4.14.2 深拷贝",[14,87354,87355],{},"深拷贝：拷贝的是对象，不是地址",[14,87357,87358],{},"常用的三种方法：",[77,87360,87361,87364,87367],{},[80,87362,87363],{},"通过递归实现深拷贝",[80,87365,87366],{},"lodash\u002FcloneDeep",[80,87368,87369],{},"通过JSON.stringify()实现",[22008,87371,87373],{"id":87372},"_41421-递归函数","4.14.2.1 递归函数",[14,87375,87376],{},[35,87377],{"alt":37,"src":87378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[77,87380,87381],{},[80,87382,87383],{},"死递归占溢出：",[114,87385,87387],{"className":53078,"code":87386,"language":53080,"meta":37,"style":37},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[120,87388,87389,87397,87405,87409,87414,87418,87423,87431],{"__ignoreMap":37},[123,87390,87391,87393,87395],{"class":125,"line":126},[123,87392,1044],{"class":133},[123,87394,51811],{"class":51311},[123,87396,51318],{"class":133},[123,87398,87399,87401,87403],{"class":125,"line":45},[123,87400,52155],{"class":133},[123,87402,51824],{"class":51311},[123,87404,51318],{"class":133},[123,87406,87407],{"class":125,"line":1189},[123,87408,77154],{"class":133},[123,87410,87411],{"class":125,"line":1204},[123,87412,87413],{"class":133},"      fn()\n",[123,87415,87416],{"class":125,"line":1210},[123,87417,2196],{"class":133},[123,87419,87420],{"class":125,"line":1224},[123,87421,87422],{"class":133},"    fn()\n",[123,87424,87425,87427,87429],{"class":125,"line":1230},[123,87426,52428],{"class":133},[123,87428,51824],{"class":51311},[123,87430,51318],{"class":133},[123,87432,87433,87435,87437],{"class":125,"line":1321},[123,87434,51796],{"class":133},[123,87436,51811],{"class":51311},[123,87438,51318],{"class":133},[77,87440,87441],{"start":45},[80,87442,87443],{},"递归函数要加判断条件：",[14,87445,87446],{},[35,87447],{"alt":37,"src":87448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[77,87450,87451],{"start":1189},[80,87452,87453],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[114,87455,87457],{"className":50644,"code":87456,"language":50646,"meta":37,"style":37},"\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",[120,87458,87459,87469,87483,87487,87495,87509,87529,87541,87549,87553,87561,87573,87581,87589,87614,87626,87630,87637,87645,87653,87657],{"__ignoreMap":37},[123,87460,87461,87463,87465,87467],{"class":125,"line":126},[123,87462,51308],{"class":133},[123,87464,51312],{"class":51311},[123,87466,51315],{"class":1972},[123,87468,51318],{"class":133},[123,87470,87471,87473,87475,87477,87479,87481],{"class":125,"line":45},[123,87472,1044],{"class":133},[123,87474,50646],{"class":51311},[123,87476,51327],{"class":1972},[123,87478,179],{"class":133},[123,87480,51332],{"class":238},[123,87482,51318],{"class":133},[123,87484,87485],{"class":125,"line":1189},[123,87486,2409],{"emptyLinePlaceholder":50},[123,87488,87489,87491,87493],{"class":125,"line":1204},[123,87490,1044],{"class":133},[123,87492,51345],{"class":51311},[123,87494,51318],{"class":133},[123,87496,87497,87499,87501,87503,87505,87507],{"class":125,"line":1210},[123,87498,52155],{"class":133},[123,87500,51355],{"class":51311},[123,87502,51358],{"class":1972},[123,87504,179],{"class":133},[123,87506,51363],{"class":238},[123,87508,51318],{"class":133},[123,87510,87511,87513,87515,87517,87519,87521,87523,87525,87527],{"class":125,"line":1224},[123,87512,52155],{"class":133},[123,87514,51355],{"class":51311},[123,87516,14930],{"class":1972},[123,87518,179],{"class":133},[123,87520,51402],{"class":238},[123,87522,51382],{"class":1972},[123,87524,179],{"class":133},[123,87526,51409],{"class":238},[123,87528,51318],{"class":133},[123,87530,87531,87533,87535,87537,87539],{"class":125,"line":1230},[123,87532,52155],{"class":133},[123,87534,51418],{"class":51311},[123,87536,51421],{"class":133},[123,87538,51418],{"class":51311},[123,87540,51318],{"class":133},[123,87542,87543,87545,87547],{"class":125,"line":1321},[123,87544,51796],{"class":133},[123,87546,51345],{"class":51311},[123,87548,51318],{"class":133},[123,87550,87551],{"class":125,"line":1327},[123,87552,2409],{"emptyLinePlaceholder":50},[123,87554,87555,87557,87559],{"class":125,"line":1339},[123,87556,1044],{"class":133},[123,87558,51811],{"class":51311},[123,87560,51318],{"class":133},[123,87562,87563,87565,87567,87569,87571],{"class":125,"line":1621},[123,87564,52155],{"class":133},[123,87566,51622],{"class":51311},[123,87568,55325],{"class":133},[123,87570,51622],{"class":51311},[123,87572,51318],{"class":133},[123,87574,87575,87577,87579],{"class":125,"line":1626},[123,87576,52155],{"class":133},[123,87578,51824],{"class":51311},[123,87580,51318],{"class":133},[123,87582,87583,87585,87587],{"class":125,"line":1632},[123,87584,70095],{"class":129},[123,87586,73784],{"class":1972},[123,87588,10863],{"class":133},[123,87590,87591,87593,87595,87597,87599,87601,87603,87605,87607,87609,87612],{"class":125,"line":1637},[123,87592,55782],{"class":133},[123,87594,54410],{"class":1972},[123,87596,134],{"class":133},[123,87598,81942],{"class":238},[123,87600,74260],{"class":133},[123,87602,179],{"class":129},[123,87604,11588],{"class":129},[123,87606,73800],{"class":1972},[123,87608,17271],{"class":133},[123,87610,87611],{"class":1972},"toLocaleString",[123,87613,1985],{"class":133},[123,87615,87616,87619,87622,87624],{"class":125,"line":1651},[123,87617,87618],{"class":1972},"      setTimeout",[123,87620,87621],{"class":133},"(getTime, ",[123,87623,6420],{"class":182},[123,87625,140],{"class":133},[123,87627,87628],{"class":125,"line":1656},[123,87629,2196],{"class":133},[123,87631,87632,87635],{"class":125,"line":1662},[123,87633,87634],{"class":1972},"    getTime",[123,87636,1985],{"class":133},[123,87638,87639,87641,87643],{"class":125,"line":1683},[123,87640,52428],{"class":133},[123,87642,51824],{"class":51311},[123,87644,51318],{"class":133},[123,87646,87647,87649,87651],{"class":125,"line":1688},[123,87648,51796],{"class":133},[123,87650,51811],{"class":51311},[123,87652,51318],{"class":133},[123,87654,87655],{"class":125,"line":1702},[123,87656,2409],{"emptyLinePlaceholder":50},[123,87658,87659,87661,87663],{"class":125,"line":1707},[123,87660,51796],{"class":133},[123,87662,50646],{"class":51311},[123,87664,51318],{"class":133},[14,87666,87667],{},[35,87668],{"alt":37,"src":87669},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[77,87671,87672],{"start":1204},[80,87673,87363],{},[14,87675,87676],{},[35,87677],{"alt":37,"src":87678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,87680,87681],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,87683,39200],{},[14,87685,87686],{},"这个是简易版的递归函数深拷贝",[14,87688,87689],{},"一定要注意先数组再对象，因为万物皆可对象",[114,87691,87693],{"className":50644,"code":87692,"language":50646,"meta":37,"style":37},"\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",[120,87694,87695,87705,87719,87723,87731,87745,87765,87777,87785,87789,87797,87805,87815,87824,87832,87848,87852,87860,87864,87868,87880,87885,87904,87920,87925,87930,87935,87950,87955,87960,87969,87977,87994,88002,88008,88016,88021,88026,88035,88039,88043,88047,88058,88067,88077,88091,88101,88109,88117,88125,88129],{"__ignoreMap":37},[123,87696,87697,87699,87701,87703],{"class":125,"line":126},[123,87698,51308],{"class":133},[123,87700,51312],{"class":51311},[123,87702,51315],{"class":1972},[123,87704,51318],{"class":133},[123,87706,87707,87709,87711,87713,87715,87717],{"class":125,"line":45},[123,87708,1044],{"class":133},[123,87710,50646],{"class":51311},[123,87712,51327],{"class":1972},[123,87714,179],{"class":133},[123,87716,51332],{"class":238},[123,87718,51318],{"class":133},[123,87720,87721],{"class":125,"line":1189},[123,87722,2409],{"emptyLinePlaceholder":50},[123,87724,87725,87727,87729],{"class":125,"line":1204},[123,87726,1044],{"class":133},[123,87728,51345],{"class":51311},[123,87730,51318],{"class":133},[123,87732,87733,87735,87737,87739,87741,87743],{"class":125,"line":1210},[123,87734,52155],{"class":133},[123,87736,51355],{"class":51311},[123,87738,51358],{"class":1972},[123,87740,179],{"class":133},[123,87742,51363],{"class":238},[123,87744,51318],{"class":133},[123,87746,87747,87749,87751,87753,87755,87757,87759,87761,87763],{"class":125,"line":1224},[123,87748,52155],{"class":133},[123,87750,51355],{"class":51311},[123,87752,14930],{"class":1972},[123,87754,179],{"class":133},[123,87756,51402],{"class":238},[123,87758,51382],{"class":1972},[123,87760,179],{"class":133},[123,87762,51409],{"class":238},[123,87764,51318],{"class":133},[123,87766,87767,87769,87771,87773,87775],{"class":125,"line":1230},[123,87768,52155],{"class":133},[123,87770,51418],{"class":51311},[123,87772,51421],{"class":133},[123,87774,51418],{"class":51311},[123,87776,51318],{"class":133},[123,87778,87779,87781,87783],{"class":125,"line":1321},[123,87780,51796],{"class":133},[123,87782,51345],{"class":51311},[123,87784,51318],{"class":133},[123,87786,87787],{"class":125,"line":1327},[123,87788,2409],{"emptyLinePlaceholder":50},[123,87790,87791,87793,87795],{"class":125,"line":1339},[123,87792,1044],{"class":133},[123,87794,51811],{"class":51311},[123,87796,51318],{"class":133},[123,87798,87799,87801,87803],{"class":125,"line":1621},[123,87800,52155],{"class":133},[123,87802,51824],{"class":51311},[123,87804,51318],{"class":133},[123,87806,87807,87809,87811,87813],{"class":125,"line":1626},[123,87808,11231],{"class":129},[123,87810,69982],{"class":182},[123,87812,13574],{"class":129},[123,87814,15582],{"class":133},[123,87816,87817,87819,87822],{"class":125,"line":1632},[123,87818,71627],{"class":133},[123,87820,87821],{"class":238},"'pink'",[123,87823,31477],{"class":133},[123,87825,87826,87828,87830],{"class":125,"line":1637},[123,87827,71637],{"class":133},[123,87829,784],{"class":182},[123,87831,31477],{"class":133},[123,87833,87834,87837,87840,87842,87845],{"class":125,"line":1651},[123,87835,87836],{"class":133},"      hobby: [",[123,87838,87839],{"class":238},"'乒乓球'",[123,87841,12445],{"class":133},[123,87843,87844],{"class":238},"'足球'",[123,87846,87847],{"class":133},"],\n",[123,87849,87850],{"class":125,"line":1656},[123,87851,77883],{"class":133},[123,87853,87854,87857],{"class":125,"line":1662},[123,87855,87856],{"class":133},"        baby: ",[123,87858,87859],{"class":238},"'小pink'\n",[123,87861,87862],{"class":125,"line":1683},[123,87863,52409],{"class":133},[123,87865,87866],{"class":125,"line":1688},[123,87867,2196],{"class":133},[123,87869,87870,87872,87875,87877],{"class":125,"line":1702},[123,87871,11231],{"class":129},[123,87873,87874],{"class":182}," o",[123,87876,13574],{"class":129},[123,87878,87879],{"class":133}," {}\n",[123,87881,87882],{"class":125,"line":1707},[123,87883,87884],{"class":192},"    \u002F\u002F 拷贝函数\n",[123,87886,87887,87889,87892,87894,87897,87899,87902],{"class":125,"line":1736},[123,87888,70095],{"class":129},[123,87890,87891],{"class":1972}," deepCopy",[123,87893,134],{"class":133},[123,87895,87896],{"class":5226},"newObj",[123,87898,12445],{"class":133},[123,87900,87901],{"class":5226},"oldObj",[123,87903,12452],{"class":133},[123,87905,87906,87908,87910,87912,87915,87917],{"class":125,"line":1741},[123,87907,52295],{"class":129},[123,87909,1667],{"class":133},[123,87911,51858],{"class":129},[123,87913,87914],{"class":133}," k ",[123,87916,26054],{"class":129},[123,87918,87919],{"class":133}," oldObj) {\n",[123,87921,87922],{"class":125,"line":1758},[123,87923,87924],{"class":192},"        \u002F\u002F 处理数组的问题\n",[123,87926,87927],{"class":125,"line":1763},[123,87928,87929],{"class":192},"        \u002F\u002F 判断是否属于数组\n",[123,87931,87932],{"class":125,"line":1768},[123,87933,87934],{"class":192},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[123,87936,87937,87939,87942,87945,87948],{"class":125,"line":1773},[123,87938,2506],{"class":129},[123,87940,87941],{"class":133}," (oldObj[k] ",[123,87943,87944],{"class":129},"instanceof",[123,87946,87947],{"class":1972}," Array",[123,87949,12452],{"class":133},[123,87951,87952],{"class":125,"line":1787},[123,87953,87954],{"class":192},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[123,87956,87957],{"class":125,"line":1792},[123,87958,87959],{"class":192},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[123,87961,87962,87965,87967],{"class":125,"line":2586},[123,87963,87964],{"class":133},"          newObj[k] ",[123,87966,179],{"class":129},[123,87968,51849],{"class":133},[123,87970,87971,87974],{"class":125,"line":2600},[123,87972,87973],{"class":1972},"          deepCopy",[123,87975,87976],{"class":133},"(newObj[k], oldObj[k])\n",[123,87978,87979,87981,87983,87985,87987,87989,87992],{"class":125,"line":2608},[123,87980,80091],{"class":133},[123,87982,1710],{"class":129},[123,87984,1713],{"class":129},[123,87986,87941],{"class":133},[123,87988,87944],{"class":129},[123,87990,87991],{"class":1972}," Object",[123,87993,12452],{"class":133},[123,87995,87996,87998,88000],{"class":125,"line":2613},[123,87997,87964],{"class":133},[123,87999,179],{"class":129},[123,88001,87879],{"class":133},[123,88003,88004,88006],{"class":125,"line":2619},[123,88005,87973],{"class":1972},[123,88007,87976],{"class":133},[123,88009,88010,88012,88014],{"class":125,"line":2625},[123,88011,80091],{"class":133},[123,88013,1710],{"class":129},[123,88015,15582],{"class":133},[123,88017,88018],{"class":125,"line":2630},[123,88019,88020],{"class":192},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[123,88022,88023],{"class":125,"line":7958},[123,88024,88025],{"class":192},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[123,88027,88028,88030,88032],{"class":125,"line":7982},[123,88029,87964],{"class":133},[123,88031,179],{"class":129},[123,88033,88034],{"class":133}," oldObj[k]\n",[123,88036,88037],{"class":125,"line":7987},[123,88038,2538],{"class":133},[123,88040,88041],{"class":125,"line":7993},[123,88042,52409],{"class":133},[123,88044,88045],{"class":125,"line":8020},[123,88046,2196],{"class":133},[123,88048,88049,88052,88055],{"class":125,"line":8025},[123,88050,88051],{"class":1972},"    deepCopy",[123,88053,88054],{"class":133},"(o, obj) ",[123,88056,88057],{"class":192},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[123,88059,88060,88062,88064],{"class":125,"line":8031},[123,88061,73764],{"class":133},[123,88063,58258],{"class":1972},[123,88065,88066],{"class":133},"(o)\n",[123,88068,88069,88072,88074],{"class":125,"line":8043},[123,88070,88071],{"class":133},"    o.age ",[123,88073,179],{"class":129},[123,88075,88076],{"class":182}," 20\n",[123,88078,88079,88082,88084,88086,88088],{"class":125,"line":8055},[123,88080,88081],{"class":133},"    o.hobby[",[123,88083,325],{"class":182},[123,88085,4452],{"class":133},[123,88087,179],{"class":129},[123,88089,88090],{"class":238}," '篮球'\n",[123,88092,88093,88096,88098],{"class":125,"line":8067},[123,88094,88095],{"class":133},"    o.family ",[123,88097,179],{"class":129},[123,88099,88100],{"class":238}," '老pink'\n",[123,88102,88103,88105,88107],{"class":125,"line":9726},[123,88104,73764],{"class":133},[123,88106,58258],{"class":1972},[123,88108,70047],{"class":133},[123,88110,88111,88113,88115],{"class":125,"line":9751},[123,88112,52428],{"class":133},[123,88114,51824],{"class":51311},[123,88116,51318],{"class":133},[123,88118,88119,88121,88123],{"class":125,"line":9774},[123,88120,51796],{"class":133},[123,88122,51811],{"class":51311},[123,88124,51318],{"class":133},[123,88126,88127],{"class":125,"line":9798},[123,88128,2409],{"emptyLinePlaceholder":50},[123,88130,88131,88133,88135],{"class":125,"line":9803},[123,88132,51796],{"class":133},[123,88134,50646],{"class":51311},[123,88136,51318],{"class":133},[14,88138,88139],{},[35,88140],{"alt":37,"src":88141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[22008,88143,88145,88146],{"id":88144},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[283,88147,88148],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88150,88151],{},[372,88152,88153],{"href":88153,"rel":88154},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23875],[14,88156,88157],{},"lodash里边的方法都要加上一个下划线_",[14,88159,88160],{},"_.cloneDeep()",[114,88162,88164],{"className":50644,"code":88163,"language":50646,"meta":37,"style":37},"\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",[120,88165,88166,88176,88190,88194,88202,88216,88236,88248,88256,88260,88268,88273,88292,88300,88310,88318,88326,88338,88342,88348,88352,88356,88372,88380,88389,88397,88405,88413,88417],{"__ignoreMap":37},[123,88167,88168,88170,88172,88174],{"class":125,"line":126},[123,88169,51308],{"class":133},[123,88171,51312],{"class":51311},[123,88173,51315],{"class":1972},[123,88175,51318],{"class":133},[123,88177,88178,88180,88182,88184,88186,88188],{"class":125,"line":45},[123,88179,1044],{"class":133},[123,88181,50646],{"class":51311},[123,88183,51327],{"class":1972},[123,88185,179],{"class":133},[123,88187,51332],{"class":238},[123,88189,51318],{"class":133},[123,88191,88192],{"class":125,"line":1189},[123,88193,2409],{"emptyLinePlaceholder":50},[123,88195,88196,88198,88200],{"class":125,"line":1204},[123,88197,1044],{"class":133},[123,88199,51345],{"class":51311},[123,88201,51318],{"class":133},[123,88203,88204,88206,88208,88210,88212,88214],{"class":125,"line":1210},[123,88205,52155],{"class":133},[123,88207,51355],{"class":51311},[123,88209,51358],{"class":1972},[123,88211,179],{"class":133},[123,88213,51363],{"class":238},[123,88215,51318],{"class":133},[123,88217,88218,88220,88222,88224,88226,88228,88230,88232,88234],{"class":125,"line":1224},[123,88219,52155],{"class":133},[123,88221,51355],{"class":51311},[123,88223,14930],{"class":1972},[123,88225,179],{"class":133},[123,88227,51402],{"class":238},[123,88229,51382],{"class":1972},[123,88231,179],{"class":133},[123,88233,51409],{"class":238},[123,88235,51318],{"class":133},[123,88237,88238,88240,88242,88244,88246],{"class":125,"line":1230},[123,88239,52155],{"class":133},[123,88241,51418],{"class":51311},[123,88243,51421],{"class":133},[123,88245,51418],{"class":51311},[123,88247,51318],{"class":133},[123,88249,88250,88252,88254],{"class":125,"line":1321},[123,88251,51796],{"class":133},[123,88253,51345],{"class":51311},[123,88255,51318],{"class":133},[123,88257,88258],{"class":125,"line":1327},[123,88259,2409],{"emptyLinePlaceholder":50},[123,88261,88262,88264,88266],{"class":125,"line":1339},[123,88263,1044],{"class":133},[123,88265,51811],{"class":51311},[123,88267,51318],{"class":133},[123,88269,88270],{"class":125,"line":1621},[123,88271,88272],{"class":192},"  \u003C!-- 先引用这个库 -->\n",[123,88274,88275,88277,88279,88281,88283,88286,88288,88290],{"class":125,"line":1626},[123,88276,52155],{"class":133},[123,88278,51824],{"class":51311},[123,88280,55250],{"class":1972},[123,88282,179],{"class":133},[123,88284,88285],{"class":238},"\"lodash.min.js\"",[123,88287,55325],{"class":133},[123,88289,51824],{"class":51311},[123,88291,51318],{"class":133},[123,88293,88294,88296,88298],{"class":125,"line":1632},[123,88295,52155],{"class":133},[123,88297,51824],{"class":51311},[123,88299,51318],{"class":133},[123,88301,88302,88304,88306,88308],{"class":125,"line":1637},[123,88303,11231],{"class":129},[123,88305,69982],{"class":182},[123,88307,13574],{"class":129},[123,88309,15582],{"class":133},[123,88311,88312,88314,88316],{"class":125,"line":1651},[123,88313,71627],{"class":133},[123,88315,87821],{"class":238},[123,88317,31477],{"class":133},[123,88319,88320,88322,88324],{"class":125,"line":1656},[123,88321,71637],{"class":133},[123,88323,784],{"class":182},[123,88325,31477],{"class":133},[123,88327,88328,88330,88332,88334,88336],{"class":125,"line":1662},[123,88329,87836],{"class":133},[123,88331,87839],{"class":238},[123,88333,12445],{"class":133},[123,88335,87844],{"class":238},[123,88337,87847],{"class":133},[123,88339,88340],{"class":125,"line":1683},[123,88341,77883],{"class":133},[123,88343,88344,88346],{"class":125,"line":1688},[123,88345,87856],{"class":133},[123,88347,87859],{"class":238},[123,88349,88350],{"class":125,"line":1702},[123,88351,52409],{"class":133},[123,88353,88354],{"class":125,"line":1707},[123,88355,2196],{"class":133},[123,88357,88358,88360,88362,88364,88367,88370],{"class":125,"line":1736},[123,88359,11231],{"class":129},[123,88361,87874],{"class":182},[123,88363,13574],{"class":129},[123,88365,88366],{"class":133}," _.",[123,88368,88369],{"class":1972},"cloneDeep",[123,88371,70047],{"class":133},[123,88373,88374,88376,88378],{"class":125,"line":1741},[123,88375,73764],{"class":133},[123,88377,58258],{"class":1972},[123,88379,88066],{"class":133},[123,88381,88382,88385,88387],{"class":125,"line":1758},[123,88383,88384],{"class":133},"    o.family.baby ",[123,88386,179],{"class":129},[123,88388,88100],{"class":238},[123,88390,88391,88393,88395],{"class":125,"line":1763},[123,88392,73764],{"class":133},[123,88394,58258],{"class":1972},[123,88396,70047],{"class":133},[123,88398,88399,88401,88403],{"class":125,"line":1768},[123,88400,52428],{"class":133},[123,88402,51824],{"class":51311},[123,88404,51318],{"class":133},[123,88406,88407,88409,88411],{"class":125,"line":1773},[123,88408,51796],{"class":133},[123,88410,51811],{"class":51311},[123,88412,51318],{"class":133},[123,88414,88415],{"class":125,"line":1787},[123,88416,2409],{"emptyLinePlaceholder":50},[123,88418,88419,88421,88423],{"class":125,"line":1792},[123,88420,51796],{"class":133},[123,88422,50646],{"class":51311},[123,88424,51318],{"class":133},[14,88426,88427],{},[35,88428],{"alt":37,"src":88429},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[22008,88431,88433],{"id":88432},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[114,88435,88437],{"className":50644,"code":88436,"language":50646,"meta":37,"style":37},"\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",[120,88438,88439,88449,88463,88467,88475,88489,88509,88521,88529,88533,88541,88549,88559,88567,88575,88587,88591,88597,88601,88605,88610,88615,88620,88646,88654,88663,88671,88679,88687,88691],{"__ignoreMap":37},[123,88440,88441,88443,88445,88447],{"class":125,"line":126},[123,88442,51308],{"class":133},[123,88444,51312],{"class":51311},[123,88446,51315],{"class":1972},[123,88448,51318],{"class":133},[123,88450,88451,88453,88455,88457,88459,88461],{"class":125,"line":45},[123,88452,1044],{"class":133},[123,88454,50646],{"class":51311},[123,88456,51327],{"class":1972},[123,88458,179],{"class":133},[123,88460,51332],{"class":238},[123,88462,51318],{"class":133},[123,88464,88465],{"class":125,"line":1189},[123,88466,2409],{"emptyLinePlaceholder":50},[123,88468,88469,88471,88473],{"class":125,"line":1204},[123,88470,1044],{"class":133},[123,88472,51345],{"class":51311},[123,88474,51318],{"class":133},[123,88476,88477,88479,88481,88483,88485,88487],{"class":125,"line":1210},[123,88478,52155],{"class":133},[123,88480,51355],{"class":51311},[123,88482,51358],{"class":1972},[123,88484,179],{"class":133},[123,88486,51363],{"class":238},[123,88488,51318],{"class":133},[123,88490,88491,88493,88495,88497,88499,88501,88503,88505,88507],{"class":125,"line":1224},[123,88492,52155],{"class":133},[123,88494,51355],{"class":51311},[123,88496,14930],{"class":1972},[123,88498,179],{"class":133},[123,88500,51402],{"class":238},[123,88502,51382],{"class":1972},[123,88504,179],{"class":133},[123,88506,51409],{"class":238},[123,88508,51318],{"class":133},[123,88510,88511,88513,88515,88517,88519],{"class":125,"line":1230},[123,88512,52155],{"class":133},[123,88514,51418],{"class":51311},[123,88516,51421],{"class":133},[123,88518,51418],{"class":51311},[123,88520,51318],{"class":133},[123,88522,88523,88525,88527],{"class":125,"line":1321},[123,88524,51796],{"class":133},[123,88526,51345],{"class":51311},[123,88528,51318],{"class":133},[123,88530,88531],{"class":125,"line":1327},[123,88532,2409],{"emptyLinePlaceholder":50},[123,88534,88535,88537,88539],{"class":125,"line":1339},[123,88536,1044],{"class":133},[123,88538,51811],{"class":51311},[123,88540,51318],{"class":133},[123,88542,88543,88545,88547],{"class":125,"line":1621},[123,88544,52155],{"class":133},[123,88546,51824],{"class":51311},[123,88548,51318],{"class":133},[123,88550,88551,88553,88555,88557],{"class":125,"line":1626},[123,88552,11231],{"class":129},[123,88554,69982],{"class":182},[123,88556,13574],{"class":129},[123,88558,15582],{"class":133},[123,88560,88561,88563,88565],{"class":125,"line":1632},[123,88562,71627],{"class":133},[123,88564,87821],{"class":238},[123,88566,31477],{"class":133},[123,88568,88569,88571,88573],{"class":125,"line":1637},[123,88570,71637],{"class":133},[123,88572,784],{"class":182},[123,88574,31477],{"class":133},[123,88576,88577,88579,88581,88583,88585],{"class":125,"line":1651},[123,88578,87836],{"class":133},[123,88580,87839],{"class":238},[123,88582,12445],{"class":133},[123,88584,87844],{"class":238},[123,88586,87847],{"class":133},[123,88588,88589],{"class":125,"line":1656},[123,88590,77883],{"class":133},[123,88592,88593,88595],{"class":125,"line":1662},[123,88594,87856],{"class":133},[123,88596,87859],{"class":238},[123,88598,88599],{"class":125,"line":1683},[123,88600,52409],{"class":133},[123,88602,88603],{"class":125,"line":1688},[123,88604,2196],{"class":133},[123,88606,88607],{"class":125,"line":1702},[123,88608,88609],{"class":192},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[123,88611,88612],{"class":125,"line":1707},[123,88613,88614],{"class":192},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[123,88616,88617],{"class":125,"line":1736},[123,88618,88619],{"class":192},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[123,88621,88622,88624,88626,88628,88631,88633,88636,88638,88640,88642,88644],{"class":125,"line":1741},[123,88623,11231],{"class":129},[123,88625,87874],{"class":182},[123,88627,13574],{"class":129},[123,88629,88630],{"class":182}," JSON",[123,88632,692],{"class":133},[123,88634,88635],{"class":1972},"parse",[123,88637,134],{"class":133},[123,88639,71675],{"class":182},[123,88641,692],{"class":133},[123,88643,71680],{"class":1972},[123,88645,71683],{"class":133},[123,88647,88648,88650,88652],{"class":125,"line":1758},[123,88649,73764],{"class":133},[123,88651,58258],{"class":1972},[123,88653,88066],{"class":133},[123,88655,88656,88658,88660],{"class":125,"line":1763},[123,88657,88384],{"class":133},[123,88659,179],{"class":129},[123,88661,88662],{"class":238}," '123'\n",[123,88664,88665,88667,88669],{"class":125,"line":1768},[123,88666,73764],{"class":133},[123,88668,58258],{"class":1972},[123,88670,70047],{"class":133},[123,88672,88673,88675,88677],{"class":125,"line":1773},[123,88674,52428],{"class":133},[123,88676,51824],{"class":51311},[123,88678,51318],{"class":133},[123,88680,88681,88683,88685],{"class":125,"line":1787},[123,88682,51796],{"class":133},[123,88684,51811],{"class":51311},[123,88686,51318],{"class":133},[123,88688,88689],{"class":125,"line":1792},[123,88690,2409],{"emptyLinePlaceholder":50},[123,88692,88693,88695,88697],{"class":125,"line":2586},[123,88694,51796],{"class":133},[123,88696,50646],{"class":51311},[123,88698,51318],{"class":133},[14,88700,88701],{},[35,88702],{"alt":37,"src":88703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[65,88705,88707],{"id":88706},"_415-异常处理","4.15 异常处理",[77,88709,88710],{},[80,88711,88712],{},"throw抛异常",[14,88714,88715],{},[35,88716],{"alt":37,"src":88717},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[77,88719,88720],{"start":45},[80,88721,88722],{},"try\u002Fcatch 捕获错误信息",[14,88724,88725],{},[35,88726],{"alt":37,"src":88727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[114,88729,88731],{"className":50644,"code":88730,"language":50646,"meta":37,"style":37},"\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",[120,88732,88733,88743,88757,88761,88769,88783,88803,88815,88823,88827,88835,88847,88855,88864,88871,88876,88895,88904,88915,88920,88930,88935,88940,88945,88962,88966,88971,88978,88990,88994,89006,89010,89014,89019,89024,89031,89039,89047,89051],{"__ignoreMap":37},[123,88734,88735,88737,88739,88741],{"class":125,"line":126},[123,88736,51308],{"class":133},[123,88738,51312],{"class":51311},[123,88740,51315],{"class":1972},[123,88742,51318],{"class":133},[123,88744,88745,88747,88749,88751,88753,88755],{"class":125,"line":45},[123,88746,1044],{"class":133},[123,88748,50646],{"class":51311},[123,88750,51327],{"class":1972},[123,88752,179],{"class":133},[123,88754,51332],{"class":238},[123,88756,51318],{"class":133},[123,88758,88759],{"class":125,"line":1189},[123,88760,2409],{"emptyLinePlaceholder":50},[123,88762,88763,88765,88767],{"class":125,"line":1204},[123,88764,1044],{"class":133},[123,88766,51345],{"class":51311},[123,88768,51318],{"class":133},[123,88770,88771,88773,88775,88777,88779,88781],{"class":125,"line":1210},[123,88772,52155],{"class":133},[123,88774,51355],{"class":51311},[123,88776,51358],{"class":1972},[123,88778,179],{"class":133},[123,88780,51363],{"class":238},[123,88782,51318],{"class":133},[123,88784,88785,88787,88789,88791,88793,88795,88797,88799,88801],{"class":125,"line":1224},[123,88786,52155],{"class":133},[123,88788,51355],{"class":51311},[123,88790,14930],{"class":1972},[123,88792,179],{"class":133},[123,88794,51402],{"class":238},[123,88796,51382],{"class":1972},[123,88798,179],{"class":133},[123,88800,51409],{"class":238},[123,88802,51318],{"class":133},[123,88804,88805,88807,88809,88811,88813],{"class":125,"line":1230},[123,88806,52155],{"class":133},[123,88808,51418],{"class":51311},[123,88810,51421],{"class":133},[123,88812,51418],{"class":51311},[123,88814,51318],{"class":133},[123,88816,88817,88819,88821],{"class":125,"line":1321},[123,88818,51796],{"class":133},[123,88820,51345],{"class":51311},[123,88822,51318],{"class":133},[123,88824,88825],{"class":125,"line":1327},[123,88826,2409],{"emptyLinePlaceholder":50},[123,88828,88829,88831,88833],{"class":125,"line":1339},[123,88830,1044],{"class":133},[123,88832,51811],{"class":51311},[123,88834,51318],{"class":133},[123,88836,88837,88839,88841,88843,88845],{"class":125,"line":1621},[123,88838,52155],{"class":133},[123,88840,14],{"class":51311},[123,88842,53505],{"class":133},[123,88844,14],{"class":51311},[123,88846,51318],{"class":133},[123,88848,88849,88851,88853],{"class":125,"line":1626},[123,88850,52155],{"class":133},[123,88852,51824],{"class":51311},[123,88854,51318],{"class":133},[123,88856,88857,88859,88862],{"class":125,"line":1632},[123,88858,70095],{"class":129},[123,88860,88861],{"class":1972}," fn",[123,88863,10863],{"class":133},[123,88865,88866,88869],{"class":125,"line":1637},[123,88867,88868],{"class":129},"      try",[123,88870,15582],{"class":133},[123,88872,88873],{"class":125,"line":1651},[123,88874,88875],{"class":192},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[123,88877,88878,88880,88882,88884,88886,88888,88890,88893],{"class":125,"line":1656},[123,88879,61281],{"class":129},[123,88881,6835],{"class":182},[123,88883,13574],{"class":129},[123,88885,54407],{"class":133},[123,88887,54410],{"class":1972},[123,88889,134],{"class":133},[123,88891,88892],{"class":238},"'.p'",[123,88894,140],{"class":133},[123,88896,88897,88900,88902],{"class":125,"line":1662},[123,88898,88899],{"class":133},"        p.style.color ",[123,88901,179],{"class":129},[123,88903,67062],{"class":238},[123,88905,88906,88909,88912],{"class":125,"line":1683},[123,88907,88908],{"class":133},"      } ",[123,88910,88911],{"class":129},"catch",[123,88913,88914],{"class":133}," (err) {\n",[123,88916,88917],{"class":125,"line":1688},[123,88918,88919],{"class":192},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[123,88921,88922,88925,88927],{"class":125,"line":1702},[123,88923,88924],{"class":133},"        console.",[123,88926,58258],{"class":1972},[123,88928,88929],{"class":133},"(err.message)\n",[123,88931,88932],{"class":125,"line":1707},[123,88933,88934],{"class":192},"        \u002F\u002F 想要中断程序，需要加return\n",[123,88936,88937],{"class":125,"line":1736},[123,88938,88939],{"class":192},"        \u002F\u002F return\n",[123,88941,88942],{"class":125,"line":1741},[123,88943,88944],{"class":192},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[123,88946,88947,88950,88952,88955,88957,88960],{"class":125,"line":1758},[123,88948,88949],{"class":129},"        throw",[123,88951,11588],{"class":129},[123,88953,88954],{"class":1972}," Error",[123,88956,134],{"class":133},[123,88958,88959],{"class":238},"'你看看，选择器错误了吧'",[123,88961,140],{"class":133},[123,88963,88964],{"class":125,"line":1763},[123,88965,52409],{"class":133},[123,88967,88968],{"class":125,"line":1768},[123,88969,88970],{"class":192},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[123,88972,88973,88976],{"class":125,"line":1773},[123,88974,88975],{"class":129},"      finally",[123,88977,15582],{"class":133},[123,88979,88980,88983,88985,88988],{"class":125,"line":1787},[123,88981,88982],{"class":1972},"        alert",[123,88984,134],{"class":133},[123,88986,88987],{"class":238},"'弹出对话框'",[123,88989,140],{"class":133},[123,88991,88992],{"class":125,"line":1792},[123,88993,52409],{"class":133},[123,88995,88996,88998,89000,89002,89004],{"class":125,"line":2586},[123,88997,58255],{"class":133},[123,88999,58258],{"class":1972},[123,89001,134],{"class":133},[123,89003,606],{"class":182},[123,89005,140],{"class":133},[123,89007,89008],{"class":125,"line":2600},[123,89009,2409],{"emptyLinePlaceholder":50},[123,89011,89012],{"class":125,"line":2608},[123,89013,2196],{"class":133},[123,89015,89016],{"class":125,"line":2613},[123,89017,89018],{"class":192},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[123,89020,89021],{"class":125,"line":2619},[123,89022,89023],{"class":192},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[123,89025,89026,89029],{"class":125,"line":2625},[123,89027,89028],{"class":1972},"    fn",[123,89030,1985],{"class":133},[123,89032,89033,89035,89037],{"class":125,"line":2630},[123,89034,52428],{"class":133},[123,89036,51824],{"class":51311},[123,89038,51318],{"class":133},[123,89040,89041,89043,89045],{"class":125,"line":7958},[123,89042,51796],{"class":133},[123,89044,51811],{"class":51311},[123,89046,51318],{"class":133},[123,89048,89049],{"class":125,"line":7982},[123,89050,2409],{"emptyLinePlaceholder":50},[123,89052,89053,89055,89057],{"class":125,"line":7987},[123,89054,51796],{"class":133},[123,89056,50646],{"class":51311},[123,89058,51318],{"class":133},[14,89060,89061],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[77,89063,89064],{"start":1189},[80,89065,89066],{},"debugger",[14,89068,89069],{},[35,89070],{"alt":37,"src":89071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89073,89074],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[65,89076,89078],{"id":89077},"_416-处理this","4.16 处理this",[94,89080,89082],{"id":89081},"_4161-this的指向","4.16.1 this的指向",[77,89084,89085],{},[80,89086,89087],{},"普通函数的this",[14,89089,89090],{},[35,89091],{"alt":37,"src":89092},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[77,89094,89095],{"start":45},[80,89096,89097],{},"箭头函数的this",[14,89099,89100],{},[35,89101],{"alt":37,"src":89102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89104,89105],{},[35,89106],{"alt":37,"src":89107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89109,89110],{},[35,89111],{"alt":37,"src":89112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[94,89114,89116],{"id":89115},"_4162-this的改变","4.16.2 this的改变",[14,89118,89119],{},"call() apply() bind()",[77,89121,89122],{},[80,89123,89124],{},"call()",[14,89126,89127],{},[35,89128],{"alt":37,"src":89129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89131,89132],{},"两个作用：①调用函数；②改变this指向",[114,89134,89136],{"className":53078,"code":89135,"language":53080,"meta":37,"style":37},"\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",[120,89137,89138,89146,89154,89158,89163,89167,89172,89177,89182,89186,89191,89199],{"__ignoreMap":37},[123,89139,89140,89142,89144],{"class":125,"line":126},[123,89141,1044],{"class":133},[123,89143,51811],{"class":51311},[123,89145,51318],{"class":133},[123,89147,89148,89150,89152],{"class":125,"line":45},[123,89149,52155],{"class":133},[123,89151,51824],{"class":51311},[123,89153,51318],{"class":133},[123,89155,89156],{"class":125,"line":1189},[123,89157,71534],{"class":133},[123,89159,89160],{"class":125,"line":1204},[123,89161,89162],{"class":133},"      uname: 'pink'\n",[123,89164,89165],{"class":125,"line":1210},[123,89166,2196],{"class":133},[123,89168,89169],{"class":125,"line":1224},[123,89170,89171],{"class":133},"    function fn(x, y) {\n",[123,89173,89174],{"class":125,"line":1230},[123,89175,89176],{"class":133},"      console.log(this)  \u002F\u002Fwindow\n",[123,89178,89179],{"class":125,"line":1321},[123,89180,89181],{"class":133},"      console.log(x + y)\n",[123,89183,89184],{"class":125,"line":1327},[123,89185,2196],{"class":133},[123,89187,89188],{"class":125,"line":1339},[123,89189,89190],{"class":133},"    fn.call(obj, 1, 2)\n",[123,89192,89193,89195,89197],{"class":125,"line":1621},[123,89194,52428],{"class":133},[123,89196,51824],{"class":51311},[123,89198,51318],{"class":133},[123,89200,89201,89203,89205],{"class":125,"line":1626},[123,89202,51796],{"class":133},[123,89204,51811],{"class":51311},[123,89206,51318],{"class":133},[14,89208,89209],{},[35,89210],{"alt":37,"src":89211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[77,89213,89214],{"start":45},[80,89215,89216],{},"apply()",[14,89218,89219],{},[35,89220],{"alt":37,"src":89221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89223,89132],{},[14,89225,89226],{},"call传递的是普通参数，而apply必须传递的是数组",[114,89228,89230],{"className":50644,"code":89229,"language":50646,"meta":37,"style":37},"\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",[120,89231,89232,89242,89256,89260,89268,89282,89302,89314,89322,89326,89334,89342,89352,89359,89363,89368,89384,89396,89410,89414,89419,89438,89443,89447,89452,89457,89465,89470,89492,89497,89513,89529,89541,89545,89550,89569,89577,89585,89589],{"__ignoreMap":37},[123,89233,89234,89236,89238,89240],{"class":125,"line":126},[123,89235,51308],{"class":133},[123,89237,51312],{"class":51311},[123,89239,51315],{"class":1972},[123,89241,51318],{"class":133},[123,89243,89244,89246,89248,89250,89252,89254],{"class":125,"line":45},[123,89245,1044],{"class":133},[123,89247,50646],{"class":51311},[123,89249,51327],{"class":1972},[123,89251,179],{"class":133},[123,89253,51332],{"class":238},[123,89255,51318],{"class":133},[123,89257,89258],{"class":125,"line":1189},[123,89259,2409],{"emptyLinePlaceholder":50},[123,89261,89262,89264,89266],{"class":125,"line":1204},[123,89263,1044],{"class":133},[123,89265,51345],{"class":51311},[123,89267,51318],{"class":133},[123,89269,89270,89272,89274,89276,89278,89280],{"class":125,"line":1210},[123,89271,52155],{"class":133},[123,89273,51355],{"class":51311},[123,89275,51358],{"class":1972},[123,89277,179],{"class":133},[123,89279,51363],{"class":238},[123,89281,51318],{"class":133},[123,89283,89284,89286,89288,89290,89292,89294,89296,89298,89300],{"class":125,"line":1224},[123,89285,52155],{"class":133},[123,89287,51355],{"class":51311},[123,89289,14930],{"class":1972},[123,89291,179],{"class":133},[123,89293,51402],{"class":238},[123,89295,51382],{"class":1972},[123,89297,179],{"class":133},[123,89299,51409],{"class":238},[123,89301,51318],{"class":133},[123,89303,89304,89306,89308,89310,89312],{"class":125,"line":1230},[123,89305,52155],{"class":133},[123,89307,51418],{"class":51311},[123,89309,51421],{"class":133},[123,89311,51418],{"class":51311},[123,89313,51318],{"class":133},[123,89315,89316,89318,89320],{"class":125,"line":1321},[123,89317,51796],{"class":133},[123,89319,51345],{"class":51311},[123,89321,51318],{"class":133},[123,89323,89324],{"class":125,"line":1327},[123,89325,2409],{"emptyLinePlaceholder":50},[123,89327,89328,89330,89332],{"class":125,"line":1339},[123,89329,1044],{"class":133},[123,89331,51811],{"class":51311},[123,89333,51318],{"class":133},[123,89335,89336,89338,89340],{"class":125,"line":1621},[123,89337,52155],{"class":133},[123,89339,51824],{"class":51311},[123,89341,51318],{"class":133},[123,89343,89344,89346,89348,89350],{"class":125,"line":1626},[123,89345,11231],{"class":129},[123,89347,69982],{"class":182},[123,89349,13574],{"class":129},[123,89351,15582],{"class":133},[123,89353,89354,89356],{"class":125,"line":1632},[123,89355,71637],{"class":133},[123,89357,89358],{"class":182},"18\n",[123,89360,89361],{"class":125,"line":1637},[123,89362,2196],{"class":133},[123,89364,89365],{"class":125,"line":1651},[123,89366,89367],{"class":192},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[123,89369,89370,89372,89374,89376,89378,89380,89382],{"class":125,"line":1656},[123,89371,70095],{"class":129},[123,89373,88861],{"class":1972},[123,89375,134],{"class":133},[123,89377,954],{"class":5226},[123,89379,12445],{"class":133},[123,89381,979],{"class":5226},[123,89383,12452],{"class":133},[123,89385,89386,89388,89390,89392,89394],{"class":125,"line":1662},[123,89387,58255],{"class":133},[123,89389,58258],{"class":1972},[123,89391,134],{"class":133},[123,89393,87004],{"class":182},[123,89395,140],{"class":133},[123,89397,89398,89400,89402,89405,89407],{"class":125,"line":1683},[123,89399,58255],{"class":133},[123,89401,58258],{"class":1972},[123,89403,89404],{"class":133},"(x ",[123,89406,615],{"class":129},[123,89408,89409],{"class":133}," y)\n",[123,89411,89412],{"class":125,"line":1688},[123,89413,2196],{"class":133},[123,89415,89416],{"class":125,"line":1702},[123,89417,89418],{"class":192},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[123,89420,89421,89424,89427,89430,89432,89434,89436],{"class":125,"line":1707},[123,89422,89423],{"class":133},"    fn.",[123,89425,89426],{"class":1972},"apply",[123,89428,89429],{"class":133},"(obj, [",[123,89431,351],{"class":182},[123,89433,12445],{"class":133},[123,89435,211],{"class":182},[123,89437,4666],{"class":133},[123,89439,89440],{"class":125,"line":1736},[123,89441,89442],{"class":192},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[123,89444,89445],{"class":125,"line":1741},[123,89446,2409],{"emptyLinePlaceholder":50},[123,89448,89449],{"class":125,"line":1758},[123,89450,89451],{"class":192},"    \u002F\u002F 使用场景：求数组最大值\n",[123,89453,89454],{"class":125,"line":1763},[123,89455,89456],{"class":192},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[123,89458,89459,89462],{"class":125,"line":1768},[123,89460,89461],{"class":192},"    \u002F\u002F console.log(max)",[123,89463,89464],{"class":192},"   \u002F\u002F3\n",[123,89466,89467],{"class":125,"line":1773},[123,89468,89469],{"class":192},"    \u002F\u002F 指向空或者Math都是可以的\n",[123,89471,89472,89474,89476,89478,89480,89482,89484,89486,89488,89490],{"class":125,"line":1787},[123,89473,11231],{"class":129},[123,89475,57706],{"class":182},[123,89477,13574],{"class":129},[123,89479,52237],{"class":133},[123,89481,445],{"class":182},[123,89483,12445],{"class":133},[123,89485,638],{"class":182},[123,89487,12445],{"class":133},[123,89489,669],{"class":182},[123,89491,33257],{"class":133},[123,89493,89494],{"class":125,"line":1792},[123,89495,89496],{"class":192},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[123,89498,89499,89501,89503,89505,89508,89510],{"class":125,"line":2586},[123,89500,11231],{"class":129},[123,89502,5961],{"class":182},[123,89504,13574],{"class":129},[123,89506,89507],{"class":133}," Math.max.",[123,89509,89426],{"class":1972},[123,89511,89512],{"class":133},"(Math, arr)\n",[123,89514,89515,89517,89520,89522,89525,89527],{"class":125,"line":2600},[123,89516,11231],{"class":129},[123,89518,89519],{"class":182}," min",[123,89521,13574],{"class":129},[123,89523,89524],{"class":133}," Math.min.",[123,89526,89426],{"class":1972},[123,89528,89512],{"class":133},[123,89530,89531,89533,89535,89538],{"class":125,"line":2608},[123,89532,73764],{"class":133},[123,89534,58258],{"class":1972},[123,89536,89537],{"class":133},"(max, min)     ",[123,89539,89540],{"class":192},"\u002F\u002F100,4\n",[123,89542,89543],{"class":125,"line":2613},[123,89544,2409],{"emptyLinePlaceholder":50},[123,89546,89547],{"class":125,"line":2619},[123,89548,89549],{"class":192},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[123,89551,89552,89554,89556,89559,89561,89563,89566],{"class":125,"line":2625},[123,89553,73764],{"class":133},[123,89555,58258],{"class":1972},[123,89557,89558],{"class":133},"(Max.",[123,89560,6025],{"class":1972},[123,89562,134],{"class":133},[123,89564,89565],{"class":129},"...",[123,89567,89568],{"class":133},"arr))\n",[123,89570,89571,89573,89575],{"class":125,"line":2630},[123,89572,52428],{"class":133},[123,89574,51824],{"class":51311},[123,89576,51318],{"class":133},[123,89578,89579,89581,89583],{"class":125,"line":7958},[123,89580,51796],{"class":133},[123,89582,51811],{"class":51311},[123,89584,51318],{"class":133},[123,89586,89587],{"class":125,"line":7982},[123,89588,2409],{"emptyLinePlaceholder":50},[123,89590,89591,89593,89595],{"class":125,"line":7987},[123,89592,51796],{"class":133},[123,89594,50646],{"class":51311},[123,89596,51318],{"class":133},[14,89598,89599],{},[35,89600],{"alt":37,"src":89601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[77,89603,89604],{"start":1189},[80,89605,89606],{},"bind()",[14,89608,89609],{},[35,89610],{"alt":37,"src":89611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,89613,89614],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,89616,89617],{},"bind的语法跟call很相似",[114,89619,89621],{"className":53078,"code":89620,"language":53080,"meta":37,"style":37},"\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",[120,89622,89623,89631,89639,89643,89648,89652,89656,89661,89665,89670,89675,89680,89685,89690,89695,89700,89704,89712],{"__ignoreMap":37},[123,89624,89625,89627,89629],{"class":125,"line":126},[123,89626,1044],{"class":133},[123,89628,51811],{"class":51311},[123,89630,51318],{"class":133},[123,89632,89633,89635,89637],{"class":125,"line":45},[123,89634,52155],{"class":133},[123,89636,51824],{"class":51311},[123,89638,51318],{"class":133},[123,89640,89641],{"class":125,"line":1189},[123,89642,71534],{"class":133},[123,89644,89645],{"class":125,"line":1204},[123,89646,89647],{"class":133},"      age: 18\n",[123,89649,89650],{"class":125,"line":1210},[123,89651,2196],{"class":133},[123,89653,89654],{"class":125,"line":1224},[123,89655,77154],{"class":133},[123,89657,89658],{"class":125,"line":1230},[123,89659,89660],{"class":133},"      console.log(this)\n",[123,89662,89663],{"class":125,"line":1321},[123,89664,2196],{"class":133},[123,89666,89667],{"class":125,"line":1327},[123,89668,89669],{"class":133},"    \u002F\u002F 1.bind 不会调用函数\n",[123,89671,89672],{"class":125,"line":1339},[123,89673,89674],{"class":133},"    \u002F\u002F 2.bind能改变this的指向\n",[123,89676,89677],{"class":125,"line":1621},[123,89678,89679],{"class":133},"    fn.bind()\n",[123,89681,89682],{"class":125,"line":1626},[123,89683,89684],{"class":133},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[123,89686,89687],{"class":125,"line":1632},[123,89688,89689],{"class":133},"    const fun = fn.bind(obj)\n",[123,89691,89692],{"class":125,"line":1637},[123,89693,89694],{"class":133},"    \u002F\u002F console.log(fun)\n",[123,89696,89697],{"class":125,"line":1651},[123,89698,89699],{"class":133},"    \u002F\u002F 调用,查看this的指向\n",[123,89701,89702],{"class":125,"line":1656},[123,89703,52662],{"class":133},[123,89705,89706,89708,89710],{"class":125,"line":1662},[123,89707,52428],{"class":133},[123,89709,51824],{"class":51311},[123,89711,51318],{"class":133},[123,89713,89714,89716,89718],{"class":125,"line":1683},[123,89715,51796],{"class":133},[123,89717,51811],{"class":51311},[123,89719,51318],{"class":133},[14,89721,89722],{},[35,89723],{"alt":37,"src":89724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[77,89726,89727],{"start":1204},[80,89728,89729],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[114,89731,89733],{"className":53078,"code":89732,"language":53080,"meta":37,"style":37},"\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",[120,89734,89735,89743,89756,89764,89769,89773,89778,89783,89788,89793,89798,89803,89808,89813,89817,89825],{"__ignoreMap":37},[123,89736,89737,89739,89741],{"class":125,"line":126},[123,89738,1044],{"class":133},[123,89740,51811],{"class":51311},[123,89742,51318],{"class":133},[123,89744,89745,89747,89749,89752,89754],{"class":125,"line":45},[123,89746,52155],{"class":133},[123,89748,53898],{"class":51311},[123,89750,89751],{"class":133},">禁用\u003C\u002F",[123,89753,53898],{"class":51311},[123,89755,51318],{"class":133},[123,89757,89758,89760,89762],{"class":125,"line":1189},[123,89759,52155],{"class":133},[123,89761,51824],{"class":51311},[123,89763,51318],{"class":133},[123,89765,89766],{"class":125,"line":1204},[123,89767,89768],{"class":133},"    const btn = document.querySelector('button')\n",[123,89770,89771],{"class":125,"line":1210},[123,89772,59027],{"class":133},[123,89774,89775],{"class":125,"line":1224},[123,89776,89777],{"class":133},"      this.disabled = true\n",[123,89779,89780],{"class":125,"line":1230},[123,89781,89782],{"class":133},"      \u002F\u002F 定时器是window进行调用的\n",[123,89784,89785],{"class":125,"line":1321},[123,89786,89787],{"class":133},"      setTimeout(function () {\n",[123,89789,89790],{"class":125,"line":1327},[123,89791,89792],{"class":133},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[123,89794,89795],{"class":125,"line":1339},[123,89796,89797],{"class":133},"        this.disabled = false\n",[123,89799,89800],{"class":125,"line":1621},[123,89801,89802],{"class":133},"      }.bind(this), 2000)\n",[123,89804,89805],{"class":125,"line":1626},[123,89806,89807],{"class":133},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[123,89809,89810],{"class":125,"line":1632},[123,89811,89812],{"class":133},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[123,89814,89815],{"class":125,"line":1637},[123,89816,33472],{"class":133},[123,89818,89819,89821,89823],{"class":125,"line":1651},[123,89820,52428],{"class":133},[123,89822,51824],{"class":51311},[123,89824,51318],{"class":133},[123,89826,89827,89829,89831],{"class":125,"line":1656},[123,89828,51796],{"class":133},[123,89830,51811],{"class":51311},[123,89832,51318],{"class":133},[77,89834,89835],{"start":1210},[80,89836,21963],{},[14,89838,89839],{},[35,89840],{"alt":37,"src":89841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[65,89843,89845],{"id":89844},"_417-性能优化","4.17 性能优化",[94,89847,89849],{"id":89848},"_4171-防抖","4.17.1 防抖",[14,89851,89852],{},[35,89853],{"alt":37,"src":89854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,89856,89857],{},[283,89858,89859],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,89861,89862],{},"防抖实现方式：",[1141,89864,89865],{},[80,89866,89867],{},"lodash 提供了防抖处理",[14,89869,89870],{},"_.debounce(func,[wait=0],[options={}])",[14,89872,89873],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[114,89875,89877],{"className":50644,"code":89876,"language":50646,"meta":37,"style":37},"\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",[120,89878,89879,89889,89903,89907,89915,89929,89949,89961,89969,89975,89985,89997,90009,90020,90032,90042,90052,90065,90069,90077,90085,90089,90097,90115,90133,90141,90160,90170,90179,90190,90195,90199,90204,90209,90214,90239,90247,90255,90259],{"__ignoreMap":37},[123,89880,89881,89883,89885,89887],{"class":125,"line":126},[123,89882,51308],{"class":133},[123,89884,51312],{"class":51311},[123,89886,51315],{"class":1972},[123,89888,51318],{"class":133},[123,89890,89891,89893,89895,89897,89899,89901],{"class":125,"line":45},[123,89892,1044],{"class":133},[123,89894,50646],{"class":51311},[123,89896,51327],{"class":1972},[123,89898,179],{"class":133},[123,89900,51332],{"class":238},[123,89902,51318],{"class":133},[123,89904,89905],{"class":125,"line":1189},[123,89906,2409],{"emptyLinePlaceholder":50},[123,89908,89909,89911,89913],{"class":125,"line":1204},[123,89910,1044],{"class":133},[123,89912,51345],{"class":51311},[123,89914,51318],{"class":133},[123,89916,89917,89919,89921,89923,89925,89927],{"class":125,"line":1210},[123,89918,52155],{"class":133},[123,89920,51355],{"class":51311},[123,89922,51358],{"class":1972},[123,89924,179],{"class":133},[123,89926,51363],{"class":238},[123,89928,51318],{"class":133},[123,89930,89931,89933,89935,89937,89939,89941,89943,89945,89947],{"class":125,"line":1224},[123,89932,52155],{"class":133},[123,89934,51355],{"class":51311},[123,89936,14930],{"class":1972},[123,89938,179],{"class":133},[123,89940,51402],{"class":238},[123,89942,51382],{"class":1972},[123,89944,179],{"class":133},[123,89946,51409],{"class":238},[123,89948,51318],{"class":133},[123,89950,89951,89953,89955,89957,89959],{"class":125,"line":1230},[123,89952,52155],{"class":133},[123,89954,51418],{"class":51311},[123,89956,51421],{"class":133},[123,89958,51418],{"class":51311},[123,89960,51318],{"class":133},[123,89962,89963,89965,89967],{"class":125,"line":1321},[123,89964,52155],{"class":133},[123,89966,5136],{"class":51311},[123,89968,51318],{"class":133},[123,89970,89971,89973],{"class":125,"line":1327},[123,89972,54763],{"class":1972},[123,89974,15582],{"class":133},[123,89976,89977,89979,89981,89983],{"class":125,"line":1339},[123,89978,72607],{"class":182},[123,89980,51448],{"class":133},[123,89982,60516],{"class":182},[123,89984,1300],{"class":133},[123,89986,89987,89989,89991,89993,89995],{"class":125,"line":1621},[123,89988,54782],{"class":182},[123,89990,51448],{"class":133},[123,89992,1731],{"class":182},[123,89994,51503],{"class":129},[123,89996,1300],{"class":133},[123,89998,89999,90001,90003,90005,90007],{"class":125,"line":1626},[123,90000,54796],{"class":182},[123,90002,51448],{"class":133},[123,90004,1731],{"class":182},[123,90006,51503],{"class":129},[123,90008,1300],{"class":133},[123,90010,90011,90013,90015,90018],{"class":125,"line":1632},[123,90012,54895],{"class":182},[123,90014,51448],{"class":133},[123,90016,90017],{"class":182},"gray",[123,90019,1300],{"class":133},[123,90021,90022,90024,90026,90028,90030],{"class":125,"line":1637},[123,90023,54933],{"class":182},[123,90025,51448],{"class":133},[123,90027,959],{"class":182},[123,90029,51503],{"class":129},[123,90031,1300],{"class":133},[123,90033,90034,90036,90038,90040],{"class":125,"line":1651},[123,90035,57427],{"class":182},[123,90037,51448],{"class":133},[123,90039,60853],{"class":182},[123,90041,1300],{"class":133},[123,90043,90044,90046,90048,90050],{"class":125,"line":1656},[123,90045,57297],{"class":182},[123,90047,51448],{"class":133},[123,90049,51603],{"class":182},[123,90051,1300],{"class":133},[123,90053,90054,90057,90059,90061,90063],{"class":125,"line":1662},[123,90055,90056],{"class":182},"      padding-top",[123,90058,51448],{"class":133},[123,90060,453],{"class":182},[123,90062,51503],{"class":129},[123,90064,1300],{"class":133},[123,90066,90067],{"class":125,"line":1683},[123,90068,2196],{"class":133},[123,90070,90071,90073,90075],{"class":125,"line":1688},[123,90072,52428],{"class":133},[123,90074,5136],{"class":51311},[123,90076,51318],{"class":133},[123,90078,90079,90081,90083],{"class":125,"line":1702},[123,90080,51796],{"class":133},[123,90082,51345],{"class":51311},[123,90084,51318],{"class":133},[123,90086,90087],{"class":125,"line":1707},[123,90088,2409],{"emptyLinePlaceholder":50},[123,90090,90091,90093,90095],{"class":125,"line":1736},[123,90092,1044],{"class":133},[123,90094,51811],{"class":51311},[123,90096,51318],{"class":133},[123,90098,90099,90101,90103,90105,90107,90109,90111,90113],{"class":125,"line":1741},[123,90100,52155],{"class":133},[123,90102,51622],{"class":51311},[123,90104,53497],{"class":1972},[123,90106,179],{"class":133},[123,90108,53502],{"class":238},[123,90110,55325],{"class":133},[123,90112,51622],{"class":51311},[123,90114,51318],{"class":133},[123,90116,90117,90119,90121,90123,90125,90127,90129,90131],{"class":125,"line":1758},[123,90118,52155],{"class":133},[123,90120,51824],{"class":51311},[123,90122,55250],{"class":1972},[123,90124,179],{"class":133},[123,90126,88285],{"class":238},[123,90128,55325],{"class":133},[123,90130,51824],{"class":51311},[123,90132,51318],{"class":133},[123,90134,90135,90137,90139],{"class":125,"line":1763},[123,90136,52155],{"class":133},[123,90138,51824],{"class":51311},[123,90140,51318],{"class":133},[123,90142,90143,90145,90147,90149,90151,90153,90155,90158],{"class":125,"line":1768},[123,90144,11231],{"class":129},[123,90146,86944],{"class":182},[123,90148,13574],{"class":129},[123,90150,54407],{"class":133},[123,90152,54410],{"class":1972},[123,90154,134],{"class":133},[123,90156,90157],{"class":238},"'.box'",[123,90159,140],{"class":133},[123,90161,90162,90164,90166,90168],{"class":125,"line":1773},[123,90163,52230],{"class":129},[123,90165,9448],{"class":133},[123,90167,179],{"class":129},[123,90169,47344],{"class":182},[123,90171,90172,90174,90177],{"class":125,"line":1787},[123,90173,70095],{"class":129},[123,90175,90176],{"class":1972}," mouseMove",[123,90178,10863],{"class":133},[123,90180,90181,90184,90186,90188],{"class":125,"line":1792},[123,90182,90183],{"class":133},"      box.innerHTML ",[123,90185,179],{"class":129},[123,90187,3041],{"class":133},[123,90189,2711],{"class":129},[123,90191,90192],{"class":125,"line":2586},[123,90193,90194],{"class":192},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[123,90196,90197],{"class":125,"line":2600},[123,90198,2196],{"class":133},[123,90200,90201],{"class":125,"line":2608},[123,90202,90203],{"class":192},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[123,90205,90206],{"class":125,"line":2613},[123,90207,90208],{"class":192},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[123,90210,90211],{"class":125,"line":2619},[123,90212,90213],{"class":192},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[123,90215,90216,90219,90221,90223,90226,90229,90232,90235,90237],{"class":125,"line":2625},[123,90217,90218],{"class":133},"    box.",[123,90220,57824],{"class":1972},[123,90222,134],{"class":133},[123,90224,90225],{"class":238},"'mousemove'",[123,90227,90228],{"class":133},", _.",[123,90230,90231],{"class":1972},"debounce",[123,90233,90234],{"class":133},"(mouseMove, ",[123,90236,65085],{"class":182},[123,90238,30508],{"class":133},[123,90240,90241,90243,90245],{"class":125,"line":2630},[123,90242,52428],{"class":133},[123,90244,51824],{"class":51311},[123,90246,51318],{"class":133},[123,90248,90249,90251,90253],{"class":125,"line":7958},[123,90250,51796],{"class":133},[123,90252,51811],{"class":51311},[123,90254,51318],{"class":133},[123,90256,90257],{"class":125,"line":7982},[123,90258,2409],{"emptyLinePlaceholder":50},[123,90260,90261,90263,90265],{"class":125,"line":7987},[123,90262,51796],{"class":133},[123,90264,50646],{"class":51311},[123,90266,51318],{"class":133},[1141,90268,90269],{},[80,90270,90271],{},"手写一个防抖函数来处理",[14,90273,90274],{},"防抖的核心就是利用定时器来实现的：",[14,90276,90277],{},"①声明一个定时器变量",[14,90279,90280],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90282,90283],{},"③如果没有定时器则开启定时器，记得存到变量里面",[114,90285,90287],{"className":50644,"code":90286,"language":50646,"meta":37,"style":37},"\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",[120,90288,90289,90299,90313,90317,90325,90339,90359,90371,90379,90385,90395,90407,90419,90429,90441,90451,90461,90473,90477,90485,90493,90497,90505,90523,90541,90549,90567,90577,90585,90595,90599,90603,90607,90612,90617,90622,90627,90632,90637,90655,90662,90667,90675,90680,90693,90709,90719,90724,90728,90732,90752,90756,90761,90766,90771,90776,90784,90792,90796],{"__ignoreMap":37},[123,90290,90291,90293,90295,90297],{"class":125,"line":126},[123,90292,51308],{"class":133},[123,90294,51312],{"class":51311},[123,90296,51315],{"class":1972},[123,90298,51318],{"class":133},[123,90300,90301,90303,90305,90307,90309,90311],{"class":125,"line":45},[123,90302,1044],{"class":133},[123,90304,50646],{"class":51311},[123,90306,51327],{"class":1972},[123,90308,179],{"class":133},[123,90310,51332],{"class":238},[123,90312,51318],{"class":133},[123,90314,90315],{"class":125,"line":1189},[123,90316,2409],{"emptyLinePlaceholder":50},[123,90318,90319,90321,90323],{"class":125,"line":1204},[123,90320,1044],{"class":133},[123,90322,51345],{"class":51311},[123,90324,51318],{"class":133},[123,90326,90327,90329,90331,90333,90335,90337],{"class":125,"line":1210},[123,90328,52155],{"class":133},[123,90330,51355],{"class":51311},[123,90332,51358],{"class":1972},[123,90334,179],{"class":133},[123,90336,51363],{"class":238},[123,90338,51318],{"class":133},[123,90340,90341,90343,90345,90347,90349,90351,90353,90355,90357],{"class":125,"line":1224},[123,90342,52155],{"class":133},[123,90344,51355],{"class":51311},[123,90346,14930],{"class":1972},[123,90348,179],{"class":133},[123,90350,51402],{"class":238},[123,90352,51382],{"class":1972},[123,90354,179],{"class":133},[123,90356,51409],{"class":238},[123,90358,51318],{"class":133},[123,90360,90361,90363,90365,90367,90369],{"class":125,"line":1230},[123,90362,52155],{"class":133},[123,90364,51418],{"class":51311},[123,90366,51421],{"class":133},[123,90368,51418],{"class":51311},[123,90370,51318],{"class":133},[123,90372,90373,90375,90377],{"class":125,"line":1321},[123,90374,52155],{"class":133},[123,90376,5136],{"class":51311},[123,90378,51318],{"class":133},[123,90380,90381,90383],{"class":125,"line":1327},[123,90382,54763],{"class":1972},[123,90384,15582],{"class":133},[123,90386,90387,90389,90391,90393],{"class":125,"line":1339},[123,90388,72607],{"class":182},[123,90390,51448],{"class":133},[123,90392,60516],{"class":182},[123,90394,1300],{"class":133},[123,90396,90397,90399,90401,90403,90405],{"class":125,"line":1621},[123,90398,54782],{"class":182},[123,90400,51448],{"class":133},[123,90402,1731],{"class":182},[123,90404,51503],{"class":129},[123,90406,1300],{"class":133},[123,90408,90409,90411,90413,90415,90417],{"class":125,"line":1626},[123,90410,54796],{"class":182},[123,90412,51448],{"class":133},[123,90414,1731],{"class":182},[123,90416,51503],{"class":129},[123,90418,1300],{"class":133},[123,90420,90421,90423,90425,90427],{"class":125,"line":1632},[123,90422,54895],{"class":182},[123,90424,51448],{"class":133},[123,90426,90017],{"class":182},[123,90428,1300],{"class":133},[123,90430,90431,90433,90435,90437,90439],{"class":125,"line":1637},[123,90432,54933],{"class":182},[123,90434,51448],{"class":133},[123,90436,959],{"class":182},[123,90438,51503],{"class":129},[123,90440,1300],{"class":133},[123,90442,90443,90445,90447,90449],{"class":125,"line":1651},[123,90444,57427],{"class":182},[123,90446,51448],{"class":133},[123,90448,60853],{"class":182},[123,90450,1300],{"class":133},[123,90452,90453,90455,90457,90459],{"class":125,"line":1656},[123,90454,57297],{"class":182},[123,90456,51448],{"class":133},[123,90458,51603],{"class":182},[123,90460,1300],{"class":133},[123,90462,90463,90465,90467,90469,90471],{"class":125,"line":1662},[123,90464,90056],{"class":182},[123,90466,51448],{"class":133},[123,90468,453],{"class":182},[123,90470,51503],{"class":129},[123,90472,1300],{"class":133},[123,90474,90475],{"class":125,"line":1683},[123,90476,2196],{"class":133},[123,90478,90479,90481,90483],{"class":125,"line":1688},[123,90480,52428],{"class":133},[123,90482,5136],{"class":51311},[123,90484,51318],{"class":133},[123,90486,90487,90489,90491],{"class":125,"line":1702},[123,90488,51796],{"class":133},[123,90490,51345],{"class":51311},[123,90492,51318],{"class":133},[123,90494,90495],{"class":125,"line":1707},[123,90496,2409],{"emptyLinePlaceholder":50},[123,90498,90499,90501,90503],{"class":125,"line":1736},[123,90500,1044],{"class":133},[123,90502,51811],{"class":51311},[123,90504,51318],{"class":133},[123,90506,90507,90509,90511,90513,90515,90517,90519,90521],{"class":125,"line":1741},[123,90508,52155],{"class":133},[123,90510,51622],{"class":51311},[123,90512,53497],{"class":1972},[123,90514,179],{"class":133},[123,90516,53502],{"class":238},[123,90518,55325],{"class":133},[123,90520,51622],{"class":51311},[123,90522,51318],{"class":133},[123,90524,90525,90527,90529,90531,90533,90535,90537,90539],{"class":125,"line":1758},[123,90526,52155],{"class":133},[123,90528,51824],{"class":51311},[123,90530,55250],{"class":1972},[123,90532,179],{"class":133},[123,90534,88285],{"class":238},[123,90536,55325],{"class":133},[123,90538,51824],{"class":51311},[123,90540,51318],{"class":133},[123,90542,90543,90545,90547],{"class":125,"line":1763},[123,90544,52155],{"class":133},[123,90546,51824],{"class":51311},[123,90548,51318],{"class":133},[123,90550,90551,90553,90555,90557,90559,90561,90563,90565],{"class":125,"line":1768},[123,90552,11231],{"class":129},[123,90554,86944],{"class":182},[123,90556,13574],{"class":129},[123,90558,54407],{"class":133},[123,90560,54410],{"class":1972},[123,90562,134],{"class":133},[123,90564,90157],{"class":238},[123,90566,140],{"class":133},[123,90568,90569,90571,90573,90575],{"class":125,"line":1773},[123,90570,52230],{"class":129},[123,90572,9448],{"class":133},[123,90574,179],{"class":129},[123,90576,47344],{"class":182},[123,90578,90579,90581,90583],{"class":125,"line":1787},[123,90580,70095],{"class":129},[123,90582,90176],{"class":1972},[123,90584,10863],{"class":133},[123,90586,90587,90589,90591,90593],{"class":125,"line":1792},[123,90588,90183],{"class":133},[123,90590,179],{"class":129},[123,90592,3041],{"class":133},[123,90594,2711],{"class":129},[123,90596,90597],{"class":125,"line":2586},[123,90598,90194],{"class":192},[123,90600,90601],{"class":125,"line":2600},[123,90602,2196],{"class":133},[123,90604,90605],{"class":125,"line":2608},[123,90606,90203],{"class":192},[123,90608,90609],{"class":125,"line":2613},[123,90610,90611],{"class":192},"    \u002F\u002F 手写防抖函数\n",[123,90613,90614],{"class":125,"line":2619},[123,90615,90616],{"class":192},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[123,90618,90619],{"class":125,"line":2625},[123,90620,90621],{"class":192},"    \u002F\u002F 1.声明定时器变量\n",[123,90623,90624],{"class":125,"line":2630},[123,90625,90626],{"class":192},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[123,90628,90629],{"class":125,"line":7958},[123,90630,90631],{"class":192},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[123,90633,90634],{"class":125,"line":7982},[123,90635,90636],{"class":192},"    \u002F\u002F 4.定时器里面写函数调用\n",[123,90638,90639,90641,90644,90646,90649,90651,90653],{"class":125,"line":7987},[123,90640,70095],{"class":129},[123,90642,90643],{"class":1972}," debounce",[123,90645,134],{"class":133},[123,90647,90648],{"class":5226},"fn",[123,90650,12445],{"class":133},[123,90652,854],{"class":5226},[123,90654,12452],{"class":133},[123,90656,90657,90659],{"class":125,"line":7993},[123,90658,79783],{"class":129},[123,90660,90661],{"class":133}," timer\n",[123,90663,90664],{"class":125,"line":8020},[123,90665,90666],{"class":192},"      \u002F\u002F return 返回一个匿名函数\n",[123,90668,90669,90671,90673],{"class":125,"line":8025},[123,90670,73993],{"class":129},[123,90672,58929],{"class":129},[123,90674,54463],{"class":133},[123,90676,90677],{"class":125,"line":8031},[123,90678,90679],{"class":192},"        \u002F\u002F 这里边写第二三四步\n",[123,90681,90682,90684,90687,90690],{"class":125,"line":8043},[123,90683,2506],{"class":129},[123,90685,90686],{"class":133}," (timer) ",[123,90688,90689],{"class":1972},"clearTimeout",[123,90691,90692],{"class":133},"(timer)\n",[123,90694,90695,90698,90700,90703,90705,90707],{"class":125,"line":8055},[123,90696,90697],{"class":133},"        timer ",[123,90699,179],{"class":129},[123,90701,90702],{"class":1972}," setTimeout",[123,90704,134],{"class":133},[123,90706,54460],{"class":129},[123,90708,54463],{"class":133},[123,90710,90711,90714,90716],{"class":125,"line":8067},[123,90712,90713],{"class":1972},"          fn",[123,90715,13060],{"class":133},[123,90717,90718],{"class":192},"\u002F\u002F加小括号调用fn }, t)\n",[123,90720,90721],{"class":125,"line":9726},[123,90722,90723],{"class":133},"        }, t)\n",[123,90725,90726],{"class":125,"line":9751},[123,90727,52409],{"class":133},[123,90729,90730],{"class":125,"line":9774},[123,90731,2196],{"class":133},[123,90733,90734,90736,90738,90740,90742,90744,90746,90748,90750],{"class":125,"line":9798},[123,90735,90218],{"class":133},[123,90737,57824],{"class":1972},[123,90739,134],{"class":133},[123,90741,90225],{"class":238},[123,90743,12445],{"class":133},[123,90745,90231],{"class":1972},[123,90747,90234],{"class":133},[123,90749,65085],{"class":182},[123,90751,30508],{"class":133},[123,90753,90754],{"class":125,"line":9803},[123,90755,2409],{"emptyLinePlaceholder":50},[123,90757,90758],{"class":125,"line":9808},[123,90759,90760],{"class":192},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[123,90762,90763],{"class":125,"line":9813},[123,90764,90765],{"class":192},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[123,90767,90768],{"class":125,"line":9822},[123,90769,90770],{"class":192},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[123,90772,90773],{"class":125,"line":9827},[123,90774,90775],{"class":192},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[123,90777,90778,90780,90782],{"class":125,"line":9833},[123,90779,52428],{"class":133},[123,90781,51824],{"class":51311},[123,90783,51318],{"class":133},[123,90785,90786,90788,90790],{"class":125,"line":9854},[123,90787,51796],{"class":133},[123,90789,51811],{"class":51311},[123,90791,51318],{"class":133},[123,90793,90794],{"class":125,"line":9860},[123,90795,2409],{"emptyLinePlaceholder":50},[123,90797,90798,90800,90802],{"class":125,"line":9874},[123,90799,51796],{"class":133},[123,90801,50646],{"class":51311},[123,90803,51318],{"class":133},[94,90805,90807],{"id":90806},"_4172-节流","4.17.2 节流",[14,90809,90810],{},[35,90811],{"alt":37,"src":90812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,90814,90815],{},[35,90816],{"alt":37,"src":90817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,90819,90820],{},[283,90821,90822],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,90824,90825],{},"实现方式：",[1141,90827,90828],{},[80,90829,90830],{},"lodash 提供的节流函数来处理",[14,90832,90833],{},"_.throttle(func,[wait=0],[options=])",[14,90835,90836],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[114,90838,90840],{"className":50644,"code":90839,"language":50646,"meta":37,"style":37},"\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",[120,90841,90842,90852,90866,90870,90878,90892,90912,90924,90932,90938,90948,90960,90972,90982,90994,91004,91014,91026,91030,91038,91046,91050,91058,91076,91094,91102,91120,91130,91138,91148,91152,91156,91160,91165,91170,91191,91199,91207,91211],{"__ignoreMap":37},[123,90843,90844,90846,90848,90850],{"class":125,"line":126},[123,90845,51308],{"class":133},[123,90847,51312],{"class":51311},[123,90849,51315],{"class":1972},[123,90851,51318],{"class":133},[123,90853,90854,90856,90858,90860,90862,90864],{"class":125,"line":45},[123,90855,1044],{"class":133},[123,90857,50646],{"class":51311},[123,90859,51327],{"class":1972},[123,90861,179],{"class":133},[123,90863,51332],{"class":238},[123,90865,51318],{"class":133},[123,90867,90868],{"class":125,"line":1189},[123,90869,2409],{"emptyLinePlaceholder":50},[123,90871,90872,90874,90876],{"class":125,"line":1204},[123,90873,1044],{"class":133},[123,90875,51345],{"class":51311},[123,90877,51318],{"class":133},[123,90879,90880,90882,90884,90886,90888,90890],{"class":125,"line":1210},[123,90881,52155],{"class":133},[123,90883,51355],{"class":51311},[123,90885,51358],{"class":1972},[123,90887,179],{"class":133},[123,90889,51363],{"class":238},[123,90891,51318],{"class":133},[123,90893,90894,90896,90898,90900,90902,90904,90906,90908,90910],{"class":125,"line":1224},[123,90895,52155],{"class":133},[123,90897,51355],{"class":51311},[123,90899,14930],{"class":1972},[123,90901,179],{"class":133},[123,90903,51402],{"class":238},[123,90905,51382],{"class":1972},[123,90907,179],{"class":133},[123,90909,51409],{"class":238},[123,90911,51318],{"class":133},[123,90913,90914,90916,90918,90920,90922],{"class":125,"line":1230},[123,90915,52155],{"class":133},[123,90917,51418],{"class":51311},[123,90919,51421],{"class":133},[123,90921,51418],{"class":51311},[123,90923,51318],{"class":133},[123,90925,90926,90928,90930],{"class":125,"line":1321},[123,90927,52155],{"class":133},[123,90929,5136],{"class":51311},[123,90931,51318],{"class":133},[123,90933,90934,90936],{"class":125,"line":1327},[123,90935,54763],{"class":1972},[123,90937,15582],{"class":133},[123,90939,90940,90942,90944,90946],{"class":125,"line":1339},[123,90941,72607],{"class":182},[123,90943,51448],{"class":133},[123,90945,60516],{"class":182},[123,90947,1300],{"class":133},[123,90949,90950,90952,90954,90956,90958],{"class":125,"line":1621},[123,90951,54782],{"class":182},[123,90953,51448],{"class":133},[123,90955,1731],{"class":182},[123,90957,51503],{"class":129},[123,90959,1300],{"class":133},[123,90961,90962,90964,90966,90968,90970],{"class":125,"line":1626},[123,90963,54796],{"class":182},[123,90965,51448],{"class":133},[123,90967,1731],{"class":182},[123,90969,51503],{"class":129},[123,90971,1300],{"class":133},[123,90973,90974,90976,90978,90980],{"class":125,"line":1632},[123,90975,54895],{"class":182},[123,90977,51448],{"class":133},[123,90979,90017],{"class":182},[123,90981,1300],{"class":133},[123,90983,90984,90986,90988,90990,90992],{"class":125,"line":1637},[123,90985,54933],{"class":182},[123,90987,51448],{"class":133},[123,90989,959],{"class":182},[123,90991,51503],{"class":129},[123,90993,1300],{"class":133},[123,90995,90996,90998,91000,91002],{"class":125,"line":1651},[123,90997,57427],{"class":182},[123,90999,51448],{"class":133},[123,91001,60853],{"class":182},[123,91003,1300],{"class":133},[123,91005,91006,91008,91010,91012],{"class":125,"line":1656},[123,91007,57297],{"class":182},[123,91009,51448],{"class":133},[123,91011,51603],{"class":182},[123,91013,1300],{"class":133},[123,91015,91016,91018,91020,91022,91024],{"class":125,"line":1662},[123,91017,90056],{"class":182},[123,91019,51448],{"class":133},[123,91021,453],{"class":182},[123,91023,51503],{"class":129},[123,91025,1300],{"class":133},[123,91027,91028],{"class":125,"line":1683},[123,91029,2196],{"class":133},[123,91031,91032,91034,91036],{"class":125,"line":1688},[123,91033,52428],{"class":133},[123,91035,5136],{"class":51311},[123,91037,51318],{"class":133},[123,91039,91040,91042,91044],{"class":125,"line":1702},[123,91041,51796],{"class":133},[123,91043,51345],{"class":51311},[123,91045,51318],{"class":133},[123,91047,91048],{"class":125,"line":1707},[123,91049,2409],{"emptyLinePlaceholder":50},[123,91051,91052,91054,91056],{"class":125,"line":1736},[123,91053,1044],{"class":133},[123,91055,51811],{"class":51311},[123,91057,51318],{"class":133},[123,91059,91060,91062,91064,91066,91068,91070,91072,91074],{"class":125,"line":1741},[123,91061,52155],{"class":133},[123,91063,51622],{"class":51311},[123,91065,53497],{"class":1972},[123,91067,179],{"class":133},[123,91069,53502],{"class":238},[123,91071,55325],{"class":133},[123,91073,51622],{"class":51311},[123,91075,51318],{"class":133},[123,91077,91078,91080,91082,91084,91086,91088,91090,91092],{"class":125,"line":1758},[123,91079,52155],{"class":133},[123,91081,51824],{"class":51311},[123,91083,55250],{"class":1972},[123,91085,179],{"class":133},[123,91087,88285],{"class":238},[123,91089,55325],{"class":133},[123,91091,51824],{"class":51311},[123,91093,51318],{"class":133},[123,91095,91096,91098,91100],{"class":125,"line":1763},[123,91097,52155],{"class":133},[123,91099,51824],{"class":51311},[123,91101,51318],{"class":133},[123,91103,91104,91106,91108,91110,91112,91114,91116,91118],{"class":125,"line":1768},[123,91105,11231],{"class":129},[123,91107,86944],{"class":182},[123,91109,13574],{"class":129},[123,91111,54407],{"class":133},[123,91113,54410],{"class":1972},[123,91115,134],{"class":133},[123,91117,90157],{"class":238},[123,91119,140],{"class":133},[123,91121,91122,91124,91126,91128],{"class":125,"line":1773},[123,91123,52230],{"class":129},[123,91125,9448],{"class":133},[123,91127,179],{"class":129},[123,91129,47344],{"class":182},[123,91131,91132,91134,91136],{"class":125,"line":1787},[123,91133,70095],{"class":129},[123,91135,90176],{"class":1972},[123,91137,10863],{"class":133},[123,91139,91140,91142,91144,91146],{"class":125,"line":1792},[123,91141,90183],{"class":133},[123,91143,179],{"class":129},[123,91145,3041],{"class":133},[123,91147,2711],{"class":129},[123,91149,91150],{"class":125,"line":2586},[123,91151,90194],{"class":192},[123,91153,91154],{"class":125,"line":2600},[123,91155,2196],{"class":133},[123,91157,91158],{"class":125,"line":2608},[123,91159,90203],{"class":192},[123,91161,91162],{"class":125,"line":2613},[123,91163,91164],{"class":192},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[123,91166,91167],{"class":125,"line":2619},[123,91168,91169],{"class":192},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[123,91171,91172,91174,91176,91178,91180,91182,91185,91187,91189],{"class":125,"line":2625},[123,91173,90218],{"class":133},[123,91175,57824],{"class":1972},[123,91177,134],{"class":133},[123,91179,90225],{"class":238},[123,91181,90228],{"class":133},[123,91183,91184],{"class":1972},"throttle",[123,91186,90234],{"class":133},[123,91188,65085],{"class":182},[123,91190,30508],{"class":133},[123,91192,91193,91195,91197],{"class":125,"line":2630},[123,91194,52428],{"class":133},[123,91196,51824],{"class":51311},[123,91198,51318],{"class":133},[123,91200,91201,91203,91205],{"class":125,"line":7958},[123,91202,51796],{"class":133},[123,91204,51811],{"class":51311},[123,91206,51318],{"class":133},[123,91208,91209],{"class":125,"line":7982},[123,91210,2409],{"emptyLinePlaceholder":50},[123,91212,91213,91215,91217],{"class":125,"line":7987},[123,91214,51796],{"class":133},[123,91216,50646],{"class":51311},[123,91218,51318],{"class":133},[1141,91220,91221],{},[80,91222,91223],{},"手写一个节流函数来处理",[14,91225,70963],{},[14,91227,90277],{},[14,91229,91230],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91232,91233],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[114,91235,91237],{"className":50644,"code":91236,"language":50646,"meta":37,"style":37},"\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",[120,91238,91239,91249,91263,91267,91275,91289,91309,91321,91329,91335,91345,91357,91369,91379,91391,91401,91411,91423,91427,91435,91443,91447,91455,91473,91491,91499,91517,91527,91535,91545,91549,91553,91557,91562,91567,91572,91577,91582,91587,91604,91610,91618,91629,91644,91651,91656,91661,91671,91676,91681,91686,91690,91694,91698,91718,91726,91734,91738],{"__ignoreMap":37},[123,91240,91241,91243,91245,91247],{"class":125,"line":126},[123,91242,51308],{"class":133},[123,91244,51312],{"class":51311},[123,91246,51315],{"class":1972},[123,91248,51318],{"class":133},[123,91250,91251,91253,91255,91257,91259,91261],{"class":125,"line":45},[123,91252,1044],{"class":133},[123,91254,50646],{"class":51311},[123,91256,51327],{"class":1972},[123,91258,179],{"class":133},[123,91260,51332],{"class":238},[123,91262,51318],{"class":133},[123,91264,91265],{"class":125,"line":1189},[123,91266,2409],{"emptyLinePlaceholder":50},[123,91268,91269,91271,91273],{"class":125,"line":1204},[123,91270,1044],{"class":133},[123,91272,51345],{"class":51311},[123,91274,51318],{"class":133},[123,91276,91277,91279,91281,91283,91285,91287],{"class":125,"line":1210},[123,91278,52155],{"class":133},[123,91280,51355],{"class":51311},[123,91282,51358],{"class":1972},[123,91284,179],{"class":133},[123,91286,51363],{"class":238},[123,91288,51318],{"class":133},[123,91290,91291,91293,91295,91297,91299,91301,91303,91305,91307],{"class":125,"line":1224},[123,91292,52155],{"class":133},[123,91294,51355],{"class":51311},[123,91296,14930],{"class":1972},[123,91298,179],{"class":133},[123,91300,51402],{"class":238},[123,91302,51382],{"class":1972},[123,91304,179],{"class":133},[123,91306,51409],{"class":238},[123,91308,51318],{"class":133},[123,91310,91311,91313,91315,91317,91319],{"class":125,"line":1230},[123,91312,52155],{"class":133},[123,91314,51418],{"class":51311},[123,91316,51421],{"class":133},[123,91318,51418],{"class":51311},[123,91320,51318],{"class":133},[123,91322,91323,91325,91327],{"class":125,"line":1321},[123,91324,52155],{"class":133},[123,91326,5136],{"class":51311},[123,91328,51318],{"class":133},[123,91330,91331,91333],{"class":125,"line":1327},[123,91332,54763],{"class":1972},[123,91334,15582],{"class":133},[123,91336,91337,91339,91341,91343],{"class":125,"line":1339},[123,91338,72607],{"class":182},[123,91340,51448],{"class":133},[123,91342,60516],{"class":182},[123,91344,1300],{"class":133},[123,91346,91347,91349,91351,91353,91355],{"class":125,"line":1621},[123,91348,54782],{"class":182},[123,91350,51448],{"class":133},[123,91352,1731],{"class":182},[123,91354,51503],{"class":129},[123,91356,1300],{"class":133},[123,91358,91359,91361,91363,91365,91367],{"class":125,"line":1626},[123,91360,54796],{"class":182},[123,91362,51448],{"class":133},[123,91364,1731],{"class":182},[123,91366,51503],{"class":129},[123,91368,1300],{"class":133},[123,91370,91371,91373,91375,91377],{"class":125,"line":1632},[123,91372,54895],{"class":182},[123,91374,51448],{"class":133},[123,91376,90017],{"class":182},[123,91378,1300],{"class":133},[123,91380,91381,91383,91385,91387,91389],{"class":125,"line":1637},[123,91382,54933],{"class":182},[123,91384,51448],{"class":133},[123,91386,959],{"class":182},[123,91388,51503],{"class":129},[123,91390,1300],{"class":133},[123,91392,91393,91395,91397,91399],{"class":125,"line":1651},[123,91394,57427],{"class":182},[123,91396,51448],{"class":133},[123,91398,60853],{"class":182},[123,91400,1300],{"class":133},[123,91402,91403,91405,91407,91409],{"class":125,"line":1656},[123,91404,57297],{"class":182},[123,91406,51448],{"class":133},[123,91408,51603],{"class":182},[123,91410,1300],{"class":133},[123,91412,91413,91415,91417,91419,91421],{"class":125,"line":1662},[123,91414,90056],{"class":182},[123,91416,51448],{"class":133},[123,91418,453],{"class":182},[123,91420,51503],{"class":129},[123,91422,1300],{"class":133},[123,91424,91425],{"class":125,"line":1683},[123,91426,2196],{"class":133},[123,91428,91429,91431,91433],{"class":125,"line":1688},[123,91430,52428],{"class":133},[123,91432,5136],{"class":51311},[123,91434,51318],{"class":133},[123,91436,91437,91439,91441],{"class":125,"line":1702},[123,91438,51796],{"class":133},[123,91440,51345],{"class":51311},[123,91442,51318],{"class":133},[123,91444,91445],{"class":125,"line":1707},[123,91446,2409],{"emptyLinePlaceholder":50},[123,91448,91449,91451,91453],{"class":125,"line":1736},[123,91450,1044],{"class":133},[123,91452,51811],{"class":51311},[123,91454,51318],{"class":133},[123,91456,91457,91459,91461,91463,91465,91467,91469,91471],{"class":125,"line":1741},[123,91458,52155],{"class":133},[123,91460,51622],{"class":51311},[123,91462,53497],{"class":1972},[123,91464,179],{"class":133},[123,91466,53502],{"class":238},[123,91468,55325],{"class":133},[123,91470,51622],{"class":51311},[123,91472,51318],{"class":133},[123,91474,91475,91477,91479,91481,91483,91485,91487,91489],{"class":125,"line":1758},[123,91476,52155],{"class":133},[123,91478,51824],{"class":51311},[123,91480,55250],{"class":1972},[123,91482,179],{"class":133},[123,91484,88285],{"class":238},[123,91486,55325],{"class":133},[123,91488,51824],{"class":51311},[123,91490,51318],{"class":133},[123,91492,91493,91495,91497],{"class":125,"line":1763},[123,91494,52155],{"class":133},[123,91496,51824],{"class":51311},[123,91498,51318],{"class":133},[123,91500,91501,91503,91505,91507,91509,91511,91513,91515],{"class":125,"line":1768},[123,91502,11231],{"class":129},[123,91504,86944],{"class":182},[123,91506,13574],{"class":129},[123,91508,54407],{"class":133},[123,91510,54410],{"class":1972},[123,91512,134],{"class":133},[123,91514,90157],{"class":238},[123,91516,140],{"class":133},[123,91518,91519,91521,91523,91525],{"class":125,"line":1773},[123,91520,52230],{"class":129},[123,91522,9448],{"class":133},[123,91524,179],{"class":129},[123,91526,47344],{"class":182},[123,91528,91529,91531,91533],{"class":125,"line":1787},[123,91530,70095],{"class":129},[123,91532,90176],{"class":1972},[123,91534,10863],{"class":133},[123,91536,91537,91539,91541,91543],{"class":125,"line":1792},[123,91538,90183],{"class":133},[123,91540,179],{"class":129},[123,91542,3041],{"class":133},[123,91544,2711],{"class":129},[123,91546,91547],{"class":125,"line":2586},[123,91548,90194],{"class":192},[123,91550,91551],{"class":125,"line":2600},[123,91552,2196],{"class":133},[123,91554,91555],{"class":125,"line":2608},[123,91556,90203],{"class":192},[123,91558,91559],{"class":125,"line":2613},[123,91560,91561],{"class":192},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[123,91563,91564],{"class":125,"line":2619},[123,91565,91566],{"class":192},"    \u002F\u002F 1.声明一个定时器变量\n",[123,91568,91569],{"class":125,"line":2625},[123,91570,91571],{"class":192},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[123,91573,91574],{"class":125,"line":2630},[123,91575,91576],{"class":192},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[123,91578,91579],{"class":125,"line":7958},[123,91580,91581],{"class":192},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[123,91583,91584],{"class":125,"line":7982},[123,91585,91586],{"class":192},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[123,91588,91589,91591,91594,91596,91598,91600,91602],{"class":125,"line":7987},[123,91590,70095],{"class":129},[123,91592,91593],{"class":1972}," throttle",[123,91595,134],{"class":133},[123,91597,90648],{"class":5226},[123,91599,12445],{"class":133},[123,91601,854],{"class":5226},[123,91603,12452],{"class":133},[123,91605,91606,91608],{"class":125,"line":7993},[123,91607,79783],{"class":129},[123,91609,90661],{"class":133},[123,91611,91612,91614,91616],{"class":125,"line":8020},[123,91613,73993],{"class":129},[123,91615,58929],{"class":129},[123,91617,54463],{"class":133},[123,91619,91620,91622,91624,91626],{"class":125,"line":8025},[123,91621,2506],{"class":129},[123,91623,1667],{"class":133},[123,91625,360],{"class":129},[123,91627,91628],{"class":133},"timer) {\n",[123,91630,91631,91634,91636,91638,91640,91642],{"class":125,"line":8031},[123,91632,91633],{"class":133},"          timer ",[123,91635,179],{"class":129},[123,91637,90702],{"class":1972},[123,91639,134],{"class":133},[123,91641,54460],{"class":129},[123,91643,54463],{"class":133},[123,91645,91646,91649],{"class":125,"line":8043},[123,91647,91648],{"class":1972},"            fn",[123,91650,1985],{"class":133},[123,91652,91653],{"class":125,"line":8055},[123,91654,91655],{"class":192},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[123,91657,91658],{"class":125,"line":8067},[123,91659,91660],{"class":192},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[123,91662,91663,91666,91668],{"class":125,"line":9726},[123,91664,91665],{"class":133},"            timer ",[123,91667,179],{"class":129},[123,91669,91670],{"class":182}," null\n",[123,91672,91673],{"class":125,"line":9751},[123,91674,91675],{"class":192},"            \u002F\u002F 不能用clearTimeout(timer)\n",[123,91677,91678],{"class":125,"line":9774},[123,91679,91680],{"class":192},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[123,91682,91683],{"class":125,"line":9798},[123,91684,91685],{"class":133},"          }, t)\n",[123,91687,91688],{"class":125,"line":9803},[123,91689,2538],{"class":133},[123,91691,91692],{"class":125,"line":9808},[123,91693,52409],{"class":133},[123,91695,91696],{"class":125,"line":9813},[123,91697,2196],{"class":133},[123,91699,91700,91702,91704,91706,91708,91710,91712,91714,91716],{"class":125,"line":9822},[123,91701,90218],{"class":133},[123,91703,57824],{"class":1972},[123,91705,134],{"class":133},[123,91707,90225],{"class":238},[123,91709,12445],{"class":133},[123,91711,91184],{"class":1972},[123,91713,90234],{"class":133},[123,91715,65085],{"class":182},[123,91717,30508],{"class":133},[123,91719,91720,91722,91724],{"class":125,"line":9827},[123,91721,52428],{"class":133},[123,91723,51824],{"class":51311},[123,91725,51318],{"class":133},[123,91727,91728,91730,91732],{"class":125,"line":9833},[123,91729,51796],{"class":133},[123,91731,51811],{"class":51311},[123,91733,51318],{"class":133},[123,91735,91736],{"class":125,"line":9854},[123,91737,2409],{"emptyLinePlaceholder":50},[123,91739,91740,91742,91744],{"class":125,"line":9860},[123,91741,51796],{"class":133},[123,91743,50646],{"class":51311},[123,91745,51318],{"class":133},[94,91747,91749],{"id":91748},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[114,91751,91753],{"className":53078,"code":91752,"language":53080,"meta":37,"style":37},"\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",[120,91754,91755,91763,91771,91776,91781,91786,91791,91795,91803],{"__ignoreMap":37},[123,91756,91757,91759,91761],{"class":125,"line":126},[123,91758,1044],{"class":133},[123,91760,51811],{"class":51311},[123,91762,51318],{"class":133},[123,91764,91765,91767,91769],{"class":125,"line":45},[123,91766,52155],{"class":133},[123,91768,51824],{"class":51311},[123,91770,51318],{"class":133},[123,91772,91773],{"class":125,"line":1189},[123,91774,91775],{"class":133},"    let timer = null\n",[123,91777,91778],{"class":125,"line":1204},[123,91779,91780],{"class":133},"    timer = setTimeout(() => {\n",[123,91782,91783],{"class":125,"line":1210},[123,91784,91785],{"class":133},"      clearTimeout(timer)\n",[123,91787,91788],{"class":125,"line":1224},[123,91789,91790],{"class":133},"      console.log(timer)\n",[123,91792,91793],{"class":125,"line":1230},[123,91794,60236],{"class":133},[123,91796,91797,91799,91801],{"class":125,"line":1321},[123,91798,52428],{"class":133},[123,91800,51824],{"class":51311},[123,91802,51318],{"class":133},[123,91804,91805,91807,91809],{"class":125,"line":1327},[123,91806,51796],{"class":133},[123,91808,51811],{"class":51311},[123,91810,51318],{"class":133},[14,91812,91813],{},"输出为1",[14,91815,91816],{},"在开启的定时器里边写清除定时器",[14,91818,91819],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[94,91821,91823],{"id":91822},"_4174-节流综合案例","4.17.4 节流综合案例",[14,91825,91826],{},"页面打开，可以记录上一次的视频播放位置",[14,91828,91829],{},[35,91830],{"alt":37,"src":91831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,91833,91834],{},[35,91835],{"alt":37,"src":91836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[114,91838,91840],{"className":50644,"code":91839,"language":50646,"meta":37,"style":37},"\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",[120,91841,91842,91852,91866,91870,91878,91892,91912,91932,91954,91967,91975,91981,91991,92001,92011,92015,92019,92026,92039,92051,92055,92059,92069,92081,92095,92099,92103,92110,92120,92133,92145,92155,92165,92181,92193,92197,92201,92209,92219,92231,92241,92251,92261,92265,92269,92279,92290,92294,92302,92310,92314,92322,92337,92352,92367,92388,92396,92404,92419,92441,92449,92464,92490,92516,92542,92550,92558,92577,92585,92590,92609,92614,92632,92637,92642,92650,92655,92669,92677,92682,92699,92703,92708,92730,92734,92742,92750,92754],{"__ignoreMap":37},[123,91843,91844,91846,91848,91850],{"class":125,"line":126},[123,91845,51308],{"class":133},[123,91847,51312],{"class":51311},[123,91849,51315],{"class":1972},[123,91851,51318],{"class":133},[123,91853,91854,91856,91858,91860,91862,91864],{"class":125,"line":45},[123,91855,1044],{"class":133},[123,91857,50646],{"class":51311},[123,91859,51327],{"class":1972},[123,91861,179],{"class":133},[123,91863,51332],{"class":238},[123,91865,51318],{"class":133},[123,91867,91868],{"class":125,"line":1189},[123,91869,2409],{"emptyLinePlaceholder":50},[123,91871,91872,91874,91876],{"class":125,"line":1204},[123,91873,1044],{"class":133},[123,91875,51345],{"class":51311},[123,91877,51318],{"class":133},[123,91879,91880,91882,91884,91886,91888,91890],{"class":125,"line":1210},[123,91881,52155],{"class":133},[123,91883,51355],{"class":51311},[123,91885,51358],{"class":1972},[123,91887,179],{"class":133},[123,91889,51363],{"class":238},[123,91891,59138],{"class":133},[123,91893,91894,91896,91898,91900,91902,91904,91906,91908,91910],{"class":125,"line":1224},[123,91895,52155],{"class":133},[123,91897,51355],{"class":51311},[123,91899,51374],{"class":1972},[123,91901,179],{"class":133},[123,91903,51379],{"class":238},[123,91905,51382],{"class":1972},[123,91907,179],{"class":133},[123,91909,51387],{"class":238},[123,91911,59138],{"class":133},[123,91913,91914,91916,91918,91920,91922,91924,91926,91928,91930],{"class":125,"line":1230},[123,91915,52155],{"class":133},[123,91917,51355],{"class":51311},[123,91919,14930],{"class":1972},[123,91921,179],{"class":133},[123,91923,51402],{"class":238},[123,91925,51382],{"class":1972},[123,91927,179],{"class":133},[123,91929,51409],{"class":238},[123,91931,59138],{"class":133},[123,91933,91934,91936,91938,91940,91942,91945,91947,91949,91952],{"class":125,"line":1321},[123,91935,52155],{"class":133},[123,91937,51355],{"class":51311},[123,91939,14930],{"class":1972},[123,91941,179],{"class":133},[123,91943,91944],{"class":238},"\"referrer\"",[123,91946,51382],{"class":1972},[123,91948,179],{"class":133},[123,91950,91951],{"class":238},"\"never\"",[123,91953,59138],{"class":133},[123,91955,91956,91958,91960,91963,91965],{"class":125,"line":1327},[123,91957,52155],{"class":133},[123,91959,51418],{"class":51311},[123,91961,91962],{"class":133},">综合案例\u003C\u002F",[123,91964,51418],{"class":51311},[123,91966,51318],{"class":133},[123,91968,91969,91971,91973],{"class":125,"line":1339},[123,91970,52155],{"class":133},[123,91972,5136],{"class":51311},[123,91974,51318],{"class":133},[123,91976,91977,91979],{"class":125,"line":1621},[123,91978,6413],{"class":51311},[123,91980,15582],{"class":133},[123,91982,91983,91985,91987,91989],{"class":125,"line":1626},[123,91984,54706],{"class":182},[123,91986,51448],{"class":133},[123,91988,325],{"class":182},[123,91990,1300],{"class":133},[123,91992,91993,91995,91997,91999],{"class":125,"line":1632},[123,91994,54717],{"class":182},[123,91996,51448],{"class":133},[123,91998,325],{"class":182},[123,92000,1300],{"class":133},[123,92002,92003,92005,92007,92009],{"class":125,"line":1637},[123,92004,72607],{"class":182},[123,92006,51448],{"class":133},[123,92008,60516],{"class":182},[123,92010,1300],{"class":133},[123,92012,92013],{"class":125,"line":1651},[123,92014,2196],{"class":133},[123,92016,92017],{"class":125,"line":1656},[123,92018,2409],{"emptyLinePlaceholder":50},[123,92020,92021,92024],{"class":125,"line":1662},[123,92022,92023],{"class":1972},"    .container",[123,92025,15582],{"class":133},[123,92027,92028,92030,92032,92035,92037],{"class":125,"line":1683},[123,92029,54782],{"class":182},[123,92031,51448],{"class":133},[123,92033,92034],{"class":182},"1200",[123,92036,51503],{"class":129},[123,92038,1300],{"class":133},[123,92040,92041,92043,92045,92047,92049],{"class":125,"line":1688},[123,92042,54717],{"class":182},[123,92044,51448],{"class":133},[123,92046,325],{"class":182},[123,92048,51567],{"class":182},[123,92050,1300],{"class":133},[123,92052,92053],{"class":125,"line":1702},[123,92054,2196],{"class":133},[123,92056,92057],{"class":125,"line":1707},[123,92058,2409],{"emptyLinePlaceholder":50},[123,92060,92061,92064,92067],{"class":125,"line":1736},[123,92062,92063],{"class":1972},"    .video",[123,92065,92066],{"class":51311}," video",[123,92068,15582],{"class":133},[123,92070,92071,92073,92075,92077,92079],{"class":125,"line":1741},[123,92072,54782],{"class":182},[123,92074,51448],{"class":133},[123,92076,445],{"class":182},[123,92078,462],{"class":129},[123,92080,1300],{"class":133},[123,92082,92083,92085,92087,92089,92091,92093],{"class":125,"line":1758},[123,92084,54706],{"class":182},[123,92086,51448],{"class":133},[123,92088,834],{"class":182},[123,92090,51503],{"class":129},[123,92092,4102],{"class":182},[123,92094,1300],{"class":133},[123,92096,92097],{"class":125,"line":1763},[123,92098,2196],{"class":133},[123,92100,92101],{"class":125,"line":1768},[123,92102,2409],{"emptyLinePlaceholder":50},[123,92104,92105,92108],{"class":125,"line":1773},[123,92106,92107],{"class":1972},"    .elevator",[123,92109,15582],{"class":133},[123,92111,92112,92114,92116,92118],{"class":125,"line":1787},[123,92113,54770],{"class":182},[123,92115,51448],{"class":133},[123,92117,86244],{"class":182},[123,92119,1300],{"class":133},[123,92121,92122,92124,92126,92129,92131],{"class":125,"line":1792},[123,92123,54958],{"class":182},[123,92125,51448],{"class":133},[123,92127,92128],{"class":182},"280",[123,92130,51503],{"class":129},[123,92132,1300],{"class":133},[123,92134,92135,92137,92139,92141,92143],{"class":125,"line":2586},[123,92136,86438],{"class":182},[123,92138,51448],{"class":133},[123,92140,834],{"class":182},[123,92142,51503],{"class":129},[123,92144,1300],{"class":133},[123,92146,92147,92149,92151,92153],{"class":125,"line":2600},[123,92148,86251],{"class":182},[123,92150,51448],{"class":133},[123,92152,86256],{"class":182},[123,92154,1300],{"class":133},[123,92156,92157,92159,92161,92163],{"class":125,"line":2608},[123,92158,61732],{"class":182},[123,92160,51448],{"class":133},[123,92162,60853],{"class":182},[123,92164,1300],{"class":133},[123,92166,92167,92169,92171,92173,92175,92177,92179],{"class":125,"line":2613},[123,92168,61988],{"class":182},[123,92170,51448],{"class":133},[123,92172,351],{"class":182},[123,92174,51503],{"class":129},[123,92176,51532],{"class":182},[123,92178,62255],{"class":182},[123,92180,1300],{"class":133},[123,92182,92183,92185,92187,92189,92191],{"class":125,"line":2619},[123,92184,54782],{"class":182},[123,92186,51448],{"class":133},[123,92188,1041],{"class":182},[123,92190,51503],{"class":129},[123,92192,1300],{"class":133},[123,92194,92195],{"class":125,"line":2625},[123,92196,2196],{"class":133},[123,92198,92199],{"class":125,"line":2630},[123,92200,2409],{"emptyLinePlaceholder":50},[123,92202,92203,92205,92207],{"class":125,"line":7958},[123,92204,92107],{"class":1972},[123,92206,1408],{"class":51311},[123,92208,15582],{"class":133},[123,92210,92211,92213,92215,92217],{"class":125,"line":7982},[123,92212,55020],{"class":182},[123,92214,51448],{"class":133},[123,92216,60880],{"class":182},[123,92218,1300],{"class":133},[123,92220,92221,92223,92225,92227,92229],{"class":125,"line":7987},[123,92222,54706],{"class":182},[123,92224,51448],{"class":133},[123,92226,580],{"class":182},[123,92228,51503],{"class":129},[123,92230,1300],{"class":133},[123,92232,92233,92235,92237,92239],{"class":125,"line":7993},[123,92234,63981],{"class":182},[123,92236,51448],{"class":133},[123,92238,54748],{"class":182},[123,92240,1300],{"class":133},[123,92242,92243,92245,92247,92249],{"class":125,"line":8020},[123,92244,57297],{"class":182},[123,92246,51448],{"class":133},[123,92248,51603],{"class":182},[123,92250,1300],{"class":133},[123,92252,92253,92255,92257,92259],{"class":125,"line":8025},[123,92254,57427],{"class":182},[123,92256,51448],{"class":133},[123,92258,62081],{"class":182},[123,92260,1300],{"class":133},[123,92262,92263],{"class":125,"line":8031},[123,92264,2196],{"class":133},[123,92266,92267],{"class":125,"line":8043},[123,92268,2409],{"emptyLinePlaceholder":50},[123,92270,92271,92273,92275,92277],{"class":125,"line":8055},[123,92272,92107],{"class":1972},[123,92274,1408],{"class":51311},[123,92276,64035],{"class":1972},[123,92278,15582],{"class":133},[123,92280,92281,92283,92285,92288],{"class":125,"line":8067},[123,92282,57427],{"class":182},[123,92284,51448],{"class":133},[123,92286,92287],{"class":182},"#1286ff",[123,92289,1300],{"class":133},[123,92291,92292],{"class":125,"line":9726},[123,92293,2196],{"class":133},[123,92295,92296,92298,92300],{"class":125,"line":9751},[123,92297,52428],{"class":133},[123,92299,5136],{"class":51311},[123,92301,51318],{"class":133},[123,92303,92304,92306,92308],{"class":125,"line":9774},[123,92305,51796],{"class":133},[123,92307,51345],{"class":51311},[123,92309,51318],{"class":133},[123,92311,92312],{"class":125,"line":9798},[123,92313,2409],{"emptyLinePlaceholder":50},[123,92315,92316,92318,92320],{"class":125,"line":9803},[123,92317,1044],{"class":133},[123,92319,51811],{"class":51311},[123,92321,51318],{"class":133},[123,92323,92324,92326,92328,92330,92332,92335],{"class":125,"line":9808},[123,92325,52155],{"class":133},[123,92327,51622],{"class":51311},[123,92329,53497],{"class":1972},[123,92331,179],{"class":133},[123,92333,92334],{"class":238},"\"container\"",[123,92336,51318],{"class":133},[123,92338,92339,92341,92343,92345,92347,92350],{"class":125,"line":9813},[123,92340,51352],{"class":133},[123,92342,51622],{"class":51311},[123,92344,53497],{"class":1972},[123,92346,179],{"class":133},[123,92348,92349],{"class":238},"\"header\"",[123,92351,51318],{"class":133},[123,92353,92354,92356,92358,92360,92362,92365],{"class":125,"line":9822},[123,92355,55245],{"class":133},[123,92357,372],{"class":51311},[123,92359,61068],{"class":1972},[123,92361,179],{"class":133},[123,92363,92364],{"class":238},"\"http:\u002F\u002Fpip.itcast.cn\"",[123,92366,51318],{"class":133},[123,92368,92369,92371,92373,92375,92377,92380,92382,92384,92386],{"class":125,"line":9827},[123,92370,55313],{"class":133},[123,92372,35],{"class":51311},[123,92374,55250],{"class":1972},[123,92376,179],{"class":133},[123,92378,92379],{"class":238},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[123,92381,55258],{"class":1972},[123,92383,179],{"class":133},[123,92385,7662],{"class":238},[123,92387,59138],{"class":133},[123,92389,92390,92392,92394],{"class":125,"line":9833},[123,92391,55418],{"class":133},[123,92393,372],{"class":51311},[123,92395,51318],{"class":133},[123,92397,92398,92400,92402],{"class":125,"line":9854},[123,92399,51787],{"class":133},[123,92401,51622],{"class":51311},[123,92403,51318],{"class":133},[123,92405,92406,92408,92410,92412,92414,92417],{"class":125,"line":9860},[123,92407,51352],{"class":133},[123,92409,51622],{"class":51311},[123,92411,53497],{"class":1972},[123,92413,179],{"class":133},[123,92415,92416],{"class":238},"\"video\"",[123,92418,51318],{"class":133},[123,92420,92421,92423,92425,92427,92429,92432,92435,92437,92439],{"class":125,"line":9874},[123,92422,55245],{"class":133},[123,92424,28194],{"class":51311},[123,92426,55250],{"class":1972},[123,92428,179],{"class":133},[123,92430,92431],{"class":238},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[123,92433,92434],{"class":1972}," controls",[123,92436,55325],{"class":133},[123,92438,28194],{"class":51311},[123,92440,51318],{"class":133},[123,92442,92443,92445,92447],{"class":125,"line":9880},[123,92444,51787],{"class":133},[123,92446,51622],{"class":51311},[123,92448,51318],{"class":133},[123,92450,92451,92453,92455,92457,92459,92462],{"class":125,"line":9907},[123,92452,51352],{"class":133},[123,92454,51622],{"class":51311},[123,92456,53497],{"class":1972},[123,92458,179],{"class":133},[123,92460,92461],{"class":238},"\"elevator\"",[123,92463,51318],{"class":133},[123,92465,92466,92468,92470,92472,92474,92476,92479,92481,92483,92486,92488],{"class":125,"line":9916},[123,92467,55245],{"class":133},[123,92469,372],{"class":51311},[123,92471,61068],{"class":1972},[123,92473,179],{"class":133},[123,92475,64247],{"class":238},[123,92477,92478],{"class":1972}," data-ref",[123,92480,179],{"class":133},[123,92482,92416],{"class":238},[123,92484,92485],{"class":133},">视频介绍\u003C\u002F",[123,92487,372],{"class":51311},[123,92489,51318],{"class":133},[123,92491,92492,92494,92496,92498,92500,92502,92504,92506,92509,92512,92514],{"class":125,"line":9922},[123,92493,55245],{"class":133},[123,92495,372],{"class":51311},[123,92497,61068],{"class":1972},[123,92499,179],{"class":133},[123,92501,64247],{"class":238},[123,92503,92478],{"class":1972},[123,92505,179],{"class":133},[123,92507,92508],{"class":238},"\"intro\"",[123,92510,92511],{"class":133},">课程简介\u003C\u002F",[123,92513,372],{"class":51311},[123,92515,51318],{"class":133},[123,92517,92518,92520,92522,92524,92526,92528,92530,92532,92535,92538,92540],{"class":125,"line":9930},[123,92519,55245],{"class":133},[123,92521,372],{"class":51311},[123,92523,61068],{"class":1972},[123,92525,179],{"class":133},[123,92527,64247],{"class":238},[123,92529,92478],{"class":1972},[123,92531,179],{"class":133},[123,92533,92534],{"class":238},"\"outline\"",[123,92536,92537],{"class":133},">评论列表\u003C\u002F",[123,92539,372],{"class":51311},[123,92541,51318],{"class":133},[123,92543,92544,92546,92548],{"class":125,"line":9935},[123,92545,51787],{"class":133},[123,92547,51622],{"class":51311},[123,92549,51318],{"class":133},[123,92551,92552,92554,92556],{"class":125,"line":16614},[123,92553,52428],{"class":133},[123,92555,51622],{"class":51311},[123,92557,51318],{"class":133},[123,92559,92560,92562,92564,92566,92568,92571,92573,92575],{"class":125,"line":16620},[123,92561,52155],{"class":133},[123,92563,51824],{"class":51311},[123,92565,55250],{"class":1972},[123,92567,179],{"class":133},[123,92569,92570],{"class":238},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[123,92572,55325],{"class":133},[123,92574,51824],{"class":51311},[123,92576,51318],{"class":133},[123,92578,92579,92581,92583],{"class":125,"line":16643},[123,92580,52155],{"class":133},[123,92582,51824],{"class":51311},[123,92584,51318],{"class":133},[123,92586,92587],{"class":125,"line":16649},[123,92588,92589],{"class":192},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[123,92591,92592,92594,92596,92598,92600,92602,92604,92607],{"class":125,"line":16672},[123,92593,11231],{"class":129},[123,92595,92066],{"class":182},[123,92597,13574],{"class":129},[123,92599,54407],{"class":133},[123,92601,54410],{"class":1972},[123,92603,134],{"class":133},[123,92605,92606],{"class":238},"'video'",[123,92608,140],{"class":133},[123,92610,92611],{"class":125,"line":16686},[123,92612,92613],{"class":192},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[123,92615,92616,92619,92621,92623,92625,92628,92630],{"class":125,"line":16706},[123,92617,92618],{"class":133},"    video.ontimeupdate ",[123,92620,179],{"class":129},[123,92622,88366],{"class":133},[123,92624,91184],{"class":1972},[123,92626,92627],{"class":133},"(() ",[123,92629,84733],{"class":129},[123,92631,15582],{"class":133},[123,92633,92634],{"class":125,"line":16712},[123,92635,92636],{"class":192},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[123,92638,92639],{"class":125,"line":16723},[123,92640,92641],{"class":192},"      \u002F\u002F 控制台输出当前的时间\n",[123,92643,92644,92647],{"class":125,"line":16746},[123,92645,92646],{"class":192},"      \u002F\u002F console.log(video.currentTime)",[123,92648,92649],{"class":192},"  \u002F\u002F获得当前的视频时间\n",[123,92651,92652],{"class":125,"line":16768},[123,92653,92654],{"class":192},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[123,92656,92657,92659,92661,92663,92666],{"class":125,"line":16773},[123,92658,74694],{"class":133},[123,92660,71665],{"class":1972},[123,92662,134],{"class":133},[123,92664,92665],{"class":238},"'currentTime'",[123,92667,92668],{"class":133},", video.currentTime)\n",[123,92670,92671,92673,92675],{"class":125,"line":16779},[123,92672,54546],{"class":133},[123,92674,6420],{"class":182},[123,92676,140],{"class":133},[123,92678,92679],{"class":125,"line":16793},[123,92680,92681],{"class":192},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[123,92683,92684,92687,92690,92692,92695,92697],{"class":125,"line":16806},[123,92685,92686],{"class":133},"    video.",[123,92688,92689],{"class":1972},"onloadeddata",[123,92691,13574],{"class":129},[123,92693,92694],{"class":133}," () ",[123,92696,84733],{"class":129},[123,92698,15582],{"class":133},[123,92700,92701],{"class":125,"line":16811},[123,92702,60023],{"class":192},[123,92704,92705],{"class":125,"line":16825},[123,92706,92707],{"class":192},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[123,92709,92710,92713,92715,92718,92720,92722,92724,92726,92728],{"class":125,"line":16830},[123,92711,92712],{"class":133},"      video.currentTime ",[123,92714,179],{"class":129},[123,92716,92717],{"class":133}," localStorage.",[123,92719,71696],{"class":1972},[123,92721,134],{"class":133},[123,92723,92665],{"class":238},[123,92725,13724],{"class":133},[123,92727,71368],{"class":129},[123,92729,47344],{"class":182},[123,92731,92732],{"class":125,"line":16836},[123,92733,2196],{"class":133},[123,92735,92736,92738,92740],{"class":125,"line":16841},[123,92737,52428],{"class":133},[123,92739,51824],{"class":51311},[123,92741,51318],{"class":133},[123,92743,92744,92746,92748],{"class":125,"line":16855},[123,92745,51796],{"class":133},[123,92747,51811],{"class":51311},[123,92749,51318],{"class":133},[123,92751,92752],{"class":125,"line":16860},[123,92753,2409],{"emptyLinePlaceholder":50},[123,92755,92756,92758,92760],{"class":125,"line":16865},[123,92757,51796],{"class":133},[123,92759,50646],{"class":51311},[123,92761,51318],{"class":133},[5136,92763,92764],{},"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":37,"searchDepth":45,"depth":45,"links":92766},[92767,92772,92776,92777,92778,92783,92788,92789,92790,92791,92798,92803,92804,92814,92818,92819,92823],{"id":76702,"depth":45,"text":76703,"children":92768},[92769,92770,92771],{"id":76706,"depth":1189,"text":76707},{"id":76731,"depth":1189,"text":76732},{"id":76743,"depth":1189,"text":76744},{"id":76755,"depth":45,"text":76756,"children":92773},[92774,92775],{"id":76759,"depth":1189,"text":76760},{"id":76774,"depth":1189,"text":76775},{"id":76826,"depth":45,"text":76827},{"id":76870,"depth":45,"text":76871},{"id":76887,"depth":45,"text":76888,"children":92779},[92780,92781,92782],{"id":76891,"depth":1189,"text":76892},{"id":76904,"depth":1189,"text":76905},{"id":77009,"depth":1189,"text":77010},{"id":77298,"depth":45,"text":77299,"children":92784},[92785,92786,92787],{"id":77302,"depth":1189,"text":77303},{"id":77745,"depth":1189,"text":77746},{"id":78156,"depth":1189,"text":78157},{"id":78219,"depth":45,"text":78220},{"id":78298,"depth":45,"text":78299},{"id":78391,"depth":45,"text":78392},{"id":80236,"depth":45,"text":80237,"children":92792},[92793,92794,92795,92796,92797],{"id":80240,"depth":1189,"text":80241},{"id":80252,"depth":1189,"text":80253},{"id":80471,"depth":1189,"text":80472},{"id":80489,"depth":1189,"text":80490},{"id":80549,"depth":1189,"text":80550},{"id":84817,"depth":45,"text":84818,"children":92799},[92800,92801,92802],{"id":84821,"depth":1189,"text":84822},{"id":84839,"depth":1189,"text":84840},{"id":84865,"depth":1189,"text":84866},{"id":84874,"depth":45,"text":84875},{"id":84896,"depth":45,"text":84897,"children":92805},[92806,92807,92808,92809,92810,92811,92812,92813],{"id":84900,"depth":1189,"text":84901},{"id":85161,"depth":1189,"text":85162},{"id":85347,"depth":1189,"text":85348},{"id":85714,"depth":1189,"text":85715},{"id":85830,"depth":1189,"text":85831},{"id":85866,"depth":1189,"text":85867},{"id":85913,"depth":1189,"text":85914},{"id":85947,"depth":1189,"text":85948},{"id":87310,"depth":45,"text":87311,"children":92815},[92816,92817],{"id":87314,"depth":1189,"text":87315},{"id":87351,"depth":1189,"text":87352},{"id":88706,"depth":45,"text":88707},{"id":89077,"depth":45,"text":89078,"children":92820},[92821,92822],{"id":89081,"depth":1189,"text":89082},{"id":89115,"depth":1189,"text":89116},{"id":89844,"depth":45,"text":89845,"children":92824},[92825,92826,92827,92828],{"id":89848,"depth":1189,"text":89849},{"id":90806,"depth":1189,"text":90807},{"id":91748,"depth":1189,"text":91749},{"id":91822,"depth":1189,"text":91823},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76691,"description":47},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92835,"title":92836,"body":92837,"description":92848,"extension":48,"meta":92849,"navigation":50,"path":92851,"seo":92852,"stem":92853,"__hash__":92854},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92838,"toc":92846},[92839],[14,92840,92841,92842],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[372,92843,92844],{"href":92844,"rel":92845},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23875],{"title":37,"searchDepth":45,"depth":45,"links":92847},[],"三件套第三套学习",{"category":92850},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92836,"description":92848},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92856,"title":92857,"body":92858,"description":47,"extension":48,"meta":92963,"navigation":50,"path":92964,"seo":92965,"stem":92966,"__hash__":92967},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92859,"toc":92958},[92860,92867,92870,92873,92876,92880,92889,92892,92895,92899,92908,92911,92915,92918,92938,92941,92955],[14,92861,92862],{},[372,92863,92866],{"href":92864,"rel":92865},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23875],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92868,92857],{"id":92869},"_1安装",[14,92871,92872],{},"numpy是科学计算基础库,底层是C语言",[14,92874,92875],{},"三种方式：",[65,92877,92879],{"id":92878},"_11-通过pip安装","1.1 通过pip安装",[114,92881,92883],{"className":30389,"code":92882,"language":30391,"meta":37,"style":37},"pip install numpy\n",[120,92884,92885],{"__ignoreMap":37},[123,92886,92887],{"class":125,"line":126},[123,92888,92882],{"class":133},[14,92890,92891],{},"首选方式，自动处理依赖项",[14,92893,92894],{},"在提示系统命令符中使用cmd",[65,92896,92898],{"id":92897},"_12-通过anaconda安装","1.2 通过Anaconda安装",[114,92900,92902],{"className":30389,"code":92901,"language":30391,"meta":37,"style":37},"conda install numpy\n",[120,92903,92904],{"__ignoreMap":37},[123,92905,92906],{"class":125,"line":126},[123,92907,92901],{"class":133},[14,92909,92910],{},"自动解决环境依赖",[65,92912,92914],{"id":92913},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,92916,92917],{},"对于Debian\u002FUbuntu",[114,92919,92921],{"className":30389,"code":92920,"language":30391,"meta":37,"style":37},"sudo apt-get install python3-numpy\n",[120,92922,92923],{"__ignoreMap":37},[123,92924,92925,92928,92930,92933,92935],{"class":125,"line":126},[123,92926,92927],{"class":133},"sudo apt",[123,92929,666],{"class":129},[123,92931,92932],{"class":133},"get install python3",[123,92934,666],{"class":129},[123,92936,92937],{"class":133},"numpy\n",[14,92939,92940],{},"对于Fedora:",[114,92942,92944],{"className":30389,"code":92943,"language":30391,"meta":37,"style":37},"sudo dnf install python3-numpy\n",[120,92945,92946],{"__ignoreMap":37},[123,92947,92948,92951,92953],{"class":125,"line":126},[123,92949,92950],{"class":133},"sudo dnf install python3",[123,92952,666],{"class":129},[123,92954,92937],{"class":133},[5136,92956,92957],{},"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":37,"searchDepth":45,"depth":45,"links":92959},[92960,92961,92962],{"id":92878,"depth":45,"text":92879},{"id":92897,"depth":45,"text":92898},{"id":92913,"depth":45,"text":92914},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92857,"description":47},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":92969,"title":92970,"body":92971,"description":47,"extension":48,"meta":93084,"navigation":50,"path":93085,"seo":93086,"stem":93087,"__hash__":93088},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":92972,"toc":93082},[92973,92976,92979,92982,92985,92988,92991,92994,92997,93000,93076,93079],[10,92974,92970],{"id":92975},"_10算数函数",[14,92977,92978],{},"加减乘除运算跟python基础语法没区别",[14,92980,92981],{},"除了python那种方法外还可以使用函数",[14,92983,92984],{},"加：np.add(a,b)",[14,92986,92987],{},"减：np.subtract(a,b)",[14,92989,92990],{},"乘：np.multiply(a,b)",[14,92992,92993],{},"除：np.divide(a,b) == a\u002Fb",[14,92995,92996],{},"取余：np.mod(a,b) == a%b",[14,92998,92999],{},"必须会的用法：",[114,93001,93003],{"className":30389,"code":93002,"language":30391,"meta":37,"style":37},"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",[120,93004,93005,93027,93048,93058,93071],{"__ignoreMap":37},[123,93006,93007,93009,93011,93014,93016,93019,93021,93023,93025],{"class":125,"line":126},[123,93008,372],{"class":133},[123,93010,179],{"class":129},[123,93012,93013],{"class":133},"np.arange(",[123,93015,554],{"class":182},[123,93017,93018],{"class":133},").reshape(",[123,93020,205],{"class":182},[123,93022,512],{"class":133},[123,93024,205],{"class":182},[123,93026,140],{"class":133},[123,93028,93029,93031,93033,93036,93038,93040,93042,93044,93046],{"class":125,"line":45},[123,93030,397],{"class":133},[123,93032,179],{"class":129},[123,93034,93035],{"class":133},"np.array([",[123,93037,580],{"class":182},[123,93039,512],{"class":133},[123,93041,580],{"class":182},[123,93043,512],{"class":133},[123,93045,580],{"class":182},[123,93047,4666],{"class":133},[123,93049,93050,93053,93055],{"class":125,"line":1189},[123,93051,93052],{"class":133},"result",[123,93054,179],{"class":129},[123,93056,93057],{"class":133},"np.empty_like(a)\n",[123,93059,93060,93063,93066,93068],{"class":125,"line":1204},[123,93061,93062],{"class":133},"np.add(a,b,",[123,93064,93065],{"class":5226},"out",[123,93067,179],{"class":129},[123,93069,93070],{"class":133},"result)\n",[123,93072,93073],{"class":125,"line":1210},[123,93074,93075],{"class":133},"result\n",[14,93077,93078],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5136,93080,93081],{},"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":37,"searchDepth":45,"depth":45,"links":93083},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":92970,"description":47},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93090,"title":93091,"body":93092,"description":47,"extension":48,"meta":93854,"navigation":50,"path":93855,"seo":93856,"stem":93857,"__hash__":93858},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93093,"toc":93841},[93094,93097,93100,93103,93107,93146,93150,93194,93254,93258,93261,93300,93303,93348,93352,93388,93392,93461,93465,93529,93533,93536,93539,93542,93545,93581,93585,93625,93629,93701,93704,93708,93771,93775,93838],[10,93095,93091],{"id":93096},"_11统计函数",[14,93098,93099],{},"sum max min mean",[14,93101,93102],{},"这些有axis参数，可以指定方向",[65,93104,93106],{"id":93105},"_111-sum求和函数","11.1 sum()求和函数",[114,93108,93110],{"className":30389,"code":93109,"language":30391,"meta":37,"style":37},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[120,93111,93112,93117,93138],{"__ignoreMap":37},[123,93113,93114],{"class":125,"line":126},[123,93115,93116],{"class":192},"#创建一维数组\n",[123,93118,93119,93121,93123,93126,93128,93130,93132,93134,93136],{"class":125,"line":45},[123,93120,372],{"class":133},[123,93122,179],{"class":129},[123,93124,93125],{"class":133},"np.random.randint(",[123,93127,351],{"class":182},[123,93129,512],{"class":133},[123,93131,445],{"class":182},[123,93133,512],{"class":133},[123,93135,834],{"class":182},[123,93137,140],{"class":133},[123,93139,93140,93143],{"class":125,"line":1189},[123,93141,93142],{"class":133},"np.sum(a)",[123,93144,93145],{"class":192},"#求和\n",[65,93147,93149],{"id":93148},"_112-max求最大值函数","11.2 max()求最大值函数",[114,93151,93153],{"className":30389,"code":93152,"language":30391,"meta":37,"style":37},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[120,93154,93155,93159,93179,93184,93189],{"__ignoreMap":37},[123,93156,93157],{"class":125,"line":126},[123,93158,93116],{"class":192},[123,93160,93161,93163,93165,93167,93169,93171,93173,93175,93177],{"class":125,"line":45},[123,93162,372],{"class":133},[123,93164,179],{"class":129},[123,93166,93125],{"class":133},[123,93168,351],{"class":182},[123,93170,512],{"class":133},[123,93172,445],{"class":182},[123,93174,512],{"class":133},[123,93176,834],{"class":182},[123,93178,140],{"class":133},[123,93180,93181],{"class":125,"line":1189},[123,93182,93183],{"class":133},"np.max(a)\n",[123,93185,93186],{"class":125,"line":1204},[123,93187,93188],{"class":192},"#最大索引(求最大元素的索引)arg\n",[123,93190,93191],{"class":125,"line":1210},[123,93192,93193],{"class":133},"np.argmax(a)\n",[114,93195,93197],{"className":30389,"code":93196,"language":30391,"meta":37,"style":37},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[120,93198,93199,93220,93240,93244],{"__ignoreMap":37},[123,93200,93201,93203,93205,93208,93210,93212,93214,93216,93218],{"class":125,"line":126},[123,93202,10929],{"class":133},[123,93204,179],{"class":129},[123,93206,93207],{"class":133}," np.array([",[123,93209,351],{"class":182},[123,93211,12445],{"class":133},[123,93213,453],{"class":182},[123,93215,12445],{"class":133},[123,93217,205],{"class":182},[123,93219,4666],{"class":133},[123,93221,93222,93224,93226,93228,93230,93232,93234,93236,93238],{"class":125,"line":45},[123,93223,10955],{"class":133},[123,93225,179],{"class":129},[123,93227,93207],{"class":133},[123,93229,205],{"class":182},[123,93231,12445],{"class":133},[123,93233,211],{"class":182},[123,93235,12445],{"class":133},[123,93237,427],{"class":182},[123,93239,4666],{"class":133},[123,93241,93242],{"class":125,"line":1189},[123,93243,2409],{"emptyLinePlaceholder":50},[123,93245,93246,93248,93251],{"class":125,"line":1204},[123,93247,30426],{"class":182},[123,93249,93250],{"class":133},"(np.maximum(a, b))   ",[123,93252,93253],{"class":192},"# [3 5 4]，每个位置上取较大值\n",[65,93255,93257],{"id":93256},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93259,93260],{},"①一维数组：",[114,93262,93264],{"className":30389,"code":93263,"language":30391,"meta":37,"style":37},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[120,93265,93266,93270,93290,93295],{"__ignoreMap":37},[123,93267,93268],{"class":125,"line":126},[123,93269,93116],{"class":192},[123,93271,93272,93274,93276,93278,93280,93282,93284,93286,93288],{"class":125,"line":45},[123,93273,372],{"class":133},[123,93275,179],{"class":129},[123,93277,93125],{"class":133},[123,93279,351],{"class":182},[123,93281,512],{"class":133},[123,93283,445],{"class":182},[123,93285,512],{"class":133},[123,93287,834],{"class":182},[123,93289,140],{"class":133},[123,93291,93292],{"class":125,"line":1189},[123,93293,93294],{"class":192},"#求平均值\n",[123,93296,93297],{"class":125,"line":1204},[123,93298,93299],{"class":133},"np.mean(a)\n",[14,93301,93302],{},"②二维数组",[114,93304,93306],{"className":30389,"code":93305,"language":30391,"meta":37,"style":37},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[120,93307,93308,93313,93338,93343],{"__ignoreMap":37},[123,93309,93310],{"class":125,"line":126},[123,93311,93312],{"class":192},"#二维数组\n",[123,93314,93315,93318,93320,93322,93324,93326,93328,93330,93332,93334,93336],{"class":125,"line":45},[123,93316,93317],{"class":133},"aa",[123,93319,179],{"class":129},[123,93321,93013],{"class":133},[123,93323,351],{"class":182},[123,93325,512],{"class":133},[123,93327,657],{"class":182},[123,93329,93018],{"class":133},[123,93331,205],{"class":182},[123,93333,512],{"class":133},[123,93335,427],{"class":182},[123,93337,140],{"class":133},[123,93339,93340],{"class":125,"line":1189},[123,93341,93342],{"class":192},"#对数组中的所有数求平均\n",[123,93344,93345],{"class":125,"line":1204},[123,93346,93347],{"class":133},"np.mean(aa)\n",[65,93349,93351],{"id":93350},"_114-median求中位数函数","11.4 median()求中位数函数",[114,93353,93355],{"className":30389,"code":93354,"language":30391,"meta":37,"style":37},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[120,93356,93357,93362,93378,93383],{"__ignoreMap":37},[123,93358,93359],{"class":125,"line":126},[123,93360,93361],{"class":192},"#求中位数\n",[123,93363,93364,93366,93368,93370,93372,93374,93376],{"class":125,"line":45},[123,93365,397],{"class":133},[123,93367,179],{"class":129},[123,93369,93013],{"class":133},[123,93371,351],{"class":182},[123,93373,512],{"class":133},[123,93375,580],{"class":182},[123,93377,140],{"class":133},[123,93379,93380],{"class":125,"line":1189},[123,93381,93382],{"class":133},"np.median(b)\n",[123,93384,93385],{"class":125,"line":1204},[123,93386,93387],{"class":192},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[65,93389,93391],{"id":93390},"_115-power求幂运算函数","11.5 power()求幂运算函数",[114,93393,93395],{"className":30389,"code":93394,"language":30391,"meta":37,"style":37},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[120,93396,93397,93413,93418,93423,93432,93437,93446],{"__ignoreMap":37},[123,93398,93399,93401,93403,93405,93407,93409,93411],{"class":125,"line":126},[123,93400,397],{"class":133},[123,93402,179],{"class":129},[123,93404,93013],{"class":133},[123,93406,351],{"class":182},[123,93408,512],{"class":133},[123,93410,580],{"class":182},[123,93412,140],{"class":133},[123,93414,93415],{"class":125,"line":45},[123,93416,93417],{"class":192},"#幂运算\n",[123,93419,93420],{"class":125,"line":1189},[123,93421,93422],{"class":192},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[123,93424,93425,93428,93430],{"class":125,"line":1204},[123,93426,93427],{"class":133},"np.power(b,",[123,93429,211],{"class":182},[123,93431,140],{"class":133},[123,93433,93434],{"class":125,"line":1210},[123,93435,93436],{"class":192},"#或者以下代码，将数据存储起来\n",[123,93438,93439,93441,93443],{"class":125,"line":1224},[123,93440,979],{"class":133},[123,93442,179],{"class":129},[123,93444,93445],{"class":133},"np.empty_like(b)\n",[123,93447,93448,93450,93452,93454,93456,93458],{"class":125,"line":1230},[123,93449,93427],{"class":133},[123,93451,211],{"class":182},[123,93453,512],{"class":133},[123,93455,93065],{"class":5226},[123,93457,179],{"class":129},[123,93459,93460],{"class":133},"y)\n",[65,93462,93464],{"id":93463},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[114,93466,93468],{"className":30389,"code":93467,"language":30391,"meta":37,"style":37},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[120,93469,93470,93486,93491,93496,93500,93518],{"__ignoreMap":37},[123,93471,93472,93474,93476,93478,93480,93482,93484],{"class":125,"line":126},[123,93473,397],{"class":133},[123,93475,179],{"class":129},[123,93477,93013],{"class":133},[123,93479,351],{"class":182},[123,93481,512],{"class":133},[123,93483,580],{"class":182},[123,93485,140],{"class":133},[123,93487,93488],{"class":125,"line":45},[123,93489,93490],{"class":192},"#开方\n",[123,93492,93493],{"class":125,"line":1189},[123,93494,93495],{"class":133},"np.sqrt(b)\n",[123,93497,93498],{"class":125,"line":1204},[123,93499,93436],{"class":192},[123,93501,93502,93504,93506,93509,93512,93514,93516],{"class":125,"line":1210},[123,93503,979],{"class":133},[123,93505,179],{"class":129},[123,93507,93508],{"class":133},"np.empty_like(b,",[123,93510,93511],{"class":5226},"dtype",[123,93513,179],{"class":129},[123,93515,173],{"class":182},[123,93517,140],{"class":133},[123,93519,93520,93523,93525,93527],{"class":125,"line":1224},[123,93521,93522],{"class":133},"np.sqrt(b,",[123,93524,93065],{"class":5226},[123,93526,179],{"class":129},[123,93528,93460],{"class":133},[65,93530,93532],{"id":93531},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93534,93535],{},"对数组中的元素累计求和，可指定轴",[14,93537,93538],{},"#累计求和的意思是：",[14,93540,93541],{},"a = np.array([1, 2, 3, 4])",[14,93543,93544],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[114,93546,93548],{"className":30389,"code":93547,"language":30391,"meta":37,"style":37},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[120,93549,93550,93566,93571,93576],{"__ignoreMap":37},[123,93551,93552,93554,93556,93558,93560,93562,93564],{"class":125,"line":126},[123,93553,397],{"class":133},[123,93555,179],{"class":129},[123,93557,93013],{"class":133},[123,93559,351],{"class":182},[123,93561,512],{"class":133},[123,93563,580],{"class":182},[123,93565,140],{"class":133},[123,93567,93568],{"class":125,"line":45},[123,93569,93570],{"class":133},"np.cumsum(b)\n",[123,93572,93573],{"class":125,"line":1189},[123,93574,93575],{"class":192},"#结果：\n",[123,93577,93578],{"class":125,"line":1204},[123,93579,93580],{"class":192},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[65,93582,93584],{"id":93583},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[114,93586,93588],{"className":30389,"code":93587,"language":30391,"meta":37,"style":37},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[120,93589,93590,93606,93611,93616,93620],{"__ignoreMap":37},[123,93591,93592,93594,93596,93598,93600,93602,93604],{"class":125,"line":126},[123,93593,397],{"class":133},[123,93595,179],{"class":129},[123,93597,93013],{"class":133},[123,93599,351],{"class":182},[123,93601,512],{"class":133},[123,93603,580],{"class":182},[123,93605,140],{"class":133},[123,93607,93608],{"class":125,"line":45},[123,93609,93610],{"class":192},"#对数组中的元素累计求积，可指定轴\n",[123,93612,93613],{"class":125,"line":1189},[123,93614,93615],{"class":133},"np.cumprod(b)\n",[123,93617,93618],{"class":125,"line":1204},[123,93619,93575],{"class":192},[123,93621,93622],{"class":125,"line":1210},[123,93623,93624],{"class":192},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[65,93626,93628],{"id":93627},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[114,93630,93632],{"className":30389,"code":93631,"language":30391,"meta":37,"style":37},"#删除数组中的重复数据，并对数据进行排序\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",[120,93633,93634,93639,93687,93692,93696],{"__ignoreMap":37},[123,93635,93636],{"class":125,"line":126},[123,93637,93638],{"class":192},"#删除数组中的重复数据，并对数据进行排序\n",[123,93640,93641,93643,93645,93647,93649,93651,93653,93655,93657,93659,93661,93663,93665,93667,93669,93671,93673,93675,93677,93679,93681,93683,93685],{"class":125,"line":45},[123,93642,372],{"class":133},[123,93644,179],{"class":129},[123,93646,93035],{"class":133},[123,93648,351],{"class":182},[123,93650,512],{"class":133},[123,93652,211],{"class":182},[123,93654,512],{"class":133},[123,93656,205],{"class":182},[123,93658,512],{"class":133},[123,93660,632],{"class":182},[123,93662,512],{"class":133},[123,93664,205],{"class":182},[123,93666,512],{"class":133},[123,93668,580],{"class":182},[123,93670,512],{"class":133},[123,93672,331],{"class":182},[123,93674,512],{"class":133},[123,93676,325],{"class":182},[123,93678,512],{"class":133},[123,93680,909],{"class":182},[123,93682,512],{"class":133},[123,93684,427],{"class":182},[123,93686,4666],{"class":133},[123,93688,93689],{"class":125,"line":1189},[123,93690,93691],{"class":133},"np.unique(a)\n",[123,93693,93694],{"class":125,"line":1204},[123,93695,93575],{"class":192},[123,93697,93698],{"class":125,"line":1210},[123,93699,93700],{"class":192},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,93702,93703],{},"升序形式排序",[65,93705,93707],{"id":93706},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[114,93709,93711],{"className":30389,"code":93710,"language":30391,"meta":37,"style":37},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[120,93712,93713,93761,93766],{"__ignoreMap":37},[123,93714,93715,93717,93719,93721,93723,93725,93727,93729,93731,93733,93735,93737,93739,93741,93743,93745,93747,93749,93751,93753,93755,93757,93759],{"class":125,"line":126},[123,93716,372],{"class":133},[123,93718,179],{"class":129},[123,93720,93035],{"class":133},[123,93722,351],{"class":182},[123,93724,512],{"class":133},[123,93726,211],{"class":182},[123,93728,512],{"class":133},[123,93730,205],{"class":182},[123,93732,512],{"class":133},[123,93734,632],{"class":182},[123,93736,512],{"class":133},[123,93738,205],{"class":182},[123,93740,512],{"class":133},[123,93742,580],{"class":182},[123,93744,512],{"class":133},[123,93746,331],{"class":182},[123,93748,512],{"class":133},[123,93750,325],{"class":182},[123,93752,512],{"class":133},[123,93754,909],{"class":182},[123,93756,512],{"class":133},[123,93758,427],{"class":182},[123,93760,4666],{"class":133},[123,93762,93763],{"class":125,"line":45},[123,93764,93765],{"class":192},"#返回数组中非零元素的索引\n",[123,93767,93768],{"class":125,"line":1189},[123,93769,93770],{"class":133},"np.nonzero(a)\n",[65,93772,93774],{"id":93773},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[114,93776,93778],{"className":30389,"code":93777,"language":30391,"meta":37,"style":37},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[120,93779,93780,93828,93833],{"__ignoreMap":37},[123,93781,93782,93784,93786,93788,93790,93792,93794,93796,93798,93800,93802,93804,93806,93808,93810,93812,93814,93816,93818,93820,93822,93824,93826],{"class":125,"line":126},[123,93783,372],{"class":133},[123,93785,179],{"class":129},[123,93787,93035],{"class":133},[123,93789,351],{"class":182},[123,93791,512],{"class":133},[123,93793,211],{"class":182},[123,93795,512],{"class":133},[123,93797,205],{"class":182},[123,93799,512],{"class":133},[123,93801,632],{"class":182},[123,93803,512],{"class":133},[123,93805,205],{"class":182},[123,93807,512],{"class":133},[123,93809,580],{"class":182},[123,93811,512],{"class":133},[123,93813,331],{"class":182},[123,93815,512],{"class":133},[123,93817,325],{"class":182},[123,93819,512],{"class":133},[123,93821,909],{"class":182},[123,93823,512],{"class":133},[123,93825,427],{"class":182},[123,93827,4666],{"class":133},[123,93829,93830],{"class":125,"line":45},[123,93831,93832],{"class":192},"#计算一组数中最大值与最小值的差，可指定轴\n",[123,93834,93835],{"class":125,"line":1189},[123,93836,93837],{"class":133},"np.ptp(a)\n",[5136,93839,93840],{},"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":37,"searchDepth":45,"depth":45,"links":93842},[93843,93844,93845,93846,93847,93848,93849,93850,93851,93852,93853],{"id":93105,"depth":45,"text":93106},{"id":93148,"depth":45,"text":93149},{"id":93256,"depth":45,"text":93257},{"id":93350,"depth":45,"text":93351},{"id":93390,"depth":45,"text":93391},{"id":93463,"depth":45,"text":93464},{"id":93531,"depth":45,"text":93532},{"id":93583,"depth":45,"text":93584},{"id":93627,"depth":45,"text":93628},{"id":93706,"depth":45,"text":93707},{"id":93773,"depth":45,"text":93774},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93091,"description":47},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93860,"title":93861,"body":93862,"description":47,"extension":48,"meta":94517,"navigation":50,"path":94518,"seo":94519,"stem":94520,"__hash__":94521},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93863,"toc":94505},[93864,93867,93871,93874,94090,94094,94097,94306,94310,94376,94381,94385,94388,94391,94429,94433,94436,94441,94445,94448,94451,94456,94460,94463,94467,94470,94473,94478,94482,94485,94488,94493,94497,94502],[10,93865,93861],{"id":93866},"_12其他常用函数",[65,93868,93870],{"id":93869},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,93872,93873],{},"将数组的数据按照行列复制扩展",[114,93875,93877],{"className":30389,"code":93876,"language":30391,"meta":37,"style":37},"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",[120,93878,93879,93895,93904,93908,93913,93918,93931,93935,93940,93945,93950,93954,93959,93983,93995,93999,94003,94008,94013,94018,94023,94027,94040,94044,94048,94053,94058,94063,94068,94073,94077,94081,94086],{"__ignoreMap":37},[123,93880,93881,93883,93885,93887,93889,93891,93893],{"class":125,"line":126},[123,93882,372],{"class":133},[123,93884,179],{"class":129},[123,93886,93013],{"class":133},[123,93888,351],{"class":182},[123,93890,512],{"class":133},[123,93892,453],{"class":182},[123,93894,140],{"class":133},[123,93896,93897,93900,93902],{"class":125,"line":45},[123,93898,93899],{"class":133},"np.tile(a,",[123,93901,211],{"class":182},[123,93903,140],{"class":133},[123,93905,93906],{"class":125,"line":1189},[123,93907,93575],{"class":192},[123,93909,93910],{"class":125,"line":1204},[123,93911,93912],{"class":192},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[123,93914,93915],{"class":125,"line":1210},[123,93916,93917],{"class":192},"#行复制两次，列复制三次\n",[123,93919,93920,93923,93925,93927,93929],{"class":125,"line":1224},[123,93921,93922],{"class":133},"np.tile(a,(",[123,93924,211],{"class":182},[123,93926,512],{"class":133},[123,93928,205],{"class":182},[123,93930,30508],{"class":133},[123,93932,93933],{"class":125,"line":1230},[123,93934,93575],{"class":192},[123,93936,93937],{"class":125,"line":1321},[123,93938,93939],{"class":238},"'''\n",[123,93941,93942],{"class":125,"line":1327},[123,93943,93944],{"class":238},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[123,93946,93947],{"class":125,"line":1339},[123,93948,93949],{"class":238},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[123,93951,93952],{"class":125,"line":1621},[123,93953,93939],{"class":238},[123,93955,93956],{"class":125,"line":1626},[123,93957,93958],{"class":192},"#创建二维数组\n",[123,93960,93961,93963,93965,93967,93969,93971,93973,93975,93977,93979,93981],{"class":125,"line":1632},[123,93962,93317],{"class":133},[123,93964,179],{"class":129},[123,93966,93013],{"class":133},[123,93968,351],{"class":182},[123,93970,512],{"class":133},[123,93972,657],{"class":182},[123,93974,93018],{"class":133},[123,93976,427],{"class":182},[123,93978,512],{"class":133},[123,93980,205],{"class":182},[123,93982,140],{"class":133},[123,93984,93985,93988,93990,93992],{"class":125,"line":1637},[123,93986,93987],{"class":133},"np.tile(aa,",[123,93989,211],{"class":182},[123,93991,563],{"class":133},[123,93993,93994],{"class":192},"#一个数的时候就是行\n",[123,93996,93997],{"class":125,"line":1651},[123,93998,93575],{"class":192},[123,94000,94001],{"class":125,"line":1656},[123,94002,93939],{"class":238},[123,94004,94005],{"class":125,"line":1662},[123,94006,94007],{"class":238},"array([[ 1,  2,  3,  1,  2,  3],\n",[123,94009,94010],{"class":125,"line":1683},[123,94011,94012],{"class":238},"       [ 4,  5,  6,  4,  5,  6],\n",[123,94014,94015],{"class":125,"line":1688},[123,94016,94017],{"class":238},"       [ 7,  8,  9,  7,  8,  9],\n",[123,94019,94020],{"class":125,"line":1702},[123,94021,94022],{"class":238},"       [10, 11, 12, 10, 11, 12]])\n",[123,94024,94025],{"class":125,"line":1707},[123,94026,93939],{"class":238},[123,94028,94029,94032,94034,94036,94038],{"class":125,"line":1736},[123,94030,94031],{"class":133},"np.tile(aa,(",[123,94033,211],{"class":182},[123,94035,512],{"class":133},[123,94037,205],{"class":182},[123,94039,30508],{"class":133},[123,94041,94042],{"class":125,"line":1741},[123,94043,93575],{"class":192},[123,94045,94046],{"class":125,"line":1758},[123,94047,93939],{"class":238},[123,94049,94050],{"class":125,"line":1763},[123,94051,94052],{"class":238},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[123,94054,94055],{"class":125,"line":1768},[123,94056,94057],{"class":238},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[123,94059,94060],{"class":125,"line":1773},[123,94061,94062],{"class":238},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[123,94064,94065],{"class":125,"line":1787},[123,94066,94067],{"class":238},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[123,94069,94070],{"class":125,"line":1792},[123,94071,94072],{"class":238},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[123,94074,94075],{"class":125,"line":2586},[123,94076,94057],{"class":238},[123,94078,94079],{"class":125,"line":2600},[123,94080,94062],{"class":238},[123,94082,94083],{"class":125,"line":2608},[123,94084,94085],{"class":238},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[123,94087,94088],{"class":125,"line":2613},[123,94089,93939],{"class":238},[65,94091,94093],{"id":94092},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94095,94096],{},"repeat()将数组中的每个元素重复若干次",[114,94098,94100],{"className":30389,"code":94099,"language":30391,"meta":37,"style":37},"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",[120,94101,94102,94118,94127,94131,94136,94160,94165,94174,94178,94183,94187,94192,94208,94212,94216,94221,94226,94231,94235,94240,94244,94249,94254,94258,94274,94278,94282,94287,94292,94297,94302],{"__ignoreMap":37},[123,94103,94104,94106,94108,94110,94112,94114,94116],{"class":125,"line":126},[123,94105,372],{"class":133},[123,94107,179],{"class":129},[123,94109,93013],{"class":133},[123,94111,351],{"class":182},[123,94113,512],{"class":133},[123,94115,453],{"class":182},[123,94117,140],{"class":133},[123,94119,94120,94123,94125],{"class":125,"line":45},[123,94121,94122],{"class":133},"np.repeat(a,",[123,94124,205],{"class":182},[123,94126,140],{"class":133},[123,94128,94129],{"class":125,"line":1189},[123,94130,93575],{"class":192},[123,94132,94133],{"class":125,"line":1204},[123,94134,94135],{"class":192},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[123,94137,94138,94140,94142,94144,94146,94148,94150,94152,94154,94156,94158],{"class":125,"line":1210},[123,94139,93317],{"class":133},[123,94141,179],{"class":129},[123,94143,93013],{"class":133},[123,94145,351],{"class":182},[123,94147,512],{"class":133},[123,94149,657],{"class":182},[123,94151,93018],{"class":133},[123,94153,427],{"class":182},[123,94155,512],{"class":133},[123,94157,205],{"class":182},[123,94159,140],{"class":133},[123,94161,94162],{"class":125,"line":1224},[123,94163,94164],{"class":192},"#这个重复之后二维变成一维\n",[123,94166,94167,94170,94172],{"class":125,"line":1230},[123,94168,94169],{"class":133},"np.repeat(aa,",[123,94171,211],{"class":182},[123,94173,140],{"class":133},[123,94175,94176],{"class":125,"line":1321},[123,94177,93939],{"class":238},[123,94179,94180],{"class":125,"line":1327},[123,94181,94182],{"class":238},"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",[123,94184,94185],{"class":125,"line":1339},[123,94186,93939],{"class":238},[123,94188,94189],{"class":125,"line":1621},[123,94190,94191],{"class":192},"#指定axis\n",[123,94193,94194,94196,94198,94200,94202,94204,94206],{"class":125,"line":1626},[123,94195,94169],{"class":133},[123,94197,211],{"class":182},[123,94199,512],{"class":133},[123,94201,47525],{"class":5226},[123,94203,179],{"class":129},[123,94205,325],{"class":182},[123,94207,140],{"class":133},[123,94209,94210],{"class":125,"line":1632},[123,94211,93575],{"class":192},[123,94213,94214],{"class":125,"line":1637},[123,94215,93939],{"class":238},[123,94217,94218],{"class":125,"line":1651},[123,94219,94220],{"class":238},"array([[ 1,  2,  3],\n",[123,94222,94223],{"class":125,"line":1656},[123,94224,94225],{"class":238},"       [ 1,  2,  3],\n",[123,94227,94228],{"class":125,"line":1662},[123,94229,94230],{"class":238},"       [ 4,  5,  6],\n",[123,94232,94233],{"class":125,"line":1683},[123,94234,94230],{"class":238},[123,94236,94237],{"class":125,"line":1688},[123,94238,94239],{"class":238},"       [ 7,  8,  9],\n",[123,94241,94242],{"class":125,"line":1702},[123,94243,94239],{"class":238},[123,94245,94246],{"class":125,"line":1707},[123,94247,94248],{"class":238},"       [10, 11, 12],\n",[123,94250,94251],{"class":125,"line":1736},[123,94252,94253],{"class":238},"       [10, 11, 12]])\n",[123,94255,94256],{"class":125,"line":1741},[123,94257,93939],{"class":238},[123,94259,94260,94262,94264,94266,94268,94270,94272],{"class":125,"line":1758},[123,94261,94169],{"class":133},[123,94263,211],{"class":182},[123,94265,512],{"class":133},[123,94267,47525],{"class":5226},[123,94269,179],{"class":129},[123,94271,351],{"class":182},[123,94273,140],{"class":133},[123,94275,94276],{"class":125,"line":1763},[123,94277,93575],{"class":192},[123,94279,94280],{"class":125,"line":1768},[123,94281,93939],{"class":238},[123,94283,94284],{"class":125,"line":1773},[123,94285,94286],{"class":238},"array([[ 1,  1,  2,  2,  3,  3],\n",[123,94288,94289],{"class":125,"line":1787},[123,94290,94291],{"class":238},"       [ 4,  4,  5,  5,  6,  6],\n",[123,94293,94294],{"class":125,"line":1792},[123,94295,94296],{"class":238},"       [ 7,  7,  8,  8,  9,  9],\n",[123,94298,94299],{"class":125,"line":2586},[123,94300,94301],{"class":238},"       [10, 10, 11, 11, 12, 12]])\n",[123,94303,94304],{"class":125,"line":2600},[123,94305,93939],{"class":238},[65,94307,94309],{"id":94308},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[114,94311,94313],{"className":30389,"code":94312,"language":30391,"meta":37,"style":37},"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",[120,94314,94315,94331,94336,94348,94352,94357,94367,94371],{"__ignoreMap":37},[123,94316,94317,94319,94321,94323,94325,94327,94329],{"class":125,"line":126},[123,94318,372],{"class":133},[123,94320,179],{"class":129},[123,94322,93013],{"class":133},[123,94324,351],{"class":182},[123,94326,512],{"class":133},[123,94328,453],{"class":182},[123,94330,140],{"class":133},[123,94332,94333],{"class":125,"line":45},[123,94334,94335],{"class":192},"#array([，2，3，4])\n",[123,94337,94338,94341,94343,94345],{"class":125,"line":1189},[123,94339,94340],{"class":133},"np.roll(a,",[123,94342,211],{"class":182},[123,94344,563],{"class":133},[123,94346,94347],{"class":192},"#传正数向后调多少位，传负数向前调多少位\n",[123,94349,94350],{"class":125,"line":1204},[123,94351,93575],{"class":192},[123,94353,94354],{"class":125,"line":1210},[123,94355,94356],{"class":192},"#array([3, 4, 1, 2])\n",[123,94358,94359,94361,94363,94365],{"class":125,"line":1224},[123,94360,94340],{"class":133},[123,94362,666],{"class":129},[123,94364,351],{"class":182},[123,94366,140],{"class":133},[123,94368,94369],{"class":125,"line":1230},[123,94370,93575],{"class":192},[123,94372,94373],{"class":125,"line":1321},[123,94374,94375],{"class":192},"#array([2, 3, 4, 1])\n",[14,94377,94378],{},[35,94379],{"alt":37,"src":94380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[65,94382,94384],{"id":94383},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94386,94387],{},"resize()重新调整数组的大小",[14,94389,94390],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[114,94392,94394],{"className":30389,"code":94393,"language":30391,"meta":37,"style":37},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[120,94395,94396,94401,94414],{"__ignoreMap":37},[123,94397,94398],{"class":125,"line":126},[123,94399,94400],{"class":192},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[123,94402,94403,94406,94408,94410,94412],{"class":125,"line":45},[123,94404,94405],{"class":133},"np.resize(aa,(",[123,94407,211],{"class":182},[123,94409,512],{"class":133},[123,94411,478],{"class":182},[123,94413,30508],{"class":133},[123,94415,94416,94418,94420,94422,94424,94426],{"class":125,"line":1189},[123,94417,94405],{"class":133},[123,94419,211],{"class":182},[123,94421,512],{"class":133},[123,94423,554],{"class":182},[123,94425,82782],{"class":133},[123,94427,94428],{"class":192},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[65,94430,94432],{"id":94431},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94434,94435],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94437,94438],{},[35,94439],{"alt":37,"src":94440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[65,94442,94444],{"id":94443},"_126-保存加载文件","12.6 保存加载文件",[14,94446,94447],{},"savetxt():将数据保存到txt文件中",[14,94449,94450],{},"loadtxt():从文件加载数据",[14,94452,94453],{},[35,94454],{"alt":37,"src":94455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[65,94457,94459],{"id":94458},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94461,94462],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[65,94464,94466],{"id":94465},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94468,94469],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94471,94472],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94474,94475],{},[35,94476],{"alt":37,"src":94477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[65,94479,94481],{"id":94480},"_129-where语句","12.9 where语句",[14,94483,94484],{},"np.where(条件,x,y)",[14,94486,94487],{},"如果条件为True,对应值为x,否则对应值为y",[14,94489,94490],{},[35,94491],{"alt":37,"src":94492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[65,94494,94496],{"id":94495},"_1210-dot矩阵","12.10 dot()矩阵",[14,94498,94499],{},[35,94500],{"alt":37,"src":94501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5136,94503,94504],{},"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":37,"searchDepth":45,"depth":45,"links":94506},[94507,94508,94509,94510,94511,94512,94513,94514,94515,94516],{"id":93869,"depth":45,"text":93870},{"id":94092,"depth":45,"text":94093},{"id":94308,"depth":45,"text":94309},{"id":94383,"depth":45,"text":94384},{"id":94431,"depth":45,"text":94432},{"id":94443,"depth":45,"text":94444},{"id":94458,"depth":45,"text":94459},{"id":94465,"depth":45,"text":94466},{"id":94480,"depth":45,"text":94481},{"id":94495,"depth":45,"text":94496},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93861,"description":47},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94523,"title":94524,"body":94525,"description":47,"extension":48,"meta":94878,"navigation":50,"path":94879,"seo":94880,"stem":94881,"__hash__":94882},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94526,"toc":94876},[94527,94530,94533,94536,94539,94542,94607,94609,94873],[10,94528,94524],{"id":94529},"_13数组排序",[14,94531,94532],{},"排序主要用到的方法是np.sort和np.argsort",[14,94534,94535],{},"其中np.sort()对数组直接排序",[14,94537,94538],{},"而np.argsort()是返回排序后的原始索引",[14,94540,94541],{},"①一维数组",[114,94543,94545],{"className":30389,"code":94544,"language":30391,"meta":37,"style":37},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[120,94546,94547,94551,94591,94599],{"__ignoreMap":37},[123,94548,94549],{"class":125,"line":126},[123,94550,93116],{"class":192},[123,94552,94553,94555,94557,94559,94561,94563,94565,94567,94569,94571,94573,94575,94577,94579,94581,94583,94585,94587,94589],{"class":125,"line":45},[123,94554,372],{"class":133},[123,94556,179],{"class":129},[123,94558,93035],{"class":133},[123,94560,205],{"class":182},[123,94562,512],{"class":133},[123,94564,632],{"class":182},[123,94566,512],{"class":133},[123,94568,529],{"class":182},[123,94570,512],{"class":133},[123,94572,909],{"class":182},[123,94574,512],{"class":133},[123,94576,413],{"class":182},[123,94578,512],{"class":133},[123,94580,1027],{"class":182},[123,94582,512],{"class":133},[123,94584,478],{"class":182},[123,94586,512],{"class":133},[123,94588,580],{"class":182},[123,94590,4666],{"class":133},[123,94592,94593,94596],{"class":125,"line":1189},[123,94594,94595],{"class":133},"np.sort(a)",[123,94597,94598],{"class":192},"#升序排序\n",[123,94600,94601,94604],{"class":125,"line":1204},[123,94602,94603],{"class":133},"np.argsort(a)",[123,94605,94606],{"class":192},"#按照元素大小来索引排序\n",[14,94608,93302],{},[114,94610,94612],{"className":30389,"code":94611,"language":30391,"meta":37,"style":37},"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",[120,94613,94614,94626,94652,94657,94661,94666,94671,94676,94681,94685,94693,94697,94702,94707,94712,94717,94721,94726,94739,94743,94748,94753,94758,94763,94767,94772,94784,94788,94792,94796,94800,94804,94808,94813,94828,94833,94842,94847,94851,94855,94860,94864,94869],{"__ignoreMap":37},[123,94615,94616,94619,94621,94623],{"class":125,"line":126},[123,94617,94618],{"class":133},"np.random.seed(",[123,94620,325],{"class":182},[123,94622,563],{"class":133},[123,94624,94625],{"class":192},"#保证每次值一样\n",[123,94627,94628,94630,94632,94634,94636,94638,94640,94642,94644,94646,94648,94650],{"class":125,"line":45},[123,94629,93317],{"class":133},[123,94631,179],{"class":129},[123,94633,93125],{"class":133},[123,94635,445],{"class":182},[123,94637,512],{"class":133},[123,94639,31507],{"class":5226},[123,94641,179],{"class":129},[123,94643,134],{"class":133},[123,94645,427],{"class":182},[123,94647,512],{"class":133},[123,94649,478],{"class":182},[123,94651,30508],{"class":133},[123,94653,94654],{"class":125,"line":1189},[123,94655,94656],{"class":192},"#原数组：\n",[123,94658,94659],{"class":125,"line":1204},[123,94660,93939],{"class":238},[123,94662,94663],{"class":125,"line":1210},[123,94664,94665],{"class":238},"array([[44, 47, 64, 67, 67,  9],\n",[123,94667,94668],{"class":125,"line":1224},[123,94669,94670],{"class":238},"       [83, 21, 36, 87, 70, 88],\n",[123,94672,94673],{"class":125,"line":1230},[123,94674,94675],{"class":238},"       [88, 12, 58, 65, 39, 87],\n",[123,94677,94678],{"class":125,"line":1321},[123,94679,94680],{"class":238},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[123,94682,94683],{"class":125,"line":1327},[123,94684,93939],{"class":238},[123,94686,94687,94690],{"class":125,"line":1339},[123,94688,94689],{"class":133},"np.sort(aa)",[123,94691,94692],{"class":192},"#每行进行了排序\n",[123,94694,94695],{"class":125,"line":1621},[123,94696,93939],{"class":238},[123,94698,94699],{"class":125,"line":1626},[123,94700,94701],{"class":238},"array([[ 9, 44, 47, 64, 67, 67],\n",[123,94703,94704],{"class":125,"line":1632},[123,94705,94706],{"class":238},"       [21, 36, 70, 83, 87, 88],\n",[123,94708,94709],{"class":125,"line":1637},[123,94710,94711],{"class":238},"       [12, 39, 58, 65, 87, 88],\n",[123,94713,94714],{"class":125,"line":1651},[123,94715,94716],{"class":238},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[123,94718,94719],{"class":125,"line":1656},[123,94720,93939],{"class":238},[123,94722,94723],{"class":125,"line":1662},[123,94724,94725],{"class":192},"#axis=0时\n",[123,94727,94728,94731,94733,94735,94737],{"class":125,"line":1683},[123,94729,94730],{"class":133},"np.sort(aa,",[123,94732,47525],{"class":5226},[123,94734,179],{"class":129},[123,94736,325],{"class":182},[123,94738,140],{"class":133},[123,94740,94741],{"class":125,"line":1688},[123,94742,93939],{"class":238},[123,94744,94745],{"class":125,"line":1702},[123,94746,94747],{"class":238},"array([[44, 12, 36, 37, 25,  9],\n",[123,94749,94750],{"class":125,"line":1707},[123,94751,94752],{"class":238},"       [46, 21, 58, 65, 39, 77],\n",[123,94754,94755],{"class":125,"line":1736},[123,94756,94757],{"class":238},"       [83, 47, 64, 67, 67, 87],\n",[123,94759,94760],{"class":125,"line":1741},[123,94761,94762],{"class":238},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[123,94764,94765],{"class":125,"line":1758},[123,94766,93939],{"class":238},[123,94768,94769],{"class":125,"line":1763},[123,94770,94771],{"class":192},"#axis=1时,为默认值\n",[123,94773,94774,94776,94778,94780,94782],{"class":125,"line":1768},[123,94775,94730],{"class":133},[123,94777,47525],{"class":5226},[123,94779,179],{"class":129},[123,94781,351],{"class":182},[123,94783,140],{"class":133},[123,94785,94786],{"class":125,"line":1773},[123,94787,93939],{"class":238},[123,94789,94790],{"class":125,"line":1787},[123,94791,94701],{"class":238},[123,94793,94794],{"class":125,"line":1792},[123,94795,94706],{"class":238},[123,94797,94798],{"class":125,"line":2586},[123,94799,94711],{"class":238},[123,94801,94802],{"class":125,"line":2600},[123,94803,94716],{"class":238},[123,94805,94806],{"class":125,"line":2608},[123,94807,93939],{"class":238},[123,94809,94810],{"class":125,"line":2613},[123,94811,94812],{"class":192},"#按最后一列排序\n",[123,94814,94815,94817,94819,94822,94824,94826],{"class":125,"line":2619},[123,94816,397],{"class":133},[123,94818,179],{"class":129},[123,94820,94821],{"class":133},"aa[:,",[123,94823,666],{"class":129},[123,94825,351],{"class":182},[123,94827,33257],{"class":133},[123,94829,94830],{"class":125,"line":2625},[123,94831,94832],{"class":192},"#获取最后一列排好序的索引\n",[123,94834,94835,94837,94839],{"class":125,"line":2630},[123,94836,74069],{"class":133},[123,94838,179],{"class":129},[123,94840,94841],{"class":133},"np.argsort(b)\n",[123,94843,94844],{"class":125,"line":7958},[123,94845,94846],{"class":133},"aa[index]\n",[123,94848,94849],{"class":125,"line":7982},[123,94850,93939],{"class":238},[123,94852,94853],{"class":125,"line":7987},[123,94854,94665],{"class":238},[123,94856,94857],{"class":125,"line":7993},[123,94858,94859],{"class":238},"       [46, 88, 81, 37, 25, 77],\n",[123,94861,94862],{"class":125,"line":8020},[123,94863,94675],{"class":238},[123,94865,94866],{"class":125,"line":8025},[123,94867,94868],{"class":238},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[123,94870,94871],{"class":125,"line":8031},[123,94872,93939],{"class":238},[5136,94874,94875],{},"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":37,"searchDepth":45,"depth":45,"links":94877},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94524,"description":47},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94884,"title":94885,"body":94886,"description":47,"extension":48,"meta":94916,"navigation":50,"path":94917,"seo":94918,"stem":94919,"__hash__":94920},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94887,"toc":94914},[94888,94891,94894,94897,94900,94903,94906,94909],[10,94889,94885],{"id":94890},"_14广播机制",[14,94892,94893],{},"广播的规则：",[14,94895,94896],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,94898,94899],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,94901,94902],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,94904,94905],{},"3.如果没有维度形状为1，则会引发异常",[14,94907,94908],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,94910,94911],{},[35,94912],{"alt":37,"src":94913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":37,"searchDepth":45,"depth":45,"links":94915},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94885,"description":47},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94922,"title":94923,"body":94924,"description":47,"extension":48,"meta":95022,"navigation":50,"path":95023,"seo":95024,"stem":95025,"__hash__":95026},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94925,"toc":95020},[94926,94929,94932,95017],[10,94927,94923],{"id":94928},"_15比较掩码",[14,94930,94931],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[114,94933,94935],{"className":30389,"code":94934,"language":30391,"meta":37,"style":37},"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",[120,94936,94937,94983,94994,95008,95012],{"__ignoreMap":37},[123,94938,94939,94941,94943,94946,94948,94950,94952,94954,94956,94958,94960,94962,94964,94966,94968,94970,94972,94974,94976,94978,94980],{"class":125,"line":126},[123,94940,372],{"class":133},[123,94942,179],{"class":129},[123,94944,94945],{"class":133},"np.array([[",[123,94947,351],{"class":182},[123,94949,512],{"class":133},[123,94951,211],{"class":182},[123,94953,512],{"class":133},[123,94955,205],{"class":182},[123,94957,48041],{"class":133},[123,94959,606],{"class":182},[123,94961,512],{"class":133},[123,94963,632],{"class":182},[123,94965,512],{"class":133},[123,94967,657],{"class":182},[123,94969,48041],{"class":133},[123,94971,859],{"class":182},[123,94973,512],{"class":133},[123,94975,884],{"class":182},[123,94977,512],{"class":133},[123,94979,909],{"class":182},[123,94981,94982],{"class":133},"]])\n",[123,94984,94985,94987,94989,94991],{"class":125,"line":45},[123,94986,372],{"class":133},[123,94988,1044],{"class":129},[123,94990,834],{"class":182},[123,94992,94993],{"class":192},"#结果是一个由True,False组成的数组\n",[123,94995,94996,94999,95001,95003,95005],{"class":125,"line":1189},[123,94997,94998],{"class":133},"a[a",[123,95000,1044],{"class":129},[123,95002,834],{"class":182},[123,95004,1074],{"class":133},[123,95006,95007],{"class":192},"#小于20的元素会存到这个数组中\n",[123,95009,95010],{"class":125,"line":1204},[123,95011,93575],{"class":192},[123,95013,95014],{"class":125,"line":1210},[123,95015,95016],{"class":192},"#array([ 1,  2,  3, 11, 12, 13])\n",[5136,95018,95019],{},"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":37,"searchDepth":45,"depth":45,"links":95021},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94923,"description":47},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95028,"title":95029,"body":95030,"description":47,"extension":48,"meta":95122,"navigation":50,"path":95123,"seo":95124,"stem":95125,"__hash__":95126},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95031,"toc":95120},[95032,95035,95038,95041,95044,95047,95112,95117],[10,95033,95029],{"id":95034},"_16魔法命令time",[14,95036,95037],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95039,95040],{},"%:行模式",[14,95042,95043],{},"%%:单元格模式",[14,95045,95046],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[114,95048,95050],{"className":30389,"code":95049,"language":30391,"meta":37,"style":37},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[120,95051,95052,95057,95064,95069,95078,95091,95095,95103],{"__ignoreMap":37},[123,95053,95054],{"class":125,"line":126},[123,95055,95056],{"class":192},"#程序执行时间\n",[123,95058,95059,95061],{"class":125,"line":45},[123,95060,30403],{"class":129},[123,95062,95063],{"class":133}," time \n",[123,95065,95066],{"class":125,"line":1189},[123,95067,95068],{"class":192},"#获取时间\n",[123,95070,95071,95074,95076],{"class":125,"line":1204},[123,95072,95073],{"class":133},"start",[123,95075,179],{"class":129},[123,95077,32429],{"class":133},[123,95079,95080,95083,95086,95088],{"class":125,"line":1210},[123,95081,95082],{"class":133},"time.sleep(",[123,95084,95085],{"class":182},"0.4",[123,95087,563],{"class":133},[123,95089,95090],{"class":192},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[123,95092,95093],{"class":125,"line":1224},[123,95094,95068],{"class":192},[123,95096,95097,95099,95101],{"class":125,"line":1230},[123,95098,45812],{"class":133},[123,95100,179],{"class":129},[123,95102,32429],{"class":133},[123,95104,95105,95107,95109],{"class":125,"line":1321},[123,95106,45812],{"class":133},[123,95108,666],{"class":129},[123,95110,95111],{"class":133},"start\n",[14,95113,95114],{},[35,95115],{"alt":37,"src":95116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5136,95118,95119],{},"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":37,"searchDepth":45,"depth":45,"links":95121},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95029,"description":47},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":4,"title":5,"body":95128,"description":47,"extension":48,"meta":95154,"navigation":50,"path":51,"seo":95155,"stem":53,"__hash__":54},{"type":7,"value":95129,"toc":95152},[95130,95132,95134,95136,95138,95140,95142,95144,95148],[10,95131,5],{"id":12},[14,95133,16],{},[14,95135,19],{},[14,95137,22],{},[14,95139,25],{},[14,95141,28],{},[14,95143,31],{},[14,95145,95146],{},[35,95147],{"alt":37,"src":38},[14,95149,95150],{},[35,95151],{"alt":37,"src":43},{"title":37,"searchDepth":45,"depth":45,"links":95153},[],{},{"title":5,"description":47},{"id":95157,"title":95158,"body":95159,"description":47,"extension":48,"meta":95177,"navigation":50,"path":95178,"seo":95179,"stem":95180,"__hash__":95181},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":95160,"toc":95175},[95161,95164,95167,95170],[10,95162,95158],{"id":95163},"_18魔法命令writefile和run",[14,95165,95166],{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,95168,95169],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,95171,95172],{},[35,95173],{"alt":37,"src":95174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":37,"searchDepth":45,"depth":45,"links":95176},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":95158,"description":47},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",{"id":95183,"title":95184,"body":95185,"description":47,"extension":48,"meta":95238,"navigation":50,"path":95239,"seo":95240,"stem":95241,"__hash__":95242},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95186,"toc":95236},[95187,95190,95193,95195,95198,95201,95206,95209,95212,95215,95218,95221,95224,95227,95230,95233],[10,95188,95184],{"id":95189},"_19魔法命令memit",[14,95191,95192],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95194,24610],{},[14,95196,95197],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95199,95200],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95202,95203],{},[35,95204],{"alt":37,"src":95205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95207,95208],{},"补充：",[14,95210,95211],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95213,95214],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95216,95217],{},"解决方法：",[14,95219,95220],{},"1.cmd",[14,95222,95223],{},"2.依次输入以下代码：",[14,95225,95226],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95228,95229],{},"pip install --upgrade ipython",[14,95231,95232],{},"#升级 memory_profiler 和 setuptools",[14,95234,95235],{},"pip install --upgrade memory_profiler setuptools",{"title":37,"searchDepth":45,"depth":45,"links":95237},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95184,"description":47},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95244,"title":95245,"body":95246,"description":47,"extension":48,"meta":96892,"navigation":50,"path":96893,"seo":96894,"stem":96895,"__hash__":96896},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95247,"toc":96862},[95248,95251,95255,95259,95320,95323,95328,95332,95337,95342,95347,95352,95355,95360,95364,95368,95401,95404,95407,95410,95462,95465,95501,95504,95546,95550,95571,95573,95610,95612,95617,95619,95624,95628,95631,95659,95663,95667,95720,95724,95816,95820,95824,95827,95832,95836,95861,95866,95870,95873,95876,95879,95882,95885,95888,95891,95903,95907,95911,95914,95946,95949,95972,95975,96001,96004,96030,96033,96067,96070,96132,96136,96139,96143,96146,96172,96175,96178,96183,96186,96255,96257,96262,96323,96326,96337,96343,96348,96352,96355,96368,96372,96387,96389,96412,96414,96440,96443,96446,96449,96497,96499,96504,96508,96512,96539,96543,96570,96573,96578,96583,96673,96677,96735,96740,96743,96746,96788,96792,96848,96853,96856,96859],[10,95249,95245],{"id":95250},"_2创建数组",[65,95252,95254],{"id":95253},"_21-array函数创建数组","2.1 array()函数创建数组",[94,95256,95258],{"id":95257},"_221-函数语句","2.2.1 函数语句",[114,95260,95262],{"className":30389,"code":95261,"language":30391,"meta":37,"style":37},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[120,95263,95264],{"__ignoreMap":37},[123,95265,95266,95269,95272,95274,95276,95278,95280,95282,95285,95287,95290,95292,95295,95297,95299,95301,95304,95306,95309,95311,95314,95316,95318],{"class":125,"line":126},[123,95267,95268],{"class":133},"numpy.array(",[123,95270,95271],{"class":182},"object",[123,95273,12445],{"class":133},[123,95275,93511],{"class":5226},[123,95277,13574],{"class":129},[123,95279,38944],{"class":182},[123,95281,12445],{"class":133},[123,95283,95284],{"class":5226},"copy",[123,95286,13574],{"class":129},[123,95288,95289],{"class":182}," True",[123,95291,12445],{"class":133},[123,95293,95294],{"class":5226},"order",[123,95296,13574],{"class":129},[123,95298,38944],{"class":182},[123,95300,12445],{"class":133},[123,95302,95303],{"class":5226},"subok",[123,95305,13574],{"class":129},[123,95307,95308],{"class":182}," False",[123,95310,12445],{"class":133},[123,95312,95313],{"class":5226},"ndmin",[123,95315,13574],{"class":129},[123,95317,4102],{"class":182},[123,95319,140],{"class":133},[14,95321,95322],{},"参数：",[14,95324,95325],{},[35,95326],{"alt":37,"src":95327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[94,95329,95331],{"id":95330},"_222-实例","2.2.2 实例",[14,95333,95334],{},[35,95335],{"alt":37,"src":95336},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95338,95339],{},[35,95340],{"alt":37,"src":95341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95343,95344],{},[35,95345],{"alt":37,"src":95346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95348,95349],{},[35,95350],{"alt":37,"src":95351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95353,95354],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95356,95357],{},[35,95358],{"alt":37,"src":95359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[65,95361,95363],{"id":95362},"_22-随机数创建数组","2.2 随机数创建数组",[94,95365,95367],{"id":95366},"_221-random语句","2.2.1 random语句",[114,95369,95371],{"className":30389,"code":95370,"language":30391,"meta":37,"style":37},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[120,95372,95373,95378,95383,95391,95396],{"__ignoreMap":37},[123,95374,95375],{"class":125,"line":126},[123,95376,95377],{"class":192},"#random.random()\n",[123,95379,95380],{"class":125,"line":45},[123,95381,95382],{"class":192},"#确定随机种子,就是每次运行结果是相同的\n",[123,95384,95385,95387,95389],{"class":125,"line":1189},[123,95386,94618],{"class":133},[123,95388,325],{"class":182},[123,95390,140],{"class":133},[123,95392,95393],{"class":125,"line":1204},[123,95394,95395],{"class":133},"np.random.random()\n",[123,95397,95398],{"class":125,"line":1210},[123,95399,95400],{"class":192},"#生成一个随机的数目\n",[14,95402,95403],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95405,95406],{},"可以指定数组形状 size",[14,95408,95409],{},"①生成一维数组",[114,95411,95413],{"className":30389,"code":95412,"language":30391,"meta":37,"style":37},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[120,95414,95415,95420,95433,95438,95454],{"__ignoreMap":37},[123,95416,95417],{"class":125,"line":126},[123,95418,95419],{"class":192},"#random.random(size())\n",[123,95421,95422,95425,95427,95429,95431],{"class":125,"line":45},[123,95423,95424],{"class":133},"np.random.random(",[123,95426,31507],{"class":5226},[123,95428,179],{"class":129},[123,95430,453],{"class":182},[123,95432,140],{"class":133},[123,95434,95435],{"class":125,"line":1189},[123,95436,95437],{"class":192},"#生成一位的五个元素\n",[123,95439,95440,95442,95444,95446,95448,95450,95452],{"class":125,"line":1204},[123,95441,372],{"class":133},[123,95443,179],{"class":129},[123,95445,95424],{"class":133},[123,95447,31507],{"class":5226},[123,95449,179],{"class":129},[123,95451,427],{"class":182},[123,95453,140],{"class":133},[123,95455,95456,95459],{"class":125,"line":1210},[123,95457,95458],{"class":133},"a.shape ",[123,95460,95461],{"class":192},"#输出数组形状\n",[14,95463,95464],{},"②生成二维数组",[114,95466,95468],{"className":30389,"code":95467,"language":30391,"meta":37,"style":37},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[120,95469,95470,95474,95496],{"__ignoreMap":37},[123,95471,95472],{"class":125,"line":126},[123,95473,93312],{"class":192},[123,95475,95476,95478,95480,95482,95484,95486,95488,95490,95492,95494],{"class":125,"line":45},[123,95477,93317],{"class":133},[123,95479,179],{"class":129},[123,95481,95424],{"class":133},[123,95483,31507],{"class":5226},[123,95485,179],{"class":129},[123,95487,134],{"class":133},[123,95489,427],{"class":182},[123,95491,512],{"class":133},[123,95493,453],{"class":182},[123,95495,30508],{"class":133},[123,95497,95498],{"class":125,"line":1189},[123,95499,95500],{"class":192},"#生成四行五列的数组\n",[14,95502,95503],{},"③生成三维数组",[114,95505,95507],{"className":30389,"code":95506,"language":30391,"meta":37,"style":37},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[120,95508,95509,95514,95541],{"__ignoreMap":37},[123,95510,95511],{"class":125,"line":126},[123,95512,95513],{"class":192},"#三维数组\n",[123,95515,95516,95519,95521,95523,95525,95527,95529,95531,95533,95535,95537,95539],{"class":125,"line":45},[123,95517,95518],{"class":133},"aaa",[123,95520,179],{"class":129},[123,95522,95424],{"class":133},[123,95524,31507],{"class":5226},[123,95526,179],{"class":129},[123,95528,134],{"class":133},[123,95530,211],{"class":182},[123,95532,512],{"class":133},[123,95534,205],{"class":182},[123,95536,512],{"class":133},[123,95538,427],{"class":182},[123,95540,30508],{"class":133},[123,95542,95543],{"class":125,"line":1189},[123,95544,95545],{"class":133},"aaa.shape\n",[94,95547,95549],{"id":95548},"_222-randint语句","2.2.2 randint语句",[114,95551,95553],{"className":30389,"code":95552,"language":30391,"meta":37,"style":37},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[120,95554,95555,95560],{"__ignoreMap":37},[123,95556,95557],{"class":125,"line":126},[123,95558,95559],{"class":192},"#生成随机的整数 random.randint(low,high,size)\n",[123,95561,95562,95564,95566,95568],{"class":125,"line":45},[123,95563,93125],{"class":133},[123,95565,453],{"class":182},[123,95567,13724],{"class":133},[123,95569,95570],{"class":192},"#0~5中的随机一个数\n",[14,95572,95409],{},[114,95574,95576],{"className":30389,"code":95575,"language":30391,"meta":37,"style":37},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[120,95577,95578,95583,95605],{"__ignoreMap":37},[123,95579,95580],{"class":125,"line":126},[123,95581,95582],{"class":192},"#一维\n",[123,95584,95585,95587,95589,95591,95593,95595,95597,95599,95601,95603],{"class":125,"line":45},[123,95586,93125],{"class":133},[123,95588,351],{"class":182},[123,95590,512],{"class":133},[123,95592,606],{"class":182},[123,95594,512],{"class":133},[123,95596,31507],{"class":5226},[123,95598,179],{"class":129},[123,95600,134],{"class":133},[123,95602,580],{"class":182},[123,95604,30508],{"class":133},[123,95606,95607],{"class":125,"line":1189},[123,95608,95609],{"class":192},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,95611,95464],{},[14,95613,95614],{},[35,95615],{"alt":37,"src":95616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,95618,95503],{},[14,95620,95621],{},[35,95622],{"alt":37,"src":95623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[94,95625,95627],{"id":95626},"_222-rand语句","2.2.2 rand语句",[14,95629,95630],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[114,95632,95634],{"className":30389,"code":95633,"language":30391,"meta":37,"style":37},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[120,95635,95636,95649,95654],{"__ignoreMap":37},[123,95637,95638,95641,95643,95645,95647],{"class":125,"line":126},[123,95639,95640],{"class":133},"np.random.rand(",[123,95642,445],{"class":182},[123,95644,512],{"class":133},[123,95646,580],{"class":182},[123,95648,140],{"class":133},[123,95650,95651],{"class":125,"line":45},[123,95652,95653],{"class":192},"#第一个参数100：行数，表示有100个样本\n",[123,95655,95656],{"class":125,"line":1189},[123,95657,95658],{"class":192},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[65,95660,95662],{"id":95661},"_23-arange创建数组","2.3 arange()创建数组",[94,95664,95666],{"id":95665},"_231-函数语句","2.3.1 函数语句",[114,95668,95670],{"className":30389,"code":95669,"language":30391,"meta":37,"style":37},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[120,95671,95672,95686,95691,95696,95701,95706,95711,95716],{"__ignoreMap":37},[123,95673,95674,95677,95679,95681,95684],{"class":125,"line":126},[123,95675,95676],{"class":133},"numpy.arange([start,] stop[, step], ",[123,95678,93511],{"class":5226},[123,95680,179],{"class":129},[123,95682,95683],{"class":182},"None",[123,95685,140],{"class":133},[123,95687,95688],{"class":125,"line":45},[123,95689,95690],{"class":192},"#参数\n",[123,95692,95693],{"class":125,"line":1189},[123,95694,95695],{"class":238},"\"\"\"\n",[123,95697,95698],{"class":125,"line":1204},[123,95699,95700],{"class":238},"start:起始值，可选，默认从 0 开始。\n",[123,95702,95703],{"class":125,"line":1210},[123,95704,95705],{"class":238},"stop:结束值（不包含该值）。\n",[123,95707,95708],{"class":125,"line":1224},[123,95709,95710],{"class":238},"step:步长，可选，默认是 1。可以为浮点数。\n",[123,95712,95713],{"class":125,"line":1230},[123,95714,95715],{"class":238},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[123,95717,95718],{"class":125,"line":1321},[123,95719,95695],{"class":238},[94,95721,95723],{"id":95722},"_232-实例","2.3.2 实例",[114,95725,95727],{"className":30389,"code":95726,"language":30391,"meta":37,"style":37},"#创建一维数组\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",[120,95728,95729,95733,95757,95762,95767,95771,95794,95798,95802,95807,95812],{"__ignoreMap":37},[123,95730,95731],{"class":125,"line":126},[123,95732,93116],{"class":192},[123,95734,95735,95737,95739,95741,95743,95745,95747,95749,95751,95753,95755],{"class":125,"line":45},[123,95736,93013],{"class":133},[123,95738,351],{"class":182},[123,95740,512],{"class":133},[123,95742,859],{"class":182},[123,95744,512],{"class":133},[123,95746,351],{"class":182},[123,95748,512],{"class":133},[123,95750,93511],{"class":5226},[123,95752,179],{"class":129},[123,95754,137],{"class":182},[123,95756,140],{"class":133},[123,95758,95759],{"class":125,"line":1189},[123,95760,95761],{"class":192},"#输出结果：\n",[123,95763,95764],{"class":125,"line":1204},[123,95765,95766],{"class":192},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[123,95768,95769],{"class":125,"line":1210},[123,95770,93958],{"class":192},[123,95772,95773,95776,95778,95780,95782,95785,95787,95789,95791],{"class":125,"line":1224},[123,95774,95775],{"class":133},"np.array([np.arange(",[123,95777,351],{"class":182},[123,95779,512],{"class":133},[123,95781,427],{"class":182},[123,95783,95784],{"class":133},"),np.arange(",[123,95786,427],{"class":182},[123,95788,512],{"class":133},[123,95790,503],{"class":182},[123,95792,95793],{"class":133},")])\n",[123,95795,95796],{"class":125,"line":1230},[123,95797,93575],{"class":192},[123,95799,95800],{"class":125,"line":1321},[123,95801,95695],{"class":238},[123,95803,95804],{"class":125,"line":1327},[123,95805,95806],{"class":238},"array([[1, 2, 3],\n",[123,95808,95809],{"class":125,"line":1339},[123,95810,95811],{"class":238},"       [4, 5, 6]])\n",[123,95813,95814],{"class":125,"line":1621},[123,95815,95695],{"class":238},[65,95817,95819],{"id":95818},"_24-生态分布","2.4 生态分布",[94,95821,95823],{"id":95822},"_241-标准正态分布","2.4.1 标准正态分布",[14,95825,95826],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,95828,95829],{},[35,95830],{"alt":37,"src":95831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[94,95833,95835],{"id":95834},"_242-常规正态分布","2.4.2 常规正态分布",[114,95837,95839],{"className":30389,"code":95838,"language":30391,"meta":37,"style":37},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[120,95840,95841,95846,95851,95856],{"__ignoreMap":37},[123,95842,95843],{"class":125,"line":126},[123,95844,95845],{"class":133},"random.normal(loc,scale,size)也可以生成正态分布\n",[123,95847,95848],{"class":125,"line":45},[123,95849,95850],{"class":192},"#loc:期望\n",[123,95852,95853],{"class":125,"line":1189},[123,95854,95855],{"class":192},"#scale:方差\n",[123,95857,95858],{"class":125,"line":1204},[123,95859,95860],{"class":192},"#size:用于确定是几维的数列\n",[14,95862,95863],{},[35,95864],{"alt":37,"src":95865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[65,95867,95869],{"id":95868},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,95871,95872],{},"ndim:秩，维度个数",[14,95874,95875],{},"size:数组元素的个数",[14,95877,95878],{},"shape:数组的形状",[14,95880,95881],{},"dtype:数组元素的类型",[14,95883,95884],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,95886,95887],{},"他们都是属性，通过数组.属性的形式来确定",[14,95889,95890],{},"如果需要输出多个可以通过以下方式：",[114,95892,95894],{"className":30389,"code":95893,"language":30391,"meta":37,"style":37},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[120,95895,95896],{"__ignoreMap":37},[123,95897,95898,95900],{"class":125,"line":126},[123,95899,30426],{"class":182},[123,95901,95902],{"class":133},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[65,95904,95906],{"id":95905},"_26-其他方式创建数组","2.6 其他方式创建数组",[94,95908,95910],{"id":95909},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,95912,95913],{},"①创建一维数组",[114,95915,95917],{"className":30389,"code":95916,"language":30391,"meta":37,"style":37},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[120,95918,95919,95928,95932,95937,95942],{"__ignoreMap":37},[123,95920,95921,95924,95926],{"class":125,"line":126},[123,95922,95923],{"class":133},"np.zeros(",[123,95925,580],{"class":182},[123,95927,140],{"class":133},[123,95929,95930],{"class":125,"line":45},[123,95931,95695],{"class":238},[123,95933,95934],{"class":125,"line":1189},[123,95935,95936],{"class":238},"输出结果：\n",[123,95938,95939],{"class":125,"line":1204},[123,95940,95941],{"class":238},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[123,95943,95944],{"class":125,"line":1210},[123,95945,95695],{"class":238},[14,95947,95948],{},"上方代码等价于：",[114,95950,95952],{"className":30389,"code":95951,"language":30391,"meta":37,"style":37},"np.zeros(shape=(10))#创建10个元素的0数组\n",[120,95953,95954],{"__ignoreMap":37},[123,95955,95956,95958,95961,95963,95965,95967,95969],{"class":125,"line":126},[123,95957,95923],{"class":133},[123,95959,95960],{"class":5226},"shape",[123,95962,179],{"class":129},[123,95964,134],{"class":133},[123,95966,580],{"class":182},[123,95968,82782],{"class":133},[123,95970,95971],{"class":192},"#创建10个元素的0数组\n",[14,95973,95974],{},"也可以指定类型",[114,95976,95978],{"className":30389,"code":95977,"language":30391,"meta":37,"style":37},"#指定类型\nnp.zeros(5,dtype=int)\n",[120,95979,95980,95985],{"__ignoreMap":37},[123,95981,95982],{"class":125,"line":126},[123,95983,95984],{"class":192},"#指定类型\n",[123,95986,95987,95989,95991,95993,95995,95997,95999],{"class":125,"line":45},[123,95988,95923],{"class":133},[123,95990,453],{"class":182},[123,95992,512],{"class":133},[123,95994,93511],{"class":5226},[123,95996,179],{"class":129},[123,95998,137],{"class":182},[123,96000,140],{"class":133},[14,96002,96003],{},"②创建二维数组",[114,96005,96007],{"className":30389,"code":96006,"language":30391,"meta":37,"style":37},"np.zeros((3,4),dtype=int)\n",[120,96008,96009],{"__ignoreMap":37},[123,96010,96011,96014,96016,96018,96020,96022,96024,96026,96028],{"class":125,"line":126},[123,96012,96013],{"class":133},"np.zeros((",[123,96015,205],{"class":182},[123,96017,512],{"class":133},[123,96019,427],{"class":182},[123,96021,42267],{"class":133},[123,96023,93511],{"class":5226},[123,96025,179],{"class":129},[123,96027,137],{"class":182},[123,96029,140],{"class":133},[14,96031,96032],{},"③创建三维数组",[114,96034,96036],{"className":30389,"code":96035,"language":30391,"meta":37,"style":37},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[120,96037,96038,96043],{"__ignoreMap":37},[123,96039,96040],{"class":125,"line":126},[123,96041,96042],{"class":192},"#创建三维数组\n",[123,96044,96045,96047,96049,96051,96053,96055,96057,96059,96061,96063,96065],{"class":125,"line":45},[123,96046,96013],{"class":133},[123,96048,205],{"class":182},[123,96050,512],{"class":133},[123,96052,427],{"class":182},[123,96054,512],{"class":133},[123,96056,453],{"class":182},[123,96058,42267],{"class":133},[123,96060,93511],{"class":5226},[123,96062,179],{"class":129},[123,96064,137],{"class":182},[123,96066,140],{"class":133},[14,96068,96069],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[114,96071,96073],{"className":30389,"code":96072,"language":30391,"meta":37,"style":37},"#使用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",[120,96074,96075,96080,96095,96100,96105,96127],{"__ignoreMap":37},[123,96076,96077],{"class":125,"line":126},[123,96078,96079],{"class":192},"#使用zeros_like将创建的一维数组变成全0的数组\n",[123,96081,96082,96084,96086,96088,96090,96092],{"class":125,"line":45},[123,96083,372],{"class":133},[123,96085,179],{"class":129},[123,96087,93013],{"class":133},[123,96089,427],{"class":182},[123,96091,563],{"class":133},[123,96093,96094],{"class":192},"#这个得到的结果：一维数组0，1，2，3\n",[123,96096,96097],{"class":125,"line":1189},[123,96098,96099],{"class":133},"np.zeros_like(a)\n",[123,96101,96102],{"class":125,"line":1204},[123,96103,96104],{"class":192},"#使用zeros_like将创建的二维数组变成全0的数组\n",[123,96106,96107,96109,96111,96113,96115,96117,96119,96121,96123,96125],{"class":125,"line":1210},[123,96108,93317],{"class":133},[123,96110,179],{"class":129},[123,96112,95424],{"class":133},[123,96114,31507],{"class":5226},[123,96116,179],{"class":129},[123,96118,134],{"class":133},[123,96120,427],{"class":182},[123,96122,512],{"class":133},[123,96124,453],{"class":182},[123,96126,30508],{"class":133},[123,96128,96129],{"class":125,"line":1224},[123,96130,96131],{"class":133},"np.zeros_like(aa)\n",[94,96133,96135],{"id":96134},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96137,96138],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[94,96140,96142],{"id":96141},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96144,96145],{},"①empty()用法",[114,96147,96149],{"className":30389,"code":96148,"language":30391,"meta":37,"style":37},"numpy.empty(shape,dtype=float,order='c')\n",[120,96150,96151],{"__ignoreMap":37},[123,96152,96153,96156,96158,96160,96162,96164,96166,96168,96170],{"class":125,"line":126},[123,96154,96155],{"class":133},"numpy.empty(shape,",[123,96157,93511],{"class":5226},[123,96159,179],{"class":129},[123,96161,173],{"class":182},[123,96163,512],{"class":133},[123,96165,95294],{"class":5226},[123,96167,179],{"class":129},[123,96169,76039],{"class":238},[123,96171,140],{"class":133},[14,96173,96174],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96176,96177],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96179,96180],{},[35,96181],{"alt":37,"src":96182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96184,96185],{},"②empty()用法",[114,96187,96189],{"className":30389,"code":96188,"language":30391,"meta":37,"style":37},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[120,96190,96191,96212,96224,96245,96250],{"__ignoreMap":37},[123,96192,96193,96195,96197,96200,96202,96204,96206,96208,96210],{"class":125,"line":126},[123,96194,979],{"class":133},[123,96196,179],{"class":129},[123,96198,96199],{"class":133},"np.empty(",[123,96201,580],{"class":182},[123,96203,512],{"class":133},[123,96205,93511],{"class":5226},[123,96207,179],{"class":129},[123,96209,137],{"class":182},[123,96211,140],{"class":133},[123,96213,96214,96216,96218,96220,96222],{"class":125,"line":45},[123,96215,954],{"class":133},[123,96217,179],{"class":129},[123,96219,93013],{"class":133},[123,96221,453],{"class":182},[123,96223,140],{"class":133},[123,96225,96226,96229,96231,96234,96236,96238,96241,96243],{"class":125,"line":1189},[123,96227,96228],{"class":133},"np.add(",[123,96230,211],{"class":182},[123,96232,96233],{"class":133},",x,",[123,96235,93065],{"class":5226},[123,96237,179],{"class":129},[123,96239,96240],{"class":133},"y[:",[123,96242,453],{"class":182},[123,96244,4666],{"class":133},[123,96246,96247],{"class":125,"line":1204},[123,96248,96249],{"class":192},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[123,96251,96252],{"class":125,"line":1210},[123,96253,96254],{"class":133},"y\n",[14,96256,11524],{},[14,96258,96259],{},[35,96260],{"alt":37,"src":96261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[114,96263,96265],{"className":30389,"code":96264,"language":30391,"meta":37,"style":37},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[120,96266,96267,96283,96303,96318],{"__ignoreMap":37},[123,96268,96269,96271,96273,96275,96277,96279,96281],{"class":125,"line":126},[123,96270,954],{"class":133},[123,96272,179],{"class":129},[123,96274,93013],{"class":133},[123,96276,351],{"class":182},[123,96278,512],{"class":133},[123,96280,478],{"class":182},[123,96282,140],{"class":133},[123,96284,96285,96287,96289,96291,96293,96295,96297,96299,96301],{"class":125,"line":45},[123,96286,979],{"class":133},[123,96288,179],{"class":129},[123,96290,96199],{"class":133},[123,96292,453],{"class":182},[123,96294,512],{"class":133},[123,96296,93511],{"class":5226},[123,96298,179],{"class":129},[123,96300,137],{"class":182},[123,96302,140],{"class":133},[123,96304,96305,96308,96310,96312,96314,96316],{"class":125,"line":1189},[123,96306,96307],{"class":133},"np.add(x,",[123,96309,211],{"class":182},[123,96311,512],{"class":133},[123,96313,93065],{"class":5226},[123,96315,179],{"class":129},[123,96317,93460],{"class":133},[123,96319,96320],{"class":125,"line":1204},[123,96321,96322],{"class":192},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96324,96325],{},"③empty_like()",[14,96327,96328],{},[283,96329,96330,96331,96336],{},"创建一个",[283,96332,96333],{},[283,96334,96335],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96338,96339,96342],{},[120,96340,96341],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96344,96345],{},[35,96346],{"alt":37,"src":96347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[94,96349,96351],{"id":96350},"_264-用法","2.6.4 ？？用法",[14,96353,96354],{},"当想查看一个函数的参数时，可以通过？？来实现",[114,96356,96358],{"className":30389,"code":96357,"language":30391,"meta":37,"style":37},"np.full??\n",[120,96359,96360],{"__ignoreMap":37},[123,96361,96362,96365],{"class":125,"line":126},[123,96363,96364],{"class":133},"np.full",[123,96366,96367],{"class":77414},"??\n",[94,96369,96371],{"id":96370},"_265-full创建数组","2.6.5 full()创建数组",[114,96373,96375],{"className":30389,"code":96374,"language":30391,"meta":37,"style":37},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[120,96376,96377,96382],{"__ignoreMap":37},[123,96378,96379],{"class":125,"line":126},[123,96380,96381],{"class":133},"full(shape,fill_value)\n",[123,96383,96384],{"class":125,"line":45},[123,96385,96386],{"class":133},"创建全为某个指定值的数组\n",[14,96388,94541],{},[114,96390,96392],{"className":30389,"code":96391,"language":30391,"meta":37,"style":37},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[120,96393,96394,96399],{"__ignoreMap":37},[123,96395,96396],{"class":125,"line":126},[123,96397,96398],{"class":192},"#创建一个一维数组,以20进行填充\n",[123,96400,96401,96404,96406,96408,96410],{"class":125,"line":45},[123,96402,96403],{"class":133},"np.full(",[123,96405,580],{"class":182},[123,96407,512],{"class":133},[123,96409,834],{"class":182},[123,96411,140],{"class":133},[14,96413,93302],{},[114,96415,96417],{"className":30389,"code":96416,"language":30391,"meta":37,"style":37},"#创建二维数组\nnp.full((3,5),11)\n",[120,96418,96419,96423],{"__ignoreMap":37},[123,96420,96421],{"class":125,"line":126},[123,96422,93958],{"class":192},[123,96424,96425,96428,96430,96432,96434,96436,96438],{"class":125,"line":45},[123,96426,96427],{"class":133},"np.full((",[123,96429,205],{"class":182},[123,96431,512],{"class":133},[123,96433,453],{"class":182},[123,96435,42267],{"class":133},[123,96437,606],{"class":182},[123,96439,140],{"class":133},[14,96441,96442],{},"③full_like用法",[14,96444,96445],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96447,96448],{},"这里是指定填充而已",[114,96450,96452],{"className":30389,"code":96451,"language":30391,"meta":37,"style":37},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[120,96453,96454,96459,96483,96488],{"__ignoreMap":37},[123,96455,96456],{"class":125,"line":126},[123,96457,96458],{"class":192},"#创建一个指定形状数组\n",[123,96460,96461,96463,96465,96467,96469,96471,96473,96475,96477,96479,96481],{"class":125,"line":45},[123,96462,372],{"class":133},[123,96464,179],{"class":129},[123,96466,93013],{"class":133},[123,96468,351],{"class":182},[123,96470,512],{"class":133},[123,96472,459],{"class":182},[123,96474,93018],{"class":133},[123,96476,427],{"class":182},[123,96478,512],{"class":133},[123,96480,554],{"class":182},[123,96482,140],{"class":133},[123,96484,96485],{"class":125,"line":1189},[123,96486,96487],{"class":192},"#进行指定填充\n",[123,96489,96490,96493,96495],{"class":125,"line":1204},[123,96491,96492],{"class":133},"np.full_like(a,",[123,96494,580],{"class":182},[123,96496,140],{"class":133},[14,96498,11524],{},[14,96500,96501],{},[35,96502],{"alt":37,"src":96503},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[94,96505,96507],{"id":96506},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[22008,96509,96511],{"id":96510},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[114,96513,96515],{"className":30389,"code":96514,"language":30391,"meta":37,"style":37},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[120,96516,96517,96534],{"__ignoreMap":37},[123,96518,96519,96522,96524,96526,96528,96530,96532],{"class":125,"line":126},[123,96520,96521],{"class":133},"np.eye(",[123,96523,427],{"class":182},[123,96525,512],{"class":133},[123,96527,93511],{"class":5226},[123,96529,179],{"class":129},[123,96531,137],{"class":182},[123,96533,140],{"class":133},[123,96535,96536],{"class":125,"line":45},[123,96537,96538],{"class":192},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[22008,96540,96542],{"id":96541},"_2662-法2identity","2.6.6.2 法2：identity()",[114,96544,96546],{"className":30389,"code":96545,"language":30391,"meta":37,"style":37},"#identity()\nnp.identity(5,dtype=int)\n",[120,96547,96548,96553],{"__ignoreMap":37},[123,96549,96550],{"class":125,"line":126},[123,96551,96552],{"class":192},"#identity()\n",[123,96554,96555,96558,96560,96562,96564,96566,96568],{"class":125,"line":45},[123,96556,96557],{"class":133},"np.identity(",[123,96559,453],{"class":182},[123,96561,512],{"class":133},[123,96563,93511],{"class":5226},[123,96565,179],{"class":129},[123,96567,137],{"class":182},[123,96569,140],{"class":133},[14,96571,96572],{},"两个函数是有区别的",[14,96574,96575],{},[35,96576],{"alt":37,"src":96577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,96579,96580],{},[35,96581],{"alt":37,"src":96582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[114,96584,96586],{"className":30389,"code":96585,"language":30391,"meta":37,"style":37},"# 创建一个 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",[120,96587,96588,96593,96605,96610,96615,96620,96625,96629,96634,96654,96658,96663,96668],{"__ignoreMap":37},[123,96589,96590],{"class":125,"line":126},[123,96591,96592],{"class":192},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[123,96594,96595,96597,96599,96601,96603],{"class":125,"line":45},[123,96596,96521],{"class":133},[123,96598,205],{"class":182},[123,96600,12445],{"class":133},[123,96602,427],{"class":182},[123,96604,140],{"class":133},[123,96606,96607],{"class":125,"line":1189},[123,96608,96609],{"class":192},"# 输出:\n",[123,96611,96612],{"class":125,"line":1204},[123,96613,96614],{"class":192},"# [[1. 0. 0. 0.]\n",[123,96616,96617],{"class":125,"line":1210},[123,96618,96619],{"class":192},"#  [0. 1. 0. 0.]\n",[123,96621,96622],{"class":125,"line":1224},[123,96623,96624],{"class":192},"#  [0. 0. 1. 0.]]\n",[123,96626,96627],{"class":125,"line":1230},[123,96628,2409],{"emptyLinePlaceholder":50},[123,96630,96631],{"class":125,"line":1321},[123,96632,96633],{"class":192},"# 对角线向上偏移1\n",[123,96635,96636,96638,96640,96642,96644,96646,96648,96650,96652],{"class":125,"line":1327},[123,96637,96521],{"class":133},[123,96639,205],{"class":182},[123,96641,12445],{"class":133},[123,96643,427],{"class":182},[123,96645,12445],{"class":133},[123,96647,627],{"class":5226},[123,96649,179],{"class":129},[123,96651,351],{"class":182},[123,96653,140],{"class":133},[123,96655,96656],{"class":125,"line":1339},[123,96657,96609],{"class":192},[123,96659,96660],{"class":125,"line":1621},[123,96661,96662],{"class":192},"# [[0. 1. 0. 0.]\n",[123,96664,96665],{"class":125,"line":1626},[123,96666,96667],{"class":192},"#  [0. 0. 1. 0.]\n",[123,96669,96670],{"class":125,"line":1632},[123,96671,96672],{"class":192},"#  [0. 0. 0. 1.]]\n",[94,96674,96676],{"id":96675},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[114,96678,96680],{"className":30389,"code":96679,"language":30391,"meta":37,"style":37},"#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",[120,96681,96682,96687,96691,96696,96701,96706,96711,96716,96721,96726,96731],{"__ignoreMap":37},[123,96683,96684],{"class":125,"line":126},[123,96685,96686],{"class":192},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[123,96688,96689],{"class":125,"line":45},[123,96690,95695],{"class":238},[123,96692,96693],{"class":125,"line":1189},[123,96694,96695],{"class":238},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[123,96697,96698],{"class":125,"line":1204},[123,96699,96700],{"class":238},"参数介绍：\n",[123,96702,96703],{"class":125,"line":1210},[123,96704,96705],{"class":238},"start：序列的起始值\n",[123,96707,96708],{"class":125,"line":1224},[123,96709,96710],{"class":238},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[123,96712,96713],{"class":125,"line":1230},[123,96714,96715],{"class":238},"num：要生长的等步长的样本数量，默认为50\n",[123,96717,96718],{"class":125,"line":1321},[123,96719,96720],{"class":238},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[123,96722,96723],{"class":125,"line":1327},[123,96724,96725],{"class":238},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[123,96727,96728],{"class":125,"line":1339},[123,96729,96730],{"class":238},"dtype：ndarry的数据类型\n",[123,96732,96733],{"class":125,"line":1621},[123,96734,95695],{"class":238},[14,96736,96737],{},[35,96738],{"alt":37,"src":96739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,96741,96742],{},"这里num=是可以省略的",[14,96744,96745],{},"也就是下方两行代码结果是一模一样的",[114,96747,96749],{"className":30389,"code":96748,"language":30391,"meta":37,"style":37},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[120,96750,96751,96768],{"__ignoreMap":37},[123,96752,96753,96756,96758,96760,96762,96764,96766],{"class":125,"line":126},[123,96754,96755],{"class":133},"np.linspace(",[123,96757,351],{"class":182},[123,96759,512],{"class":133},[123,96761,453],{"class":182},[123,96763,512],{"class":133},[123,96765,453],{"class":182},[123,96767,140],{"class":133},[123,96769,96770,96772,96774,96776,96778,96780,96782,96784,96786],{"class":125,"line":45},[123,96771,96755],{"class":133},[123,96773,351],{"class":182},[123,96775,512],{"class":133},[123,96777,453],{"class":182},[123,96779,512],{"class":133},[123,96781,1674],{"class":5226},[123,96783,179],{"class":129},[123,96785,453],{"class":182},[123,96787,140],{"class":133},[94,96789,96791],{"id":96790},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[114,96793,96795],{"className":30389,"code":96794,"language":30391,"meta":37,"style":37},"#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",[120,96796,96797,96802,96806,96811,96816,96821,96826,96830,96835,96840,96844],{"__ignoreMap":37},[123,96798,96799],{"class":125,"line":126},[123,96800,96801],{"class":192},"#logspace函数用于创建一个等比数列，格式如下：\n",[123,96803,96804],{"class":125,"line":45},[123,96805,95695],{"class":238},[123,96807,96808],{"class":125,"line":1189},[123,96809,96810],{"class":238},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[123,96812,96813],{"class":125,"line":1204},[123,96814,96815],{"class":238},"参数为：\n",[123,96817,96818],{"class":125,"line":1210},[123,96819,96820],{"class":238},"start:序列的起始位置为：base**start\n",[123,96822,96823],{"class":125,"line":1224},[123,96824,96825],{"class":238},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[123,96827,96828],{"class":125,"line":1230},[123,96829,96715],{"class":238},[123,96831,96832],{"class":125,"line":1321},[123,96833,96834],{"class":238},"endpoint：是否包含 stop 这个值，默认是 True\n",[123,96836,96837],{"class":125,"line":1327},[123,96838,96839],{"class":238},"base：对数的底数，默认是 10（常见对数）\n",[123,96841,96842],{"class":125,"line":1339},[123,96843,96730],{"class":238},[123,96845,96846],{"class":125,"line":1621},[123,96847,95695],{"class":238},[14,96849,96850],{},[35,96851],{"alt":37,"src":96852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,96854,96855],{},"logspace()函数中的num参数也是可以不写num=的",[14,96857,96858],{},"endpoint是不可以省略的",[5136,96860,96861],{},"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":37,"searchDepth":45,"depth":45,"links":96863},[96864,96868,96873,96877,96881,96882],{"id":95253,"depth":45,"text":95254,"children":96865},[96866,96867],{"id":95257,"depth":1189,"text":95258},{"id":95330,"depth":1189,"text":95331},{"id":95362,"depth":45,"text":95363,"children":96869},[96870,96871,96872],{"id":95366,"depth":1189,"text":95367},{"id":95548,"depth":1189,"text":95549},{"id":95626,"depth":1189,"text":95627},{"id":95661,"depth":45,"text":95662,"children":96874},[96875,96876],{"id":95665,"depth":1189,"text":95666},{"id":95722,"depth":1189,"text":95723},{"id":95818,"depth":45,"text":95819,"children":96878},[96879,96880],{"id":95822,"depth":1189,"text":95823},{"id":95834,"depth":1189,"text":95835},{"id":95868,"depth":45,"text":95869},{"id":95905,"depth":45,"text":95906,"children":96883},[96884,96885,96886,96887,96888,96889,96890,96891],{"id":95909,"depth":1189,"text":95910},{"id":96134,"depth":1189,"text":96135},{"id":96141,"depth":1189,"text":96142},{"id":96350,"depth":1189,"text":96351},{"id":96370,"depth":1189,"text":96371},{"id":96506,"depth":1189,"text":96507},{"id":96675,"depth":1189,"text":96676},{"id":96790,"depth":1189,"text":96791},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95245,"description":47},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96898,"title":96899,"body":96900,"description":47,"extension":48,"meta":96993,"navigation":50,"path":96994,"seo":96995,"stem":96996,"__hash__":96997},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96901,"toc":96991},[96902,96905,96908,96911,96914,96917,96920,96923,96926,96929,96932,96935,96937,96940,96943,96948,96951,96954,96988],[10,96903,96899],{"id":96904},"_20魔法命令mprun",[14,96906,96907],{},"逐行分析数据内存的使用情况",[14,96909,96910],{},"语法格式：",[14,96912,96913],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,96915,96916],{},"分析结果列如下：",[14,96918,96919],{},"Line行号",[14,96921,96922],{},"Mem usage内存使用大小",[14,96924,96925],{},"increment内存增量",[14,96927,96928],{},"Line content代码内容",[14,96930,96931],{},"补充说明：",[14,96933,96934],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,96936,95200],{},[14,96938,96939],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,96941,96942],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,96944,96945],{},[35,96946],{"alt":37,"src":96947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,96949,96950],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,96952,96953],{},"这时候需要重新加载模块",[114,96955,96957],{"className":30389,"code":96956,"language":30391,"meta":37,"style":37},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[120,96958,96959,96964,96971,96976],{"__ignoreMap":37},[123,96960,96961],{"class":125,"line":126},[123,96962,96963],{"class":192},"#重新加载模块\n",[123,96965,96966,96968],{"class":125,"line":45},[123,96967,30403],{"class":129},[123,96969,96970],{"class":133}," importlib\n",[123,96972,96973],{"class":125,"line":1189},[123,96974,96975],{"class":133},"importlib.reload(mprun_test)\n",[123,96977,96978,96980,96983,96985],{"class":125,"line":1204},[123,96979,462],{"class":129},[123,96981,96982],{"class":133},"mprun ",[123,96984,666],{"class":129},[123,96986,96987],{"class":133},"f mprun_test.fun_test mprun_test.fun_test()\n",[5136,96989,96990],{},"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":37,"searchDepth":45,"depth":45,"links":96992},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96899,"description":47},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":96999,"title":97000,"body":97001,"description":47,"extension":48,"meta":97018,"navigation":50,"path":97019,"seo":97020,"stem":97021,"__hash__":97022},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":97002,"toc":97016},[97003,97006,97011],[10,97004,97000],{"id":97005},"_3一维数组的索引和切片",[14,97007,97008],{},[35,97009],{"alt":37,"src":97010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97012,97013],{},[35,97014],{"alt":37,"src":97015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":37,"searchDepth":45,"depth":45,"links":97017},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":97000,"description":47},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97024,"title":97025,"body":97026,"description":47,"extension":48,"meta":97509,"navigation":50,"path":97510,"seo":97511,"stem":97512,"__hash__":97513},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97027,"toc":97507},[97028,97031,97034,97039,97072,97075,97113,97116,97150,97153,97258,97261,97298,97301,97402,97405,97456,97459,97501,97504],[10,97029,97025],{"id":97030},"_4二维数组的索引与切片",[14,97032,97033],{},"①获取指定单个元素",[14,97035,97036],{},[35,97037],{"alt":37,"src":97038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[114,97040,97042],{"className":30389,"code":97041,"language":30391,"meta":37,"style":37},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[120,97043,97044,97049,97054,97059],{"__ignoreMap":37},[123,97045,97046],{"class":125,"line":126},[123,97047,97048],{"class":192},"#获取元素9\n",[123,97050,97051],{"class":125,"line":45},[123,97052,97053],{"class":192},"#先获取所在行，再获取所在列\n",[123,97055,97056],{"class":125,"line":1189},[123,97057,97058],{"class":192},"#数组[行索引号，列索引号]\n",[123,97060,97061,97064,97066,97068,97070],{"class":125,"line":1204},[123,97062,97063],{"class":133},"a[",[123,97065,351],{"class":182},[123,97067,512],{"class":133},[123,97069,211],{"class":182},[123,97071,33257],{"class":133},[14,97073,97074],{},"②获取整行元素",[114,97076,97078],{"className":30389,"code":97077,"language":30391,"meta":37,"style":37},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[120,97079,97080,97085,97090,97098,97103],{"__ignoreMap":37},[123,97081,97082],{"class":125,"line":126},[123,97083,97084],{"class":192},"#获取整行 数组[行索引号]\n",[123,97086,97087],{"class":125,"line":45},[123,97088,97089],{"class":192},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[123,97091,97092,97094,97096],{"class":125,"line":1189},[123,97093,97063],{"class":133},[123,97095,211],{"class":182},[123,97097,33257],{"class":133},[123,97099,97100],{"class":125,"line":1204},[123,97101,97102],{"class":192},"#也可以负索引获取一行\n",[123,97104,97105,97107,97109,97111],{"class":125,"line":1210},[123,97106,97063],{"class":133},[123,97108,666],{"class":129},[123,97110,351],{"class":182},[123,97112,33257],{"class":133},[14,97114,97115],{},"③获取整列元素",[114,97117,97119],{"className":30389,"code":97118,"language":30391,"meta":37,"style":37},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[120,97120,97121,97126,97135,97140],{"__ignoreMap":37},[123,97122,97123],{"class":125,"line":126},[123,97124,97125],{"class":192},"#获取整列 数组名[:,列索引]\n",[123,97127,97128,97131,97133],{"class":125,"line":45},[123,97129,97130],{"class":133},"a[:,",[123,97132,211],{"class":182},[123,97134,33257],{"class":133},[123,97136,97137],{"class":125,"line":1189},[123,97138,97139],{"class":192},"#也可以负索引获取一列\n",[123,97141,97142,97144,97146,97148],{"class":125,"line":1204},[123,97143,97130],{"class":133},[123,97145,666],{"class":129},[123,97147,351],{"class":182},[123,97149,33257],{"class":133},[14,97151,97152],{},"④部分行部分列的元素",[114,97154,97156],{"className":30389,"code":97155,"language":30391,"meta":37,"style":37},"#部分行部分列 数组名[行切片，列切片]\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",[120,97157,97158,97163,97173,97177,97181,97186,97191,97195,97207,97211,97215,97220,97225,97230,97235,97239,97244],{"__ignoreMap":37},[123,97159,97160],{"class":125,"line":126},[123,97161,97162],{"class":192},"#部分行部分列 数组名[行切片，列切片]\n",[123,97164,97165,97168,97170],{"class":125,"line":45},[123,97166,97167],{"class":133},"a[:",[123,97169,211],{"class":182},[123,97171,97172],{"class":133},",:]\n",[123,97174,97175],{"class":125,"line":1189},[123,97176,93575],{"class":192},[123,97178,97179],{"class":125,"line":1204},[123,97180,93939],{"class":238},[123,97182,97183],{"class":125,"line":1210},[123,97184,97185],{"class":238},"array([[ 1,  2,  3,  4,  5,  6],\n",[123,97187,97188],{"class":125,"line":1224},[123,97189,97190],{"class":238},"       [ 7,  8,  9, 10, 11, 12]])\n",[123,97192,97193],{"class":125,"line":1230},[123,97194,93939],{"class":238},[123,97196,97197,97199,97201,97203,97205],{"class":125,"line":1321},[123,97198,97130],{"class":133},[123,97200,351],{"class":182},[123,97202,993],{"class":133},[123,97204,427],{"class":182},[123,97206,33257],{"class":133},[123,97208,97209],{"class":125,"line":1327},[123,97210,93575],{"class":192},[123,97212,97213],{"class":125,"line":1339},[123,97214,93939],{"class":238},[123,97216,97217],{"class":125,"line":1621},[123,97218,97219],{"class":238},"array([[ 2,  3,  4],\n",[123,97221,97222],{"class":125,"line":1626},[123,97223,97224],{"class":238},"       [ 8,  9, 10],\n",[123,97226,97227],{"class":125,"line":1632},[123,97228,97229],{"class":238},"       [14, 15, 16],\n",[123,97231,97232],{"class":125,"line":1637},[123,97233,97234],{"class":238},"       [20, 21, 22]])\n",[123,97236,97237],{"class":125,"line":1651},[123,97238,93939],{"class":238},[123,97240,97241],{"class":125,"line":1656},[123,97242,97243],{"class":192},"#对列行同时进行切片，使用了step参数\n",[123,97245,97246,97249,97251,97254,97256],{"class":125,"line":1662},[123,97247,97248],{"class":133},"a[::",[123,97250,211],{"class":182},[123,97252,97253],{"class":133},",::",[123,97255,211],{"class":182},[123,97257,33257],{"class":133},[14,97259,97260],{},"⑤同时获取两个元素",[114,97262,97264],{"className":30389,"code":97263,"language":30391,"meta":37,"style":37},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[120,97265,97266,97271,97276],{"__ignoreMap":37},[123,97267,97268],{"class":125,"line":126},[123,97269,97270],{"class":192},"#同时获取第三行第二列，第四行第一列\n",[123,97272,97273],{"class":125,"line":45},[123,97274,97275],{"class":192},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[123,97277,97278,97281,97283,97285,97287,97289,97291,97293,97295],{"class":125,"line":1189},[123,97279,97280],{"class":133},"a[(",[123,97282,211],{"class":182},[123,97284,512],{"class":133},[123,97286,205],{"class":182},[123,97288,42258],{"class":133},[123,97290,351],{"class":182},[123,97292,512],{"class":133},[123,97294,325],{"class":182},[123,97296,97297],{"class":133},")]\n",[14,97299,97300],{},"⑥切片，对行进行反向获取",[114,97302,97304],{"className":30389,"code":97303,"language":30391,"meta":37,"style":37},"#切片 对所有行进行反向获取\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",[120,97305,97306,97311,97321,97325,97329,97334,97339,97344,97349,97353,97358,97374,97378,97383,97388,97393,97398],{"__ignoreMap":37},[123,97307,97308],{"class":125,"line":126},[123,97309,97310],{"class":192},"#切片 对所有行进行反向获取\n",[123,97312,97313,97315,97317,97319],{"class":125,"line":45},[123,97314,97248],{"class":133},[123,97316,666],{"class":129},[123,97318,351],{"class":182},[123,97320,33257],{"class":133},[123,97322,97323],{"class":125,"line":1189},[123,97324,93575],{"class":192},[123,97326,97327],{"class":125,"line":1204},[123,97328,93939],{"class":238},[123,97330,97331],{"class":125,"line":1210},[123,97332,97333],{"class":238},"array([[19, 20, 21, 22, 23, 24],\n",[123,97335,97336],{"class":125,"line":1224},[123,97337,97338],{"class":238},"       [13, 14, 15, 16, 17, 18],\n",[123,97340,97341],{"class":125,"line":1230},[123,97342,97343],{"class":238},"       [ 7,  8,  9, 10, 11, 12],\n",[123,97345,97346],{"class":125,"line":1321},[123,97347,97348],{"class":238},"       [ 1,  2,  3,  4,  5,  6]])\n",[123,97350,97351],{"class":125,"line":1327},[123,97352,93939],{"class":238},[123,97354,97355],{"class":125,"line":1339},[123,97356,97357],{"class":192},"#对行列都进行反向切片获取\n",[123,97359,97360,97362,97364,97366,97368,97370,97372],{"class":125,"line":1621},[123,97361,97248],{"class":133},[123,97363,666],{"class":129},[123,97365,351],{"class":182},[123,97367,97253],{"class":133},[123,97369,666],{"class":129},[123,97371,351],{"class":182},[123,97373,33257],{"class":133},[123,97375,97376],{"class":125,"line":1626},[123,97377,93939],{"class":238},[123,97379,97380],{"class":125,"line":1632},[123,97381,97382],{"class":238},"array([[24, 23, 22, 21, 20, 19],\n",[123,97384,97385],{"class":125,"line":1637},[123,97386,97387],{"class":238},"       [18, 17, 16, 15, 14, 13],\n",[123,97389,97390],{"class":125,"line":1651},[123,97391,97392],{"class":238},"       [12, 11, 10,  9,  8,  7],\n",[123,97394,97395],{"class":125,"line":1656},[123,97396,97397],{"class":238},"       [ 6,  5,  4,  3,  2,  1]])\n",[123,97399,97400],{"class":125,"line":1662},[123,97401,93939],{"class":238},[14,97403,97404],{},"⑦修改元素",[114,97406,97408],{"className":30389,"code":97407,"language":30391,"meta":37,"style":37},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[120,97409,97410,97415,97433,97438],{"__ignoreMap":37},[123,97411,97412],{"class":125,"line":126},[123,97413,97414],{"class":192},"#获取前两行和前两列\n",[123,97416,97417,97420,97422,97424,97426,97429,97431],{"class":125,"line":45},[123,97418,97419],{"class":133},"sub_a",[123,97421,179],{"class":129},[123,97423,97167],{"class":133},[123,97425,211],{"class":182},[123,97427,97428],{"class":133},",:",[123,97430,211],{"class":182},[123,97432,33257],{"class":133},[123,97434,97435],{"class":125,"line":1189},[123,97436,97437],{"class":192},"#修改sub_a第一个元素的值\n",[123,97439,97440,97443,97445,97447,97449,97451,97453],{"class":125,"line":1204},[123,97441,97442],{"class":133},"sub_a[",[123,97444,325],{"class":182},[123,97446,512],{"class":133},[123,97448,325],{"class":182},[123,97450,1074],{"class":133},[123,97452,179],{"class":129},[123,97454,97455],{"class":182},"100\n",[14,97457,97458],{},"⑧数组复制copy()",[114,97460,97462],{"className":30389,"code":97461,"language":30391,"meta":37,"style":37},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[120,97463,97464,97469,97479,97484],{"__ignoreMap":37},[123,97465,97466],{"class":125,"line":126},[123,97467,97468],{"class":192},"#数组复制\n",[123,97470,97471,97474,97476],{"class":125,"line":45},[123,97472,97473],{"class":133},"copy_a",[123,97475,179],{"class":129},[123,97477,97478],{"class":133},"np.copy(sub_a)\n",[123,97480,97481],{"class":125,"line":1189},[123,97482,97483],{"class":192},"#修改copy_a后不影响原数组\n",[123,97485,97486,97489,97491,97493,97495,97497,97499],{"class":125,"line":1204},[123,97487,97488],{"class":133},"copy_a[",[123,97490,325],{"class":182},[123,97492,512],{"class":133},[123,97494,325],{"class":182},[123,97496,1074],{"class":133},[123,97498,179],{"class":129},[123,97500,97455],{"class":182},[14,97502,97503],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5136,97505,97506],{},"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":37,"searchDepth":45,"depth":45,"links":97508},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97025,"description":47},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97515,"title":97516,"body":97517,"description":47,"extension":48,"meta":98009,"navigation":50,"path":98010,"seo":98011,"stem":98012,"__hash__":98013},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97518,"toc":98001},[97519,97522,97526,97529,97532,97585,97588,97613,97616,97635,97655,97658,97674,97678,97724,97728,97770,97774,97777,97780,97783,97786,97789,97851,97911,97915,97918,97975,97979,97984,97993,97998],[10,97520,97516],{"id":97521},"_5改变数组的维度",[65,97523,97525],{"id":97524},"_51-使用reshape","5.1 使用reshape()",[14,97527,97528],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97530,97531],{},"①一维数组转换为二维数组",[114,97533,97535],{"className":30389,"code":97534,"language":30391,"meta":37,"style":37},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[120,97536,97537,97553,97558,97563,97568],{"__ignoreMap":37},[123,97538,97539,97541,97543,97545,97547,97549,97551],{"class":125,"line":126},[123,97540,372],{"class":133},[123,97542,179],{"class":129},[123,97544,93013],{"class":133},[123,97546,351],{"class":182},[123,97548,512],{"class":133},[123,97550,657],{"class":182},[123,97552,140],{"class":133},[123,97554,97555],{"class":125,"line":45},[123,97556,97557],{"class":192},"#将一维数组进行转换\n",[123,97559,97560],{"class":125,"line":1189},[123,97561,97562],{"class":192},"#注意点：元素个数不可以变\n",[123,97564,97565],{"class":125,"line":1204},[123,97566,97567],{"class":192},"#转换维度要保持一致，不一致就异常！！！\n",[123,97569,97570,97572,97574,97577,97579,97581,97583],{"class":125,"line":1210},[123,97571,93317],{"class":133},[123,97573,179],{"class":129},[123,97575,97576],{"class":133},"a.reshape(",[123,97578,211],{"class":182},[123,97580,512],{"class":133},[123,97582,478],{"class":182},[123,97584,140],{"class":133},[14,97586,97587],{},"②一维数组转换为三维数组",[114,97589,97591],{"className":30389,"code":97590,"language":30391,"meta":37,"style":37},"aaa=a.reshape(2,3,2)\n",[120,97592,97593],{"__ignoreMap":37},[123,97594,97595,97597,97599,97601,97603,97605,97607,97609,97611],{"class":125,"line":126},[123,97596,95518],{"class":133},[123,97598,179],{"class":129},[123,97600,97576],{"class":133},[123,97602,211],{"class":182},[123,97604,512],{"class":133},[123,97606,205],{"class":182},[123,97608,512],{"class":133},[123,97610,211],{"class":182},[123,97612,140],{"class":133},[14,97614,97615],{},"③二维数组转化为一维数组",[114,97617,97619],{"className":30389,"code":97618,"language":30391,"meta":37,"style":37},"#知道元素个数：\naa.reshape(12)\n",[120,97620,97621,97626],{"__ignoreMap":37},[123,97622,97623],{"class":125,"line":126},[123,97624,97625],{"class":192},"#知道元素个数：\n",[123,97627,97628,97631,97633],{"class":125,"line":45},[123,97629,97630],{"class":133},"aa.reshape(",[123,97632,632],{"class":182},[123,97634,140],{"class":133},[114,97636,97638],{"className":30389,"code":97637,"language":30391,"meta":37,"style":37},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[120,97639,97640,97645],{"__ignoreMap":37},[123,97641,97642],{"class":125,"line":126},[123,97643,97644],{"class":192},"#不知道元素个数，参数传递-1\n",[123,97646,97647,97649,97651,97653],{"class":125,"line":45},[123,97648,97630],{"class":133},[123,97650,666],{"class":129},[123,97652,351],{"class":182},[123,97654,140],{"class":133},[14,97656,97657],{},"④三维数组转换为一维数组",[114,97659,97661],{"className":30389,"code":97660,"language":30391,"meta":37,"style":37},"aaa.reshape(-1)\n",[120,97662,97663],{"__ignoreMap":37},[123,97664,97665,97668,97670,97672],{"class":125,"line":126},[123,97666,97667],{"class":133},"aaa.reshape(",[123,97669,666],{"class":129},[123,97671,351],{"class":182},[123,97673,140],{"class":133},[65,97675,97677],{"id":97676},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[114,97679,97681],{"className":30389,"code":97680,"language":30391,"meta":37,"style":37},"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",[120,97682,97683,97710,97715,97719],{"__ignoreMap":37},[123,97684,97685,97687,97689,97691,97693,97695,97697,97699,97701,97703,97705,97707],{"class":125,"line":126},[123,97686,93317],{"class":133},[123,97688,179],{"class":129},[123,97690,93013],{"class":133},[123,97692,351],{"class":182},[123,97694,512],{"class":133},[123,97696,657],{"class":182},[123,97698,93018],{"class":133},[123,97700,211],{"class":182},[123,97702,512],{"class":133},[123,97704,478],{"class":182},[123,97706,563],{"class":133},[123,97708,97709],{"class":192},"#转换为2行6列的数组\n",[123,97711,97712],{"class":125,"line":45},[123,97713,97714],{"class":133},"aa.revel()\n",[123,97716,97717],{"class":125,"line":1189},[123,97718,93575],{"class":192},[123,97720,97721],{"class":125,"line":1204},[123,97722,97723],{"class":192},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[65,97725,97727],{"id":97726},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[114,97729,97731],{"className":30389,"code":97730,"language":30391,"meta":37,"style":37},"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",[120,97732,97733,97757,97762,97766],{"__ignoreMap":37},[123,97734,97735,97737,97739,97741,97743,97745,97747,97749,97751,97753,97755],{"class":125,"line":126},[123,97736,93317],{"class":133},[123,97738,179],{"class":129},[123,97740,93013],{"class":133},[123,97742,351],{"class":182},[123,97744,512],{"class":133},[123,97746,657],{"class":182},[123,97748,93018],{"class":133},[123,97750,211],{"class":182},[123,97752,512],{"class":133},[123,97754,478],{"class":182},[123,97756,140],{"class":133},[123,97758,97759],{"class":125,"line":45},[123,97760,97761],{"class":133},"aa.flatten()\n",[123,97763,97764],{"class":125,"line":1189},[123,97765,93575],{"class":192},[123,97767,97768],{"class":125,"line":1204},[123,97769,97723],{"class":192},[65,97771,97773],{"id":97772},"_54-使用resize","5.4 使用resize()",[14,97775,97776],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,97778,97779],{},"通过resize方法可以改变数组的维度",[14,97781,97782],{},"#resize修改数组维度",[14,97784,97785],{},"#以元组的形式指定形状",[14,97787,97788],{},"#改变的是原数组",[114,97790,97792],{"className":30389,"code":97791,"language":30391,"meta":37,"style":37},"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",[120,97793,97794,97810,97830,97843,97847],{"__ignoreMap":37},[123,97795,97796,97798,97800,97802,97804,97806,97808],{"class":125,"line":126},[123,97797,372],{"class":133},[123,97799,179],{"class":129},[123,97801,93013],{"class":133},[123,97803,351],{"class":182},[123,97805,512],{"class":133},[123,97807,657],{"class":182},[123,97809,140],{"class":133},[123,97811,97812,97815,97817,97819,97821,97823,97825,97827],{"class":125,"line":45},[123,97813,97814],{"class":133},"a.shape",[123,97816,179],{"class":129},[123,97818,134],{"class":133},[123,97820,211],{"class":182},[123,97822,512],{"class":133},[123,97824,478],{"class":182},[123,97826,563],{"class":133},[123,97828,97829],{"class":192},"#改变了原数组\n",[123,97831,97832,97834,97836,97839,97841],{"class":125,"line":1189},[123,97833,372],{"class":133},[123,97835,179],{"class":129},[123,97837,97838],{"class":133},"resize((",[123,97840,632],{"class":182},[123,97842,30508],{"class":133},[123,97844,97845],{"class":125,"line":1204},[123,97846,93575],{"class":192},[123,97848,97849],{"class":125,"line":1210},[123,97850,97723],{"class":192},[114,97852,97854],{"className":30389,"code":97853,"language":30391,"meta":37,"style":37},"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",[120,97855,97856,97869,97873,97877,97882,97887,97892,97897,97902,97907],{"__ignoreMap":37},[123,97857,97858,97861,97863,97865,97867],{"class":125,"line":126},[123,97859,97860],{"class":133},"a.resize((",[123,97862,478],{"class":182},[123,97864,512],{"class":133},[123,97866,211],{"class":182},[123,97868,30508],{"class":133},[123,97870,97871],{"class":125,"line":45},[123,97872,93575],{"class":192},[123,97874,97875],{"class":125,"line":1189},[123,97876,93939],{"class":238},[123,97878,97879],{"class":125,"line":1204},[123,97880,97881],{"class":238},"array([[ 1,  2],\n",[123,97883,97884],{"class":125,"line":1210},[123,97885,97886],{"class":238},"       [ 3,  4],\n",[123,97888,97889],{"class":125,"line":1224},[123,97890,97891],{"class":238},"       [ 5,  6],\n",[123,97893,97894],{"class":125,"line":1230},[123,97895,97896],{"class":238},"       [ 7,  8],\n",[123,97898,97899],{"class":125,"line":1321},[123,97900,97901],{"class":238},"       [ 9, 10],\n",[123,97903,97904],{"class":125,"line":1327},[123,97905,97906],{"class":238},"       [11, 12]])\n",[123,97908,97909],{"class":125,"line":1339},[123,97910,93939],{"class":238},[65,97912,97914],{"id":97913},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,97916,97917],{},"改变了原数组",[114,97919,97921],{"className":30389,"code":97920,"language":30391,"meta":37,"style":37},"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",[120,97922,97923,97939,97955,97959,97963,97967,97971],{"__ignoreMap":37},[123,97924,97925,97927,97929,97931,97933,97935,97937],{"class":125,"line":126},[123,97926,372],{"class":133},[123,97928,179],{"class":129},[123,97930,93013],{"class":133},[123,97932,351],{"class":182},[123,97934,512],{"class":133},[123,97936,657],{"class":182},[123,97938,140],{"class":133},[123,97940,97941,97943,97945,97947,97949,97951,97953],{"class":125,"line":45},[123,97942,97814],{"class":133},[123,97944,179],{"class":129},[123,97946,134],{"class":133},[123,97948,211],{"class":182},[123,97950,512],{"class":133},[123,97952,478],{"class":182},[123,97954,140],{"class":133},[123,97956,97957],{"class":125,"line":1189},[123,97958,93575],{"class":192},[123,97960,97961],{"class":125,"line":1204},[123,97962,93939],{"class":238},[123,97964,97965],{"class":125,"line":1210},[123,97966,97185],{"class":238},[123,97968,97969],{"class":125,"line":1224},[123,97970,97190],{"class":238},[123,97972,97973],{"class":125,"line":1230},[123,97974,93939],{"class":238},[65,97976,97978],{"id":97977},"_56-重要比较","5.6 重要比较：",[14,97980,97981],{},[35,97982],{"alt":37,"src":97983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,97985,97986,97987,97989,97990,97992],{},"口诀：NumPy 函数要么用 ",[120,97988,95960],{},"，要么用 ",[120,97991,31507],{},"，创建结构用 shape，造数据用 size",[14,97994,97995],{},[35,97996],{"alt":37,"src":97997},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5136,97999,98000],{},"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":37,"searchDepth":45,"depth":45,"links":98002},[98003,98004,98005,98006,98007,98008],{"id":97524,"depth":45,"text":97525},{"id":97676,"depth":45,"text":97677},{"id":97726,"depth":45,"text":97727},{"id":97772,"depth":45,"text":97773},{"id":97913,"depth":45,"text":97914},{"id":97977,"depth":45,"text":97978},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97516,"description":47},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98015,"title":98016,"body":98017,"description":47,"extension":48,"meta":99089,"navigation":50,"path":99090,"seo":99091,"stem":99092,"__hash__":99093},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98018,"toc":99083},[98019,98022,98026,98029,98032,98035,98100,98103,98143,98146,98228,98231,98236,98258,98260,98265,98270,98273,98276,98431,98434,98636,98640,98643,98646,98714,98716,98721,98724,98727,98807,98811,98814,98816,98889,98891,98896,98898,98978,98982,98985,98988,98991,98994,98997,99000,99080],[10,98020,98016],{"id":98021},"_6数组的拼接",[65,98023,98025],{"id":98024},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98027,98028],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98030,98031],{},"函数内部传两个数列构成的数列或者元组",[14,98033,98034],{},"①一维数组的拼接",[114,98036,98038],{"className":30389,"code":98037,"language":30391,"meta":37,"style":37},"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",[120,98039,98040,98060,98080,98085,98090,98095],{"__ignoreMap":37},[123,98041,98042,98044,98046,98048,98050,98052,98054,98056,98058],{"class":125,"line":126},[123,98043,372],{"class":133},[123,98045,179],{"class":129},[123,98047,93035],{"class":133},[123,98049,351],{"class":182},[123,98051,512],{"class":133},[123,98053,211],{"class":182},[123,98055,512],{"class":133},[123,98057,205],{"class":182},[123,98059,4666],{"class":133},[123,98061,98062,98064,98066,98068,98070,98072,98074,98076,98078],{"class":125,"line":45},[123,98063,397],{"class":133},[123,98065,179],{"class":129},[123,98067,93035],{"class":133},[123,98069,427],{"class":182},[123,98071,512],{"class":133},[123,98073,453],{"class":182},[123,98075,512],{"class":133},[123,98077,478],{"class":182},[123,98079,4666],{"class":133},[123,98081,98082],{"class":125,"line":1189},[123,98083,98084],{"class":192},"#调用concatenate进行数组拼接\n",[123,98086,98087],{"class":125,"line":1204},[123,98088,98089],{"class":133},"np.concatenate((a,b))\n",[123,98091,98092],{"class":125,"line":1210},[123,98093,98094],{"class":192},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[123,98096,98097],{"class":125,"line":1224},[123,98098,98099],{"class":192},"#np.concatenate([a,b])\n",[14,98101,98102],{},"②一维多个数组拼接",[114,98104,98106],{"className":30389,"code":98105,"language":30391,"meta":37,"style":37},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[120,98107,98108,98113,98133,98138],{"__ignoreMap":37},[123,98109,98110],{"class":125,"line":126},[123,98111,98112],{"class":192},"#也可以多个数组进行拼接\n",[123,98114,98115,98117,98119,98121,98123,98125,98127,98129,98131],{"class":125,"line":45},[123,98116,422],{"class":133},[123,98118,179],{"class":129},[123,98120,93035],{"class":133},[123,98122,580],{"class":182},[123,98124,512],{"class":133},[123,98126,606],{"class":182},[123,98128,512],{"class":133},[123,98130,657],{"class":182},[123,98132,4666],{"class":133},[123,98134,98135],{"class":125,"line":1189},[123,98136,98137],{"class":133},"c\n",[123,98139,98140],{"class":125,"line":1204},[123,98141,98142],{"class":133},"np.concatenate((a,b,c))\n",[14,98144,98145],{},"③二维数组拼接",[114,98147,98149],{"className":30389,"code":98148,"language":30391,"meta":37,"style":37},"#二维数组使用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",[120,98150,98151,98156,98180,98205,98210,98215],{"__ignoreMap":37},[123,98152,98153],{"class":125,"line":126},[123,98154,98155],{"class":192},"#二维数组使用concatenate进行拼接\n",[123,98157,98158,98160,98162,98164,98166,98168,98170,98172,98174,98176,98178],{"class":125,"line":45},[123,98159,93317],{"class":133},[123,98161,179],{"class":129},[123,98163,93013],{"class":133},[123,98165,351],{"class":182},[123,98167,512],{"class":133},[123,98169,657],{"class":182},[123,98171,93018],{"class":133},[123,98173,205],{"class":182},[123,98175,512],{"class":133},[123,98177,427],{"class":182},[123,98179,140],{"class":133},[123,98181,98182,98185,98187,98189,98191,98193,98195,98197,98199,98201,98203],{"class":125,"line":1189},[123,98183,98184],{"class":133},"bb",[123,98186,179],{"class":129},[123,98188,93013],{"class":133},[123,98190,471],{"class":182},[123,98192,512],{"class":133},[123,98194,776],{"class":182},[123,98196,93018],{"class":133},[123,98198,205],{"class":182},[123,98200,512],{"class":133},[123,98202,427],{"class":182},[123,98204,140],{"class":133},[123,98206,98207],{"class":125,"line":1204},[123,98208,98209],{"class":192},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[123,98211,98212],{"class":125,"line":1210},[123,98213,98214],{"class":192},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[123,98216,98217,98220,98222,98224,98226],{"class":125,"line":1224},[123,98218,98219],{"class":133},"np.concatenate((aa,bb),",[123,98221,47525],{"class":5226},[123,98223,179],{"class":129},[123,98225,325],{"class":182},[123,98227,140],{"class":133},[14,98229,98230],{},"结果：",[14,98232,98233],{},[35,98234],{"alt":37,"src":98235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[114,98237,98239],{"className":30389,"code":98238,"language":30391,"meta":37,"style":37},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[120,98240,98241,98246],{"__ignoreMap":37},[123,98242,98243],{"class":125,"line":126},[123,98244,98245],{"class":192},"#指定axis为1进行拼接\n",[123,98247,98248,98250,98252,98254,98256],{"class":125,"line":45},[123,98249,98219],{"class":133},[123,98251,47525],{"class":5226},[123,98253,179],{"class":129},[123,98255,351],{"class":182},[123,98257,140],{"class":133},[14,98259,98230],{},[14,98261,98262],{},[35,98263],{"alt":37,"src":98264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98266,98267],{},[283,98268,98269],{},"二维数组总结：0竖着方向，1横着方向",[14,98271,98272],{},"④三维数组拼接",[14,98274,98275],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[114,98277,98279],{"className":30389,"code":98278,"language":30391,"meta":37,"style":37},"#两个三行六列\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",[120,98280,98281,98286,98314,98344,98349,98366,98371,98376,98381,98398,98403,98408,98413,98426],{"__ignoreMap":37},[123,98282,98283],{"class":125,"line":126},[123,98284,98285],{"class":192},"#两个三行六列\n",[123,98287,98288,98290,98292,98294,98296,98298,98300,98302,98304,98306,98308,98310,98312],{"class":125,"line":45},[123,98289,95518],{"class":133},[123,98291,179],{"class":129},[123,98293,93013],{"class":133},[123,98295,351],{"class":182},[123,98297,512],{"class":133},[123,98299,459],{"class":182},[123,98301,93018],{"class":133},[123,98303,211],{"class":182},[123,98305,512],{"class":133},[123,98307,205],{"class":182},[123,98309,512],{"class":133},[123,98311,478],{"class":182},[123,98313,140],{"class":133},[123,98315,98316,98319,98321,98323,98325,98327,98330,98332,98334,98336,98338,98340,98342],{"class":125,"line":1189},[123,98317,98318],{"class":133},"bbb",[123,98320,179],{"class":129},[123,98322,93013],{"class":133},[123,98324,471],{"class":182},[123,98326,512],{"class":133},[123,98328,98329],{"class":182},"137",[123,98331,93018],{"class":133},[123,98333,211],{"class":182},[123,98335,512],{"class":133},[123,98337,205],{"class":182},[123,98339,512],{"class":133},[123,98341,478],{"class":182},[123,98343,140],{"class":133},[123,98345,98346],{"class":125,"line":1204},[123,98347,98348],{"class":192},"#axis=0\n",[123,98350,98351,98353,98355,98358,98360,98362,98364],{"class":125,"line":1210},[123,98352,829],{"class":133},[123,98354,179],{"class":129},[123,98356,98357],{"class":133},"np.concatenate((aaa,bbb),",[123,98359,47525],{"class":5226},[123,98361,179],{"class":129},[123,98363,325],{"class":182},[123,98365,140],{"class":133},[123,98367,98368],{"class":125,"line":1224},[123,98369,98370],{"class":133},"s.shape\n",[123,98372,98373],{"class":125,"line":1230},[123,98374,98375],{"class":192},"#输出：(4,3,6)\n",[123,98377,98378],{"class":125,"line":1321},[123,98379,98380],{"class":192},"#axis=1\n",[123,98382,98383,98386,98388,98390,98392,98394,98396],{"class":125,"line":1327},[123,98384,98385],{"class":133},"ss",[123,98387,179],{"class":129},[123,98389,98357],{"class":133},[123,98391,47525],{"class":5226},[123,98393,179],{"class":129},[123,98395,351],{"class":182},[123,98397,140],{"class":133},[123,98399,98400],{"class":125,"line":1339},[123,98401,98402],{"class":133},"ss.shape\n",[123,98404,98405],{"class":125,"line":1621},[123,98406,98407],{"class":192},"#输出：(2,6,6)\n",[123,98409,98410],{"class":125,"line":1626},[123,98411,98412],{"class":192},"#axis=2\n",[123,98414,98415,98417,98419,98421,98423],{"class":125,"line":1632},[123,98416,98357],{"class":133},[123,98418,47525],{"class":5226},[123,98420,179],{"class":129},[123,98422,211],{"class":182},[123,98424,98425],{"class":133},").shape\n",[123,98427,98428],{"class":125,"line":1637},[123,98429,98430],{"class":192},"#输出：（2，3，12）\n",[14,98432,98433],{},"⑤四维数组拼接",[114,98435,98437],{"className":30389,"code":98436,"language":30391,"meta":37,"style":37},"#两个三行六列\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",[120,98438,98439,98443,98471,98499,98524,98550,98554,98567,98572,98576,98588,98593,98597,98609,98614,98619,98631],{"__ignoreMap":37},[123,98440,98441],{"class":125,"line":126},[123,98442,98285],{"class":192},[123,98444,98445,98447,98449,98451,98453,98455,98457,98459,98461,98463,98465,98467,98469],{"class":125,"line":45},[123,98446,95518],{"class":133},[123,98448,179],{"class":129},[123,98450,93013],{"class":133},[123,98452,351],{"class":182},[123,98454,512],{"class":133},[123,98456,459],{"class":182},[123,98458,93018],{"class":133},[123,98460,211],{"class":182},[123,98462,512],{"class":133},[123,98464,205],{"class":182},[123,98466,512],{"class":133},[123,98468,478],{"class":182},[123,98470,140],{"class":133},[123,98472,98473,98475,98477,98479,98481,98483,98485,98487,98489,98491,98493,98495,98497],{"class":125,"line":1189},[123,98474,98318],{"class":133},[123,98476,179],{"class":129},[123,98478,93013],{"class":133},[123,98480,471],{"class":182},[123,98482,512],{"class":133},[123,98484,98329],{"class":182},[123,98486,93018],{"class":133},[123,98488,211],{"class":182},[123,98490,512],{"class":133},[123,98492,205],{"class":182},[123,98494,512],{"class":133},[123,98496,478],{"class":182},[123,98498,140],{"class":133},[123,98500,98501,98504,98506,98508,98510,98512,98514,98516,98518,98520,98522],{"class":125,"line":1204},[123,98502,98503],{"class":133},"aaaa",[123,98505,179],{"class":129},[123,98507,97667],{"class":133},[123,98509,211],{"class":182},[123,98511,512],{"class":133},[123,98513,205],{"class":182},[123,98515,512],{"class":133},[123,98517,205],{"class":182},[123,98519,512],{"class":133},[123,98521,211],{"class":182},[123,98523,140],{"class":133},[123,98525,98526,98529,98531,98534,98536,98538,98540,98542,98544,98546,98548],{"class":125,"line":1210},[123,98527,98528],{"class":133},"bbbb",[123,98530,179],{"class":129},[123,98532,98533],{"class":133},"bbb.reshape(",[123,98535,211],{"class":182},[123,98537,512],{"class":133},[123,98539,205],{"class":182},[123,98541,512],{"class":133},[123,98543,205],{"class":182},[123,98545,512],{"class":133},[123,98547,211],{"class":182},[123,98549,140],{"class":133},[123,98551,98552],{"class":125,"line":1224},[123,98553,98348],{"class":192},[123,98555,98556,98559,98561,98563,98565],{"class":125,"line":1230},[123,98557,98558],{"class":133},"np.concatenate((aaaa,bbbb),",[123,98560,47525],{"class":5226},[123,98562,179],{"class":129},[123,98564,325],{"class":182},[123,98566,98425],{"class":133},[123,98568,98569],{"class":125,"line":1321},[123,98570,98571],{"class":192},"#结果：（4，3，3，2）\n",[123,98573,98574],{"class":125,"line":1327},[123,98575,98380],{"class":192},[123,98577,98578,98580,98582,98584,98586],{"class":125,"line":1339},[123,98579,98558],{"class":133},[123,98581,47525],{"class":5226},[123,98583,179],{"class":129},[123,98585,351],{"class":182},[123,98587,98425],{"class":133},[123,98589,98590],{"class":125,"line":1621},[123,98591,98592],{"class":192},"#结果：（2，6，3，2）\n",[123,98594,98595],{"class":125,"line":1626},[123,98596,98412],{"class":192},[123,98598,98599,98601,98603,98605,98607],{"class":125,"line":1632},[123,98600,98558],{"class":133},[123,98602,47525],{"class":5226},[123,98604,179],{"class":129},[123,98606,211],{"class":182},[123,98608,98425],{"class":133},[123,98610,98611],{"class":125,"line":1637},[123,98612,98613],{"class":192},"#结果：（2，3，6，2）\n",[123,98615,98616],{"class":125,"line":1651},[123,98617,98618],{"class":192},"#axis=3\n",[123,98620,98621,98623,98625,98627,98629],{"class":125,"line":1656},[123,98622,98558],{"class":133},[123,98624,47525],{"class":5226},[123,98626,179],{"class":129},[123,98628,205],{"class":182},[123,98630,98425],{"class":133},[123,98632,98633],{"class":125,"line":1662},[123,98634,98635],{"class":192},"#结果：（2，3，3，4）\n",[65,98637,98639],{"id":98638},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,98641,98642],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,98644,98645],{},"①二维数组",[114,98647,98649],{"className":30389,"code":98648,"language":30391,"meta":37,"style":37},"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",[120,98650,98651,98675,98699,98704,98709],{"__ignoreMap":37},[123,98652,98653,98655,98657,98659,98661,98663,98665,98667,98669,98671,98673],{"class":125,"line":126},[123,98654,93317],{"class":133},[123,98656,179],{"class":129},[123,98658,93013],{"class":133},[123,98660,351],{"class":182},[123,98662,512],{"class":133},[123,98664,657],{"class":182},[123,98666,93018],{"class":133},[123,98668,205],{"class":182},[123,98670,512],{"class":133},[123,98672,427],{"class":182},[123,98674,140],{"class":133},[123,98676,98677,98679,98681,98683,98685,98687,98689,98691,98693,98695,98697],{"class":125,"line":45},[123,98678,98184],{"class":133},[123,98680,179],{"class":129},[123,98682,93013],{"class":133},[123,98684,471],{"class":182},[123,98686,512],{"class":133},[123,98688,776],{"class":182},[123,98690,93018],{"class":133},[123,98692,205],{"class":182},[123,98694,512],{"class":133},[123,98696,427],{"class":182},[123,98698,140],{"class":133},[123,98700,98701],{"class":125,"line":1189},[123,98702,98703],{"class":133},"np.hstack((aa,bb))\n",[123,98705,98706],{"class":125,"line":1204},[123,98707,98708],{"class":192},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[123,98710,98711],{"class":125,"line":1210},[123,98712,98713],{"class":192},"#np.hstack([aa,bb])\n",[14,98715,98230],{},[14,98717,98718],{},[35,98719],{"alt":37,"src":98720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,98722,98723],{},"等效于concatenate()函数中axis=1时的情况",[14,98725,98726],{},"②三维数组",[114,98728,98730],{"className":30389,"code":98729,"language":30391,"meta":37,"style":37},"#两个三行六列\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",[120,98731,98732,98736,98764,98792,98797,98802],{"__ignoreMap":37},[123,98733,98734],{"class":125,"line":126},[123,98735,98285],{"class":192},[123,98737,98738,98740,98742,98744,98746,98748,98750,98752,98754,98756,98758,98760,98762],{"class":125,"line":45},[123,98739,95518],{"class":133},[123,98741,179],{"class":129},[123,98743,93013],{"class":133},[123,98745,351],{"class":182},[123,98747,512],{"class":133},[123,98749,459],{"class":182},[123,98751,93018],{"class":133},[123,98753,211],{"class":182},[123,98755,512],{"class":133},[123,98757,205],{"class":182},[123,98759,512],{"class":133},[123,98761,478],{"class":182},[123,98763,140],{"class":133},[123,98765,98766,98768,98770,98772,98774,98776,98778,98780,98782,98784,98786,98788,98790],{"class":125,"line":1189},[123,98767,98318],{"class":133},[123,98769,179],{"class":129},[123,98771,93013],{"class":133},[123,98773,471],{"class":182},[123,98775,512],{"class":133},[123,98777,98329],{"class":182},[123,98779,93018],{"class":133},[123,98781,211],{"class":182},[123,98783,512],{"class":133},[123,98785,205],{"class":182},[123,98787,512],{"class":133},[123,98789,478],{"class":182},[123,98791,140],{"class":133},[123,98793,98794],{"class":125,"line":1204},[123,98795,98796],{"class":192},"#使用hstack\n",[123,98798,98799],{"class":125,"line":1210},[123,98800,98801],{"class":133},"np.hstack((aaa,bbb)).shape\n",[123,98803,98804],{"class":125,"line":1224},[123,98805,98806],{"class":192},"#输出：（2，6，6）\n",[65,98808,98810],{"id":98809},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,98812,98813],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,98815,98645],{},[114,98817,98819],{"className":30389,"code":98818,"language":30391,"meta":37,"style":37},"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",[120,98820,98821,98845,98869,98874,98879,98884],{"__ignoreMap":37},[123,98822,98823,98825,98827,98829,98831,98833,98835,98837,98839,98841,98843],{"class":125,"line":126},[123,98824,93317],{"class":133},[123,98826,179],{"class":129},[123,98828,93013],{"class":133},[123,98830,351],{"class":182},[123,98832,512],{"class":133},[123,98834,657],{"class":182},[123,98836,93018],{"class":133},[123,98838,205],{"class":182},[123,98840,512],{"class":133},[123,98842,427],{"class":182},[123,98844,140],{"class":133},[123,98846,98847,98849,98851,98853,98855,98857,98859,98861,98863,98865,98867],{"class":125,"line":45},[123,98848,98184],{"class":133},[123,98850,179],{"class":129},[123,98852,93013],{"class":133},[123,98854,471],{"class":182},[123,98856,512],{"class":133},[123,98858,776],{"class":182},[123,98860,93018],{"class":133},[123,98862,205],{"class":182},[123,98864,512],{"class":133},[123,98866,427],{"class":182},[123,98868,140],{"class":133},[123,98870,98871],{"class":125,"line":1189},[123,98872,98873],{"class":192},"#vstack 垂直方向进行堆叠\n",[123,98875,98876],{"class":125,"line":1204},[123,98877,98878],{"class":133},"np.vstack((aa,bb))\n",[123,98880,98881],{"class":125,"line":1210},[123,98882,98883],{"class":192},"#与hstack传的参数类似，等价于：\n",[123,98885,98886],{"class":125,"line":1224},[123,98887,98888],{"class":133},"np.vstack([aa,bb])\n",[14,98890,98230],{},[14,98892,98893],{},[35,98894],{"alt":37,"src":98895},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,98897,98726],{},[114,98899,98901],{"className":30389,"code":98900,"language":30391,"meta":37,"style":37},"#两个三行六列\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",[120,98902,98903,98907,98935,98963,98968,98973],{"__ignoreMap":37},[123,98904,98905],{"class":125,"line":126},[123,98906,98285],{"class":192},[123,98908,98909,98911,98913,98915,98917,98919,98921,98923,98925,98927,98929,98931,98933],{"class":125,"line":45},[123,98910,95518],{"class":133},[123,98912,179],{"class":129},[123,98914,93013],{"class":133},[123,98916,351],{"class":182},[123,98918,512],{"class":133},[123,98920,459],{"class":182},[123,98922,93018],{"class":133},[123,98924,211],{"class":182},[123,98926,512],{"class":133},[123,98928,205],{"class":182},[123,98930,512],{"class":133},[123,98932,478],{"class":182},[123,98934,140],{"class":133},[123,98936,98937,98939,98941,98943,98945,98947,98949,98951,98953,98955,98957,98959,98961],{"class":125,"line":1189},[123,98938,98318],{"class":133},[123,98940,179],{"class":129},[123,98942,93013],{"class":133},[123,98944,471],{"class":182},[123,98946,512],{"class":133},[123,98948,98329],{"class":182},[123,98950,93018],{"class":133},[123,98952,211],{"class":182},[123,98954,512],{"class":133},[123,98956,205],{"class":182},[123,98958,512],{"class":133},[123,98960,478],{"class":182},[123,98962,140],{"class":133},[123,98964,98965],{"class":125,"line":1204},[123,98966,98967],{"class":192},"#使用vstack\n",[123,98969,98970],{"class":125,"line":1210},[123,98971,98972],{"class":133},"np.vstack((aaa,bbb)).shape\n",[123,98974,98975],{"class":125,"line":1224},[123,98976,98977],{"class":192},"#输出：（4，3，6）\n",[65,98979,98981],{"id":98980},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,98983,98984],{},"该方法是三维数组特有的方法",[14,98986,98987],{},"也就是说",[14,98989,98990],{},"一维数组拼接方法用：concatenate()",[14,98992,98993],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,98995,98996],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,98998,98999],{},"四维数组及多维数组只能用concatenate进行拼接",[114,99001,99003],{"className":30389,"code":99002,"language":30391,"meta":37,"style":37},"#两个三行六列\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",[120,99004,99005,99009,99037,99065,99070,99075],{"__ignoreMap":37},[123,99006,99007],{"class":125,"line":126},[123,99008,98285],{"class":192},[123,99010,99011,99013,99015,99017,99019,99021,99023,99025,99027,99029,99031,99033,99035],{"class":125,"line":45},[123,99012,95518],{"class":133},[123,99014,179],{"class":129},[123,99016,93013],{"class":133},[123,99018,351],{"class":182},[123,99020,512],{"class":133},[123,99022,459],{"class":182},[123,99024,93018],{"class":133},[123,99026,211],{"class":182},[123,99028,512],{"class":133},[123,99030,205],{"class":182},[123,99032,512],{"class":133},[123,99034,478],{"class":182},[123,99036,140],{"class":133},[123,99038,99039,99041,99043,99045,99047,99049,99051,99053,99055,99057,99059,99061,99063],{"class":125,"line":1189},[123,99040,98318],{"class":133},[123,99042,179],{"class":129},[123,99044,93013],{"class":133},[123,99046,471],{"class":182},[123,99048,512],{"class":133},[123,99050,98329],{"class":182},[123,99052,93018],{"class":133},[123,99054,211],{"class":182},[123,99056,512],{"class":133},[123,99058,205],{"class":182},[123,99060,512],{"class":133},[123,99062,478],{"class":182},[123,99064,140],{"class":133},[123,99066,99067],{"class":125,"line":1204},[123,99068,99069],{"class":192},"#使用dstack\n",[123,99071,99072],{"class":125,"line":1210},[123,99073,99074],{"class":133},"np.dstack((aaa,bbb)).shape\n",[123,99076,99077],{"class":125,"line":1224},[123,99078,99079],{"class":192},"#结果：（2，3，12）\n",[5136,99081,99082],{},"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":37,"searchDepth":45,"depth":45,"links":99084},[99085,99086,99087,99088],{"id":98024,"depth":45,"text":98025},{"id":98638,"depth":45,"text":98639},{"id":98809,"depth":45,"text":98810},{"id":98980,"depth":45,"text":98981},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98016,"description":47},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99095,"title":99096,"body":99097,"description":47,"extension":48,"meta":99372,"navigation":50,"path":99373,"seo":99374,"stem":99375,"__hash__":99376},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99098,"toc":99370},[99099,99102,99105,99199,99202,99205,99208,99211,99214,99217,99220,99223,99367],[10,99100,99096],{"id":99101},"_7数组转置",[14,99103,99104],{},"使用transpose()函数",[114,99106,99108],{"className":30389,"code":99107,"language":30391,"meta":37,"style":37},"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",[120,99109,99110,99120,99144,99149,99154,99159,99164,99172,99176,99180,99185,99190,99195],{"__ignoreMap":37},[123,99111,99112,99114,99116,99118],{"class":125,"line":126},[123,99113,30403],{"class":129},[123,99115,31391],{"class":133},[123,99117,31394],{"class":129},[123,99119,31397],{"class":133},[123,99121,99122,99124,99126,99128,99130,99132,99134,99136,99138,99140,99142],{"class":125,"line":45},[123,99123,372],{"class":133},[123,99125,179],{"class":129},[123,99127,31728],{"class":133},[123,99129,351],{"class":182},[123,99131,512],{"class":133},[123,99133,657],{"class":182},[123,99135,93018],{"class":133},[123,99137,427],{"class":182},[123,99139,512],{"class":133},[123,99141,205],{"class":182},[123,99143,140],{"class":133},[123,99145,99146],{"class":125,"line":1189},[123,99147,99148],{"class":192},"#二维数组转置\n",[123,99150,99151],{"class":125,"line":1204},[123,99152,99153],{"class":192},"#调用transpose()函数\n",[123,99155,99156],{"class":125,"line":1210},[123,99157,99158],{"class":133},"a.transpose()\n",[123,99160,99161],{"class":125,"line":1224},[123,99162,99163],{"class":192},"#对于二维数组也可以采用.T来实现\n",[123,99165,99166,99169],{"class":125,"line":1230},[123,99167,99168],{"class":133},"a.T",[123,99170,99171],{"class":192},"#与上述代码一样\n",[123,99173,99174],{"class":125,"line":1321},[123,99175,93575],{"class":192},[123,99177,99178],{"class":125,"line":1327},[123,99179,93939],{"class":238},[123,99181,99182],{"class":125,"line":1339},[123,99183,99184],{"class":238},"array([[ 1,  4,  7, 10],\n",[123,99186,99187],{"class":125,"line":1621},[123,99188,99189],{"class":238},"       [ 2,  5,  8, 11],\n",[123,99191,99192],{"class":125,"line":1626},[123,99193,99194],{"class":238},"       [ 3,  6,  9, 12]])\n",[123,99196,99197],{"class":125,"line":1632},[123,99198,93939],{"class":238},[14,99200,99201],{},"也可以使用np.transpose()的形式",[14,99203,99204],{},"#多维数组进行转置 np.transpose()",[14,99206,99207],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99209,99210],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99212,99213],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99215,99216],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99218,99219],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99221,99222],{},"四维及以上的数组也是一样的道理",[114,99224,99226],{"className":30389,"code":99225,"language":30391,"meta":37,"style":37},"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",[120,99227,99228,99256,99261,99266,99271,99289,99294,99326,99331,99336,99341,99362],{"__ignoreMap":37},[123,99229,99230,99232,99234,99236,99238,99240,99242,99244,99246,99248,99250,99252,99254],{"class":125,"line":126},[123,99231,954],{"class":133},[123,99233,179],{"class":129},[123,99235,93013],{"class":133},[123,99237,351],{"class":182},[123,99239,512],{"class":133},[123,99241,459],{"class":182},[123,99243,93018],{"class":133},[123,99245,205],{"class":182},[123,99247,512],{"class":133},[123,99249,478],{"class":182},[123,99251,512],{"class":133},[123,99253,211],{"class":182},[123,99255,140],{"class":133},[123,99257,99258],{"class":125,"line":45},[123,99259,99260],{"class":133},"x.shape\n",[123,99262,99263],{"class":125,"line":1189},[123,99264,99265],{"class":192},"#结果：（3,6,2）\n",[123,99267,99268],{"class":125,"line":1204},[123,99269,99270],{"class":192},"#使用np.transpose()进行转置 变为(2,6,3)\n",[123,99272,99273,99276,99278,99280,99282,99284,99286],{"class":125,"line":1210},[123,99274,99275],{"class":133},"np.transpose(x,(",[123,99277,211],{"class":182},[123,99279,512],{"class":133},[123,99281,351],{"class":182},[123,99283,512],{"class":133},[123,99285,325],{"class":182},[123,99287,99288],{"class":133},")).shape\n",[123,99290,99291],{"class":125,"line":1224},[123,99292,99293],{"class":192},"#结果：(2,6,3)\n",[123,99295,99296,99298,99300,99302,99304,99306,99308,99310,99312,99314,99316,99318,99320,99322,99324],{"class":125,"line":1230},[123,99297,98503],{"class":133},[123,99299,179],{"class":129},[123,99301,93013],{"class":133},[123,99303,351],{"class":182},[123,99305,512],{"class":133},[123,99307,459],{"class":182},[123,99309,93018],{"class":133},[123,99311,205],{"class":182},[123,99313,512],{"class":133},[123,99315,211],{"class":182},[123,99317,512],{"class":133},[123,99319,351],{"class":182},[123,99321,512],{"class":133},[123,99323,478],{"class":182},[123,99325,140],{"class":133},[123,99327,99328],{"class":125,"line":1321},[123,99329,99330],{"class":133},"aaaa.shape\n",[123,99332,99333],{"class":125,"line":1327},[123,99334,99335],{"class":192},"#结果：（3，2，1，6）\n",[123,99337,99338],{"class":125,"line":1339},[123,99339,99340],{"class":192},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[123,99342,99343,99346,99348,99350,99352,99354,99356,99358,99360],{"class":125,"line":1621},[123,99344,99345],{"class":133},"np.transpose(aaaa,(",[123,99347,351],{"class":182},[123,99349,512],{"class":133},[123,99351,211],{"class":182},[123,99353,512],{"class":133},[123,99355,325],{"class":182},[123,99357,512],{"class":133},[123,99359,205],{"class":182},[123,99361,99288],{"class":133},[123,99363,99364],{"class":125,"line":1626},[123,99365,99366],{"class":192},"#结果：(2,1,3,6)\n",[5136,99368,99369],{},"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":37,"searchDepth":45,"depth":45,"links":99371},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99096,"description":47},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99378,"title":99379,"body":99380,"description":47,"extension":48,"meta":100114,"navigation":50,"path":100115,"seo":100116,"stem":100117,"__hash__":100118},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99381,"toc":100112},[99382,99385,99388,99391,99394,99397,99400,99403,99406,99515,99518,99521,100109],[10,99383,99379],{"id":99384},"_8数组分割",[14,99386,99387],{},"split分割",[14,99389,99390],{},"numpy.split(ary,indics_or_sections,axis)",[14,99392,99393],{},"解释：",[14,99395,99396],{},"ary:被分割的数组",[14,99398,99399],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99401,99402],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99404,99405],{},"①一维数组的分割",[114,99407,99409],{"className":30389,"code":99408,"language":30391,"meta":37,"style":37},"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",[120,99410,99411,99427,99432,99441,99445,99450,99458,99462,99467,99472,99485,99489,99494,99506,99510],{"__ignoreMap":37},[123,99412,99413,99415,99417,99419,99421,99423,99425],{"class":125,"line":126},[123,99414,372],{"class":133},[123,99416,179],{"class":129},[123,99418,93013],{"class":133},[123,99420,351],{"class":182},[123,99422,512],{"class":133},[123,99424,554],{"class":182},[123,99426,140],{"class":133},[123,99428,99429],{"class":125,"line":45},[123,99430,99431],{"class":192},"#如果传入整数，必须能够平分，否则会报错\n",[123,99433,99434,99437,99439],{"class":125,"line":1189},[123,99435,99436],{"class":133},"np.split(a,",[123,99438,211],{"class":182},[123,99440,140],{"class":133},[123,99442,99443],{"class":125,"line":1204},[123,99444,93575],{"class":192},[123,99446,99447],{"class":125,"line":1210},[123,99448,99449],{"class":192},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[123,99451,99452,99454,99456],{"class":125,"line":1224},[123,99453,99436],{"class":133},[123,99455,427],{"class":182},[123,99457,140],{"class":133},[123,99459,99460],{"class":125,"line":1230},[123,99461,93575],{"class":192},[123,99463,99464],{"class":125,"line":1321},[123,99465,99466],{"class":192},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[123,99468,99469],{"class":125,"line":1327},[123,99470,99471],{"class":192},"#传入数组\n",[123,99473,99474,99477,99479,99481,99483],{"class":125,"line":1339},[123,99475,99476],{"class":133},"np.split(a,[",[123,99478,205],{"class":182},[123,99480,512],{"class":133},[123,99482,453],{"class":182},[123,99484,4666],{"class":133},[123,99486,99487],{"class":125,"line":1621},[123,99488,93575],{"class":192},[123,99490,99491],{"class":125,"line":1626},[123,99492,99493],{"class":192},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[123,99495,99496,99498,99500,99502,99504],{"class":125,"line":1632},[123,99497,99476],{"class":133},[123,99499,453],{"class":182},[123,99501,512],{"class":133},[123,99503,503],{"class":182},[123,99505,4666],{"class":133},[123,99507,99508],{"class":125,"line":1637},[123,99509,93575],{"class":192},[123,99511,99512],{"class":125,"line":1651},[123,99513,99514],{"class":192},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99516,99517],{},"②二维数组的分割",[14,99519,99520],{},"使用split()",[114,99522,99524],{"className":30389,"code":99523,"language":30391,"meta":37,"style":37},"#二维数组分割\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",[120,99525,99526,99531,99555,99560,99569,99573,99577,99582,99587,99592,99597,99602,99607,99612,99616,99629,99633,99637,99641,99645,99649,99654,99659,99664,99668,99673,99689,99693,99697,99702,99707,99712,99717,99722,99727,99732,99737,99742,99747,99752,99757,99762,99767,99772,99777,99782,99787,99791,99795,99815,99819,99823,99828,99833,99838,99843,99848,99853,99858,99863,99868,99873,99878,99883,99888,99893,99898,99903,99908,99913,99917,99922,99931,99935,99939,99943,99947,99951,99955,99959,99963,99967,99976,99980,99984,99988,99992,99996,100000,100004,100008,100012,100016,100020,100024,100028,100032,100036,100040,100044,100048,100052,100056,100060,100073,100077,100081,100085,100089,100093,100097,100101,100105],{"__ignoreMap":37},[123,99527,99528],{"class":125,"line":126},[123,99529,99530],{"class":192},"#二维数组分割\n",[123,99532,99533,99535,99537,99539,99541,99543,99545,99547,99549,99551,99553],{"class":125,"line":45},[123,99534,93317],{"class":133},[123,99536,179],{"class":129},[123,99538,93013],{"class":133},[123,99540,351],{"class":182},[123,99542,512],{"class":133},[123,99544,459],{"class":182},[123,99546,93018],{"class":133},[123,99548,478],{"class":182},[123,99550,512],{"class":133},[123,99552,478],{"class":182},[123,99554,140],{"class":133},[123,99556,99557],{"class":125,"line":1189},[123,99558,99559],{"class":192},"#默认axis=0  传入整数平均分,按行来的\n",[123,99561,99562,99565,99567],{"class":125,"line":1204},[123,99563,99564],{"class":133},"np.split(aa,",[123,99566,205],{"class":182},[123,99568,140],{"class":133},[123,99570,99571],{"class":125,"line":1210},[123,99572,95761],{"class":192},[123,99574,99575],{"class":125,"line":1224},[123,99576,93939],{"class":238},[123,99578,99579],{"class":125,"line":1230},[123,99580,99581],{"class":238},"[array([[ 1,  2,  3,  4,  5,  6],\n",[123,99583,99584],{"class":125,"line":1321},[123,99585,99586],{"class":238},"        [ 7,  8,  9, 10, 11, 12]]),\n",[123,99588,99589],{"class":125,"line":1327},[123,99590,99591],{"class":238}," array([[13, 14, 15, 16, 17, 18],\n",[123,99593,99594],{"class":125,"line":1339},[123,99595,99596],{"class":238},"        [19, 20, 21, 22, 23, 24]]),\n",[123,99598,99599],{"class":125,"line":1621},[123,99600,99601],{"class":238}," array([[25, 26, 27, 28, 29, 30],\n",[123,99603,99604],{"class":125,"line":1626},[123,99605,99606],{"class":238},"        [31, 32, 33, 34, 35, 36]])]\n",[123,99608,99609],{"class":125,"line":1632},[123,99610,99611],{"class":238}," '''\n",[123,99613,99614],{"class":125,"line":1637},[123,99615,99471],{"class":192},[123,99617,99618,99621,99623,99625,99627],{"class":125,"line":1651},[123,99619,99620],{"class":133},"np.split(aa,[",[123,99622,211],{"class":182},[123,99624,512],{"class":133},[123,99626,453],{"class":182},[123,99628,4666],{"class":133},[123,99630,99631],{"class":125,"line":1656},[123,99632,95761],{"class":192},[123,99634,99635],{"class":125,"line":1662},[123,99636,93939],{"class":238},[123,99638,99639],{"class":125,"line":1683},[123,99640,99581],{"class":238},[123,99642,99643],{"class":125,"line":1688},[123,99644,99586],{"class":238},[123,99646,99647],{"class":125,"line":1702},[123,99648,99591],{"class":238},[123,99650,99651],{"class":125,"line":1707},[123,99652,99653],{"class":238},"        [19, 20, 21, 22, 23, 24],\n",[123,99655,99656],{"class":125,"line":1736},[123,99657,99658],{"class":238},"        [25, 26, 27, 28, 29, 30]]),\n",[123,99660,99661],{"class":125,"line":1741},[123,99662,99663],{"class":238}," array([[31, 32, 33, 34, 35, 36]])]\n",[123,99665,99666],{"class":125,"line":1758},[123,99667,93939],{"class":238},[123,99669,99670],{"class":125,"line":1763},[123,99671,99672],{"class":192},"#axis=1 按照列来分\n",[123,99674,99675,99677,99679,99681,99683,99685,99687],{"class":125,"line":1768},[123,99676,99564],{"class":133},[123,99678,205],{"class":182},[123,99680,512],{"class":133},[123,99682,47525],{"class":5226},[123,99684,179],{"class":129},[123,99686,351],{"class":182},[123,99688,140],{"class":133},[123,99690,99691],{"class":125,"line":1773},[123,99692,95761],{"class":192},[123,99694,99695],{"class":125,"line":1787},[123,99696,93939],{"class":238},[123,99698,99699],{"class":125,"line":1792},[123,99700,99701],{"class":238},"[array([[ 1,  2],\n",[123,99703,99704],{"class":125,"line":2586},[123,99705,99706],{"class":238},"        [ 7,  8],\n",[123,99708,99709],{"class":125,"line":2600},[123,99710,99711],{"class":238},"        [13, 14],\n",[123,99713,99714],{"class":125,"line":2608},[123,99715,99716],{"class":238},"        [19, 20],\n",[123,99718,99719],{"class":125,"line":2613},[123,99720,99721],{"class":238},"        [25, 26],\n",[123,99723,99724],{"class":125,"line":2619},[123,99725,99726],{"class":238},"        [31, 32]]),\n",[123,99728,99729],{"class":125,"line":2625},[123,99730,99731],{"class":238}," array([[ 3,  4],\n",[123,99733,99734],{"class":125,"line":2630},[123,99735,99736],{"class":238},"        [ 9, 10],\n",[123,99738,99739],{"class":125,"line":7958},[123,99740,99741],{"class":238},"        [15, 16],\n",[123,99743,99744],{"class":125,"line":7982},[123,99745,99746],{"class":238},"        [21, 22],\n",[123,99748,99749],{"class":125,"line":7987},[123,99750,99751],{"class":238},"        [27, 28],\n",[123,99753,99754],{"class":125,"line":7993},[123,99755,99756],{"class":238},"        [33, 34]]),\n",[123,99758,99759],{"class":125,"line":8020},[123,99760,99761],{"class":238}," array([[ 5,  6],\n",[123,99763,99764],{"class":125,"line":8025},[123,99765,99766],{"class":238},"        [11, 12],\n",[123,99768,99769],{"class":125,"line":8031},[123,99770,99771],{"class":238},"        [17, 18],\n",[123,99773,99774],{"class":125,"line":8043},[123,99775,99776],{"class":238},"        [23, 24],\n",[123,99778,99779],{"class":125,"line":8055},[123,99780,99781],{"class":238},"        [29, 30],\n",[123,99783,99784],{"class":125,"line":8067},[123,99785,99786],{"class":238},"        [35, 36]])]\n",[123,99788,99789],{"class":125,"line":9726},[123,99790,99611],{"class":238},[123,99792,99793],{"class":125,"line":9751},[123,99794,99471],{"class":192},[123,99796,99797,99799,99801,99803,99805,99807,99809,99811,99813],{"class":125,"line":9774},[123,99798,99620],{"class":133},[123,99800,351],{"class":182},[123,99802,512],{"class":133},[123,99804,211],{"class":182},[123,99806,41620],{"class":133},[123,99808,47525],{"class":5226},[123,99810,179],{"class":129},[123,99812,351],{"class":182},[123,99814,140],{"class":133},[123,99816,99817],{"class":125,"line":9798},[123,99818,93575],{"class":192},[123,99820,99821],{"class":125,"line":9803},[123,99822,93939],{"class":238},[123,99824,99825],{"class":125,"line":9808},[123,99826,99827],{"class":238},"[array([[ 1],\n",[123,99829,99830],{"class":125,"line":9813},[123,99831,99832],{"class":238},"        [ 7],\n",[123,99834,99835],{"class":125,"line":9822},[123,99836,99837],{"class":238},"        [13],\n",[123,99839,99840],{"class":125,"line":9827},[123,99841,99842],{"class":238},"        [19],\n",[123,99844,99845],{"class":125,"line":9833},[123,99846,99847],{"class":238},"        [25],\n",[123,99849,99850],{"class":125,"line":9854},[123,99851,99852],{"class":238},"        [31]]),\n",[123,99854,99855],{"class":125,"line":9860},[123,99856,99857],{"class":238}," array([[ 2],\n",[123,99859,99860],{"class":125,"line":9874},[123,99861,99862],{"class":238},"        [ 8],\n",[123,99864,99865],{"class":125,"line":9880},[123,99866,99867],{"class":238},"        [14],\n",[123,99869,99870],{"class":125,"line":9907},[123,99871,99872],{"class":238},"        [20],\n",[123,99874,99875],{"class":125,"line":9916},[123,99876,99877],{"class":238},"        [26],\n",[123,99879,99880],{"class":125,"line":9922},[123,99881,99882],{"class":238},"        [32]]),\n",[123,99884,99885],{"class":125,"line":9930},[123,99886,99887],{"class":238}," array([[ 3,  4,  5,  6],\n",[123,99889,99890],{"class":125,"line":9935},[123,99891,99892],{"class":238},"        [ 9, 10, 11, 12],\n",[123,99894,99895],{"class":125,"line":16614},[123,99896,99897],{"class":238},"        [15, 16, 17, 18],\n",[123,99899,99900],{"class":125,"line":16620},[123,99901,99902],{"class":238},"        [21, 22, 23, 24],\n",[123,99904,99905],{"class":125,"line":16643},[123,99906,99907],{"class":238},"        [27, 28, 29, 30],\n",[123,99909,99910],{"class":125,"line":16649},[123,99911,99912],{"class":238},"        [33, 34, 35, 36]])]\n",[123,99914,99915],{"class":125,"line":16672},[123,99916,93939],{"class":238},[123,99918,99919],{"class":125,"line":16686},[123,99920,99921],{"class":192},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[123,99923,99924,99927,99929],{"class":125,"line":16706},[123,99925,99926],{"class":133},"np.vsplit(aa,",[123,99928,205],{"class":182},[123,99930,140],{"class":133},[123,99932,99933],{"class":125,"line":16712},[123,99934,93575],{"class":192},[123,99936,99937],{"class":125,"line":16723},[123,99938,93939],{"class":238},[123,99940,99941],{"class":125,"line":16746},[123,99942,99581],{"class":238},[123,99944,99945],{"class":125,"line":16768},[123,99946,99586],{"class":238},[123,99948,99949],{"class":125,"line":16773},[123,99950,99591],{"class":238},[123,99952,99953],{"class":125,"line":16779},[123,99954,99596],{"class":238},[123,99956,99957],{"class":125,"line":16793},[123,99958,99601],{"class":238},[123,99960,99961],{"class":125,"line":16806},[123,99962,99606],{"class":238},[123,99964,99965],{"class":125,"line":16811},[123,99966,93939],{"class":238},[123,99968,99969,99972,99974],{"class":125,"line":16825},[123,99970,99971],{"class":133},"np.hsplit(aa,",[123,99973,205],{"class":182},[123,99975,140],{"class":133},[123,99977,99978],{"class":125,"line":16830},[123,99979,93575],{"class":192},[123,99981,99982],{"class":125,"line":16836},[123,99983,93939],{"class":238},[123,99985,99986],{"class":125,"line":16841},[123,99987,99701],{"class":238},[123,99989,99990],{"class":125,"line":16855},[123,99991,99706],{"class":238},[123,99993,99994],{"class":125,"line":16860},[123,99995,99711],{"class":238},[123,99997,99998],{"class":125,"line":16865},[123,99999,99716],{"class":238},[123,100001,100002],{"class":125,"line":16879},[123,100003,99721],{"class":238},[123,100005,100006],{"class":125,"line":16891},[123,100007,99726],{"class":238},[123,100009,100010],{"class":125,"line":16896},[123,100011,99731],{"class":238},[123,100013,100014],{"class":125,"line":16909},[123,100015,99736],{"class":238},[123,100017,100018],{"class":125,"line":16914},[123,100019,99741],{"class":238},[123,100021,100022],{"class":125,"line":16919},[123,100023,99746],{"class":238},[123,100025,100026],{"class":125,"line":16924},[123,100027,99751],{"class":238},[123,100029,100030],{"class":125,"line":16937},[123,100031,99756],{"class":238},[123,100033,100034],{"class":125,"line":16942},[123,100035,99761],{"class":238},[123,100037,100038],{"class":125,"line":32644},[123,100039,99766],{"class":238},[123,100041,100042],{"class":125,"line":32650},[123,100043,99771],{"class":238},[123,100045,100046],{"class":125,"line":32656},[123,100047,99776],{"class":238},[123,100049,100050],{"class":125,"line":32662},[123,100051,99781],{"class":238},[123,100053,100054],{"class":125,"line":32668},[123,100055,99786],{"class":238},[123,100057,100058],{"class":125,"line":32679},[123,100059,93939],{"class":238},[123,100061,100062,100065,100067,100069,100071],{"class":125,"line":32685},[123,100063,100064],{"class":133},"np.vsplit(aa,[",[123,100066,211],{"class":182},[123,100068,512],{"class":133},[123,100070,453],{"class":182},[123,100072,4666],{"class":133},[123,100074,100075],{"class":125,"line":32705},[123,100076,93575],{"class":192},[123,100078,100079],{"class":125,"line":32711},[123,100080,93939],{"class":238},[123,100082,100083],{"class":125,"line":32722},[123,100084,99581],{"class":238},[123,100086,100087],{"class":125,"line":32728},[123,100088,99586],{"class":238},[123,100090,100091],{"class":125,"line":32734},[123,100092,99591],{"class":238},[123,100094,100095],{"class":125,"line":32740},[123,100096,99653],{"class":238},[123,100098,100099],{"class":125,"line":32746},[123,100100,99658],{"class":238},[123,100102,100103],{"class":125,"line":32752},[123,100104,99663],{"class":238},[123,100106,100107],{"class":125,"line":32758},[123,100108,99611],{"class":238},[5136,100110,100111],{},"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":37,"searchDepth":45,"depth":45,"links":100113},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99379,"description":47},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100120,"title":100121,"body":100122,"description":47,"extension":48,"meta":100616,"navigation":50,"path":100617,"seo":100618,"stem":100619,"__hash__":100620},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100123,"toc":100607},[100124,100127,100130,100155,100159,100218,100270,100274,100276,100312,100366,100368,100406,100477,100481,100486,100490,100493,100526,100529,100533,100536,100539,100542,100545,100550,100554,100557,100560,100563,100566,100571,100575,100580,100583,100604],[10,100125,100121],{"id":100126},"_9数学函数",[14,100128,100129],{},"补充回顾：python的列表推导式",[114,100131,100133],{"className":30389,"code":100132,"language":30391,"meta":37,"style":37},"[1\u002Fi for i in a]\n",[120,100134,100135],{"__ignoreMap":37},[123,100136,100137,100139,100141,100143,100146,100148,100150,100152],{"class":125,"line":126},[123,100138,1024],{"class":133},[123,100140,351],{"class":182},[123,100142,718],{"class":129},[123,100144,100145],{"class":133},"i ",[123,100147,3034],{"class":129},[123,100149,9448],{"class":133},[123,100151,26054],{"class":129},[123,100153,100154],{"class":133}," a]\n",[65,100156,100158],{"id":100157},"_91-求倒数","9.1 求倒数",[114,100160,100162],{"className":30389,"code":100161,"language":30391,"meta":37,"style":37},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[120,100163,100164,100169,100197,100209],{"__ignoreMap":37},[123,100165,100166],{"class":125,"line":126},[123,100167,100168],{"class":192},"#数组求倒数\n",[123,100170,100171,100173,100175,100177,100179,100181,100183,100185,100187,100189,100191,100193,100195],{"class":125,"line":45},[123,100172,372],{"class":133},[123,100174,179],{"class":129},[123,100176,1024],{"class":133},[123,100178,351],{"class":182},[123,100180,512],{"class":133},[123,100182,211],{"class":182},[123,100184,512],{"class":133},[123,100186,205],{"class":182},[123,100188,512],{"class":133},[123,100190,427],{"class":182},[123,100192,512],{"class":133},[123,100194,453],{"class":182},[123,100196,33257],{"class":133},[123,100198,100199,100201,100203,100206],{"class":125,"line":1189},[123,100200,397],{"class":133},[123,100202,179],{"class":129},[123,100204,100205],{"class":133},"np.array(a)",[123,100207,100208],{"class":192},"#将列表转换为数组\n",[123,100210,100211,100213,100215],{"class":125,"line":1204},[123,100212,351],{"class":182},[123,100214,718],{"class":129},[123,100216,100217],{"class":133},"b\n",[114,100219,100221],{"className":30389,"code":100220,"language":30391,"meta":37,"style":37},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[120,100222,100223,100251,100260,100265],{"__ignoreMap":37},[123,100224,100225,100227,100229,100231,100233,100235,100237,100239,100241,100243,100245,100247,100249],{"class":125,"line":126},[123,100226,372],{"class":133},[123,100228,179],{"class":129},[123,100230,1024],{"class":133},[123,100232,351],{"class":182},[123,100234,512],{"class":133},[123,100236,211],{"class":182},[123,100238,512],{"class":133},[123,100240,205],{"class":182},[123,100242,512],{"class":133},[123,100244,427],{"class":182},[123,100246,512],{"class":133},[123,100248,453],{"class":182},[123,100250,33257],{"class":133},[123,100252,100253,100255,100257],{"class":125,"line":45},[123,100254,397],{"class":133},[123,100256,179],{"class":129},[123,100258,100259],{"class":133},"np.array(a)\n",[123,100261,100262],{"class":125,"line":1189},[123,100263,100264],{"class":192},"#调用numpy中的函数reciprocal()\n",[123,100266,100267],{"class":125,"line":1204},[123,100268,100269],{"class":133},"np.reciprocal(b)\n",[65,100271,100273],{"id":100272},"_92-求平方","9.2 求平方",[14,100275,94541],{},[114,100277,100279],{"className":30389,"code":100278,"language":30391,"meta":37,"style":37},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[120,100280,100281,100286,100291,100307],{"__ignoreMap":37},[123,100282,100283],{"class":125,"line":126},[123,100284,100285],{"class":192},"#square()，求平方\n",[123,100287,100288],{"class":125,"line":45},[123,100289,100290],{"class":192},"#一维数组\n",[123,100292,100293,100295,100297,100299,100301,100303,100305],{"class":125,"line":1189},[123,100294,372],{"class":133},[123,100296,179],{"class":129},[123,100298,93013],{"class":133},[123,100300,351],{"class":182},[123,100302,512],{"class":133},[123,100304,580],{"class":182},[123,100306,140],{"class":133},[123,100308,100309],{"class":125,"line":1204},[123,100310,100311],{"class":133},"np.square(a)\n",[114,100313,100315],{"className":30389,"code":100314,"language":30391,"meta":37,"style":37},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[120,100316,100317,100322,100327,100348],{"__ignoreMap":37},[123,100318,100319],{"class":125,"line":126},[123,100320,100321],{"class":192},"#或者通过循环遍历的形式来计算\n",[123,100323,100324],{"class":125,"line":45},[123,100325,100326],{"class":192},"#这是一个列表\n",[123,100328,100329,100332,100334,100336,100338,100340,100342,100345],{"class":125,"line":1189},[123,100330,100331],{"class":133},"[i",[123,100333,589],{"class":129},[123,100335,100145],{"class":133},[123,100337,3034],{"class":129},[123,100339,9448],{"class":133},[123,100341,26054],{"class":129},[123,100343,100344],{"class":133}," a]",[123,100346,100347],{"class":192},"#这个求完之后在数列当中\n",[123,100349,100350,100353,100355,100357,100359,100361,100363],{"class":125,"line":1204},[123,100351,100352],{"class":133},"np.array([i",[123,100354,589],{"class":129},[123,100356,100145],{"class":133},[123,100358,3034],{"class":129},[123,100360,9448],{"class":133},[123,100362,26054],{"class":129},[123,100364,100365],{"class":133}," a])\n",[14,100367,93302],{},[114,100369,100371],{"className":30389,"code":100370,"language":30391,"meta":37,"style":37},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[120,100372,100373,100377,100401],{"__ignoreMap":37},[123,100374,100375],{"class":125,"line":126},[123,100376,93312],{"class":192},[123,100378,100379,100381,100383,100385,100387,100389,100391,100393,100395,100397,100399],{"class":125,"line":45},[123,100380,93317],{"class":133},[123,100382,179],{"class":129},[123,100384,93013],{"class":133},[123,100386,351],{"class":182},[123,100388,512],{"class":133},[123,100390,657],{"class":182},[123,100392,93018],{"class":133},[123,100394,427],{"class":182},[123,100396,512],{"class":133},[123,100398,205],{"class":182},[123,100400,140],{"class":133},[123,100402,100403],{"class":125,"line":1189},[123,100404,100405],{"class":133},"np.square(aa)\n",[114,100407,100409],{"className":30389,"code":100408,"language":30391,"meta":37,"style":37},"#传统的方式\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",[120,100410,100411,100416,100425,100441,100457,100472],{"__ignoreMap":37},[123,100412,100413],{"class":125,"line":126},[123,100414,100415],{"class":192},"#传统的方式\n",[123,100417,100418,100420,100422],{"class":125,"line":45},[123,100419,98184],{"class":133},[123,100421,179],{"class":129},[123,100423,100424],{"class":133},"np.empty_like(aa)\n",[123,100426,100427,100429,100431,100433,100435,100437,100439],{"class":125,"line":1189},[123,100428,3034],{"class":129},[123,100430,9448],{"class":133},[123,100432,26054],{"class":129},[123,100434,32454],{"class":182},[123,100436,134],{"class":133},[123,100438,427],{"class":182},[123,100440,30797],{"class":133},[123,100442,100443,100445,100447,100449,100451,100453,100455],{"class":125,"line":1204},[123,100444,3210],{"class":129},[123,100446,9510],{"class":133},[123,100448,26054],{"class":129},[123,100450,32454],{"class":182},[123,100452,134],{"class":133},[123,100454,205],{"class":182},[123,100456,30797],{"class":133},[123,100458,100459,100462,100464,100467,100469],{"class":125,"line":1210},[123,100460,100461],{"class":133},"        bb[i,j]",[123,100463,179],{"class":129},[123,100465,100466],{"class":133},"aa[i,j]",[123,100468,589],{"class":129},[123,100470,100471],{"class":133},"aa[i,j]\n",[123,100473,100474],{"class":125,"line":1224},[123,100475,100476],{"class":133},"bb\n",[65,100478,100480],{"id":100479},"_93-求各元素的符号","9.3 求各元素的符号",[14,100482,100483],{},[35,100484],{"alt":37,"src":100485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[65,100487,100489],{"id":100488},"_94-modf函数","9.4 modf函数",[14,100491,100492],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[114,100494,100496],{"className":30389,"code":100495,"language":30391,"meta":37,"style":37},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[120,100497,100498,100521],{"__ignoreMap":37},[123,100499,100500,100502,100504,100506,100508,100510,100512,100514,100516,100519],{"class":125,"line":126},[123,100501,372],{"class":133},[123,100503,179],{"class":129},[123,100505,93013],{"class":133},[123,100507,666],{"class":129},[123,100509,580],{"class":182},[123,100511,512],{"class":133},[123,100513,580],{"class":182},[123,100515,512],{"class":133},[123,100517,100518],{"class":182},"0.3",[123,100520,140],{"class":133},[123,100522,100523],{"class":125,"line":45},[123,100524,100525],{"class":133},"np.modf(a)\n",[14,100527,100528],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[65,100530,100532],{"id":100531},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100534,100535],{},"np.cell()",[14,100537,100538],{},"np.floor()",[14,100540,100541],{},"np.rint()",[14,100543,100544],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100546,100547],{},[35,100548],{"alt":37,"src":100549},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[65,100551,100553],{"id":100552},"_96-around函数","9.6 around()函数",[14,100555,100556],{},"around()函数也可以实现对数的小数位数进行操作",[14,100558,100559],{},"其中的参数：",[14,100561,100562],{},"1.要传的数组",[14,100564,100565],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,100567,100568],{},[35,100569],{"alt":37,"src":100570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[65,100572,100574],{"id":100573},"_97-三角函数","9.7 三角函数",[14,100576,100577],{},[35,100578],{"alt":37,"src":100579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,100581,100582],{},"引入图像模块非常重要",[114,100584,100586],{"className":30389,"code":100585,"language":30391,"meta":37,"style":37},"from matplotlib import pyplot as plt\n",[120,100587,100588],{"__ignoreMap":37},[123,100589,100590,100592,100595,100597,100600,100602],{"class":125,"line":126},[123,100591,30748],{"class":129},[123,100593,100594],{"class":133}," matplotlib ",[123,100596,30403],{"class":129},[123,100598,100599],{"class":133}," pyplot ",[123,100601,31394],{"class":129},[123,100603,31448],{"class":133},[5136,100605,100606],{},"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":37,"searchDepth":45,"depth":45,"links":100608},[100609,100610,100611,100612,100613,100614,100615],{"id":100157,"depth":45,"text":100158},{"id":100272,"depth":45,"text":100273},{"id":100479,"depth":45,"text":100480},{"id":100488,"depth":45,"text":100489},{"id":100531,"depth":45,"text":100532},{"id":100552,"depth":45,"text":100553},{"id":100573,"depth":45,"text":100574},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100121,"description":47},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100622,"title":100623,"body":100624,"description":47,"extension":48,"meta":100628,"navigation":50,"path":100629,"seo":100630,"stem":100631,"__hash__":100632},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100625,"toc":100626},[],{"title":37,"searchDepth":45,"depth":45,"links":100627},[],{"category":50431},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100623,"description":47},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100634,"title":100635,"body":100636,"description":37,"extension":48,"meta":102644,"navigation":50,"path":102645,"seo":102646,"stem":102647,"__hash__":102648},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100637,"toc":102620},[100638,100641,100645,100648,100651,100657,100660,100683,100686,100720,100723,100764,100768,100771,100864,100867,100911,100914,100931,100934,100948,100951,100954,100999,101002,101039,101043,101046,101052,101057,101077,101081,101084,101150,101153,101171,101175,101178,101207,101217,101223,101227,101230,101236,101247,101251,101254,101284,101287,101567,101570,101573,101584,101587,101590,101612,101619,101622,101640,101643,101646,101660,101668,101671,101697,101703,101706,101709,101719,101731,101751,101760,101780,101790,101814,101827,101841,101846,101887,101904,101929,101941,101961,101967,102012,102031,102048,102061,102077,102084,102096,102105,102140,102161,102186,102199,102223,102238,102263,102266,102287,102296,102299,102310,102314,102317,102323,102335,102342,102346,102349,102361,102364,102378,102381,102391,102401,102404,102444,102447,102451,102457,102460,102474,102478,102481,102514,102518,102521,102544,102552,102555,102561,102567,102570,102573,102601,102605,102608,102614,102617],[10,100639,100635],{"id":100640},"_1环境安装与第一个-mujoco-程序",[65,100642,100644],{"id":100643},"_1目标说明","1.目标说明",[14,100646,100647],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,100649,100650],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[114,100652,100655],{"className":100653,"code":100654,"language":5197,"meta":37},[5195],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[120,100656,100654],{"__ignoreMap":37},[14,100658,100659],{},"需要掌握:",[77,100661,100662,100665,100668,100673,100678],{},[80,100663,100664],{},"Fedora 44 下 MuJoCo 的系统依赖",[80,100666,100667],{},"Python 虚拟环境创建",[80,100669,100670],{},[120,100671,100672],{},"mujoco.MjModel",[80,100674,100675],{},[120,100676,100677],{},"mujoco.MjData",[80,100679,100680],{},[120,100681,100682],{},"mujoco.mj_step(model, data)",[14,100684,100685],{},"MuJoCo 中最重要的两个对象:",[271,100687,100688,100698],{},[274,100689,100690],{},[277,100691,100692,100695],{},[280,100693,100694],{"align":23746},"对象",[280,100696,100697],{"align":23746},"含义",[318,100699,100700,100710],{},[277,100701,100702,100707],{},[323,100703,100704],{"align":23746},[120,100705,100706],{},"MjModel",[323,100708,100709],{"align":23746},"模型结构，来自 XML，基本不随时间变化",[277,100711,100712,100717],{},[323,100713,100714],{"align":23746},[120,100715,100716],{},"MjData",[323,100718,100719],{"align":23746},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,100721,100722],{},"可以先用一个类比理解：",[271,100724,100725,100735],{},[274,100726,100727],{},[277,100728,100729,100732],{},[280,100730,100731],{"align":23746},"类比",[280,100733,100734],{"align":23746},"MuJoCo 对象",[318,100736,100737,100746,100755],{},[277,100738,100739,100742],{},[323,100740,100741],{"align":23746},"游戏地图和角色配置",[323,100743,100744],{"align":23746},[120,100745,100706],{},[277,100747,100748,100751],{},[323,100749,100750],{"align":23746},"游戏运行到当前帧的状态",[323,100752,100753],{"align":23746},[120,100754,100716],{},[277,100756,100757,100760],{},[323,100758,100759],{"align":23746},"前进一帧",[323,100761,100762],{"align":23746},[120,100763,100682],{},[65,100765,100767],{"id":100766},"_2环境与依赖安装","2.环境与依赖安装",[14,100769,100770],{},"Fedora 44 系统依赖:",[114,100772,100774],{"className":23832,"code":100773,"language":23834,"meta":37,"style":37},"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",[120,100775,100776,100788,100801,100814,100824,100834,100853],{"__ignoreMap":37},[123,100777,100778,100780,100782,100784,100786],{"class":125,"line":126},[123,100779,24587],{"class":1972},[123,100781,26326],{"class":238},[123,100783,23844],{"class":238},[123,100785,26411],{"class":182},[123,100787,24689],{"class":182},[123,100789,100790,100793,100796,100799],{"class":125,"line":45},[123,100791,100792],{"class":238},"  python3",[123,100794,100795],{"class":238}," python3-pip",[123,100797,100798],{"class":238}," python3-virtualenv",[123,100800,24689],{"class":182},[123,100802,100803,100806,100809,100812],{"class":125,"line":1189},[123,100804,100805],{"class":238},"  mesa-libGL",[123,100807,100808],{"class":238}," mesa-libGLU",[123,100810,100811],{"class":238}," mesa-dri-drivers",[123,100813,24689],{"class":182},[123,100815,100816,100819,100822],{"class":125,"line":1204},[123,100817,100818],{"class":238},"  libglvnd-glx",[123,100820,100821],{"class":238}," libglvnd-opengl",[123,100823,24689],{"class":182},[123,100825,100826,100829,100832],{"class":125,"line":1210},[123,100827,100828],{"class":238},"  glfw",[123,100830,100831],{"class":238}," glfw-devel",[123,100833,24689],{"class":182},[123,100835,100836,100839,100842,100845,100848,100851],{"class":125,"line":1224},[123,100837,100838],{"class":238},"  libX11",[123,100840,100841],{"class":238}," libXcursor",[123,100843,100844],{"class":238}," libXi",[123,100846,100847],{"class":238}," libXinerama",[123,100849,100850],{"class":238}," libXrandr",[123,100852,24689],{"class":182},[123,100854,100855,100858,100861],{"class":125,"line":1230},[123,100856,100857],{"class":238},"  gcc",[123,100859,100860],{"class":238}," gcc-c++",[123,100862,100863],{"class":238}," make\n",[14,100865,100866],{},"创建 Python 环境:",[114,100868,100870],{"className":23832,"code":100869,"language":23834,"meta":37,"style":37},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[120,100871,100872,100886,100894],{"__ignoreMap":37},[123,100873,100874,100877,100880,100883],{"class":125,"line":126},[123,100875,100876],{"class":1972},"python3",[123,100878,100879],{"class":182}," -m",[123,100881,100882],{"class":238}," venv",[123,100884,100885],{"class":238}," .venv\n",[123,100887,100888,100891],{"class":125,"line":45},[123,100889,100890],{"class":182},"source",[123,100892,100893],{"class":238}," .venv\u002Fbin\u002Factivate\n",[123,100895,100896,100898,100900,100903,100905,100908],{"class":125,"line":1189},[123,100897,30391],{"class":1972},[123,100899,100879],{"class":182},[123,100901,100902],{"class":238}," pip",[123,100904,23844],{"class":238},[123,100906,100907],{"class":182}," --upgrade",[123,100909,100910],{"class":238}," pip\n",[14,100912,100913],{},"pip 安装:",[114,100915,100917],{"className":23832,"code":100916,"language":23834,"meta":37,"style":37},"pip install \"mujoco>=2.3\" numpy\n",[120,100918,100919],{"__ignoreMap":37},[123,100920,100921,100923,100925,100928],{"class":125,"line":126},[123,100922,23841],{"class":1972},[123,100924,23844],{"class":238},[123,100926,100927],{"class":238}," \"mujoco>=2.3\"",[123,100929,100930],{"class":238}," numpy\n",[14,100932,100933],{},"安装完成后，先做最小检查：",[114,100935,100937],{"className":23832,"code":100936,"language":23834,"meta":37,"style":37},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[120,100938,100939],{"__ignoreMap":37},[123,100940,100941,100943,100945],{"class":125,"line":126},[123,100942,30391],{"class":1972},[123,100944,30369],{"class":182},[123,100946,100947],{"class":238}," \"import mujoco; print(mujoco.__version__)\"\n",[14,100949,100950],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,100952,100953],{},"conda 安装:",[114,100955,100957],{"className":23832,"code":100956,"language":23834,"meta":37,"style":37},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[120,100958,100959,100979,100989],{"__ignoreMap":37},[123,100960,100961,100963,100965,100967,100970,100973,100976],{"class":125,"line":126},[123,100962,30341],{"class":1972},[123,100964,29187],{"class":238},[123,100966,25126],{"class":182},[123,100968,100969],{"class":238}," mujoco-study",[123,100971,100972],{"class":238}," python=",[123,100974,100975],{"class":182},"3.10",[123,100977,100978],{"class":182}," -y\n",[123,100980,100981,100983,100986],{"class":125,"line":45},[123,100982,30341],{"class":1972},[123,100984,100985],{"class":238}," activate",[123,100987,100988],{"class":238}," mujoco-study\n",[123,100990,100991,100993,100995,100997],{"class":125,"line":1189},[123,100992,23841],{"class":1972},[123,100994,23844],{"class":238},[123,100996,100927],{"class":238},[123,100998,100930],{"class":238},[14,101000,101001],{},"版本冲突说明:",[77,101003,101004,101010,101020,101029],{},[80,101005,101006,101007,28396],{},"不要安装 ",[120,101008,101009],{},"mujoco-py",[80,101011,101012,101013,101015,101016,101019],{},"如果旧项目里同时安装了 ",[120,101014,101009],{}," 和 ",[120,101017,101018],{},"mujoco","，建议新建干净虚拟环境。",[80,101021,101022,101025,101026,28396],{},[120,101023,101024],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[120,101027,101028],{},"~\u002F.mujoco\u002Fmujoco210",[80,101030,101031,101032,82550,101035,101038],{},"离屏渲染可能涉及 OpenGL 后端，",[120,101033,101034],{},"MUJOCO_GL=egl",[120,101036,101037],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[65,101040,101042],{"id":101041},"_3核心概念解释","3.核心概念解释",[14,101044,101045],{},"MuJoCo 的基本执行流程:",[114,101047,101050],{"className":101048,"code":101049,"language":5197,"meta":37},[5195],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[120,101051,101049],{"__ignoreMap":37},[14,101053,101054,101056],{},[120,101055,100706],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101058,101059,101061,101062,346,101065,346,101068,346,101071,346,101074,28396],{},[120,101060,100716],{}," 存放仿真运行时状态，例如 ",[120,101063,101064],{},"data.time",[120,101066,101067],{},"data.qpos",[120,101069,101070],{},"data.qvel",[120,101072,101073],{},"data.ctrl",[120,101075,101076],{},"data.xpos",[94,101078,101080],{"id":101079},"xml-是什么","XML 是什么",[14,101082,101083],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[114,101085,101087],{"className":53078,"code":101086,"language":53080,"meta":37,"style":37},"\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",[120,101088,101089,101111,101142],{"__ignoreMap":37},[123,101090,101091,101093,101095,101097,101099,101101,101104,101106,101109],{"class":125,"line":126},[123,101092,1044],{"class":133},[123,101094,51811],{"class":51311},[123,101096,14930],{"class":1972},[123,101098,179],{"class":133},[123,101100,53502],{"class":238},[123,101102,101103],{"class":1972}," pos",[123,101105,179],{"class":133},[123,101107,101108],{"class":238},"\"0 0 1\"",[123,101110,51318],{"class":133},[123,101112,101113,101115,101118,101120,101122,101125,101127,101129,101131,101134,101136,101139],{"class":125,"line":45},[123,101114,52155],{"class":133},[123,101116,101117],{"class":51311},"geom",[123,101119,14930],{"class":1972},[123,101121,179],{"class":133},[123,101123,101124],{"class":238},"\"box_geom\"",[123,101126,53835],{"class":1972},[123,101128,179],{"class":133},[123,101130,53502],{"class":238},[123,101132,101133],{"class":1972}," size",[123,101135,179],{"class":133},[123,101137,101138],{"class":238},"\"0.1 0.1 0.1\"",[123,101140,101141],{"class":133},"\u002F>\n",[123,101143,101144,101146,101148],{"class":125,"line":1189},[123,101145,51796],{"class":133},[123,101147,51811],{"class":51311},[123,101149,51318],{"class":133},[14,101151,101152],{},"这段意思是：",[77,101154,101155,101161,101168],{},[80,101156,101157,101158,101160],{},"创建一个叫 ",[120,101159,53725],{}," 的刚体。",[80,101162,101163,101164,101167],{},"它初始放在 ",[120,101165,101166],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[80,101169,101170],{},"它里面有一个盒子形状的几何体。",[94,101172,101174],{"id":101173},"timestep-是什么","timestep 是什么",[14,101176,101177],{},"XML 里的：",[114,101179,101181],{"className":53078,"code":101180,"language":53080,"meta":37,"style":37},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[120,101182,101183],{"__ignoreMap":37},[123,101184,101185,101187,101189,101192,101194,101197,101200,101202,101205],{"class":125,"line":126},[123,101186,1044],{"class":133},[123,101188,69177],{"class":51311},[123,101190,101191],{"class":1972}," timestep",[123,101193,179],{"class":133},[123,101195,101196],{"class":238},"\"0.01\"",[123,101198,101199],{"class":1972}," gravity",[123,101201,179],{"class":133},[123,101203,101204],{"class":238},"\"0 0 -9.81\"",[123,101206,101141],{"class":133},[14,101208,101209,101210,101213,101214,101216],{},"表示每调用一次 ",[120,101211,101212],{},"mj_step","，仿真时间前进 ",[120,101215,38997],{}," 秒。循环 100 次，大约就是 1 秒：",[114,101218,101221],{"className":101219,"code":101220,"language":5197,"meta":37},[5195],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[120,101222,101220],{"__ignoreMap":37},[94,101224,101226],{"id":101225},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101228,101229],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[114,101231,101234],{"className":101232,"code":101233,"language":5197,"meta":37},[5195],"x y z qw qx qy qz\n",[120,101235,101233],{"__ignoreMap":37},[14,101237,101238,101239,101242,101243,101246],{},"表示一个自由刚体的位置和姿态。其中 ",[120,101240,101241],{},"x y z"," 是位置，",[120,101244,101245],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[65,101248,101250],{"id":101249},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101252,101253],{},"新建文件:",[114,101255,101257],{"className":23832,"code":101256,"language":23834,"meta":37,"style":37},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[120,101258,101259,101269,101276],{"__ignoreMap":37},[123,101260,101261,101264,101266],{"class":125,"line":126},[123,101262,101263],{"class":1972},"mkdir",[123,101265,29227],{"class":182},[123,101267,101268],{"class":238}," mujoco_tutorial\n",[123,101270,101271,101274],{"class":125,"line":45},[123,101272,101273],{"class":182},"cd",[123,101275,101268],{"class":238},[123,101277,101278,101281],{"class":125,"line":1189},[123,101279,101280],{"class":1972},"touch",[123,101282,101283],{"class":238}," ch1_first_sim.py\n",[14,101285,101286],{},"写入:",[114,101288,101290],{"className":30389,"code":101289,"language":30391,"meta":37,"style":37},"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",[120,101291,101292,101299,101303,101307,101317,101322,101327,101331,101336,101341,101345,101350,101355,101360,101365,101370,101375,101379,101383,101387,101400,101414,101424,101428,101440,101452,101464,101476,101488,101492,101509,101514,101518,101529,101540,101544,101548,101562],{"__ignoreMap":37},[123,101293,101294,101296],{"class":125,"line":126},[123,101295,30403],{"class":129},[123,101297,101298],{"class":133}," mujoco\n",[123,101300,101301],{"class":125,"line":45},[123,101302,2409],{"emptyLinePlaceholder":50},[123,101304,101305],{"class":125,"line":1189},[123,101306,2409],{"emptyLinePlaceholder":50},[123,101308,101309,101312,101314],{"class":125,"line":1204},[123,101310,101311],{"class":182},"XML",[123,101313,13574],{"class":129},[123,101315,101316],{"class":238}," \"\"\"\n",[123,101318,101319],{"class":125,"line":1210},[123,101320,101321],{"class":238},"\u003Cmujoco model=\"first_sim\">\n",[123,101323,101324],{"class":125,"line":1224},[123,101325,101326],{"class":238},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[123,101328,101329],{"class":125,"line":1230},[123,101330,2409],{"emptyLinePlaceholder":50},[123,101332,101333],{"class":125,"line":1321},[123,101334,101335],{"class":238},"  \u003Cworldbody>\n",[123,101337,101338],{"class":125,"line":1327},[123,101339,101340],{"class":238},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[123,101342,101343],{"class":125,"line":1339},[123,101344,2409],{"emptyLinePlaceholder":50},[123,101346,101347],{"class":125,"line":1621},[123,101348,101349],{"class":238},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[123,101351,101352],{"class":125,"line":1626},[123,101353,101354],{"class":238},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[123,101356,101357],{"class":125,"line":1632},[123,101358,101359],{"class":238},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[123,101361,101362],{"class":125,"line":1637},[123,101363,101364],{"class":238},"    \u003C\u002Fbody>\n",[123,101366,101367],{"class":125,"line":1651},[123,101368,101369],{"class":238},"  \u003C\u002Fworldbody>\n",[123,101371,101372],{"class":125,"line":1656},[123,101373,101374],{"class":238},"\u003C\u002Fmujoco>\n",[123,101376,101377],{"class":125,"line":1662},[123,101378,95695],{"class":238},[123,101380,101381],{"class":125,"line":1683},[123,101382,2409],{"emptyLinePlaceholder":50},[123,101384,101385],{"class":125,"line":1688},[123,101386,2409],{"emptyLinePlaceholder":50},[123,101388,101389,101391,101393,101396,101398],{"class":125,"line":1702},[123,101390,31958],{"class":129},[123,101392,1982],{"class":1972},[123,101394,101395],{"class":133},"() -> ",[123,101397,95683],{"class":182},[123,101399,3748],{"class":133},[123,101401,101402,101405,101407,101410,101412],{"class":125,"line":1707},[123,101403,101404],{"class":133},"    model ",[123,101406,179],{"class":129},[123,101408,101409],{"class":133}," mujoco.MjModel.from_xml_string(",[123,101411,101311],{"class":182},[123,101413,140],{"class":133},[123,101415,101416,101419,101421],{"class":125,"line":1736},[123,101417,101418],{"class":133},"    data ",[123,101420,179],{"class":129},[123,101422,101423],{"class":133}," mujoco.MjData(model)\n",[123,101425,101426],{"class":125,"line":1741},[123,101427,2409],{"emptyLinePlaceholder":50},[123,101429,101430,101432,101434,101437],{"class":125,"line":1758},[123,101431,31310],{"class":182},[123,101433,134],{"class":133},[123,101435,101436],{"class":238},"\"nq:\"",[123,101438,101439],{"class":133},", model.nq)\n",[123,101441,101442,101444,101446,101449],{"class":125,"line":1763},[123,101443,31310],{"class":182},[123,101445,134],{"class":133},[123,101447,101448],{"class":238},"\"nv:\"",[123,101450,101451],{"class":133},", model.nv)\n",[123,101453,101454,101456,101458,101461],{"class":125,"line":1768},[123,101455,31310],{"class":182},[123,101457,134],{"class":133},[123,101459,101460],{"class":238},"\"nu:\"",[123,101462,101463],{"class":133},", model.nu)\n",[123,101465,101466,101468,101470,101473],{"class":125,"line":1773},[123,101467,31310],{"class":182},[123,101469,134],{"class":133},[123,101471,101472],{"class":238},"\"initial time:\"",[123,101474,101475],{"class":133},", data.time)\n",[123,101477,101478,101480,101482,101485],{"class":125,"line":1787},[123,101479,31310],{"class":182},[123,101481,134],{"class":133},[123,101483,101484],{"class":238},"\"initial qpos:\"",[123,101486,101487],{"class":133},", data.qpos.copy())\n",[123,101489,101490],{"class":125,"line":1792},[123,101491,2409],{"emptyLinePlaceholder":50},[123,101493,101494,101496,101499,101501,101503,101505,101507],{"class":125,"line":2586},[123,101495,3210],{"class":129},[123,101497,101498],{"class":133}," _ ",[123,101500,26054],{"class":129},[123,101502,32454],{"class":182},[123,101504,134],{"class":133},[123,101506,445],{"class":182},[123,101508,30797],{"class":133},[123,101510,101511],{"class":125,"line":2600},[123,101512,101513],{"class":133},"        mujoco.mj_step(model, data)\n",[123,101515,101516],{"class":125,"line":2608},[123,101517,2409],{"emptyLinePlaceholder":50},[123,101519,101520,101522,101524,101527],{"class":125,"line":2613},[123,101521,31310],{"class":182},[123,101523,134],{"class":133},[123,101525,101526],{"class":238},"\"final time:\"",[123,101528,101475],{"class":133},[123,101530,101531,101533,101535,101538],{"class":125,"line":2619},[123,101532,31310],{"class":182},[123,101534,134],{"class":133},[123,101536,101537],{"class":238},"\"final qpos:\"",[123,101539,101487],{"class":133},[123,101541,101542],{"class":125,"line":2625},[123,101543,2409],{"emptyLinePlaceholder":50},[123,101545,101546],{"class":125,"line":2630},[123,101547,2409],{"emptyLinePlaceholder":50},[123,101549,101550,101552,101554,101557,101560],{"class":125,"line":7958},[123,101551,1540],{"class":129},[123,101553,31231],{"class":182},[123,101555,101556],{"class":129}," ==",[123,101558,101559],{"class":238}," \"__main__\"",[123,101561,3748],{"class":133},[123,101563,101564],{"class":125,"line":7982},[123,101565,101566],{"class":133},"    main()\n",[94,101568,101569],{"id":101569},"代码逐段解释",[14,101571,101572],{},"导入库：",[114,101574,101576],{"className":30389,"code":101575,"language":30391,"meta":37,"style":37},"import mujoco\n",[120,101577,101578],{"__ignoreMap":37},[123,101579,101580,101582],{"class":125,"line":126},[123,101581,30403],{"class":129},[123,101583,101298],{"class":133},[14,101585,101586],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101588,101589],{},"定义 XML：",[114,101591,101593],{"className":30389,"code":101592,"language":30391,"meta":37,"style":37},"XML = \"\"\"\n...\n\"\"\"\n",[120,101594,101595,101603,101608],{"__ignoreMap":37},[123,101596,101597,101599,101601],{"class":125,"line":126},[123,101598,101311],{"class":182},[123,101600,13574],{"class":129},[123,101602,101316],{"class":238},[123,101604,101605],{"class":125,"line":45},[123,101606,101607],{"class":238},"...\n",[123,101609,101610],{"class":125,"line":1189},[123,101611,95695],{"class":238},[14,101613,101614,101615,101618],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[120,101616,101617],{},"freejoint"," 的方块。",[14,101620,101621],{},"编译模型：",[114,101623,101625],{"className":30389,"code":101624,"language":30391,"meta":37,"style":37},"model = mujoco.MjModel.from_xml_string(XML)\n",[120,101626,101627],{"__ignoreMap":37},[123,101628,101629,101632,101634,101636,101638],{"class":125,"line":126},[123,101630,101631],{"class":133},"model ",[123,101633,179],{"class":129},[123,101635,101409],{"class":133},[123,101637,101311],{"class":182},[123,101639,140],{"class":133},[14,101641,101642],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,101644,101645],{},"创建数据：",[114,101647,101649],{"className":30389,"code":101648,"language":30391,"meta":37,"style":37},"data = mujoco.MjData(model)\n",[120,101650,101651],{"__ignoreMap":37},[123,101652,101653,101656,101658],{"class":125,"line":126},[123,101654,101655],{"class":133},"data ",[123,101657,179],{"class":129},[123,101659,101423],{"class":133},[14,101661,101662,101664,101665,101667],{},[120,101663,33412],{}," 会保存仿真当前状态。刚创建时，时间是 ",[120,101666,325],{},"，方块还在初始位置。",[14,101669,101670],{},"推进仿真：",[114,101672,101674],{"className":30389,"code":101673,"language":30391,"meta":37,"style":37},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[120,101675,101676,101692],{"__ignoreMap":37},[123,101677,101678,101680,101682,101684,101686,101688,101690],{"class":125,"line":126},[123,101679,3034],{"class":129},[123,101681,101498],{"class":133},[123,101683,26054],{"class":129},[123,101685,32454],{"class":182},[123,101687,134],{"class":133},[123,101689,445],{"class":182},[123,101691,30797],{"class":133},[123,101693,101694],{"class":125,"line":45},[123,101695,101696],{"class":133},"    mujoco.mj_step(model, data)\n",[14,101698,101699,101700,101702],{},"每次 ",[120,101701,101212],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[94,101704,101705],{"id":101705},"代码逐行细讲",[14,101707,101708],{},"下面把完整代码按新手视角拆开讲。",[114,101710,101711],{"className":30389,"code":101575,"language":30391,"meta":37,"style":37},[120,101712,101713],{"__ignoreMap":37},[123,101714,101715,101717],{"class":125,"line":126},[123,101716,30403],{"class":129},[123,101718,101298],{"class":133},[14,101720,101721,101723,101724,346,101726,346,101728,28396],{},[120,101722,30403],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[120,101725,100672],{},[120,101727,100677],{},[120,101729,101730],{},"mujoco.mj_step",[114,101732,101733],{"className":30389,"code":101592,"language":30391,"meta":37,"style":37},[120,101734,101735,101743,101747],{"__ignoreMap":37},[123,101736,101737,101739,101741],{"class":125,"line":126},[123,101738,101311],{"class":182},[123,101740,13574],{"class":129},[123,101742,101316],{"class":238},[123,101744,101745],{"class":125,"line":45},[123,101746,101607],{"class":238},[123,101748,101749],{"class":125,"line":1189},[123,101750,95695],{"class":238},[14,101752,101753,101755,101756,101759],{},[120,101754,101311],{}," 是一个变量名。右边的三引号 ",[120,101757,101758],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[114,101761,101762],{"className":53078,"code":101321,"language":53080,"meta":37,"style":37},[120,101763,101764],{"__ignoreMap":37},[123,101765,101766,101768,101770,101773,101775,101778],{"class":125,"line":126},[123,101767,1044],{"class":133},[123,101769,101018],{"class":51311},[123,101771,101772],{"class":1972}," model",[123,101774,179],{"class":133},[123,101776,101777],{"class":238},"\"first_sim\"",[123,101779,51318],{"class":133},[14,101781,101782,101783,101786,101787,28396],{},"这是 XML 的根标签。",[120,101784,101785],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[120,101788,101789],{},"first_sim",[114,101791,101792],{"className":53078,"code":101180,"language":53080,"meta":37,"style":37},[120,101793,101794],{"__ignoreMap":37},[123,101795,101796,101798,101800,101802,101804,101806,101808,101810,101812],{"class":125,"line":126},[123,101797,1044],{"class":133},[123,101799,69177],{"class":51311},[123,101801,101191],{"class":1972},[123,101803,179],{"class":133},[123,101805,101196],{"class":238},[123,101807,101199],{"class":1972},[123,101809,179],{"class":133},[123,101811,101204],{"class":238},[123,101813,101141],{"class":133},[14,101815,101816,101818,101819,101822,101823,101826],{},[120,101817,69177],{}," 用来设置仿真参数。",[120,101820,101821],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[120,101824,101825],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[114,101828,101830],{"className":53078,"code":101829,"language":53080,"meta":37,"style":37},"\u003Cworldbody>\n",[120,101831,101832],{"__ignoreMap":37},[123,101833,101834,101836,101839],{"class":125,"line":126},[123,101835,1044],{"class":133},[123,101837,101838],{"class":51311},"worldbody",[123,101840,51318],{"class":133},[14,101842,101843,101845],{},[120,101844,101838],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[114,101847,101849],{"className":53078,"code":101848,"language":53080,"meta":37,"style":37},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[120,101850,101851],{"__ignoreMap":37},[123,101852,101853,101855,101857,101859,101861,101864,101866,101868,101871,101873,101875,101878,101880,101882,101885],{"class":125,"line":126},[123,101854,1044],{"class":133},[123,101856,101117],{"class":51311},[123,101858,14930],{"class":1972},[123,101860,179],{"class":133},[123,101862,101863],{"class":238},"\"floor\"",[123,101865,53835],{"class":1972},[123,101867,179],{"class":133},[123,101869,101870],{"class":238},"\"plane\"",[123,101872,101133],{"class":1972},[123,101874,179],{"class":133},[123,101876,101877],{"class":238},"\"2 2 0.1\"",[123,101879,78778],{"class":1972},[123,101881,179],{"class":133},[123,101883,101884],{"class":238},"\"0.8 0.8 0.8 1\"",[123,101886,101141],{"class":133},[14,101888,101889,101890,101892,101893,101896,101897,101900,101901,101903],{},"这行创建地面。",[120,101891,101117],{}," 是几何体。",[120,101894,101895],{},"name=\"floor\""," 是名字。",[120,101898,101899],{},"type=\"plane\""," 表示平面。",[120,101902,55121],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[114,101905,101907],{"className":53078,"code":101906,"language":53080,"meta":37,"style":37},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[120,101908,101909],{"__ignoreMap":37},[123,101910,101911,101913,101915,101917,101919,101921,101923,101925,101927],{"class":125,"line":126},[123,101912,1044],{"class":133},[123,101914,51811],{"class":51311},[123,101916,14930],{"class":1972},[123,101918,179],{"class":133},[123,101920,53502],{"class":238},[123,101922,101103],{"class":1972},[123,101924,179],{"class":133},[123,101926,101108],{"class":238},[123,101928,51318],{"class":133},[14,101930,101931,101932,28396,101934,101937,101938,101940],{},"这行创建一个刚体，名字叫 ",[120,101933,53725],{},[120,101935,101936],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[120,101939,101166],{},"，也就是离地面 1 米高。",[114,101942,101944],{"className":53078,"code":101943,"language":53080,"meta":37,"style":37},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[120,101945,101946],{"__ignoreMap":37},[123,101947,101948,101950,101952,101954,101956,101959],{"class":125,"line":126},[123,101949,1044],{"class":133},[123,101951,101617],{"class":51311},[123,101953,14930],{"class":1972},[123,101955,179],{"class":133},[123,101957,101958],{"class":238},"\"box_free\"",[123,101960,101141],{"class":133},[14,101962,101963,101964,101966],{},"这行很重要。",[120,101965,101617],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[114,101968,101970],{"className":53078,"code":101969,"language":53080,"meta":37,"style":37},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[120,101971,101972],{"__ignoreMap":37},[123,101973,101974,101976,101978,101980,101982,101984,101986,101988,101990,101992,101994,101996,101999,102001,102003,102005,102007,102010],{"class":125,"line":126},[123,101975,1044],{"class":133},[123,101977,101117],{"class":51311},[123,101979,14930],{"class":1972},[123,101981,179],{"class":133},[123,101983,101124],{"class":238},[123,101985,53835],{"class":1972},[123,101987,179],{"class":133},[123,101989,53502],{"class":238},[123,101991,101133],{"class":1972},[123,101993,179],{"class":133},[123,101995,101138],{"class":238},[123,101997,101998],{"class":1972}," mass",[123,102000,179],{"class":133},[123,102002,3687],{"class":238},[123,102004,78778],{"class":1972},[123,102006,179],{"class":133},[123,102008,102009],{"class":238},"\"1 0 0 1\"",[123,102011,101141],{"class":133},[14,102013,102014,102015,102018,102019,102022,102023,102026,102027,102030],{},"这行给 box body 添加一个盒子形状。",[120,102016,102017],{},"type=\"box\""," 表示形状是盒子。",[120,102020,102021],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[120,102024,102025],{},"mass=\"1\""," 表示质量是 1。",[120,102028,102029],{},"rgba=\"1 0 0 1\""," 表示红色。",[114,102032,102034],{"className":30389,"code":102033,"language":30391,"meta":37,"style":37},"def main() -> None:\n",[120,102035,102036],{"__ignoreMap":37},[123,102037,102038,102040,102042,102044,102046],{"class":125,"line":126},[123,102039,31958],{"class":129},[123,102041,1982],{"class":1972},[123,102043,101395],{"class":133},[123,102045,95683],{"class":182},[123,102047,3748],{"class":133},[14,102049,102050,102052,102053,102056,102057,102060],{},[120,102051,31958],{}," 用来定义函数。这里定义了一个叫 ",[120,102054,102055],{},"main"," 的函数。",[120,102058,102059],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[114,102062,102063],{"className":30389,"code":101624,"language":30391,"meta":37,"style":37},[120,102064,102065],{"__ignoreMap":37},[123,102066,102067,102069,102071,102073,102075],{"class":125,"line":126},[123,102068,101631],{"class":133},[123,102070,179],{"class":129},[123,102072,101409],{"class":133},[123,102074,101311],{"class":182},[123,102076,140],{"class":133},[14,102078,102079,102080,102083],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[120,102081,102082],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[114,102085,102086],{"className":30389,"code":101648,"language":30391,"meta":37,"style":37},[120,102087,102088],{"__ignoreMap":37},[123,102089,102090,102092,102094],{"class":125,"line":126},[123,102091,101655],{"class":133},[123,102093,179],{"class":129},[123,102095,101423],{"class":133},[14,102097,102098,102099,102101,102102,102104],{},"这行创建仿真数据。",[120,102100,33412],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[120,102103,33412],{}," 都会变化。",[114,102106,102108],{"className":30389,"code":102107,"language":30391,"meta":37,"style":37},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[120,102109,102110,102120,102130],{"__ignoreMap":37},[123,102111,102112,102114,102116,102118],{"class":125,"line":126},[123,102113,30426],{"class":182},[123,102115,134],{"class":133},[123,102117,101436],{"class":238},[123,102119,101439],{"class":133},[123,102121,102122,102124,102126,102128],{"class":125,"line":45},[123,102123,30426],{"class":182},[123,102125,134],{"class":133},[123,102127,101448],{"class":238},[123,102129,101451],{"class":133},[123,102131,102132,102134,102136,102138],{"class":125,"line":1189},[123,102133,30426],{"class":182},[123,102135,134],{"class":133},[123,102137,101460],{"class":238},[123,102139,101463],{"class":133},[14,102141,102142,102144,102145,102148,102149,102152,102153,102156,102157,102160],{},[120,102143,30426],{}," 用来输出信息。",[120,102146,102147],{},"model.nq"," 是位置变量数量，",[120,102150,102151],{},"model.nv"," 是速度变量数量，",[120,102154,102155],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[120,102158,102159],{},"nu"," 是 0。",[114,102162,102164],{"className":30389,"code":102163,"language":30391,"meta":37,"style":37},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[120,102165,102166,102176],{"__ignoreMap":37},[123,102167,102168,102170,102172,102174],{"class":125,"line":126},[123,102169,30426],{"class":182},[123,102171,134],{"class":133},[123,102173,101472],{"class":238},[123,102175,101475],{"class":133},[123,102177,102178,102180,102182,102184],{"class":125,"line":45},[123,102179,30426],{"class":182},[123,102181,134],{"class":133},[123,102183,101484],{"class":238},[123,102185,101487],{"class":133},[14,102187,102188,102189,102191,102192,102194,102195,102198],{},"这里打印初始时间和初始位置。",[120,102190,101064],{}," 一开始是 0。",[120,102193,101067],{}," 是位置数组。",[120,102196,102197],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[114,102200,102201],{"className":30389,"code":101673,"language":30391,"meta":37,"style":37},[120,102202,102203,102219],{"__ignoreMap":37},[123,102204,102205,102207,102209,102211,102213,102215,102217],{"class":125,"line":126},[123,102206,3034],{"class":129},[123,102208,101498],{"class":133},[123,102210,26054],{"class":129},[123,102212,32454],{"class":182},[123,102214,134],{"class":133},[123,102216,445],{"class":182},[123,102218,30797],{"class":133},[123,102220,102221],{"class":125,"line":45},[123,102222,101696],{"class":133},[14,102224,102225,102227,102228,102231,102232,102234,102235,102237],{},[120,102226,3034],{}," 是循环。",[120,102229,102230],{},"range(100)"," 表示循环 100 次。",[120,102233,1126],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[120,102236,101212],{},"，仿真就前进一步。",[114,102239,102241],{"className":30389,"code":102240,"language":30391,"meta":37,"style":37},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[120,102242,102243,102253],{"__ignoreMap":37},[123,102244,102245,102247,102249,102251],{"class":125,"line":126},[123,102246,30426],{"class":182},[123,102248,134],{"class":133},[123,102250,101526],{"class":238},[123,102252,101475],{"class":133},[123,102254,102255,102257,102259,102261],{"class":125,"line":45},[123,102256,30426],{"class":182},[123,102258,134],{"class":133},[123,102260,101537],{"class":238},[123,102262,101487],{"class":133},[14,102264,102265],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[114,102267,102269],{"className":30389,"code":102268,"language":30391,"meta":37,"style":37},"if __name__ == \"__main__\":\n    main()\n",[120,102270,102271,102283],{"__ignoreMap":37},[123,102272,102273,102275,102277,102279,102281],{"class":125,"line":126},[123,102274,1540],{"class":129},[123,102276,31231],{"class":182},[123,102278,101556],{"class":129},[123,102280,101559],{"class":238},[123,102282,3748],{"class":133},[123,102284,102285],{"class":125,"line":45},[123,102286,101566],{"class":133},[14,102288,102289,102290,102293,102294,28396],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[120,102291,102292],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[120,102295,102292],{},[14,102297,102298],{},"运行:",[114,102300,102302],{"className":23832,"code":102301,"language":23834,"meta":37,"style":37},"python ch1_first_sim.py\n",[120,102303,102304],{"__ignoreMap":37},[123,102305,102306,102308],{"class":125,"line":126},[123,102307,30391],{"class":1972},[123,102309,101283],{"class":238},[65,102311,102313],{"id":102312},"_5运行结果说明","5.运行结果说明",[14,102315,102316],{},"你应该看到类似输出:",[114,102318,102321],{"className":102319,"code":102320,"language":5197,"meta":37},[5195],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[120,102322,102320],{"__ignoreMap":37},[14,102324,102325,102327,102328,102331,102332,28396],{},[120,102326,101617],{}," 有 7 个位置变量: ",[120,102329,102330],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[120,102333,102334],{},"vx vy vz wx wy wz",[14,102336,102337,102338,102341],{},"你还会看到 ",[120,102339,102340],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[65,102343,102345],{"id":102344},"_6验证步骤","6.验证步骤",[14,102347,102348],{},"确认版本:",[114,102350,102351],{"className":23832,"code":100936,"language":23834,"meta":37,"style":37},[120,102352,102353],{"__ignoreMap":37},[123,102354,102355,102357,102359],{"class":125,"line":126},[123,102356,30391],{"class":1972},[123,102358,30369],{"class":182},[123,102360,100947],{"class":238},[14,102362,102363],{},"确认导入的是官方 bindings:",[114,102365,102367],{"className":23832,"code":102366,"language":23834,"meta":37,"style":37},"python -c \"import mujoco; print(mujoco)\"\n",[120,102368,102369],{"__ignoreMap":37},[123,102370,102371,102373,102375],{"class":125,"line":126},[123,102372,30391],{"class":1972},[123,102374,30369],{"class":182},[123,102376,102377],{"class":238}," \"import mujoco; print(mujoco)\"\n",[14,102379,102380],{},"运行程序:",[114,102382,102383],{"className":23832,"code":102301,"language":23834,"meta":37,"style":37},[120,102384,102385],{"__ignoreMap":37},[123,102386,102387,102389],{"class":125,"line":126},[123,102388,30391],{"class":1972},[123,102390,101283],{"class":238},[14,102392,102393,102394,102397,102398,28396],{},"检查 ",[120,102395,102396],{},"final time"," 是否约等于 ",[120,102399,102400],{},"1.0",[14,102402,102403],{},"再做几个小实验：",[77,102405,102406,102416,102424,102437],{},[80,102407,102408,102409,102411,102412,102415],{},"把 ",[120,102410,101936],{}," 改成 ",[120,102413,102414],{},"pos=\"0 0 2\"","，观察初始高度变化。",[80,102417,102408,102418,102411,102420,102423],{},[120,102419,101825],{},[120,102421,102422],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[80,102425,102408,102426,102411,102428,102431,102432,102434,102435,28396],{},[120,102427,101821],{},[120,102429,102430],{},"timestep=\"0.005\"","，观察 100 步后的 ",[120,102433,102396],{}," 是否变成约 ",[120,102436,35340],{},[80,102438,102439,102440,102443],{},"删除 ",[120,102441,102442],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102445,102446],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[65,102448,102450],{"id":102449},"_7常见错误与解决方案","7.常见错误与解决方案",[94,102452,102454],{"id":102453},"modulenotfounderror-no-module-named-mujoco",[120,102455,102456],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102458,102459],{},"解决:",[114,102461,102463],{"className":23832,"code":102462,"language":23834,"meta":37,"style":37},"pip install \"mujoco>=2.3\"\n",[120,102464,102465],{"__ignoreMap":37},[123,102466,102467,102469,102471],{"class":125,"line":126},[123,102468,23841],{"class":1972},[123,102470,23844],{"class":238},[123,102472,102473],{"class":238}," \"mujoco>=2.3\"\n",[94,102475,102477],{"id":102476},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102479,102480],{},"先安装系统依赖:",[114,102482,102484],{"className":23832,"code":102483,"language":23834,"meta":37,"style":37},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[120,102485,102486],{"__ignoreMap":37},[123,102487,102488,102490,102492,102494,102496,102499,102501,102504,102506,102509,102511],{"class":125,"line":126},[123,102489,24587],{"class":1972},[123,102491,26326],{"class":238},[123,102493,23844],{"class":238},[123,102495,26411],{"class":182},[123,102497,102498],{"class":238}," mesa-libGL",[123,102500,100811],{"class":238},[123,102502,102503],{"class":238}," glfw",[123,102505,100831],{"class":238},[123,102507,102508],{"class":238}," libX11",[123,102510,100844],{"class":238},[123,102512,102513],{"class":238}," libXrandr\n",[94,102515,102517],{"id":102516},"xml-解析失败","XML 解析失败",[14,102519,102520],{},"检查:",[77,102522,102523,102526,102529,102535],{},[80,102524,102525],{},"标签是否闭合",[80,102527,102528],{},"属性是否带引号",[80,102530,102531,102532],{},"根节点是否是 ",[120,102533,102534],{},"\u003Cmujoco>",[80,102536,102537,102539,102540,102543],{},[120,102538,51811],{}," 是否放在 ",[120,102541,102542],{},"\u003Cworldbody>"," 内部",[94,102545,102547,102549,102550],{"id":102546},"final-time-不是严格等于-10",[120,102548,102396],{}," 不是严格等于 ",[120,102551,102400],{},[14,102553,102554],{},"这通常不是错误。浮点数计算可能得到：",[114,102556,102559],{"className":102557,"code":102558,"language":5197,"meta":37},[5195],"1.0000000000000007\n",[120,102560,102558],{"__ignoreMap":37},[14,102562,102563,102564,102566],{},"只要接近 ",[120,102565,102400],{}," 就正常。",[94,102568,102569],{"id":102569},"方块没有掉下来",[14,102571,102572],{},"检查：",[77,102574,102575,102581,102587,102592],{},[80,102576,102577,102578],{},"方块 body 里是否有 ",[120,102579,102580],{},"\u003Cfreejoint\u002F>",[80,102582,102583,102584],{},"重力是否是 ",[120,102585,102586],{},"0 0 -9.81",[80,102588,102589,102590],{},"是否真的调用了 ",[120,102591,100682],{},[80,102593,102594,102595,102597,102598],{},"你看的是否是 ",[120,102596,102340],{},"，不是 ",[120,102599,102600],{},"initial qpos",[65,102602,102604],{"id":102603},"_8本章小结","8.本章小结",[14,102606,102607],{},"本章你已经完成了 MuJoCo 的最小闭环：",[114,102609,102612],{"className":102610,"code":102611,"language":5197,"meta":37},[5195],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[120,102613,102611],{"__ignoreMap":37},[14,102615,102616],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5136,102618,102619],{},"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":37,"searchDepth":45,"depth":45,"links":102621},[102622,102623,102624,102629,102633,102634,102635,102643],{"id":100643,"depth":45,"text":100644},{"id":100766,"depth":45,"text":100767},{"id":101041,"depth":45,"text":101042,"children":102625},[102626,102627,102628],{"id":101079,"depth":1189,"text":101080},{"id":101173,"depth":1189,"text":101174},{"id":101225,"depth":1189,"text":101226},{"id":101249,"depth":45,"text":101250,"children":102630},[102631,102632],{"id":101569,"depth":1189,"text":101569},{"id":101705,"depth":1189,"text":101705},{"id":102312,"depth":45,"text":102313},{"id":102344,"depth":45,"text":102345},{"id":102449,"depth":45,"text":102450,"children":102636},[102637,102638,102639,102640,102642],{"id":102453,"depth":1189,"text":102456},{"id":102476,"depth":1189,"text":102477},{"id":102516,"depth":1189,"text":102517},{"id":102546,"depth":1189,"text":102641},"final time 不是严格等于 1.0",{"id":102569,"depth":1189,"text":102569},{"id":102603,"depth":45,"text":102604},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100635,"description":37},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102650,"title":102651,"body":102652,"description":37,"extension":48,"meta":104308,"navigation":50,"path":104309,"seo":104310,"stem":104311,"__hash__":104312},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102653,"toc":104284},[102654,102657,102659,102662,102665,102682,102777,102780,102786,102788,102790,102814,102817,102831,102834,102875,102877,102890,102892,102895,102943,102955,102958,102961,102967,102980,103047,103050,103069,103072,103075,103081,103083,103092,103095,103099,103108,103190,103199,103203,103209,103223,103233,103235,103565,103568,103580,103582,103593,103595,103598,103616,103619,103622,103640,103651,103654,103669,103679,103681,103702,103719,103739,103745,103785,103801,103817,103823,103826,103850,103866,103871,103901,103918,103943,103946,103961,103970,103985,103994,104009,104016,104018,104028,104041,104048,104051,104090,104097,104099,104151,104153,104159,104162,104169,104176,104179,104181,104199,104202,104205,104239,104251,104253,104256,104278,104281],[10,102655,102651],{"id":102656},"_2xml-与-mjcf-物理建模基础",[65,102658,100644],{"id":100643},[14,102660,102661],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,102663,102664],{},"本章结束后，你应该能看懂一个简单模型里：",[77,102666,102667,102670,102673,102676,102679],{},[80,102668,102669],{},"地面在哪里。",[80,102671,102672],{},"物体初始位置在哪里。",[80,102674,102675],{},"几何体是什么形状。",[80,102677,102678],{},"哪些 body 可以自由运动。",[80,102680,102681],{},"如何用名字在 Python 里找到 XML 中的对象。",[271,102683,102684,102694],{},[274,102685,102686],{},[277,102687,102688,102691],{},[280,102689,102690],{"align":23746},"标签",[280,102692,102693],{"align":23746},"作用",[318,102695,102696,102705,102715,102724,102734,102744,102757,102767],{},[277,102697,102698,102702],{},[323,102699,102700],{"align":23746},[120,102701,102534],{},[323,102703,102704],{"align":23746},"根节点",[277,102706,102707,102712],{},[323,102708,102709],{"align":23746},[120,102710,102711],{},"\u003Coption>",[323,102713,102714],{"align":23746},"仿真参数",[277,102716,102717,102721],{},[323,102718,102719],{"align":23746},[120,102720,102542],{},[323,102722,102723],{"align":23746},"世界中的物体",[277,102725,102726,102731],{},[323,102727,102728],{"align":23746},[120,102729,102730],{},"\u003Cbody>",[323,102732,102733],{"align":23746},"刚体",[277,102735,102736,102741],{},[323,102737,102738],{"align":23746},[120,102739,102740],{},"\u003Cgeom>",[323,102742,102743],{"align":23746},"几何体、碰撞体、可视体",[277,102745,102746,102754],{},[323,102747,102748,24989,102751],{"align":23746},[120,102749,102750],{},"\u003Cjoint>",[120,102752,102753],{},"\u003Cfreejoint>",[323,102755,102756],{"align":23746},"关节",[277,102758,102759,102764],{},[323,102760,102761],{"align":23746},[120,102762,102763],{},"\u003Csite>",[323,102765,102766],{"align":23746},"标记点",[277,102768,102769,102774],{},[323,102770,102771],{"align":23746},[120,102772,102773],{},"\u003Cactuator>",[323,102775,102776],{"align":23746},"控制器",[14,102778,102779],{},"初学时可以先记住：",[114,102781,102784],{"className":102782,"code":102783,"language":5197,"meta":37},[5195],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[120,102785,102783],{"__ignoreMap":37},[65,102787,100767],{"id":100766},[14,102789,100770],{},[114,102791,102793],{"className":23832,"code":102792,"language":23834,"meta":37,"style":37},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[120,102794,102795],{"__ignoreMap":37},[123,102796,102797,102799,102801,102803,102805,102807,102809,102811],{"class":125,"line":126},[123,102798,24587],{"class":1972},[123,102800,26326],{"class":238},[123,102802,23844],{"class":238},[123,102804,26411],{"class":182},[123,102806,102498],{"class":238},[123,102808,100811],{"class":238},[123,102810,102503],{"class":238},[123,102812,102813],{"class":238}," glfw-devel\n",[14,102815,102816],{},"pip:",[114,102818,102819],{"className":23832,"code":100916,"language":23834,"meta":37,"style":37},[120,102820,102821],{"__ignoreMap":37},[123,102822,102823,102825,102827,102829],{"class":125,"line":126},[123,102824,23841],{"class":1972},[123,102826,23844],{"class":238},[123,102828,100927],{"class":238},[123,102830,100930],{"class":238},[14,102832,102833],{},"conda:",[114,102835,102837],{"className":23832,"code":102836,"language":23834,"meta":37,"style":37},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[120,102838,102839,102856,102865],{"__ignoreMap":37},[123,102840,102841,102843,102845,102847,102850,102852,102854],{"class":125,"line":126},[123,102842,30341],{"class":1972},[123,102844,29187],{"class":238},[123,102846,25126],{"class":182},[123,102848,102849],{"class":238}," mujoco-xml",[123,102851,100972],{"class":238},[123,102853,100975],{"class":182},[123,102855,100978],{"class":182},[123,102857,102858,102860,102862],{"class":125,"line":45},[123,102859,30341],{"class":1972},[123,102861,100985],{"class":238},[123,102863,102864],{"class":238}," mujoco-xml\n",[123,102866,102867,102869,102871,102873],{"class":125,"line":1189},[123,102868,23841],{"class":1972},[123,102870,23844],{"class":238},[123,102872,100927],{"class":238},[123,102874,100930],{"class":238},[14,102876,101001],{},[77,102878,102879,102882,102887],{},[80,102880,102881],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[80,102883,102884,102885,28396],{},"本章使用基础标签，适用于 ",[120,102886,101024],{},[80,102888,102889],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[65,102891,101042],{"id":101041},[14,102893,102894],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[114,102896,102898],{"className":53078,"code":102897,"language":53080,"meta":37,"style":37},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[120,102899,102900,102914,102922,102927,102935],{"__ignoreMap":37},[123,102901,102902,102904,102906,102908,102910,102912],{"class":125,"line":126},[123,102903,1044],{"class":133},[123,102905,101018],{"class":51311},[123,102907,101772],{"class":1972},[123,102909,179],{"class":133},[123,102911,62690],{"class":238},[123,102913,51318],{"class":133},[123,102915,102916,102918,102920],{"class":125,"line":45},[123,102917,52155],{"class":133},[123,102919,101838],{"class":51311},[123,102921,51318],{"class":133},[123,102923,102924],{"class":125,"line":1189},[123,102925,102926],{"class":133},"    ...\n",[123,102928,102929,102931,102933],{"class":125,"line":1204},[123,102930,52428],{"class":133},[123,102932,101838],{"class":51311},[123,102934,51318],{"class":133},[123,102936,102937,102939,102941],{"class":125,"line":1210},[123,102938,51796],{"class":133},[123,102940,101018],{"class":51311},[123,102942,51318],{"class":133},[14,102944,102945,102947,102948,102950,102951,102954],{},[120,102946,51811],{}," 表示刚体。",[120,102949,101117],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[120,102952,102953],{},"joint"," 表示刚体相对父刚体如何运动。",[94,102956,102957],{"id":102957},"层级结构非常重要",[14,102959,102960],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[114,102962,102965],{"className":102963,"code":102964,"language":5197,"meta":37},[5195],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[120,102966,102964],{"__ignoreMap":37},[14,102968,102969,101015,102972,102975,102976,102979],{},[120,102970,102971],{},"red_box_geom",[120,102973,102974],{},"box_center"," 都属于 ",[120,102977,102978],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[114,102981,102983],{"className":53078,"code":102982,"language":53080,"meta":37,"style":37},"\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",[120,102984,102985,103005,103019,103039],{"__ignoreMap":37},[123,102986,102987,102989,102991,102993,102995,102997,102999,103001,103003],{"class":125,"line":126},[123,102988,1044],{"class":133},[123,102990,51811],{"class":51311},[123,102992,14930],{"class":1972},[123,102994,179],{"class":133},[123,102996,53502],{"class":238},[123,102998,101103],{"class":1972},[123,103000,179],{"class":133},[123,103002,101108],{"class":238},[123,103004,51318],{"class":133},[123,103006,103007,103009,103011,103013,103015,103017],{"class":125,"line":45},[123,103008,52155],{"class":133},[123,103010,101617],{"class":51311},[123,103012,14930],{"class":1972},[123,103014,179],{"class":133},[123,103016,101958],{"class":238},[123,103018,101141],{"class":133},[123,103020,103021,103023,103025,103027,103029,103031,103033,103035,103037],{"class":125,"line":1189},[123,103022,52155],{"class":133},[123,103024,101117],{"class":51311},[123,103026,53835],{"class":1972},[123,103028,179],{"class":133},[123,103030,53502],{"class":238},[123,103032,101133],{"class":1972},[123,103034,179],{"class":133},[123,103036,101138],{"class":238},[123,103038,101141],{"class":133},[123,103040,103041,103043,103045],{"class":125,"line":1204},[123,103042,51796],{"class":133},[123,103044,51811],{"class":51311},[123,103046,51318],{"class":133},[14,103048,103049],{},"含义:",[77,103051,103052,103058,103063,103066],{},[80,103053,103054,103055,103057],{},"创建名为 ",[120,103056,53725],{}," 的刚体",[80,103059,103060,103061],{},"初始位置在世界坐标 ",[120,103062,101166],{},[80,103064,103065],{},"它有一个自由关节",[80,103067,103068],{},"它有一个盒子几何体",[94,103070,103071],{"id":103071},"坐标怎么理解",[14,103073,103074],{},"MuJoCo 默认使用三维坐标：",[114,103076,103079],{"className":103077,"code":103078,"language":5197,"meta":37},[5195],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[120,103080,103078],{"__ignoreMap":37},[14,103082,14643],{},[114,103084,103086],{"className":53078,"code":103085,"language":53080,"meta":37,"style":37},"pos=\"0 0 1\"\n",[120,103087,103088],{"__ignoreMap":37},[123,103089,103090],{"class":125,"line":126},[123,103091,103085],{"class":133},[14,103093,103094],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[94,103096,103098],{"id":103097},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103100,103101,103102,82541,103105,103107],{},"不同 ",[120,103103,103104],{},"type",[120,103106,31507],{}," 含义不同：",[271,103109,103110,103125],{},[274,103111,103112],{},[277,103113,103114,103118,103123],{},[280,103115,103116],{"align":23746},[120,103117,103104],{},[280,103119,103120,103122],{"align":23746},[120,103121,31507],{}," 示例",[280,103124,100697],{"align":23746},[318,103126,103127,103141,103156,103175],{},[277,103128,103129,103133,103138],{},[323,103130,103131],{"align":23746},[120,103132,53725],{},[323,103134,103135],{"align":23746},[120,103136,103137],{},"size=\"0.1 0.2 0.3\"",[323,103139,103140],{"align":23746},"x\u002Fy\u002Fz 半边长，不是完整长度",[277,103142,103143,103148,103153],{},[323,103144,103145],{"align":23746},[120,103146,103147],{},"sphere",[323,103149,103150],{"align":23746},[120,103151,103152],{},"size=\"0.1\"",[323,103154,103155],{"align":23746},"球半径",[277,103157,103158,103163,103168],{},[323,103159,103160],{"align":23746},[120,103161,103162],{},"capsule",[323,103164,103165],{"align":23746},[120,103166,103167],{},"size=\"0.03\"",[323,103169,103170,103171,103174],{"align":23746},"胶囊半径，长度常用 ",[120,103172,103173],{},"fromto"," 指定",[277,103176,103177,103182,103187],{},[323,103178,103179],{"align":23746},[120,103180,103181],{},"plane",[323,103183,103184],{"align":23746},[120,103185,103186],{},"size=\"3 3 0.1\"",[323,103188,103189],{"align":23746},"可视平面大小，通常当地面",[14,103191,103192,103193,103195,103196,103198],{},"最容易踩坑的是 box：",[120,103194,102021],{}," 表示边长大约是 ",[120,103197,32048],{},"，因为 MuJoCo 用的是半边长。",[94,103200,103202],{"id":103201},"site-是什么","site 是什么",[14,103204,103205,103208],{},[120,103206,103207],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[77,103210,103211,103214,103217,103220],{},[80,103212,103213],{},"标记机械臂末端。",[80,103215,103216],{},"标记目标位置。",[80,103218,103219],{},"放传感器或相机参考点。",[80,103221,103222],{},"在 Python 中读取某个关键点的世界坐标。",[14,103224,103225,103226,101015,103229,103232],{},"在后面的 Reacher 任务中，",[120,103227,103228],{},"tip",[120,103230,103231],{},"target"," 就会用 site 表示。",[65,103234,101250],{"id":101249},[114,103236,103238],{"className":30389,"code":103237,"language":30391,"meta":37,"style":37},"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",[120,103239,103240,103246,103256,103260,103264,103272,103277,103281,103285,103289,103294,103298,103303,103308,103313,103318,103322,103326,103330,103334,103338,103342,103354,103366,103374,103378,103393,103408,103412,103425,103440,103453,103466,103470,103486,103490,103494,103505,103517,103529,103541,103545,103549,103561],{"__ignoreMap":37},[123,103241,103242,103244],{"class":125,"line":126},[123,103243,30403],{"class":129},[123,103245,101298],{"class":133},[123,103247,103248,103250,103252,103254],{"class":125,"line":45},[123,103249,30403],{"class":129},[123,103251,31391],{"class":133},[123,103253,31394],{"class":129},[123,103255,31397],{"class":133},[123,103257,103258],{"class":125,"line":1189},[123,103259,2409],{"emptyLinePlaceholder":50},[123,103261,103262],{"class":125,"line":1204},[123,103263,2409],{"emptyLinePlaceholder":50},[123,103265,103266,103268,103270],{"class":125,"line":1210},[123,103267,101311],{"class":182},[123,103269,13574],{"class":129},[123,103271,101316],{"class":238},[123,103273,103274],{"class":125,"line":1224},[123,103275,103276],{"class":238},"\u003Cmujoco model=\"xml_basic\">\n",[123,103278,103279],{"class":125,"line":1230},[123,103280,101326],{"class":238},[123,103282,103283],{"class":125,"line":1321},[123,103284,2409],{"emptyLinePlaceholder":50},[123,103286,103287],{"class":125,"line":1327},[123,103288,101335],{"class":238},[123,103290,103291],{"class":125,"line":1339},[123,103292,103293],{"class":238},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[123,103295,103296],{"class":125,"line":1621},[123,103297,2409],{"emptyLinePlaceholder":50},[123,103299,103300],{"class":125,"line":1626},[123,103301,103302],{"class":238},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[123,103304,103305],{"class":125,"line":1632},[123,103306,103307],{"class":238},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[123,103309,103310],{"class":125,"line":1637},[123,103311,103312],{"class":238},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[123,103314,103315],{"class":125,"line":1651},[123,103316,103317],{"class":238},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[123,103319,103320],{"class":125,"line":1656},[123,103321,101364],{"class":238},[123,103323,103324],{"class":125,"line":1662},[123,103325,101369],{"class":238},[123,103327,103328],{"class":125,"line":1683},[123,103329,101374],{"class":238},[123,103331,103332],{"class":125,"line":1688},[123,103333,95695],{"class":238},[123,103335,103336],{"class":125,"line":1702},[123,103337,2409],{"emptyLinePlaceholder":50},[123,103339,103340],{"class":125,"line":1707},[123,103341,2409],{"emptyLinePlaceholder":50},[123,103343,103344,103346,103348,103350,103352],{"class":125,"line":1736},[123,103345,31958],{"class":129},[123,103347,1982],{"class":1972},[123,103349,101395],{"class":133},[123,103351,95683],{"class":182},[123,103353,3748],{"class":133},[123,103355,103356,103358,103360,103362,103364],{"class":125,"line":1741},[123,103357,101404],{"class":133},[123,103359,179],{"class":129},[123,103361,101409],{"class":133},[123,103363,101311],{"class":182},[123,103365,140],{"class":133},[123,103367,103368,103370,103372],{"class":125,"line":1758},[123,103369,101418],{"class":133},[123,103371,179],{"class":129},[123,103373,101423],{"class":133},[123,103375,103376],{"class":125,"line":1763},[123,103377,2409],{"emptyLinePlaceholder":50},[123,103379,103380,103383,103385,103388,103391],{"class":125,"line":1768},[123,103381,103382],{"class":133},"    box_body_id ",[123,103384,179],{"class":129},[123,103386,103387],{"class":133}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[123,103389,103390],{"class":238},"\"red_box\"",[123,103392,140],{"class":133},[123,103394,103395,103398,103400,103403,103406],{"class":125,"line":1773},[123,103396,103397],{"class":133},"    site_id ",[123,103399,179],{"class":129},[123,103401,103402],{"class":133}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[123,103404,103405],{"class":238},"\"box_center\"",[123,103407,140],{"class":133},[123,103409,103410],{"class":125,"line":1787},[123,103411,2409],{"emptyLinePlaceholder":50},[123,103413,103414,103416,103419,103421,103423],{"class":125,"line":1792},[123,103415,3110],{"class":129},[123,103417,103418],{"class":133}," box_body_id ",[123,103420,1044],{"class":129},[123,103422,4102],{"class":182},[123,103424,3748],{"class":133},[123,103426,103427,103430,103433,103435,103438],{"class":125,"line":2586},[123,103428,103429],{"class":129},"        raise",[123,103431,103432],{"class":182}," RuntimeError",[123,103434,134],{"class":133},[123,103436,103437],{"class":238},"\"body red_box not found\"",[123,103439,140],{"class":133},[123,103441,103442,103444,103447,103449,103451],{"class":125,"line":2600},[123,103443,3110],{"class":129},[123,103445,103446],{"class":133}," site_id ",[123,103448,1044],{"class":129},[123,103450,4102],{"class":182},[123,103452,3748],{"class":133},[123,103454,103455,103457,103459,103461,103464],{"class":125,"line":2608},[123,103456,103429],{"class":129},[123,103458,103432],{"class":182},[123,103460,134],{"class":133},[123,103462,103463],{"class":238},"\"site box_center not found\"",[123,103465,140],{"class":133},[123,103467,103468],{"class":125,"line":2613},[123,103469,2409],{"emptyLinePlaceholder":50},[123,103471,103472,103474,103476,103478,103480,103482,103484],{"class":125,"line":2619},[123,103473,3210],{"class":129},[123,103475,101498],{"class":133},[123,103477,26054],{"class":129},[123,103479,32454],{"class":182},[123,103481,134],{"class":133},[123,103483,1731],{"class":182},[123,103485,30797],{"class":133},[123,103487,103488],{"class":125,"line":2625},[123,103489,101513],{"class":133},[123,103491,103492],{"class":125,"line":2630},[123,103493,2409],{"emptyLinePlaceholder":50},[123,103495,103496,103498,103500,103503],{"class":125,"line":7958},[123,103497,31310],{"class":182},[123,103499,134],{"class":133},[123,103501,103502],{"class":238},"\"simulation time:\"",[123,103504,101475],{"class":133},[123,103506,103507,103509,103511,103514],{"class":125,"line":7982},[123,103508,31310],{"class":182},[123,103510,134],{"class":133},[123,103512,103513],{"class":238},"\"box body position:\"",[123,103515,103516],{"class":133},", data.xpos[box_body_id].copy())\n",[123,103518,103519,103521,103523,103526],{"class":125,"line":7987},[123,103520,31310],{"class":182},[123,103522,134],{"class":133},[123,103524,103525],{"class":238},"\"site position:\"",[123,103527,103528],{"class":133},", data.site_xpos[site_id].copy())\n",[123,103530,103531,103533,103535,103538],{"class":125,"line":7993},[123,103532,31310],{"class":182},[123,103534,134],{"class":133},[123,103536,103537],{"class":238},"\"box qpos:\"",[123,103539,103540],{"class":133},", np.array(data.qpos))\n",[123,103542,103543],{"class":125,"line":8020},[123,103544,2409],{"emptyLinePlaceholder":50},[123,103546,103547],{"class":125,"line":8025},[123,103548,2409],{"emptyLinePlaceholder":50},[123,103550,103551,103553,103555,103557,103559],{"class":125,"line":8031},[123,103552,1540],{"class":129},[123,103554,31231],{"class":182},[123,103556,101556],{"class":129},[123,103558,101559],{"class":238},[123,103560,3748],{"class":133},[123,103562,103563],{"class":125,"line":8043},[123,103564,101566],{"class":133},[14,103566,103567],{},"保存为：",[114,103569,103571],{"className":23832,"code":103570,"language":23834,"meta":37,"style":37},"touch ch2_xml_basic.py\n",[120,103572,103573],{"__ignoreMap":37},[123,103574,103575,103577],{"class":125,"line":126},[123,103576,101280],{"class":1972},[123,103578,103579],{"class":238}," ch2_xml_basic.py\n",[14,103581,102298],{},[114,103583,103585],{"className":23832,"code":103584,"language":23834,"meta":37,"style":37},"python ch2_xml_basic.py\n",[120,103586,103587],{"__ignoreMap":37},[123,103588,103589,103591],{"class":125,"line":126},[123,103590,30391],{"class":1972},[123,103592,103579],{"class":238},[94,103594,101569],{"id":101569},[14,103596,103597],{},"用名字查找 body：",[114,103599,103601],{"className":30389,"code":103600,"language":30391,"meta":37,"style":37},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[120,103602,103603],{"__ignoreMap":37},[123,103604,103605,103608,103610,103612,103614],{"class":125,"line":126},[123,103606,103607],{"class":133},"box_body_id ",[123,103609,179],{"class":129},[123,103611,103387],{"class":133},[123,103613,103390],{"class":238},[123,103615,140],{"class":133},[14,103617,103618],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,103620,103621],{},"用名字查找 site：",[114,103623,103625],{"className":30389,"code":103624,"language":30391,"meta":37,"style":37},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[120,103626,103627],{"__ignoreMap":37},[123,103628,103629,103632,103634,103636,103638],{"class":125,"line":126},[123,103630,103631],{"class":133},"site_id ",[123,103633,179],{"class":129},[123,103635,103402],{"class":133},[123,103637,103405],{"class":238},[123,103639,140],{"class":133},[14,103641,103642,103643,103646,103647,103650],{},"注意第二个参数是对象类型。查 body 就用 ",[120,103644,103645],{},"mjOBJ_BODY","，查 site 就用 ",[120,103648,103649],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,103652,103653],{},"读取世界坐标：",[114,103655,103657],{"className":30389,"code":103656,"language":30391,"meta":37,"style":37},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[120,103658,103659,103664],{"__ignoreMap":37},[123,103660,103661],{"class":125,"line":126},[123,103662,103663],{"class":133},"data.xpos[box_body_id]\n",[123,103665,103666],{"class":125,"line":45},[123,103667,103668],{"class":133},"data.site_xpos[site_id]\n",[14,103670,103671,103674,103675,103678],{},[120,103672,103673],{},"xpos"," 是 body 的世界坐标，",[120,103676,103677],{},"site_xpos"," 是 site 的世界坐标。",[94,103680,101705],{"id":101705},[114,103682,103684],{"className":30389,"code":103683,"language":30391,"meta":37,"style":37},"import mujoco\nimport numpy as np\n",[120,103685,103686,103692],{"__ignoreMap":37},[123,103687,103688,103690],{"class":125,"line":126},[123,103689,30403],{"class":129},[123,103691,101298],{"class":133},[123,103693,103694,103696,103698,103700],{"class":125,"line":45},[123,103695,30403],{"class":129},[123,103697,31391],{"class":133},[123,103699,31394],{"class":129},[123,103701,31397],{"class":133},[14,103703,103704,103705,103708,103709,103712,103713,346,103716,28396],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[120,103706,103707],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[120,103710,103711],{},"as np"," 是习惯写法，后面就可以写 ",[120,103714,103715],{},"np.array(...)",[120,103717,103718],{},"np.round(...)",[114,103720,103721],{"className":30389,"code":101592,"language":30391,"meta":37,"style":37},[120,103722,103723,103731,103735],{"__ignoreMap":37},[123,103724,103725,103727,103729],{"class":125,"line":126},[123,103726,101311],{"class":182},[123,103728,13574],{"class":129},[123,103730,101316],{"class":238},[123,103732,103733],{"class":125,"line":45},[123,103734,101607],{"class":238},[123,103736,103737],{"class":125,"line":1189},[123,103738,95695],{"class":238},[14,103740,103741,103742,28396],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[120,103743,103744],{},"mujoco.MjModel.from_xml_string(XML)",[114,103746,103748],{"className":53078,"code":103747,"language":53080,"meta":37,"style":37},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[120,103749,103750],{"__ignoreMap":37},[123,103751,103752,103754,103756,103758,103760,103762,103764,103766,103769,103771,103773,103776,103778,103780,103783],{"class":125,"line":126},[123,103753,1044],{"class":133},[123,103755,103207],{"class":51311},[123,103757,14930],{"class":1972},[123,103759,179],{"class":133},[123,103761,103405],{"class":238},[123,103763,101103],{"class":1972},[123,103765,179],{"class":133},[123,103767,103768],{"class":238},"\"0 0 0\"",[123,103770,101133],{"class":1972},[123,103772,179],{"class":133},[123,103774,103775],{"class":238},"\"0.03\"",[123,103777,78778],{"class":1972},[123,103779,179],{"class":133},[123,103781,103782],{"class":238},"\"0 1 0 1\"",[123,103784,101141],{"class":133},[14,103786,103787,103789,103790,103793,103794,103796,103797,103800],{},[120,103788,103207],{}," 是标记点。",[120,103791,103792],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[120,103795,103167],{}," 表示显示出来的小球大小。",[120,103798,103799],{},"rgba=\"0 1 0 1\""," 表示绿色。",[114,103802,103803],{"className":30389,"code":103600,"language":30391,"meta":37,"style":37},[120,103804,103805],{"__ignoreMap":37},[123,103806,103807,103809,103811,103813,103815],{"class":125,"line":126},[123,103808,103607],{"class":133},[123,103810,179],{"class":129},[123,103812,103387],{"class":133},[123,103814,103390],{"class":238},[123,103816,140],{"class":133},[14,103818,103819,103820,103822],{},"这行的作用是：根据名字 ",[120,103821,103390],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,103824,103825],{},"拆开看：",[77,103827,103828,103834,103839,103845],{},[80,103829,103830,103833],{},[120,103831,103832],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[80,103835,103836,103838],{},[120,103837,102082],{}," 是被查询的模型。",[80,103840,103841,103844],{},[120,103842,103843],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[80,103846,103847,103849],{},[120,103848,103390],{}," 是 XML 里写的名字。",[114,103851,103852],{"className":30389,"code":103624,"language":30391,"meta":37,"style":37},[120,103853,103854],{"__ignoreMap":37},[123,103855,103856,103858,103860,103862,103864],{"class":125,"line":126},[123,103857,103631],{"class":133},[123,103859,179],{"class":129},[123,103861,103402],{"class":133},[123,103863,103405],{"class":238},[123,103865,140],{"class":133},[14,103867,103868,103869,28396],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[120,103870,103405],{},[114,103872,103874],{"className":30389,"code":103873,"language":30391,"meta":37,"style":37},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[120,103875,103876,103888],{"__ignoreMap":37},[123,103877,103878,103880,103882,103884,103886],{"class":125,"line":126},[123,103879,1540],{"class":129},[123,103881,103418],{"class":133},[123,103883,1044],{"class":129},[123,103885,4102],{"class":182},[123,103887,3748],{"class":133},[123,103889,103890,103893,103895,103897,103899],{"class":125,"line":45},[123,103891,103892],{"class":129},"    raise",[123,103894,103432],{"class":182},[123,103896,134],{"class":133},[123,103898,103437],{"class":238},[123,103900,140],{"class":133},[14,103902,103903,103905,103906,103909,103910,103913,103914,103917],{},[120,103904,1540],{}," 是条件判断。",[120,103907,103908],{},"mj_name2id"," 找不到对象时会返回 ",[120,103911,103912],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[120,103915,103916],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[114,103919,103921],{"className":30389,"code":103920,"language":30391,"meta":37,"style":37},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[120,103922,103923,103939],{"__ignoreMap":37},[123,103924,103925,103927,103929,103931,103933,103935,103937],{"class":125,"line":126},[123,103926,3034],{"class":129},[123,103928,101498],{"class":133},[123,103930,26054],{"class":129},[123,103932,32454],{"class":182},[123,103934,134],{"class":133},[123,103936,1731],{"class":182},[123,103938,30797],{"class":133},[123,103940,103941],{"class":125,"line":45},[123,103942,101696],{"class":133},[14,103944,103945],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[114,103947,103949],{"className":30389,"code":103948,"language":30391,"meta":37,"style":37},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[120,103950,103951],{"__ignoreMap":37},[123,103952,103953,103955,103957,103959],{"class":125,"line":126},[123,103954,30426],{"class":182},[123,103956,134],{"class":133},[123,103958,103513],{"class":238},[123,103960,103516],{"class":133},[14,103962,103963,103965,103966,103969],{},[120,103964,101076],{}," 保存所有 body 的世界坐标。",[120,103967,103968],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[114,103971,103973],{"className":30389,"code":103972,"language":30391,"meta":37,"style":37},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[120,103974,103975],{"__ignoreMap":37},[123,103976,103977,103979,103981,103983],{"class":125,"line":126},[123,103978,30426],{"class":182},[123,103980,134],{"class":133},[123,103982,103525],{"class":238},[123,103984,103528],{"class":133},[14,103986,103987,103990,103991,103993],{},[120,103988,103989],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[120,103992,102974],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[114,103995,103997],{"className":30389,"code":103996,"language":30391,"meta":37,"style":37},"print(\"box qpos:\", np.array(data.qpos))\n",[120,103998,103999],{"__ignoreMap":37},[123,104000,104001,104003,104005,104007],{"class":125,"line":126},[123,104002,30426],{"class":182},[123,104004,134],{"class":133},[123,104006,103537],{"class":238},[123,104008,103540],{"class":133},[14,104010,104011,104012,104015],{},"这里打印广义位置数组。",[120,104013,104014],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[65,104017,102313],{"id":102312},[14,104019,104020,104021,104024,104025,28396],{},"程序会输出 ",[120,104022,104023],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[120,104026,104027],{},"qpos",[14,104029,104030,104032,104033,104036,104037,104040],{},[120,104031,103968],{}," 是 body 的世界坐标位置。",[120,104034,104035],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[120,104038,104039],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104042,82233,104043,82541,104045,104047],{},[120,104044,102974],{},[120,104046,103792],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104049,104050],{},"如果你把 site 改成：",[114,104052,104054],{"className":53078,"code":104053,"language":53080,"meta":37,"style":37},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[120,104055,104056],{"__ignoreMap":37},[123,104057,104058,104060,104062,104064,104066,104069,104071,104073,104076,104078,104080,104082,104084,104086,104088],{"class":125,"line":126},[123,104059,1044],{"class":133},[123,104061,103207],{"class":51311},[123,104063,14930],{"class":1972},[123,104065,179],{"class":133},[123,104067,104068],{"class":238},"\"box_top\"",[123,104070,101103],{"class":1972},[123,104072,179],{"class":133},[123,104074,104075],{"class":238},"\"0 0 0.15\"",[123,104077,101133],{"class":1972},[123,104079,179],{"class":133},[123,104081,103775],{"class":238},[123,104083,78778],{"class":1972},[123,104085,179],{"class":133},[123,104087,103782],{"class":238},[123,104089,101141],{"class":133},[14,104091,104092,104093,104096],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[120,104094,104095],{},"site position"," 就会比 body position 的 z 坐标更高。",[65,104098,102345],{"id":102344},[77,104100,104101,104110,104113,104120,104126,104137],{},[80,104102,102408,104103,104105,104106,102411,104108,28396],{},[120,104104,102978],{}," 的初始高度从 ",[120,104107,351],{},[120,104109,211],{},[80,104111,104112],{},"重新运行程序。",[80,104114,104115,104116,104119],{},"观察 ",[120,104117,104118],{},"box qpos"," 和最终位置是否变化。",[80,104121,104122,104123,104125],{},"故意把 ",[120,104124,103207],{}," 名称改错，确认程序能报错。",[80,104127,102408,104128,104130,104131,102411,104133,104136],{},[120,104129,101117],{}," 的颜色 ",[120,104132,102029],{},[120,104134,104135],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[80,104138,102408,104139,82541,104141,102411,104144,104147,104148,104150],{},[120,104140,102974],{},[120,104142,104143],{},"pos",[120,104145,104146],{},"0 0 0.2","，观察 ",[120,104149,104095],{}," 如何变化。",[65,104152,102450],{"id":102449},[94,104154,104156],{"id":104155},"xml-error-schema-violation",[120,104157,104158],{},"XML Error: Schema violation",[14,104160,104161],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[94,104163,104165,81301,104167],{"id":104164},"mj_name2id-返回-1",[120,104166,103908],{},[120,104168,103912],{},[14,104170,104171,104172,104175],{},"说明名字没有找到。检查 XML 中 ",[120,104173,104174],{},"name=\"...\"","，并确认对象类型正确。",[94,104177,104178],{"id":104178},"物体不下落",[14,104180,102520],{},[77,104182,104183,104188,104193],{},[80,104184,104185,104186],{},"body 是否有 ",[120,104187,101617],{},[80,104189,104190,104191],{},"gravity 是否为 ",[120,104192,102586],{},[80,104194,104195,104196,104198],{},"body 是否被固定在 ",[120,104197,101838],{}," 中",[94,104200,104201],{"id":104201},"坐标看起来不符合预期",[14,104203,104204],{},"先区分两种坐标：",[271,104206,104207,104216],{},[274,104208,104209],{},[277,104210,104211,104214],{},[280,104212,104213],{"align":23746},"坐标",[280,104215,100697],{"align":23746},[318,104217,104218,104228],{},[277,104219,104220,104225],{},[323,104221,104222,104223],{"align":23746},"XML 里的 ",[120,104224,104143],{},[323,104226,104227],{"align":23746},"相对父 body 的局部坐标",[277,104229,104230,104236],{},[323,104231,104232,24989,104234],{"align":23746},[120,104233,101076],{},[120,104235,103989],{},[323,104237,104238],{"align":23746},"仿真更新后的世界坐标",[14,104240,104241,104242,104244,104245,82550,104248,104250],{},"如果你修改了 ",[120,104243,101067],{},"，但还没调用 ",[120,104246,104247],{},"mj_forward",[120,104249,101212],{},"，世界坐标可能还没有更新。",[65,104252,102604],{"id":102603},[14,104254,104255],{},"MJCF 建模先掌握四件事：",[77,104257,104258,104263,104268,104273],{},[80,104259,104260,104262],{},[120,104261,51811],{}," 表示刚体层级。",[80,104264,104265,104267],{},[120,104266,101117],{}," 表示形状、碰撞和质量。",[80,104269,104270,104272],{},[120,104271,102953],{}," 决定 body 能不能动、怎么动。",[80,104274,104275,104277],{},[120,104276,103207],{}," 用来标记关键点，方便 Python 读取位置。",[14,104279,104280],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5136,104282,104283],{},"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":37,"searchDepth":45,"depth":45,"links":104285},[104286,104287,104288,104294,104298,104299,104300,104307],{"id":100643,"depth":45,"text":100644},{"id":100766,"depth":45,"text":100767},{"id":101041,"depth":45,"text":101042,"children":104289},[104290,104291,104292,104293],{"id":102957,"depth":1189,"text":102957},{"id":103071,"depth":1189,"text":103071},{"id":103097,"depth":1189,"text":103098},{"id":103201,"depth":1189,"text":103202},{"id":101249,"depth":45,"text":101250,"children":104295},[104296,104297],{"id":101569,"depth":1189,"text":101569},{"id":101705,"depth":1189,"text":101705},{"id":102312,"depth":45,"text":102313},{"id":102344,"depth":45,"text":102345},{"id":102449,"depth":45,"text":102450,"children":104301},[104302,104303,104305,104306],{"id":104155,"depth":1189,"text":104158},{"id":104164,"depth":1189,"text":104304},"mj_name2id 返回 -1",{"id":104178,"depth":1189,"text":104178},{"id":104201,"depth":1189,"text":104201},{"id":102603,"depth":45,"text":102604},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102651,"description":37},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104314,"title":104315,"body":104316,"description":37,"extension":48,"meta":105811,"navigation":50,"path":105812,"seo":105813,"stem":105814,"__hash__":105815},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104317,"toc":105783},[104318,104321,104323,104326,104329,104367,104370,104376,104379,104381,104383,104410,104412,104426,104428,104469,104471,104495,104497,104500,104509,104518,104521,104530,104538,104547,104550,104560,104563,104615,104622,104628,104636,104684,104687,104706,104709,104717,104721,104730,104763,104765,105113,105115,105127,105129,105140,105142,105145,105166,105172,105175,105200,105210,105213,105221,105224,105227,105248,105259,105261,105281,105284,105305,105314,105333,105339,105364,105367,105381,105388,105412,105415,105423,105432,105448,105460,105468,105477,105479,105482,105506,105511,105514,105536,105538,105577,105579,105586,105588,105596,105599,105602,105614,105655,105662,105673,105680,105683,105732,105735,105738,105744,105746,105751,105777,105780],[10,104319,104315],{"id":104320},"_3python-控制接口读取状态与推进仿真",[65,104322,100644],{"id":100643},[14,104324,104325],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104327,104328],{},"你将学习:",[77,104330,104331,104336,104341,104345,104350,104361],{},[80,104332,104333],{},[120,104334,104335],{},"MjModel.from_xml_string",[80,104337,104338],{},[120,104339,104340],{},"MjData(model)",[80,104342,104343],{},[120,104344,101212],{},[80,104346,104347],{},[120,104348,104349],{},"mj_resetData",[80,104351,104352,104353,346,104355,346,104358],{},"读取 ",[120,104354,104027],{},[120,104356,104357],{},"qvel",[120,104359,104360],{},"ctrl",[80,104362,104363,104364],{},"使用 ",[120,104365,104366],{},"model.opt.timestep",[14,104368,104369],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[114,104371,104374],{"className":104372,"code":104373,"language":5197,"meta":37},[5195],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[120,104375,104373],{"__ignoreMap":37},[14,104377,104378],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[65,104380,100767],{"id":100766},[14,104382,100770],{},[114,104384,104386],{"className":23832,"code":104385,"language":23834,"meta":37,"style":37},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[120,104387,104388],{"__ignoreMap":37},[123,104389,104390,104392,104394,104396,104398,104401,104403,104405,104407],{"class":125,"line":126},[123,104391,24587],{"class":1972},[123,104393,26326],{"class":238},[123,104395,23844],{"class":238},[123,104397,26411],{"class":182},[123,104399,104400],{"class":238}," python3",[123,104402,100795],{"class":238},[123,104404,102498],{"class":238},[123,104406,100811],{"class":238},[123,104408,104409],{"class":238}," glfw\n",[14,104411,102816],{},[114,104413,104414],{"className":23832,"code":100916,"language":23834,"meta":37,"style":37},[120,104415,104416],{"__ignoreMap":37},[123,104417,104418,104420,104422,104424],{"class":125,"line":126},[123,104419,23841],{"class":1972},[123,104421,23844],{"class":238},[123,104423,100927],{"class":238},[123,104425,100930],{"class":238},[14,104427,102833],{},[114,104429,104431],{"className":23832,"code":104430,"language":23834,"meta":37,"style":37},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[120,104432,104433,104450,104459],{"__ignoreMap":37},[123,104434,104435,104437,104439,104441,104444,104446,104448],{"class":125,"line":126},[123,104436,30341],{"class":1972},[123,104438,29187],{"class":238},[123,104440,25126],{"class":182},[123,104442,104443],{"class":238}," mujoco-python-api",[123,104445,100972],{"class":238},[123,104447,100975],{"class":182},[123,104449,100978],{"class":182},[123,104451,104452,104454,104456],{"class":125,"line":45},[123,104453,30341],{"class":1972},[123,104455,100985],{"class":238},[123,104457,104458],{"class":238}," mujoco-python-api\n",[123,104460,104461,104463,104465,104467],{"class":125,"line":1189},[123,104462,23841],{"class":1972},[123,104464,23844],{"class":238},[123,104466,100927],{"class":238},[123,104468,100930],{"class":238},[14,104470,101001],{},[77,104472,104473,104480,104489],{},[80,104474,104475,101015,104477,104479],{},[120,104476,100672],{},[120,104478,100677],{}," 是官方 Python bindings 的类名。",[80,104481,104482,104483,104486,104487,28396],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[120,104484,104485],{},"mjModel"," 在 Python 中是 ",[120,104488,100706],{},[80,104490,104491,104492,28396],{},"不要使用 ",[120,104493,104494],{},"sim = mujoco_py.MjSim(...)",[65,104496,101042],{"id":101041},[14,104498,104499],{},"仿真推进核心代码:",[114,104501,104503],{"className":30389,"code":104502,"language":30391,"meta":37,"style":37},"mujoco.mj_step(model, data)\n",[120,104504,104505],{"__ignoreMap":37},[123,104506,104507],{"class":125,"line":126},[123,104508,104502],{"class":133},[14,104510,104511,104512,346,104514,346,104516,28396],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[120,104513,101067],{},[120,104515,101070],{},[120,104517,101064],{},[14,104519,104520],{},"重置仿真:",[114,104522,104524],{"className":30389,"code":104523,"language":30391,"meta":37,"style":37},"mujoco.mj_resetData(model, data)\n",[120,104525,104526],{"__ignoreMap":37},[123,104527,104528],{"class":125,"line":126},[123,104529,104523],{"class":133},[14,104531,104532,104533,82550,104535,104537],{},"如果手动修改了 ",[120,104534,101067],{},[120,104536,101070],{},"，通常应调用:",[114,104539,104541],{"className":30389,"code":104540,"language":30391,"meta":37,"style":37},"mujoco.mj_forward(model, data)\n",[120,104542,104543],{"__ignoreMap":37},[123,104544,104545],{"class":125,"line":126},[123,104546,104540],{"class":133},[14,104548,104549],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[94,104551,104553,346,104555,346,104557,104559],{"id":104552},"qposqvelctrl-是什么",[120,104554,104027],{},[120,104556,104357],{},[120,104558,104360],{}," 是什么",[14,104561,104562],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[271,104564,104565,104577],{},[274,104566,104567],{},[277,104568,104569,104572,104574],{},[280,104570,104571],{"align":23746},"字段",[280,104573,100697],{"align":23746},[280,104575,104576],{"align":23746},"谁来修改",[318,104578,104579,104591,104603],{},[277,104580,104581,104585,104588],{},[323,104582,104583],{"align":23746},[120,104584,101067],{},[323,104586,104587],{"align":23746},"广义位置，例如小车位置、关节角、自由物体位置姿态",[323,104589,104590],{"align":23746},"MuJoCo 更新，也可以手动设置初始状态",[277,104592,104593,104597,104600],{},[323,104594,104595],{"align":23746},[120,104596,101070],{},[323,104598,104599],{"align":23746},"广义速度，例如小车速度、关节角速度",[323,104601,104602],{"align":23746},"MuJoCo 更新，也可以手动清零",[277,104604,104605,104609,104612],{},[323,104606,104607],{"align":23746},[120,104608,101073],{},[323,104610,104611],{"align":23746},"actuator 的控制输入",[323,104613,104614],{"align":23746},"主要由你的控制代码写入",[14,104616,9035,104617,101015,104619,104621],{},[120,104618,104027],{},[120,104620,104357],{}," 不一定同维。自由刚体就是典型例子：",[114,104623,104626],{"className":104624,"code":104625,"language":5197,"meta":37},[5195],"freejoint: qpos 7 维，qvel 6 维\n",[120,104627,104625],{"__ignoreMap":37},[94,104629,104631,101015,104633,104635],{"id":104630},"mj_step-和-mj_forward-的区别",[120,104632,101212],{},[120,104634,104247],{}," 的区别",[271,104637,104638,104651],{},[274,104639,104640],{},[277,104641,104642,104645,104648],{},[280,104643,104644],{"align":23746},"函数",[280,104646,104647],{"align":23746},"是否推进时间",[280,104649,104650],{"align":23746},"什么时候用",[318,104652,104653,104666],{},[277,104654,104655,104660,104663],{},[323,104656,104657],{"align":23746},[120,104658,104659],{},"mj_step(model, data)",[323,104661,104662],{"align":23746},"是",[323,104664,104665],{"align":23746},"正常仿真循环，每调用一次前进一步",[277,104667,104668,104673,104676],{},[323,104669,104670],{"align":23746},[120,104671,104672],{},"mj_forward(model, data)",[323,104674,104675],{"align":23746},"否",[323,104677,104678,104679,346,104681,104683],{"align":23746},"手动改了 ",[120,104680,104027],{},[120,104682,104357],{}," 后，刷新派生量",[14,104685,104686],{},"例如你写：",[114,104688,104690],{"className":30389,"code":104689,"language":30391,"meta":37,"style":37},"data.qpos[2] = 2.0\n",[120,104691,104692],{"__ignoreMap":37},[123,104693,104694,104697,104699,104701,104703],{"class":125,"line":126},[123,104695,104696],{"class":133},"data.qpos[",[123,104698,211],{"class":182},[123,104700,4452],{"class":133},[123,104702,179],{"class":129},[123,104704,104705],{"class":182}," 2.0\n",[14,104707,104708],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[114,104710,104711],{"className":30389,"code":104540,"language":30391,"meta":37,"style":37},[120,104712,104713],{"__ignoreMap":37},[123,104714,104715],{"class":125,"line":126},[123,104716,104540],{"class":133},[94,104718,104720],{"id":104719},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,104722,104723,104726,104727,104729],{},[120,104724,104725],{},"mujoco.mj_resetData(model, data)"," 会把 ",[120,104728,33412],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[114,104731,104733],{"className":30389,"code":104732,"language":30391,"meta":37,"style":37},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[120,104734,104735,104739,104749,104759],{"__ignoreMap":37},[123,104736,104737],{"class":125,"line":126},[123,104738,104523],{"class":133},[123,104740,104741,104744,104746],{"class":125,"line":45},[123,104742,104743],{"class":133},"data.qpos[:] ",[123,104745,179],{"class":129},[123,104747,104748],{"class":133}," random_qpos\n",[123,104750,104751,104754,104756],{"class":125,"line":1189},[123,104752,104753],{"class":133},"data.qvel[:] ",[123,104755,179],{"class":129},[123,104757,104758],{"class":182}," 0.0\n",[123,104760,104761],{"class":125,"line":1204},[123,104762,104540],{"class":133},[65,104764,101250],{"id":101249},[114,104766,104768],{"className":30389,"code":104767,"language":30391,"meta":37,"style":37},"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",[120,104769,104770,104776,104786,104790,104794,104802,104807,104811,104815,104819,104824,104828,104833,104838,104843,104847,104851,104855,104859,104863,104867,104886,104893,104905,104916,104932,104948,104952,104956,104968,104980,104988,104992,105003,105007,105023,105027,105031,105040,105044,105049,105058,105062,105075,105080,105089,105093,105097,105109],{"__ignoreMap":37},[123,104771,104772,104774],{"class":125,"line":126},[123,104773,30403],{"class":129},[123,104775,101298],{"class":133},[123,104777,104778,104780,104782,104784],{"class":125,"line":45},[123,104779,30403],{"class":129},[123,104781,31391],{"class":133},[123,104783,31394],{"class":129},[123,104785,31397],{"class":133},[123,104787,104788],{"class":125,"line":1189},[123,104789,2409],{"emptyLinePlaceholder":50},[123,104791,104792],{"class":125,"line":1204},[123,104793,2409],{"emptyLinePlaceholder":50},[123,104795,104796,104798,104800],{"class":125,"line":1210},[123,104797,101311],{"class":182},[123,104799,13574],{"class":129},[123,104801,101316],{"class":238},[123,104803,104804],{"class":125,"line":1224},[123,104805,104806],{"class":238},"\u003Cmujoco model=\"state_api\">\n",[123,104808,104809],{"class":125,"line":1230},[123,104810,101326],{"class":238},[123,104812,104813],{"class":125,"line":1321},[123,104814,2409],{"emptyLinePlaceholder":50},[123,104816,104817],{"class":125,"line":1327},[123,104818,101335],{"class":238},[123,104820,104821],{"class":125,"line":1339},[123,104822,104823],{"class":238},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[123,104825,104826],{"class":125,"line":1621},[123,104827,2409],{"emptyLinePlaceholder":50},[123,104829,104830],{"class":125,"line":1626},[123,104831,104832],{"class":238},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[123,104834,104835],{"class":125,"line":1632},[123,104836,104837],{"class":238},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[123,104839,104840],{"class":125,"line":1637},[123,104841,104842],{"class":238},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[123,104844,104845],{"class":125,"line":1651},[123,104846,101364],{"class":238},[123,104848,104849],{"class":125,"line":1656},[123,104850,101369],{"class":238},[123,104852,104853],{"class":125,"line":1662},[123,104854,101374],{"class":238},[123,104856,104857],{"class":125,"line":1683},[123,104858,95695],{"class":238},[123,104860,104861],{"class":125,"line":1688},[123,104862,2409],{"emptyLinePlaceholder":50},[123,104864,104865],{"class":125,"line":1702},[123,104866,2409],{"emptyLinePlaceholder":50},[123,104868,104869,104871,104874,104877,104879,104882,104884],{"class":125,"line":1707},[123,104870,31958],{"class":129},[123,104872,104873],{"class":1972}," print_state",[123,104875,104876],{"class":133},"(prefix: ",[123,104878,1309],{"class":182},[123,104880,104881],{"class":133},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[123,104883,95683],{"class":182},[123,104885,3748],{"class":133},[123,104887,104888,104890],{"class":125,"line":1736},[123,104889,31310],{"class":182},[123,104891,104892],{"class":133},"(prefix)\n",[123,104894,104895,104897,104899,104902],{"class":125,"line":1741},[123,104896,31310],{"class":182},[123,104898,134],{"class":133},[123,104900,104901],{"class":238},"\"  timestep:\"",[123,104903,104904],{"class":133},", model.opt.timestep)\n",[123,104906,104907,104909,104911,104914],{"class":125,"line":1758},[123,104908,31310],{"class":182},[123,104910,134],{"class":133},[123,104912,104913],{"class":238},"\"  time:\"",[123,104915,101475],{"class":133},[123,104917,104918,104920,104922,104925,104928,104930],{"class":125,"line":1763},[123,104919,31310],{"class":182},[123,104921,134],{"class":133},[123,104923,104924],{"class":238},"\"  qpos:\"",[123,104926,104927],{"class":133},", np.round(data.qpos.copy(), ",[123,104929,427],{"class":182},[123,104931,30508],{"class":133},[123,104933,104934,104936,104938,104941,104944,104946],{"class":125,"line":1768},[123,104935,31310],{"class":182},[123,104937,134],{"class":133},[123,104939,104940],{"class":238},"\"  qvel:\"",[123,104942,104943],{"class":133},", np.round(data.qvel.copy(), ",[123,104945,427],{"class":182},[123,104947,30508],{"class":133},[123,104949,104950],{"class":125,"line":1773},[123,104951,2409],{"emptyLinePlaceholder":50},[123,104953,104954],{"class":125,"line":1787},[123,104955,2409],{"emptyLinePlaceholder":50},[123,104957,104958,104960,104962,104964,104966],{"class":125,"line":1792},[123,104959,31958],{"class":129},[123,104961,1982],{"class":1972},[123,104963,101395],{"class":133},[123,104965,95683],{"class":182},[123,104967,3748],{"class":133},[123,104969,104970,104972,104974,104976,104978],{"class":125,"line":2586},[123,104971,101404],{"class":133},[123,104973,179],{"class":129},[123,104975,101409],{"class":133},[123,104977,101311],{"class":182},[123,104979,140],{"class":133},[123,104981,104982,104984,104986],{"class":125,"line":2600},[123,104983,101418],{"class":133},[123,104985,179],{"class":129},[123,104987,101423],{"class":133},[123,104989,104990],{"class":125,"line":2608},[123,104991,2409],{"emptyLinePlaceholder":50},[123,104993,104994,104997,105000],{"class":125,"line":2613},[123,104995,104996],{"class":133},"    print_state(",[123,104998,104999],{"class":238},"\"initial\"",[123,105001,105002],{"class":133},", model, data)\n",[123,105004,105005],{"class":125,"line":2619},[123,105006,2409],{"emptyLinePlaceholder":50},[123,105008,105009,105011,105013,105015,105017,105019,105021],{"class":125,"line":2625},[123,105010,3210],{"class":129},[123,105012,101498],{"class":133},[123,105014,26054],{"class":129},[123,105016,32454],{"class":182},[123,105018,134],{"class":133},[123,105020,790],{"class":182},[123,105022,30797],{"class":133},[123,105024,105025],{"class":125,"line":2630},[123,105026,101513],{"class":133},[123,105028,105029],{"class":125,"line":7958},[123,105030,2409],{"emptyLinePlaceholder":50},[123,105032,105033,105035,105038],{"class":125,"line":7982},[123,105034,104996],{"class":133},[123,105036,105037],{"class":238},"\"after 50 steps\"",[123,105039,105002],{"class":133},[123,105041,105042],{"class":125,"line":7987},[123,105043,2409],{"emptyLinePlaceholder":50},[123,105045,105046],{"class":125,"line":7993},[123,105047,105048],{"class":133},"    mujoco.mj_resetData(model, data)\n",[123,105050,105051,105053,105056],{"class":125,"line":8020},[123,105052,104996],{"class":133},[123,105054,105055],{"class":238},"\"after reset\"",[123,105057,105002],{"class":133},[123,105059,105060],{"class":125,"line":8025},[123,105061,2409],{"emptyLinePlaceholder":50},[123,105063,105064,105067,105069,105071,105073],{"class":125,"line":8031},[123,105065,105066],{"class":133},"    data.qpos[",[123,105068,211],{"class":182},[123,105070,4452],{"class":133},[123,105072,179],{"class":129},[123,105074,104705],{"class":182},[123,105076,105077],{"class":125,"line":8043},[123,105078,105079],{"class":133},"    mujoco.mj_forward(model, data)\n",[123,105081,105082,105084,105087],{"class":125,"line":8055},[123,105083,104996],{"class":133},[123,105085,105086],{"class":238},"\"after manual qpos edit\"",[123,105088,105002],{"class":133},[123,105090,105091],{"class":125,"line":8067},[123,105092,2409],{"emptyLinePlaceholder":50},[123,105094,105095],{"class":125,"line":9726},[123,105096,2409],{"emptyLinePlaceholder":50},[123,105098,105099,105101,105103,105105,105107],{"class":125,"line":9751},[123,105100,1540],{"class":129},[123,105102,31231],{"class":182},[123,105104,101556],{"class":129},[123,105106,101559],{"class":238},[123,105108,3748],{"class":133},[123,105110,105111],{"class":125,"line":9774},[123,105112,101566],{"class":133},[14,105114,103567],{},[114,105116,105118],{"className":23832,"code":105117,"language":23834,"meta":37,"style":37},"touch ch3_python_state.py\n",[120,105119,105120],{"__ignoreMap":37},[123,105121,105122,105124],{"class":125,"line":126},[123,105123,101280],{"class":1972},[123,105125,105126],{"class":238}," ch3_python_state.py\n",[14,105128,102298],{},[114,105130,105132],{"className":23832,"code":105131,"language":23834,"meta":37,"style":37},"python ch3_python_state.py\n",[120,105133,105134],{"__ignoreMap":37},[123,105135,105136,105138],{"class":125,"line":126},[123,105137,30391],{"class":1972},[123,105139,105126],{"class":238},[94,105141,101569],{"id":101569},[14,105143,105144],{},"打印状态的函数：",[114,105146,105148],{"className":30389,"code":105147,"language":30391,"meta":37,"style":37},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[120,105149,105150],{"__ignoreMap":37},[123,105151,105152,105154,105156,105158,105160,105162,105164],{"class":125,"line":126},[123,105153,31958],{"class":129},[123,105155,104873],{"class":1972},[123,105157,104876],{"class":133},[123,105159,1309],{"class":182},[123,105161,104881],{"class":133},[123,105163,95683],{"class":182},[123,105165,3748],{"class":133},[14,105167,105168,105169,105171],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[120,105170,33412],{}," 里发生了什么。",[14,105173,105174],{},"推进 50 步：",[114,105176,105178],{"className":30389,"code":105177,"language":30391,"meta":37,"style":37},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[120,105179,105180,105196],{"__ignoreMap":37},[123,105181,105182,105184,105186,105188,105190,105192,105194],{"class":125,"line":126},[123,105183,3034],{"class":129},[123,105185,101498],{"class":133},[123,105187,26054],{"class":129},[123,105189,32454],{"class":182},[123,105191,134],{"class":133},[123,105193,790],{"class":182},[123,105195,30797],{"class":133},[123,105197,105198],{"class":125,"line":45},[123,105199,101696],{"class":133},[14,105201,105202,105203,105206,105207,105209],{},"由于 ",[120,105204,105205],{},"timestep=0.01","，所以 50 步后时间约为 ",[120,105208,35340],{}," 秒。",[14,105211,105212],{},"重置：",[114,105214,105215],{"className":30389,"code":104523,"language":30391,"meta":37,"style":37},[120,105216,105217],{"__ignoreMap":37},[123,105218,105219],{"class":125,"line":126},[123,105220,104523],{"class":133},[14,105222,105223],{},"这会把时间、位置、速度恢复到初始状态。",[14,105225,105226],{},"手动改高度：",[114,105228,105230],{"className":30389,"code":105229,"language":30391,"meta":37,"style":37},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[120,105231,105232,105244],{"__ignoreMap":37},[123,105233,105234,105236,105238,105240,105242],{"class":125,"line":126},[123,105235,104696],{"class":133},[123,105237,211],{"class":182},[123,105239,4452],{"class":133},[123,105241,179],{"class":129},[123,105243,104705],{"class":182},[123,105245,105246],{"class":125,"line":45},[123,105247,104540],{"class":133},[14,105249,105250,105251,105254,105255,105258],{},"这个例子里 ",[120,105252,105253],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[120,105256,105257],{},"2.0"," 表示把小球放到更高的位置。",[94,105260,101705],{"id":101705},[114,105262,105263],{"className":30389,"code":105147,"language":30391,"meta":37,"style":37},[120,105264,105265],{"__ignoreMap":37},[123,105266,105267,105269,105271,105273,105275,105277,105279],{"class":125,"line":126},[123,105268,31958],{"class":129},[123,105270,104873],{"class":1972},[123,105272,104876],{"class":133},[123,105274,1309],{"class":182},[123,105276,104881],{"class":133},[123,105278,95683],{"class":182},[123,105280,3748],{"class":133},[14,105282,105283],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[77,105285,105286,105295,105300],{},[80,105287,105288,105291,105292,105294],{},[120,105289,105290],{},"prefix","：一段文字，比如 ",[120,105293,104999],{},"，用来说明现在打印的是哪个阶段。",[80,105296,105297,105299],{},[120,105298,102082],{},"：MuJoCo 模型。",[80,105301,105302,105304],{},[120,105303,33412],{},"：MuJoCo 当前状态。",[14,105306,105307,346,105310,105313],{},[120,105308,105309],{},"prefix: str",[120,105311,105312],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[114,105315,105317],{"className":30389,"code":105316,"language":30391,"meta":37,"style":37},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[120,105318,105319],{"__ignoreMap":37},[123,105320,105321,105323,105325,105327,105329,105331],{"class":125,"line":126},[123,105322,30426],{"class":182},[123,105324,134],{"class":133},[123,105326,104924],{"class":238},[123,105328,104927],{"class":133},[123,105330,427],{"class":182},[123,105332,30508],{"class":133},[14,105334,105335,105338],{},[120,105336,105337],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[114,105340,105342],{"className":30389,"code":105341,"language":30391,"meta":37,"style":37},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[120,105343,105344,105356],{"__ignoreMap":37},[123,105345,105346,105348,105350,105352,105354],{"class":125,"line":126},[123,105347,101631],{"class":133},[123,105349,179],{"class":129},[123,105351,101409],{"class":133},[123,105353,101311],{"class":182},[123,105355,140],{"class":133},[123,105357,105358,105360,105362],{"class":125,"line":45},[123,105359,101655],{"class":133},[123,105361,179],{"class":129},[123,105363,101423],{"class":133},[14,105365,105366],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[114,105368,105370],{"className":30389,"code":105369,"language":30391,"meta":37,"style":37},"print_state(\"initial\", model, data)\n",[120,105371,105372],{"__ignoreMap":37},[123,105373,105374,105377,105379],{"class":125,"line":126},[123,105375,105376],{"class":133},"print_state(",[123,105378,104999],{"class":238},[123,105380,105002],{"class":133},[14,105382,105383,105384,105387],{},"调用刚才定义的 ",[120,105385,105386],{},"print_state"," 函数，打印初始状态。",[114,105389,105390],{"className":30389,"code":105177,"language":30391,"meta":37,"style":37},[120,105391,105392,105408],{"__ignoreMap":37},[123,105393,105394,105396,105398,105400,105402,105404,105406],{"class":125,"line":126},[123,105395,3034],{"class":129},[123,105397,101498],{"class":133},[123,105399,26054],{"class":129},[123,105401,32454],{"class":182},[123,105403,134],{"class":133},[123,105405,790],{"class":182},[123,105407,30797],{"class":133},[123,105409,105410],{"class":125,"line":45},[123,105411,101696],{"class":133},[14,105413,105414],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[114,105416,105417],{"className":30389,"code":104523,"language":30391,"meta":37,"style":37},[120,105418,105419],{"__ignoreMap":37},[123,105420,105421],{"class":125,"line":126},[123,105422,104523],{"class":133},[14,105424,105425,105426,105428,105429,105431],{},"重置 ",[120,105427,33412],{},"。注意它不会重新创建 ",[120,105430,102082],{},"，因为模型结构没有变，只是状态回到初始值。",[114,105433,105434],{"className":30389,"code":104689,"language":30391,"meta":37,"style":37},[120,105435,105436],{"__ignoreMap":37},[123,105437,105438,105440,105442,105444,105446],{"class":125,"line":126},[123,105439,104696],{"class":133},[123,105441,211],{"class":182},[123,105443,4452],{"class":133},[123,105445,179],{"class":129},[123,105447,104705],{"class":182},[14,105449,105450,105451,346,105454,346,105457,105459],{},"这行是“手动改状态”。在 freejoint 中，",[120,105452,105453],{},"qpos[0]",[120,105455,105456],{},"qpos[1]",[120,105458,105253],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[114,105461,105462],{"className":30389,"code":104540,"language":30391,"meta":37,"style":37},[120,105463,105464],{"__ignoreMap":37},[123,105465,105466],{"class":125,"line":126},[123,105467,104540],{"class":133},[14,105469,105470,105471,105473,105474,105476],{},"手动改完 ",[120,105472,104027],{}," 后，调用 ",[120,105475,104247],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[65,105478,102313],{"id":102312},[14,105480,105481],{},"你会看到:",[77,105483,105484,105489,105494,105497],{},[80,105485,105486,105487],{},"初始时间为 ",[120,105488,325],{},[80,105490,105491,105492],{},"50 步后时间约为 ",[120,105493,35340],{},[80,105495,105496],{},"reset 后状态恢复",[80,105498,105499,105500,105503,105504],{},"手动修改 ",[120,105501,105502],{},"data.qpos[2]"," 后，小球高度变为 ",[120,105505,105257],{},[14,105507,105508,105510],{},[120,105509,105253],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105512,105513],{},"输出里可以重点看三件事：",[77,105515,105516,105524,105529],{},[80,105517,105518,105520,105521,105523],{},[120,105519,2396],{}," 是否随着 ",[120,105522,101212],{}," 增加。",[80,105525,105526,105528],{},[120,105527,104027],{}," 的 z 坐标是否因为下落而变化。",[80,105530,105531,105533,105534,28396],{},[120,105532,104349],{}," 后时间是否回到 ",[120,105535,325],{},[65,105537,102345],{"id":102344},[77,105539,105540,105546,105552,105558,105561,105570],{},[80,105541,105542,105543,28396],{},"修改 timestep 为 ",[120,105544,105545],{},"0.005",[80,105547,105548,105549,28396],{},"重新运行，检查 50 步后时间是否约为 ",[120,105550,105551],{},"0.25",[80,105553,105554,105555,28396],{},"修改重力为 ",[120,105556,105557],{},"0 0 -1.0",[80,105559,105560],{},"观察小球下降速度是否变慢。",[80,105562,102408,105563,102411,105566,105569],{},[120,105564,105565],{},"data.qpos[2] = 2.0",[120,105567,105568],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[80,105571,105572,105573,105576],{},"注释掉 ",[120,105574,105575],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[65,105578,102450],{"id":102449},[94,105580,105582,105583,105585],{"id":105581},"修改-dataqpos-后位置没有更新","修改 ",[120,105584,101067],{}," 后位置没有更新",[14,105587,102459],{},[114,105589,105590],{"className":30389,"code":104540,"language":30391,"meta":37,"style":37},[120,105591,105592],{"__ignoreMap":37},[123,105593,105594],{"class":125,"line":126},[123,105595,104540],{"class":133},[94,105597,105598],{"id":105598},"数组维度看不懂",[14,105600,105601],{},"打印模型维度:",[114,105603,105605],{"className":30389,"code":105604,"language":30391,"meta":37,"style":37},"print(model.nq, model.nv, model.nu)\n",[120,105606,105607],{"__ignoreMap":37},[123,105608,105609,105611],{"class":125,"line":126},[123,105610,30426],{"class":182},[123,105612,105613],{"class":133},"(model.nq, model.nv, model.nu)\n",[271,105615,105616,105624],{},[274,105617,105618],{},[277,105619,105620,105622],{},[280,105621,104571],{"align":23746},[280,105623,100697],{"align":23746},[318,105625,105626,105636,105646],{},[277,105627,105628,105633],{},[323,105629,105630],{"align":23746},[120,105631,105632],{},"nq",[323,105634,105635],{"align":23746},"位置变量数量",[277,105637,105638,105643],{},[323,105639,105640],{"align":23746},[120,105641,105642],{},"nv",[323,105644,105645],{"align":23746},"速度变量数量",[277,105647,105648,105652],{},[323,105649,105650],{"align":23746},[120,105651,102159],{},[323,105653,105654],{"align":23746},"控制输入数量",[94,105656,105658,105659,105661],{"id":105657},"误以为-qpos-一定等于关节数","误以为 ",[120,105660,104027],{}," 一定等于关节数",[14,105663,105664,105665,82541,105667,105669,105670,105672],{},"不是。例如 ",[120,105666,101617],{},[120,105668,104027],{}," 是 7 维，但 ",[120,105671,104357],{}," 是 6 维。",[94,105674,105676,105677,105679],{"id":105675},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[120,105678,104027],{}," 的第几位",[14,105681,105682],{},"初学时可以先打印：",[114,105684,105686],{"className":30389,"code":105685,"language":30391,"meta":37,"style":37},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[120,105687,105688,105698,105708,105720],{"__ignoreMap":37},[123,105689,105690,105692,105694,105696],{"class":125,"line":126},[123,105691,30426],{"class":182},[123,105693,134],{"class":133},[123,105695,101436],{"class":238},[123,105697,101439],{"class":133},[123,105699,105700,105702,105704,105706],{"class":125,"line":45},[123,105701,30426],{"class":182},[123,105703,134],{"class":133},[123,105705,101448],{"class":238},[123,105707,101451],{"class":133},[123,105709,105710,105712,105714,105717],{"class":125,"line":1189},[123,105711,30426],{"class":182},[123,105713,134],{"class":133},[123,105715,105716],{"class":238},"\"qpos:\"",[123,105718,105719],{"class":133},", data.qpos)\n",[123,105721,105722,105724,105726,105729],{"class":125,"line":1204},[123,105723,30426],{"class":182},[123,105725,134],{"class":133},[123,105727,105728],{"class":238},"\"qvel:\"",[123,105730,105731],{"class":133},", data.qvel)\n",[14,105733,105734],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[94,105736,105737],{"id":105737},"仿真结果每次都一样",[14,105739,105740,105741,105743],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[120,105742,104027],{},"、目标点或控制输入。",[65,105745,102604],{"id":102603},[14,105747,105748,105749,24629],{},"Python 控制 MuJoCo 的核心就是读写 ",[120,105750,33412],{},[77,105752,105753,105761,105766,105771],{},[80,105754,105755,105756,101015,105758,105760],{},"用 ",[120,105757,101067],{},[120,105759,101070],{}," 读取状态。",[80,105762,105755,105763,105765],{},[120,105764,101073],{}," 写入控制。",[80,105767,105755,105768,105770],{},[120,105769,101212],{}," 推进时间。",[80,105772,105773,105774,105776],{},"手动改状态后用 ",[120,105775,104247],{}," 刷新派生量。",[14,105778,105779],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5136,105781,105782],{},"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":37,"searchDepth":45,"depth":45,"links":105784},[105785,105786,105787,105794,105798,105799,105800,105810],{"id":100643,"depth":45,"text":100644},{"id":100766,"depth":45,"text":100767},{"id":101041,"depth":45,"text":101042,"children":105788},[105789,105791,105793],{"id":104552,"depth":1189,"text":105790},"qpos、qvel、ctrl 是什么",{"id":104630,"depth":1189,"text":105792},"mj_step 和 mj_forward 的区别",{"id":104719,"depth":1189,"text":104720},{"id":101249,"depth":45,"text":101250,"children":105795},[105796,105797],{"id":101569,"depth":1189,"text":101569},{"id":101705,"depth":1189,"text":101705},{"id":102312,"depth":45,"text":102313},{"id":102344,"depth":45,"text":102345},{"id":102449,"depth":45,"text":102450,"children":105801},[105802,105804,105805,105807,105809],{"id":105581,"depth":1189,"text":105803},"修改 data.qpos 后位置没有更新",{"id":105598,"depth":1189,"text":105598},{"id":105657,"depth":1189,"text":105806},"误以为 qpos 一定等于关节数",{"id":105675,"depth":1189,"text":105808},"不知道某个元素在 qpos 的第几位",{"id":105737,"depth":1189,"text":105737},{"id":102603,"depth":45,"text":102604},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104315,"description":37},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105817,"title":105818,"body":105819,"description":37,"extension":48,"meta":107509,"navigation":50,"path":107510,"seo":107511,"stem":107512,"__hash__":107513},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105820,"toc":107485},[105821,105824,105826,105829,105831,105856,105859,105878,105881,105883,105885,105909,105911,105925,105927,105968,105970,105994,105996,105999,106033,106035,106048,106051,106119,106128,106132,106135,106169,106175,106178,106182,106221,106224,106244,106248,106291,106293,106322,106325,106331,106334,106336,106730,106732,106744,106746,106757,106759,106762,106791,106799,106802,106837,106840,106842,106850,106853,106855,106866,106876,106896,106899,106935,106947,106995,107014,107056,107069,107097,107102,107123,107133,107151,107154,107188,107191,107211,107214,107233,107239,107241,107244,107250,107256,107266,107269,107275,107284,107286,107332,107334,107340,107346,107349,107352,107372,107375,107381,107387,107389,107412,107415,107418,107427,107430,107468,107470,107473,107479,107482],[10,105822,105818],{"id":105823},"_4关节actuator-与力控制",[65,105825,100644],{"id":100643},[14,105827,105828],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,105830,104328],{},[77,105832,105833,105839,105844,105848,105853],{},[80,105834,105835,105838],{},[120,105836,105837],{},"hinge"," 关节",[80,105840,105841],{},[120,105842,105843],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[80,105845,105846],{},[120,105847,101073],{},[80,105849,105850],{},[120,105851,105852],{},"ctrlrange",[80,105854,105855],{},"读取关节角和角速度",[14,105857,105858],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[114,105860,105862],{"className":30389,"code":105861,"language":30391,"meta":37,"style":37},"data.ctrl[0] = ...\n",[120,105863,105864],{"__ignoreMap":37},[123,105865,105866,105869,105871,105873,105875],{"class":125,"line":126},[123,105867,105868],{"class":133},"data.ctrl[",[123,105870,325],{"class":182},[123,105872,4452],{"class":133},[123,105874,179],{"class":129},[123,105876,105877],{"class":182}," ...\n",[14,105879,105880],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[65,105882,100767],{"id":100766},[14,105884,100770],{},[114,105886,105887],{"className":23832,"code":104385,"language":23834,"meta":37,"style":37},[120,105888,105889],{"__ignoreMap":37},[123,105890,105891,105893,105895,105897,105899,105901,105903,105905,105907],{"class":125,"line":126},[123,105892,24587],{"class":1972},[123,105894,26326],{"class":238},[123,105896,23844],{"class":238},[123,105898,26411],{"class":182},[123,105900,104400],{"class":238},[123,105902,100795],{"class":238},[123,105904,102498],{"class":238},[123,105906,100811],{"class":238},[123,105908,104409],{"class":238},[14,105910,102816],{},[114,105912,105913],{"className":23832,"code":100916,"language":23834,"meta":37,"style":37},[120,105914,105915],{"__ignoreMap":37},[123,105916,105917,105919,105921,105923],{"class":125,"line":126},[123,105918,23841],{"class":1972},[123,105920,23844],{"class":238},[123,105922,100927],{"class":238},[123,105924,100930],{"class":238},[14,105926,102833],{},[114,105928,105930],{"className":23832,"code":105929,"language":23834,"meta":37,"style":37},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[120,105931,105932,105949,105958],{"__ignoreMap":37},[123,105933,105934,105936,105938,105940,105943,105945,105947],{"class":125,"line":126},[123,105935,30341],{"class":1972},[123,105937,29187],{"class":238},[123,105939,25126],{"class":182},[123,105941,105942],{"class":238}," mujoco-control",[123,105944,100972],{"class":238},[123,105946,100975],{"class":182},[123,105948,100978],{"class":182},[123,105950,105951,105953,105955],{"class":125,"line":45},[123,105952,30341],{"class":1972},[123,105954,100985],{"class":238},[123,105956,105957],{"class":238}," mujoco-control\n",[123,105959,105960,105962,105964,105966],{"class":125,"line":1189},[123,105961,23841],{"class":1972},[123,105963,23844],{"class":238},[123,105965,100927],{"class":238},[123,105967,100930],{"class":238},[14,105969,101001],{},[77,105971,105972,105978,105985,105991],{},[80,105973,105974,105977],{},[120,105975,105976],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[80,105979,105980,105982,105983,28396],{},[120,105981,101073],{}," 长度等于 ",[120,105984,102155],{},[80,105986,82233,105987,105990],{},[120,105988,105989],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[80,105992,105993],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[65,105995,101042],{"id":101041},[14,105997,105998],{},"关节决定 body 如何运动:",[114,106000,106002],{"className":53078,"code":106001,"language":53080,"meta":37,"style":37},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[120,106003,106004],{"__ignoreMap":37},[123,106005,106006,106008,106010,106012,106014,106017,106019,106021,106023,106026,106028,106031],{"class":125,"line":126},[123,106007,1044],{"class":133},[123,106009,102953],{"class":51311},[123,106011,14930],{"class":1972},[123,106013,179],{"class":133},[123,106015,106016],{"class":238},"\"hinge\"",[123,106018,53835],{"class":1972},[123,106020,179],{"class":133},[123,106022,106016],{"class":238},[123,106024,106025],{"class":1972}," axis",[123,106027,179],{"class":133},[123,106029,106030],{"class":238},"\"0 1 0\"",[123,106032,101141],{"class":133},[14,106034,103049],{},[77,106036,106037,106042,106045],{},[80,106038,106039,106040],{},"名字是 ",[120,106041,105837],{},[80,106043,106044],{},"类型是旋转关节",[80,106046,106047],{},"绕 y 轴旋转",[14,106049,106050],{},"actuator 决定如何施加控制:",[114,106052,106054],{"className":53078,"code":106053,"language":53080,"meta":37,"style":37},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[120,106055,106056,106065,106111],{"__ignoreMap":37},[123,106057,106058,106060,106063],{"class":125,"line":126},[123,106059,1044],{"class":133},[123,106061,106062],{"class":51311},"actuator",[123,106064,51318],{"class":133},[123,106066,106067,106069,106072,106074,106076,106079,106082,106084,106086,106089,106091,106093,106096,106098,106101,106104,106106,106109],{"class":125,"line":45},[123,106068,52155],{"class":133},[123,106070,106071],{"class":51311},"motor",[123,106073,14930],{"class":1972},[123,106075,179],{"class":133},[123,106077,106078],{"class":238},"\"hinge_motor\"",[123,106080,106081],{"class":1972}," joint",[123,106083,179],{"class":133},[123,106085,106016],{"class":238},[123,106087,106088],{"class":1972}," gear",[123,106090,179],{"class":133},[123,106092,3687],{"class":238},[123,106094,106095],{"class":1972}," ctrlrange",[123,106097,179],{"class":133},[123,106099,106100],{"class":238},"\"-2 2\"",[123,106102,106103],{"class":1972}," ctrllimited",[123,106105,179],{"class":133},[123,106107,106108],{"class":238},"\"true\"",[123,106110,101141],{"class":133},[123,106112,106113,106115,106117],{"class":125,"line":1189},[123,106114,51796],{"class":133},[123,106116,106062],{"class":51311},[123,106118,51318],{"class":133},[14,106120,106121,106124,106125,28396],{},[120,106122,106123],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[120,106126,106127],{},"[-2, 2]",[94,106129,106131],{"id":106130},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106133,106134],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[271,106136,106137,106147],{},[274,106138,106139],{},[277,106140,106141,106143,106145],{},[280,106142,25764],{"align":23746},[280,106144,102693],{"align":23746},[280,106146,100731],{"align":23746},[318,106148,106149,106159],{},[277,106150,106151,106153,106156],{},[323,106152,102953],{"align":23746},[323,106154,106155],{"align":23746},"定义能怎么动",[323,106157,106158],{"align":23746},"门轴允许门旋转",[277,106160,106161,106163,106166],{},[323,106162,106062],{"align":23746},[323,106164,106165],{"align":23746},"定义怎么施力或控制",[323,106167,106168],{"align":23746},"人推门、马达带动门",[14,106170,106171,106172,106174],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[120,106173,101073],{}," 主动控制它。",[14,106176,106177],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[94,106179,106181],{"id":106180},"hinge-joint","hinge joint",[114,106183,106185],{"className":53078,"code":106184,"language":53080,"meta":37,"style":37},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[120,106186,106187],{"__ignoreMap":37},[123,106188,106189,106191,106193,106195,106197,106199,106201,106203,106205,106207,106209,106211,106214,106216,106219],{"class":125,"line":126},[123,106190,1044],{"class":133},[123,106192,102953],{"class":51311},[123,106194,14930],{"class":1972},[123,106196,179],{"class":133},[123,106198,106016],{"class":238},[123,106200,53835],{"class":1972},[123,106202,179],{"class":133},[123,106204,106016],{"class":238},[123,106206,106025],{"class":1972},[123,106208,179],{"class":133},[123,106210,106030],{"class":238},[123,106212,106213],{"class":1972}," damping",[123,106215,179],{"class":133},[123,106217,106218],{"class":238},"\"0.1\"",[123,106220,101141],{"class":133},[14,106222,106223],{},"含义：",[77,106225,106226,106232,106238],{},[80,106227,106228,106231],{},[120,106229,106230],{},"type=\"hinge\"","：只能绕一个轴旋转。",[80,106233,106234,106237],{},[120,106235,106236],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[80,106239,106240,106243],{},[120,106241,106242],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[94,106245,106247],{"id":106246},"motor-actuator","motor actuator",[114,106249,106251],{"className":53078,"code":106250,"language":53080,"meta":37,"style":37},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[120,106252,106253],{"__ignoreMap":37},[123,106254,106255,106257,106259,106261,106263,106265,106267,106269,106271,106273,106275,106277,106279,106281,106283,106285,106287,106289],{"class":125,"line":126},[123,106256,1044],{"class":133},[123,106258,106071],{"class":51311},[123,106260,14930],{"class":1972},[123,106262,179],{"class":133},[123,106264,106078],{"class":238},[123,106266,106081],{"class":1972},[123,106268,179],{"class":133},[123,106270,106016],{"class":238},[123,106272,106088],{"class":1972},[123,106274,179],{"class":133},[123,106276,3687],{"class":238},[123,106278,106095],{"class":1972},[123,106280,179],{"class":133},[123,106282,106100],{"class":238},[123,106284,106103],{"class":1972},[123,106286,179],{"class":133},[123,106288,106108],{"class":238},[123,106290,101141],{"class":133},[14,106292,106223],{},[77,106294,106295,106304,106310,106316],{},[80,106296,106297,106300,106301,106303],{},[120,106298,106299],{},"joint=\"hinge\"","：这个电机作用在名为 ",[120,106302,105837],{}," 的关节上。",[80,106305,106306,106309],{},[120,106307,106308],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[80,106311,106312,106315],{},[120,106313,106314],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[80,106317,106318,106321],{},[120,106319,106320],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106323,106324],{},"简单理解：",[114,106326,106329],{"className":106327,"code":106328,"language":5197,"meta":37},[5195],"实际施加效果 ≈ data.ctrl[0] * gear\n",[120,106330,106328],{"__ignoreMap":37},[14,106332,106333],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[65,106335,101250],{"id":101249},[114,106337,106339],{"className":30389,"code":106338,"language":30391,"meta":37,"style":37},"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",[120,106340,106341,106348,106352,106358,106368,106372,106376,106384,106389,106394,106398,106402,106407,106412,106416,106421,106426,106431,106436,106440,106444,106448,106453,106458,106463,106467,106471,106475,106479,106491,106503,106511,106515,106525,106535,106545,106549,106562,106575,106579,106596,106610,106645,106649,106653,106664,106679,106694,106706,106710,106714,106726],{"__ignoreMap":37},[123,106342,106343,106345],{"class":125,"line":126},[123,106344,30403],{"class":129},[123,106346,106347],{"class":133}," math\n",[123,106349,106350],{"class":125,"line":45},[123,106351,2409],{"emptyLinePlaceholder":50},[123,106353,106354,106356],{"class":125,"line":1189},[123,106355,30403],{"class":129},[123,106357,101298],{"class":133},[123,106359,106360,106362,106364,106366],{"class":125,"line":1204},[123,106361,30403],{"class":129},[123,106363,31391],{"class":133},[123,106365,31394],{"class":129},[123,106367,31397],{"class":133},[123,106369,106370],{"class":125,"line":1210},[123,106371,2409],{"emptyLinePlaceholder":50},[123,106373,106374],{"class":125,"line":1224},[123,106375,2409],{"emptyLinePlaceholder":50},[123,106377,106378,106380,106382],{"class":125,"line":1230},[123,106379,101311],{"class":182},[123,106381,13574],{"class":129},[123,106383,101316],{"class":238},[123,106385,106386],{"class":125,"line":1321},[123,106387,106388],{"class":238},"\u003Cmujoco model=\"one_link_motor\">\n",[123,106390,106391],{"class":125,"line":1327},[123,106392,106393],{"class":238},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[123,106395,106396],{"class":125,"line":1339},[123,106397,2409],{"emptyLinePlaceholder":50},[123,106399,106400],{"class":125,"line":1621},[123,106401,101335],{"class":238},[123,106403,106404],{"class":125,"line":1626},[123,106405,106406],{"class":238},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[123,106408,106409],{"class":125,"line":1632},[123,106410,106411],{"class":238},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[123,106413,106414],{"class":125,"line":1637},[123,106415,2409],{"emptyLinePlaceholder":50},[123,106417,106418],{"class":125,"line":1651},[123,106419,106420],{"class":238},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[123,106422,106423],{"class":125,"line":1656},[123,106424,106425],{"class":238},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[123,106427,106428],{"class":125,"line":1662},[123,106429,106430],{"class":238},"        \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",[123,106432,106433],{"class":125,"line":1683},[123,106434,106435],{"class":238},"      \u003C\u002Fbody>\n",[123,106437,106438],{"class":125,"line":1688},[123,106439,101364],{"class":238},[123,106441,106442],{"class":125,"line":1702},[123,106443,101369],{"class":238},[123,106445,106446],{"class":125,"line":1707},[123,106447,2409],{"emptyLinePlaceholder":50},[123,106449,106450],{"class":125,"line":1736},[123,106451,106452],{"class":238},"  \u003Cactuator>\n",[123,106454,106455],{"class":125,"line":1741},[123,106456,106457],{"class":238},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[123,106459,106460],{"class":125,"line":1758},[123,106461,106462],{"class":238},"  \u003C\u002Factuator>\n",[123,106464,106465],{"class":125,"line":1763},[123,106466,101374],{"class":238},[123,106468,106469],{"class":125,"line":1768},[123,106470,95695],{"class":238},[123,106472,106473],{"class":125,"line":1773},[123,106474,2409],{"emptyLinePlaceholder":50},[123,106476,106477],{"class":125,"line":1787},[123,106478,2409],{"emptyLinePlaceholder":50},[123,106480,106481,106483,106485,106487,106489],{"class":125,"line":1792},[123,106482,31958],{"class":129},[123,106484,1982],{"class":1972},[123,106486,101395],{"class":133},[123,106488,95683],{"class":182},[123,106490,3748],{"class":133},[123,106492,106493,106495,106497,106499,106501],{"class":125,"line":2586},[123,106494,101404],{"class":133},[123,106496,179],{"class":129},[123,106498,101409],{"class":133},[123,106500,101311],{"class":182},[123,106502,140],{"class":133},[123,106504,106505,106507,106509],{"class":125,"line":2600},[123,106506,101418],{"class":133},[123,106508,179],{"class":129},[123,106510,101423],{"class":133},[123,106512,106513],{"class":125,"line":2608},[123,106514,2409],{"emptyLinePlaceholder":50},[123,106516,106517,106519,106521,106523],{"class":125,"line":2613},[123,106518,31310],{"class":182},[123,106520,134],{"class":133},[123,106522,101436],{"class":238},[123,106524,101439],{"class":133},[123,106526,106527,106529,106531,106533],{"class":125,"line":2619},[123,106528,31310],{"class":182},[123,106530,134],{"class":133},[123,106532,101448],{"class":238},[123,106534,101451],{"class":133},[123,106536,106537,106539,106541,106543],{"class":125,"line":2625},[123,106538,31310],{"class":182},[123,106540,134],{"class":133},[123,106542,101460],{"class":238},[123,106544,101463],{"class":133},[123,106546,106547],{"class":125,"line":2630},[123,106548,2409],{"emptyLinePlaceholder":50},[123,106550,106551,106553,106556,106558,106560],{"class":125,"line":7958},[123,106552,3110],{"class":129},[123,106554,106555],{"class":133}," model.nu ",[123,106557,20958],{"class":129},[123,106559,25129],{"class":182},[123,106561,3748],{"class":133},[123,106563,106564,106566,106568,106570,106573],{"class":125,"line":7982},[123,106565,103429],{"class":129},[123,106567,103432],{"class":182},[123,106569,134],{"class":133},[123,106571,106572],{"class":238},"\"expected exactly one actuator\"",[123,106574,140],{"class":133},[123,106576,106577],{"class":125,"line":7987},[123,106578,2409],{"emptyLinePlaceholder":50},[123,106580,106581,106583,106585,106587,106589,106591,106594],{"class":125,"line":7993},[123,106582,3210],{"class":129},[123,106584,31627],{"class":133},[123,106586,26054],{"class":129},[123,106588,32454],{"class":182},[123,106590,134],{"class":133},[123,106592,106593],{"class":182},"2000",[123,106595,30797],{"class":133},[123,106597,106598,106601,106603,106605,106607],{"class":125,"line":8020},[123,106599,106600],{"class":133},"        t ",[123,106602,179],{"class":129},[123,106604,31627],{"class":133},[123,106606,589],{"class":129},[123,106608,106609],{"class":133}," model.opt.timestep\n",[123,106611,106612,106615,106617,106619,106621,106624,106626,106629,106631,106633,106636,106638,106640,106642],{"class":125,"line":8025},[123,106613,106614],{"class":133},"        data.ctrl[",[123,106616,325],{"class":182},[123,106618,4452],{"class":133},[123,106620,179],{"class":129},[123,106622,106623],{"class":182}," 1.5",[123,106625,6528],{"class":129},[123,106627,106628],{"class":133}," math.sin(",[123,106630,105257],{"class":182},[123,106632,6528],{"class":129},[123,106634,106635],{"class":133}," math.pi ",[123,106637,589],{"class":129},[123,106639,61878],{"class":182},[123,106641,6528],{"class":129},[123,106643,106644],{"class":133}," t)\n",[123,106646,106647],{"class":125,"line":8031},[123,106648,101513],{"class":133},[123,106650,106651],{"class":125,"line":8043},[123,106652,2409],{"emptyLinePlaceholder":50},[123,106654,106655,106657,106659,106662],{"class":125,"line":8055},[123,106656,31310],{"class":182},[123,106658,134],{"class":133},[123,106660,106661],{"class":238},"\"time:\"",[123,106663,101475],{"class":133},[123,106665,106666,106668,106670,106673,106675,106677],{"class":125,"line":8067},[123,106667,31310],{"class":182},[123,106669,134],{"class":133},[123,106671,106672],{"class":238},"\"joint qpos:\"",[123,106674,104927],{"class":133},[123,106676,427],{"class":182},[123,106678,30508],{"class":133},[123,106680,106681,106683,106685,106688,106690,106692],{"class":125,"line":9726},[123,106682,31310],{"class":182},[123,106684,134],{"class":133},[123,106686,106687],{"class":238},"\"joint qvel:\"",[123,106689,104943],{"class":133},[123,106691,427],{"class":182},[123,106693,30508],{"class":133},[123,106695,106696,106698,106700,106703],{"class":125,"line":9751},[123,106697,31310],{"class":182},[123,106699,134],{"class":133},[123,106701,106702],{"class":238},"\"last ctrl:\"",[123,106704,106705],{"class":133},", data.ctrl.copy())\n",[123,106707,106708],{"class":125,"line":9774},[123,106709,2409],{"emptyLinePlaceholder":50},[123,106711,106712],{"class":125,"line":9798},[123,106713,2409],{"emptyLinePlaceholder":50},[123,106715,106716,106718,106720,106722,106724],{"class":125,"line":9803},[123,106717,1540],{"class":129},[123,106719,31231],{"class":182},[123,106721,101556],{"class":129},[123,106723,101559],{"class":238},[123,106725,3748],{"class":133},[123,106727,106728],{"class":125,"line":9808},[123,106729,101566],{"class":133},[14,106731,103567],{},[114,106733,106735],{"className":23832,"code":106734,"language":23834,"meta":37,"style":37},"touch ch4_joint_motor.py\n",[120,106736,106737],{"__ignoreMap":37},[123,106738,106739,106741],{"class":125,"line":126},[123,106740,101280],{"class":1972},[123,106742,106743],{"class":238}," ch4_joint_motor.py\n",[14,106745,102298],{},[114,106747,106749],{"className":23832,"code":106748,"language":23834,"meta":37,"style":37},"python ch4_joint_motor.py\n",[120,106750,106751],{"__ignoreMap":37},[123,106752,106753,106755],{"class":125,"line":126},[123,106754,30391],{"class":1972},[123,106756,106743],{"class":238},[94,106758,101569],{"id":101569},[14,106760,106761],{},"检查 actuator 数量：",[114,106763,106765],{"className":30389,"code":106764,"language":30391,"meta":37,"style":37},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[120,106766,106767,106779],{"__ignoreMap":37},[123,106768,106769,106771,106773,106775,106777],{"class":125,"line":126},[123,106770,1540],{"class":129},[123,106772,106555],{"class":133},[123,106774,20958],{"class":129},[123,106776,25129],{"class":182},[123,106778,3748],{"class":133},[123,106780,106781,106783,106785,106787,106789],{"class":125,"line":45},[123,106782,103892],{"class":129},[123,106784,103432],{"class":182},[123,106786,134],{"class":133},[123,106788,106572],{"class":238},[123,106790,140],{"class":133},[14,106792,106793,106795,106796,106798],{},[120,106794,102155],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[120,106797,101073],{}," 长度应该是 1。",[14,106800,106801],{},"产生正弦控制信号：",[114,106803,106805],{"className":30389,"code":106804,"language":30391,"meta":37,"style":37},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[120,106806,106807],{"__ignoreMap":37},[123,106808,106809,106811,106813,106815,106817,106819,106821,106823,106825,106827,106829,106831,106833,106835],{"class":125,"line":126},[123,106810,105868],{"class":133},[123,106812,325],{"class":182},[123,106814,4452],{"class":133},[123,106816,179],{"class":129},[123,106818,106623],{"class":182},[123,106820,6528],{"class":129},[123,106822,106628],{"class":133},[123,106824,105257],{"class":182},[123,106826,6528],{"class":129},[123,106828,106635],{"class":133},[123,106830,589],{"class":129},[123,106832,61878],{"class":182},[123,106834,6528],{"class":129},[123,106836,106644],{"class":133},[14,106838,106839],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,106841,101670],{},[114,106843,106844],{"className":30389,"code":104502,"language":30391,"meta":37,"style":37},[120,106845,106846],{"__ignoreMap":37},[123,106847,106848],{"class":125,"line":126},[123,106849,104502],{"class":133},[14,106851,106852],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[94,106854,101705],{"id":101705},[114,106856,106858],{"className":30389,"code":106857,"language":30391,"meta":37,"style":37},"import math\n",[120,106859,106860],{"__ignoreMap":37},[123,106861,106862,106864],{"class":125,"line":126},[123,106863,30403],{"class":129},[123,106865,106347],{"class":133},[14,106867,106868,106869,101015,106872,106875],{},"导入 Python 标准库里的数学模块。后面要用 ",[120,106870,106871],{},"math.sin",[120,106873,106874],{},"math.pi"," 生成周期变化的控制信号。",[114,106877,106878],{"className":30389,"code":103683,"language":30391,"meta":37,"style":37},[120,106879,106880,106886],{"__ignoreMap":37},[123,106881,106882,106884],{"class":125,"line":126},[123,106883,30403],{"class":129},[123,106885,101298],{"class":133},[123,106887,106888,106890,106892,106894],{"class":125,"line":45},[123,106889,30403],{"class":129},[123,106891,31391],{"class":133},[123,106893,31394],{"class":129},[123,106895,31397],{"class":133},[14,106897,106898],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[114,106900,106901],{"className":53078,"code":106184,"language":53080,"meta":37,"style":37},[120,106902,106903],{"__ignoreMap":37},[123,106904,106905,106907,106909,106911,106913,106915,106917,106919,106921,106923,106925,106927,106929,106931,106933],{"class":125,"line":126},[123,106906,1044],{"class":133},[123,106908,102953],{"class":51311},[123,106910,14930],{"class":1972},[123,106912,179],{"class":133},[123,106914,106016],{"class":238},[123,106916,53835],{"class":1972},[123,106918,179],{"class":133},[123,106920,106016],{"class":238},[123,106922,106025],{"class":1972},[123,106924,179],{"class":133},[123,106926,106030],{"class":238},[123,106928,106213],{"class":1972},[123,106930,179],{"class":133},[123,106932,106218],{"class":238},[123,106934,101141],{"class":133},[14,106936,106937,106938,106940,106941,106943,106944,106946],{},"这行定义关节。",[120,106939,105837],{}," 表示旋转关节。",[120,106942,106236],{}," 表示绕 y 轴旋转。",[120,106945,106242],{}," 表示有一点阻尼，运动不会完全无损耗。",[114,106948,106950],{"className":53078,"code":106949,"language":53080,"meta":37,"style":37},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[120,106951,106952],{"__ignoreMap":37},[123,106953,106954,106956,106958,106960,106962,106965,106967,106969,106972,106975,106977,106980,106982,106984,106986,106988,106990,106993],{"class":125,"line":126},[123,106955,1044],{"class":133},[123,106957,101117],{"class":51311},[123,106959,14930],{"class":1972},[123,106961,179],{"class":133},[123,106963,106964],{"class":238},"\"link_geom\"",[123,106966,53835],{"class":1972},[123,106968,179],{"class":133},[123,106970,106971],{"class":238},"\"capsule\"",[123,106973,106974],{"class":1972}," fromto",[123,106976,179],{"class":133},[123,106978,106979],{"class":238},"\"0 0 0 0 0 0.5\"",[123,106981,101133],{"class":1972},[123,106983,179],{"class":133},[123,106985,103775],{"class":238},[123,106987,101998],{"class":1972},[123,106989,179],{"class":133},[123,106991,106992],{"class":238},"\"0.5\"",[123,106994,101141],{"class":133},[14,106996,106997,106998,107000,107001,107003,107004,107007,107008,28396,107011,107013],{},"这行定义摆杆的形状。",[120,106999,103162],{}," 是胶囊体，适合表示杆子。",[120,107002,103173],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[120,107005,107006],{},"(0,0,0)"," 延伸到 ",[120,107009,107010],{},"(0,0,0.5)",[120,107012,103167],{}," 是半径。",[114,107015,107016],{"className":53078,"code":106250,"language":53080,"meta":37,"style":37},[120,107017,107018],{"__ignoreMap":37},[123,107019,107020,107022,107024,107026,107028,107030,107032,107034,107036,107038,107040,107042,107044,107046,107048,107050,107052,107054],{"class":125,"line":126},[123,107021,1044],{"class":133},[123,107023,106071],{"class":51311},[123,107025,14930],{"class":1972},[123,107027,179],{"class":133},[123,107029,106078],{"class":238},[123,107031,106081],{"class":1972},[123,107033,179],{"class":133},[123,107035,106016],{"class":238},[123,107037,106088],{"class":1972},[123,107039,179],{"class":133},[123,107041,3687],{"class":238},[123,107043,106095],{"class":1972},[123,107045,179],{"class":133},[123,107047,106100],{"class":238},[123,107049,106103],{"class":1972},[123,107051,179],{"class":133},[123,107053,106108],{"class":238},[123,107055,101141],{"class":133},[14,107057,107058,107059,107061,107062,107065,107066,107068],{},"这行定义电机。它作用在 ",[120,107060,105837],{}," 关节上。",[120,107063,107064],{},"gear"," 可以理解成放大倍数。",[120,107067,105852],{}," 限制控制输入范围。",[114,107070,107071],{"className":30389,"code":106764,"language":30391,"meta":37,"style":37},[120,107072,107073,107085],{"__ignoreMap":37},[123,107074,107075,107077,107079,107081,107083],{"class":125,"line":126},[123,107076,1540],{"class":129},[123,107078,106555],{"class":133},[123,107080,20958],{"class":129},[123,107082,25129],{"class":182},[123,107084,3748],{"class":133},[123,107086,107087,107089,107091,107093,107095],{"class":125,"line":45},[123,107088,103892],{"class":129},[123,107090,103432],{"class":182},[123,107092,134],{"class":133},[123,107094,106572],{"class":238},[123,107096,140],{"class":133},[14,107098,107099,107101],{},[120,107100,102155],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[114,107103,107105],{"className":30389,"code":107104,"language":30391,"meta":37,"style":37},"for step in range(2000):\n",[120,107106,107107],{"__ignoreMap":37},[123,107108,107109,107111,107113,107115,107117,107119,107121],{"class":125,"line":126},[123,107110,3034],{"class":129},[123,107112,31627],{"class":133},[123,107114,26054],{"class":129},[123,107116,32454],{"class":182},[123,107118,134],{"class":133},[123,107120,106593],{"class":182},[123,107122,30797],{"class":133},[14,107124,107125,107126,107128,107129,107132],{},"循环 2000 步。这里没有用 ",[120,107127,1126],{},"，而是用 ",[120,107130,107131],{},"step","，因为后面要用当前步数计算时间。",[114,107134,107136],{"className":30389,"code":107135,"language":30391,"meta":37,"style":37},"t = step * model.opt.timestep\n",[120,107137,107138],{"__ignoreMap":37},[123,107139,107140,107143,107145,107147,107149],{"class":125,"line":126},[123,107141,107142],{"class":133},"t ",[123,107144,179],{"class":129},[123,107146,31627],{"class":133},[123,107148,589],{"class":129},[123,107150,106609],{"class":133},[14,107152,107153],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[114,107155,107156],{"className":30389,"code":106804,"language":30391,"meta":37,"style":37},[120,107157,107158],{"__ignoreMap":37},[123,107159,107160,107162,107164,107166,107168,107170,107172,107174,107176,107178,107180,107182,107184,107186],{"class":125,"line":126},[123,107161,105868],{"class":133},[123,107163,325],{"class":182},[123,107165,4452],{"class":133},[123,107167,179],{"class":129},[123,107169,106623],{"class":182},[123,107171,6528],{"class":129},[123,107173,106628],{"class":133},[123,107175,105257],{"class":182},[123,107177,6528],{"class":129},[123,107179,106635],{"class":133},[123,107181,589],{"class":129},[123,107183,61878],{"class":182},[123,107185,6528],{"class":129},[123,107187,106644],{"class":133},[14,107189,107190],{},"这行给电机输入一个正弦波。拆开看：",[77,107192,107193,107199,107205],{},[80,107194,107195,107198],{},[120,107196,107197],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[80,107200,107201,107204],{},[120,107202,107203],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[80,107206,107207,107210],{},[120,107208,107209],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107212,107213],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[114,107215,107217],{"className":30389,"code":107216,"language":30391,"meta":37,"style":37},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[120,107218,107219],{"__ignoreMap":37},[123,107220,107221,107223,107225,107227,107229,107231],{"class":125,"line":126},[123,107222,30426],{"class":182},[123,107224,134],{"class":133},[123,107226,106672],{"class":238},[123,107228,104927],{"class":133},[123,107230,427],{"class":182},[123,107232,30508],{"class":133},[14,107234,107235,107236,107238],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[120,107237,101067],{}," 只有一个数。",[65,107240,102313],{"id":102312},[14,107242,107243],{},"输出类似:",[114,107245,107248],{"className":107246,"code":107247,"language":5197,"meta":37},[5195],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[120,107249,107247],{"__ignoreMap":37},[14,107251,107252,107253,107255],{},"这里 ",[120,107254,106123],{}," 是电机输入。",[14,107257,107258,107261,107262,107265],{},[120,107259,107260],{},"joint qpos"," 是关节角度，单位通常是弧度。",[120,107263,107264],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107267,107268],{},"角度单位提示：",[114,107270,107273],{"className":107271,"code":107272,"language":5197,"meta":37},[5195],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[120,107274,107272],{"__ignoreMap":37},[14,107276,107277,107278,107280,107281,107283],{},"如果你看到 ",[120,107279,104027],{}," 是 ",[120,107282,35340],{},"，大约就是 28.6 度。",[65,107285,102345],{"id":102344},[77,107287,107288,107295,107298,107305,107308,107316,107324],{},[80,107289,102408,107290,102411,107292,28396],{},[120,107291,106308],{},[120,107293,107294],{},"gear=\"5\"",[80,107296,107297],{},"重新运行，观察关节运动是否更剧烈。",[80,107299,102408,107300,102411,107302,28396],{},[120,107301,105852],{},[120,107303,107304],{},"-0.2 0.2",[80,107306,107307],{},"重新运行，观察控制能力是否变弱。",[80,107309,107310,107311,107313,107314,28396],{},"去掉 actuator，确认 ",[120,107312,102155],{}," 变成 ",[120,107315,325],{},[80,107317,102408,107318,102411,107320,107323],{},[120,107319,106242],{},[120,107321,107322],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[80,107325,102408,107326,102411,107328,107331],{},[120,107327,106236],{},[120,107329,107330],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[65,107333,102450],{"id":102449},[94,107335,107337],{"id":107336},"indexerror-index-0-is-out-of-bounds",[120,107338,107339],{},"IndexError: index 0 is out of bounds",[14,107341,107342,107343,107345],{},"原因是 ",[120,107344,105989],{},"，没有 actuator。",[94,107347,107348],{"id":107348},"关节几乎不动",[14,107350,107351],{},"可能原因:",[77,107353,107354,107359,107363,107369],{},[80,107355,107356,107358],{},[120,107357,107064],{}," 太小",[80,107360,107361,107358],{},[120,107362,105852],{},[80,107364,107365,107368],{},[120,107366,107367],{},"damping"," 太大",[80,107370,107371],{},"重力方向导致运动不明显",[94,107373,107374],{"id":107374},"模型编译失败",[14,107376,107377,107378,107380],{},"检查 actuator 引用的 ",[120,107379,106299],{}," 是否存在，joint 名称是否拼写一致。",[94,107382,107384,107386],{"id":107383},"datactrl0-写了但没有效果",[120,107385,106123],{}," 写了但没有效果",[14,107388,102572],{},[77,107390,107391,107396,107399,107404,107409],{},[80,107392,107393,107395],{},[120,107394,102155],{}," 是否大于 0。",[80,107397,107398],{},"motor 是否引用了正确 joint。",[80,107400,107401,107403],{},[120,107402,107064],{}," 是否太小。",[80,107405,107406,107408],{},[120,107407,105852],{}," 是否把输入限制得太小。",[80,107410,107411],{},"body 是否真的有可动 joint。",[94,107413,107414],{"id":107414},"控制输入超过范围会怎样",[14,107416,107417],{},"如果设置了：",[114,107419,107421],{"className":53078,"code":107420,"language":53080,"meta":37,"style":37},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[120,107422,107423],{"__ignoreMap":37},[123,107424,107425],{"class":125,"line":126},[123,107426,107420],{"class":133},[14,107428,107429],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[114,107431,107433],{"className":30389,"code":107432,"language":30391,"meta":37,"style":37},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[120,107434,107435,107455],{"__ignoreMap":37},[123,107436,107437,107440,107442,107445,107447,107449,107451,107453],{"class":125,"line":126},[123,107438,107439],{"class":133},"action ",[123,107441,179],{"class":129},[123,107443,107444],{"class":133}," np.clip(action, ",[123,107446,666],{"class":129},[123,107448,105257],{"class":182},[123,107450,12445],{"class":133},[123,107452,105257],{"class":182},[123,107454,140],{"class":133},[123,107456,107457,107459,107461,107463,107465],{"class":125,"line":45},[123,107458,105868],{"class":133},[123,107460,325],{"class":182},[123,107462,4452],{"class":133},[123,107464,179],{"class":129},[123,107466,107467],{"class":133}," action\n",[65,107469,102604],{"id":102603},[14,107471,107472],{},"这一章建立了控制任务的基本形式：",[114,107474,107477],{"className":107475,"code":107476,"language":5197,"meta":37},[5195],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[120,107478,107476],{"__ignoreMap":37},[14,107480,107481],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5136,107483,107484],{},"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":37,"searchDepth":45,"depth":45,"links":107486},[107487,107488,107489,107494,107498,107499,107500,107508],{"id":100643,"depth":45,"text":100644},{"id":100766,"depth":45,"text":100767},{"id":101041,"depth":45,"text":101042,"children":107490},[107491,107492,107493],{"id":106130,"depth":1189,"text":106131},{"id":106180,"depth":1189,"text":106181},{"id":106246,"depth":1189,"text":106247},{"id":101249,"depth":45,"text":101250,"children":107495},[107496,107497],{"id":101569,"depth":1189,"text":101569},{"id":101705,"depth":1189,"text":101705},{"id":102312,"depth":45,"text":102313},{"id":102344,"depth":45,"text":102345},{"id":102449,"depth":45,"text":102450,"children":107501},[107502,107503,107504,107505,107507],{"id":107336,"depth":1189,"text":107339},{"id":107348,"depth":1189,"text":107348},{"id":107374,"depth":1189,"text":107374},{"id":107383,"depth":1189,"text":107506},"data.ctrl[0] 写了但没有效果",{"id":107414,"depth":1189,"text":107414},{"id":102603,"depth":45,"text":102604},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105818,"description":37},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107515,"title":107516,"body":107517,"description":37,"extension":48,"meta":109426,"navigation":50,"path":109427,"seo":109428,"stem":109429,"__hash__":109430},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107518,"toc":109402},[107519,107522,107524,107527,107535,107538,107555,107558,107583,107586,107632,107634,107636,107691,107693,107712,107714,107757,107760,107777,107780,107796,107806,107813,107815,107818,107821,107855,107858,107906,107910,107913,107927,107936,107940,107943,107968,107971,107975,107988,107991,107997,108000,108015,108017,108020,108280,108282,108294,108297,108609,108611,108623,108625,108628,108643,108648,108651,108673,108676,108679,108713,108716,108720,108731,108734,108751,108754,108768,108775,108795,108802,108816,108819,108831,108846,108866,108869,108891,108894,108898,108913,108924,108939,108942,108972,108988,109017,109025,109049,109052,109070,109080,109092,109099,109108,109114,109123,109126,109128,109137,109140,109155,109157,109160,109171,109174,109185,109188,109206,109208,109225,109228,109256,109258,109262,109265,109295,109301,109304,109308,109316,109319,109321,109342,109345,109348,109364,109367,109383,109385,109388,109399],[10,107520,107516],{"id":107521},"_5viewer-可视化与-renderer-离屏渲染",[65,107523,100644],{"id":100643},[14,107525,107526],{},"本章掌握两类可视化方式:",[77,107528,107529,107532],{},[80,107530,107531],{},"交互式 viewer: 适合人工观察仿真",[80,107533,107534],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107536,107537],{},"使用官方接口:",[114,107539,107541],{"className":30389,"code":107540,"language":30391,"meta":37,"style":37},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[120,107542,107543,107550],{"__ignoreMap":37},[123,107544,107545,107547],{"class":125,"line":126},[123,107546,30403],{"class":129},[123,107548,107549],{"class":133}," mujoco.viewer\n",[123,107551,107552],{"class":125,"line":45},[123,107553,107554],{"class":133},"mujoco.viewer.launch_passive(model, data)\n",[14,107556,107557],{},"以及:",[114,107559,107561],{"className":30389,"code":107560,"language":30391,"meta":37,"style":37},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[120,107562,107563,107573],{"__ignoreMap":37},[123,107564,107565,107568,107570],{"class":125,"line":126},[123,107566,107567],{"class":133},"renderer ",[123,107569,179],{"class":129},[123,107571,107572],{"class":133}," mujoco.Renderer(model)\n",[123,107574,107575,107578,107580],{"class":125,"line":45},[123,107576,107577],{"class":133},"image ",[123,107579,179],{"class":129},[123,107581,107582],{"class":133}," renderer.render()\n",[14,107584,107585],{},"新手建议先理解二者区别：",[271,107587,107588,107604],{},[274,107589,107590],{},[277,107591,107592,107595,107598,107601],{},[280,107593,107594],{"align":23746},"工具",[280,107596,107597],{"align":23746},"用途",[280,107599,107600],{"align":23746},"是否打开窗口",[280,107602,107603],{"align":23746},"常见场景",[318,107605,107606,107619],{},[277,107607,107608,107611,107614,107616],{},[323,107609,107610],{"align":23746},"Viewer",[323,107612,107613],{"align":23746},"人眼实时观察仿真",[323,107615,104662],{"align":23746},[323,107617,107618],{"align":23746},"调试模型、看控制效果",[277,107620,107621,107624,107627,107629],{},[323,107622,107623],{"align":23746},"Renderer",[323,107625,107626],{"align":23746},"生成图像数组",[323,107628,104675],{"align":23746},[323,107630,107631],{"align":23746},"保存图片、训练视觉策略、服务器批量采集",[65,107633,100767],{"id":100766},[14,107635,100770],{},[114,107637,107639],{"className":23832,"code":107638,"language":23834,"meta":37,"style":37},"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",[120,107640,107641,107653,107663,107671,107679],{"__ignoreMap":37},[123,107642,107643,107645,107647,107649,107651],{"class":125,"line":126},[123,107644,24587],{"class":1972},[123,107646,26326],{"class":238},[123,107648,23844],{"class":238},[123,107650,26411],{"class":182},[123,107652,24689],{"class":182},[123,107654,107655,107657,107659,107661],{"class":125,"line":45},[123,107656,100805],{"class":238},[123,107658,100808],{"class":238},[123,107660,100811],{"class":238},[123,107662,24689],{"class":182},[123,107664,107665,107667,107669],{"class":125,"line":1189},[123,107666,100818],{"class":238},[123,107668,100821],{"class":238},[123,107670,24689],{"class":182},[123,107672,107673,107675,107677],{"class":125,"line":1204},[123,107674,100828],{"class":238},[123,107676,100831],{"class":238},[123,107678,24689],{"class":182},[123,107680,107681,107683,107685,107687,107689],{"class":125,"line":1210},[123,107682,100838],{"class":238},[123,107684,100841],{"class":238},[123,107686,100844],{"class":238},[123,107688,100847],{"class":238},[123,107690,102513],{"class":238},[14,107692,102816],{},[114,107694,107696],{"className":23832,"code":107695,"language":23834,"meta":37,"style":37},"pip install \"mujoco>=2.3\" numpy pillow\n",[120,107697,107698],{"__ignoreMap":37},[123,107699,107700,107702,107704,107706,107709],{"class":125,"line":126},[123,107701,23841],{"class":1972},[123,107703,23844],{"class":238},[123,107705,100927],{"class":238},[123,107707,107708],{"class":238}," numpy",[123,107710,107711],{"class":238}," pillow\n",[14,107713,102833],{},[114,107715,107717],{"className":23832,"code":107716,"language":23834,"meta":37,"style":37},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[120,107718,107719,107736,107745],{"__ignoreMap":37},[123,107720,107721,107723,107725,107727,107730,107732,107734],{"class":125,"line":126},[123,107722,30341],{"class":1972},[123,107724,29187],{"class":238},[123,107726,25126],{"class":182},[123,107728,107729],{"class":238}," mujoco-render",[123,107731,100972],{"class":238},[123,107733,100975],{"class":182},[123,107735,100978],{"class":182},[123,107737,107738,107740,107742],{"class":125,"line":45},[123,107739,30341],{"class":1972},[123,107741,100985],{"class":238},[123,107743,107744],{"class":238}," mujoco-render\n",[123,107746,107747,107749,107751,107753,107755],{"class":125,"line":1189},[123,107748,23841],{"class":1972},[123,107750,23844],{"class":238},[123,107752,100927],{"class":238},[123,107754,107708],{"class":238},[123,107756,107711],{"class":238},[14,107758,107759],{},"离屏渲染后端:",[114,107761,107763],{"className":23832,"code":107762,"language":23834,"meta":37,"style":37},"export MUJOCO_GL=egl\n",[120,107764,107765],{"__ignoreMap":37},[123,107766,107767,107769,107772,107774],{"class":125,"line":126},[123,107768,25053],{"class":129},[123,107770,107771],{"class":133}," MUJOCO_GL",[123,107773,179],{"class":129},[123,107775,107776],{"class":133},"egl\n",[14,107778,107779],{},"或:",[114,107781,107783],{"className":23832,"code":107782,"language":23834,"meta":37,"style":37},"export MUJOCO_GL=osmesa\n",[120,107784,107785],{"__ignoreMap":37},[123,107786,107787,107789,107791,107793],{"class":125,"line":126},[123,107788,25053],{"class":129},[123,107790,107771],{"class":133},[123,107792,179],{"class":129},[123,107794,107795],{"class":133},"osmesa\n",[14,107797,107798,107799,107802,107803,28396],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[120,107800,107801],{},"egl"," 失败，再尝试 ",[120,107804,107805],{},"osmesa",[14,107807,107808,107809,107812],{},"如果你在本机桌面环境运行，通常先不要设置 ",[120,107810,107811],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[65,107814,101042],{"id":101041},[14,107816,107817],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,107819,107820],{},"典型 viewer 流程:",[114,107822,107824],{"className":30389,"code":107823,"language":30391,"meta":37,"style":37},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[120,107825,107826,107839,107846,107850],{"__ignoreMap":37},[123,107827,107828,107831,107834,107836],{"class":125,"line":126},[123,107829,107830],{"class":129},"with",[123,107832,107833],{"class":133}," mujoco.viewer.launch_passive(model, data) ",[123,107835,31394],{"class":129},[123,107837,107838],{"class":133}," viewer:\n",[123,107840,107841,107843],{"class":125,"line":45},[123,107842,2260],{"class":129},[123,107844,107845],{"class":133}," viewer.is_running():\n",[123,107847,107848],{"class":125,"line":1189},[123,107849,101513],{"class":133},[123,107851,107852],{"class":125,"line":1204},[123,107853,107854],{"class":133},"        viewer.sync()\n",[14,107856,107857],{},"典型 renderer 流程:",[114,107859,107861],{"className":30389,"code":107860,"language":30391,"meta":37,"style":37},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[120,107862,107863,107889,107893,107898],{"__ignoreMap":37},[123,107864,107865,107867,107869,107872,107874,107876,107878,107880,107882,107884,107887],{"class":125,"line":126},[123,107866,107567],{"class":133},[123,107868,179],{"class":129},[123,107870,107871],{"class":133}," mujoco.Renderer(model, ",[123,107873,24992],{"class":5226},[123,107875,179],{"class":129},[123,107877,42353],{"class":182},[123,107879,12445],{"class":133},[123,107881,24988],{"class":5226},[123,107883,179],{"class":129},[123,107885,107886],{"class":182},"640",[123,107888,140],{"class":133},[123,107890,107891],{"class":125,"line":45},[123,107892,104502],{"class":133},[123,107894,107895],{"class":125,"line":1189},[123,107896,107897],{"class":133},"renderer.update_scene(data)\n",[123,107899,107900,107902,107904],{"class":125,"line":1204},[123,107901,107577],{"class":133},[123,107903,179],{"class":129},[123,107905,107582],{"class":133},[94,107907,107909],{"id":107908},"viewer-的同步逻辑","viewer 的同步逻辑",[14,107911,107912],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[114,107914,107916],{"className":30389,"code":107915,"language":30391,"meta":37,"style":37},"mujoco.mj_step(model, data)\nviewer.sync()\n",[120,107917,107918,107922],{"__ignoreMap":37},[123,107919,107920],{"class":125,"line":126},[123,107921,104502],{"class":133},[123,107923,107924],{"class":125,"line":45},[123,107925,107926],{"class":133},"viewer.sync()\n",[14,107928,107929,107931,107932,107935],{},[120,107930,101212],{}," 负责算物理，",[120,107933,107934],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[94,107937,107939],{"id":107938},"为什么要-sleep","为什么要 sleep",[14,107941,107942],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[114,107944,107946],{"className":30389,"code":107945,"language":30391,"meta":37,"style":37},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[120,107947,107948],{"__ignoreMap":37},[123,107949,107950,107953,107955,107958,107960,107963,107965],{"class":125,"line":126},[123,107951,107952],{"class":133},"sleep_time ",[123,107954,179],{"class":129},[123,107956,107957],{"class":133}," model.opt.timestep ",[123,107959,666],{"class":129},[123,107961,107962],{"class":133}," (time.time() ",[123,107964,666],{"class":129},[123,107966,107967],{"class":133}," step_start)\n",[14,107969,107970],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[94,107972,107974],{"id":107973},"renderer-输出是什么","renderer 输出是什么",[114,107976,107978],{"className":30389,"code":107977,"language":30391,"meta":37,"style":37},"image = renderer.render()\n",[120,107979,107980],{"__ignoreMap":37},[123,107981,107982,107984,107986],{"class":125,"line":126},[123,107983,107577],{"class":133},[123,107985,179],{"class":129},[123,107987,107582],{"class":133},[14,107989,107990],{},"得到的是 NumPy 数组，形状通常是：",[114,107992,107995],{"className":107993,"code":107994,"language":5197,"meta":37},[5195],"(height, width, 3)\n",[120,107996,107994],{"__ignoreMap":37},[14,107998,107999],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[114,108001,108003],{"className":30389,"code":108002,"language":30391,"meta":37,"style":37},"Image.fromarray(image).save(\"render_output.png\")\n",[120,108004,108005],{"__ignoreMap":37},[123,108006,108007,108010,108013],{"class":125,"line":126},[123,108008,108009],{"class":133},"Image.fromarray(image).save(",[123,108011,108012],{"class":238},"\"render_output.png\"",[123,108014,140],{"class":133},[65,108016,101250],{"id":101249},[14,108018,108019],{},"交互式 Viewer:",[114,108021,108023],{"className":30389,"code":108022,"language":30391,"meta":37,"style":37},"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",[120,108024,108025,108031,108035,108041,108047,108051,108055,108063,108068,108072,108076,108080,108085,108090,108094,108098,108102,108107,108111,108115,108119,108123,108127,108131,108143,108155,108163,108167,108177,108197,108207,108212,108217,108221,108238,108251,108256,108260,108264,108276],{"__ignoreMap":37},[123,108026,108027,108029],{"class":125,"line":126},[123,108028,30403],{"class":129},[123,108030,31840],{"class":133},[123,108032,108033],{"class":125,"line":45},[123,108034,2409],{"emptyLinePlaceholder":50},[123,108036,108037,108039],{"class":125,"line":1189},[123,108038,30403],{"class":129},[123,108040,101298],{"class":133},[123,108042,108043,108045],{"class":125,"line":1204},[123,108044,30403],{"class":129},[123,108046,107549],{"class":133},[123,108048,108049],{"class":125,"line":1210},[123,108050,2409],{"emptyLinePlaceholder":50},[123,108052,108053],{"class":125,"line":1224},[123,108054,2409],{"emptyLinePlaceholder":50},[123,108056,108057,108059,108061],{"class":125,"line":1230},[123,108058,101311],{"class":182},[123,108060,13574],{"class":129},[123,108062,101316],{"class":238},[123,108064,108065],{"class":125,"line":1321},[123,108066,108067],{"class":238},"\u003Cmujoco model=\"viewer_demo\">\n",[123,108069,108070],{"class":125,"line":1327},[123,108071,101326],{"class":238},[123,108073,108074],{"class":125,"line":1339},[123,108075,2409],{"emptyLinePlaceholder":50},[123,108077,108078],{"class":125,"line":1621},[123,108079,101335],{"class":238},[123,108081,108082],{"class":125,"line":1626},[123,108083,108084],{"class":238},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[123,108086,108087],{"class":125,"line":1632},[123,108088,108089],{"class":238},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[123,108091,108092],{"class":125,"line":1637},[123,108093,2409],{"emptyLinePlaceholder":50},[123,108095,108096],{"class":125,"line":1651},[123,108097,101349],{"class":238},[123,108099,108100],{"class":125,"line":1656},[123,108101,101354],{"class":238},[123,108103,108104],{"class":125,"line":1662},[123,108105,108106],{"class":238},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[123,108108,108109],{"class":125,"line":1683},[123,108110,101364],{"class":238},[123,108112,108113],{"class":125,"line":1688},[123,108114,101369],{"class":238},[123,108116,108117],{"class":125,"line":1702},[123,108118,101374],{"class":238},[123,108120,108121],{"class":125,"line":1707},[123,108122,95695],{"class":238},[123,108124,108125],{"class":125,"line":1736},[123,108126,2409],{"emptyLinePlaceholder":50},[123,108128,108129],{"class":125,"line":1741},[123,108130,2409],{"emptyLinePlaceholder":50},[123,108132,108133,108135,108137,108139,108141],{"class":125,"line":1758},[123,108134,31958],{"class":129},[123,108136,1982],{"class":1972},[123,108138,101395],{"class":133},[123,108140,95683],{"class":182},[123,108142,3748],{"class":133},[123,108144,108145,108147,108149,108151,108153],{"class":125,"line":1763},[123,108146,101404],{"class":133},[123,108148,179],{"class":129},[123,108150,101409],{"class":133},[123,108152,101311],{"class":182},[123,108154,140],{"class":133},[123,108156,108157,108159,108161],{"class":125,"line":1768},[123,108158,101418],{"class":133},[123,108160,179],{"class":129},[123,108162,101423],{"class":133},[123,108164,108165],{"class":125,"line":1773},[123,108166,2409],{"emptyLinePlaceholder":50},[123,108168,108169,108171,108173,108175],{"class":125,"line":1787},[123,108170,34189],{"class":129},[123,108172,107833],{"class":133},[123,108174,31394],{"class":129},[123,108176,107838],{"class":133},[123,108178,108179,108182,108185,108187,108190,108192,108195],{"class":125,"line":1792},[123,108180,108181],{"class":129},"        while",[123,108183,108184],{"class":133}," viewer.is_running() ",[123,108186,30473],{"class":129},[123,108188,108189],{"class":133}," data.time ",[123,108191,1044],{"class":129},[123,108193,108194],{"class":182}," 5.0",[123,108196,3748],{"class":133},[123,108198,108199,108202,108204],{"class":125,"line":2586},[123,108200,108201],{"class":133},"            step_start ",[123,108203,179],{"class":129},[123,108205,108206],{"class":133}," time.time()\n",[123,108208,108209],{"class":125,"line":2600},[123,108210,108211],{"class":133},"            mujoco.mj_step(model, data)\n",[123,108213,108214],{"class":125,"line":2608},[123,108215,108216],{"class":133},"            viewer.sync()\n",[123,108218,108219],{"class":125,"line":2613},[123,108220,2409],{"emptyLinePlaceholder":50},[123,108222,108223,108226,108228,108230,108232,108234,108236],{"class":125,"line":2619},[123,108224,108225],{"class":133},"            sleep_time ",[123,108227,179],{"class":129},[123,108229,107957],{"class":133},[123,108231,666],{"class":129},[123,108233,107962],{"class":133},[123,108235,666],{"class":129},[123,108237,107967],{"class":133},[123,108239,108240,108242,108245,108247,108249],{"class":125,"line":2625},[123,108241,4651],{"class":129},[123,108243,108244],{"class":133}," sleep_time ",[123,108246,1094],{"class":129},[123,108248,4102],{"class":182},[123,108250,3748],{"class":133},[123,108252,108253],{"class":125,"line":2630},[123,108254,108255],{"class":133},"                time.sleep(sleep_time)\n",[123,108257,108258],{"class":125,"line":7958},[123,108259,2409],{"emptyLinePlaceholder":50},[123,108261,108262],{"class":125,"line":7982},[123,108263,2409],{"emptyLinePlaceholder":50},[123,108265,108266,108268,108270,108272,108274],{"class":125,"line":7987},[123,108267,1540],{"class":129},[123,108269,31231],{"class":182},[123,108271,101556],{"class":129},[123,108273,101559],{"class":238},[123,108275,3748],{"class":133},[123,108277,108278],{"class":125,"line":7993},[123,108279,101566],{"class":133},[14,108281,103567],{},[114,108283,108285],{"className":23832,"code":108284,"language":23834,"meta":37,"style":37},"touch ch5_viewer.py\n",[120,108286,108287],{"__ignoreMap":37},[123,108288,108289,108291],{"class":125,"line":126},[123,108290,101280],{"class":1972},[123,108292,108293],{"class":238}," ch5_viewer.py\n",[14,108295,108296],{},"离屏 Renderer 保存图片:",[114,108298,108300],{"className":30389,"code":108299,"language":30391,"meta":37,"style":37},"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",[120,108301,108302,108314,108318,108324,108334,108338,108342,108350,108355,108359,108363,108367,108371,108376,108380,108384,108388,108392,108396,108400,108404,108408,108412,108416,108420,108432,108444,108452,108477,108481,108497,108501,108505,108520,108529,108533,108547,108552,108557,108561,108573,108585,108589,108593,108605],{"__ignoreMap":37},[123,108303,108304,108306,108309,108311],{"class":125,"line":126},[123,108305,30748],{"class":129},[123,108307,108308],{"class":133}," pathlib ",[123,108310,30403],{"class":129},[123,108312,108313],{"class":133}," Path\n",[123,108315,108316],{"class":125,"line":45},[123,108317,2409],{"emptyLinePlaceholder":50},[123,108319,108320,108322],{"class":125,"line":1189},[123,108321,30403],{"class":129},[123,108323,101298],{"class":133},[123,108325,108326,108328,108330,108332],{"class":125,"line":1204},[123,108327,30748],{"class":129},[123,108329,47274],{"class":182},[123,108331,47277],{"class":129},[123,108333,47280],{"class":133},[123,108335,108336],{"class":125,"line":1210},[123,108337,2409],{"emptyLinePlaceholder":50},[123,108339,108340],{"class":125,"line":1224},[123,108341,2409],{"emptyLinePlaceholder":50},[123,108343,108344,108346,108348],{"class":125,"line":1230},[123,108345,101311],{"class":182},[123,108347,13574],{"class":129},[123,108349,101316],{"class":238},[123,108351,108352],{"class":125,"line":1321},[123,108353,108354],{"class":238},"\u003Cmujoco model=\"renderer_demo\">\n",[123,108356,108357],{"class":125,"line":1327},[123,108358,101326],{"class":238},[123,108360,108361],{"class":125,"line":1339},[123,108362,2409],{"emptyLinePlaceholder":50},[123,108364,108365],{"class":125,"line":1621},[123,108366,101335],{"class":238},[123,108368,108369],{"class":125,"line":1626},[123,108370,108084],{"class":238},[123,108372,108373],{"class":125,"line":1632},[123,108374,108375],{"class":238},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[123,108377,108378],{"class":125,"line":1637},[123,108379,108089],{"class":238},[123,108381,108382],{"class":125,"line":1651},[123,108383,2409],{"emptyLinePlaceholder":50},[123,108385,108386],{"class":125,"line":1656},[123,108387,101349],{"class":238},[123,108389,108390],{"class":125,"line":1662},[123,108391,101354],{"class":238},[123,108393,108394],{"class":125,"line":1683},[123,108395,108106],{"class":238},[123,108397,108398],{"class":125,"line":1688},[123,108399,101364],{"class":238},[123,108401,108402],{"class":125,"line":1702},[123,108403,101369],{"class":238},[123,108405,108406],{"class":125,"line":1707},[123,108407,101374],{"class":238},[123,108409,108410],{"class":125,"line":1736},[123,108411,95695],{"class":238},[123,108413,108414],{"class":125,"line":1741},[123,108415,2409],{"emptyLinePlaceholder":50},[123,108417,108418],{"class":125,"line":1758},[123,108419,2409],{"emptyLinePlaceholder":50},[123,108421,108422,108424,108426,108428,108430],{"class":125,"line":1763},[123,108423,31958],{"class":129},[123,108425,1982],{"class":1972},[123,108427,101395],{"class":133},[123,108429,95683],{"class":182},[123,108431,3748],{"class":133},[123,108433,108434,108436,108438,108440,108442],{"class":125,"line":1768},[123,108435,101404],{"class":133},[123,108437,179],{"class":129},[123,108439,101409],{"class":133},[123,108441,101311],{"class":182},[123,108443,140],{"class":133},[123,108445,108446,108448,108450],{"class":125,"line":1773},[123,108447,101418],{"class":133},[123,108449,179],{"class":129},[123,108451,101423],{"class":133},[123,108453,108454,108457,108459,108461,108463,108465,108467,108469,108471,108473,108475],{"class":125,"line":1787},[123,108455,108456],{"class":133},"    renderer ",[123,108458,179],{"class":129},[123,108460,107871],{"class":133},[123,108462,24992],{"class":5226},[123,108464,179],{"class":129},[123,108466,42353],{"class":182},[123,108468,12445],{"class":133},[123,108470,24988],{"class":5226},[123,108472,179],{"class":129},[123,108474,107886],{"class":182},[123,108476,140],{"class":133},[123,108478,108479],{"class":125,"line":1792},[123,108480,2409],{"emptyLinePlaceholder":50},[123,108482,108483,108485,108487,108489,108491,108493,108495],{"class":125,"line":2586},[123,108484,3210],{"class":129},[123,108486,101498],{"class":133},[123,108488,26054],{"class":129},[123,108490,32454],{"class":182},[123,108492,134],{"class":133},[123,108494,445],{"class":182},[123,108496,30797],{"class":133},[123,108498,108499],{"class":125,"line":2600},[123,108500,101513],{"class":133},[123,108502,108503],{"class":125,"line":2608},[123,108504,2409],{"emptyLinePlaceholder":50},[123,108506,108507,108510,108513,108515,108518],{"class":125,"line":2613},[123,108508,108509],{"class":133},"    renderer.update_scene(data, ",[123,108511,108512],{"class":5226},"camera",[123,108514,179],{"class":129},[123,108516,108517],{"class":238},"\"fixed_camera\"",[123,108519,140],{"class":133},[123,108521,108522,108525,108527],{"class":125,"line":2619},[123,108523,108524],{"class":133},"    image ",[123,108526,179],{"class":129},[123,108528,107582],{"class":133},[123,108530,108531],{"class":125,"line":2625},[123,108532,2409],{"emptyLinePlaceholder":50},[123,108534,108535,108538,108540,108543,108545],{"class":125,"line":2630},[123,108536,108537],{"class":133},"    output_path ",[123,108539,179],{"class":129},[123,108541,108542],{"class":133}," Path(",[123,108544,108012],{"class":238},[123,108546,140],{"class":133},[123,108548,108549],{"class":125,"line":7958},[123,108550,108551],{"class":133},"    Image.fromarray(image).save(output_path)\n",[123,108553,108554],{"class":125,"line":7982},[123,108555,108556],{"class":133},"    renderer.close()\n",[123,108558,108559],{"class":125,"line":7987},[123,108560,2409],{"emptyLinePlaceholder":50},[123,108562,108563,108565,108567,108570],{"class":125,"line":7993},[123,108564,31310],{"class":182},[123,108566,134],{"class":133},[123,108568,108569],{"class":238},"\"saved:\"",[123,108571,108572],{"class":133},", output_path.resolve())\n",[123,108574,108575,108577,108579,108582],{"class":125,"line":8020},[123,108576,31310],{"class":182},[123,108578,134],{"class":133},[123,108580,108581],{"class":238},"\"image shape:\"",[123,108583,108584],{"class":133},", image.shape)\n",[123,108586,108587],{"class":125,"line":8025},[123,108588,2409],{"emptyLinePlaceholder":50},[123,108590,108591],{"class":125,"line":8031},[123,108592,2409],{"emptyLinePlaceholder":50},[123,108594,108595,108597,108599,108601,108603],{"class":125,"line":8043},[123,108596,1540],{"class":129},[123,108598,31231],{"class":182},[123,108600,101556],{"class":129},[123,108602,101559],{"class":238},[123,108604,3748],{"class":133},[123,108606,108607],{"class":125,"line":8055},[123,108608,101566],{"class":133},[14,108610,103567],{},[114,108612,108614],{"className":23832,"code":108613,"language":23834,"meta":37,"style":37},"touch ch5_renderer.py\n",[120,108615,108616],{"__ignoreMap":37},[123,108617,108618,108620],{"class":125,"line":126},[123,108619,101280],{"class":1972},[123,108621,108622],{"class":238}," ch5_renderer.py\n",[94,108624,101569],{"id":101569},[14,108626,108627],{},"viewer 上下文：",[114,108629,108631],{"className":30389,"code":108630,"language":30391,"meta":37,"style":37},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[120,108632,108633],{"__ignoreMap":37},[123,108634,108635,108637,108639,108641],{"class":125,"line":126},[123,108636,107830],{"class":129},[123,108638,107833],{"class":133},[123,108640,31394],{"class":129},[123,108642,107838],{"class":133},[14,108644,108645,108647],{},[120,108646,107830],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,108649,108650],{},"窗口循环：",[114,108652,108654],{"className":30389,"code":108653,"language":30391,"meta":37,"style":37},"while viewer.is_running() and data.time \u003C 5.0:\n",[120,108655,108656],{"__ignoreMap":37},[123,108657,108658,108661,108663,108665,108667,108669,108671],{"class":125,"line":126},[123,108659,108660],{"class":129},"while",[123,108662,108184],{"class":133},[123,108664,30473],{"class":129},[123,108666,108189],{"class":133},[123,108668,1044],{"class":129},[123,108670,108194],{"class":182},[123,108672,3748],{"class":133},[14,108674,108675],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,108677,108678],{},"固定相机：",[114,108680,108682],{"className":53078,"code":108681,"language":53080,"meta":37,"style":37},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[120,108683,108684],{"__ignoreMap":37},[123,108685,108686,108688,108690,108692,108694,108696,108698,108700,108703,108706,108708,108711],{"class":125,"line":126},[123,108687,1044],{"class":133},[123,108689,108512],{"class":51311},[123,108691,14930],{"class":1972},[123,108693,179],{"class":133},[123,108695,108517],{"class":238},[123,108697,101103],{"class":1972},[123,108699,179],{"class":133},[123,108701,108702],{"class":238},"\"1.5 -2.0 1.2\"",[123,108704,108705],{"class":1972}," xyaxes",[123,108707,179],{"class":133},[123,108709,108710],{"class":238},"\"1 0.75 0 0 0 1\"",[123,108712,101141],{"class":133},[14,108714,108715],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[94,108717,108719],{"id":108718},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[114,108721,108723],{"className":30389,"code":108722,"language":30391,"meta":37,"style":37},"import time\n",[120,108724,108725],{"__ignoreMap":37},[123,108726,108727,108729],{"class":125,"line":126},[123,108728,30403],{"class":129},[123,108730,31840],{"class":133},[14,108732,108733],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[114,108735,108737],{"className":30389,"code":108736,"language":30391,"meta":37,"style":37},"import mujoco\nimport mujoco.viewer\n",[120,108738,108739,108745],{"__ignoreMap":37},[123,108740,108741,108743],{"class":125,"line":126},[123,108742,30403],{"class":129},[123,108744,101298],{"class":133},[123,108746,108747,108749],{"class":125,"line":45},[123,108748,30403],{"class":129},[123,108750,107549],{"class":133},[14,108752,108753],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[114,108755,108756],{"className":30389,"code":108630,"language":30391,"meta":37,"style":37},[120,108757,108758],{"__ignoreMap":37},[123,108759,108760,108762,108764,108766],{"class":125,"line":126},[123,108761,107830],{"class":129},[123,108763,107833],{"class":133},[123,108765,31394],{"class":129},[123,108767,107838],{"class":133},[14,108769,108770,108771,108774],{},"打开一个 viewer 窗口。",[120,108772,108773],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[114,108776,108777],{"className":30389,"code":108653,"language":30391,"meta":37,"style":37},[120,108778,108779],{"__ignoreMap":37},[123,108780,108781,108783,108785,108787,108789,108791,108793],{"class":125,"line":126},[123,108782,108660],{"class":129},[123,108784,108184],{"class":133},[123,108786,30473],{"class":129},[123,108788,108189],{"class":133},[123,108790,1044],{"class":129},[123,108792,108194],{"class":182},[123,108794,3748],{"class":133},[14,108796,108797,108798,108801],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[120,108799,108800],{},"viewer.is_running()"," 会变成 false，循环结束。",[114,108803,108805],{"className":30389,"code":108804,"language":30391,"meta":37,"style":37},"step_start = time.time()\n",[120,108806,108807],{"__ignoreMap":37},[123,108808,108809,108812,108814],{"class":125,"line":126},[123,108810,108811],{"class":133},"step_start ",[123,108813,179],{"class":129},[123,108815,108206],{"class":133},[14,108817,108818],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[114,108820,108821],{"className":30389,"code":107915,"language":30391,"meta":37,"style":37},[120,108822,108823,108827],{"__ignoreMap":37},[123,108824,108825],{"class":125,"line":126},[123,108826,104502],{"class":133},[123,108828,108829],{"class":125,"line":45},[123,108830,107926],{"class":133},[14,108832,108833,108835,108836,108838,108839,108841,108842,108845],{},[120,108834,101212],{}," 推进物理仿真。",[120,108837,107934],{}," 把最新的 ",[120,108840,33412],{}," 同步到窗口里显示。没有 ",[120,108843,108844],{},"sync()","，窗口可能看不到最新状态。",[114,108847,108848],{"className":30389,"code":107945,"language":30391,"meta":37,"style":37},[120,108849,108850],{"__ignoreMap":37},[123,108851,108852,108854,108856,108858,108860,108862,108864],{"class":125,"line":126},[123,108853,107952],{"class":133},[123,108855,179],{"class":129},[123,108857,107957],{"class":133},[123,108859,666],{"class":129},[123,108861,107962],{"class":133},[123,108863,666],{"class":129},[123,108865,107967],{"class":133},[14,108867,108868],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[114,108870,108872],{"className":30389,"code":108871,"language":30391,"meta":37,"style":37},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[120,108873,108874,108886],{"__ignoreMap":37},[123,108875,108876,108878,108880,108882,108884],{"class":125,"line":126},[123,108877,1540],{"class":129},[123,108879,108244],{"class":133},[123,108881,1094],{"class":129},[123,108883,4102],{"class":182},[123,108885,3748],{"class":133},[123,108887,108888],{"class":125,"line":45},[123,108889,108890],{"class":133},"    time.sleep(sleep_time)\n",[14,108892,108893],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[94,108895,108897],{"id":108896},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[114,108899,108901],{"className":30389,"code":108900,"language":30391,"meta":37,"style":37},"from pathlib import Path\n",[120,108902,108903],{"__ignoreMap":37},[123,108904,108905,108907,108909,108911],{"class":125,"line":126},[123,108906,30748],{"class":129},[123,108908,108308],{"class":133},[123,108910,30403],{"class":129},[123,108912,108313],{"class":133},[14,108914,108915,108916,108919,108920,108923],{},"导入 ",[120,108917,108918],{},"Path","，用来处理文件路径。相比直接写字符串，",[120,108921,108922],{},"Path(\"render_output.png\")"," 更清晰。",[114,108925,108927],{"className":30389,"code":108926,"language":30391,"meta":37,"style":37},"from PIL import Image\n",[120,108928,108929],{"__ignoreMap":37},[123,108930,108931,108933,108935,108937],{"class":125,"line":126},[123,108932,30748],{"class":129},[123,108934,47274],{"class":182},[123,108936,47277],{"class":129},[123,108938,47280],{"class":133},[14,108940,108941],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[114,108943,108944],{"className":53078,"code":108681,"language":53080,"meta":37,"style":37},[120,108945,108946],{"__ignoreMap":37},[123,108947,108948,108950,108952,108954,108956,108958,108960,108962,108964,108966,108968,108970],{"class":125,"line":126},[123,108949,1044],{"class":133},[123,108951,108512],{"class":51311},[123,108953,14930],{"class":1972},[123,108955,179],{"class":133},[123,108957,108517],{"class":238},[123,108959,101103],{"class":1972},[123,108961,179],{"class":133},[123,108963,108702],{"class":238},[123,108965,108705],{"class":1972},[123,108967,179],{"class":133},[123,108969,108710],{"class":238},[123,108971,101141],{"class":133},[14,108973,108974,108975,108977,108978,108980,108981,108984,108985,108987],{},"定义一个相机。",[120,108976,79821],{}," 是相机名字。",[120,108979,104143],{}," 是相机在世界里的位置。",[120,108982,108983],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[120,108986,104143],{}," 来调视角。",[114,108989,108991],{"className":30389,"code":108990,"language":30391,"meta":37,"style":37},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[120,108992,108993],{"__ignoreMap":37},[123,108994,108995,108997,108999,109001,109003,109005,109007,109009,109011,109013,109015],{"class":125,"line":126},[123,108996,107567],{"class":133},[123,108998,179],{"class":129},[123,109000,107871],{"class":133},[123,109002,24992],{"class":5226},[123,109004,179],{"class":129},[123,109006,42353],{"class":182},[123,109008,12445],{"class":133},[123,109010,24988],{"class":5226},[123,109012,179],{"class":129},[123,109014,107886],{"class":182},[123,109016,140],{"class":133},[14,109018,109019,109020,101015,109022,109024],{},"创建离屏渲染器。",[120,109021,24992],{},[120,109023,24988],{}," 决定输出图片大小。",[114,109026,109027],{"className":30389,"code":101673,"language":30391,"meta":37,"style":37},[120,109028,109029,109045],{"__ignoreMap":37},[123,109030,109031,109033,109035,109037,109039,109041,109043],{"class":125,"line":126},[123,109032,3034],{"class":129},[123,109034,101498],{"class":133},[123,109036,26054],{"class":129},[123,109038,32454],{"class":182},[123,109040,134],{"class":133},[123,109042,445],{"class":182},[123,109044,30797],{"class":133},[123,109046,109047],{"class":125,"line":45},[123,109048,101696],{"class":133},[14,109050,109051],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[114,109053,109055],{"className":30389,"code":109054,"language":30391,"meta":37,"style":37},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[120,109056,109057],{"__ignoreMap":37},[123,109058,109059,109062,109064,109066,109068],{"class":125,"line":126},[123,109060,109061],{"class":133},"renderer.update_scene(data, ",[123,109063,108512],{"class":5226},[123,109065,179],{"class":129},[123,109067,108517],{"class":238},[123,109069,140],{"class":133},[14,109071,109072,109073,109075,109076,109079],{},"告诉 renderer：用当前 ",[120,109074,33412],{}," 的状态更新画面，并使用名为 ",[120,109077,109078],{},"fixed_camera"," 的相机视角。",[114,109081,109082],{"className":30389,"code":107977,"language":30391,"meta":37,"style":37},[120,109083,109084],{"__ignoreMap":37},[123,109085,109086,109088,109090],{"class":125,"line":126},[123,109087,107577],{"class":133},[123,109089,179],{"class":129},[123,109091,107582],{"class":133},[14,109093,109094,109095,109098],{},"真正渲染出图像。",[120,109096,109097],{},"image"," 是一个 NumPy 数组，不是文件。",[114,109100,109102],{"className":30389,"code":109101,"language":30391,"meta":37,"style":37},"Image.fromarray(image).save(output_path)\n",[120,109103,109104],{"__ignoreMap":37},[123,109105,109106],{"class":125,"line":126},[123,109107,109101],{"class":133},[14,109109,109110,109111,28396],{},"把数组转换成图片，并保存到 ",[120,109112,109113],{},"render_output.png",[114,109115,109117],{"className":30389,"code":109116,"language":30391,"meta":37,"style":37},"renderer.close()\n",[120,109118,109119],{"__ignoreMap":37},[123,109120,109121],{"class":125,"line":126},[123,109122,109116],{"class":133},[14,109124,109125],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[65,109127,102313],{"id":102312},[14,109129,109130,109131,109133,109134,28396],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[120,109132,109113],{},"，并输出图像数组形状，例如 ",[120,109135,109136],{},"(480, 640, 3)",[14,109138,109139],{},"如果图片里看不到方块，先检查：",[77,109141,109142,109145,109148],{},[80,109143,109144],{},"方块是否掉到相机视野外。",[80,109146,109147],{},"camera 位置是否合理。",[80,109149,109150,109151,109154],{},"是否在 ",[120,109152,109153],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[65,109156,102345],{"id":102344},[14,109158,109159],{},"运行 viewer:",[114,109161,109163],{"className":23832,"code":109162,"language":23834,"meta":37,"style":37},"python ch5_viewer.py\n",[120,109164,109165],{"__ignoreMap":37},[123,109166,109167,109169],{"class":125,"line":126},[123,109168,30391],{"class":1972},[123,109170,108293],{"class":238},[14,109172,109173],{},"运行 renderer:",[114,109175,109177],{"className":23832,"code":109176,"language":23834,"meta":37,"style":37},"python ch5_renderer.py\n",[120,109178,109179],{"__ignoreMap":37},[123,109180,109181,109183],{"class":125,"line":126},[123,109182,30391],{"class":1972},[123,109184,108622],{"class":238},[14,109186,109187],{},"如果在服务器上运行:",[114,109189,109191],{"className":23832,"code":109190,"language":23834,"meta":37,"style":37},"MUJOCO_GL=egl python ch5_renderer.py\n",[120,109192,109193],{"__ignoreMap":37},[123,109194,109195,109197,109199,109201,109204],{"class":125,"line":126},[123,109196,107811],{"class":133},[123,109198,179],{"class":129},[123,109200,107801],{"class":238},[123,109202,109203],{"class":1972}," python",[123,109205,108622],{"class":238},[14,109207,107779],{},[114,109209,109211],{"className":23832,"code":109210,"language":23834,"meta":37,"style":37},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[120,109212,109213],{"__ignoreMap":37},[123,109214,109215,109217,109219,109221,109223],{"class":125,"line":126},[123,109216,107811],{"class":133},[123,109218,179],{"class":129},[123,109220,107805],{"class":238},[123,109222,109203],{"class":1972},[123,109224,108622],{"class":238},[14,109226,109227],{},"再做几个练习：",[77,109229,109230,109237,109240,109246],{},[80,109231,109232,109233,109236],{},"把 renderer 分辨率改成 ",[120,109234,109235],{},"height=240, width=320","，观察输出 shape。",[80,109238,109239],{},"把方块颜色改成蓝色，重新保存图片。",[80,109241,109242,109243,109245],{},"把相机 ",[120,109244,104143],{}," 改远一点，观察画面中物体是否变小。",[80,109247,109248,109249,102411,109252,109255],{},"把 viewer 示例中的 ",[120,109250,109251],{},"data.time \u003C 5.0",[120,109253,109254],{},"data.time \u003C 20.0","，观察更长时间。",[65,109257,102450],{"id":102449},[94,109259,109261],{"id":109260},"viewer-窗口打不开","viewer 窗口打不开",[14,109263,109264],{},"安装:",[114,109266,109268],{"className":23832,"code":109267,"language":23834,"meta":37,"style":37},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[120,109269,109270],{"__ignoreMap":37},[123,109271,109272,109274,109276,109278,109280,109282,109284,109286,109288,109290,109292],{"class":125,"line":126},[123,109273,24587],{"class":1972},[123,109275,26326],{"class":238},[123,109277,23844],{"class":238},[123,109279,26411],{"class":182},[123,109281,102503],{"class":238},[123,109283,100831],{"class":238},[123,109285,102508],{"class":238},[123,109287,100844],{"class":238},[123,109289,100850],{"class":238},[123,109291,100841],{"class":238},[123,109293,109294],{"class":238}," libXinerama\n",[94,109296,109298],{"id":109297},"glfwerror",[120,109299,109300],{},"GLFWError",[14,109302,109303],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[94,109305,109307],{"id":109306},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109309,109310,109311,82550,109313,109315],{},"尝试 ",[120,109312,101034],{},[120,109314,101037],{},"。可能存在版本差异。",[94,109317,109318],{"id":109318},"保存图片是黑的",[14,109320,102572],{},[77,109322,109323,109326,109329,109339],{},[80,109324,109325],{},"XML 里是否有 light。",[80,109327,109328],{},"相机是否对着模型。",[80,109330,109331,109332,109335,109336,28396],{},"是否先 ",[120,109333,109334],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[120,109337,109338],{},"renderer.render()",[80,109340,109341],{},"物体是否已经掉出视野。",[94,109343,109344],{"id":109344},"远程服务器没有显示器",[14,109346,109347],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[114,109349,109350],{"className":23832,"code":109190,"language":23834,"meta":37,"style":37},[120,109351,109352],{"__ignoreMap":37},[123,109353,109354,109356,109358,109360,109362],{"class":125,"line":126},[123,109355,107811],{"class":133},[123,109357,179],{"class":129},[123,109359,107801],{"class":238},[123,109361,109203],{"class":1972},[123,109363,108622],{"class":238},[14,109365,109366],{},"如果 EGL 不可用，再尝试：",[114,109368,109369],{"className":23832,"code":109210,"language":23834,"meta":37,"style":37},[120,109370,109371],{"__ignoreMap":37},[123,109372,109373,109375,109377,109379,109381],{"class":125,"line":126},[123,109374,107811],{"class":133},[123,109376,179],{"class":129},[123,109378,107805],{"class":238},[123,109380,109203],{"class":1972},[123,109382,108622],{"class":238},[65,109384,102604],{"id":102603},[14,109386,109387],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[77,109389,109390,109393,109396],{},[80,109391,109392],{},"先用 viewer 看模型和控制是否正常。",[80,109394,109395],{},"再用 renderer 保存图片或构造视觉观测。",[80,109397,109398],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5136,109400,109401],{},"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":37,"searchDepth":45,"depth":45,"links":109403},[109404,109405,109406,109411,109416,109417,109418,109425],{"id":100643,"depth":45,"text":100644},{"id":100766,"depth":45,"text":100767},{"id":101041,"depth":45,"text":101042,"children":109407},[109408,109409,109410],{"id":107908,"depth":1189,"text":107909},{"id":107938,"depth":1189,"text":107939},{"id":107973,"depth":1189,"text":107974},{"id":101249,"depth":45,"text":101250,"children":109412},[109413,109414,109415],{"id":101569,"depth":1189,"text":101569},{"id":108718,"depth":1189,"text":108719},{"id":108896,"depth":1189,"text":108897},{"id":102312,"depth":45,"text":102313},{"id":102344,"depth":45,"text":102345},{"id":102449,"depth":45,"text":102450,"children":109419},[109420,109421,109422,109423,109424],{"id":109260,"depth":1189,"text":109261},{"id":109297,"depth":1189,"text":109300},{"id":109306,"depth":1189,"text":109307},{"id":109318,"depth":1189,"text":109318},{"id":109344,"depth":1189,"text":109344},{"id":102603,"depth":45,"text":102604},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107516,"description":37},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109432,"title":109433,"body":109434,"description":37,"extension":48,"meta":111345,"navigation":50,"path":111346,"seo":111347,"stem":111348,"__hash__":111349},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109435,"toc":111321},[109436,109439,109441,109444,109446,109465,109468,109474,109477,109479,109481,109505,109507,109521,109523,109564,109566,109577,109579,109582,109588,109591,109625,109628,109660,109663,109695,109699,109702,109742,109745,109751,109754,109760,109764,109767,109773,109776,109780,109783,109823,109825,109838,109841,109843,110425,110427,110439,110442,110453,110455,110458,110477,110489,110492,110513,110516,110519,110562,110565,110568,110588,110595,110597,110615,110630,110633,110639,110642,110648,110665,110672,110703,110714,110748,110759,110776,110785,110793,110798,110812,110815,110836,110842,110856,110861,110891,110901,110926,110934,110957,110960,110976,110979,110987,110993,111015,111028,111049,111058,111097,111108,111110,111113,111119,111122,111125,111131,111134,111154,111157,111159,111198,111200,111203,111211,111214,111217,111244,111247,111257,111263,111266,111272,111274,111280,111284,111287,111289,111292,111316,111319],[10,109437,109433],{"id":109438},"_6控制任务cartpole",[65,109440,100644],{"id":100643},[14,109442,109443],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109445,104328],{},[77,109447,109448,109451,109453,109456,109459,109462],{},[80,109449,109450],{},"slide joint",[80,109452,106181],{},[80,109454,109455],{},"cart force actuator",[80,109457,109458],{},"状态观测",[80,109460,109461],{},"简单控制循环",[80,109463,109464],{},"reward 设计雏形",[14,109466,109467],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[114,109469,109472],{"className":109470,"code":109471,"language":5197,"meta":37},[5195],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[120,109473,109471],{"__ignoreMap":37},[14,109475,109476],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[65,109478,100767],{"id":100766},[14,109480,100770],{},[114,109482,109483],{"className":23832,"code":104385,"language":23834,"meta":37,"style":37},[120,109484,109485],{"__ignoreMap":37},[123,109486,109487,109489,109491,109493,109495,109497,109499,109501,109503],{"class":125,"line":126},[123,109488,24587],{"class":1972},[123,109490,26326],{"class":238},[123,109492,23844],{"class":238},[123,109494,26411],{"class":182},[123,109496,104400],{"class":238},[123,109498,100795],{"class":238},[123,109500,102498],{"class":238},[123,109502,100811],{"class":238},[123,109504,104409],{"class":238},[14,109506,102816],{},[114,109508,109509],{"className":23832,"code":100916,"language":23834,"meta":37,"style":37},[120,109510,109511],{"__ignoreMap":37},[123,109512,109513,109515,109517,109519],{"class":125,"line":126},[123,109514,23841],{"class":1972},[123,109516,23844],{"class":238},[123,109518,100927],{"class":238},[123,109520,100930],{"class":238},[14,109522,102833],{},[114,109524,109526],{"className":23832,"code":109525,"language":23834,"meta":37,"style":37},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[120,109527,109528,109545,109554],{"__ignoreMap":37},[123,109529,109530,109532,109534,109536,109539,109541,109543],{"class":125,"line":126},[123,109531,30341],{"class":1972},[123,109533,29187],{"class":238},[123,109535,25126],{"class":182},[123,109537,109538],{"class":238}," mujoco-cartpole",[123,109540,100972],{"class":238},[123,109542,100975],{"class":182},[123,109544,100978],{"class":182},[123,109546,109547,109549,109551],{"class":125,"line":45},[123,109548,30341],{"class":1972},[123,109550,100985],{"class":238},[123,109552,109553],{"class":238}," mujoco-cartpole\n",[123,109555,109556,109558,109560,109562],{"class":125,"line":1189},[123,109557,23841],{"class":1972},[123,109559,23844],{"class":238},[123,109561,100927],{"class":238},[123,109563,100930],{"class":238},[14,109565,101001],{},[77,109567,109568,109571,109574],{},[80,109569,109570],{},"本章不依赖 Gymnasium。",[80,109572,109573],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[80,109575,109576],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[65,109578,101042],{"id":101041},[14,109580,109581],{},"Cartpole 的模型结构:",[114,109583,109586],{"className":109584,"code":109585,"language":5197,"meta":37},[5195],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[120,109587,109585],{"__ignoreMap":37},[14,109589,109590],{},"小车通过 slide joint 左右移动:",[114,109592,109594],{"className":53078,"code":109593,"language":53080,"meta":37,"style":37},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[120,109595,109596],{"__ignoreMap":37},[123,109597,109598,109600,109602,109604,109606,109609,109611,109613,109616,109618,109620,109623],{"class":125,"line":126},[123,109599,1044],{"class":133},[123,109601,102953],{"class":51311},[123,109603,14930],{"class":1972},[123,109605,179],{"class":133},[123,109607,109608],{"class":238},"\"cart_x\"",[123,109610,53835],{"class":1972},[123,109612,179],{"class":133},[123,109614,109615],{"class":238},"\"slide\"",[123,109617,106025],{"class":1972},[123,109619,179],{"class":133},[123,109621,109622],{"class":238},"\"1 0 0\"",[123,109624,101141],{"class":133},[14,109626,109627],{},"杆子通过 hinge joint 旋转:",[114,109629,109631],{"className":53078,"code":109630,"language":53080,"meta":37,"style":37},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[120,109632,109633],{"__ignoreMap":37},[123,109634,109635,109637,109639,109641,109643,109646,109648,109650,109652,109654,109656,109658],{"class":125,"line":126},[123,109636,1044],{"class":133},[123,109638,102953],{"class":51311},[123,109640,14930],{"class":1972},[123,109642,179],{"class":133},[123,109644,109645],{"class":238},"\"pole_hinge\"",[123,109647,53835],{"class":1972},[123,109649,179],{"class":133},[123,109651,106016],{"class":238},[123,109653,106025],{"class":1972},[123,109655,179],{"class":133},[123,109657,106030],{"class":238},[123,109659,101141],{"class":133},[14,109661,109662],{},"控制力作用在小车 slide joint 上:",[114,109664,109666],{"className":53078,"code":109665,"language":53080,"meta":37,"style":37},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[120,109667,109668],{"__ignoreMap":37},[123,109669,109670,109672,109674,109676,109678,109681,109683,109685,109687,109689,109691,109693],{"class":125,"line":126},[123,109671,1044],{"class":133},[123,109673,106071],{"class":51311},[123,109675,14930],{"class":1972},[123,109677,179],{"class":133},[123,109679,109680],{"class":238},"\"cart_motor\"",[123,109682,106081],{"class":1972},[123,109684,179],{"class":133},[123,109686,109608],{"class":238},[123,109688,106088],{"class":1972},[123,109690,179],{"class":133},[123,109692,54327],{"class":238},[123,109694,101141],{"class":133},[94,109696,109698],{"id":109697},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,109700,109701],{},"这个简化模型有两个关节：",[271,109703,109704,109715],{},[274,109705,109706],{},[277,109707,109708,109710,109712],{},[280,109709,102756],{"align":23746},[280,109711,23747],{"align":23746},[280,109713,109714],{"align":23746},"对应状态",[318,109716,109717,109730],{},[277,109718,109719,109724,109727],{},[323,109720,109721],{"align":23746},[120,109722,109723],{},"cart_x",[323,109725,109726],{"align":23746},"slide",[323,109728,109729],{"align":23746},"小车 x 位置",[277,109731,109732,109737,109739],{},[323,109733,109734],{"align":23746},[120,109735,109736],{},"pole_hinge",[323,109738,105837],{"align":23746},[323,109740,109741],{"align":23746},"杆子角度",[14,109743,109744],{},"所以：",[114,109746,109749],{"className":109747,"code":109748,"language":5197,"meta":37},[5195],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[120,109750,109748],{"__ignoreMap":37},[14,109752,109753],{},"把它们拼起来就是观测：",[114,109755,109758],{"className":109756,"code":109757,"language":5197,"meta":37},[5195],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[120,109759,109757],{"__ignoreMap":37},[94,109761,109763],{"id":109762},"action-是什么","action 是什么",[14,109765,109766],{},"本章只有一个 actuator：",[114,109768,109771],{"className":109769,"code":109770,"language":5197,"meta":37},[5195],"data.ctrl[0] = action\n",[120,109772,109770],{"__ignoreMap":37},[14,109774,109775],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[94,109777,109779],{"id":109778},"reward-是什么","reward 是什么",[14,109781,109782],{},"奖励函数：",[114,109784,109786],{"className":30389,"code":109785,"language":30391,"meta":37,"style":37},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[120,109787,109788],{"__ignoreMap":37},[123,109789,109790,109792,109795,109797,109799,109801,109804,109806,109809,109811,109813,109815,109818,109820],{"class":125,"line":126},[123,109791,17056],{"class":129},[123,109793,109794],{"class":182}," float",[123,109796,134],{"class":133},[123,109798,102400],{"class":182},[123,109800,52282],{"class":129},[123,109802,109803],{"class":182}," 0.1",[123,109805,6528],{"class":129},[123,109807,109808],{"class":133}," cart_x ",[123,109810,589],{"class":129},[123,109812,109808],{"class":133},[123,109814,666],{"class":129},[123,109816,109817],{"class":133}," pole_angle ",[123,109819,589],{"class":129},[123,109821,109822],{"class":133}," pole_angle)\n",[14,109824,106223],{},[77,109826,109827,109832,109835],{},[80,109828,109829,109830,28396],{},"基础奖励是 ",[120,109831,102400],{},[80,109833,109834],{},"小车离中心越远，扣分越多。",[80,109836,109837],{},"杆子角度越大，扣分越多。",[14,109839,109840],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[65,109842,101250],{"id":101249},[114,109844,109846],{"className":30389,"code":109845,"language":30391,"meta":37,"style":37},"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",[120,109847,109848,109854,109864,109868,109872,109880,109885,109889,109893,109897,109902,109906,109911,109916,109921,109925,109930,109935,109940,109944,109948,109952,109956,109960,109965,109969,109973,109977,109981,109985,109995,110002,110006,110010,110024,110038,110051,110081,110085,110089,110101,110113,110121,110125,110138,110142,110146,110155,110159,110175,110185,110198,110211,110215,110238,110256,110260,110272,110276,110280,110290,110300,110304,110320,110361,110365,110385,110401,110405,110409,110421],{"__ignoreMap":37},[123,109849,109850,109852],{"class":125,"line":126},[123,109851,30403],{"class":129},[123,109853,101298],{"class":133},[123,109855,109856,109858,109860,109862],{"class":125,"line":45},[123,109857,30403],{"class":129},[123,109859,31391],{"class":133},[123,109861,31394],{"class":129},[123,109863,31397],{"class":133},[123,109865,109866],{"class":125,"line":1189},[123,109867,2409],{"emptyLinePlaceholder":50},[123,109869,109870],{"class":125,"line":1204},[123,109871,2409],{"emptyLinePlaceholder":50},[123,109873,109874,109876,109878],{"class":125,"line":1210},[123,109875,101311],{"class":182},[123,109877,13574],{"class":129},[123,109879,101316],{"class":238},[123,109881,109882],{"class":125,"line":1224},[123,109883,109884],{"class":238},"\u003Cmujoco model=\"cartpole\">\n",[123,109886,109887],{"class":125,"line":1230},[123,109888,101326],{"class":238},[123,109890,109891],{"class":125,"line":1321},[123,109892,2409],{"emptyLinePlaceholder":50},[123,109894,109895],{"class":125,"line":1327},[123,109896,101335],{"class":238},[123,109898,109899],{"class":125,"line":1339},[123,109900,109901],{"class":238},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[123,109903,109904],{"class":125,"line":1621},[123,109905,2409],{"emptyLinePlaceholder":50},[123,109907,109908],{"class":125,"line":1626},[123,109909,109910],{"class":238},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[123,109912,109913],{"class":125,"line":1632},[123,109914,109915],{"class":238},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[123,109917,109918],{"class":125,"line":1637},[123,109919,109920],{"class":238},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[123,109922,109923],{"class":125,"line":1651},[123,109924,2409],{"emptyLinePlaceholder":50},[123,109926,109927],{"class":125,"line":1656},[123,109928,109929],{"class":238},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[123,109931,109932],{"class":125,"line":1662},[123,109933,109934],{"class":238},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[123,109936,109937],{"class":125,"line":1683},[123,109938,109939],{"class":238},"        \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",[123,109941,109942],{"class":125,"line":1688},[123,109943,106435],{"class":238},[123,109945,109946],{"class":125,"line":1702},[123,109947,101364],{"class":238},[123,109949,109950],{"class":125,"line":1707},[123,109951,101369],{"class":238},[123,109953,109954],{"class":125,"line":1736},[123,109955,2409],{"emptyLinePlaceholder":50},[123,109957,109958],{"class":125,"line":1741},[123,109959,106452],{"class":238},[123,109961,109962],{"class":125,"line":1758},[123,109963,109964],{"class":238},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[123,109966,109967],{"class":125,"line":1763},[123,109968,106462],{"class":238},[123,109970,109971],{"class":125,"line":1768},[123,109972,101374],{"class":238},[123,109974,109975],{"class":125,"line":1773},[123,109976,95695],{"class":238},[123,109978,109979],{"class":125,"line":1787},[123,109980,2409],{"emptyLinePlaceholder":50},[123,109982,109983],{"class":125,"line":1792},[123,109984,2409],{"emptyLinePlaceholder":50},[123,109986,109987,109989,109992],{"class":125,"line":2586},[123,109988,31958],{"class":129},[123,109990,109991],{"class":1972}," get_observation",[123,109993,109994],{"class":133},"(data: mujoco.MjData) -> np.ndarray:\n",[123,109996,109997,109999],{"class":125,"line":2600},[123,109998,4099],{"class":129},[123,110000,110001],{"class":133}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[123,110003,110004],{"class":125,"line":2608},[123,110005,2409],{"emptyLinePlaceholder":50},[123,110007,110008],{"class":125,"line":2613},[123,110009,2409],{"emptyLinePlaceholder":50},[123,110011,110012,110014,110017,110020,110022],{"class":125,"line":2619},[123,110013,31958],{"class":129},[123,110015,110016],{"class":1972}," compute_reward",[123,110018,110019],{"class":133},"(obs: np.ndarray) -> ",[123,110021,173],{"class":182},[123,110023,3748],{"class":133},[123,110025,110026,110029,110031,110034,110036],{"class":125,"line":2625},[123,110027,110028],{"class":133},"    cart_x ",[123,110030,179],{"class":129},[123,110032,110033],{"class":133}," obs[",[123,110035,325],{"class":182},[123,110037,33257],{"class":133},[123,110039,110040,110043,110045,110047,110049],{"class":125,"line":2630},[123,110041,110042],{"class":133},"    pole_angle ",[123,110044,179],{"class":129},[123,110046,110033],{"class":133},[123,110048,351],{"class":182},[123,110050,33257],{"class":133},[123,110052,110053,110055,110057,110059,110061,110063,110065,110067,110069,110071,110073,110075,110077,110079],{"class":125,"line":7958},[123,110054,4099],{"class":129},[123,110056,109794],{"class":182},[123,110058,134],{"class":133},[123,110060,102400],{"class":182},[123,110062,52282],{"class":129},[123,110064,109803],{"class":182},[123,110066,6528],{"class":129},[123,110068,109808],{"class":133},[123,110070,589],{"class":129},[123,110072,109808],{"class":133},[123,110074,666],{"class":129},[123,110076,109817],{"class":133},[123,110078,589],{"class":129},[123,110080,109822],{"class":133},[123,110082,110083],{"class":125,"line":7982},[123,110084,2409],{"emptyLinePlaceholder":50},[123,110086,110087],{"class":125,"line":7987},[123,110088,2409],{"emptyLinePlaceholder":50},[123,110090,110091,110093,110095,110097,110099],{"class":125,"line":7993},[123,110092,31958],{"class":129},[123,110094,1982],{"class":1972},[123,110096,101395],{"class":133},[123,110098,95683],{"class":182},[123,110100,3748],{"class":133},[123,110102,110103,110105,110107,110109,110111],{"class":125,"line":8020},[123,110104,101404],{"class":133},[123,110106,179],{"class":129},[123,110108,101409],{"class":133},[123,110110,101311],{"class":182},[123,110112,140],{"class":133},[123,110114,110115,110117,110119],{"class":125,"line":8025},[123,110116,101418],{"class":133},[123,110118,179],{"class":129},[123,110120,101423],{"class":133},[123,110122,110123],{"class":125,"line":8031},[123,110124,2409],{"emptyLinePlaceholder":50},[123,110126,110127,110129,110131,110133,110135],{"class":125,"line":8043},[123,110128,105066],{"class":133},[123,110130,351],{"class":182},[123,110132,4452],{"class":133},[123,110134,179],{"class":129},[123,110136,110137],{"class":182}," 0.1\n",[123,110139,110140],{"class":125,"line":8055},[123,110141,105079],{"class":133},[123,110143,110144],{"class":125,"line":8067},[123,110145,2409],{"emptyLinePlaceholder":50},[123,110147,110148,110151,110153],{"class":125,"line":9726},[123,110149,110150],{"class":133},"    total_reward ",[123,110152,179],{"class":129},[123,110154,104758],{"class":182},[123,110156,110157],{"class":125,"line":9751},[123,110158,2409],{"emptyLinePlaceholder":50},[123,110160,110161,110163,110165,110167,110169,110171,110173],{"class":125,"line":9774},[123,110162,3210],{"class":129},[123,110164,31627],{"class":133},[123,110166,26054],{"class":129},[123,110168,32454],{"class":182},[123,110170,134],{"class":133},[123,110172,6420],{"class":182},[123,110174,30797],{"class":133},[123,110176,110177,110180,110182],{"class":125,"line":9798},[123,110178,110179],{"class":133},"        obs ",[123,110181,179],{"class":129},[123,110183,110184],{"class":133}," get_observation(data)\n",[123,110186,110187,110190,110192,110194,110196],{"class":125,"line":9803},[123,110188,110189],{"class":133},"        pole_angle ",[123,110191,179],{"class":129},[123,110193,110033],{"class":133},[123,110195,351],{"class":182},[123,110197,33257],{"class":133},[123,110199,110200,110203,110205,110207,110209],{"class":125,"line":9808},[123,110201,110202],{"class":133},"        pole_angular_velocity ",[123,110204,179],{"class":129},[123,110206,110033],{"class":133},[123,110208,205],{"class":182},[123,110210,33257],{"class":133},[123,110212,110213],{"class":125,"line":9813},[123,110214,2409],{"emptyLinePlaceholder":50},[123,110216,110217,110220,110222,110225,110227,110229,110231,110233,110235],{"class":125,"line":9822},[123,110218,110219],{"class":133},"        action ",[123,110221,179],{"class":129},[123,110223,110224],{"class":182}," 2.0",[123,110226,6528],{"class":129},[123,110228,109817],{"class":133},[123,110230,615],{"class":129},[123,110232,61878],{"class":182},[123,110234,6528],{"class":129},[123,110236,110237],{"class":133}," pole_angular_velocity\n",[123,110239,110240,110242,110244,110246,110248,110250,110252,110254],{"class":125,"line":9827},[123,110241,110219],{"class":133},[123,110243,179],{"class":129},[123,110245,107444],{"class":133},[123,110247,666],{"class":129},[123,110249,102400],{"class":182},[123,110251,12445],{"class":133},[123,110253,102400],{"class":182},[123,110255,140],{"class":133},[123,110257,110258],{"class":125,"line":9833},[123,110259,2409],{"emptyLinePlaceholder":50},[123,110261,110262,110264,110266,110268,110270],{"class":125,"line":9854},[123,110263,106614],{"class":133},[123,110265,325],{"class":182},[123,110267,4452],{"class":133},[123,110269,179],{"class":129},[123,110271,107467],{"class":133},[123,110273,110274],{"class":125,"line":9860},[123,110275,101513],{"class":133},[123,110277,110278],{"class":125,"line":9874},[123,110279,2409],{"emptyLinePlaceholder":50},[123,110281,110282,110285,110287],{"class":125,"line":9880},[123,110283,110284],{"class":133},"        reward ",[123,110286,179],{"class":129},[123,110288,110289],{"class":133}," compute_reward(get_observation(data))\n",[123,110291,110292,110295,110297],{"class":125,"line":9907},[123,110293,110294],{"class":133},"        total_reward ",[123,110296,9487],{"class":129},[123,110298,110299],{"class":133}," reward\n",[123,110301,110302],{"class":125,"line":9916},[123,110303,2409],{"emptyLinePlaceholder":50},[123,110305,110306,110308,110310,110312,110314,110316,110318],{"class":125,"line":9922},[123,110307,2506],{"class":129},[123,110309,31627],{"class":133},[123,110311,462],{"class":129},[123,110313,5764],{"class":182},[123,110315,101556],{"class":129},[123,110317,4102],{"class":182},[123,110319,3748],{"class":133},[123,110321,110322,110324,110326,110329,110332,110335,110338,110340,110343,110346,110348,110350,110352,110354,110357,110359],{"class":125,"line":9930},[123,110323,34661],{"class":182},[123,110325,134],{"class":133},[123,110327,110328],{"class":238},"\"step:\"",[123,110330,110331],{"class":133},", step, ",[123,110333,110334],{"class":238},"\"obs:\"",[123,110336,110337],{"class":133},", np.round(obs, ",[123,110339,205],{"class":182},[123,110341,110342],{"class":133},"), ",[123,110344,110345],{"class":238},"\"action:\"",[123,110347,12445],{"class":133},[123,110349,32029],{"class":182},[123,110351,134],{"class":133},[123,110353,173],{"class":182},[123,110355,110356],{"class":133},"(action), ",[123,110358,205],{"class":182},[123,110360,30508],{"class":133},[123,110362,110363],{"class":125,"line":9935},[123,110364,2409],{"emptyLinePlaceholder":50},[123,110366,110367,110369,110371,110374,110376,110378,110381,110383],{"class":125,"line":16614},[123,110368,31310],{"class":182},[123,110370,134],{"class":133},[123,110372,110373],{"class":238},"\"total_reward:\"",[123,110375,12445],{"class":133},[123,110377,32029],{"class":182},[123,110379,110380],{"class":133},"(total_reward, ",[123,110382,205],{"class":182},[123,110384,30508],{"class":133},[123,110386,110387,110389,110391,110394,110397,110399],{"class":125,"line":16620},[123,110388,31310],{"class":182},[123,110390,134],{"class":133},[123,110392,110393],{"class":238},"\"final obs:\"",[123,110395,110396],{"class":133},", np.round(get_observation(data), ",[123,110398,205],{"class":182},[123,110400,30508],{"class":133},[123,110402,110403],{"class":125,"line":16643},[123,110404,2409],{"emptyLinePlaceholder":50},[123,110406,110407],{"class":125,"line":16649},[123,110408,2409],{"emptyLinePlaceholder":50},[123,110410,110411,110413,110415,110417,110419],{"class":125,"line":16672},[123,110412,1540],{"class":129},[123,110414,31231],{"class":182},[123,110416,101556],{"class":129},[123,110418,101559],{"class":238},[123,110420,3748],{"class":133},[123,110422,110423],{"class":125,"line":16686},[123,110424,101566],{"class":133},[14,110426,103567],{},[114,110428,110430],{"className":23832,"code":110429,"language":23834,"meta":37,"style":37},"touch ch6_cartpole.py\n",[120,110431,110432],{"__ignoreMap":37},[123,110433,110434,110436],{"class":125,"line":126},[123,110435,101280],{"class":1972},[123,110437,110438],{"class":238}," ch6_cartpole.py\n",[14,110440,110441],{},"运行：",[114,110443,110445],{"className":23832,"code":110444,"language":23834,"meta":37,"style":37},"python ch6_cartpole.py\n",[120,110446,110447],{"__ignoreMap":37},[123,110448,110449,110451],{"class":125,"line":126},[123,110450,30391],{"class":1972},[123,110452,110438],{"class":238},[94,110454,101569],{"id":101569},[14,110456,110457],{},"构造观测：",[114,110459,110461],{"className":30389,"code":110460,"language":30391,"meta":37,"style":37},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[120,110462,110463,110471],{"__ignoreMap":37},[123,110464,110465,110467,110469],{"class":125,"line":126},[123,110466,31958],{"class":129},[123,110468,109991],{"class":1972},[123,110470,109994],{"class":133},[123,110472,110473,110475],{"class":125,"line":45},[123,110474,4099],{"class":129},[123,110476,110001],{"class":133},[14,110478,110479,110482,110483,110485,110486,110488],{},[120,110480,110481],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[120,110484,104027],{}," 2 维，",[120,110487,104357],{}," 2 维，所以 obs 是 4 维。",[14,110490,110491],{},"设置初始角度：",[114,110493,110495],{"className":30389,"code":110494,"language":30391,"meta":37,"style":37},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[120,110496,110497,110509],{"__ignoreMap":37},[123,110498,110499,110501,110503,110505,110507],{"class":125,"line":126},[123,110500,104696],{"class":133},[123,110502,351],{"class":182},[123,110504,4452],{"class":133},[123,110506,179],{"class":129},[123,110508,110137],{"class":182},[123,110510,110511],{"class":125,"line":45},[123,110512,104540],{"class":133},[14,110514,110515],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110517,110518],{},"简单反馈控制：",[114,110520,110522],{"className":30389,"code":110521,"language":30391,"meta":37,"style":37},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[120,110523,110524,110544],{"__ignoreMap":37},[123,110525,110526,110528,110530,110532,110534,110536,110538,110540,110542],{"class":125,"line":126},[123,110527,107439],{"class":133},[123,110529,179],{"class":129},[123,110531,110224],{"class":182},[123,110533,6528],{"class":129},[123,110535,109817],{"class":133},[123,110537,615],{"class":129},[123,110539,61878],{"class":182},[123,110541,6528],{"class":129},[123,110543,110237],{"class":133},[123,110545,110546,110548,110550,110552,110554,110556,110558,110560],{"class":125,"line":45},[123,110547,107439],{"class":133},[123,110549,179],{"class":129},[123,110551,107444],{"class":133},[123,110553,666],{"class":129},[123,110555,102400],{"class":182},[123,110557,12445],{"class":133},[123,110559,102400],{"class":182},[123,110561,140],{"class":133},[14,110563,110564],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110566,110567],{},"限制动作：",[114,110569,110571],{"className":30389,"code":110570,"language":30391,"meta":37,"style":37},"np.clip(action, -1.0, 1.0)\n",[120,110572,110573],{"__ignoreMap":37},[123,110574,110575,110578,110580,110582,110584,110586],{"class":125,"line":126},[123,110576,110577],{"class":133},"np.clip(action, ",[123,110579,666],{"class":129},[123,110581,102400],{"class":182},[123,110583,12445],{"class":133},[123,110585,102400],{"class":182},[123,110587,140],{"class":133},[14,110589,110590,110591,110594],{},"因为 XML 里 ",[120,110592,110593],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[94,110596,101705],{"id":101705},[114,110598,110599],{"className":30389,"code":110460,"language":30391,"meta":37,"style":37},[120,110600,110601,110609],{"__ignoreMap":37},[123,110602,110603,110605,110607],{"class":125,"line":126},[123,110604,31958],{"class":129},[123,110606,109991],{"class":1972},[123,110608,109994],{"class":133},[123,110610,110611,110613],{"class":125,"line":45},[123,110612,4099],{"class":129},[123,110614,110001],{"class":133},[14,110616,110617,110618,110621,110622,110625,110626,110629],{},"这段定义了一个函数，用来获取当前观测。",[120,110619,110620],{},"data.qpos.copy()"," 是位置数组副本，",[120,110623,110624],{},"data.qvel.copy()"," 是速度数组副本。",[120,110627,110628],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,110631,110632],{},"在本章模型里：",[114,110634,110637],{"className":110635,"code":110636,"language":5197,"meta":37},[5195],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[120,110638,110636],{"__ignoreMap":37},[14,110640,110641],{},"所以返回的 obs 是：",[114,110643,110646],{"className":110644,"code":110645,"language":5197,"meta":37},[5195],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[120,110647,110645],{"__ignoreMap":37},[114,110649,110651],{"className":30389,"code":110650,"language":30391,"meta":37,"style":37},"def compute_reward(obs: np.ndarray) -> float:\n",[120,110652,110653],{"__ignoreMap":37},[123,110654,110655,110657,110659,110661,110663],{"class":125,"line":126},[123,110656,31958],{"class":129},[123,110658,110016],{"class":1972},[123,110660,110019],{"class":133},[123,110662,173],{"class":182},[123,110664,3748],{"class":133},[14,110666,110667,110668,110671],{},"这行定义奖励函数。输入是观测 ",[120,110669,110670],{},"obs","，输出是一个浮点数奖励。",[114,110673,110675],{"className":30389,"code":110674,"language":30391,"meta":37,"style":37},"cart_x = obs[0]\npole_angle = obs[1]\n",[120,110676,110677,110690],{"__ignoreMap":37},[123,110678,110679,110682,110684,110686,110688],{"class":125,"line":126},[123,110680,110681],{"class":133},"cart_x ",[123,110683,179],{"class":129},[123,110685,110033],{"class":133},[123,110687,325],{"class":182},[123,110689,33257],{"class":133},[123,110691,110692,110695,110697,110699,110701],{"class":125,"line":45},[123,110693,110694],{"class":133},"pole_angle ",[123,110696,179],{"class":129},[123,110698,110033],{"class":133},[123,110700,351],{"class":182},[123,110702,33257],{"class":133},[14,110704,110705,110706,110709,110710,110713],{},"数组索引从 0 开始。",[120,110707,110708],{},"obs[0]"," 是第一个元素，也就是小车位置。",[120,110711,110712],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[114,110715,110716],{"className":30389,"code":109785,"language":30391,"meta":37,"style":37},[120,110717,110718],{"__ignoreMap":37},[123,110719,110720,110722,110724,110726,110728,110730,110732,110734,110736,110738,110740,110742,110744,110746],{"class":125,"line":126},[123,110721,17056],{"class":129},[123,110723,109794],{"class":182},[123,110725,134],{"class":133},[123,110727,102400],{"class":182},[123,110729,52282],{"class":129},[123,110731,109803],{"class":182},[123,110733,6528],{"class":129},[123,110735,109808],{"class":133},[123,110737,589],{"class":129},[123,110739,109808],{"class":133},[123,110741,666],{"class":129},[123,110743,109817],{"class":133},[123,110745,589],{"class":129},[123,110747,109822],{"class":133},[14,110749,110750,110751,110754,110755,110758],{},"这行计算奖励。",[120,110752,110753],{},"cart_x * cart_x"," 是小车位置的平方，",[120,110756,110757],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[114,110760,110762],{"className":30389,"code":110761,"language":30391,"meta":37,"style":37},"data.qpos[1] = 0.1\n",[120,110763,110764],{"__ignoreMap":37},[123,110765,110766,110768,110770,110772,110774],{"class":125,"line":126},[123,110767,104696],{"class":133},[123,110769,351],{"class":182},[123,110771,4452],{"class":133},[123,110773,179],{"class":129},[123,110775,110137],{"class":182},[14,110777,110778,110779,110781,110782,110784],{},"手动设置杆子的初始角度。因为 ",[120,110780,105453],{}," 是小车位置，",[120,110783,105456],{}," 是杆子角度，所以这里改的是杆子。",[114,110786,110787],{"className":30389,"code":104540,"language":30391,"meta":37,"style":37},[120,110788,110789],{"__ignoreMap":37},[123,110790,110791],{"class":125,"line":126},[123,110792,104540],{"class":133},[14,110794,105499,110795,110797],{},[120,110796,104027],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[114,110799,110801],{"className":30389,"code":110800,"language":30391,"meta":37,"style":37},"total_reward = 0.0\n",[120,110802,110803],{"__ignoreMap":37},[123,110804,110805,110808,110810],{"class":125,"line":126},[123,110806,110807],{"class":133},"total_reward ",[123,110809,179],{"class":129},[123,110811,104758],{"class":182},[14,110813,110814],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[114,110816,110818],{"className":30389,"code":110817,"language":30391,"meta":37,"style":37},"for step in range(1000):\n",[120,110819,110820],{"__ignoreMap":37},[123,110821,110822,110824,110826,110828,110830,110832,110834],{"class":125,"line":126},[123,110823,3034],{"class":129},[123,110825,31627],{"class":133},[123,110827,26054],{"class":129},[123,110829,32454],{"class":182},[123,110831,134],{"class":133},[123,110833,6420],{"class":182},[123,110835,30797],{"class":133},[14,110837,110838,110839,110841],{},"循环 1000 步。",[120,110840,107131],{}," 是当前步数，从 0 到 999。",[114,110843,110845],{"className":30389,"code":110844,"language":30391,"meta":37,"style":37},"obs = get_observation(data)\n",[120,110846,110847],{"__ignoreMap":37},[123,110848,110849,110852,110854],{"class":125,"line":126},[123,110850,110851],{"class":133},"obs ",[123,110853,179],{"class":129},[123,110855,110184],{"class":133},[14,110857,110858,110859,28396],{},"读取当前状态，保存到 ",[120,110860,110670],{},[114,110862,110864],{"className":30389,"code":110863,"language":30391,"meta":37,"style":37},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[120,110865,110866,110878],{"__ignoreMap":37},[123,110867,110868,110870,110872,110874,110876],{"class":125,"line":126},[123,110869,110694],{"class":133},[123,110871,179],{"class":129},[123,110873,110033],{"class":133},[123,110875,351],{"class":182},[123,110877,33257],{"class":133},[123,110879,110880,110883,110885,110887,110889],{"class":125,"line":45},[123,110881,110882],{"class":133},"pole_angular_velocity ",[123,110884,179],{"class":129},[123,110886,110033],{"class":133},[123,110888,205],{"class":182},[123,110890,33257],{"class":133},[14,110892,110893,110894,110897,110898,28396],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[120,110895,110896],{},"obs[3]","？因为 obs 的顺序是 ",[120,110899,110900],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[114,110902,110904],{"className":30389,"code":110903,"language":30391,"meta":37,"style":37},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[120,110905,110906],{"__ignoreMap":37},[123,110907,110908,110910,110912,110914,110916,110918,110920,110922,110924],{"class":125,"line":126},[123,110909,107439],{"class":133},[123,110911,179],{"class":129},[123,110913,110224],{"class":182},[123,110915,6528],{"class":129},[123,110917,109817],{"class":133},[123,110919,615],{"class":129},[123,110921,61878],{"class":182},[123,110923,6528],{"class":129},[123,110925,110237],{"class":133},[14,110927,110928,110929,101015,110931,110933],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[120,110930,105257],{},[120,110932,35340],{}," 是人为设置的系数，不是固定公式。",[114,110935,110937],{"className":30389,"code":110936,"language":30391,"meta":37,"style":37},"action = np.clip(action, -1.0, 1.0)\n",[120,110938,110939],{"__ignoreMap":37},[123,110940,110941,110943,110945,110947,110949,110951,110953,110955],{"class":125,"line":126},[123,110942,107439],{"class":133},[123,110944,179],{"class":129},[123,110946,107444],{"class":133},[123,110948,666],{"class":129},[123,110950,102400],{"class":182},[123,110952,12445],{"class":133},[123,110954,102400],{"class":182},[123,110956,140],{"class":133},[14,110958,110959],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[114,110961,110962],{"className":30389,"code":109770,"language":30391,"meta":37,"style":37},[120,110963,110964],{"__ignoreMap":37},[123,110965,110966,110968,110970,110972,110974],{"class":125,"line":126},[123,110967,105868],{"class":133},[123,110969,325],{"class":182},[123,110971,4452],{"class":133},[123,110973,179],{"class":129},[123,110975,107467],{"class":133},[14,110977,110978],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[114,110980,110981],{"className":30389,"code":104502,"language":30391,"meta":37,"style":37},[120,110982,110983],{"__ignoreMap":37},[123,110984,110985],{"class":125,"line":126},[123,110986,104502],{"class":133},[14,110988,110989,110990,110992],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[120,110991,106123],{}," 计算小车和杆子的下一刻状态。",[114,110994,110996],{"className":30389,"code":110995,"language":30391,"meta":37,"style":37},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[120,110997,110998,111007],{"__ignoreMap":37},[123,110999,111000,111003,111005],{"class":125,"line":126},[123,111001,111002],{"class":133},"reward ",[123,111004,179],{"class":129},[123,111006,110289],{"class":133},[123,111008,111009,111011,111013],{"class":125,"line":45},[123,111010,110807],{"class":133},[123,111012,9487],{"class":129},[123,111014,110299],{"class":133},[14,111016,111017,111018,111020,111021,111024,111025,28396],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[120,111019,9487],{}," 是简写，",[120,111022,111023],{},"total_reward += reward"," 等价于 ",[120,111026,111027],{},"total_reward = total_reward + reward",[114,111029,111031],{"className":30389,"code":111030,"language":30391,"meta":37,"style":37},"if step % 100 == 0:\n",[120,111032,111033],{"__ignoreMap":37},[123,111034,111035,111037,111039,111041,111043,111045,111047],{"class":125,"line":126},[123,111036,1540],{"class":129},[123,111038,31627],{"class":133},[123,111040,462],{"class":129},[123,111042,5764],{"class":182},[123,111044,101556],{"class":129},[123,111046,4102],{"class":182},[123,111048,3748],{"class":133},[14,111050,111051,111053,111054,111057],{},[120,111052,462],{}," 是取余数。",[120,111055,111056],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[114,111059,111061],{"className":30389,"code":111060,"language":30391,"meta":37,"style":37},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[120,111062,111063],{"__ignoreMap":37},[123,111064,111065,111067,111069,111071,111073,111075,111077,111079,111081,111083,111085,111087,111089,111091,111093,111095],{"class":125,"line":126},[123,111066,30426],{"class":182},[123,111068,134],{"class":133},[123,111070,110328],{"class":238},[123,111072,110331],{"class":133},[123,111074,110334],{"class":238},[123,111076,110337],{"class":133},[123,111078,205],{"class":182},[123,111080,110342],{"class":133},[123,111082,110345],{"class":238},[123,111084,12445],{"class":133},[123,111086,32029],{"class":182},[123,111088,134],{"class":133},[123,111090,173],{"class":182},[123,111092,110356],{"class":133},[123,111094,205],{"class":182},[123,111096,30508],{"class":133},[14,111098,111099,111100,111103,111104,111107],{},"打印当前步数、观测和动作。",[120,111101,111102],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[120,111105,111106],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[65,111109,102313],{"id":102312},[14,111111,111112],{},"观测向量:",[114,111114,111117],{"className":111115,"code":111116,"language":5197,"meta":37},[5195],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[120,111118,111116],{"__ignoreMap":37},[14,111120,111121],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111123,111124],{},"每隔 100 步会打印一次：",[114,111126,111129],{"className":111127,"code":111128,"language":5197,"meta":37},[5195],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[120,111130,111128],{"__ignoreMap":37},[14,111132,111133],{},"重点观察：",[77,111135,111136,111142,111147],{},[80,111137,111138,111141],{},[120,111139,111140],{},"pole_angle"," 是否越来越大。",[80,111143,111144,111146],{},[120,111145,109723],{}," 是否跑得太远。",[80,111148,111149,111150,82550,111152,28396],{},"action 是否经常被 clip 到 ",[120,111151,103912],{},[120,111153,351],{},[14,111155,111156],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[65,111158,102345],{"id":102344},[77,111160,111161,111167,111170,111176,111186,111192,111195],{},[80,111162,111163,111164,28396],{},"把初始角度改为 ",[120,111165,111166],{},"data.qpos[1] = 0.3",[80,111168,111169],{},"重新运行，观察控制是否变差。",[80,111171,111172,111173,111175],{},"把 actuator ",[120,111174,107064],{}," 改小。",[80,111177,111178,111179,111182,111183,28396],{},"打印 ",[120,111180,111181],{},"model.nq, model.nv, model.nu","，应为 ",[120,111184,111185],{},"2 2 1",[80,111187,111188,111189,111191],{},"把 reward 里的 ",[120,111190,110757],{}," 系数改大，观察总奖励变化。",[80,111193,111194],{},"把控制器改成反号，观察杆子是否更容易倒。",[80,111196,111197],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[65,111199,102450],{"id":102449},[94,111201,111202],{"id":111202},"杆子方向和预期不一致",[14,111204,102393,111205,111207,111208,111210],{},[120,111206,106236],{}," 和 capsule 的 ",[120,111209,103173],{},"，必要时用 viewer 可视化确认。",[94,111212,111213],{"id":111213},"控制器越控越倒",[14,111215,111216],{},"说明反馈符号可能反了，尝试:",[114,111218,111220],{"className":30389,"code":111219,"language":30391,"meta":37,"style":37},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[120,111221,111222],{"__ignoreMap":37},[123,111223,111224,111226,111228,111230,111232,111234,111236,111238,111240,111242],{"class":125,"line":126},[123,111225,107439],{"class":133},[123,111227,179],{"class":129},[123,111229,52282],{"class":129},[123,111231,105257],{"class":182},[123,111233,6528],{"class":129},[123,111235,109817],{"class":133},[123,111237,666],{"class":129},[123,111239,61878],{"class":182},[123,111241,6528],{"class":129},[123,111243,110237],{"class":133},[94,111245,111246],{"id":111246},"小车飞走",[14,111248,111249,111250,111252,111253,111256],{},"降低 ",[120,111251,107064],{}," 或缩小 ",[120,111254,111255],{},"action"," 的 clip 范围。",[94,111258,111260,111262],{"id":111259},"obs3-为什么是杆子角速度",[120,111261,110896],{}," 为什么是杆子角速度",[14,111264,111265],{},"因为这个模型里：",[114,111267,111270],{"className":111268,"code":111269,"language":5197,"meta":37},[5195],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[120,111271,111269],{"__ignoreMap":37},[14,111273,109744],{},[114,111275,111278],{"className":111276,"code":111277,"language":5197,"meta":37},[5195],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[120,111279,111277],{"__ignoreMap":37},[94,111281,111283],{"id":111282},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111285,111286],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[65,111288,102604],{"id":102603},[14,111290,111291],{},"一个控制任务通常包含：",[77,111293,111294,111297,111305,111310,111313],{},[80,111295,111296],{},"模型：Cartpole 的 body、joint、actuator。",[80,111298,111299,111300,346,111302,111304],{},"观测：从 ",[120,111301,104027],{},[120,111303,104357],{}," 里取状态。",[80,111306,111307,111308,28396],{},"动作：写入 ",[120,111309,101073],{},[80,111311,111312],{},"奖励：根据任务目标打分。",[80,111314,111315],{},"循环：obs -> action -> step -> reward。",[14,111317,111318],{},"这就是后面 Gymnasium 环境的基本骨架。",[5136,111320,104283],{},{"title":37,"searchDepth":45,"depth":45,"links":111322},[111323,111324,111325,111330,111334,111335,111336,111344],{"id":100643,"depth":45,"text":100644},{"id":100766,"depth":45,"text":100767},{"id":101041,"depth":45,"text":101042,"children":111326},[111327,111328,111329],{"id":109697,"depth":1189,"text":109698},{"id":109762,"depth":1189,"text":109763},{"id":109778,"depth":1189,"text":109779},{"id":101249,"depth":45,"text":101250,"children":111331},[111332,111333],{"id":101569,"depth":1189,"text":101569},{"id":101705,"depth":1189,"text":101705},{"id":102312,"depth":45,"text":102313},{"id":102344,"depth":45,"text":102345},{"id":102449,"depth":45,"text":102450,"children":111337},[111338,111339,111340,111341,111343],{"id":111202,"depth":1189,"text":111202},{"id":111213,"depth":1189,"text":111213},{"id":111246,"depth":1189,"text":111246},{"id":111259,"depth":1189,"text":111342},"obs[3] 为什么是杆子角速度",{"id":111282,"depth":1189,"text":111283},{"id":102603,"depth":45,"text":102604},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109433,"description":37},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111351,"title":111352,"body":111353,"description":37,"extension":48,"meta":113367,"navigation":50,"path":113368,"seo":113369,"stem":113370,"__hash__":113371},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111354,"toc":113343},[111355,111358,111360,111363,111365,111382,111385,111388,111394,111397,111399,111401,111425,111427,111441,111443,111484,111486,111504,111506,111509,111515,111518,111546,111550,111556,111581,111584,111615,111622,111625,111628,111634,111637,111643,111646,111652,111656,111659,111684,111687,111689,112449,112451,112463,112465,112476,112478,112481,112498,112501,112503,112514,112517,112519,112565,112568,112581,112584,112666,112669,112671,112687,112697,112710,112713,112752,112762,112773,112783,112796,112799,112828,112831,112841,112844,112850,112867,112878,112880,112886,112903,112914,112935,112938,112950,112953,112974,112977,112985,112993,113010,113013,113082,113089,113097,113100,113113,113120,113122,113125,113131,113134,113137,113143,113149,113151,113191,113193,113199,113208,113211,113213,113233,113236,113239,113245,113249,113251,113278,113281,113284,113311,113317,113320,113323,113325,113328,113331,113337,113340],[10,111356,111352],{"id":111357},"_7控制任务reacher-机械臂到达目标",[65,111359,100644],{"id":100643},[14,111361,111362],{},"本章搭建一个二维两关节 reacher 任务。",[14,111364,104328],{},[77,111366,111367,111370,111373,111376,111379],{},[80,111368,111369],{},"两个 hinge joint",[80,111371,111372],{},"两个 motor actuator",[80,111374,111375],{},"site 作为末端点和目标点",[80,111377,111378],{},"根据末端和目标距离设计 reward",[80,111380,111381],{},"构造机械臂任务的基本形式",[14,111383,111384],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111386,111387],{},"Reacher 任务可以理解为：",[114,111389,111392],{"className":111390,"code":111391,"language":5197,"meta":37},[5195],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[120,111393,111391],{"__ignoreMap":37},[14,111395,111396],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[65,111398,100767],{"id":100766},[14,111400,100770],{},[114,111402,111403],{"className":23832,"code":104385,"language":23834,"meta":37,"style":37},[120,111404,111405],{"__ignoreMap":37},[123,111406,111407,111409,111411,111413,111415,111417,111419,111421,111423],{"class":125,"line":126},[123,111408,24587],{"class":1972},[123,111410,26326],{"class":238},[123,111412,23844],{"class":238},[123,111414,26411],{"class":182},[123,111416,104400],{"class":238},[123,111418,100795],{"class":238},[123,111420,102498],{"class":238},[123,111422,100811],{"class":238},[123,111424,104409],{"class":238},[14,111426,102816],{},[114,111428,111429],{"className":23832,"code":100916,"language":23834,"meta":37,"style":37},[120,111430,111431],{"__ignoreMap":37},[123,111432,111433,111435,111437,111439],{"class":125,"line":126},[123,111434,23841],{"class":1972},[123,111436,23844],{"class":238},[123,111438,100927],{"class":238},[123,111440,100930],{"class":238},[14,111442,102833],{},[114,111444,111446],{"className":23832,"code":111445,"language":23834,"meta":37,"style":37},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[120,111447,111448,111465,111474],{"__ignoreMap":37},[123,111449,111450,111452,111454,111456,111459,111461,111463],{"class":125,"line":126},[123,111451,30341],{"class":1972},[123,111453,29187],{"class":238},[123,111455,25126],{"class":182},[123,111457,111458],{"class":238}," mujoco-reacher",[123,111460,100972],{"class":238},[123,111462,100975],{"class":182},[123,111464,100978],{"class":182},[123,111466,111467,111469,111471],{"class":125,"line":45},[123,111468,30341],{"class":1972},[123,111470,100985],{"class":238},[123,111472,111473],{"class":238}," mujoco-reacher\n",[123,111475,111476,111478,111480,111482],{"class":125,"line":1189},[123,111477,23841],{"class":1972},[123,111479,23844],{"class":238},[123,111481,100927],{"class":238},[123,111483,100930],{"class":238},[14,111485,101001],{},[77,111487,111488,111491,111494],{},[80,111489,111490],{},"本章使用低维状态，不使用图像输入。",[80,111492,111493],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[80,111495,111496,111497,346,111499,346,111501,111503],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[120,111498,104027],{},[120,111500,104357],{},[120,111502,103677],{}," 的方法一致。",[65,111505,101042],{"id":101041},[14,111507,111508],{},"Reacher 任务核心:",[114,111510,111513],{"className":111511,"code":111512,"language":5197,"meta":37},[5195],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[120,111514,111512],{"__ignoreMap":37},[14,111516,111517],{},"读取 site 世界坐标:",[114,111519,111521],{"className":30389,"code":111520,"language":30391,"meta":37,"style":37},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[120,111522,111523,111536],{"__ignoreMap":37},[123,111524,111525,111527,111529,111531,111534],{"class":125,"line":126},[123,111526,103631],{"class":133},[123,111528,179],{"class":129},[123,111530,103402],{"class":133},[123,111532,111533],{"class":238},"\"tip\"",[123,111535,140],{"class":133},[123,111537,111538,111541,111543],{"class":125,"line":45},[123,111539,111540],{"class":133},"tip_pos ",[123,111542,179],{"class":129},[123,111544,111545],{"class":133}," data.site_xpos[site_id]\n",[94,111547,111549],{"id":111548},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111551,111552,111553,111555],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[120,111554,104027],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[114,111557,111559],{"className":30389,"code":111558,"language":30391,"meta":37,"style":37},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[120,111560,111561,111571],{"__ignoreMap":37},[123,111562,111563,111566,111568],{"class":125,"line":126},[123,111564,111565],{"class":133},"tip ",[123,111567,179],{"class":129},[123,111569,111570],{"class":133}," data.site_xpos[tip_site_id]\n",[123,111572,111573,111576,111578],{"class":125,"line":45},[123,111574,111575],{"class":133},"target ",[123,111577,179],{"class":129},[123,111579,111580],{"class":133}," data.site_xpos[target_site_id]\n",[14,111582,111583],{},"这样 reward 就很容易写：",[114,111585,111587],{"className":30389,"code":111586,"language":30391,"meta":37,"style":37},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[120,111588,111589,111604],{"__ignoreMap":37},[123,111590,111591,111594,111596,111599,111601],{"class":125,"line":126},[123,111592,111593],{"class":133},"dist ",[123,111595,179],{"class":129},[123,111597,111598],{"class":133}," np.linalg.norm(tip ",[123,111600,666],{"class":129},[123,111602,111603],{"class":133}," target)\n",[123,111605,111606,111608,111610,111612],{"class":125,"line":45},[123,111607,111002],{"class":133},[123,111609,179],{"class":129},[123,111611,52282],{"class":129},[123,111613,111614],{"class":133},"dist\n",[14,111616,111617,111618,111621],{},"距离越小，",[120,111619,111620],{},"-dist"," 越接近 0，奖励越高。",[94,111623,111624],{"id":111624},"两关节机械臂的状态",[14,111626,111627],{},"这个模型有两个 hinge joint：",[114,111629,111632],{"className":111630,"code":111631,"language":5197,"meta":37},[5195],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[120,111633,111631],{"__ignoreMap":37},[14,111635,111636],{},"再加上末端和目标位置：",[114,111638,111641],{"className":111639,"code":111640,"language":5197,"meta":37},[5195],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[120,111642,111640],{"__ignoreMap":37},[14,111644,111645],{},"总维度：",[114,111647,111650],{"className":111648,"code":111649,"language":5197,"meta":37},[5195],"2 + 2 + 3 + 3 = 10\n",[120,111651,111649],{"__ignoreMap":37},[94,111653,111655],{"id":111654},"为什么-gravity-是-0","为什么 gravity 是 0",[14,111657,111658],{},"本章把重力设为：",[114,111660,111662],{"className":53078,"code":111661,"language":53080,"meta":37,"style":37},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[120,111663,111664],{"__ignoreMap":37},[123,111665,111666,111668,111670,111672,111674,111676,111678,111680,111682],{"class":125,"line":126},[123,111667,1044],{"class":133},[123,111669,69177],{"class":51311},[123,111671,101191],{"class":1972},[123,111673,179],{"class":133},[123,111675,101196],{"class":238},[123,111677,101199],{"class":1972},[123,111679,179],{"class":133},[123,111681,103768],{"class":238},[123,111683,101141],{"class":133},[14,111685,111686],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[65,111688,101250],{"id":101249},[114,111690,111692],{"className":30389,"code":111691,"language":30391,"meta":37,"style":37},"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",[120,111693,111694,111700,111710,111714,111718,111726,111731,111736,111740,111744,111749,111754,111758,111763,111768,111773,111777,111782,111787,111792,111797,111801,111805,111809,111813,111817,111822,111827,111831,111835,111839,111843,111847,111862,111871,111883,111906,111913,111917,111921,111931,111945,111959,111966,111970,111974,111988,112000,112012,112025,112040,112057,112061,112065,112077,112089,112097,112105,112109,112125,112130,112143,112156,112171,112175,112210,112242,112246,112250,112259,112263,112279,112289,112300,112316,112332,112348,112364,112368,112386,112406,112425,112429,112433,112445],{"__ignoreMap":37},[123,111695,111696,111698],{"class":125,"line":126},[123,111697,30403],{"class":129},[123,111699,101298],{"class":133},[123,111701,111702,111704,111706,111708],{"class":125,"line":45},[123,111703,30403],{"class":129},[123,111705,31391],{"class":133},[123,111707,31394],{"class":129},[123,111709,31397],{"class":133},[123,111711,111712],{"class":125,"line":1189},[123,111713,2409],{"emptyLinePlaceholder":50},[123,111715,111716],{"class":125,"line":1204},[123,111717,2409],{"emptyLinePlaceholder":50},[123,111719,111720,111722,111724],{"class":125,"line":1210},[123,111721,101311],{"class":182},[123,111723,13574],{"class":129},[123,111725,101316],{"class":238},[123,111727,111728],{"class":125,"line":1224},[123,111729,111730],{"class":238},"\u003Cmujoco model=\"two_link_reacher\">\n",[123,111732,111733],{"class":125,"line":1230},[123,111734,111735],{"class":238},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[123,111737,111738],{"class":125,"line":1321},[123,111739,2409],{"emptyLinePlaceholder":50},[123,111741,111742],{"class":125,"line":1327},[123,111743,101335],{"class":238},[123,111745,111746],{"class":125,"line":1339},[123,111747,111748],{"class":238},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[123,111750,111751],{"class":125,"line":1621},[123,111752,111753],{"class":238},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[123,111755,111756],{"class":125,"line":1626},[123,111757,2409],{"emptyLinePlaceholder":50},[123,111759,111760],{"class":125,"line":1632},[123,111761,111762],{"class":238},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[123,111764,111765],{"class":125,"line":1637},[123,111766,111767],{"class":238},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[123,111769,111770],{"class":125,"line":1651},[123,111771,111772],{"class":238},"      \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",[123,111774,111775],{"class":125,"line":1656},[123,111776,2409],{"emptyLinePlaceholder":50},[123,111778,111779],{"class":125,"line":1662},[123,111780,111781],{"class":238},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[123,111783,111784],{"class":125,"line":1683},[123,111785,111786],{"class":238},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[123,111788,111789],{"class":125,"line":1688},[123,111790,111791],{"class":238},"        \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",[123,111793,111794],{"class":125,"line":1702},[123,111795,111796],{"class":238},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[123,111798,111799],{"class":125,"line":1707},[123,111800,106435],{"class":238},[123,111802,111803],{"class":125,"line":1736},[123,111804,101364],{"class":238},[123,111806,111807],{"class":125,"line":1741},[123,111808,101369],{"class":238},[123,111810,111811],{"class":125,"line":1758},[123,111812,2409],{"emptyLinePlaceholder":50},[123,111814,111815],{"class":125,"line":1763},[123,111816,106452],{"class":238},[123,111818,111819],{"class":125,"line":1768},[123,111820,111821],{"class":238},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[123,111823,111824],{"class":125,"line":1773},[123,111825,111826],{"class":238},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[123,111828,111829],{"class":125,"line":1787},[123,111830,106462],{"class":238},[123,111832,111833],{"class":125,"line":1792},[123,111834,101374],{"class":238},[123,111836,111837],{"class":125,"line":2586},[123,111838,95695],{"class":238},[123,111840,111841],{"class":125,"line":2600},[123,111842,2409],{"emptyLinePlaceholder":50},[123,111844,111845],{"class":125,"line":2608},[123,111846,2409],{"emptyLinePlaceholder":50},[123,111848,111849,111851,111854,111857,111859],{"class":125,"line":2613},[123,111850,31958],{"class":129},[123,111852,111853],{"class":1972}," site_position",[123,111855,111856],{"class":133},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[123,111858,1309],{"class":182},[123,111860,111861],{"class":133},") -> np.ndarray:\n",[123,111863,111864,111866,111868],{"class":125,"line":2619},[123,111865,103397],{"class":133},[123,111867,179],{"class":129},[123,111869,111870],{"class":133}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[123,111872,111873,111875,111877,111879,111881],{"class":125,"line":2625},[123,111874,3110],{"class":129},[123,111876,103446],{"class":133},[123,111878,1044],{"class":129},[123,111880,4102],{"class":182},[123,111882,3748],{"class":133},[123,111884,111885,111887,111889,111891,111893,111896,111898,111900,111902,111904],{"class":125,"line":2630},[123,111886,103429],{"class":129},[123,111888,103432],{"class":182},[123,111890,134],{"class":133},[123,111892,186],{"class":129},[123,111894,111895],{"class":238},"\"site not found: ",[123,111897,1030],{"class":182},[123,111899,79821],{"class":133},[123,111901,1080],{"class":182},[123,111903,385],{"class":238},[123,111905,140],{"class":133},[123,111907,111908,111910],{"class":125,"line":7958},[123,111909,4099],{"class":129},[123,111911,111912],{"class":133}," data.site_xpos[site_id].copy()\n",[123,111914,111915],{"class":125,"line":7982},[123,111916,2409],{"emptyLinePlaceholder":50},[123,111918,111919],{"class":125,"line":7987},[123,111920,2409],{"emptyLinePlaceholder":50},[123,111922,111923,111925,111928],{"class":125,"line":7993},[123,111924,31958],{"class":129},[123,111926,111927],{"class":1972}," get_obs",[123,111929,111930],{"class":133},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[123,111932,111933,111936,111938,111941,111943],{"class":125,"line":8020},[123,111934,111935],{"class":133},"    tip ",[123,111937,179],{"class":129},[123,111939,111940],{"class":133}," site_position(model, data, ",[123,111942,111533],{"class":238},[123,111944,140],{"class":133},[123,111946,111947,111950,111952,111954,111957],{"class":125,"line":8025},[123,111948,111949],{"class":133},"    target ",[123,111951,179],{"class":129},[123,111953,111940],{"class":133},[123,111955,111956],{"class":238},"\"target\"",[123,111958,140],{"class":133},[123,111960,111961,111963],{"class":125,"line":8031},[123,111962,4099],{"class":129},[123,111964,111965],{"class":133}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[123,111967,111968],{"class":125,"line":8043},[123,111969,2409],{"emptyLinePlaceholder":50},[123,111971,111972],{"class":125,"line":8055},[123,111973,2409],{"emptyLinePlaceholder":50},[123,111975,111976,111978,111981,111984,111986],{"class":125,"line":8067},[123,111977,31958],{"class":129},[123,111979,111980],{"class":1972}," reward",[123,111982,111983],{"class":133},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[123,111985,173],{"class":182},[123,111987,3748],{"class":133},[123,111989,111990,111992,111994,111996,111998],{"class":125,"line":9726},[123,111991,111935],{"class":133},[123,111993,179],{"class":129},[123,111995,111940],{"class":133},[123,111997,111533],{"class":238},[123,111999,140],{"class":133},[123,112001,112002,112004,112006,112008,112010],{"class":125,"line":9751},[123,112003,111949],{"class":133},[123,112005,179],{"class":129},[123,112007,111940],{"class":133},[123,112009,111956],{"class":238},[123,112011,140],{"class":133},[123,112013,112014,112017,112019,112021,112023],{"class":125,"line":9774},[123,112015,112016],{"class":133},"    dist ",[123,112018,179],{"class":129},[123,112020,111598],{"class":133},[123,112022,666],{"class":129},[123,112024,111603],{"class":133},[123,112026,112027,112030,112032,112035,112037],{"class":125,"line":9798},[123,112028,112029],{"class":133},"    control_cost ",[123,112031,179],{"class":129},[123,112033,112034],{"class":182}," 0.01",[123,112036,6528],{"class":129},[123,112038,112039],{"class":133}," np.sum(np.square(data.ctrl))\n",[123,112041,112042,112044,112046,112048,112050,112052,112054],{"class":125,"line":9803},[123,112043,4099],{"class":129},[123,112045,109794],{"class":182},[123,112047,134],{"class":133},[123,112049,666],{"class":129},[123,112051,111593],{"class":133},[123,112053,666],{"class":129},[123,112055,112056],{"class":133}," control_cost)\n",[123,112058,112059],{"class":125,"line":9808},[123,112060,2409],{"emptyLinePlaceholder":50},[123,112062,112063],{"class":125,"line":9813},[123,112064,2409],{"emptyLinePlaceholder":50},[123,112066,112067,112069,112071,112073,112075],{"class":125,"line":9822},[123,112068,31958],{"class":129},[123,112070,1982],{"class":1972},[123,112072,101395],{"class":133},[123,112074,95683],{"class":182},[123,112076,3748],{"class":133},[123,112078,112079,112081,112083,112085,112087],{"class":125,"line":9827},[123,112080,101404],{"class":133},[123,112082,179],{"class":129},[123,112084,101409],{"class":133},[123,112086,101311],{"class":182},[123,112088,140],{"class":133},[123,112090,112091,112093,112095],{"class":125,"line":9833},[123,112092,101418],{"class":133},[123,112094,179],{"class":129},[123,112096,101423],{"class":133},[123,112098,112099,112101,112103],{"class":125,"line":9854},[123,112100,110150],{"class":133},[123,112102,179],{"class":129},[123,112104,104758],{"class":182},[123,112106,112107],{"class":125,"line":9860},[123,112108,2409],{"emptyLinePlaceholder":50},[123,112110,112111,112113,112115,112117,112119,112121,112123],{"class":125,"line":9874},[123,112112,3210],{"class":129},[123,112114,31627],{"class":133},[123,112116,26054],{"class":129},[123,112118,32454],{"class":182},[123,112120,134],{"class":133},[123,112122,65085],{"class":182},[123,112124,30797],{"class":133},[123,112126,112127],{"class":125,"line":9880},[123,112128,112129],{"class":133},"        mujoco.mj_forward(model, data)\n",[123,112131,112132,112135,112137,112139,112141],{"class":125,"line":9907},[123,112133,112134],{"class":133},"        tip ",[123,112136,179],{"class":129},[123,112138,111940],{"class":133},[123,112140,111533],{"class":238},[123,112142,140],{"class":133},[123,112144,112145,112148,112150,112152,112154],{"class":125,"line":9916},[123,112146,112147],{"class":133},"        target ",[123,112149,179],{"class":129},[123,112151,111940],{"class":133},[123,112153,111956],{"class":238},[123,112155,140],{"class":133},[123,112157,112158,112161,112163,112166,112168],{"class":125,"line":9922},[123,112159,112160],{"class":133},"        error ",[123,112162,179],{"class":129},[123,112164,112165],{"class":133}," target ",[123,112167,666],{"class":129},[123,112169,112170],{"class":133}," tip\n",[123,112172,112173],{"class":125,"line":9930},[123,112174,2409],{"emptyLinePlaceholder":50},[123,112176,112177,112179,112181,112183,112185,112188,112190,112192,112195,112197,112200,112202,112204,112206,112208],{"class":125,"line":9935},[123,112178,106614],{"class":133},[123,112180,325],{"class":182},[123,112182,4452],{"class":133},[123,112184,179],{"class":129},[123,112186,112187],{"class":133}," np.clip(",[123,112189,105257],{"class":182},[123,112191,6528],{"class":129},[123,112193,112194],{"class":133}," error[",[123,112196,211],{"class":182},[123,112198,112199],{"class":133},"], ",[123,112201,666],{"class":129},[123,112203,102400],{"class":182},[123,112205,12445],{"class":133},[123,112207,102400],{"class":182},[123,112209,140],{"class":133},[123,112211,112212,112214,112216,112218,112220,112222,112224,112226,112228,112230,112232,112234,112236,112238,112240],{"class":125,"line":16614},[123,112213,106614],{"class":133},[123,112215,351],{"class":182},[123,112217,4452],{"class":133},[123,112219,179],{"class":129},[123,112221,112187],{"class":133},[123,112223,105257],{"class":182},[123,112225,6528],{"class":129},[123,112227,112194],{"class":133},[123,112229,325],{"class":182},[123,112231,112199],{"class":133},[123,112233,666],{"class":129},[123,112235,102400],{"class":182},[123,112237,12445],{"class":133},[123,112239,102400],{"class":182},[123,112241,140],{"class":133},[123,112243,112244],{"class":125,"line":16620},[123,112245,2409],{"emptyLinePlaceholder":50},[123,112247,112248],{"class":125,"line":16643},[123,112249,101513],{"class":133},[123,112251,112252,112254,112256],{"class":125,"line":16649},[123,112253,110294],{"class":133},[123,112255,9487],{"class":129},[123,112257,112258],{"class":133}," reward(model, data)\n",[123,112260,112261],{"class":125,"line":16672},[123,112262,2409],{"emptyLinePlaceholder":50},[123,112264,112265,112267,112269,112271,112273,112275,112277],{"class":125,"line":16686},[123,112266,2506],{"class":129},[123,112268,31627],{"class":133},[123,112270,462],{"class":129},[123,112272,5764],{"class":182},[123,112274,101556],{"class":129},[123,112276,4102],{"class":182},[123,112278,3748],{"class":133},[123,112280,112281,112284,112286],{"class":125,"line":16706},[123,112282,112283],{"class":133},"            obs ",[123,112285,179],{"class":129},[123,112287,112288],{"class":133}," get_obs(model, data)\n",[123,112290,112291,112293,112295,112297],{"class":125,"line":16712},[123,112292,34661],{"class":182},[123,112294,134],{"class":133},[123,112296,110328],{"class":238},[123,112298,112299],{"class":133},", step)\n",[123,112301,112302,112304,112306,112309,112312,112314],{"class":125,"line":16723},[123,112303,34661],{"class":182},[123,112305,134],{"class":133},[123,112307,112308],{"class":238},"\"  tip:\"",[123,112310,112311],{"class":133},", np.round(tip, ",[123,112313,205],{"class":182},[123,112315,30508],{"class":133},[123,112317,112318,112320,112322,112325,112328,112330],{"class":125,"line":16746},[123,112319,34661],{"class":182},[123,112321,134],{"class":133},[123,112323,112324],{"class":238},"\"  target:\"",[123,112326,112327],{"class":133},", np.round(target, ",[123,112329,205],{"class":182},[123,112331,30508],{"class":133},[123,112333,112334,112336,112338,112341,112344,112346],{"class":125,"line":16768},[123,112335,34661],{"class":182},[123,112337,134],{"class":133},[123,112339,112340],{"class":238},"\"  ctrl:\"",[123,112342,112343],{"class":133},", np.round(data.ctrl.copy(), ",[123,112345,205],{"class":182},[123,112347,30508],{"class":133},[123,112349,112350,112352,112354,112357,112360,112362],{"class":125,"line":16773},[123,112351,34661],{"class":182},[123,112353,134],{"class":133},[123,112355,112356],{"class":238},"\"  obs_dim:\"",[123,112358,112359],{"class":133},", obs.shape[",[123,112361,325],{"class":182},[123,112363,4666],{"class":133},[123,112365,112366],{"class":125,"line":16779},[123,112367,2409],{"emptyLinePlaceholder":50},[123,112369,112370,112372,112374,112376,112378,112380,112382,112384],{"class":125,"line":16793},[123,112371,31310],{"class":182},[123,112373,134],{"class":133},[123,112375,110373],{"class":238},[123,112377,12445],{"class":133},[123,112379,32029],{"class":182},[123,112381,110380],{"class":133},[123,112383,205],{"class":182},[123,112385,30508],{"class":133},[123,112387,112388,112390,112392,112395,112398,112400,112402,112404],{"class":125,"line":16806},[123,112389,31310],{"class":182},[123,112391,134],{"class":133},[123,112393,112394],{"class":238},"\"final tip:\"",[123,112396,112397],{"class":133},", np.round(site_position(model, data, ",[123,112399,111533],{"class":238},[123,112401,110342],{"class":133},[123,112403,205],{"class":182},[123,112405,30508],{"class":133},[123,112407,112408,112410,112412,112415,112417,112419,112421,112423],{"class":125,"line":16811},[123,112409,31310],{"class":182},[123,112411,134],{"class":133},[123,112413,112414],{"class":238},"\"target:\"",[123,112416,112397],{"class":133},[123,112418,111956],{"class":238},[123,112420,110342],{"class":133},[123,112422,205],{"class":182},[123,112424,30508],{"class":133},[123,112426,112427],{"class":125,"line":16825},[123,112428,2409],{"emptyLinePlaceholder":50},[123,112430,112431],{"class":125,"line":16830},[123,112432,2409],{"emptyLinePlaceholder":50},[123,112434,112435,112437,112439,112441,112443],{"class":125,"line":16836},[123,112436,1540],{"class":129},[123,112438,31231],{"class":182},[123,112440,101556],{"class":129},[123,112442,101559],{"class":238},[123,112444,3748],{"class":133},[123,112446,112447],{"class":125,"line":16841},[123,112448,101566],{"class":133},[14,112450,103567],{},[114,112452,112454],{"className":23832,"code":112453,"language":23834,"meta":37,"style":37},"touch ch7_reacher.py\n",[120,112455,112456],{"__ignoreMap":37},[123,112457,112458,112460],{"class":125,"line":126},[123,112459,101280],{"class":1972},[123,112461,112462],{"class":238}," ch7_reacher.py\n",[14,112464,110441],{},[114,112466,112468],{"className":23832,"code":112467,"language":23834,"meta":37,"style":37},"python ch7_reacher.py\n",[120,112469,112470],{"__ignoreMap":37},[123,112471,112472,112474],{"class":125,"line":126},[123,112473,30391],{"class":1972},[123,112475,112462],{"class":238},[94,112477,101569],{"id":101569},[14,112479,112480],{},"读取 site 坐标：",[114,112482,112484],{"className":30389,"code":112483,"language":30391,"meta":37,"style":37},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[120,112485,112486],{"__ignoreMap":37},[123,112487,112488,112490,112492,112494,112496],{"class":125,"line":126},[123,112489,31958],{"class":129},[123,112491,111853],{"class":1972},[123,112493,111856],{"class":133},[123,112495,1309],{"class":182},[123,112497,111861],{"class":133},[14,112499,112500],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112502,110457],{},[114,112504,112506],{"className":30389,"code":112505,"language":30391,"meta":37,"style":37},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[120,112507,112508],{"__ignoreMap":37},[123,112509,112510,112512],{"class":125,"line":126},[123,112511,17056],{"class":129},[123,112513,111965],{"class":133},[14,112515,112516],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112518,109782],{},[114,112520,112522],{"className":30389,"code":112521,"language":30391,"meta":37,"style":37},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[120,112523,112524,112536,112549],{"__ignoreMap":37},[123,112525,112526,112528,112530,112532,112534],{"class":125,"line":126},[123,112527,111593],{"class":133},[123,112529,179],{"class":129},[123,112531,111598],{"class":133},[123,112533,666],{"class":129},[123,112535,111603],{"class":133},[123,112537,112538,112541,112543,112545,112547],{"class":125,"line":45},[123,112539,112540],{"class":133},"control_cost ",[123,112542,179],{"class":129},[123,112544,112034],{"class":182},[123,112546,6528],{"class":129},[123,112548,112039],{"class":133},[123,112550,112551,112553,112555,112557,112559,112561,112563],{"class":125,"line":1189},[123,112552,17056],{"class":129},[123,112554,109794],{"class":182},[123,112556,134],{"class":133},[123,112558,666],{"class":129},[123,112560,111593],{"class":133},[123,112562,666],{"class":129},[123,112564,112056],{"class":133},[14,112566,112567],{},"奖励由两部分组成：",[77,112569,112570,112575],{},[80,112571,112572,112574],{},[120,112573,111620],{},"：末端离目标越远，奖励越低。",[80,112576,112577,112580],{},[120,112578,112579],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112582,112583],{},"简单控制器：",[114,112585,112587],{"className":30389,"code":112586,"language":30391,"meta":37,"style":37},"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",[120,112588,112589,112602,112634],{"__ignoreMap":37},[123,112590,112591,112594,112596,112598,112600],{"class":125,"line":126},[123,112592,112593],{"class":133},"error ",[123,112595,179],{"class":129},[123,112597,112165],{"class":133},[123,112599,666],{"class":129},[123,112601,112170],{"class":133},[123,112603,112604,112606,112608,112610,112612,112614,112616,112618,112620,112622,112624,112626,112628,112630,112632],{"class":125,"line":45},[123,112605,105868],{"class":133},[123,112607,325],{"class":182},[123,112609,4452],{"class":133},[123,112611,179],{"class":129},[123,112613,112187],{"class":133},[123,112615,105257],{"class":182},[123,112617,6528],{"class":129},[123,112619,112194],{"class":133},[123,112621,211],{"class":182},[123,112623,112199],{"class":133},[123,112625,666],{"class":129},[123,112627,102400],{"class":182},[123,112629,12445],{"class":133},[123,112631,102400],{"class":182},[123,112633,140],{"class":133},[123,112635,112636,112638,112640,112642,112644,112646,112648,112650,112652,112654,112656,112658,112660,112662,112664],{"class":125,"line":1189},[123,112637,105868],{"class":133},[123,112639,351],{"class":182},[123,112641,4452],{"class":133},[123,112643,179],{"class":129},[123,112645,112187],{"class":133},[123,112647,105257],{"class":182},[123,112649,6528],{"class":129},[123,112651,112194],{"class":133},[123,112653,325],{"class":182},[123,112655,112199],{"class":133},[123,112657,666],{"class":129},[123,112659,102400],{"class":182},[123,112661,12445],{"class":133},[123,112663,102400],{"class":182},[123,112665,140],{"class":133},[14,112667,112668],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[94,112670,101705],{"id":101705},[114,112672,112673],{"className":30389,"code":112483,"language":30391,"meta":37,"style":37},[120,112674,112675],{"__ignoreMap":37},[123,112676,112677,112679,112681,112683,112685],{"class":125,"line":126},[123,112678,31958],{"class":129},[123,112680,111853],{"class":1972},[123,112682,111856],{"class":133},[123,112684,1309],{"class":182},[123,112686,111861],{"class":133},[14,112688,112689,112690,112692,112693,82550,112695,28396],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[120,112691,79821],{}," 是 site 的名字，比如 ",[120,112694,111533],{},[120,112696,111956],{},[114,112698,112700],{"className":30389,"code":112699,"language":30391,"meta":37,"style":37},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[120,112701,112702],{"__ignoreMap":37},[123,112703,112704,112706,112708],{"class":125,"line":126},[123,112705,103631],{"class":133},[123,112707,179],{"class":129},[123,112709,111870],{"class":133},[14,112711,112712],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[114,112714,112716],{"className":30389,"code":112715,"language":30391,"meta":37,"style":37},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[120,112717,112718,112730],{"__ignoreMap":37},[123,112719,112720,112722,112724,112726,112728],{"class":125,"line":126},[123,112721,1540],{"class":129},[123,112723,103446],{"class":133},[123,112725,1044],{"class":129},[123,112727,4102],{"class":182},[123,112729,3748],{"class":133},[123,112731,112732,112734,112736,112738,112740,112742,112744,112746,112748,112750],{"class":125,"line":45},[123,112733,103892],{"class":129},[123,112735,103432],{"class":182},[123,112737,134],{"class":133},[123,112739,186],{"class":129},[123,112741,111895],{"class":238},[123,112743,1030],{"class":182},[123,112745,79821],{"class":133},[123,112747,1080],{"class":182},[123,112749,385],{"class":238},[123,112751,140],{"class":133},[14,112753,112754,112755,112758,112759,112761],{},"如果 site 没找到，就主动报错。",[120,112756,112757],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[120,112760,79821],{}," 的值放进字符串里。",[114,112763,112765],{"className":30389,"code":112764,"language":30391,"meta":37,"style":37},"return data.site_xpos[site_id].copy()\n",[120,112766,112767],{"__ignoreMap":37},[123,112768,112769,112771],{"class":125,"line":126},[123,112770,17056],{"class":129},[123,112772,111912],{"class":133},[14,112774,112775,112776,112778,112779,112782],{},"返回这个 site 的世界坐标。",[120,112777,103677],{}," 里的每一行都是一个 site 的 ",[120,112780,112781],{},"(x, y, z)"," 坐标。",[114,112784,112786],{"className":30389,"code":112785,"language":30391,"meta":37,"style":37},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[120,112787,112788],{"__ignoreMap":37},[123,112789,112790,112792,112794],{"class":125,"line":126},[123,112791,31958],{"class":129},[123,112793,111927],{"class":1972},[123,112795,111930],{"class":133},[14,112797,112798],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[114,112800,112802],{"className":30389,"code":112801,"language":30391,"meta":37,"style":37},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[120,112803,112804,112816],{"__ignoreMap":37},[123,112805,112806,112808,112810,112812,112814],{"class":125,"line":126},[123,112807,111565],{"class":133},[123,112809,179],{"class":129},[123,112811,111940],{"class":133},[123,112813,111533],{"class":238},[123,112815,140],{"class":133},[123,112817,112818,112820,112822,112824,112826],{"class":125,"line":45},[123,112819,111575],{"class":133},[123,112821,179],{"class":129},[123,112823,111940],{"class":133},[123,112825,111956],{"class":238},[123,112827,140],{"class":133},[14,112829,112830],{},"分别读取末端点和目标点的世界坐标。",[114,112832,112833],{"className":30389,"code":112505,"language":30391,"meta":37,"style":37},[120,112834,112835],{"__ignoreMap":37},[123,112836,112837,112839],{"class":125,"line":126},[123,112838,17056],{"class":129},[123,112840,111965],{"class":133},[14,112842,112843],{},"把四部分拼成一个观测数组：",[114,112845,112848],{"className":112846,"code":112847,"language":5197,"meta":37},[5195],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[120,112849,112847],{"__ignoreMap":37},[114,112851,112853],{"className":30389,"code":112852,"language":30391,"meta":37,"style":37},"dist = np.linalg.norm(tip - target)\n",[120,112854,112855],{"__ignoreMap":37},[123,112856,112857,112859,112861,112863,112865],{"class":125,"line":126},[123,112858,111593],{"class":133},[123,112860,179],{"class":129},[123,112862,111598],{"class":133},[123,112864,666],{"class":129},[123,112866,111603],{"class":133},[14,112868,112869,112870,112873,112874,112877],{},"计算 tip 到 target 的距离。",[120,112871,112872],{},"tip - target"," 得到一个三维向量，",[120,112875,112876],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,112879,14643],{},[114,112881,112884],{"className":112882,"code":112883,"language":5197,"meta":37},[5195],"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",[120,112885,112883],{"__ignoreMap":37},[114,112887,112889],{"className":30389,"code":112888,"language":30391,"meta":37,"style":37},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[120,112890,112891],{"__ignoreMap":37},[123,112892,112893,112895,112897,112899,112901],{"class":125,"line":126},[123,112894,112540],{"class":133},[123,112896,179],{"class":129},[123,112898,112034],{"class":182},[123,112900,6528],{"class":129},[123,112902,112039],{"class":133},[14,112904,112905,112906,112909,112910,112913],{},"计算动作惩罚。",[120,112907,112908],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[120,112911,112912],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[114,112915,112917],{"className":30389,"code":112916,"language":30391,"meta":37,"style":37},"return float(-dist - control_cost)\n",[120,112918,112919],{"__ignoreMap":37},[123,112920,112921,112923,112925,112927,112929,112931,112933],{"class":125,"line":126},[123,112922,17056],{"class":129},[123,112924,109794],{"class":182},[123,112926,134],{"class":133},[123,112928,666],{"class":129},[123,112930,111593],{"class":133},[123,112932,666],{"class":129},[123,112934,112056],{"class":133},[14,112936,112937],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[114,112939,112940],{"className":30389,"code":110800,"language":30391,"meta":37,"style":37},[120,112941,112942],{"__ignoreMap":37},[123,112943,112944,112946,112948],{"class":125,"line":126},[123,112945,110807],{"class":133},[123,112947,179],{"class":129},[123,112949,104758],{"class":182},[14,112951,112952],{},"累计奖励变量，记录整个运行过程的总分。",[114,112954,112956],{"className":30389,"code":112955,"language":30391,"meta":37,"style":37},"for step in range(500):\n",[120,112957,112958],{"__ignoreMap":37},[123,112959,112960,112962,112964,112966,112968,112970,112972],{"class":125,"line":126},[123,112961,3034],{"class":129},[123,112963,31627],{"class":133},[123,112965,26054],{"class":129},[123,112967,32454],{"class":182},[123,112969,134],{"class":133},[123,112971,65085],{"class":182},[123,112973,30797],{"class":133},[14,112975,112976],{},"运行 500 个控制步。",[114,112978,112979],{"className":30389,"code":104540,"language":30391,"meta":37,"style":37},[120,112980,112981],{"__ignoreMap":37},[123,112982,112983],{"class":125,"line":126},[123,112984,104540],{"class":133},[14,112986,112987,112988,101015,112990,112992],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[120,112989,103228],{},[120,112991,103231],{}," 是当前状态下的坐标。",[114,112994,112996],{"className":30389,"code":112995,"language":30391,"meta":37,"style":37},"error = target - tip\n",[120,112997,112998],{"__ignoreMap":37},[123,112999,113000,113002,113004,113006,113008],{"class":125,"line":126},[123,113001,112593],{"class":133},[123,113003,179],{"class":129},[123,113005,112165],{"class":133},[123,113007,666],{"class":129},[123,113009,112170],{"class":133},[14,113011,113012],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[114,113014,113016],{"className":30389,"code":113015,"language":30391,"meta":37,"style":37},"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",[120,113017,113018,113050],{"__ignoreMap":37},[123,113019,113020,113022,113024,113026,113028,113030,113032,113034,113036,113038,113040,113042,113044,113046,113048],{"class":125,"line":126},[123,113021,105868],{"class":133},[123,113023,325],{"class":182},[123,113025,4452],{"class":133},[123,113027,179],{"class":129},[123,113029,112187],{"class":133},[123,113031,105257],{"class":182},[123,113033,6528],{"class":129},[123,113035,112194],{"class":133},[123,113037,211],{"class":182},[123,113039,112199],{"class":133},[123,113041,666],{"class":129},[123,113043,102400],{"class":182},[123,113045,12445],{"class":133},[123,113047,102400],{"class":182},[123,113049,140],{"class":133},[123,113051,113052,113054,113056,113058,113060,113062,113064,113066,113068,113070,113072,113074,113076,113078,113080],{"class":125,"line":45},[123,113053,105868],{"class":133},[123,113055,351],{"class":182},[123,113057,4452],{"class":133},[123,113059,179],{"class":129},[123,113061,112187],{"class":133},[123,113063,105257],{"class":182},[123,113065,6528],{"class":129},[123,113067,112194],{"class":133},[123,113069,325],{"class":182},[123,113071,112199],{"class":133},[123,113073,666],{"class":129},[123,113075,102400],{"class":182},[123,113077,12445],{"class":133},[123,113079,102400],{"class":182},[123,113081,140],{"class":133},[14,113083,113084,113085,113088],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[120,113086,113087],{},"error -> ctrl -> step"," 的流程。",[114,113090,113091],{"className":30389,"code":104502,"language":30391,"meta":37,"style":37},[120,113092,113093],{"__ignoreMap":37},[123,113094,113095],{"class":125,"line":126},[123,113096,104502],{"class":133},[14,113098,113099],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[114,113101,113103],{"className":30389,"code":113102,"language":30391,"meta":37,"style":37},"obs = get_obs(model, data)\n",[120,113104,113105],{"__ignoreMap":37},[123,113106,113107,113109,113111],{"class":125,"line":126},[123,113108,110851],{"class":133},[123,113110,179],{"class":129},[123,113112,112288],{"class":133},[14,113114,113115,113116,113119],{},"读取最新观测。后面打印 ",[120,113117,113118],{},"obs.shape[0]","，用来确认观测维度是 10。",[65,113121,102313],{"id":102312},[14,113123,113124],{},"观测维度为:",[114,113126,113129],{"className":113127,"code":113128,"language":5197,"meta":37},[5195],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[120,113130,113128],{"__ignoreMap":37},[14,113132,113133],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113135,113136],{},"程序每 100 步打印：",[114,113138,113141],{"className":113139,"code":113140,"language":5197,"meta":37},[5195],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[120,113142,113140],{"__ignoreMap":37},[14,113144,113145,113146,113148],{},"如果控制有效，你应该看到最终 ",[120,113147,103228],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[65,113150,102345],{"id":102344},[77,113152,113153,113156,113159,113165,113171,113178,113188],{},[80,113154,113155],{},"修改目标点位置。",[80,113157,113158],{},"重新运行，观察最终 tip 是否变化。",[80,113160,113161,113162,113164],{},"把 gravity 改成 ",[120,113163,102586],{},"，观察控制是否变差。",[80,113166,111178,113167,111182,113169,28396],{},[120,113168,102155],{},[120,113170,211],{},[80,113172,102408,113173,102411,113175,113177],{},[120,113174,110593],{},[120,113176,107304],{},"，观察机械臂是否更难移动。",[80,113179,102408,113180,82541,113182,102411,113184,113187],{},[120,113181,103231],{},[120,113183,104143],{},[120,113185,113186],{},"0.2 0 0.6","，观察 reward 和 final tip。",[80,113189,113190],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[65,113192,102450],{"id":102449},[94,113194,113196],{"id":113195},"site-not-found",[120,113197,113198],{},"site not found",[14,113200,113201,113202,101015,113205,28396],{},"检查 XML 中是否有 ",[120,113203,113204],{},"site name=\"tip\"",[120,113206,113207],{},"site name=\"target\"",[94,113209,113210],{"id":113210},"机械臂完全不动",[14,113212,102520],{},[77,113214,113215,113220,113223,113228],{},[80,113216,113217,113219],{},[120,113218,102155],{}," 是否为 2",[80,113221,113222],{},"actuator 是否引用正确 joint",[80,113224,113225,113227],{},[120,113226,101073],{}," 是否被赋值",[80,113229,113230,113231],{},"是否执行了 ",[120,113232,100682],{},[94,113234,113235],{"id":113235},"控制效果不好",[14,113237,113238],{},"正常。本章重点不是控制器最优，而是任务结构:",[114,113240,113243],{"className":113241,"code":113242,"language":5197,"meta":37},[5195],"obs → action → mj_step → reward → next_obs\n",[120,113244,113242],{"__ignoreMap":37},[94,113246,113248],{"id":113247},"tip-坐标不变化","tip 坐标不变化",[14,113250,102572],{},[77,113252,113253,113258,113266,113275],{},[80,113254,113255,113256,28396],{},"是否每步调用了 ",[120,113257,100682],{},[80,113259,113260,113261,101015,113263,28396],{},"是否写入了 ",[120,113262,106123],{},[120,113264,113265],{},"data.ctrl[1]",[80,113267,113268,113269,346,113272,28396],{},"actuator 是否正确引用 ",[120,113270,113271],{},"joint1",[120,113273,113274],{},"joint2",[80,113276,113277],{},"控制输入是否太小。",[94,113279,113280],{"id":113280},"目标点不会动",[14,113282,113283],{},"本章的 target 是固定 site：",[114,113285,113287],{"className":53078,"code":113286,"language":53080,"meta":37,"style":37},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[120,113288,113289],{"__ignoreMap":37},[123,113290,113291,113293,113295,113297,113299,113301,113303,113305,113308],{"class":125,"line":126},[123,113292,1044],{"class":133},[123,113294,103207],{"class":51311},[123,113296,14930],{"class":1972},[123,113298,179],{"class":133},[123,113300,111956],{"class":238},[123,113302,101103],{"class":1972},[123,113304,179],{"class":133},[123,113306,113307],{"class":238},"\"0.5 0 0.4\"",[123,113309,113310],{"class":133}," ...\u002F>\n",[14,113312,113313,113314,113316],{},"它直接挂在 ",[120,113315,101838],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[94,113318,113319],{"id":113319},"机械臂不像真实机械臂",[14,113321,113322],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[65,113324,102604],{"id":102603},[14,113326,113327],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113329,113330],{},"核心公式：",[114,113332,113335],{"className":113333,"code":113334,"language":5197,"meta":37},[5195],"distance = ||tip - target||\nreward = -distance - action_cost\n",[120,113336,113334],{"__ignoreMap":37},[14,113338,113339],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5136,113341,113342],{},"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":37,"searchDepth":45,"depth":45,"links":113344},[113345,113346,113347,113352,113356,113357,113358,113366],{"id":100643,"depth":45,"text":100644},{"id":100766,"depth":45,"text":100767},{"id":101041,"depth":45,"text":101042,"children":113348},[113349,113350,113351],{"id":111548,"depth":1189,"text":111549},{"id":111624,"depth":1189,"text":111624},{"id":111654,"depth":1189,"text":111655},{"id":101249,"depth":45,"text":101250,"children":113353},[113354,113355],{"id":101569,"depth":1189,"text":101569},{"id":101705,"depth":1189,"text":101705},{"id":102312,"depth":45,"text":102313},{"id":102344,"depth":45,"text":102345},{"id":102449,"depth":45,"text":102450,"children":113359},[113360,113361,113362,113363,113364,113365],{"id":113195,"depth":1189,"text":113198},{"id":113210,"depth":1189,"text":113210},{"id":113235,"depth":1189,"text":113235},{"id":113247,"depth":1189,"text":113248},{"id":113280,"depth":1189,"text":113280},{"id":113319,"depth":1189,"text":113319},{"id":102603,"depth":45,"text":102604},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111352,"description":37},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113373,"title":113374,"body":113375,"description":37,"extension":48,"meta":116837,"navigation":50,"path":116838,"seo":116839,"stem":116840,"__hash__":116841},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113376,"toc":116808},[113377,113380,113382,113385,113388,113413,113416,113422,113425,113431,113433,113435,113459,113461,113479,113481,113524,113526,113553,113555,113558,113610,113613,113619,113628,113631,113669,113672,113711,113714,113722,113729,113732,113738,113740,113794,113801,113846,113849,113853,113869,113879,113881,115142,115144,115156,115158,115169,115171,115174,115195,115198,115201,115234,115240,115243,115276,115279,115282,115323,115328,115342,115345,115358,115363,115386,115388,115403,115413,115428,115435,115455,115470,115488,115491,115508,115516,115532,115538,115570,115583,115615,115625,115660,115674,115720,115734,115776,115787,115800,115806,115839,115842,115869,115879,115919,115929,115946,115953,115971,115974,116015,116028,116043,116046,116069,116072,116084,116087,116106,116111,116132,116135,116150,116153,116187,116199,116214,116217,116242,116245,116264,116267,116299,116302,116326,116332,116362,116369,116382,116385,116387,116389,116395,116398,116401,116413,116416,116418,116472,116474,116478,116484,116493,116496,116503,116505,116528,116531,116535,116537,116555,116561,116563,116596,116599,116605,116609,116612,116632,116637,116641,116648,116668,116673,116677,116680,116700,116703,116789,116793,116796,116802,116805],[10,113378,113374],{"id":113379},"_8gymnasium-风格强化学习接口基础",[65,113381,100644],{"id":100643},[14,113383,113384],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113386,113387],{},"你将实现:",[114,113389,113391],{"className":30389,"code":113390,"language":30391,"meta":37,"style":37},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[120,113392,113393,113403],{"__ignoreMap":37},[123,113394,113395,113398,113400],{"class":125,"line":126},[123,113396,113397],{"class":133},"obs, info ",[123,113399,179],{"class":129},[123,113401,113402],{"class":133}," env.reset()\n",[123,113404,113405,113408,113410],{"class":125,"line":45},[123,113406,113407],{"class":133},"obs, reward, terminated, truncated, info ",[123,113409,179],{"class":129},[123,113411,113412],{"class":133}," env.step(action)\n",[14,113414,113415],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113417,113418,113419,113421],{},"前面章节的代码都是“脚本式”的：在 ",[120,113420,102292],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113423,113424],{},"可以先记住 Gymnasium 环境的核心交互：",[114,113426,113429],{"className":113427,"code":113428,"language":5197,"meta":37},[5195],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[120,113430,113428],{"__ignoreMap":37},[65,113432,100767],{"id":100766},[14,113434,100770],{},[114,113436,113437],{"className":23832,"code":104385,"language":23834,"meta":37,"style":37},[120,113438,113439],{"__ignoreMap":37},[123,113440,113441,113443,113445,113447,113449,113451,113453,113455,113457],{"class":125,"line":126},[123,113442,24587],{"class":1972},[123,113444,26326],{"class":238},[123,113446,23844],{"class":238},[123,113448,26411],{"class":182},[123,113450,104400],{"class":238},[123,113452,100795],{"class":238},[123,113454,102498],{"class":238},[123,113456,100811],{"class":238},[123,113458,104409],{"class":238},[14,113460,102816],{},[114,113462,113464],{"className":23832,"code":113463,"language":23834,"meta":37,"style":37},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[120,113465,113466],{"__ignoreMap":37},[123,113467,113468,113470,113472,113474,113476],{"class":125,"line":126},[123,113469,23841],{"class":1972},[123,113471,23844],{"class":238},[123,113473,100927],{"class":238},[123,113475,107708],{"class":238},[123,113477,113478],{"class":238}," gymnasium\n",[14,113480,102833],{},[114,113482,113484],{"className":23832,"code":113483,"language":23834,"meta":37,"style":37},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[120,113485,113486,113503,113512],{"__ignoreMap":37},[123,113487,113488,113490,113492,113494,113497,113499,113501],{"class":125,"line":126},[123,113489,30341],{"class":1972},[123,113491,29187],{"class":238},[123,113493,25126],{"class":182},[123,113495,113496],{"class":238}," mujoco-gym-api",[123,113498,100972],{"class":238},[123,113500,100975],{"class":182},[123,113502,100978],{"class":182},[123,113504,113505,113507,113509],{"class":125,"line":45},[123,113506,30341],{"class":1972},[123,113508,100985],{"class":238},[123,113510,113511],{"class":238}," mujoco-gym-api\n",[123,113513,113514,113516,113518,113520,113522],{"class":125,"line":1189},[123,113515,23841],{"class":1972},[123,113517,23844],{"class":238},[123,113519,100927],{"class":238},[123,113521,107708],{"class":238},[123,113523,113478],{"class":238},[14,113525,101001],{},[77,113527,113528,113538,113541,113547],{},[80,113529,113530,113531,113534,113535,28396],{},"本章使用 ",[120,113532,113533],{},"gymnasium","，不是旧版 ",[120,113536,113537],{},"gym",[80,113539,113540],{},"Gymnasium API 与旧 Gym API 有差异。",[80,113542,113543,113544,28396],{},"旧 Gym 常见返回值是 4 个: ",[120,113545,113546],{},"obs, reward, done, info",[80,113548,113549,113550,28396],{},"Gymnasium 返回值是 5 个: ",[120,113551,113552],{},"obs, reward, terminated, truncated, info",[65,113554,101042],{"id":101041},[14,113556,113557],{},"强化学习环境接口包含:",[271,113559,113560,113569],{},[274,113561,113562],{},[277,113563,113564,113567],{},[280,113565,113566],{"align":23746},"方法",[280,113568,102693],{"align":23746},[318,113570,113571,113581,113591,113601],{},[277,113572,113573,113578],{},[323,113574,113575],{"align":23746},[120,113576,113577],{},"reset()",[323,113579,113580],{"align":23746},"重置环境",[277,113582,113583,113588],{},[323,113584,113585],{"align":23746},[120,113586,113587],{},"step(action)",[323,113589,113590],{"align":23746},"执行动作",[277,113592,113593,113598],{},[323,113594,113595],{"align":23746},[120,113596,113597],{},"observation_space",[323,113599,113600],{"align":23746},"观测空间",[277,113602,113603,113608],{},[323,113604,113605],{"align":23746},[120,113606,113607],{},"action_space",[323,113609,23664],{"align":23746},[14,113611,113612],{},"一个最小环境需要完成:",[114,113614,113617],{"className":113615,"code":113616,"language":5197,"meta":37},[5195],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[120,113618,113616],{"__ignoreMap":37},[94,113620,113622,101015,113625,104635],{"id":113621},"terminated-和-truncated-的区别",[120,113623,113624],{},"terminated",[120,113626,113627],{},"truncated",[14,113629,113630],{},"Gymnasium 把“结束”拆成两个概念：",[271,113632,113633,113643],{},[274,113634,113635],{},[277,113636,113637,113639,113641],{},[280,113638,104571],{"align":23746},[280,113640,100697],{"align":23746},[280,113642,21197],{"align":23746},[318,113644,113645,113657],{},[277,113646,113647,113651,113654],{},[323,113648,113649],{"align":23746},[120,113650,113624],{},[323,113652,113653],{"align":23746},"任务自然结束",[323,113655,113656],{"align":23746},"机械臂到达目标、机器人摔倒",[277,113658,113659,113663,113666],{},[323,113660,113661],{"align":23746},[120,113662,113627],{},[323,113664,113665],{"align":23746},"因外部限制截断",[323,113667,113668],{"align":23746},"达到最大步数、时间限制",[14,113670,113671],{},"本章中：",[114,113673,113675],{"className":30389,"code":113674,"language":30391,"meta":37,"style":37},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[120,113676,113677,113692],{"__ignoreMap":37},[123,113678,113679,113682,113684,113687,113689],{"class":125,"line":126},[123,113680,113681],{"class":133},"terminated ",[123,113683,179],{"class":129},[123,113685,113686],{"class":133}," dist ",[123,113688,1044],{"class":129},[123,113690,113691],{"class":182}," 0.05\n",[123,113693,113694,113697,113699,113701,113704,113706,113708],{"class":125,"line":45},[123,113695,113696],{"class":133},"truncated ",[123,113698,179],{"class":129},[123,113700,38884],{"class":182},[123,113702,113703],{"class":133},".steps ",[123,113705,1719],{"class":129},[123,113707,38884],{"class":182},[123,113709,113710],{"class":133},".max_steps\n",[14,113712,113713],{},"也就是：",[77,113715,113716,113719],{},[80,113717,113718],{},"末端距离目标小于 0.05，任务成功结束。",[80,113720,113721],{},"步数超过上限，episode 被截断。",[94,113723,113725,101015,113727],{"id":113724},"observation_space-和-action_space",[120,113726,113597],{},[120,113728,113607],{},[14,113730,113731],{},"这两个对象告诉算法：",[114,113733,113736],{"className":113734,"code":113735,"language":5197,"meta":37},[5195],"观测长什么样\n动作允许多大\n",[120,113737,113735],{"__ignoreMap":37},[14,113739,14643],{},[114,113741,113743],{"className":30389,"code":113742,"language":30391,"meta":37,"style":37},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[120,113744,113745],{"__ignoreMap":37},[123,113746,113747,113749,113752,113754,113757,113760,113763,113765,113767,113770,113772,113774,113776,113778,113780,113782,113784,113787,113789,113791],{"class":125,"line":126},[123,113748,30834],{"class":182},[123,113750,113751],{"class":133},".action_space ",[123,113753,179],{"class":129},[123,113755,113756],{"class":133}," spaces.Box(",[123,113758,113759],{"class":5226},"low",[123,113761,113762],{"class":129},"=-",[123,113764,102400],{"class":182},[123,113766,12445],{"class":133},[123,113768,113769],{"class":5226},"high",[123,113771,179],{"class":129},[123,113773,102400],{"class":182},[123,113775,12445],{"class":133},[123,113777,95960],{"class":5226},[123,113779,179],{"class":129},[123,113781,134],{"class":133},[123,113783,211],{"class":182},[123,113785,113786],{"class":133},",), ",[123,113788,93511],{"class":5226},[123,113790,179],{"class":129},[123,113792,113793],{"class":133},"np.float32)\n",[14,113795,113796,113797,113800],{},"表示动作是 2 维数组，每个值都在 ",[120,113798,113799],{},"[-1, 1]"," 范围内。",[114,113802,113804],{"className":30389,"code":113803,"language":30391,"meta":37,"style":37},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[120,113805,113806],{"__ignoreMap":37},[123,113807,113808,113810,113813,113815,113817,113819,113821,113824,113826,113828,113830,113832,113834,113836,113838,113840,113842,113844],{"class":125,"line":126},[123,113809,30834],{"class":182},[123,113811,113812],{"class":133},".observation_space ",[123,113814,179],{"class":129},[123,113816,113756],{"class":133},[123,113818,113759],{"class":5226},[123,113820,113762],{"class":129},[123,113822,113823],{"class":133},"np.inf, ",[123,113825,113769],{"class":5226},[123,113827,179],{"class":129},[123,113829,113823],{"class":133},[123,113831,95960],{"class":5226},[123,113833,179],{"class":129},[123,113835,134],{"class":133},[123,113837,580],{"class":182},[123,113839,113786],{"class":133},[123,113841,93511],{"class":5226},[123,113843,179],{"class":129},[123,113845,113793],{"class":133},[14,113847,113848],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[94,113850,113852],{"id":113851},"frame_skip-是什么","frame_skip 是什么",[114,113854,113856],{"className":30389,"code":113855,"language":30391,"meta":37,"style":37},"self.frame_skip = 5\n",[120,113857,113858],{"__ignoreMap":37},[123,113859,113860,113862,113865,113867],{"class":125,"line":126},[123,113861,30834],{"class":182},[123,113863,113864],{"class":133},".frame_skip ",[123,113866,179],{"class":129},[123,113868,54438],{"class":182},[14,113870,113871,113872,113875,113876,113878],{},"表示外部调用一次 ",[120,113873,113874],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[120,113877,101212],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[65,113880,101250],{"id":101249},[114,113882,113884],{"className":30389,"code":113883,"language":30391,"meta":37,"style":37},"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",[120,113885,113886,113898,113904,113914,113925,113929,113933,113941,113946,113950,113954,113958,113962,113966,113970,113974,113979,113983,113987,113991,113996,114000,114004,114008,114012,114016,114020,114024,114028,114032,114036,114040,114044,114048,114066,114081,114085,114098,114108,114123,114140,114144,114165,114184,114209,114223,114227,114237,114249,114259,114263,114305,114343,114347,114357,114373,114388,114407,114414,114418,114431,114446,114461,114474,114493,114509,114513,114554,114569,114584,114588,114627,114638,114651,114655,114665,114674,114678,114688,114703,114721,114725,114736,114753,114766,114770,114780,114784,114795,114806,114810,114824,114838,114854,114858,114871,114888,114903,114910,114914,114918,114930,114940,114958,114970,114982,114986,114994,115010,115019,115028,115036,115078,115091,115096,115100,115118,115122,115126,115138],{"__ignoreMap":37},[123,113887,113888,113890,113893,113895],{"class":125,"line":126},[123,113889,30403],{"class":129},[123,113891,113892],{"class":133}," gymnasium ",[123,113894,31394],{"class":129},[123,113896,113897],{"class":133}," gym\n",[123,113899,113900,113902],{"class":125,"line":45},[123,113901,30403],{"class":129},[123,113903,101298],{"class":133},[123,113905,113906,113908,113910,113912],{"class":125,"line":1189},[123,113907,30403],{"class":129},[123,113909,31391],{"class":133},[123,113911,31394],{"class":129},[123,113913,31397],{"class":133},[123,113915,113916,113918,113920,113922],{"class":125,"line":1204},[123,113917,30748],{"class":129},[123,113919,113892],{"class":133},[123,113921,30403],{"class":129},[123,113923,113924],{"class":133}," spaces\n",[123,113926,113927],{"class":125,"line":1210},[123,113928,2409],{"emptyLinePlaceholder":50},[123,113930,113931],{"class":125,"line":1224},[123,113932,2409],{"emptyLinePlaceholder":50},[123,113934,113935,113937,113939],{"class":125,"line":1230},[123,113936,101311],{"class":182},[123,113938,13574],{"class":129},[123,113940,101316],{"class":238},[123,113942,113943],{"class":125,"line":1321},[123,113944,113945],{"class":238},"\u003Cmujoco model=\"gym_reacher\">\n",[123,113947,113948],{"class":125,"line":1327},[123,113949,111735],{"class":238},[123,113951,113952],{"class":125,"line":1339},[123,113953,2409],{"emptyLinePlaceholder":50},[123,113955,113956],{"class":125,"line":1621},[123,113957,101335],{"class":238},[123,113959,113960],{"class":125,"line":1626},[123,113961,111753],{"class":238},[123,113963,113964],{"class":125,"line":1632},[123,113965,2409],{"emptyLinePlaceholder":50},[123,113967,113968],{"class":125,"line":1637},[123,113969,111762],{"class":238},[123,113971,113972],{"class":125,"line":1651},[123,113973,111767],{"class":238},[123,113975,113976],{"class":125,"line":1656},[123,113977,113978],{"class":238},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[123,113980,113981],{"class":125,"line":1662},[123,113982,2409],{"emptyLinePlaceholder":50},[123,113984,113985],{"class":125,"line":1683},[123,113986,111781],{"class":238},[123,113988,113989],{"class":125,"line":1688},[123,113990,111786],{"class":238},[123,113992,113993],{"class":125,"line":1702},[123,113994,113995],{"class":238},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[123,113997,113998],{"class":125,"line":1707},[123,113999,111796],{"class":238},[123,114001,114002],{"class":125,"line":1736},[123,114003,106435],{"class":238},[123,114005,114006],{"class":125,"line":1741},[123,114007,101364],{"class":238},[123,114009,114010],{"class":125,"line":1758},[123,114011,101369],{"class":238},[123,114013,114014],{"class":125,"line":1763},[123,114015,2409],{"emptyLinePlaceholder":50},[123,114017,114018],{"class":125,"line":1768},[123,114019,106452],{"class":238},[123,114021,114022],{"class":125,"line":1773},[123,114023,111821],{"class":238},[123,114025,114026],{"class":125,"line":1787},[123,114027,111826],{"class":238},[123,114029,114030],{"class":125,"line":1792},[123,114031,106462],{"class":238},[123,114033,114034],{"class":125,"line":2586},[123,114035,101374],{"class":238},[123,114037,114038],{"class":125,"line":2600},[123,114039,95695],{"class":238},[123,114041,114042],{"class":125,"line":2608},[123,114043,2409],{"emptyLinePlaceholder":50},[123,114045,114046],{"class":125,"line":2613},[123,114047,2409],{"emptyLinePlaceholder":50},[123,114049,114050,114052,114055,114057,114059,114061,114064],{"class":125,"line":2619},[123,114051,14704],{"class":129},[123,114053,114054],{"class":1972}," ReacherEnv",[123,114056,134],{"class":133},[123,114058,113537],{"class":1972},[123,114060,692],{"class":133},[123,114062,114063],{"class":1972},"Env",[123,114065,30797],{"class":133},[123,114067,114068,114071,114073,114075,114078],{"class":125,"line":2625},[123,114069,114070],{"class":133},"    metadata ",[123,114072,179],{"class":129},[123,114074,4457],{"class":133},[123,114076,114077],{"class":238},"\"render_modes\"",[123,114079,114080],{"class":133},": []}\n",[123,114082,114083],{"class":125,"line":2630},[123,114084,2409],{"emptyLinePlaceholder":50},[123,114086,114087,114089,114091,114094,114096],{"class":125,"line":7958},[123,114088,30812],{"class":129},[123,114090,30815],{"class":182},[123,114092,114093],{"class":133},"(self) -> ",[123,114095,95683],{"class":182},[123,114097,3748],{"class":133},[123,114099,114100,114102,114104,114106],{"class":125,"line":7982},[123,114101,30828],{"class":182},[123,114103,17271],{"class":133},[123,114105,30840],{"class":182},[123,114107,1985],{"class":133},[123,114109,114110,114112,114115,114117,114119,114121],{"class":125,"line":7987},[123,114111,30856],{"class":182},[123,114113,114114],{"class":133},".model ",[123,114116,179],{"class":129},[123,114118,101409],{"class":133},[123,114120,101311],{"class":182},[123,114122,140],{"class":133},[123,114124,114125,114127,114130,114132,114135,114137],{"class":125,"line":7993},[123,114126,30856],{"class":182},[123,114128,114129],{"class":133},".data ",[123,114131,179],{"class":129},[123,114133,114134],{"class":133}," mujoco.MjData(",[123,114136,30834],{"class":182},[123,114138,114139],{"class":133},".model)\n",[123,114141,114142],{"class":125,"line":8020},[123,114143,2409],{"emptyLinePlaceholder":50},[123,114145,114146,114148,114151,114153,114156,114158,114161,114163],{"class":125,"line":8025},[123,114147,30856],{"class":182},[123,114149,114150],{"class":133},".tip_site_id ",[123,114152,179],{"class":129},[123,114154,114155],{"class":133}," mujoco.mj_name2id(",[123,114157,30834],{"class":182},[123,114159,114160],{"class":133},".model, mujoco.mjtObj.mjOBJ_SITE, ",[123,114162,111533],{"class":238},[123,114164,140],{"class":133},[123,114166,114167,114169,114172,114174,114176,114178,114180,114182],{"class":125,"line":8031},[123,114168,30856],{"class":182},[123,114170,114171],{"class":133},".target_site_id ",[123,114173,179],{"class":129},[123,114175,114155],{"class":133},[123,114177,30834],{"class":182},[123,114179,114160],{"class":133},[123,114181,111956],{"class":238},[123,114183,140],{"class":133},[123,114185,114186,114188,114190,114192,114194,114196,114199,114201,114203,114205,114207],{"class":125,"line":8043},[123,114187,2506],{"class":129},[123,114189,38884],{"class":182},[123,114191,114150],{"class":133},[123,114193,1044],{"class":129},[123,114195,4102],{"class":182},[123,114197,114198],{"class":129}," or",[123,114200,38884],{"class":182},[123,114202,114171],{"class":133},[123,114204,1044],{"class":129},[123,114206,4102],{"class":182},[123,114208,3748],{"class":133},[123,114210,114211,114214,114216,114218,114221],{"class":125,"line":8055},[123,114212,114213],{"class":129},"            raise",[123,114215,103432],{"class":182},[123,114217,134],{"class":133},[123,114219,114220],{"class":238},"\"required sites not found\"",[123,114222,140],{"class":133},[123,114224,114225],{"class":125,"line":8067},[123,114226,2409],{"emptyLinePlaceholder":50},[123,114228,114229,114231,114233,114235],{"class":125,"line":9726},[123,114230,30856],{"class":182},[123,114232,113864],{"class":133},[123,114234,179],{"class":129},[123,114236,54438],{"class":182},[123,114238,114239,114241,114244,114246],{"class":125,"line":9751},[123,114240,30856],{"class":182},[123,114242,114243],{"class":133},".max_steps ",[123,114245,179],{"class":129},[123,114247,114248],{"class":182}," 200\n",[123,114250,114251,114253,114255,114257],{"class":125,"line":9774},[123,114252,30856],{"class":182},[123,114254,113703],{"class":133},[123,114256,179],{"class":129},[123,114258,47344],{"class":182},[123,114260,114261],{"class":125,"line":9798},[123,114262,2409],{"emptyLinePlaceholder":50},[123,114264,114265,114267,114269,114271,114273,114275,114277,114279,114281,114283,114285,114287,114289,114291,114293,114295,114297,114299,114301,114303],{"class":125,"line":9803},[123,114266,30856],{"class":182},[123,114268,113751],{"class":133},[123,114270,179],{"class":129},[123,114272,113756],{"class":133},[123,114274,113759],{"class":5226},[123,114276,113762],{"class":129},[123,114278,102400],{"class":182},[123,114280,12445],{"class":133},[123,114282,113769],{"class":5226},[123,114284,179],{"class":129},[123,114286,102400],{"class":182},[123,114288,12445],{"class":133},[123,114290,95960],{"class":5226},[123,114292,179],{"class":129},[123,114294,134],{"class":133},[123,114296,211],{"class":182},[123,114298,113786],{"class":133},[123,114300,93511],{"class":5226},[123,114302,179],{"class":129},[123,114304,113793],{"class":133},[123,114306,114307,114309,114311,114313,114315,114317,114319,114321,114323,114325,114327,114329,114331,114333,114335,114337,114339,114341],{"class":125,"line":9808},[123,114308,30856],{"class":182},[123,114310,113812],{"class":133},[123,114312,179],{"class":129},[123,114314,113756],{"class":133},[123,114316,113759],{"class":5226},[123,114318,113762],{"class":129},[123,114320,113823],{"class":133},[123,114322,113769],{"class":5226},[123,114324,179],{"class":129},[123,114326,113823],{"class":133},[123,114328,95960],{"class":5226},[123,114330,179],{"class":129},[123,114332,134],{"class":133},[123,114334,580],{"class":182},[123,114336,113786],{"class":133},[123,114338,93511],{"class":5226},[123,114340,179],{"class":129},[123,114342,113793],{"class":133},[123,114344,114345],{"class":125,"line":9813},[123,114346,2409],{"emptyLinePlaceholder":50},[123,114348,114349,114351,114354],{"class":125,"line":9822},[123,114350,30812],{"class":129},[123,114352,114353],{"class":1972}," _get_obs",[123,114355,114356],{"class":133},"(self) -> np.ndarray:\n",[123,114358,114359,114361,114363,114365,114368,114370],{"class":125,"line":9827},[123,114360,112134],{"class":133},[123,114362,179],{"class":129},[123,114364,38884],{"class":182},[123,114366,114367],{"class":133},".data.site_xpos[",[123,114369,30834],{"class":182},[123,114371,114372],{"class":133},".tip_site_id].copy()\n",[123,114374,114375,114377,114379,114381,114383,114385],{"class":125,"line":9833},[123,114376,112147],{"class":133},[123,114378,179],{"class":129},[123,114380,38884],{"class":182},[123,114382,114367],{"class":133},[123,114384,30834],{"class":182},[123,114386,114387],{"class":133},".target_site_id].copy()\n",[123,114389,114390,114392,114394,114397,114399,114402,114404],{"class":125,"line":9854},[123,114391,110179],{"class":133},[123,114393,179],{"class":129},[123,114395,114396],{"class":133}," np.concatenate([",[123,114398,30834],{"class":182},[123,114400,114401],{"class":133},".data.qpos.copy(), ",[123,114403,30834],{"class":182},[123,114405,114406],{"class":133},".data.qvel.copy(), tip, target])\n",[123,114408,114409,114411],{"class":125,"line":9860},[123,114410,14762],{"class":129},[123,114412,114413],{"class":133}," obs.astype(np.float32)\n",[123,114415,114416],{"class":125,"line":9874},[123,114417,2409],{"emptyLinePlaceholder":50},[123,114419,114420,114422,114425,114427,114429],{"class":125,"line":9880},[123,114421,30812],{"class":129},[123,114423,114424],{"class":1972}," _get_reward",[123,114426,114093],{"class":133},[123,114428,173],{"class":182},[123,114430,3748],{"class":133},[123,114432,114433,114435,114437,114439,114441,114443],{"class":125,"line":9907},[123,114434,112134],{"class":133},[123,114436,179],{"class":129},[123,114438,38884],{"class":182},[123,114440,114367],{"class":133},[123,114442,30834],{"class":182},[123,114444,114445],{"class":133},".tip_site_id]\n",[123,114447,114448,114450,114452,114454,114456,114458],{"class":125,"line":9916},[123,114449,112147],{"class":133},[123,114451,179],{"class":129},[123,114453,38884],{"class":182},[123,114455,114367],{"class":133},[123,114457,30834],{"class":182},[123,114459,114460],{"class":133},".target_site_id]\n",[123,114462,114463,114466,114468,114470,114472],{"class":125,"line":9922},[123,114464,114465],{"class":133},"        dist ",[123,114467,179],{"class":129},[123,114469,111598],{"class":133},[123,114471,666],{"class":129},[123,114473,111603],{"class":133},[123,114475,114476,114479,114481,114483,114485,114488,114490],{"class":125,"line":9930},[123,114477,114478],{"class":133},"        control_cost ",[123,114480,179],{"class":129},[123,114482,112034],{"class":182},[123,114484,6528],{"class":129},[123,114486,114487],{"class":133}," np.sum(np.square(",[123,114489,30834],{"class":182},[123,114491,114492],{"class":133},".data.ctrl))\n",[123,114494,114495,114497,114499,114501,114503,114505,114507],{"class":125,"line":9935},[123,114496,14762],{"class":129},[123,114498,109794],{"class":182},[123,114500,134],{"class":133},[123,114502,666],{"class":129},[123,114504,111593],{"class":133},[123,114506,666],{"class":129},[123,114508,112056],{"class":133},[123,114510,114511],{"class":125,"line":16614},[123,114512,2409],{"emptyLinePlaceholder":50},[123,114514,114515,114517,114520,114523,114525,114528,114530,114532,114534,114536,114538,114541,114544,114546,114548,114550,114552],{"class":125,"line":16620},[123,114516,30812],{"class":129},[123,114518,114519],{"class":1972}," reset",[123,114521,114522],{"class":133},"(self, ",[123,114524,589],{"class":129},[123,114526,114527],{"class":133},", seed: ",[123,114529,137],{"class":182},[123,114531,25120],{"class":129},[123,114533,38944],{"class":182},[123,114535,13574],{"class":129},[123,114537,38944],{"class":182},[123,114539,114540],{"class":133},", options: ",[123,114542,114543],{"class":182},"dict",[123,114545,25120],{"class":129},[123,114547,38944],{"class":182},[123,114549,13574],{"class":129},[123,114551,38944],{"class":182},[123,114553,30797],{"class":133},[123,114555,114556,114558,114561,114564,114566],{"class":125,"line":16643},[123,114557,30828],{"class":182},[123,114559,114560],{"class":133},"().reset(",[123,114562,114563],{"class":5226},"seed",[123,114565,179],{"class":129},[123,114567,114568],{"class":133},"seed)\n",[123,114570,114571,114574,114576,114579,114581],{"class":125,"line":16649},[123,114572,114573],{"class":133},"        mujoco.mj_resetData(",[123,114575,30834],{"class":182},[123,114577,114578],{"class":133},".model, ",[123,114580,30834],{"class":182},[123,114582,114583],{"class":133},".data)\n",[123,114585,114586],{"class":125,"line":16672},[123,114587,2409],{"emptyLinePlaceholder":50},[123,114589,114590,114592,114595,114597,114599,114602,114604,114606,114608,114610,114612,114614,114616,114618,114620,114622,114624],{"class":125,"line":16686},[123,114591,30856],{"class":182},[123,114593,114594],{"class":133},".data.qpos[:] ",[123,114596,179],{"class":129},[123,114598,38884],{"class":182},[123,114600,114601],{"class":133},".np_random.uniform(",[123,114603,113759],{"class":5226},[123,114605,113762],{"class":129},[123,114607,86221],{"class":182},[123,114609,12445],{"class":133},[123,114611,113769],{"class":5226},[123,114613,179],{"class":129},[123,114615,86221],{"class":182},[123,114617,12445],{"class":133},[123,114619,31507],{"class":5226},[123,114621,179],{"class":129},[123,114623,30834],{"class":182},[123,114625,114626],{"class":133},".model.nq)\n",[123,114628,114629,114631,114634,114636],{"class":125,"line":16706},[123,114630,30856],{"class":182},[123,114632,114633],{"class":133},".data.qvel[:] ",[123,114635,179],{"class":129},[123,114637,104758],{"class":182},[123,114639,114640,114643,114645,114647,114649],{"class":125,"line":16712},[123,114641,114642],{"class":133},"        mujoco.mj_forward(",[123,114644,30834],{"class":182},[123,114646,114578],{"class":133},[123,114648,30834],{"class":182},[123,114650,114583],{"class":133},[123,114652,114653],{"class":125,"line":16723},[123,114654,2409],{"emptyLinePlaceholder":50},[123,114656,114657,114659,114661,114663],{"class":125,"line":16746},[123,114658,30856],{"class":182},[123,114660,113703],{"class":133},[123,114662,179],{"class":129},[123,114664,47344],{"class":182},[123,114666,114667,114669,114671],{"class":125,"line":16768},[123,114668,14762],{"class":129},[123,114670,38884],{"class":182},[123,114672,114673],{"class":133},"._get_obs(), {}\n",[123,114675,114676],{"class":125,"line":16773},[123,114677,2409],{"emptyLinePlaceholder":50},[123,114679,114680,114682,114685],{"class":125,"line":16779},[123,114681,30812],{"class":129},[123,114683,114684],{"class":1972}," step",[123,114686,114687],{"class":133},"(self, action):\n",[123,114689,114690,114692,114694,114697,114699,114701],{"class":125,"line":16793},[123,114691,110219],{"class":133},[123,114693,179],{"class":129},[123,114695,114696],{"class":133}," np.asarray(action, ",[123,114698,93511],{"class":5226},[123,114700,179],{"class":129},[123,114702,113793],{"class":133},[123,114704,114705,114707,114709,114711,114713,114716,114718],{"class":125,"line":16806},[123,114706,110219],{"class":133},[123,114708,179],{"class":129},[123,114710,107444],{"class":133},[123,114712,30834],{"class":182},[123,114714,114715],{"class":133},".action_space.low, ",[123,114717,30834],{"class":182},[123,114719,114720],{"class":133},".action_space.high)\n",[123,114722,114723],{"class":125,"line":16811},[123,114724,2409],{"emptyLinePlaceholder":50},[123,114726,114727,114729,114732,114734],{"class":125,"line":16825},[123,114728,30856],{"class":182},[123,114730,114731],{"class":133},".data.ctrl[:] ",[123,114733,179],{"class":129},[123,114735,107467],{"class":133},[123,114737,114738,114740,114742,114744,114746,114748,114750],{"class":125,"line":16830},[123,114739,3412],{"class":129},[123,114741,101498],{"class":133},[123,114743,26054],{"class":129},[123,114745,32454],{"class":182},[123,114747,134],{"class":133},[123,114749,30834],{"class":182},[123,114751,114752],{"class":133},".frame_skip):\n",[123,114754,114755,114758,114760,114762,114764],{"class":125,"line":16836},[123,114756,114757],{"class":133},"            mujoco.mj_step(",[123,114759,30834],{"class":182},[123,114761,114578],{"class":133},[123,114763,30834],{"class":182},[123,114765,114583],{"class":133},[123,114767,114768],{"class":125,"line":16841},[123,114769,2409],{"emptyLinePlaceholder":50},[123,114771,114772,114774,114776,114778],{"class":125,"line":16855},[123,114773,30856],{"class":182},[123,114775,113703],{"class":133},[123,114777,9487],{"class":129},[123,114779,55710],{"class":182},[123,114781,114782],{"class":125,"line":16860},[123,114783,2409],{"emptyLinePlaceholder":50},[123,114785,114786,114788,114790,114792],{"class":125,"line":16865},[123,114787,110179],{"class":133},[123,114789,179],{"class":129},[123,114791,38884],{"class":182},[123,114793,114794],{"class":133},"._get_obs()\n",[123,114796,114797,114799,114801,114803],{"class":125,"line":16879},[123,114798,110284],{"class":133},[123,114800,179],{"class":129},[123,114802,38884],{"class":182},[123,114804,114805],{"class":133},"._get_reward()\n",[123,114807,114808],{"class":125,"line":16891},[123,114809,2409],{"emptyLinePlaceholder":50},[123,114811,114812,114814,114816,114818,114820,114822],{"class":125,"line":16896},[123,114813,112134],{"class":133},[123,114815,179],{"class":129},[123,114817,38884],{"class":182},[123,114819,114367],{"class":133},[123,114821,30834],{"class":182},[123,114823,114445],{"class":133},[123,114825,114826,114828,114830,114832,114834,114836],{"class":125,"line":16909},[123,114827,112147],{"class":133},[123,114829,179],{"class":129},[123,114831,38884],{"class":182},[123,114833,114367],{"class":133},[123,114835,30834],{"class":182},[123,114837,114460],{"class":133},[123,114839,114840,114842,114844,114846,114849,114851],{"class":125,"line":16914},[123,114841,114465],{"class":133},[123,114843,179],{"class":129},[123,114845,109794],{"class":182},[123,114847,114848],{"class":133},"(np.linalg.norm(tip ",[123,114850,666],{"class":129},[123,114852,114853],{"class":133}," target))\n",[123,114855,114856],{"class":125,"line":16919},[123,114857,2409],{"emptyLinePlaceholder":50},[123,114859,114860,114863,114865,114867,114869],{"class":125,"line":16924},[123,114861,114862],{"class":133},"        terminated ",[123,114864,179],{"class":129},[123,114866,113686],{"class":133},[123,114868,1044],{"class":129},[123,114870,113691],{"class":182},[123,114872,114873,114876,114878,114880,114882,114884,114886],{"class":125,"line":16937},[123,114874,114875],{"class":133},"        truncated ",[123,114877,179],{"class":129},[123,114879,38884],{"class":182},[123,114881,113703],{"class":133},[123,114883,1719],{"class":129},[123,114885,38884],{"class":182},[123,114887,113710],{"class":133},[123,114889,114890,114893,114895,114897,114900],{"class":125,"line":16942},[123,114891,114892],{"class":133},"        info ",[123,114894,179],{"class":129},[123,114896,4457],{"class":133},[123,114898,114899],{"class":238},"\"distance\"",[123,114901,114902],{"class":133},": dist}\n",[123,114904,114905,114907],{"class":125,"line":32644},[123,114906,14762],{"class":129},[123,114908,114909],{"class":133}," obs, reward, terminated, truncated, info\n",[123,114911,114912],{"class":125,"line":32650},[123,114913,2409],{"emptyLinePlaceholder":50},[123,114915,114916],{"class":125,"line":32656},[123,114917,2409],{"emptyLinePlaceholder":50},[123,114919,114920,114922,114924,114926,114928],{"class":125,"line":32662},[123,114921,31958],{"class":129},[123,114923,1982],{"class":1972},[123,114925,101395],{"class":133},[123,114927,95683],{"class":182},[123,114929,3748],{"class":133},[123,114931,114932,114935,114937],{"class":125,"line":32668},[123,114933,114934],{"class":133},"    env ",[123,114936,179],{"class":129},[123,114938,114939],{"class":133}," ReacherEnv()\n",[123,114941,114942,114945,114947,114950,114952,114954,114956],{"class":125,"line":32679},[123,114943,114944],{"class":133},"    obs, info ",[123,114946,179],{"class":129},[123,114948,114949],{"class":133}," env.reset(",[123,114951,114563],{"class":5226},[123,114953,179],{"class":129},[123,114955,325],{"class":182},[123,114957,140],{"class":133},[123,114959,114960,114962,114964,114967],{"class":125,"line":32685},[123,114961,31310],{"class":182},[123,114963,134],{"class":133},[123,114965,114966],{"class":238},"\"initial obs shape:\"",[123,114968,114969],{"class":133},", obs.shape)\n",[123,114971,114972,114974,114976,114979],{"class":125,"line":32705},[123,114973,31310],{"class":182},[123,114975,134],{"class":133},[123,114977,114978],{"class":238},"\"initial info:\"",[123,114980,114981],{"class":133},", info)\n",[123,114983,114984],{"class":125,"line":32711},[123,114985,2409],{"emptyLinePlaceholder":50},[123,114987,114988,114990,114992],{"class":125,"line":32722},[123,114989,110150],{"class":133},[123,114991,179],{"class":129},[123,114993,104758],{"class":182},[123,114995,114996,114998,115000,115002,115004,115006,115008],{"class":125,"line":32728},[123,114997,3210],{"class":129},[123,114999,31627],{"class":133},[123,115001,26054],{"class":129},[123,115003,32454],{"class":182},[123,115005,134],{"class":133},[123,115007,834],{"class":182},[123,115009,30797],{"class":133},[123,115011,115012,115014,115016],{"class":125,"line":32734},[123,115013,110219],{"class":133},[123,115015,179],{"class":129},[123,115017,115018],{"class":133}," env.action_space.sample()\n",[123,115020,115021,115024,115026],{"class":125,"line":32740},[123,115022,115023],{"class":133},"        obs, reward, terminated, truncated, info ",[123,115025,179],{"class":129},[123,115027,113412],{"class":133},[123,115029,115030,115032,115034],{"class":125,"line":32746},[123,115031,110294],{"class":133},[123,115033,9487],{"class":129},[123,115035,110299],{"class":133},[123,115037,115038,115040,115042,115044,115046,115049,115051,115053,115056,115058,115060,115063,115065,115067,115070,115072,115074,115076],{"class":125,"line":32752},[123,115039,32462],{"class":182},[123,115041,134],{"class":133},[123,115043,110328],{"class":238},[123,115045,110331],{"class":133},[123,115047,115048],{"class":238},"\"reward:\"",[123,115050,12445],{"class":133},[123,115052,32029],{"class":182},[123,115054,115055],{"class":133},"(reward, ",[123,115057,205],{"class":182},[123,115059,110342],{"class":133},[123,115061,115062],{"class":238},"\"distance:\"",[123,115064,12445],{"class":133},[123,115066,32029],{"class":182},[123,115068,115069],{"class":133},"(info[",[123,115071,114899],{"class":238},[123,115073,112199],{"class":133},[123,115075,205],{"class":182},[123,115077,30508],{"class":133},[123,115079,115080,115082,115085,115088],{"class":125,"line":32758},[123,115081,2506],{"class":129},[123,115083,115084],{"class":133}," terminated ",[123,115086,115087],{"class":129},"or",[123,115089,115090],{"class":133}," truncated:\n",[123,115092,115093],{"class":125,"line":32764},[123,115094,115095],{"class":129},"            break\n",[123,115097,115098],{"class":125,"line":32784},[123,115099,2409],{"emptyLinePlaceholder":50},[123,115101,115102,115104,115106,115108,115110,115112,115114,115116],{"class":125,"line":32790},[123,115103,31310],{"class":182},[123,115105,134],{"class":133},[123,115107,110373],{"class":238},[123,115109,12445],{"class":133},[123,115111,32029],{"class":182},[123,115113,110380],{"class":133},[123,115115,205],{"class":182},[123,115117,30508],{"class":133},[123,115119,115120],{"class":125,"line":32806},[123,115121,2409],{"emptyLinePlaceholder":50},[123,115123,115124],{"class":125,"line":32812},[123,115125,2409],{"emptyLinePlaceholder":50},[123,115127,115128,115130,115132,115134,115136],{"class":125,"line":32826},[123,115129,1540],{"class":129},[123,115131,31231],{"class":182},[123,115133,101556],{"class":129},[123,115135,101559],{"class":238},[123,115137,3748],{"class":133},[123,115139,115140],{"class":125,"line":32832},[123,115141,101566],{"class":133},[14,115143,103567],{},[114,115145,115147],{"className":23832,"code":115146,"language":23834,"meta":37,"style":37},"touch ch8_gym_env.py\n",[120,115148,115149],{"__ignoreMap":37},[123,115150,115151,115153],{"class":125,"line":126},[123,115152,101280],{"class":1972},[123,115154,115155],{"class":238}," ch8_gym_env.py\n",[14,115157,110441],{},[114,115159,115161],{"className":23832,"code":115160,"language":23834,"meta":37,"style":37},"python ch8_gym_env.py\n",[120,115162,115163],{"__ignoreMap":37},[123,115164,115165,115167],{"class":125,"line":126},[123,115166,30391],{"class":1972},[123,115168,115155],{"class":238},[94,115170,101569],{"id":101569},[14,115172,115173],{},"继承 Gymnasium 环境：",[114,115175,115177],{"className":30389,"code":115176,"language":30391,"meta":37,"style":37},"class ReacherEnv(gym.Env):\n",[120,115178,115179],{"__ignoreMap":37},[123,115180,115181,115183,115185,115187,115189,115191,115193],{"class":125,"line":126},[123,115182,14704],{"class":129},[123,115184,114054],{"class":1972},[123,115186,134],{"class":133},[123,115188,113537],{"class":1972},[123,115190,692],{"class":133},[123,115192,114063],{"class":1972},[123,115194,30797],{"class":133},[14,115196,115197],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115199,115200],{},"初始化模型：",[114,115202,115204],{"className":30389,"code":115203,"language":30391,"meta":37,"style":37},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[120,115205,115206,115220],{"__ignoreMap":37},[123,115207,115208,115210,115212,115214,115216,115218],{"class":125,"line":126},[123,115209,30834],{"class":182},[123,115211,114114],{"class":133},[123,115213,179],{"class":129},[123,115215,101409],{"class":133},[123,115217,101311],{"class":182},[123,115219,140],{"class":133},[123,115221,115222,115224,115226,115228,115230,115232],{"class":125,"line":45},[123,115223,30834],{"class":182},[123,115225,114129],{"class":133},[123,115227,179],{"class":129},[123,115229,114134],{"class":133},[123,115231,30834],{"class":182},[123,115233,114139],{"class":133},[14,115235,115236,115237,115239],{},"这和前面章节一样，只是现在放到了类的 ",[120,115238,30840],{}," 里。",[14,115241,115242],{},"缓存 site ID：",[114,115244,115246],{"className":30389,"code":115245,"language":30391,"meta":37,"style":37},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[120,115247,115248,115262],{"__ignoreMap":37},[123,115249,115250,115252,115254,115256,115258,115260],{"class":125,"line":126},[123,115251,30834],{"class":182},[123,115253,114150],{"class":133},[123,115255,179],{"class":129},[123,115257,114155],{"class":133},[123,115259,89565],{"class":182},[123,115261,140],{"class":133},[123,115263,115264,115266,115268,115270,115272,115274],{"class":125,"line":45},[123,115265,30834],{"class":182},[123,115267,114171],{"class":133},[123,115269,179],{"class":129},[123,115271,114155],{"class":133},[123,115273,89565],{"class":182},[123,115275,140],{"class":133},[14,115277,115278],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115280,115281],{},"reset：",[114,115283,115285],{"className":30389,"code":115284,"language":30391,"meta":37,"style":37},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[120,115286,115287],{"__ignoreMap":37},[123,115288,115289,115291,115293,115295,115297,115299,115301,115303,115305,115307,115309,115311,115313,115315,115317,115319,115321],{"class":125,"line":126},[123,115290,31958],{"class":129},[123,115292,114519],{"class":1972},[123,115294,114522],{"class":133},[123,115296,589],{"class":129},[123,115298,114527],{"class":133},[123,115300,137],{"class":182},[123,115302,25120],{"class":129},[123,115304,38944],{"class":182},[123,115306,13574],{"class":129},[123,115308,38944],{"class":182},[123,115310,114540],{"class":133},[123,115312,114543],{"class":182},[123,115314,25120],{"class":129},[123,115316,38944],{"class":182},[123,115318,13574],{"class":129},[123,115320,38944],{"class":182},[123,115322,30797],{"class":133},[14,115324,115325,115327],{},[120,115326,70067],{}," 做四件事：",[77,115329,115330,115333,115336,115339],{},[80,115331,115332],{},"设置随机种子。",[80,115334,115335],{},"重置 MuJoCo data。",[80,115337,115338],{},"随机初始化关节角。",[80,115340,115341],{},"返回初始观测和 info。",[14,115343,115344],{},"step：",[114,115346,115348],{"className":30389,"code":115347,"language":30391,"meta":37,"style":37},"def step(self, action):\n",[120,115349,115350],{"__ignoreMap":37},[123,115351,115352,115354,115356],{"class":125,"line":126},[123,115353,31958],{"class":129},[123,115355,114684],{"class":1972},[123,115357,114687],{"class":133},[14,115359,115360,115362],{},[120,115361,107131],{}," 做六件事：",[77,115364,115365,115368,115374,115377,115380,115383],{},[80,115366,115367],{},"检查并裁剪 action。",[80,115369,115370,115371,28396],{},"写入 ",[120,115372,115373],{},"self.data.ctrl",[80,115375,115376],{},"连续推进若干个 MuJoCo 物理步。",[80,115378,115379],{},"计算新观测。",[80,115381,115382],{},"计算奖励和结束条件。",[80,115384,115385],{},"返回 Gymnasium 标准五元组。",[94,115387,101705],{"id":101705},[114,115389,115391],{"className":30389,"code":115390,"language":30391,"meta":37,"style":37},"import gymnasium as gym\n",[120,115392,115393],{"__ignoreMap":37},[123,115394,115395,115397,115399,115401],{"class":125,"line":126},[123,115396,30403],{"class":129},[123,115398,113892],{"class":133},[123,115400,31394],{"class":129},[123,115402,113897],{"class":133},[14,115404,115405,115406,115408,115409,115412],{},"导入 Gymnasium，并起别名 ",[120,115407,113537],{},"。后面写 ",[120,115410,115411],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[114,115414,115416],{"className":30389,"code":115415,"language":30391,"meta":37,"style":37},"from gymnasium import spaces\n",[120,115417,115418],{"__ignoreMap":37},[123,115419,115420,115422,115424,115426],{"class":125,"line":126},[123,115421,30748],{"class":129},[123,115423,113892],{"class":133},[123,115425,30403],{"class":129},[123,115427,113924],{"class":133},[14,115429,115430,115431,115434],{},"导入空间定义工具。",[120,115432,115433],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[114,115436,115437],{"className":30389,"code":115176,"language":30391,"meta":37,"style":37},[120,115438,115439],{"__ignoreMap":37},[123,115440,115441,115443,115445,115447,115449,115451,115453],{"class":125,"line":126},[123,115442,14704],{"class":129},[123,115444,114054],{"class":1972},[123,115446,134],{"class":133},[123,115448,113537],{"class":1972},[123,115450,692],{"class":133},[123,115452,114063],{"class":1972},[123,115454,30797],{"class":133},[14,115456,115457,115458,115461,115462,115464,115465,101015,115467,115469],{},"定义一个类，名字叫 ",[120,115459,115460],{},"ReacherEnv","。括号里的 ",[120,115463,115411],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[120,115466,70067],{},[120,115468,107131],{}," 这两个核心方法。",[114,115471,115473],{"className":30389,"code":115472,"language":30391,"meta":37,"style":37},"metadata = {\"render_modes\": []}\n",[120,115474,115475],{"__ignoreMap":37},[123,115476,115477,115480,115482,115484,115486],{"class":125,"line":126},[123,115478,115479],{"class":133},"metadata ",[123,115481,179],{"class":129},[123,115483,4457],{"class":133},[123,115485,114077],{"class":238},[123,115487,114080],{"class":133},[14,115489,115490],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[114,115492,115494],{"className":30389,"code":115493,"language":30391,"meta":37,"style":37},"def __init__(self) -> None:\n",[120,115495,115496],{"__ignoreMap":37},[123,115497,115498,115500,115502,115504,115506],{"class":125,"line":126},[123,115499,31958],{"class":129},[123,115501,30815],{"class":182},[123,115503,114093],{"class":133},[123,115505,95683],{"class":182},[123,115507,3748],{"class":133},[14,115509,115510,115512,115513,28396],{},[120,115511,30840],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[120,115514,115515],{},"env = ReacherEnv()",[114,115517,115519],{"className":30389,"code":115518,"language":30391,"meta":37,"style":37},"super().__init__()\n",[120,115520,115521],{"__ignoreMap":37},[123,115522,115523,115526,115528,115530],{"class":125,"line":126},[123,115524,115525],{"class":182},"super",[123,115527,17271],{"class":133},[123,115529,30840],{"class":182},[123,115531,1985],{"class":133},[14,115533,115534,115535,115537],{},"调用父类 ",[120,115536,115411],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[114,115539,115540],{"className":30389,"code":115203,"language":30391,"meta":37,"style":37},[120,115541,115542,115556],{"__ignoreMap":37},[123,115543,115544,115546,115548,115550,115552,115554],{"class":125,"line":126},[123,115545,30834],{"class":182},[123,115547,114114],{"class":133},[123,115549,179],{"class":129},[123,115551,101409],{"class":133},[123,115553,101311],{"class":182},[123,115555,140],{"class":133},[123,115557,115558,115560,115562,115564,115566,115568],{"class":125,"line":45},[123,115559,30834],{"class":182},[123,115561,114129],{"class":133},[123,115563,179],{"class":129},[123,115565,114134],{"class":133},[123,115567,30834],{"class":182},[123,115569,114139],{"class":133},[14,115571,115572,115573,115575,115576,101015,115579,115582],{},"把 MuJoCo 模型和状态保存到 ",[120,115574,30834],{}," 上。",[120,115577,115578],{},"self.model",[120,115580,115581],{},"self.data"," 表示这个环境对象自己的模型和状态。",[114,115584,115585],{"className":30389,"code":115245,"language":30391,"meta":37,"style":37},[120,115586,115587,115601],{"__ignoreMap":37},[123,115588,115589,115591,115593,115595,115597,115599],{"class":125,"line":126},[123,115590,30834],{"class":182},[123,115592,114150],{"class":133},[123,115594,179],{"class":129},[123,115596,114155],{"class":133},[123,115598,89565],{"class":182},[123,115600,140],{"class":133},[123,115602,115603,115605,115607,115609,115611,115613],{"class":125,"line":45},[123,115604,30834],{"class":182},[123,115606,114171],{"class":133},[123,115608,179],{"class":129},[123,115610,114155],{"class":133},[123,115612,89565],{"class":182},[123,115614,140],{"class":133},[14,115616,115617,115618,101015,115621,115624],{},"提前查好 tip 和 target 的 site ID。这样 ",[120,115619,115620],{},"_get_obs",[120,115622,115623],{},"_get_reward"," 里就不用每次按名字查找。",[114,115626,115628],{"className":30389,"code":115627,"language":30391,"meta":37,"style":37},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[120,115629,115630,115640,115650],{"__ignoreMap":37},[123,115631,115632,115634,115636,115638],{"class":125,"line":126},[123,115633,30834],{"class":182},[123,115635,113864],{"class":133},[123,115637,179],{"class":129},[123,115639,54438],{"class":182},[123,115641,115642,115644,115646,115648],{"class":125,"line":45},[123,115643,30834],{"class":182},[123,115645,114243],{"class":133},[123,115647,179],{"class":129},[123,115649,114248],{"class":182},[123,115651,115652,115654,115656,115658],{"class":125,"line":1189},[123,115653,30834],{"class":182},[123,115655,113703],{"class":133},[123,115657,179],{"class":129},[123,115659,47344],{"class":182},[14,115661,115662,115665,115666,115669,115670,115673],{},[120,115663,115664],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[120,115667,115668],{},"max_steps"," 是一个 episode 最多运行多少步。",[120,115671,115672],{},"steps"," 记录当前 episode 已经走了多少步。",[114,115675,115676],{"className":30389,"code":113742,"language":30391,"meta":37,"style":37},[120,115677,115678],{"__ignoreMap":37},[123,115679,115680,115682,115684,115686,115688,115690,115692,115694,115696,115698,115700,115702,115704,115706,115708,115710,115712,115714,115716,115718],{"class":125,"line":126},[123,115681,30834],{"class":182},[123,115683,113751],{"class":133},[123,115685,179],{"class":129},[123,115687,113756],{"class":133},[123,115689,113759],{"class":5226},[123,115691,113762],{"class":129},[123,115693,102400],{"class":182},[123,115695,12445],{"class":133},[123,115697,113769],{"class":5226},[123,115699,179],{"class":129},[123,115701,102400],{"class":182},[123,115703,12445],{"class":133},[123,115705,95960],{"class":5226},[123,115707,179],{"class":129},[123,115709,134],{"class":133},[123,115711,211],{"class":182},[123,115713,113786],{"class":133},[123,115715,93511],{"class":5226},[123,115717,179],{"class":129},[123,115719,113793],{"class":133},[14,115721,115722,115723,115726,115727,101015,115730,115733],{},"定义动作空间。",[120,115724,115725],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[120,115728,115729],{},"low=-1.0",[120,115731,115732],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[114,115735,115736],{"className":30389,"code":113803,"language":30391,"meta":37,"style":37},[120,115737,115738],{"__ignoreMap":37},[123,115739,115740,115742,115744,115746,115748,115750,115752,115754,115756,115758,115760,115762,115764,115766,115768,115770,115772,115774],{"class":125,"line":126},[123,115741,30834],{"class":182},[123,115743,113812],{"class":133},[123,115745,179],{"class":129},[123,115747,113756],{"class":133},[123,115749,113759],{"class":5226},[123,115751,113762],{"class":129},[123,115753,113823],{"class":133},[123,115755,113769],{"class":5226},[123,115757,179],{"class":129},[123,115759,113823],{"class":133},[123,115761,95960],{"class":5226},[123,115763,179],{"class":129},[123,115765,134],{"class":133},[123,115767,580],{"class":182},[123,115769,113786],{"class":133},[123,115771,93511],{"class":5226},[123,115773,179],{"class":129},[123,115775,113793],{"class":133},[14,115777,115778,115779,115782,115783,115786],{},"定义观测空间。",[120,115780,115781],{},"shape=(10,)"," 表示观测是 10 个数。",[120,115784,115785],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[114,115788,115790],{"className":30389,"code":115789,"language":30391,"meta":37,"style":37},"def _get_obs(self) -> np.ndarray:\n",[120,115791,115792],{"__ignoreMap":37},[123,115793,115794,115796,115798],{"class":125,"line":126},[123,115795,31958],{"class":129},[123,115797,114353],{"class":1972},[123,115799,114356],{"class":133},[14,115801,115802,115803,115805],{},"定义内部函数，用来生成观测。函数名前面的 ",[120,115804,1126],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[114,115807,115809],{"className":30389,"code":115808,"language":30391,"meta":37,"style":37},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[120,115810,115811,115825],{"__ignoreMap":37},[123,115812,115813,115815,115817,115819,115821,115823],{"class":125,"line":126},[123,115814,111565],{"class":133},[123,115816,179],{"class":129},[123,115818,38884],{"class":182},[123,115820,114367],{"class":133},[123,115822,30834],{"class":182},[123,115824,114372],{"class":133},[123,115826,115827,115829,115831,115833,115835,115837],{"class":125,"line":45},[123,115828,111575],{"class":133},[123,115830,179],{"class":129},[123,115832,38884],{"class":182},[123,115834,114367],{"class":133},[123,115836,30834],{"class":182},[123,115838,114387],{"class":133},[14,115840,115841],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[114,115843,115845],{"className":30389,"code":115844,"language":30391,"meta":37,"style":37},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[120,115846,115847,115863],{"__ignoreMap":37},[123,115848,115849,115851,115853,115855,115857,115859,115861],{"class":125,"line":126},[123,115850,110851],{"class":133},[123,115852,179],{"class":129},[123,115854,114396],{"class":133},[123,115856,30834],{"class":182},[123,115858,114401],{"class":133},[123,115860,30834],{"class":182},[123,115862,114406],{"class":133},[123,115864,115865,115867],{"class":125,"line":45},[123,115866,17056],{"class":129},[123,115868,114413],{"class":133},[14,115870,115871,115872,115875,115876,115878],{},"拼接观测，并转换成 ",[120,115873,115874],{},"float32","。很多强化学习库默认使用 ",[120,115877,115874],{},"，所以这里主动转换。",[114,115880,115881],{"className":30389,"code":115284,"language":30391,"meta":37,"style":37},[120,115882,115883],{"__ignoreMap":37},[123,115884,115885,115887,115889,115891,115893,115895,115897,115899,115901,115903,115905,115907,115909,115911,115913,115915,115917],{"class":125,"line":126},[123,115886,31958],{"class":129},[123,115888,114519],{"class":1972},[123,115890,114522],{"class":133},[123,115892,589],{"class":129},[123,115894,114527],{"class":133},[123,115896,137],{"class":182},[123,115898,25120],{"class":129},[123,115900,38944],{"class":182},[123,115902,13574],{"class":129},[123,115904,38944],{"class":182},[123,115906,114540],{"class":133},[123,115908,114543],{"class":182},[123,115910,25120],{"class":129},[123,115912,38944],{"class":182},[123,115914,13574],{"class":129},[123,115916,38944],{"class":182},[123,115918,30797],{"class":133},[14,115920,115921,115922,115924,115925,115928],{},"定义 reset。",[120,115923,114563],{}," 用来控制随机数，保证实验可以复现。",[120,115926,115927],{},"options"," 用来接收额外配置，本章暂时不用。",[114,115930,115932],{"className":30389,"code":115931,"language":30391,"meta":37,"style":37},"super().reset(seed=seed)\n",[120,115933,115934],{"__ignoreMap":37},[123,115935,115936,115938,115940,115942,115944],{"class":125,"line":126},[123,115937,115525],{"class":182},[123,115939,114560],{"class":133},[123,115941,114563],{"class":5226},[123,115943,179],{"class":129},[123,115945,114568],{"class":133},[14,115947,115948,115949,115952],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[120,115950,115951],{},"self.np_random"," 生成可复现的随机数。",[114,115954,115956],{"className":30389,"code":115955,"language":30391,"meta":37,"style":37},"mujoco.mj_resetData(self.model, self.data)\n",[120,115957,115958],{"__ignoreMap":37},[123,115959,115960,115963,115965,115967,115969],{"class":125,"line":126},[123,115961,115962],{"class":133},"mujoco.mj_resetData(",[123,115964,30834],{"class":182},[123,115966,114578],{"class":133},[123,115968,30834],{"class":182},[123,115970,114583],{"class":133},[14,115972,115973],{},"把 MuJoCo 状态重置到默认状态。",[114,115975,115977],{"className":30389,"code":115976,"language":30391,"meta":37,"style":37},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[120,115978,115979],{"__ignoreMap":37},[123,115980,115981,115983,115985,115987,115989,115991,115993,115995,115997,115999,116001,116003,116005,116007,116009,116011,116013],{"class":125,"line":126},[123,115982,30834],{"class":182},[123,115984,114594],{"class":133},[123,115986,179],{"class":129},[123,115988,38884],{"class":182},[123,115990,114601],{"class":133},[123,115992,113759],{"class":5226},[123,115994,113762],{"class":129},[123,115996,86221],{"class":182},[123,115998,12445],{"class":133},[123,116000,113769],{"class":5226},[123,116002,179],{"class":129},[123,116004,86221],{"class":182},[123,116006,12445],{"class":133},[123,116008,31507],{"class":5226},[123,116010,179],{"class":129},[123,116012,30834],{"class":182},[123,116014,114626],{"class":133},[14,116016,115338,116017,116020,116021,116024,116025,116027],{},[120,116018,116019],{},"[:]"," 表示修改整个数组。",[120,116022,116023],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[120,116026,102147],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[114,116029,116031],{"className":30389,"code":116030,"language":30391,"meta":37,"style":37},"self.data.qvel[:] = 0.0\n",[120,116032,116033],{"__ignoreMap":37},[123,116034,116035,116037,116039,116041],{"class":125,"line":126},[123,116036,30834],{"class":182},[123,116038,114633],{"class":133},[123,116040,179],{"class":129},[123,116042,104758],{"class":182},[14,116044,116045],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[114,116047,116049],{"className":30389,"code":116048,"language":30391,"meta":37,"style":37},"self.steps = 0\nreturn self._get_obs(), {}\n",[120,116050,116051,116061],{"__ignoreMap":37},[123,116052,116053,116055,116057,116059],{"class":125,"line":126},[123,116054,30834],{"class":182},[123,116056,113703],{"class":133},[123,116058,179],{"class":129},[123,116060,47344],{"class":182},[123,116062,116063,116065,116067],{"class":125,"line":45},[123,116064,17056],{"class":129},[123,116066,38884],{"class":182},[123,116068,114673],{"class":133},[14,116070,116071],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[114,116073,116074],{"className":30389,"code":115347,"language":30391,"meta":37,"style":37},[120,116075,116076],{"__ignoreMap":37},[123,116077,116078,116080,116082],{"class":125,"line":126},[123,116079,31958],{"class":129},[123,116081,114684],{"class":1972},[123,116083,114687],{"class":133},[14,116085,116086],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[114,116088,116090],{"className":30389,"code":116089,"language":30391,"meta":37,"style":37},"action = np.asarray(action, dtype=np.float32)\n",[120,116091,116092],{"__ignoreMap":37},[123,116093,116094,116096,116098,116100,116102,116104],{"class":125,"line":126},[123,116095,107439],{"class":133},[123,116097,179],{"class":129},[123,116099,114696],{"class":133},[123,116101,93511],{"class":5226},[123,116103,179],{"class":129},[123,116105,113793],{"class":133},[14,116107,116108,116109,28396],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[120,116110,115874],{},[114,116112,116114],{"className":30389,"code":116113,"language":30391,"meta":37,"style":37},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[120,116115,116116],{"__ignoreMap":37},[123,116117,116118,116120,116122,116124,116126,116128,116130],{"class":125,"line":126},[123,116119,107439],{"class":133},[123,116121,179],{"class":129},[123,116123,107444],{"class":133},[123,116125,30834],{"class":182},[123,116127,114715],{"class":133},[123,116129,30834],{"class":182},[123,116131,114720],{"class":133},[14,116133,116134],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[114,116136,116138],{"className":30389,"code":116137,"language":30391,"meta":37,"style":37},"self.data.ctrl[:] = action\n",[120,116139,116140],{"__ignoreMap":37},[123,116141,116142,116144,116146,116148],{"class":125,"line":126},[123,116143,30834],{"class":182},[123,116145,114731],{"class":133},[123,116147,179],{"class":129},[123,116149,107467],{"class":133},[14,116151,116152],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[114,116154,116156],{"className":30389,"code":116155,"language":30391,"meta":37,"style":37},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[120,116157,116158,116174],{"__ignoreMap":37},[123,116159,116160,116162,116164,116166,116168,116170,116172],{"class":125,"line":126},[123,116161,3034],{"class":129},[123,116163,101498],{"class":133},[123,116165,26054],{"class":129},[123,116167,32454],{"class":182},[123,116169,134],{"class":133},[123,116171,30834],{"class":182},[123,116173,114752],{"class":133},[123,116175,116176,116179,116181,116183,116185],{"class":125,"line":45},[123,116177,116178],{"class":133},"    mujoco.mj_step(",[123,116180,30834],{"class":182},[123,116182,114578],{"class":133},[123,116184,30834],{"class":182},[123,116186,114583],{"class":133},[14,116188,116189,116190,116193,116194,116196,116197,28396],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[120,116191,116192],{},"frame_skip=5","，所以外部调用一次 ",[120,116195,113874],{},"，内部实际执行 5 次 ",[120,116198,101212],{},[114,116200,116202],{"className":30389,"code":116201,"language":30391,"meta":37,"style":37},"self.steps += 1\n",[120,116203,116204],{"__ignoreMap":37},[123,116205,116206,116208,116210,116212],{"class":125,"line":126},[123,116207,30834],{"class":182},[123,116209,113703],{"class":133},[123,116211,9487],{"class":129},[123,116213,55710],{"class":182},[14,116215,116216],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[114,116218,116220],{"className":30389,"code":116219,"language":30391,"meta":37,"style":37},"obs = self._get_obs()\nreward = self._get_reward()\n",[120,116221,116222,116232],{"__ignoreMap":37},[123,116223,116224,116226,116228,116230],{"class":125,"line":126},[123,116225,110851],{"class":133},[123,116227,179],{"class":129},[123,116229,38884],{"class":182},[123,116231,114794],{"class":133},[123,116233,116234,116236,116238,116240],{"class":125,"line":45},[123,116235,111002],{"class":133},[123,116237,179],{"class":129},[123,116239,38884],{"class":182},[123,116241,114805],{"class":133},[14,116243,116244],{},"计算新的观测和奖励。",[114,116246,116248],{"className":30389,"code":116247,"language":30391,"meta":37,"style":37},"dist = float(np.linalg.norm(tip - target))\n",[120,116249,116250],{"__ignoreMap":37},[123,116251,116252,116254,116256,116258,116260,116262],{"class":125,"line":126},[123,116253,111593],{"class":133},[123,116255,179],{"class":129},[123,116257,109794],{"class":182},[123,116259,114848],{"class":133},[123,116261,666],{"class":129},[123,116263,114853],{"class":133},[14,116265,116266],{},"计算末端到目标的距离，并转换成 Python float。",[114,116268,116269],{"className":30389,"code":113674,"language":30391,"meta":37,"style":37},[120,116270,116271,116283],{"__ignoreMap":37},[123,116272,116273,116275,116277,116279,116281],{"class":125,"line":126},[123,116274,113681],{"class":133},[123,116276,179],{"class":129},[123,116278,113686],{"class":133},[123,116280,1044],{"class":129},[123,116282,113691],{"class":182},[123,116284,116285,116287,116289,116291,116293,116295,116297],{"class":125,"line":45},[123,116286,113696],{"class":133},[123,116288,179],{"class":129},[123,116290,38884],{"class":182},[123,116292,113703],{"class":133},[123,116294,1719],{"class":129},[123,116296,38884],{"class":182},[123,116298,113710],{"class":133},[14,116300,116301],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[114,116303,116305],{"className":30389,"code":116304,"language":30391,"meta":37,"style":37},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[120,116306,116307,116320],{"__ignoreMap":37},[123,116308,116309,116312,116314,116316,116318],{"class":125,"line":126},[123,116310,116311],{"class":133},"info ",[123,116313,179],{"class":129},[123,116315,4457],{"class":133},[123,116317,114899],{"class":238},[123,116319,114902],{"class":133},[123,116321,116322,116324],{"class":125,"line":45},[123,116323,17056],{"class":129},[123,116325,114909],{"class":133},[14,116327,116328,116331],{},[120,116329,116330],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[114,116333,116335],{"className":30389,"code":116334,"language":30391,"meta":37,"style":37},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[120,116336,116337,116346],{"__ignoreMap":37},[123,116338,116339,116342,116344],{"class":125,"line":126},[123,116340,116341],{"class":133},"env ",[123,116343,179],{"class":129},[123,116345,114939],{"class":133},[123,116347,116348,116350,116352,116354,116356,116358,116360],{"class":125,"line":45},[123,116349,113397],{"class":133},[123,116351,179],{"class":129},[123,116353,114949],{"class":133},[123,116355,114563],{"class":5226},[123,116357,179],{"class":129},[123,116359,325],{"class":182},[123,116361,140],{"class":133},[14,116363,116364,116365,116368],{},"创建环境并重置。",[120,116366,116367],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[114,116370,116372],{"className":30389,"code":116371,"language":30391,"meta":37,"style":37},"action = env.action_space.sample()\n",[120,116373,116374],{"__ignoreMap":37},[123,116375,116376,116378,116380],{"class":125,"line":126},[123,116377,107439],{"class":133},[123,116379,179],{"class":129},[123,116381,115018],{"class":133},[14,116383,116384],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[65,116386,102313],{"id":102312},[14,116388,105481],{},[114,116390,116393],{"className":116391,"code":116392,"language":5197,"meta":37},[5195],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[120,116394,116392],{"__ignoreMap":37},[14,116396,116397],{},"这个环境已经具备强化学习环境的基本结构。",[14,116399,116400],{},"主函数里使用随机动作：",[114,116402,116403],{"className":30389,"code":116371,"language":30391,"meta":37,"style":37},[120,116404,116405],{"__ignoreMap":37},[123,116406,116407,116409,116411],{"class":125,"line":126},[123,116408,107439],{"class":133},[123,116410,179],{"class":129},[123,116412,115018],{"class":133},[14,116414,116415],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[65,116417,102345],{"id":102344},[77,116419,116420,116423,116429,116438,116447,116456,116462],{},[80,116421,116422],{},"运行程序。",[80,116424,116425,116426,28396],{},"确认 ",[120,116427,116428],{},"obs.shape == (10,)",[80,116430,111178,116431,116434,116435,28396],{},[120,116432,116433],{},"env.action_space","，应类似 ",[120,116436,116437],{},"Box(-1.0, 1.0, (2,), float32)",[80,116439,105582,116440,116443,116444,28396],{},[120,116441,116442],{},"self.max_steps = 10","，确认环境会更快 ",[120,116445,116446],{},"truncated=True",[80,116448,102408,116449,102411,116452,116455],{},[120,116450,116451],{},"terminated = dist \u003C 0.05",[120,116453,116454],{},"dist \u003C 0.2","，观察是否更容易结束。",[80,116457,102408,116458,116461],{},[120,116459,116460],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[80,116463,116464,116465,116467,116468,116471],{},"在 ",[120,116466,116330],{}," 里加入 ",[120,116469,116470],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[65,116473,102450],{"id":102449},[94,116475,116477],{"id":116476},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116479,116480,116481,116483],{},"Gymnasium 的 ",[120,116482,107131],{}," 返回 5 个值:",[114,116485,116487],{"className":30389,"code":116486,"language":30391,"meta":37,"style":37},"obs, reward, terminated, truncated, info\n",[120,116488,116489],{"__ignoreMap":37},[123,116490,116491],{"class":125,"line":126},[123,116492,116486],{"class":133},[14,116494,116495],{},"不是旧 Gym 的 4 个值。",[94,116497,116499,116502],{"id":116498},"datactrl-action-维度错误",[120,116500,116501],{},"data.ctrl[:] = action"," 维度错误",[14,116504,102520],{},[114,116506,116508],{"className":30389,"code":116507,"language":30391,"meta":37,"style":37},"print(self.model.nu)\nprint(action.shape)\n",[120,116509,116510,116521],{"__ignoreMap":37},[123,116511,116512,116514,116516,116518],{"class":125,"line":126},[123,116513,30426],{"class":182},[123,116515,134],{"class":133},[123,116517,30834],{"class":182},[123,116519,116520],{"class":133},".model.nu)\n",[123,116522,116523,116525],{"class":125,"line":45},[123,116524,30426],{"class":182},[123,116526,116527],{"class":133},"(action.shape)\n",[14,116529,116530],{},"两者必须匹配。",[94,116532,116534],{"id":116533},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116536,102459],{},[114,116538,116540],{"className":30389,"code":116539,"language":30391,"meta":37,"style":37},"mujoco.mj_forward(self.model, self.data)\n",[120,116541,116542],{"__ignoreMap":37},[123,116543,116544,116547,116549,116551,116553],{"class":125,"line":126},[123,116545,116546],{"class":133},"mujoco.mj_forward(",[123,116548,30834],{"class":182},[123,116550,114578],{"class":133},[123,116552,30834],{"class":182},[123,116554,114583],{"class":133},[94,116556,116558,116560],{"id":116557},"observation_space-维度和-obs-不一致",[120,116559,113597],{}," 维度和 obs 不一致",[14,116562,102572],{},[114,116564,116566],{"className":30389,"code":116565,"language":30391,"meta":37,"style":37},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[120,116567,116568,116578,116585],{"__ignoreMap":37},[123,116569,116570,116572,116574,116576],{"class":125,"line":126},[123,116571,110851],{"class":133},[123,116573,179],{"class":129},[123,116575,38884],{"class":182},[123,116577,114794],{"class":133},[123,116579,116580,116582],{"class":125,"line":45},[123,116581,30426],{"class":182},[123,116583,116584],{"class":133},"(obs.shape)\n",[123,116586,116587,116589,116591,116593],{"class":125,"line":1189},[123,116588,30426],{"class":182},[123,116590,134],{"class":133},[123,116592,30834],{"class":182},[123,116594,116595],{"class":133},".observation_space.shape)\n",[14,116597,116598],{},"两者必须一致。本章观测是：",[114,116600,116603],{"className":116601,"code":116602,"language":5197,"meta":37},[5195],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[120,116604,116602],{"__ignoreMap":37},[94,116606,116608],{"id":116607},"action-超过范围","action 超过范围",[14,116610,116611],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[114,116613,116614],{"className":30389,"code":116113,"language":30391,"meta":37,"style":37},[120,116615,116616],{"__ignoreMap":37},[123,116617,116618,116620,116622,116624,116626,116628,116630],{"class":125,"line":126},[123,116619,107439],{"class":133},[123,116621,179],{"class":129},[123,116623,107444],{"class":133},[123,116625,30834],{"class":182},[123,116627,114715],{"class":133},[123,116629,30834],{"class":182},[123,116631,114720],{"class":133},[14,116633,116634,116635,28396],{},"这能避免无效动作直接写入 ",[120,116636,101073],{},[94,116638,116640],{"id":116639},"忘记返回-info","忘记返回 info",[14,116642,116480,116643,101015,116645,116647],{},[120,116644,70067],{},[120,116646,107131],{}," 都会返回 info：",[114,116649,116650],{"className":30389,"code":113390,"language":30391,"meta":37,"style":37},[120,116651,116652,116660],{"__ignoreMap":37},[123,116653,116654,116656,116658],{"class":125,"line":126},[123,116655,113397],{"class":133},[123,116657,179],{"class":129},[123,116659,113402],{"class":133},[123,116661,116662,116664,116666],{"class":125,"line":45},[123,116663,113407],{"class":133},[123,116665,179],{"class":129},[123,116667,113412],{"class":133},[14,116669,116670,116671,28396],{},"即使暂时没有额外信息，也返回 ",[120,116672,32470],{},[65,116674,116676],{"id":116675},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,116678,116679],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[77,116681,116682,116685,116688,116691,116694,116697],{},[80,116683,116684],{},"更稳定的 reward。",[80,116686,116687],{},"合理的 episode 长度。",[80,116689,116690],{},"可重复的随机目标采样。",[80,116692,116693],{},"render 接口。",[80,116695,116696],{},"环境注册代码。",[80,116698,116699],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,116701,116702],{},"如果只是自己写训练循环，最小形式是：",[114,116704,116706],{"className":30389,"code":116705,"language":30391,"meta":37,"style":37},"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",[120,116707,116708,116716,116732,116736,116752,116761,116770,116780],{"__ignoreMap":37},[123,116709,116710,116712,116714],{"class":125,"line":126},[123,116711,116341],{"class":133},[123,116713,179],{"class":129},[123,116715,114939],{"class":133},[123,116717,116718,116720,116722,116724,116726,116728,116730],{"class":125,"line":45},[123,116719,113397],{"class":133},[123,116721,179],{"class":129},[123,116723,114949],{"class":133},[123,116725,114563],{"class":5226},[123,116727,179],{"class":129},[123,116729,325],{"class":182},[123,116731,140],{"class":133},[123,116733,116734],{"class":125,"line":1189},[123,116735,2409],{"emptyLinePlaceholder":50},[123,116737,116738,116740,116742,116744,116746,116748,116750],{"class":125,"line":1204},[123,116739,3034],{"class":129},[123,116741,101498],{"class":133},[123,116743,26054],{"class":129},[123,116745,32454],{"class":182},[123,116747,134],{"class":133},[123,116749,6420],{"class":182},[123,116751,30797],{"class":133},[123,116753,116754,116757,116759],{"class":125,"line":1210},[123,116755,116756],{"class":133},"    action ",[123,116758,179],{"class":129},[123,116760,115018],{"class":133},[123,116762,116763,116766,116768],{"class":125,"line":1224},[123,116764,116765],{"class":133},"    obs, reward, terminated, truncated, info ",[123,116767,179],{"class":129},[123,116769,113412],{"class":133},[123,116771,116772,116774,116776,116778],{"class":125,"line":1230},[123,116773,3110],{"class":129},[123,116775,115084],{"class":133},[123,116777,115087],{"class":129},[123,116779,115090],{"class":133},[123,116781,116782,116785,116787],{"class":125,"line":1321},[123,116783,116784],{"class":133},"        obs, info ",[123,116786,179],{"class":129},[123,116788,113402],{"class":133},[65,116790,116792],{"id":116791},"_9本章小结","9.本章小结",[14,116794,116795],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[114,116797,116800],{"className":116798,"code":116799,"language":5197,"meta":37},[5195],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[120,116801,116799],{"__ignoreMap":37},[14,116803,116804],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5136,116806,116807],{},"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":37,"searchDepth":45,"depth":45,"links":116809},[116810,116811,116812,116819,116823,116824,116825,116835,116836],{"id":100643,"depth":45,"text":100644},{"id":100766,"depth":45,"text":100767},{"id":101041,"depth":45,"text":101042,"children":116813},[116814,116816,116818],{"id":113621,"depth":1189,"text":116815},"terminated 和 truncated 的区别",{"id":113724,"depth":1189,"text":116817},"observation_space 和 action_space",{"id":113851,"depth":1189,"text":113852},{"id":101249,"depth":45,"text":101250,"children":116820},[116821,116822],{"id":101569,"depth":1189,"text":101569},{"id":101705,"depth":1189,"text":101705},{"id":102312,"depth":45,"text":102313},{"id":102344,"depth":45,"text":102345},{"id":102449,"depth":45,"text":102450,"children":116826},[116827,116828,116830,116831,116833,116834],{"id":116476,"depth":1189,"text":116477},{"id":116498,"depth":1189,"text":116829},"data.ctrl[:] = action 维度错误",{"id":116533,"depth":1189,"text":116534},{"id":116557,"depth":1189,"text":116832},"observation_space 维度和 obs 不一致",{"id":116607,"depth":1189,"text":116608},{"id":116639,"depth":1189,"text":116640},{"id":116675,"depth":45,"text":116676},{"id":116791,"depth":45,"text":116792},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113374,"description":37},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116843,"title":116844,"body":116845,"description":117268,"extension":48,"meta":117269,"navigation":50,"path":117270,"seo":117271,"stem":117272,"__hash__":117273},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116846,"toc":117258},[116847,116851,116854,116857,116877,116883,116889,116899,116902,116905,116925,116928,116932,116935,116941,116944,116958,116961,116964,117038,117041,117047,117050,117073,117076,117126,117129,117135,117138,117141,117144,117163,117166,117172,117175,117178,117181,117201,117204,117207,117210,117255],[10,116848,116850],{"id":116849},"mujoco-学习","MuJoCo 学习",[14,116852,116853],{},"初版",[14,116855,116856],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[77,116858,116859,116862,116865,116874],{},[80,116860,116861],{},"MuJoCo 模型文件在描述什么。",[80,116863,116864],{},"Python 代码怎样读取和推进仿真。",[80,116866,116867,346,116869,346,116871,116873],{},[120,116868,104027],{},[120,116870,104357],{},[120,116872,104360],{}," 这些数组为什么重要。",[80,116875,116876],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,116878,116879,116880,116882],{},"默认环境为 Fedora 44、Python >= 3.10、",[120,116881,101024],{}," 官方 Python bindings。",[14,116884,116885,116886,116888],{},"注意：本文禁止使用 ",[120,116887,101009],{},"。所有示例均使用：",[114,116890,116891],{"className":30389,"code":101575,"language":30391,"meta":37,"style":37},[120,116892,116893],{"__ignoreMap":37},[123,116894,116895,116897],{"class":125,"line":126},[123,116896,30403],{"class":129},[123,116898,101298],{"class":133},[65,116900,116901],{"id":116901},"适合谁阅读",[14,116903,116904],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[77,116906,116907,116910,116913,116916],{},[80,116908,116909],{},"没学过 MuJoCo，只会一点 Python。",[80,116911,116912],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[80,116914,116915],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[80,116917,116918,116919,116921,116922,116924],{},"以前接触过 ",[120,116920,101009],{},"，现在想迁移到官方 ",[120,116923,101018],{}," Python bindings。",[14,116926,116927],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[65,116929,116931],{"id":116930},"mujoco-到底是什么","MuJoCo 到底是什么",[14,116933,116934],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[114,116936,116939],{"className":116937,"code":116938,"language":5197,"meta":37},[5195],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[120,116940,116938],{"__ignoreMap":37},[14,116942,116943],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[77,116945,116946,116949,116952,116955],{},[80,116947,116948],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[80,116950,116951],{},"快速测试控制算法，不必一开始就上真实机器人。",[80,116953,116954],{},"生成强化学习环境。",[80,116956,116957],{},"采集状态、动作、图像、奖励等训练数据。",[65,116959,116960],{"id":116960},"学习前的心智模型",[14,116962,116963],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[271,116965,116966,116978],{},[274,116967,116968],{},[277,116969,116970,116973,116976],{},[280,116971,116972],{"align":23746},"部分",[280,116974,116975],{"align":23746},"负责什么",[280,116977,21197],{"align":23746},[318,116979,116980,116991,117003,117015,117027],{},[277,116981,116982,116985,116988],{},[323,116983,116984],{"align":23746},"MJCF XML",[323,116986,116987],{"align":23746},"定义世界和机器人结构",[323,116989,116990],{"align":23746},"地面、盒子、关节、电机、摄像头",[277,116992,116993,116997,117000],{},[323,116994,116995],{"align":23746},[120,116996,100706],{},[323,116998,116999],{"align":23746},"编译后的静态模型",[323,117001,117002],{"align":23746},"有几个关节、有几个电机、时间步长是多少",[277,117004,117005,117009,117012],{},[323,117006,117007],{"align":23746},[120,117008,100716],{},[323,117010,117011],{"align":23746},"运行中的动态状态",[323,117013,117014],{"align":23746},"当前时间、位置、速度、电机输入",[277,117016,117017,117021,117024],{},[323,117018,117019],{"align":23746},[120,117020,101212],{},[323,117022,117023],{"align":23746},"推进一步物理仿真",[323,117025,117026],{"align":23746},"根据重力、力、碰撞更新状态",[277,117028,117029,117032,117035],{},[323,117030,117031],{"align":23746},"Viewer \u002F Renderer",[323,117033,117034],{"align":23746},"把仿真显示出来",[323,117036,117037],{"align":23746},"打开窗口或保存图片",[14,117039,117040],{},"一句话总结：",[114,117042,117045],{"className":117043,"code":117044,"language":5197,"meta":37},[5195],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[120,117046,117044],{"__ignoreMap":37},[14,117048,117049],{},"参考来源：",[1141,117051,117052,117059,117066],{},[80,117053,117054,117055],{},"MuJoCo Python 官方文档：",[372,117056,117057],{"href":117057,"rel":117058},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23875],[80,117060,117061,117062],{},"MuJoCo XML Reference：",[372,117063,117064],{"href":117064,"rel":117065},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23875],[80,117067,117068,117069],{},"MuJoCo Overview：",[372,117070,117071],{"href":117071,"rel":117072},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23875],[65,117074,117075],{"id":117075},"章节目录",[77,117077,117078,117084,117090,117096,117102,117108,117114,117120],{},[80,117079,117080],{},[372,117081,117083],{"href":117082},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[80,117085,117086],{},[372,117087,117089],{"href":117088},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[80,117091,117092],{},[372,117093,117095],{"href":117094},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[80,117097,117098],{},[372,117099,117101],{"href":117100},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[80,117103,117104],{},[372,117105,117107],{"href":117106},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[80,117109,117110],{},[372,117111,117113],{"href":117112},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[80,117115,117116],{},[372,117117,117119],{"href":117118},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[80,117121,117122],{},[372,117123,117125],{"href":117124},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[65,117127,117128],{"id":117128},"推荐学习路线",[114,117130,117133],{"className":117131,"code":117132,"language":5197,"meta":37},[5195],"环境安装\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",[120,117134,117132],{"__ignoreMap":37},[14,117136,117137],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[65,117139,117140],{"id":117140},"建议的目录结构",[14,117142,117143],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[114,117145,117147],{"className":23832,"code":117146,"language":23834,"meta":37,"style":37},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[120,117148,117149,117157],{"__ignoreMap":37},[123,117150,117151,117153,117155],{"class":125,"line":126},[123,117152,101263],{"class":1972},[123,117154,29227],{"class":182},[123,117156,101268],{"class":238},[123,117158,117159,117161],{"class":125,"line":45},[123,117160,101273],{"class":182},[123,117162,101268],{"class":238},[14,117164,117165],{},"每一章的代码都单独保存：",[114,117167,117170],{"className":117168,"code":117169,"language":5197,"meta":37},[5195],"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",[120,117171,117169],{"__ignoreMap":37},[14,117173,117174],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[65,117176,117177],{"id":117177},"学习方法",[14,117179,117180],{},"每章建议按这个顺序操作：",[77,117182,117183,117186,117189,117192,117195,117198],{},[80,117184,117185],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[80,117187,117188],{},"复制最小可运行代码，保存成指定文件。",[80,117190,117191],{},"运行代码，确认没有报错。",[80,117193,117194],{},"对照“运行结果说明”理解输出。",[80,117196,117197],{},"做“验证步骤”，主动改一两个参数。",[80,117199,117200],{},"遇到报错先看“常见错误与解决方案”。",[14,117202,117203],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[65,117205,117206],{"id":117206},"全局排错顺序",[14,117208,117209],{},"遇到问题时，按下面顺序查：",[77,117211,117212,117218,117224,117229,117232,117235,117242,117252],{},[80,117213,117214,117215],{},"Python 环境是否激活：",[120,117216,117217],{},"which python",[80,117219,117220,117221],{},"MuJoCo 是否能导入：",[120,117222,117223],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[80,117225,117226,117227],{},"是否误装了 ",[120,117228,101009],{},[80,117230,117231],{},"XML 标签是否闭合、属性是否拼写正确",[80,117233,117234],{},"actuator 引用的 joint 名字是否存在",[80,117236,117237,117239,117240],{},[120,117238,101073],{}," 的长度是否等于 ",[120,117241,102155],{},[80,117243,105582,117244,82550,117246,117248,117249],{},[120,117245,104027],{},[120,117247,104357],{}," 后是否调用了 ",[120,117250,117251],{},"mujoco.mj_forward",[80,117253,117254],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5136,117256,117257],{},"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":37,"searchDepth":45,"depth":45,"links":117259},[117260,117261,117262,117263,117264,117265,117266,117267],{"id":116901,"depth":45,"text":116901},{"id":116930,"depth":45,"text":116931},{"id":116960,"depth":45,"text":116960},{"id":117075,"depth":45,"text":117075},{"id":117128,"depth":45,"text":117128},{"id":117140,"depth":45,"text":117140},{"id":117177,"depth":45,"text":117177},{"id":117206,"depth":45,"text":117206},"仿真搭建。",{"category":23388},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116844,"description":117268},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117275,"title":117276,"body":117277,"description":47,"extension":48,"meta":117732,"navigation":50,"path":117733,"seo":117734,"stem":117735,"__hash__":117736},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117278,"toc":117730},[117279,117282,117285,117291,117727],[10,117280,117276],{"id":117281},"_1-最常用的基本操作更新",[14,117283,117284],{},"装linux系统教程：",[14,117286,117287],{},[372,117288,117289],{"href":117289,"rel":117290},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23875],[114,117292,117296],{"className":117293,"code":117294,"language":117295,"meta":37,"style":37},"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",[120,117297,117298,117303,117308,117317,117322,117331,117336,117356,117361,117372,117377,117386,117391,117419,117424,117443,117448,117467,117471,117476,117492,117496,117501,117531,117535,117540,117556,117560,117565,117580,117584,117589,117605,117609,117614,117626,117638,117642,117647,117664,117668,117673,117691,117695,117700,117709,117713,117718],{"__ignoreMap":37},[123,117299,117300],{"class":125,"line":126},[123,117301,117302],{"class":192},"#更新相关的知识\n",[123,117304,117305],{"class":125,"line":45},[123,117306,117307],{"class":192},"# 更新软件包列表（从服务器获取最新软件信息）\n",[123,117309,117310,117312,117315],{"class":125,"line":1189},[123,117311,24587],{"class":1972},[123,117313,117314],{"class":238}," apt",[123,117316,26253],{"class":238},[123,117318,117319],{"class":125,"line":1204},[123,117320,117321],{"class":192},"# 升级所有可更新的软件包（不删除旧包）\n",[123,117323,117324,117326,117328],{"class":125,"line":1210},[123,117325,24587],{"class":1972},[123,117327,117314],{"class":238},[123,117329,117330],{"class":238}," upgrade\n",[123,117332,117333],{"class":125,"line":1224},[123,117334,117335],{"class":192},"#更新和升级软件包\n",[123,117337,117338,117340,117342,117345,117347,117349,117351,117354],{"class":125,"line":1230},[123,117339,24587],{"class":1972},[123,117341,117314],{"class":238},[123,117343,117344],{"class":238}," update",[123,117346,26201],{"class":133},[123,117348,24587],{"class":1972},[123,117350,117314],{"class":238},[123,117352,117353],{"class":238}," upgrade",[123,117355,100978],{"class":182},[123,117357,117358],{"class":125,"line":1321},[123,117359,117360],{"class":192},"#列出可更新的软件包及版本信息\n",[123,117362,117363,117366,117369],{"class":125,"line":1327},[123,117364,117365],{"class":1972},"apt",[123,117367,117368],{"class":238}," list",[123,117370,117371],{"class":182}," --upgradable\n",[123,117373,117374],{"class":125,"line":1339},[123,117375,117376],{"class":192},"#彻底升级（处理依赖关系，可能删除旧包）\n",[123,117378,117379,117381,117383],{"class":125,"line":1621},[123,117380,24587],{"class":1972},[123,117382,117314],{"class":238},[123,117384,117385],{"class":238}," full-upgrade\n",[123,117387,117388],{"class":125,"line":1626},[123,117389,117390],{"class":192},"#设置指定版本\n",[123,117392,117393,117395,117397,117399,117401,117404,117406,117408,117410,117412,117415,117417],{"class":125,"line":1632},[123,117394,24587],{"class":1972},[123,117396,117314],{"class":238},[123,117398,23844],{"class":238},[123,117400,28913],{"class":129},[123,117402,117403],{"class":238},"package_nam",[123,117405,208],{"class":133},[123,117407,1094],{"class":129},[123,117409,179],{"class":238},[123,117411,1044],{"class":129},[123,117413,117414],{"class":238},"version_numbe",[123,117416,804],{"class":133},[123,117418,51318],{"class":129},[123,117420,117421],{"class":125,"line":1637},[123,117422,117423],{"class":192},"#只安装软件包不升级\n",[123,117425,117426,117428,117430,117432,117434,117436,117438,117440],{"class":125,"line":1651},[123,117427,24587],{"class":1972},[123,117429,117314],{"class":238},[123,117431,23844],{"class":238},[123,117433,28913],{"class":129},[123,117435,117403],{"class":238},[123,117437,208],{"class":133},[123,117439,1094],{"class":129},[123,117441,117442],{"class":182}," --no-upgrade\n",[123,117444,117445],{"class":125,"line":1656},[123,117446,117447],{"class":192},"#只升级，不存在就不安装\n",[123,117449,117450,117452,117454,117456,117458,117460,117462,117464],{"class":125,"line":1662},[123,117451,24587],{"class":1972},[123,117453,117314],{"class":238},[123,117455,23844],{"class":238},[123,117457,28913],{"class":129},[123,117459,117403],{"class":238},[123,117461,208],{"class":133},[123,117463,1094],{"class":129},[123,117465,117466],{"class":182}," --only-upgrade\n",[123,117468,117469],{"class":125,"line":1683},[123,117470,2409],{"emptyLinePlaceholder":50},[123,117472,117473],{"class":125,"line":1688},[123,117474,117475],{"class":192},"#安装指定的软件命令\n",[123,117477,117478,117480,117482,117484,117486,117488,117490],{"class":125,"line":1702},[123,117479,24587],{"class":1972},[123,117481,117314],{"class":238},[123,117483,23844],{"class":238},[123,117485,28913],{"class":129},[123,117487,117403],{"class":238},[123,117489,208],{"class":133},[123,117491,51318],{"class":129},[123,117493,117494],{"class":125,"line":1707},[123,117495,2409],{"emptyLinePlaceholder":50},[123,117497,117498],{"class":125,"line":1736},[123,117499,117500],{"class":192},"#安装多个软件包\n",[123,117502,117503,117505,117507,117509,117511,117514,117517,117519,117521,117524,117526,117528],{"class":125,"line":1741},[123,117504,24587],{"class":1972},[123,117506,117314],{"class":238},[123,117508,23844],{"class":238},[123,117510,28913],{"class":129},[123,117512,117513],{"class":238},"package_",[123,117515,117516],{"class":129},"1>",[123,117518,28913],{"class":129},[123,117520,117513],{"class":238},[123,117522,117523],{"class":129},"2>",[123,117525,28913],{"class":129},[123,117527,117513],{"class":238},[123,117529,117530],{"class":129},"3>\n",[123,117532,117533],{"class":125,"line":1758},[123,117534,2409],{"emptyLinePlaceholder":50},[123,117536,117537],{"class":125,"line":1763},[123,117538,117539],{"class":192},"#更新指定的软件命令\n",[123,117541,117542,117544,117546,117548,117550,117552,117554],{"class":125,"line":1768},[123,117543,24587],{"class":1972},[123,117545,117314],{"class":238},[123,117547,117344],{"class":238},[123,117549,28913],{"class":129},[123,117551,117403],{"class":238},[123,117553,208],{"class":133},[123,117555,51318],{"class":129},[123,117557,117558],{"class":125,"line":1773},[123,117559,2409],{"emptyLinePlaceholder":50},[123,117561,117562],{"class":125,"line":1787},[123,117563,117564],{"class":192},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[123,117566,117567,117569,117572,117574,117576,117578],{"class":125,"line":1792},[123,117568,117365],{"class":1972},[123,117570,117571],{"class":238}," show",[123,117573,28913],{"class":129},[123,117575,117403],{"class":238},[123,117577,208],{"class":133},[123,117579,51318],{"class":129},[123,117581,117582],{"class":125,"line":2586},[123,117583,2409],{"emptyLinePlaceholder":50},[123,117585,117586],{"class":125,"line":2600},[123,117587,117588],{"class":192},"#删除软件包命令\n",[123,117590,117591,117593,117595,117597,117599,117601,117603],{"class":125,"line":2608},[123,117592,24587],{"class":1972},[123,117594,117314],{"class":238},[123,117596,26090],{"class":238},[123,117598,28913],{"class":129},[123,117600,117403],{"class":238},[123,117602,208],{"class":133},[123,117604,51318],{"class":129},[123,117606,117607],{"class":125,"line":2613},[123,117608,2409],{"emptyLinePlaceholder":50},[123,117610,117611],{"class":125,"line":2619},[123,117612,117613],{"class":192},"# 清理旧版本和缓存（释放磁盘空间）\n",[123,117615,117616,117618,117620,117623],{"class":125,"line":2625},[123,117617,24587],{"class":1972},[123,117619,117314],{"class":238},[123,117621,117622],{"class":238}," autoremove",[123,117624,117625],{"class":192},"  # 删除不再需要的依赖和库文件\n",[123,117627,117628,117630,117632,117635],{"class":125,"line":2630},[123,117629,24587],{"class":1972},[123,117631,117314],{"class":238},[123,117633,117634],{"class":238}," clean",[123,117636,117637],{"class":192},"       # 清理下载的缓存包\n",[123,117639,117640],{"class":125,"line":7958},[123,117641,2409],{"emptyLinePlaceholder":50},[123,117643,117644],{"class":125,"line":7982},[123,117645,117646],{"class":192},"#移除软件包及配置文件\n",[123,117648,117649,117651,117653,117656,117658,117660,117662],{"class":125,"line":7987},[123,117650,24587],{"class":1972},[123,117652,117314],{"class":238},[123,117654,117655],{"class":238}," purge",[123,117657,28913],{"class":129},[123,117659,117403],{"class":238},[123,117661,208],{"class":133},[123,117663,51318],{"class":129},[123,117665,117666],{"class":125,"line":7993},[123,117667,2409],{"emptyLinePlaceholder":50},[123,117669,117670],{"class":125,"line":8020},[123,117671,117672],{"class":192},"#查找软件包命令\n",[123,117674,117675,117677,117679,117682,117684,117687,117689],{"class":125,"line":8025},[123,117676,24587],{"class":1972},[123,117678,117314],{"class":238},[123,117680,117681],{"class":238}," search",[123,117683,28913],{"class":129},[123,117685,117686],{"class":238},"keywor",[123,117688,448],{"class":133},[123,117690,51318],{"class":129},[123,117692,117693],{"class":125,"line":8031},[123,117694,2409],{"emptyLinePlaceholder":50},[123,117696,117697],{"class":125,"line":8043},[123,117698,117699],{"class":192},"#列出所有已安装的包\n",[123,117701,117702,117704,117706],{"class":125,"line":8055},[123,117703,117365],{"class":1972},[123,117705,117368],{"class":238},[123,117707,117708],{"class":182}," --installed\n",[123,117710,117711],{"class":125,"line":8067},[123,117712,2409],{"emptyLinePlaceholder":50},[123,117714,117715],{"class":125,"line":9726},[123,117716,117717],{"class":192},"#列出所有已安装的包的版本信息\n",[123,117719,117720,117722,117724],{"class":125,"line":9751},[123,117721,117365],{"class":1972},[123,117723,117368],{"class":238},[123,117725,117726],{"class":182}," --all-versions\n",[5136,117728,117729],{},"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":37,"searchDepth":45,"depth":45,"links":117731},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117276,"description":47},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117738,"title":117739,"body":117740,"description":47,"extension":48,"meta":118481,"navigation":50,"path":118482,"seo":118483,"stem":118484,"__hash__":118485},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117741,"toc":118468},[117742,117745,117749,117752,117758,117762,117766,117772,117777,117782,117787,117792,117797,117800,117803,117806,117809,117813,117816,117821,117824,117829,117832,117837,117844,117847,117850,117853,117856,117859,117870,117874,117878,117883,117888,117892,117897,117901,117906,117910,117914,117919,117922,117967,117972,117976,117980,117985,117991,117996,118006,118011,118021,118026,118031,118058,118062,118065,118070,118073,118098,118102,118107,118110,118115,118120,118140,118145,118148,118163,118167,118220,118223,118228,118232,118235,118250,118253,118256,118261,118265,118269,118272,118276,118280,118283,118288,118293,118297,118304,118312,118315,118322,118327,118332,118335,118340,118347,118352,118359,118363,118365,118370,118374,118377,118380,118385,118388,118393,118396,118401,118406,118411,118415,118420,118424,118465],[10,117743,117739],{"id":117744},"_2-linux装机教程",[65,117746,117748],{"id":117747},"_21-实体机","2.1 实体机",[14,117750,117751],{},"使用清华源：（Ubuntu24.04）",[14,117753,117754],{},[372,117755,117756],{"href":117756,"rel":117757},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23875],[65,117759,117761],{"id":117760},"_22-普通虚拟机","2.2 普通虚拟机",[94,117763,117765],{"id":117764},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,117767,117768],{},[372,117769,117770],{"href":117770,"rel":117771},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23875],[14,117773,117774],{},[35,117775],{"alt":37,"src":117776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,117778,117779],{},[35,117780],{"alt":37,"src":117781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,117783,117784],{},[35,117785],{"alt":37,"src":117786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,117788,117789],{},[35,117790],{"alt":37,"src":117791},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,117793,117794],{},[35,117795],{"alt":37,"src":117796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,117798,117799],{},"内存4G（4096MB）；",[14,117801,117802],{},"CPU给4个核；",[14,117804,117805],{},"硬盘动态分配60G；",[14,117807,117808],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[94,117810,117812],{"id":117811},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,117814,117815],{},"按照1.1的步骤下载Ubuntu",[14,117817,117818],{},[35,117819],{"alt":37,"src":117820},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,117822,117823],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,117825,117826],{},[35,117827],{"alt":37,"src":117828},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,117830,117831],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,117833,117834],{},[35,117835],{"alt":37,"src":117836},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,117838,117839,117840,117843],{},"选择“正常安装”(找不到都用Alt+F7)， ",[283,117841,117842],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,117845,117846],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,117848,117849],{},"将改动写入磁盘吗 继续",[14,117851,117852],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,117854,117855],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,117857,117858],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,117860,117861,117862,117865,117866,117869],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[283,117863,117864],{},"除了"," 选不发送系统信息与不升级之外， ",[283,117867,117868],{},"其它"," 都跳过或前进）",[94,117871,117873],{"id":117872},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[22008,117875,117877],{"id":117876},"_2231-全屏","2.2.3.1 全屏",[14,117879,117880],{},[35,117881],{"alt":37,"src":117882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,117884,117885],{},[35,117886],{"alt":37,"src":117887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[22008,117889,117891],{"id":117890},"_2232-文件交换","2.2.3.2 文件交换",[14,117893,117894],{},[35,117895],{"alt":37,"src":117896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[22008,117898,117900],{"id":117899},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,117902,117903],{},[35,117904],{"alt":37,"src":117905},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[65,117907,117909],{"id":117908},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[94,117911,117913],{"id":117912},"_231-简介与优缺点","2.3.1 简介与优缺点",[77,117915,117916],{},[80,117917,117918],{},"什么情况下推荐？",[14,117920,117921],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[77,117923,117924],{"start":45},[80,117925,117926,117927],{},"优缺点：",[77,117928,117929,117959],{},[80,117930,117931,117932],{},"优点：",[77,117933,117934,117937,117944,117947,117950,117953,117956],{},[80,117935,117936],{},"WSL2是最好的Linux发行版;(bushi)",[80,117938,117939,117940,117943],{},"性能损耗极低。且比在Windows上跑深度性能 ",[283,117941,117942],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[80,117945,117946],{},"非常方便调用USB设备，可以USB直通;",[80,117948,117949],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[80,117951,117952],{},"非常方便Win与WSL2互相传文件等协同操作;",[80,117954,117955],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[80,117957,117958],{},"非常方便使用Windows的VScode远程开发;",[80,117960,117961,117962],{},"缺点：",[77,117963,117964],{},[80,117965,117966],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,117968,117969],{},[35,117970],{"alt":37,"src":117971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[94,117973,117975],{"id":117974},"_232-安装教程","2.3.2 安装教程",[22008,117977,117979],{"id":117978},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[77,117981,117982],{},[80,117983,117984],{},"方法一(图形界面)",[14,117986,117987,117988,24629],{},"用Win+R输入",[120,117989,117990],{},"appwiz.cpl",[14,117992,117993],{},[35,117994],{"alt":37,"src":117995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,117997,117998,117999,118002,118003,26484],{},"点击OK进入 ",[283,118000,118001],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[283,118004,118005],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,118007,118008],{},[35,118009],{"alt":37,"src":118010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118012,118013,118014,101015,118017,118020],{},"选择 ",[283,118015,118016],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[283,118018,118019],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118022,118023],{},[35,118024],{"alt":37,"src":118025},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[77,118027,118028],{"start":45},[80,118029,118030],{},"方法二(命令行)",[114,118032,118036],{"className":118033,"code":118034,"language":118035,"meta":37,"style":37},"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",[120,118037,118038,118043,118048,118053],{"__ignoreMap":37},[123,118039,118040],{"class":125,"line":126},[123,118041,118042],{},"# 开启 Linux 子系统\n",[123,118044,118045],{"class":125,"line":45},[123,118046,118047],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[123,118049,118050],{"class":125,"line":1189},[123,118051,118052],{},"# 开启虚拟机平台\n",[123,118054,118055],{"class":125,"line":1204},[123,118056,118057],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[22008,118059,118061],{"id":118060},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118063,118064],{},"用管理员权限打开powershell",[14,118066,118067],{},[35,118068],{"alt":37,"src":118069},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118071,118072],{},"升级WSL并设置默认版本为WSL2",[114,118074,118076],{"className":118033,"code":118075,"language":118035,"meta":37,"style":37},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[120,118077,118078,118083,118088,118093],{"__ignoreMap":37},[123,118079,118080],{"class":125,"line":126},[123,118081,118082],{},"# 更新 wsl\n",[123,118084,118085],{"class":125,"line":45},[123,118086,118087],{},"wsl --update\n",[123,118089,118090],{"class":125,"line":1189},[123,118091,118092],{},"# 将 wsl 版本设置为 wsl2\n",[123,118094,118095],{"class":125,"line":1204},[123,118096,118097],{},"wsl --set-default-version 2\n",[22008,118099,118101],{"id":118100},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[77,118103,118104],{},[80,118105,118106],{},"方式一(商店下载)",[14,118108,118109],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118111,118112],{},[35,118113],{"alt":37,"src":118114},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[77,118116,118117],{"start":45},[80,118118,118119],{},"方式二(命令行安装)",[114,118121,118123],{"className":118033,"code":118122,"language":118035,"meta":37,"style":37},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[120,118124,118125,118130,118135],{"__ignoreMap":37},[123,118126,118127],{"class":125,"line":126},[123,118128,118129],{},"# 列出可安装的 Linux 版本\n",[123,118131,118132],{"class":125,"line":45},[123,118133,118134],{},"#（需要科学手段）\n",[123,118136,118137],{"class":125,"line":1189},[123,118138,118139],{},"wsl --list --online\n",[14,118141,118142],{},[35,118143],{"alt":37,"src":118144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118146,118147],{},"选择对应发行版并安装",[114,118149,118151],{"className":118033,"code":118150,"language":118035,"meta":37,"style":37},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[120,118152,118153,118158],{"__ignoreMap":37},[123,118154,118155],{"class":125,"line":126},[123,118156,118157],{},"# Ubuntu安装完毕后需要重启系统\n",[123,118159,118160],{"class":125,"line":45},[123,118161,118162],{},"wsl --install -d Ubuntu-24.04\n",[22008,118164,118166],{"id":118165},"_2324-查看系统状态","2.3.2.4 查看系统状态",[114,118168,118170],{"className":118033,"code":118169,"language":118035,"meta":37,"style":37},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[120,118171,118172,118177,118182,118187,118192,118196,118200,118205,118210,118215],{"__ignoreMap":37},[123,118173,118174],{"class":125,"line":126},[123,118175,118176],{},"# 查看 wsl\n",[123,118178,118179],{"class":125,"line":45},[123,118180,118181],{},"wsl -l\n",[123,118183,118184],{"class":125,"line":1189},[123,118185,118186],{},"# 查看 wsl 运行版本或模式\n",[123,118188,118189],{"class":125,"line":1204},[123,118190,118191],{},"wsl -l -v\n",[123,118193,118194],{"class":125,"line":1210},[123,118195,2409],{"emptyLinePlaceholder":50},[123,118197,118198],{"class":125,"line":1224},[123,118199,2409],{"emptyLinePlaceholder":50},[123,118201,118202],{"class":125,"line":1230},[123,118203,118204],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[123,118206,118207],{"class":125,"line":1321},[123,118208,118209],{},"wsl --set-version \u003Cdistro> 2\n",[123,118211,118212],{"class":125,"line":1327},[123,118213,118214],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[123,118216,118217],{"class":125,"line":1339},[123,118218,118219],{},"wsl --unregister \u003Cdistro>\n",[14,118221,118222],{},"输出Version为2即正常",[14,118224,118225],{},[35,118226],{"alt":37,"src":118227},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[22008,118229,118231],{"id":118230},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118233,118234],{},"直接在Powershell里输入wsl命令进入子系统",[114,118236,118238],{"className":118033,"code":118237,"language":118035,"meta":37,"style":37},"# 进入子系统\nwsl\n",[120,118239,118240,118245],{"__ignoreMap":37},[123,118241,118242],{"class":125,"line":126},[123,118243,118244],{},"# 进入子系统\n",[123,118246,118247],{"class":125,"line":45},[123,118248,118249],{},"wsl\n",[14,118251,118252],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118254,118255],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118257,118258],{},[35,118259],{"alt":37,"src":118260},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[94,118262,118264],{"id":118263},"_233-配置各种环境","2.3.3 配置各种环境",[22008,118266,118268],{"id":118267},"_2331-换源","2.3.3.1 换源",[14,118270,118271],{},"(同实体机LINUX，往下找教程)",[22008,118273,118275],{"id":118274},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22920,118277,118279],{"id":118278},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118281,118282],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118284,118285],{},[35,118286],{"alt":37,"src":118287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118289,118290],{},[35,118291],{"alt":37,"src":118292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22920,118294,118296],{"id":118295},"_23322-cuda","2.3.3.2.2 CUDA",[14,118298,118299,118300],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[372,118301,118302],{"href":118302,"rel":118303},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23875],[14,118305,118306,118309],{},[35,118307],{"alt":37,"src":118308},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[35,118310],{"alt":37,"src":118311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118313,118314],{},"在下方的网站，选择合适的版本。",[14,118316,118317,118318],{},"WSL2 专属 CUDA 指南：",[372,118319,118320],{"href":118320,"rel":118321},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23875],[14,118323,118324],{},[283,118325,118326],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118328,118329],{},[35,118330],{"alt":37,"src":118331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118333,118334],{},"挨行敲一遍",[14,118336,118337],{},[35,118338],{"alt":37,"src":118339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118341,118342,118343,118346],{},"敲完后，输入",[120,118344,118345],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118348,118349],{},[35,118350],{"alt":37,"src":118351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118353,118354,118355,118358],{},"（请详看下方教程的",[283,118356,118357],{},"安装CUDA的配置环境来看","如何配置环境）",[22920,118360,118362],{"id":118361},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118364,118271],{},[14,118366,118367],{},[35,118368],{"alt":37,"src":118369},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[22008,118371,118373],{"id":118372},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118375,118376],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118378,118379],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118381,118382],{},[35,118383],{"alt":37,"src":118384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118386,118387],{},"连接WSL2",[14,118389,118390],{},[35,118391],{"alt":37,"src":118392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118394,118395],{},"远程开发成功。",[14,118397,118398],{},[35,118399],{"alt":37,"src":118400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118402,118403],{},[35,118404],{"alt":37,"src":118405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118407,118408],{},[35,118409],{"alt":37,"src":118410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[22008,118412,118414],{"id":118413},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118416,118417],{},[35,118418],{"alt":37,"src":118419},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[22008,118421,118423],{"id":118422},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[114,118425,118427],{"className":117293,"code":118426,"language":117295,"meta":37,"style":37},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[120,118428,118429,118437,118445,118456,118460],{"__ignoreMap":37},[123,118430,118431,118433,118435],{"class":125,"line":126},[123,118432,24587],{"class":1972},[123,118434,117314],{"class":238},[123,118436,26253],{"class":238},[123,118438,118439,118441,118443],{"class":125,"line":45},[123,118440,24587],{"class":1972},[123,118442,117314],{"class":238},[123,118444,117330],{"class":238},[123,118446,118447,118449,118451,118453],{"class":125,"line":1189},[123,118448,24587],{"class":1972},[123,118450,117314],{"class":238},[123,118452,23844],{"class":238},[123,118454,118455],{"class":238}," mesa-utils\n",[123,118457,118458],{"class":125,"line":1204},[123,118459,2409],{"emptyLinePlaceholder":50},[123,118461,118462],{"class":125,"line":1210},[123,118463,118464],{"class":192},"#然后重启wsl2即可\n",[5136,118466,118467],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":37,"searchDepth":45,"depth":45,"links":118469},[118470,118471,118476],{"id":117747,"depth":45,"text":117748},{"id":117760,"depth":45,"text":117761,"children":118472},[118473,118474,118475],{"id":117764,"depth":1189,"text":117765},{"id":117811,"depth":1189,"text":117812},{"id":117872,"depth":1189,"text":117873},{"id":117908,"depth":45,"text":117909,"children":118477},[118478,118479,118480],{"id":117912,"depth":1189,"text":117913},{"id":117974,"depth":1189,"text":117975},{"id":118263,"depth":1189,"text":118264},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117739,"description":47},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118487,"title":118488,"body":118489,"description":47,"extension":48,"meta":121425,"navigation":50,"path":121426,"seo":121427,"stem":121428,"__hash__":121429},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118490,"toc":121397},[118491,118494,118498,118504,118508,118514,118518,118706,118709,118714,118718,118722,118725,118728,118734,118739,118742,118745,118750,118783,118788,118792,118869,118872,118877,118881,118884,118923,118926,118935,118953,118958,118965,119082,119087,119090,119117,119122,119126,119135,119185,119192,119196,119199,119213,119220,119254,119259,119263,119286,119289,119294,119298,119301,119304,119307,119349,119353,119356,119359,119400,119404,119408,119411,119416,119421,119424,119447,119450,119458,119463,119466,119471,119476,119479,119484,119488,119493,119516,119521,119583,119591,119596,119601,119604,119609,119612,119617,119622,119640,119645,119651,119656,119670,119674,119677,119680,119683,119726,119729,119734,119835,119838,119843,119847,119851,119888,119892,119896,119900,119946,119950,119995,119999,120006,120014,120069,120072,120149,120152,120175,120179,120182,120187,120192,120200,120203,120208,120213,120218,120221,120226,120235,120238,120243,120246,120317,120322,120325,120330,120333,120338,120341,120346,120349,120354,120359,120362,120437,120440,120453,120458,120461,120475,120478,120507,120512,120541,120544,120549,120553,120558,120567,120570,120575,120578,120583,120586,120589,120594,120597,120602,120607,120610,120615,120618,120743,120748,120778,120781,120786,120791,120808,120811,120854,120857,120884,120889,120902,121045,121049,121054,121068,121071,121122,121125,121155,121158,121174,121179,121193,121196,121263,121268,121277,121282,121285,121297,121302,121309,121333,121336,121341,121344,121363,121368,121375,121387,121394],[10,118492,118488],{"id":118493},"_3-安装必备配置",[65,118495,118497],{"id":118496},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[114,118499,118502],{"className":118500,"code":118501,"language":5197},[5195],"  打开下方网站（注意，该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",[120,118503,118501],{"__ignoreMap":37},[94,118505,118507],{"id":118506},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[114,118509,118512],{"className":118510,"code":118511,"language":5197},[5195],"  输入以下命令\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",[120,118513,118511],{"__ignoreMap":37},[94,118515,118517],{"id":118516},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[114,118519,118523],{"className":118520,"code":118521,"language":118522,"meta":37,"style":37},"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",[120,118524,118525,118533,118544,118556,118570,118574,118584,118589,118593,118597,118602,118606,118618,118622,118627,118631,118642,118646,118662,118666,118677,118681,118686,118690,118698],{"__ignoreMap":37},[123,118526,118527,118529,118531],{"class":125,"line":126},[123,118528,24587],{"class":1972},[123,118530,117314],{"class":238},[123,118532,26253],{"class":238},[123,118534,118535,118537,118539,118541],{"class":125,"line":45},[123,118536,24587],{"class":1972},[123,118538,117314],{"class":238},[123,118540,23844],{"class":238},[123,118542,118543],{"class":238}," vim\n",[123,118545,118546,118548,118551,118553],{"class":125,"line":1189},[123,118547,24587],{"class":1972},[123,118549,118550],{"class":238}," rm",[123,118552,25336],{"class":182},[123,118554,118555],{"class":238}," \u002Fetc\u002Fapt\u002Fsources.list\n",[123,118557,118558,118560,118562,118564,118567],{"class":125,"line":1204},[123,118559,24587],{"class":1972},[123,118561,118550],{"class":238},[123,118563,25336],{"class":182},[123,118565,118566],{"class":238}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[123,118568,118569],{"class":182},"**\n",[123,118571,118572],{"class":125,"line":1210},[123,118573,2409],{"emptyLinePlaceholder":50},[123,118575,118576,118578,118581],{"class":125,"line":1224},[123,118577,24587],{"class":1972},[123,118579,118580],{"class":238}," vim",[123,118582,118583],{"class":238}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[123,118585,118586],{"class":125,"line":1230},[123,118587,118588],{"class":238},"```\n",[123,118590,118591],{"class":125,"line":1321},[123,118592,2409],{"emptyLinePlaceholder":50},[123,118594,118595],{"class":125,"line":1327},[123,118596,2409],{"emptyLinePlaceholder":50},[123,118598,118599],{"class":125,"line":1339},[123,118600,118601],{"class":1972},"选择好Ubuntu版本后，复制下方的内容。\n",[123,118603,118604],{"class":125,"line":1621},[123,118605,2409],{"emptyLinePlaceholder":50},[123,118607,118608,118610,118613,118616],{"class":125,"line":1626},[123,118609,360],{"class":129},[123,118611,118612],{"class":238},"[](",[123,118614,118615],{"class":1972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[123,118617,140],{"class":238},[123,118619,118620],{"class":125,"line":1632},[123,118621,2409],{"emptyLinePlaceholder":50},[123,118623,118624],{"class":125,"line":1637},[123,118625,118626],{"class":1972},"粘贴进去\n",[123,118628,118629],{"class":125,"line":1651},[123,118630,2409],{"emptyLinePlaceholder":50},[123,118632,118633,118635,118637,118640],{"class":125,"line":1656},[123,118634,360],{"class":129},[123,118636,118612],{"class":238},[123,118638,118639],{"class":1972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[123,118641,140],{"class":238},[123,118643,118644],{"class":125,"line":1662},[123,118645,2409],{"emptyLinePlaceholder":50},[123,118647,118648,118651,118654,118657,118659],{"class":125,"line":1683},[123,118649,118650],{"class":1972},"按一下ESC，然后英文冒号，输入",[123,118652,118653],{"class":238}," `",[123,118655,118656],{"class":1972},":wq!",[123,118658,1106],{"class":238},[123,118660,118661],{"class":1972},"然后回车\n",[123,118663,118664],{"class":125,"line":1688},[123,118665,2409],{"emptyLinePlaceholder":50},[123,118667,118668,118670,118672,118675],{"class":125,"line":1702},[123,118669,360],{"class":129},[123,118671,118612],{"class":238},[123,118673,118674],{"class":1972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[123,118676,140],{"class":238},[123,118678,118679],{"class":125,"line":1707},[123,118680,2409],{"emptyLinePlaceholder":50},[123,118682,118683],{"class":125,"line":1736},[123,118684,118685],{"class":1972},"输入以下命令\n",[123,118687,118688],{"class":125,"line":1741},[123,118689,2409],{"emptyLinePlaceholder":50},[123,118691,118692,118695],{"class":125,"line":1758},[123,118693,118694],{"class":238},"```",[123,118696,118697],{"class":1972},"Bash\n",[123,118699,118700,118702,118704],{"class":125,"line":1763},[123,118701,24587],{"class":1972},[123,118703,117314],{"class":238},[123,118705,26253],{"class":238},[14,118707,118708],{},"这里被替换成对应学校则成功",[14,118710,118711],{},[35,118712],{"alt":37,"src":118713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[65,118715,118717],{"id":118716},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[94,118719,118721],{"id":118720},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,118723,118724],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,118726,118727],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,118729,118730],{},[372,118731,118732],{"href":118732,"rel":118733},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23875],[14,118735,118736],{},[35,118737],{"alt":37,"src":118738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,118740,118741],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,118743,118744],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,118746,118747],{},[35,118748],{"alt":37,"src":118749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[114,118751,118753],{"className":117293,"code":118752,"language":117295,"meta":37,"style":37},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[120,118754,118755,118760,118767,118772],{"__ignoreMap":37},[123,118756,118757],{"class":125,"line":126},[123,118758,118759],{"class":192},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[123,118761,118762,118764],{"class":125,"line":45},[123,118763,101273],{"class":182},[123,118765,118766],{"class":238}," ~\u002FDownloads\n",[123,118768,118769],{"class":125,"line":1189},[123,118770,118771],{"class":192},"#下方chrome安装包名不一定是这个，根据名字来看\n",[123,118773,118774,118776,118778,118780],{"class":125,"line":1204},[123,118775,24587],{"class":1972},[123,118777,117314],{"class":238},[123,118779,23844],{"class":238},[123,118781,118782],{"class":238}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,118784,118785],{},[35,118786],{"alt":37,"src":118787},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[94,118789,118791],{"id":118790},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[114,118793,118795],{"className":117293,"code":118794,"language":117295,"meta":37,"style":37},"# 老版\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",[120,118796,118797,118802,118810,118821,118826,118830,118835,118845,118853,118864],{"__ignoreMap":37},[123,118798,118799],{"class":125,"line":126},[123,118800,118801],{"class":192},"# 老版\n",[123,118803,118804,118806,118808],{"class":125,"line":45},[123,118805,24587],{"class":1972},[123,118807,117314],{"class":238},[123,118809,26253],{"class":238},[123,118811,118812,118814,118816,118818],{"class":125,"line":1189},[123,118813,24587],{"class":1972},[123,118815,117314],{"class":238},[123,118817,23844],{"class":238},[123,118819,118820],{"class":238}," neofetch\n",[123,118822,118823],{"class":125,"line":1204},[123,118824,118825],{"class":1972},"neofetch\n",[123,118827,118828],{"class":125,"line":1210},[123,118829,2409],{"emptyLinePlaceholder":50},[123,118831,118832],{"class":125,"line":1224},[123,118833,118834],{"class":192},"# 新版\n",[123,118836,118837,118839,118842],{"class":125,"line":1230},[123,118838,24587],{"class":1972},[123,118840,118841],{"class":238}," add-apt-repository",[123,118843,118844],{"class":238}," ppa:zhangsongcui3371\u002Ffastfetch\n",[123,118846,118847,118849,118851],{"class":125,"line":1321},[123,118848,24587],{"class":1972},[123,118850,117314],{"class":238},[123,118852,26253],{"class":238},[123,118854,118855,118857,118859,118861],{"class":125,"line":1327},[123,118856,24587],{"class":1972},[123,118858,117314],{"class":238},[123,118860,23844],{"class":238},[123,118862,118863],{"class":238}," fastfetch\n",[123,118865,118866],{"class":125,"line":1339},[123,118867,118868],{"class":1972},"fastfetch\n",[14,118870,118871],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,118873,118874],{},[35,118875],{"alt":37,"src":118876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[94,118878,118880],{"id":118879},"_323-移除snap应用","3.2.3 移除snap应用",[14,118882,118883],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[114,118885,118887],{"className":117293,"code":118886,"language":117295,"meta":37,"style":37},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[120,118888,118889,118901,118912],{"__ignoreMap":37},[123,118890,118891,118893,118895,118898],{"class":125,"line":126},[123,118892,24587],{"class":1972},[123,118894,26524],{"class":238},[123,118896,118897],{"class":238}," disable",[123,118899,118900],{"class":238}," snapd.service\n",[123,118902,118903,118905,118907,118909],{"class":125,"line":45},[123,118904,24587],{"class":1972},[123,118906,26524],{"class":238},[123,118908,118897],{"class":238},[123,118910,118911],{"class":238}," snapd.socket\n",[123,118913,118914,118916,118918,118920],{"class":125,"line":1189},[123,118915,24587],{"class":1972},[123,118917,26524],{"class":238},[123,118919,118897],{"class":238},[123,118921,118922],{"class":238}," snapd.seeded.service\n",[14,118924,118925],{},"然后查看snap应用列表",[14,118927,118928,118929,118934],{},"根据你安装的选择不同（最小安装或普通安装），有",[372,118930,118933],{"href":118931,"rel":118932},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23875],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[114,118936,118938],{"className":117293,"code":118937,"language":117295,"meta":37,"style":37},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[120,118939,118940,118945],{"__ignoreMap":37},[123,118941,118942],{"class":125,"line":126},[123,118943,118944],{"class":192},"# 查询当前系统上snap安装了哪些app\n",[123,118946,118947,118950],{"class":125,"line":45},[123,118948,118949],{"class":1972},"snap",[123,118951,118952],{"class":238}," list\n",[14,118954,118955],{},[35,118956],{"alt":37,"src":118957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,118959,118960,118961,118964],{},"卸载掉图中所有应用，按照 ",[283,118962,118963],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[114,118966,118968],{"className":117293,"code":118967,"language":117295,"meta":37,"style":37},"#移除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",[120,118969,118970,118975,118987,118992,119003,119008,119019,119024,119035,119040,119044,119049,119060,119071],{"__ignoreMap":37},[123,118971,118972],{"class":125,"line":126},[123,118973,118974],{"class":192},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[123,118976,118977,118979,118982,118984],{"class":125,"line":45},[123,118978,24587],{"class":1972},[123,118980,118981],{"class":238}," snap",[123,118983,26090],{"class":238},[123,118985,118986],{"class":238}," snap-store\n",[123,118988,118989],{"class":125,"line":1189},[123,118990,118991],{"class":192},"#移除firefox浏览器\n",[123,118993,118994,118996,118998,119000],{"class":125,"line":1204},[123,118995,24587],{"class":1972},[123,118997,118981],{"class":238},[123,118999,26090],{"class":238},[123,119001,119002],{"class":238}," firefox\n",[123,119004,119005],{"class":125,"line":1210},[123,119006,119007],{"class":192},"#移除gnome-42-2204\n",[123,119009,119010,119012,119014,119016],{"class":125,"line":1224},[123,119011,24587],{"class":1972},[123,119013,118981],{"class":238},[123,119015,26090],{"class":238},[123,119017,119018],{"class":238}," gnome-42-2204\n",[123,119020,119021],{"class":125,"line":1230},[123,119022,119023],{"class":192},"#移除gtk-common-themes\n",[123,119025,119026,119028,119030,119032],{"class":125,"line":1321},[123,119027,24587],{"class":1972},[123,119029,118981],{"class":238},[123,119031,26090],{"class":238},[123,119033,119034],{"class":238}," gtk-common-themes\n",[123,119036,119037],{"class":125,"line":1327},[123,119038,119039],{"class":192},"#移除其它...\n",[123,119041,119042],{"class":125,"line":1339},[123,119043,2683],{"class":133},[123,119045,119046],{"class":125,"line":1621},[123,119047,119048],{"class":192},"#移除core22,bare以及snapd\n",[123,119050,119051,119053,119055,119057],{"class":125,"line":1626},[123,119052,24587],{"class":1972},[123,119054,118981],{"class":238},[123,119056,26090],{"class":238},[123,119058,119059],{"class":238}," core22\n",[123,119061,119062,119064,119066,119068],{"class":125,"line":1632},[123,119063,24587],{"class":1972},[123,119065,118981],{"class":238},[123,119067,26090],{"class":238},[123,119069,119070],{"class":238}," bare\n",[123,119072,119073,119075,119077,119079],{"class":125,"line":1637},[123,119074,24587],{"class":1972},[123,119076,118981],{"class":238},[123,119078,26090],{"class":238},[123,119080,119081],{"class":238}," snapd\n",[14,119083,119084],{},[35,119085],{"alt":37,"src":119086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119088,119089],{},"输入以下命令查看是否还有snap包",[114,119091,119093],{"className":117293,"code":119092,"language":117295,"meta":37,"style":37},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[120,119094,119095,119101,119105,119109,119113],{"__ignoreMap":37},[123,119096,119097,119099],{"class":125,"line":126},[123,119098,118949],{"class":1972},[123,119100,118952],{"class":238},[123,119102,119103],{"class":125,"line":45},[123,119104,118801],{"class":192},[123,119106,119107],{"class":125,"line":1189},[123,119108,118825],{"class":1972},[123,119110,119111],{"class":125,"line":1204},[123,119112,118834],{"class":192},[123,119114,119115],{"class":125,"line":1210},[123,119116,118868],{"class":1972},[14,119118,119119],{},[35,119120],{"alt":37,"src":119121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[94,119123,119125],{"id":119124},"_324-移除snap","3.2.4 移除snap",[14,119127,119128,119129,119134],{},"在删除掉",[372,119130,119133],{"href":119131,"rel":119132},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23875],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[114,119136,119138],{"className":117293,"code":119137,"language":117295,"meta":37,"style":37}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[120,119139,119140,119145,119158,119163,119174],{"__ignoreMap":37},[123,119141,119142],{"class":125,"line":126},[123,119143,119144],{"class":192}," #使用apt移除掉snap\n",[123,119146,119147,119149,119151,119153,119156],{"class":125,"line":45},[123,119148,24587],{"class":1972},[123,119150,117314],{"class":238},[123,119152,117622],{"class":238},[123,119154,119155],{"class":182}," --purge",[123,119157,119081],{"class":238},[123,119159,119160],{"class":125,"line":1189},[123,119161,119162],{"class":192},"#移除snapd的一些目录\n",[123,119164,119165,119167,119169,119171],{"class":125,"line":1204},[123,119166,24587],{"class":1972},[123,119168,118550],{"class":238},[123,119170,25336],{"class":182},[123,119172,119173],{"class":238}," \u002Fvar\u002Fcache\u002Fsnapd\n",[123,119175,119176,119178,119180,119182],{"class":125,"line":1210},[123,119177,24587],{"class":1972},[123,119179,118550],{"class":238},[123,119181,25336],{"class":182},[123,119183,119184],{"class":238}," ~\u002Fsnap\n",[14,119186,119187,119188,119191],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[120,119189,119190],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[94,119193,119195],{"id":119194},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119197,119198],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[114,119200,119202],{"className":117293,"code":119201,"language":117295,"meta":37,"style":37},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[120,119203,119204],{"__ignoreMap":37},[123,119205,119206,119208,119210],{"class":125,"line":126},[123,119207,24587],{"class":1972},[123,119209,118580],{"class":238},[123,119211,119212],{"class":238}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119214,119215,119216,119219],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[120,119217,119218],{},":wq"," 回车",[114,119221,119223],{"className":117293,"code":119222,"language":117295,"meta":37,"style":37},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[120,119224,119225,119232,119246],{"__ignoreMap":37},[123,119226,119227,119230],{"class":125,"line":126},[123,119228,119229],{"class":1972},"Package:",[123,119231,119081],{"class":238},[123,119233,119234,119237,119240,119243],{"class":125,"line":45},[123,119235,119236],{"class":1972},"Pin:",[123,119238,119239],{"class":238}," release",[123,119241,119242],{"class":238}," a=",[123,119244,119245],{"class":182},"*\n",[123,119247,119248,119251],{"class":125,"line":1189},[123,119249,119250],{"class":1972},"Pin-Priority:",[123,119252,119253],{"class":182}," -10\n",[14,119255,119256],{},[35,119257],{"alt":37,"src":119258},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[94,119260,119262],{"id":119261},"_326-测试是否成功","3.2.6 测试是否成功",[114,119264,119266],{"className":117293,"code":119265,"language":117295,"meta":37,"style":37},"sudo apt update\nsudo apt install firefox\n",[120,119267,119268,119276],{"__ignoreMap":37},[123,119269,119270,119272,119274],{"class":125,"line":126},[123,119271,24587],{"class":1972},[123,119273,117314],{"class":238},[123,119275,26253],{"class":238},[123,119277,119278,119280,119282,119284],{"class":125,"line":45},[123,119279,24587],{"class":1972},[123,119281,117314],{"class":238},[123,119283,23844],{"class":238},[123,119285,119002],{"class":238},[14,119287,119288],{},"这里提示snapd无法被安装，就证明成功了",[14,119290,119291],{},[35,119292],{"alt":37,"src":119293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[94,119295,119297],{"id":119296},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119299,119300],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119302,119303],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119305,119306],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[114,119308,119310],{"className":117293,"code":119309,"language":117295,"meta":37,"style":37},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[120,119311,119312,119317,119326,119331,119339],{"__ignoreMap":37},[123,119313,119314],{"class":125,"line":126},[123,119315,119316],{"class":192},"# 添加Mozilla提供的源\n",[123,119318,119319,119321,119323],{"class":125,"line":45},[123,119320,24587],{"class":1972},[123,119322,118841],{"class":238},[123,119324,119325],{"class":238}," ppa:mozillateam\u002Fppa\n",[123,119327,119328],{"class":125,"line":1189},[123,119329,119330],{"class":192},"# 安装Firefox\n",[123,119332,119333,119335,119337],{"class":125,"line":1204},[123,119334,24587],{"class":1972},[123,119336,117314],{"class":238},[123,119338,26253],{"class":238},[123,119340,119341,119343,119345,119347],{"class":125,"line":1210},[123,119342,24587],{"class":1972},[123,119344,117314],{"class":238},[123,119346,23844],{"class":238},[123,119348,119002],{"class":238},[94,119350,119352],{"id":119351},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119354,119355],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119357,119358],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[114,119360,119362],{"className":117293,"code":119361,"language":117295,"meta":37,"style":37},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[120,119363,119364,119369,119379,119387,119391],{"__ignoreMap":37},[123,119365,119366],{"class":125,"line":126},[123,119367,119368],{"class":192},"#删掉禁止安装snap的配置文件\n",[123,119370,119371,119373,119375,119377],{"class":125,"line":45},[123,119372,24587],{"class":1972},[123,119374,118550],{"class":238},[123,119376,25336],{"class":182},[123,119378,119212],{"class":238},[123,119380,119381,119383,119385],{"class":125,"line":1189},[123,119382,24587],{"class":1972},[123,119384,117314],{"class":238},[123,119386,26253],{"class":238},[123,119388,119389],{"class":125,"line":1204},[123,119390,2409],{"emptyLinePlaceholder":50},[123,119392,119393,119395,119397],{"class":125,"line":1210},[123,119394,24587],{"class":1972},[123,119396,117314],{"class":238},[123,119398,119399],{"class":238}," dist-update\n",[65,119401,119403],{"id":119402},"_33-中文输入法","3.3 中文输入法",[94,119405,119407],{"id":119406},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119409,119410],{},"官网下载搜狗输入法",[14,119412,119413],{},[35,119414],{"alt":37,"src":119415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119417,119418],{},[35,119419],{"alt":37,"src":119420},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119422,119423],{},"打开终端输入如下",[114,119425,119427],{"className":117293,"code":119426,"language":117295,"meta":37,"style":37},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[120,119428,119429,119436],{"__ignoreMap":37},[123,119430,119431,119433],{"class":125,"line":126},[123,119432,101273],{"class":182},[123,119434,119435],{"class":238}," ~\u002FDownloads\u002F\n",[123,119437,119438,119440,119442,119444],{"class":125,"line":45},[123,119439,24587],{"class":1972},[123,119441,117314],{"class":238},[123,119443,23844],{"class":238},[123,119445,119446],{"class":238}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119448,119449],{},"打开Fcitx",[14,119451,119452,119455],{},[35,119453],{"alt":37,"src":119454},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[35,119456],{"alt":37,"src":119457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119459,119460],{},[35,119461],{"alt":37,"src":119462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119464,119465],{},"添加搜狗输入法",[14,119467,119468],{},[35,119469],{"alt":37,"src":119470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119472,119473],{},[35,119474],{"alt":37,"src":119475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119477,119478],{},"将搜狗输入法设置为唯一输入法",[14,119480,119481],{},[35,119482],{"alt":37,"src":119483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[94,119485,119487],{"id":119486},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[77,119489,119490],{},[80,119491,119492],{},"卸载旧输入法",[114,119494,119496],{"className":118520,"code":119495,"language":118522,"meta":37,"style":37},"sudo apt purge fcitx* ibus*\n",[120,119497,119498],{"__ignoreMap":37},[123,119499,119500,119502,119504,119506,119509,119511,119514],{"class":125,"line":126},[123,119501,24587],{"class":1972},[123,119503,117314],{"class":238},[123,119505,117655],{"class":238},[123,119507,119508],{"class":238}," fcitx",[123,119510,589],{"class":182},[123,119512,119513],{"class":238}," ibus",[123,119515,119245],{"class":182},[77,119517,119518],{"start":45},[80,119519,119520],{},"安装Fcitx5",[114,119522,119524],{"className":117293,"code":119523,"language":117295,"meta":37,"style":37},"# 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",[120,119525,119526,119531,119545,119549,119554,119563,119571],{"__ignoreMap":37},[123,119527,119528],{"class":125,"line":126},[123,119529,119530],{"class":192},"# Ubuntu22.04及以上、Debian12及以上\n",[123,119532,119533,119535,119537,119539,119542],{"class":125,"line":45},[123,119534,24587],{"class":1972},[123,119536,117314],{"class":238},[123,119538,23844],{"class":238},[123,119540,119541],{"class":238}," fcitx5",[123,119543,119544],{"class":238}," fcitx5-chinese-addons\n",[123,119546,119547],{"class":125,"line":1189},[123,119548,2409],{"emptyLinePlaceholder":50},[123,119550,119551],{"class":125,"line":1204},[123,119552,119553],{"class":192},"# Ubuntu20.04\n",[123,119555,119556,119558,119560],{"class":125,"line":1210},[123,119557,24587],{"class":1972},[123,119559,118841],{"class":238},[123,119561,119562],{"class":238}," ppa:zhsj\u002Ffcitx5\n",[123,119564,119565,119567,119569],{"class":125,"line":1224},[123,119566,24587],{"class":1972},[123,119568,117314],{"class":238},[123,119570,26253],{"class":238},[123,119572,119573,119575,119577,119579,119581],{"class":125,"line":1230},[123,119574,24587],{"class":1972},[123,119576,117314],{"class":238},[123,119578,23844],{"class":238},[123,119580,119541],{"class":238},[123,119582,119544],{"class":238},[77,119584,119585,119588],{"start":1189},[80,119586,119587],{},"Reboot System",[80,119589,119590],{},"启动Fcitx5",[14,119592,119593],{},[35,119594],{"alt":37,"src":119595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[77,119597,119598],{"start":1210},[80,119599,119600],{},"修改一些设置",[14,119602,119603],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119605,119606],{},[35,119607],{"alt":37,"src":119608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,119610,119611],{},"添加快捷键以便于更好切换中英文",[14,119613,119614],{},[35,119615],{"alt":37,"src":119616},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[77,119618,119619],{"start":1224},[80,119620,119621],{},"重启",[114,119623,119625],{"className":118520,"code":119624,"language":118522,"meta":37,"style":37},"sudo shutdown -r now\n",[120,119626,119627],{"__ignoreMap":37},[123,119628,119629,119631,119634,119637],{"class":125,"line":126},[123,119630,24587],{"class":1972},[123,119632,119633],{"class":238}," shutdown",[123,119635,119636],{"class":182}," -r",[123,119638,119639],{"class":238}," now\n",[77,119641,119642],{"start":1230},[80,119643,119644],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,119646,119647],{},[372,119648,119649],{"href":119649,"rel":119650},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23875],[77,119652,119653],{"start":1321},[80,119654,119655],{},"再重启",[114,119657,119658],{"className":118520,"code":119624,"language":118522,"meta":37,"style":37},[120,119659,119660],{"__ignoreMap":37},[123,119661,119662,119664,119666,119668],{"class":125,"line":126},[123,119663,24587],{"class":1972},[123,119665,119633],{"class":238},[123,119667,119636],{"class":182},[123,119669,119639],{"class":238},[65,119671,119673],{"id":119672},"_34-pip3源替换","3.4 pip3源替换",[14,119675,119676],{},"非Debian系发行版需要做。",[14,119678,119679],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,119681,119682],{},"使用dnf的系统也可能不用做。",[114,119684,119686],{"className":117293,"code":119685,"language":117295,"meta":37,"style":37},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[120,119687,119688,119693,119700,119705,119710],{"__ignoreMap":37},[123,119689,119690],{"class":125,"line":126},[123,119691,119692],{"class":192},"# 检查是否已安装 pip\n",[123,119694,119695,119698],{"class":125,"line":45},[123,119696,119697],{"class":1972},"pip3",[123,119699,26304],{"class":182},[123,119701,119702],{"class":125,"line":1189},[123,119703,119704],{"class":192},"# 如果未安装，先安装 pip3（见下方）\n",[123,119706,119707],{"class":125,"line":1204},[123,119708,119709],{"class":192},"# 配置 pip 使用清华源\n",[123,119711,119712,119714,119717,119720,119723],{"class":125,"line":1210},[123,119713,119697],{"class":1972},[123,119715,119716],{"class":238}," config",[123,119718,119719],{"class":238}," set",[123,119721,119722],{"class":238}," global.index-url",[123,119724,119725],{"class":238}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,119727,119728],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,119730,119731],{},[35,119732],{"alt":37,"src":119733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[114,119735,119737],{"className":117293,"code":119736,"language":117295,"meta":37,"style":37},"#安装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",[120,119738,119739,119744,119752,119763,119767,119772,119791,119795,119800,119812,119816,119821],{"__ignoreMap":37},[123,119740,119741],{"class":125,"line":126},[123,119742,119743],{"class":192},"#安装pip3\n",[123,119745,119746,119748,119750],{"class":125,"line":45},[123,119747,24587],{"class":1972},[123,119749,117314],{"class":238},[123,119751,26253],{"class":238},[123,119753,119754,119756,119758,119760],{"class":125,"line":1189},[123,119755,24587],{"class":1972},[123,119757,26087],{"class":238},[123,119759,23844],{"class":238},[123,119761,119762],{"class":238}," python3-pip\n",[123,119764,119765],{"class":125,"line":1204},[123,119766,2409],{"emptyLinePlaceholder":50},[123,119768,119769],{"class":125,"line":1210},[123,119770,119771],{"class":192},"#更新pip3\n",[123,119773,119774,119776,119778,119780,119782,119784,119787,119789],{"class":125,"line":1224},[123,119775,100876],{"class":1972},[123,119777,100879],{"class":182},[123,119779,100902],{"class":238},[123,119781,23844],{"class":238},[123,119783,26441],{"class":182},[123,119785,119786],{"class":238}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[123,119788,100907],{"class":182},[123,119790,100910],{"class":238},[123,119792,119793],{"class":125,"line":1230},[123,119794,2409],{"emptyLinePlaceholder":50},[123,119796,119797],{"class":125,"line":1321},[123,119798,119799],{"class":192},"#设置pip源为清华源\n",[123,119801,119802,119804,119806,119808,119810],{"class":125,"line":1327},[123,119803,119697],{"class":1972},[123,119805,119716],{"class":238},[123,119807,119719],{"class":238},[123,119809,119722],{"class":238},[123,119811,119725],{"class":238},[123,119813,119814],{"class":125,"line":1339},[123,119815,2409],{"emptyLinePlaceholder":50},[123,119817,119818],{"class":125,"line":1621},[123,119819,119820],{"class":192},"#测试\n",[123,119822,119823,119825,119827,119829,119831,119833],{"class":125,"line":1626},[123,119824,100876],{"class":1972},[123,119826,100879],{"class":182},[123,119828,100902],{"class":238},[123,119830,23844],{"class":238},[123,119832,100907],{"class":182},[123,119834,100910],{"class":238},[14,119836,119837],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,119839,119840],{},[35,119841],{"alt":37,"src":119842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[65,119844,119846],{"id":119845},"_35-显卡驱动安装","3.5 显卡驱动安装",[94,119848,119850],{"id":119849},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[114,119852,119854],{"className":118520,"code":119853,"language":118522,"meta":37,"style":37},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[120,119855,119856,119861,119876,119881],{"__ignoreMap":37},[123,119857,119858],{"class":125,"line":126},[123,119859,119860],{"class":192},"# 如果是使用apt安装的驱动\n",[123,119862,119863,119865,119867,119869,119871,119874],{"class":125,"line":45},[123,119864,24587],{"class":1972},[123,119866,26087],{"class":238},[123,119868,26090],{"class":238},[123,119870,119155],{"class":182},[123,119872,119873],{"class":238}," nvidia",[123,119875,119245],{"class":182},[123,119877,119878],{"class":125,"line":1189},[123,119879,119880],{"class":192},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[123,119882,119883,119885],{"class":125,"line":1204},[123,119884,24587],{"class":1972},[123,119886,119887],{"class":238}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[94,119889,119891],{"id":119890},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[22008,119893,119895],{"id":119894},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22920,119897,119899],{"id":119898},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[114,119901,119903],{"className":118520,"code":119902,"language":118522,"meta":37,"style":37},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[120,119904,119905,119910,119921,119926,119936,119941],{"__ignoreMap":37},[123,119906,119907],{"class":125,"line":126},[123,119908,119909],{"class":192},"# 安装英伟达驱动\n",[123,119911,119912,119914,119916,119918],{"class":125,"line":45},[123,119913,24587],{"class":1972},[123,119915,117314],{"class":238},[123,119917,23844],{"class":238},[123,119919,119920],{"class":238}," nvidia-driver-版本号\n",[123,119922,119923],{"class":125,"line":1189},[123,119924,119925],{"class":192},"# 重启 \n",[123,119927,119928,119930,119932,119934],{"class":125,"line":1204},[123,119929,24587],{"class":1972},[123,119931,119633],{"class":238},[123,119933,119636],{"class":182},[123,119935,119639],{"class":238},[123,119937,119938],{"class":125,"line":1210},[123,119939,119940],{"class":192},"# 检查驱动是否安装成功\n",[123,119942,119943],{"class":125,"line":1224},[123,119944,119945],{"class":1972},"nvidia-smi\n",[22920,119947,119949],{"id":119948},"_35212-debian","3.5.2.1.2 Debian",[114,119951,119953],{"className":118520,"code":119952,"language":118522,"meta":37,"style":37},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[120,119954,119955,119959,119973,119977,119987,119991],{"__ignoreMap":37},[123,119956,119957],{"class":125,"line":126},[123,119958,119909],{"class":192},[123,119960,119961,119963,119965,119967,119970],{"class":125,"line":45},[123,119962,24587],{"class":1972},[123,119964,117314],{"class":238},[123,119966,23844],{"class":238},[123,119968,119969],{"class":238}," nvidia-driver",[123,119971,119972],{"class":238}," nvidia-settings\n",[123,119974,119975],{"class":125,"line":1189},[123,119976,119925],{"class":192},[123,119978,119979,119981,119983,119985],{"class":125,"line":1204},[123,119980,24587],{"class":1972},[123,119982,119633],{"class":238},[123,119984,119636],{"class":182},[123,119986,119639],{"class":238},[123,119988,119989],{"class":125,"line":1210},[123,119990,119940],{"class":192},[123,119992,119993],{"class":125,"line":1224},[123,119994,119945],{"class":1972},[22008,119996,119998],{"id":119997},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,120000,120001,120002,120005],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[283,120003,120004],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,120007,120008,120009],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23563,120010,120011],{},[283,120012,120013],{},"（也可以不禁用桌面环境，直接进行下一步。）",[114,120015,120017],{"className":118520,"code":120016,"language":118522,"meta":37,"style":37},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[120,120018,120019,120024,120034,120039,120052,120057],{"__ignoreMap":37},[123,120020,120021],{"class":125,"line":126},[123,120022,120023],{"class":192},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[123,120025,120026,120028,120031],{"class":125,"line":45},[123,120027,24587],{"class":1972},[123,120029,120030],{"class":238}," telinit",[123,120032,120033],{"class":182}," 3\n",[123,120035,120036],{"class":125,"line":1189},[123,120037,120038],{"class":192},"# ubuntu 使用下方命令\n",[123,120040,120041,120043,120046,120049],{"class":125,"line":1204},[123,120042,24587],{"class":1972},[123,120044,120045],{"class":238}," service",[123,120047,120048],{"class":238}," lightdm",[123,120050,120051],{"class":238}," stop\n",[123,120053,120054],{"class":125,"line":1210},[123,120055,120056],{"class":192},"# Fedora 使用下方命令\n",[123,120058,120059,120061,120063,120066],{"class":125,"line":1224},[123,120060,24587],{"class":1972},[123,120062,26524],{"class":238},[123,120064,120065],{"class":238}," isolate",[123,120067,120068],{"class":238}," multi-user.target\n",[14,120070,120071],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[114,120073,120075],{"className":118520,"code":120074,"language":118522,"meta":37,"style":37},"# 编译环境+准备工作\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",[120,120076,120077,120082,120093,120098,120105,120110,120122,120127,120134,120139],{"__ignoreMap":37},[123,120078,120079],{"class":125,"line":126},[123,120080,120081],{"class":192},"# 编译环境+准备工作\n",[123,120083,120084,120086,120088,120090],{"class":125,"line":45},[123,120085,24587],{"class":1972},[123,120087,117314],{"class":238},[123,120089,23844],{"class":238},[123,120091,120092],{"class":238}," build-essential\n",[123,120094,120095],{"class":125,"line":1189},[123,120096,120097],{"class":192},"# 进入到.run目录中\n",[123,120099,120100,120102],{"class":125,"line":1204},[123,120101,101273],{"class":182},[123,120103,120104],{"class":238}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[123,120106,120107],{"class":125,"line":1210},[123,120108,120109],{"class":192},"# 给驱动文件增加可执行权限：\n",[123,120111,120112,120114,120116,120119],{"class":125,"line":1224},[123,120113,24587],{"class":1972},[123,120115,24590],{"class":238},[123,120117,120118],{"class":238}," a+x",[123,120120,120121],{"class":238}," NVIDIA-Linux-x86_64-550.107.02.run\n",[123,120123,120124],{"class":125,"line":1230},[123,120125,120126],{"class":192},"# 然后执行安装：\n",[123,120128,120129,120131],{"class":125,"line":1321},[123,120130,24587],{"class":1972},[123,120132,120133],{"class":238}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[123,120135,120136],{"class":125,"line":1327},[123,120137,120138],{"class":192},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[123,120140,120141,120143,120146],{"class":125,"line":1339},[123,120142,24587],{"class":1972},[123,120144,120145],{"class":238}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[123,120147,120148],{"class":182},"  --no-opengl-files\n",[14,120150,120151],{},"安装完毕重启即可",[114,120153,120155],{"className":118520,"code":120154,"language":118522,"meta":37,"style":37},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[120,120156,120157,120161,120167,120171],{"__ignoreMap":37},[123,120158,120159],{"class":125,"line":126},[123,120160,119925],{"class":192},[123,120162,120163,120165],{"class":125,"line":45},[123,120164,24587],{"class":1972},[123,120166,26658],{"class":238},[123,120168,120169],{"class":125,"line":1189},[123,120170,119940],{"class":192},[123,120172,120173],{"class":125,"line":1204},[123,120174,119945],{"class":1972},[94,120176,120178],{"id":120177},"_353-安装cuda","3.5.3 安装CUDA",[14,120180,120181],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120183,120184],{},[35,120185],{"alt":37,"src":120186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[77,120188,120189],{},[80,120190,120191],{},"先查看显卡驱动所支持的最高CUDA版本",[114,120193,120194],{"className":118520,"code":119945,"language":118522,"meta":37,"style":37},[120,120195,120196],{"__ignoreMap":37},[123,120197,120198],{"class":125,"line":126},[123,120199,119945],{"class":1972},[14,120201,120202],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120204,120205],{},[35,120206],{"alt":37,"src":120207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[77,120209,120210],{"start":45},[80,120211,120212],{},"下载CUDA并安装CUDA",[14,120214,118299,120215],{},[372,120216,118302],{"href":118302,"rel":120217},[23875],[14,120219,120220],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120222,120223],{},[35,120224],{"alt":37,"src":120225},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120227,120228,120229,120234],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[372,120230,120233],{"href":120231,"rel":120232},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23875],"Vinci机器人队单片机教程","）",[14,120236,120237],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120239,120240],{},[35,120241],{"alt":37,"src":120242},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120244,120245],{},"将最下方框框里的命令敲入终端",[114,120247,120249],{"className":118520,"code":120248,"language":118522,"meta":37,"style":37},"# 在当前文件夹下创建一个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",[120,120250,120251,120256,120265,120270,120277,120282,120290,120295,120306,120311],{"__ignoreMap":37},[123,120252,120253],{"class":125,"line":126},[123,120254,120255],{"class":192},"# 在当前文件夹下创建一个ttt的子文件夹\n",[123,120257,120258,120260,120262],{"class":125,"line":45},[123,120259,101263],{"class":1972},[123,120261,29227],{"class":182},[123,120263,120264],{"class":238}," .\u002Fttt\n",[123,120266,120267],{"class":125,"line":1189},[123,120268,120269],{"class":192},"# 进入ttt文件夹\n",[123,120271,120272,120274],{"class":125,"line":1204},[123,120273,101273],{"class":182},[123,120275,120276],{"class":238}," ttt\n",[123,120278,120279],{"class":125,"line":1210},[123,120280,120281],{"class":192},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[123,120283,120284,120287],{"class":125,"line":1224},[123,120285,120286],{"class":1972},"wget",[123,120288,120289],{"class":238}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[123,120291,120292],{"class":125,"line":1230},[123,120293,120294],{"class":192},"# 给予权限\n",[123,120296,120297,120299,120301,120303],{"class":125,"line":1321},[123,120298,24587],{"class":1972},[123,120300,24590],{"class":238},[123,120302,120118],{"class":238},[123,120304,120305],{"class":238}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[123,120307,120308],{"class":125,"line":1327},[123,120309,120310],{"class":192},"# 运行脚本\n",[123,120312,120313,120315],{"class":125,"line":1339},[123,120314,24587],{"class":1972},[123,120316,120305],{"class":238},[14,120318,120319],{},[35,120320],{"alt":37,"src":120321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120323,120324],{},"正在安装中：",[14,120326,120327],{},[35,120328],{"alt":37,"src":120329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120331,120332],{},"输入accept接受即可",[14,120334,120335],{},[35,120336],{"alt":37,"src":120337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120339,120340],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120342,120343],{},[35,120344],{"alt":37,"src":120345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120347,120348],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120350,120351],{},[35,120352],{"alt":37,"src":120353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[77,120355,120356],{"start":1189},[80,120357,120358],{},"配置环境",[14,120360,120361],{},"根据上方确认一下路径，比如我上面红色框起来的为",[114,120363,120365],{"className":118520,"code":120364,"language":118522,"meta":37,"style":37},"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",[120,120366,120367,120383,120398],{"__ignoreMap":37},[123,120368,120369,120372,120375,120378,120381],{"class":125,"line":126},[123,120370,120371],{"class":1972},"Please",[123,120373,120374],{"class":238}," make",[123,120376,120377],{"class":238}," sure",[123,120379,120380],{"class":238}," that",[123,120382,2683],{"class":133},[123,120384,120385,120387,120390,120393,120396],{"class":125,"line":45},[123,120386,52282],{"class":1972},[123,120388,120389],{"class":238},"   PATH",[123,120391,120392],{"class":238}," includes",[123,120394,120395],{"class":238}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[123,120397,2683],{"class":133},[123,120399,120400,120402,120405,120407,120410,120413,120415,120418,120421,120424,120427,120429,120432,120434],{"class":125,"line":1189},[123,120401,52282],{"class":1972},[123,120403,120404],{"class":238},"   LD_LIBRARY_PATH",[123,120406,120392],{"class":238},[123,120408,120409],{"class":238}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[123,120411,120412],{"class":238}," or,",[123,120414,5219],{"class":238},[123,120416,120417],{"class":238}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[123,120419,120420],{"class":238}," to",[123,120422,120423],{"class":238}," \u002Fetc\u002Fld.so.conf",[123,120425,120426],{"class":238}," and",[123,120428,27241],{"class":238},[123,120430,120431],{"class":238}," ldconfig",[123,120433,64615],{"class":238},[123,120435,120436],{"class":238}," root\n",[14,120438,120439],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[114,120441,120443],{"className":118520,"code":120442,"language":118522,"meta":37,"style":37},"which nvcc\n",[120,120444,120445],{"__ignoreMap":37},[123,120446,120447,120450],{"class":125,"line":126},[123,120448,120449],{"class":182},"which",[123,120451,120452],{"class":238}," nvcc\n",[14,120454,120455],{},[35,120456],{"alt":37,"src":120457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120459,120460],{},"所以我进行以下操作：",[114,120462,120464],{"className":118520,"code":120463,"language":118522,"meta":37,"style":37},"sudo vim ~\u002F.bashrc\n",[120,120465,120466],{"__ignoreMap":37},[123,120467,120468,120470,120472],{"class":125,"line":126},[123,120469,24587],{"class":1972},[123,120471,118580],{"class":238},[123,120473,120474],{"class":238}," ~\u002F.bashrc\n",[14,120476,120477],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[114,120479,120481],{"className":118520,"code":120480,"language":118522,"meta":37,"style":37},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[120,120482,120483,120495],{"__ignoreMap":37},[123,120484,120485,120487,120490,120492],{"class":125,"line":126},[123,120486,25053],{"class":129},[123,120488,120489],{"class":133}," PATH",[123,120491,179],{"class":129},[123,120493,120494],{"class":133},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[123,120496,120497,120499,120502,120504],{"class":125,"line":45},[123,120498,25053],{"class":129},[123,120500,120501],{"class":133}," LD_LIBRARY_PATH",[123,120503,179],{"class":129},[123,120505,120506],{"class":133},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120508,120509],{},[35,120510],{"alt":37,"src":120511},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[114,120513,120515],{"className":118520,"code":120514,"language":118522,"meta":37,"style":37},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[120,120516,120517,120522,120528,120533],{"__ignoreMap":37},[123,120518,120519],{"class":125,"line":126},[123,120520,120521],{"class":192},"# 刷新当前终端的环境变量\n",[123,120523,120524,120526],{"class":125,"line":45},[123,120525,100890],{"class":182},[123,120527,120474],{"class":238},[123,120529,120530],{"class":125,"line":1189},[123,120531,120532],{"class":192},"# 验证CUDA是否安装成功\n",[123,120534,120535,120538],{"class":125,"line":1204},[123,120536,120537],{"class":1972},"nvcc",[123,120539,120540],{"class":182}," -V\n",[14,120542,120543],{},"出现下图这种则安装成功。",[14,120545,120546],{},[35,120547],{"alt":37,"src":120548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[94,120550,120552],{"id":120551},"_354-安装cudnn","3.5.4 安装cuDNN",[77,120554,120555],{},[80,120556,120557],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120559,120560,120561,120566],{},"前往 NVIDIA cuDNN 下载页面：",[372,120562,120565],{"href":120563,"rel":120564},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23875],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120568,120569],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120571,120572],{},[35,120573],{"alt":37,"src":120574},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120576,120577],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120579,120580],{},[35,120581],{"alt":37,"src":120582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120584,120585],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120587,120588],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120590,120591],{},[283,120592,120593],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120595,120596],{},"下载好的：",[14,120598,120599],{},[35,120600],{"alt":37,"src":120601},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[77,120603,120604],{"start":45},[80,120605,120606],{},"安装cuDNN",[14,120608,120609],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,120611,120612],{},[35,120613],{"alt":37,"src":120614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,120616,120617],{},"解压文件，并复制到对应位置完成安装",[114,120619,120621],{"className":118520,"code":120620,"language":118522,"meta":37,"style":37},"# 解压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",[120,120622,120623,120628,120639,120644,120651,120656,120672,120686,120691,120702,120711,120715,120731],{"__ignoreMap":37},[123,120624,120625],{"class":125,"line":126},[123,120626,120627],{"class":192},"# 解压cuDNN文件\n",[123,120629,120630,120633,120636],{"class":125,"line":45},[123,120631,120632],{"class":1972},"tar",[123,120634,120635],{"class":182}," -xvf",[123,120637,120638],{"class":238}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[123,120640,120641],{"class":125,"line":1189},[123,120642,120643],{"class":192},"# cd进文件夹\n",[123,120645,120646,120648],{"class":125,"line":1204},[123,120647,101273],{"class":182},[123,120649,120650],{"class":238}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[123,120652,120653],{"class":125,"line":1210},[123,120654,120655],{"class":192},"# 复制cuDNN文件到CUDA目录\n",[123,120657,120658,120660,120662,120665,120667,120670],{"class":125,"line":1224},[123,120659,24587],{"class":1972},[123,120661,27872],{"class":238},[123,120663,120664],{"class":238}," include\u002Fcudnn",[123,120666,589],{"class":182},[123,120668,120669],{"class":238},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[123,120671,2683],{"class":133},[123,120673,120674,120676,120678,120681,120683],{"class":125,"line":1230},[123,120675,24587],{"class":1972},[123,120677,27872],{"class":238},[123,120679,120680],{"class":238}," lib\u002Flibcudnn",[123,120682,589],{"class":182},[123,120684,120685],{"class":238},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[123,120687,120688],{"class":125,"line":1321},[123,120689,120690],{"class":192},"# 对比一下有没有缺文件\n",[123,120692,120693,120695,120698,120700],{"class":125,"line":1327},[123,120694,26772],{"class":1972},[123,120696,120697],{"class":238}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[123,120699,589],{"class":182},[123,120701,2683],{"class":133},[123,120703,120704,120706,120709],{"class":125,"line":1339},[123,120705,26772],{"class":1972},[123,120707,120708],{"class":238}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[123,120710,119245],{"class":182},[123,120712,120713],{"class":125,"line":1621},[123,120714,120294],{"class":192},[123,120716,120717,120719,120721,120724,120726,120728],{"class":125,"line":1626},[123,120718,24587],{"class":1972},[123,120720,24590],{"class":238},[123,120722,120723],{"class":238}," a+r",[123,120725,120697],{"class":238},[123,120727,589],{"class":182},[123,120729,120730],{"class":133},"   \n",[123,120732,120733,120735,120737,120739,120741],{"class":125,"line":1632},[123,120734,24587],{"class":1972},[123,120736,24590],{"class":238},[123,120738,120723],{"class":238},[123,120740,120708],{"class":238},[123,120742,119245],{"class":182},[77,120744,120745],{"start":1189},[80,120746,120747],{},"检查是否安装成功",[114,120749,120751],{"className":118520,"code":120750,"language":118522,"meta":37,"style":37},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[120,120752,120753,120758],{"__ignoreMap":37},[123,120754,120755],{"class":125,"line":126},[123,120756,120757],{"class":192},"# 检查cuDNN版本命令\n",[123,120759,120760,120763,120766,120768,120770,120773,120776],{"class":125,"line":45},[123,120761,120762],{"class":1972},"cat",[123,120764,120765],{"class":238}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[123,120767,25120],{"class":129},[123,120769,30247],{"class":1972},[123,120771,120772],{"class":238}," CUDNN_MAJOR",[123,120774,120775],{"class":182}," -A",[123,120777,47734],{"class":182},[14,120779,120780],{},"出现下图这样的就是安装成功了",[14,120782,120783],{},[35,120784],{"alt":37,"src":120785},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[77,120787,120788],{"start":1204},[80,120789,120790],{},"软链接(一般不需要)",[114,120792,120794],{"className":118520,"code":120793,"language":118522,"meta":37,"style":37},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[120,120795,120796,120801],{"__ignoreMap":37},[123,120797,120798],{"class":125,"line":126},[123,120799,120800],{"class":192},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[123,120802,120803,120805],{"class":125,"line":45},[123,120804,24587],{"class":1972},[123,120806,120807],{"class":238}," ldconfig\n",[14,120809,120810],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[114,120812,120817],{"className":120813,"code":120814,"language":120815,"meta":120816,"style":37},"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",[120,120818,120819,120824,120829,120834,120839,120844,120849],{"__ignoreMap":37},[123,120820,120821],{"class":125,"line":126},[123,120822,120823],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[123,120825,120826],{"class":125,"line":45},[123,120827,120828],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[123,120830,120831],{"class":125,"line":1189},[123,120832,120833],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[123,120835,120836],{"class":125,"line":1204},[123,120837,120838],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[123,120840,120841],{"class":125,"line":1210},[123,120842,120843],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[123,120845,120846],{"class":125,"line":1224},[123,120847,120848],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[123,120850,120851],{"class":125,"line":1230},[123,120852,120853],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,120855,120856],{},"运行下方的命令",[114,120858,120860],{"className":118520,"code":120859,"language":118522,"meta":37,"style":37},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[120,120861,120862,120867,120874,120879],{"__ignoreMap":37},[123,120863,120864],{"class":125,"line":126},[123,120865,120866],{"class":192},"# cd进入CUDA路径\n",[123,120868,120869,120871],{"class":125,"line":45},[123,120870,101273],{"class":182},[123,120872,120873],{"class":238}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[123,120875,120876],{"class":125,"line":1189},[123,120877,120878],{"class":192}," # 查看本路径下的需要软链接的文件名\n",[123,120880,120881],{"class":125,"line":1204},[123,120882,120883],{"class":1972}," ls\n",[14,120885,120886],{},[35,120887],{"alt":37,"src":120888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,120890,120891,120892,18420,120895,18420,120898,120901],{},"如上图，我需要将",[120,120893,120894],{},"libcudnn_xxx_xxxxx.so.8.9.7",[120,120896,120897],{},"libcudnn_xxx_xxxxx.so.8",[120,120899,120900],{},"libcudnn_xxx_xxxxx.so","软链接",[114,120903,120905],{"className":118520,"code":120904,"language":118522,"meta":37,"style":37},"# 创建符号链接。对于每个 .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",[120,120906,120907,120912,120928,120942,120956,120970,120984,120998,121012,121017,121023,121028],{"__ignoreMap":37},[123,120908,120909],{"class":125,"line":126},[123,120910,120911],{"class":192},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[123,120913,120914,120916,120919,120922,120925],{"class":125,"line":45},[123,120915,24587],{"class":1972},[123,120917,120918],{"class":238}," ln",[123,120920,120921],{"class":182}," -sf",[123,120923,120924],{"class":238}," libcudnn_cnn_train.so.8.9.7",[123,120926,120927],{"class":238}," libcudnn_cnn_train.so.8\n",[123,120929,120930,120932,120934,120936,120939],{"class":125,"line":1189},[123,120931,24587],{"class":1972},[123,120933,120918],{"class":238},[123,120935,120921],{"class":182},[123,120937,120938],{"class":238}," libcudnn_adv_infer.so.8.9.7",[123,120940,120941],{"class":238}," libcudnn_adv_infer.so.8\n",[123,120943,120944,120946,120948,120950,120953],{"class":125,"line":1204},[123,120945,24587],{"class":1972},[123,120947,120918],{"class":238},[123,120949,120921],{"class":182},[123,120951,120952],{"class":238}," libcudnn_adv_train.so.8.9.7",[123,120954,120955],{"class":238}," libcudnn_adv_train.so.8\n",[123,120957,120958,120960,120962,120964,120967],{"class":125,"line":1210},[123,120959,24587],{"class":1972},[123,120961,120918],{"class":238},[123,120963,120921],{"class":182},[123,120965,120966],{"class":238}," libcudnn_cnn_infer.so.8.9.7",[123,120968,120969],{"class":238}," libcudnn_cnn_infer.so.8\n",[123,120971,120972,120974,120976,120978,120981],{"class":125,"line":1224},[123,120973,24587],{"class":1972},[123,120975,120918],{"class":238},[123,120977,120921],{"class":182},[123,120979,120980],{"class":238}," libcudnn.so.8.9.7",[123,120982,120983],{"class":238}," libcudnn.so.8\n",[123,120985,120986,120988,120990,120992,120995],{"class":125,"line":1230},[123,120987,24587],{"class":1972},[123,120989,120918],{"class":238},[123,120991,120921],{"class":182},[123,120993,120994],{"class":238}," libcudnn_ops_infer.so.8.9.7",[123,120996,120997],{"class":238}," libcudnn_ops_infer.so.8\n",[123,120999,121000,121002,121004,121006,121009],{"class":125,"line":1321},[123,121001,24587],{"class":1972},[123,121003,120918],{"class":238},[123,121005,120921],{"class":182},[123,121007,121008],{"class":238}," libcudnn_ops_train.so.8.9.7",[123,121010,121011],{"class":238}," libcudnn_ops_train.so.8\n",[123,121013,121014],{"class":125,"line":1327},[123,121015,121016],{"class":192},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[123,121018,121019,121021],{"class":125,"line":1339},[123,121020,24587],{"class":1972},[123,121022,120807],{"class":238},[123,121024,121025],{"class":125,"line":1621},[123,121026,121027],{"class":192},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[123,121029,121030,121032,121035,121038,121040,121043],{"class":125,"line":1626},[123,121031,26772],{"class":1972},[123,121033,121034],{"class":182}," -l",[123,121036,121037],{"class":238}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[123,121039,589],{"class":182},[123,121041,121042],{"class":238},".so",[123,121044,119245],{"class":182},[94,121046,121048],{"id":121047},"_355-常见问题","3.5.5 常见问题",[77,121050,121051],{},[80,121052,121053],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[114,121055,121057],{"className":118520,"code":121056,"language":118522,"meta":37,"style":37},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[120,121058,121059],{"__ignoreMap":37},[123,121060,121061,121063,121065],{"class":125,"line":126},[123,121062,24587],{"class":1972},[123,121064,118580],{"class":238},[123,121066,121067],{"class":238}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121069,121070],{},"blacklist-nouveau.conf文件内容如下：",[114,121072,121074],{"className":118520,"code":121073,"language":118522,"meta":37,"style":37},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[120,121075,121076,121084,121091,121103,121113],{"__ignoreMap":37},[123,121077,121078,121081],{"class":125,"line":126},[123,121079,121080],{"class":1972},"blacklist",[123,121082,121083],{"class":238}," nouveau\n",[123,121085,121086,121088],{"class":125,"line":45},[123,121087,121080],{"class":1972},[123,121089,121090],{"class":238}," lbm-nouveau\n",[123,121092,121093,121095,121098,121101],{"class":125,"line":1189},[123,121094,115927],{"class":1972},[123,121096,121097],{"class":238}," nouveau",[123,121099,121100],{"class":238}," modeset=",[123,121102,3094],{"class":182},[123,121104,121105,121108,121110],{"class":125,"line":1204},[123,121106,121107],{"class":182},"alias",[123,121109,121097],{"class":238},[123,121111,121112],{"class":238}," off\n",[123,121114,121115,121117,121120],{"class":125,"line":1210},[123,121116,121107],{"class":182},[123,121118,121119],{"class":238}," lbm-nouveau",[123,121121,121112],{"class":238},[14,121123,121124],{},"接着运行下方命令",[114,121126,121128],{"className":118520,"code":121127,"language":118522,"meta":37,"style":37},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[120,121129,121130,121140,121145],{"__ignoreMap":37},[123,121131,121132,121134,121137],{"class":125,"line":126},[123,121133,24587],{"class":1972},[123,121135,121136],{"class":238}," update-initramfs",[123,121138,121139],{"class":182}," -u\n",[123,121141,121142],{"class":125,"line":45},[123,121143,121144],{"class":1972},"或者\n",[123,121146,121147,121149,121152],{"class":125,"line":1189},[123,121148,24587],{"class":1972},[123,121150,121151],{"class":238}," dracut",[123,121153,121154],{"class":182}," --force\n",[14,121156,121157],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[114,121159,121161],{"className":118520,"code":121160,"language":118522,"meta":37,"style":37},"lsmod | grep nouveau\n",[120,121162,121163],{"__ignoreMap":37},[123,121164,121165,121168,121170,121172],{"class":125,"line":126},[123,121166,121167],{"class":1972},"lsmod",[123,121169,25120],{"class":129},[123,121171,30247],{"class":1972},[123,121173,121083],{"class":238},[77,121175,121176],{"start":45},[80,121177,121178],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[114,121180,121182],{"className":118520,"code":121181,"language":118522,"meta":37,"style":37},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[120,121183,121184],{"__ignoreMap":37},[123,121185,121186,121188,121190],{"class":125,"line":126},[123,121187,24587],{"class":1972},[123,121189,118580],{"class":238},[123,121191,121192],{"class":238}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121194,121195],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[114,121197,121199],{"className":118520,"code":121198,"language":118522,"meta":37,"style":37},"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",[120,121200,121201,121209,121217,121225,121232,121240,121250,121258],{"__ignoreMap":37},[123,121202,121203,121206],{"class":125,"line":126},[123,121204,121205],{"class":1972},"Section",[123,121207,121208],{"class":238}," \"OutputClass\"\n",[123,121210,121211,121214],{"class":125,"line":45},[123,121212,121213],{"class":1972},"   Identifier",[123,121215,121216],{"class":238}," \"nvidia\"\n",[123,121218,121219,121222],{"class":125,"line":1189},[123,121220,121221],{"class":1972},"   MatchDriver",[123,121223,121224],{"class":238}," \"nvidia-drm\"\n",[123,121226,121227,121230],{"class":125,"line":1204},[123,121228,121229],{"class":1972},"   Driver",[123,121231,121216],{"class":238},[123,121233,121234,121237],{"class":125,"line":1210},[123,121235,121236],{"class":1972},"   Option",[123,121238,121239],{"class":238}," \"AllowEmptyInitialConfiguration\"\n",[123,121241,121242,121244,121247],{"class":125,"line":1224},[123,121243,121236],{"class":1972},[123,121245,121246],{"class":238}," \"PrimaryGPU\"",[123,121248,121249],{"class":238}," \"yes\"\n",[123,121251,121252,121255],{"class":125,"line":1230},[123,121253,121254],{"class":1972},"   ModulePath",[123,121256,121257],{"class":238}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[123,121259,121260],{"class":125,"line":1321},[123,121261,121262],{"class":1972},"EndSection\n",[77,121264,121265],{"start":1189},[80,121266,121267],{},"安装N卡驱动提示错误",[114,121269,121271],{"className":120813,"code":121270,"language":120815,"meta":120816,"style":37},"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",[120,121272,121273],{"__ignoreMap":37},[123,121274,121275],{"class":125,"line":126},[123,121276,121270],{},[77,121278,121279],{},[80,121280,121281],{},"检查当前运行的内核版本：",[14,121283,121284],{},"运行以下命令以查看你当前正在使用的内核版本：",[114,121286,121288],{"className":117293,"code":121287,"language":117295,"meta":37,"style":37},"uname -r\n",[120,121289,121290],{"__ignoreMap":37},[123,121291,121292,121294],{"class":125,"line":126},[123,121293,70215],{"class":1972},[123,121295,121296],{"class":182}," -r\n",[77,121298,121299],{"start":45},[80,121300,121301],{},"安装内核开发文件：",[14,121303,121304,121305,121308],{},"确保你已经安装了与当前内核版本相匹配的 ",[120,121306,121307],{},"kernel-devel"," 包。运行以下命令来安装：",[114,121310,121312],{"className":117293,"code":121311,"language":117295,"meta":37,"style":37},"sudo dnf install kernel-devel-$(uname -r)\n",[120,121313,121314],{"__ignoreMap":37},[123,121315,121316,121318,121320,121322,121325,121327,121329,121331],{"class":125,"line":126},[123,121317,24587],{"class":1972},[123,121319,26326],{"class":238},[123,121321,23844],{"class":238},[123,121323,121324],{"class":238}," kernel-devel-",[123,121326,25110],{"class":133},[123,121328,70215],{"class":1972},[123,121330,119636],{"class":182},[123,121332,140],{"class":133},[14,121334,121335],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[77,121337,121338],{"start":1189},[80,121339,121340],{},"安装内核源代码（如果需要）：",[14,121342,121343],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[114,121345,121347],{"className":117293,"code":121346,"language":117295,"meta":37,"style":37},"sudo dnf install kernel-headers kernel-source\n",[120,121348,121349],{"__ignoreMap":37},[123,121350,121351,121353,121355,121357,121360],{"class":125,"line":126},[123,121352,24587],{"class":1972},[123,121354,26326],{"class":238},[123,121356,23844],{"class":238},[123,121358,121359],{"class":238}," kernel-headers",[123,121361,121362],{"class":238}," kernel-source\n",[77,121364,121365],{"start":1204},[80,121366,121367],{},"检查安装：",[14,121369,121370,121371,121374],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[120,121372,121373],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[114,121376,121378],{"className":117293,"code":121377,"language":117295,"meta":37,"style":37},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[120,121379,121380],{"__ignoreMap":37},[123,121381,121382,121384],{"class":125,"line":126},[123,121383,26772],{"class":1972},[123,121385,121386],{"class":238}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121388,121389,121390,121393],{},"如果仍然遇到问题，可以通过 ",[120,121391,121392],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5136,121395,121396],{},"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":37,"searchDepth":45,"depth":45,"links":121398},[121399,121403,121413,121417,121418],{"id":118496,"depth":45,"text":118497,"children":121400},[121401,121402],{"id":118506,"depth":1189,"text":118507},{"id":118516,"depth":1189,"text":118517},{"id":118716,"depth":45,"text":118717,"children":121404},[121405,121406,121407,121408,121409,121410,121411,121412],{"id":118720,"depth":1189,"text":118721},{"id":118790,"depth":1189,"text":118791},{"id":118879,"depth":1189,"text":118880},{"id":119124,"depth":1189,"text":119125},{"id":119194,"depth":1189,"text":119195},{"id":119261,"depth":1189,"text":119262},{"id":119296,"depth":1189,"text":119297},{"id":119351,"depth":1189,"text":119352},{"id":119402,"depth":45,"text":119403,"children":121414},[121415,121416],{"id":119406,"depth":1189,"text":119407},{"id":119486,"depth":1189,"text":119487},{"id":119672,"depth":45,"text":119673},{"id":119845,"depth":45,"text":119846,"children":121419},[121420,121421,121422,121423,121424],{"id":119849,"depth":1189,"text":119850},{"id":119890,"depth":1189,"text":119891},{"id":120177,"depth":1189,"text":120178},{"id":120551,"depth":1189,"text":120552},{"id":121047,"depth":1189,"text":121048},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118488,"description":47},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121431,"title":121432,"body":121433,"description":47,"extension":48,"meta":121773,"navigation":50,"path":121774,"seo":121775,"stem":121776,"__hash__":121777},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121434,"toc":121771},[121435,121438,121443,121446,121692,121697,121700,121736,121739,121768],[10,121436,121432],{"id":121437},"_4-命令教程长期积累",[77,121439,121440],{},[80,121441,121442],{},"大多数命令",[14,121444,121445],{},"常用 Linux 命令速查：",[114,121447,121449],{"className":117293,"code":121448,"language":117295,"meta":37,"style":37},"# 文件与目录\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",[120,121450,121451,121456,121463,121470,121478,121485,121492,121500,121508,121515,121522,121530,121534,121539,121546,121554,121561,121565,121570,121577,121585,121593,121601,121609,121613,121618,121626,121633,121640,121648,121656,121660,121665,121674,121683],{"__ignoreMap":37},[123,121452,121453],{"class":125,"line":126},[123,121454,121455],{"class":192},"# 文件与目录\n",[123,121457,121458,121460],{"class":125,"line":45},[123,121459,26772],{"class":1972},[123,121461,121462],{"class":192},"        # 列出目录内容\n",[123,121464,121465,121467],{"class":125,"line":1189},[123,121466,101273],{"class":182},[123,121468,121469],{"class":192},"        # 切换目录\n",[123,121471,121472,121475],{"class":125,"line":1204},[123,121473,121474],{"class":182},"pwd",[123,121476,121477],{"class":192},"       # 显示当前路径\n",[123,121479,121480,121482],{"class":125,"line":1210},[123,121481,101263],{"class":1972},[123,121483,121484],{"class":192},"     # 创建目录\n",[123,121486,121487,121489],{"class":125,"line":1224},[123,121488,25333],{"class":1972},[123,121490,121491],{"class":192},"        # 删除文件或目录\n",[123,121493,121494,121497],{"class":125,"line":1230},[123,121495,121496],{"class":1972},"cp",[123,121498,121499],{"class":192},"        # 复制文件或目录\n",[123,121501,121502,121505],{"class":125,"line":1321},[123,121503,121504],{"class":1972},"mv",[123,121506,121507],{"class":192},"        # 移动\u002F重命名文件或目录\n",[123,121509,121510,121512],{"class":125,"line":1327},[123,121511,101280],{"class":1972},[123,121513,121514],{"class":192},"     # 创建空文件\n",[123,121516,121517,121519],{"class":125,"line":1339},[123,121518,120762],{"class":1972},[123,121520,121521],{"class":192},"       # 查看文件内容\n",[123,121523,121524,121527],{"class":125,"line":1621},[123,121525,121526],{"class":1972},"head\u002Ftail",[123,121528,121529],{"class":192}," # 查看文件头部\u002F尾部\n",[123,121531,121532],{"class":125,"line":1626},[123,121533,2409],{"emptyLinePlaceholder":50},[123,121535,121536],{"class":125,"line":1632},[123,121537,121538],{"class":192},"# 权限管理\n",[123,121540,121541,121543],{"class":125,"line":1637},[123,121542,24622],{"class":1972},[123,121544,121545],{"class":192},"     # 修改文件权限\n",[123,121547,121548,121551],{"class":125,"line":1651},[123,121549,121550],{"class":1972},"chown",[123,121552,121553],{"class":192},"     # 修改文件所有者\n",[123,121555,121556,121558],{"class":125,"line":1656},[123,121557,24587],{"class":1972},[123,121559,121560],{"class":192},"      # 以管理员身份执行\n",[123,121562,121563],{"class":125,"line":1662},[123,121564,2409],{"emptyLinePlaceholder":50},[123,121566,121567],{"class":125,"line":1683},[123,121568,121569],{"class":192},"# 系统信息\n",[123,121571,121572,121574],{"class":125,"line":1688},[123,121573,70215],{"class":1972},[123,121575,121576],{"class":192},"     # 系统信息\n",[123,121578,121579,121582],{"class":125,"line":1702},[123,121580,121581],{"class":1972},"df",[123,121583,121584],{"class":192},"        # 磁盘使用情况\n",[123,121586,121587,121590],{"class":125,"line":1707},[123,121588,121589],{"class":1972},"free",[123,121591,121592],{"class":192},"      # 内存使用情况\n",[123,121594,121595,121598],{"class":125,"line":1736},[123,121596,121597],{"class":1972},"top\u002Fhtop",[123,121599,121600],{"class":192},"  # 进程监控\n",[123,121602,121603,121606],{"class":125,"line":1741},[123,121604,121605],{"class":1972},"ps",[123,121607,121608],{"class":192},"        # 查看进程\n",[123,121610,121611],{"class":125,"line":1758},[123,121612,2409],{"emptyLinePlaceholder":50},[123,121614,121615],{"class":125,"line":1763},[123,121616,121617],{"class":192},"# 网络\n",[123,121619,121620,121623],{"class":125,"line":1768},[123,121621,121622],{"class":1972},"ping",[123,121624,121625],{"class":192},"      # 测试网络连通性\n",[123,121627,121628,121630],{"class":125,"line":1773},[123,121629,26860],{"class":1972},[123,121631,121632],{"class":192},"      # 发送 HTTP 请求\n",[123,121634,121635,121637],{"class":125,"line":1787},[123,121636,120286],{"class":1972},[123,121638,121639],{"class":192},"      # 下载文件\n",[123,121641,121642,121645],{"class":125,"line":1792},[123,121643,121644],{"class":1972},"ssh",[123,121646,121647],{"class":192},"       # 远程登录\n",[123,121649,121650,121653],{"class":125,"line":2586},[123,121651,121652],{"class":1972},"scp",[123,121654,121655],{"class":192},"       # 远程文件传输\n",[123,121657,121658],{"class":125,"line":2600},[123,121659,2409],{"emptyLinePlaceholder":50},[123,121661,121662],{"class":125,"line":2608},[123,121663,121664],{"class":192},"# 包管理（Debian\u002FUbuntu）\n",[123,121666,121667,121669,121671],{"class":125,"line":2613},[123,121668,117365],{"class":1972},[123,121670,117344],{"class":238},[123,121672,121673],{"class":192},"   # 更新软件源\n",[123,121675,121676,121678,121680],{"class":125,"line":2619},[123,121677,117365],{"class":1972},[123,121679,23844],{"class":238},[123,121681,121682],{"class":192},"  # 安装软件包\n",[123,121684,121685,121687,121689],{"class":125,"line":2625},[123,121686,117365],{"class":1972},[123,121688,26090],{"class":238},[123,121690,121691],{"class":192},"   # 卸载软件包\n",[77,121693,121694],{"start":45},[80,121695,121696],{},"KDE Dolphin 以root打开",[14,121698,121699],{},"kde5",[114,121701,121703],{"className":117293,"code":121702,"language":117295,"meta":37,"style":37},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[120,121704,121705],{"__ignoreMap":37},[123,121706,121707,121710,121713,121716,121718,121720,121723,121726,121728,121731,121733],{"class":125,"line":126},[123,121708,121709],{"class":1972},"pkexec",[123,121711,121712],{"class":238}," env",[123,121714,121715],{"class":238}," DISPLAY=",[123,121717,28154],{"class":133},[123,121719,28212],{"class":238},[123,121721,121722],{"class":133},"$XAUTHORITY ",[123,121724,121725],{"class":238},"KDE_SESSION_VERSION=",[123,121727,453],{"class":182},[123,121729,121730],{"class":238}," KDE_FULL_SESSION=",[123,121732,1372],{"class":182},[123,121734,121735],{"class":238}," dolphin\n",[14,121737,121738],{},"kde6",[114,121740,121742],{"className":117293,"code":121741,"language":117295,"meta":37,"style":37},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[120,121743,121744],{"__ignoreMap":37},[123,121745,121746,121748,121750,121752,121754,121756,121758,121760,121762,121764,121766],{"class":125,"line":126},[123,121747,121709],{"class":1972},[123,121749,121712],{"class":238},[123,121751,121715],{"class":238},[123,121753,28154],{"class":133},[123,121755,28212],{"class":238},[123,121757,121722],{"class":133},[123,121759,121725],{"class":238},[123,121761,478],{"class":182},[123,121763,121730],{"class":238},[123,121765,1372],{"class":182},[123,121767,121735],{"class":238},[5136,121769,121770],{},"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":37,"searchDepth":45,"depth":45,"links":121772},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121432,"description":47},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121779,"title":121780,"body":121781,"description":47,"extension":48,"meta":121795,"navigation":50,"path":121796,"seo":121797,"stem":121798,"__hash__":121799},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121782,"toc":121793},[121783,121786],[10,121784,121780],{"id":121785},"_5-各种环境配置",[14,121787,121788],{},[372,121789,121792],{"href":121790,"rel":121791},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23875],"电控组环境搭建大全",{"title":37,"searchDepth":45,"depth":45,"links":121794},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121780,"description":47},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121801,"title":121802,"body":121803,"description":47,"extension":48,"meta":122151,"navigation":50,"path":122152,"seo":122153,"stem":122154,"__hash__":122155},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121804,"toc":122143},[121805,121808,121812,121816,121820,121825,121832,121836,122129,122133,122140],[10,121806,121802],{"id":121807},"_6-拓展功能",[65,121809,121811],{"id":121810},"_61-wine","6.1 Wine",[65,121813,121815],{"id":121814},"_62-android","6.2 Android",[94,121817,121819],{"id":121818},"_621-i卡a卡","6.2.1 I卡、A卡",[77,121821,121822],{},[80,121823,121824],{},"Wayland-Waydroid(体验超级好)",[14,121826,121827,121828],{},"Waydroid 官网与安装指南：",[372,121829,121830],{"href":121830,"rel":121831},"https:\u002F\u002Fwaydro.id\u002F",[23875],[94,121833,121835],{"id":121834},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[77,121837,121838],{},[80,121839,121840,121841,121843,121844,121848,121850,121853,121858,122055],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53727,121842],{},"BlissOS 官网下载：",[372,121845,121846],{"href":121846,"rel":121847},"https:\u002F\u002Fblissos.org\u002F",[23875],[53727,121849],{},[35,121851],{"alt":37,"src":121852},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[77,121854,121855],{"start":1189},[80,121856,121857],{},"比较推荐的配置",[114,121859,121861],{"className":117293,"code":121860,"language":117295,"meta":37,"style":37},"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",[120,121862,121863,121870,121880,121890,121900,121912,121922,121929,121939,121948,121957,121967,121977,121986,121996,122006,122018,122028,122037,122047],{"__ignoreMap":37},[123,121864,121865,121868],{"class":125,"line":126},[123,121866,121867],{"class":1972},"qemu-system-x86_64",[123,121869,24689],{"class":182},[123,121871,121872,121875,121878],{"class":125,"line":45},[123,121873,121874],{"class":182},"        -M",[123,121876,121877],{"class":238}," q35,vmport=off",[123,121879,24689],{"class":182},[123,121881,121882,121885,121888],{"class":125,"line":1189},[123,121883,121884],{"class":182},"        -accel",[123,121886,121887],{"class":238}," kvm",[123,121889,24689],{"class":182},[123,121891,121892,121895,121898],{"class":125,"line":1204},[123,121893,121894],{"class":182},"        -cpu",[123,121896,121897],{"class":238}," qemu64,+sse3,+sse4.2",[123,121899,24689],{"class":182},[123,121901,121902,121905,121908,121910],{"class":125,"line":1210},[123,121903,121904],{"class":182},"        -smp",[123,121906,121907],{"class":238}," 8,cores=",[123,121909,427],{"class":182},[123,121911,24689],{"class":182},[123,121913,121914,121917,121920],{"class":125,"line":1224},[123,121915,121916],{"class":182},"        -m",[123,121918,121919],{"class":238}," 6G",[123,121921,24689],{"class":182},[123,121923,121924,121927],{"class":125,"line":1230},[123,121925,121926],{"class":182},"        -usb",[123,121928,24689],{"class":182},[123,121930,121931,121934,121937],{"class":125,"line":1321},[123,121932,121933],{"class":182},"        -device",[123,121935,121936],{"class":238}," virtio-tablet",[123,121938,24689],{"class":182},[123,121940,121941,121943,121946],{"class":125,"line":1327},[123,121942,121933],{"class":182},[123,121944,121945],{"class":238}," virtio-keyboard",[123,121947,24689],{"class":182},[123,121949,121950,121952,121955],{"class":125,"line":1339},[123,121951,121933],{"class":182},[123,121953,121954],{"class":238}," usb-tablet",[123,121956,24689],{"class":182},[123,121958,121959,121962,121965],{"class":125,"line":1621},[123,121960,121961],{"class":182},"        -bios",[123,121963,121964],{"class":238}," OVMF-pure-efi64.fd",[123,121966,24689],{"class":182},[123,121968,121969,121972,121975],{"class":125,"line":1626},[123,121970,121971],{"class":182},"        -net",[123,121973,121974],{"class":238}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[123,121976,24689],{"class":182},[123,121978,121979,121981,121984],{"class":125,"line":1632},[123,121980,121971],{"class":182},[123,121982,121983],{"class":238}," nic,model=virtio",[123,121985,24689],{"class":182},[123,121987,121988,121991,121994],{"class":125,"line":1637},[123,121989,121990],{"class":182},"        -audio",[123,121992,121993],{"class":238}," sdl,model=hda",[123,121995,24689],{"class":182},[123,121997,121998,122001,122004],{"class":125,"line":1651},[123,121999,122000],{"class":182},"        -display",[123,122002,122003],{"class":238}," sdl,gl=on,show-cursor=on",[123,122005,24689],{"class":182},[123,122007,122008,122010,122013,122016],{"class":125,"line":1656},[123,122009,121933],{"class":182},[123,122011,122012],{"class":238}," virtio-vga-gl,xres=1920,yres=",[123,122014,122015],{"class":182},"1080",[123,122017,24689],{"class":182},[123,122019,122020,122023,122026],{"class":125,"line":1662},[123,122021,122022],{"class":182},"        -drive",[123,122024,122025],{"class":238}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[123,122027,24689],{"class":182},[123,122029,122030,122032,122035],{"class":125,"line":1683},[123,122031,122022],{"class":182},[123,122033,122034],{"class":238}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[123,122036,24689],{"class":182},[123,122038,122039,122042,122045],{"class":125,"line":1688},[123,122040,122041],{"class":182},"        -monitor",[123,122043,122044],{"class":238}," stdio",[123,122046,24689],{"class":182},[123,122048,122049,122052],{"class":125,"line":1702},[123,122050,122051],{"class":182},"        -serial",[123,122053,122054],{"class":238}," none\n",[77,122056,122057],{"start":1210},[80,122058,122059,122060],{},"常用操作：",[77,122061,122062,122065,122121],{},[80,122063,122064],{},"全屏：Ctrl+Alt+F",[80,122066,122067,122068,122073],{},"adb调试",[77,122069,122070],{},[80,122071,122072],{},"使Linux与Android用ADB连接。",[114,122074,122076],{"className":117293,"code":122075,"language":117295,"meta":37,"style":37},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[120,122077,122078,122083,122094,122099,122111,122116],{"__ignoreMap":37},[123,122079,122080],{"class":125,"line":126},[123,122081,122082],{"class":192},"# 连接安卓\n",[123,122084,122085,122088,122091],{"class":125,"line":45},[123,122086,122087],{"class":1972},"adb",[123,122089,122090],{"class":238}," connect",[123,122092,122093],{"class":182}," 127.0.0.1\n",[123,122095,122096],{"class":125,"line":1189},[123,122097,122098],{"class":192},"# 打开shell\n",[123,122100,122101,122103,122105,122108],{"class":125,"line":1204},[123,122102,122087],{"class":1972},[123,122104,26894],{"class":182},[123,122106,122107],{"class":238}," 127.0.0.1:5555",[123,122109,122110],{"class":238}," shell\n",[123,122112,122113],{"class":125,"line":1210},[123,122114,122115],{"class":192},"# 使用root权限\n",[123,122117,122118],{"class":125,"line":1224},[123,122119,122120],{"class":1972},"su\n",[80,122122,122123,122124],{},"中文输入法",[77,122125,122126],{},[80,122127,122128],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[65,122130,122132],{"id":122131},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122134,122135,122136],{},"rEFInd 官网与文档：",[372,122137,122138],{"href":122138,"rel":122139},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23875],[5136,122141,122142],{},"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":37,"searchDepth":45,"depth":45,"links":122144},[122145,122146,122150],{"id":121810,"depth":45,"text":121811},{"id":121814,"depth":45,"text":121815,"children":122147},[122148,122149],{"id":121818,"depth":1189,"text":121819},{"id":121834,"depth":1189,"text":121835},{"id":122131,"depth":45,"text":122132},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121802,"description":47},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122157,"title":122158,"body":122159,"description":47,"extension":48,"meta":125458,"navigation":50,"path":125459,"seo":125460,"stem":125461,"__hash__":125462},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122160,"toc":125432},[122161,122164,122168,122171,122178,122428,122431,122503,122506,122510,122514,122519,122522,122525,122528,122533,122536,122539,122542,122547,122550,122555,122558,122561,122566,122569,122574,122577,122581,122585,122588,122593,122596,122610,122613,122616,122625,122628,122637,122640,122643,122652,122655,122664,122667,122670,122679,122682,122685,122700,122703,122706,122715,122720,122723,122726,122735,122738,122747,122750,122759,122762,122771,122776,122779,122787,122792,122795,122804,122807,122815,122820,122823,122832,122835,122838,122842,122845,122850,122853,122858,122872,122877,122882,122893,122898,122904,122909,122924,122929,122932,122937,122942,122947,122955,122960,122967,122972,122983,122988,122991,122995,122998,123001,123006,123009,123028,123033,123036,123045,123050,123053,123075,123078,123108,123111,123116,123119,123133,123138,123157,123160,123163,123168,123180,123185,123190,123193,123198,123201,123216,123219,123224,123229,123233,123238,123278,123281,123285,123291,123297,123302,123305,123312,123317,123324,123327,123330,123337,123351,123354,123414,123417,123431,123443,123446,123449,123452,123516,123519,123522,123525,123545,123548,123553,123560,123564,123567,123571,123576,123581,123585,123588,123591,123633,123638,123641,123663,123678,123680,123685,123697,123757,123759,123761,123815,123817,123819,123825,123830,123833,123838,123842,123845,123907,123912,123915,123917,123921,123933,124015,124017,124019,124073,124079,124081,124085,124090,124092,124097,124101,124121,124156,124160,124163,124166,124169,124176,124179,124191,124194,124209,124212,124231,124279,124282,124299,124302,124316,124321,124324,124333,124348,124360,124398,124403,124412,124417,124422,124448,124457,124461,124465,124470,124473,124477,124481,124486,124489,124494,124497,124502,124505,124510,124513,124517,124522,124525,124530,124533,124537,124542,124545,124550,124553,124558,124561,124565,124570,124573,124578,124581,124586,124589,124593,124598,124601,124606,124609,124614,124617,124622,124625,124630,124633,124638,124641,124645,124650,124653,124658,124665,124669,124674,124677,124682,124685,124689,124694,124697,124700,124703,124706,124709,124713,124716,124726,124731,124736,124758,124763,124768,124775,124779,124784,124787,124790,124795,124798,124801,124804,124807,124810,124813,124816,124819,124822,124825,124828,124831,124836,124841,124846,124851,124856,124861,124866,124869,124873,124876,124880,124885,124890,124895,124900,124904,124910,124918,124923,124926,124931,124946,124949,124954,124988,125003,125006,125061,125087,125099,125102,125111,125114,125129,125134,125137,125143,125148,125151,125156,125159,125164,125169,125176,125179,125194,125197,125232,125237,125245,125283,125286,125289,125294,125297,125302,125313,125347,125352,125355,125364,125369,125375,125378,125383,125392,125397,125400,125403,125408,125416,125419,125424,125429],[10,122162,122158],{"id":122163},"_7-其他操作",[65,122165,122167],{"id":122166},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122169,122170],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122172,122173,122174,122177],{},"进入工控机的硬盘目录，进入",[120,122175,122176],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[114,122179,122183],{"className":122180,"code":122181,"language":122182,"meta":37,"style":37},"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",[120,122184,122185,122193,122204,122211,122218,122230,122237,122249,122260,122271,122278,122285,122292,122304,122316,122323,122335,122347,122354,122366,122378,122390,122401,122408,122419],{"__ignoreMap":37},[123,122186,122187,122190],{"class":125,"line":126},[123,122188,122189],{"class":51311},"network",[123,122191,122192],{"class":133},": \n",[123,122194,122195,122198,122200,122202],{"class":125,"line":45},[123,122196,122197],{"class":51311},"  version",[123,122199,51448],{"class":133},[123,122201,211],{"class":182},[123,122203,2683],{"class":133},[123,122205,122206,122209],{"class":125,"line":1189},[123,122207,122208],{"class":51311},"  wifis",[123,122210,122192],{"class":133},[123,122212,122213,122216],{"class":125,"line":1204},[123,122214,122215],{"class":51311},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[123,122217,122192],{"class":133},[123,122219,122220,122223,122225,122228],{"class":125,"line":1210},[123,122221,122222],{"class":51311},"      renderer",[123,122224,51448],{"class":133},[123,122226,122227],{"class":238},"NetworkManager",[123,122229,2683],{"class":133},[123,122231,122232,122235],{"class":125,"line":1224},[123,122233,122234],{"class":51311},"      match",[123,122236,122192],{"class":133},[123,122238,122239,122242,122244,122247],{"class":125,"line":1230},[123,122240,122241],{"class":51311},"        name",[123,122243,51448],{"class":133},[123,122245,122246],{"class":238},"\"wlan0\"",[123,122248,2683],{"class":133},[123,122250,122251,122254,122256,122258],{"class":125,"line":1321},[123,122252,122253],{"class":51311},"      dhcp4",[123,122255,51448],{"class":133},[123,122257,1372],{"class":182},[123,122259,2683],{"class":133},[123,122261,122262,122265,122267,122269],{"class":125,"line":1327},[123,122263,122264],{"class":51311},"      dhcp6",[123,122266,51448],{"class":133},[123,122268,1372],{"class":182},[123,122270,2683],{"class":133},[123,122272,122273,122276],{"class":125,"line":1339},[123,122274,122275],{"class":51311},"      access-points",[123,122277,122192],{"class":133},[123,122279,122280,122283],{"class":125,"line":1621},[123,122281,122282],{"class":238},"        \"EMIS_Vinci_Robocon_5G\"",[123,122284,122192],{"class":133},[123,122286,122287,122290],{"class":125,"line":1626},[123,122288,122289],{"class":51311},"          auth",[123,122291,122192],{"class":133},[123,122293,122294,122297,122299,122302],{"class":125,"line":1632},[123,122295,122296],{"class":51311},"            key-management",[123,122298,51448],{"class":133},[123,122300,122301],{"class":238},"\"psk\"",[123,122303,2683],{"class":133},[123,122305,122306,122309,122311,122314],{"class":125,"line":1637},[123,122307,122308],{"class":51311},"            password",[123,122310,51448],{"class":133},[123,122312,122313],{"class":238},"\"vinci666\"",[123,122315,2683],{"class":133},[123,122317,122318,122321],{"class":125,"line":1651},[123,122319,122320],{"class":51311},"          networkmanager",[123,122322,122192],{"class":133},[123,122324,122325,122328,122330,122333],{"class":125,"line":1656},[123,122326,122327],{"class":51311},"            uuid",[123,122329,51448],{"class":133},[123,122331,122332],{"class":238},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[123,122334,2683],{"class":133},[123,122336,122337,122340,122342,122345],{"class":125,"line":1662},[123,122338,122339],{"class":51311},"            name",[123,122341,51448],{"class":133},[123,122343,122344],{"class":238},"\"EMIS_Vinci_Robocon_5G\"",[123,122346,2683],{"class":133},[123,122348,122349,122352],{"class":125,"line":1683},[123,122350,122351],{"class":51311},"            passthrough",[123,122353,122192],{"class":133},[123,122355,122356,122359,122361,122364],{"class":125,"line":1688},[123,122357,122358],{"class":51311},"              wifi-security.auth-alg",[123,122360,51448],{"class":133},[123,122362,122363],{"class":238},"\"open\"",[123,122365,2683],{"class":133},[123,122367,122368,122371,122373,122376],{"class":125,"line":1702},[123,122369,122370],{"class":51311},"              ipv6.addr-gen-mode",[123,122372,51448],{"class":133},[123,122374,122375],{"class":238},"\"default\"",[123,122377,2683],{"class":133},[123,122379,122380,122383,122385,122388],{"class":125,"line":1707},[123,122381,122382],{"class":51311},"              ipv6.ip6-privacy",[123,122384,51448],{"class":133},[123,122386,122387],{"class":238},"\"-1\"",[123,122389,2683],{"class":133},[123,122391,122392,122395,122397,122399],{"class":125,"line":1736},[123,122393,122394],{"class":51311},"              proxy._",[123,122396,51448],{"class":133},[123,122398,7662],{"class":238},[123,122400,2683],{"class":133},[123,122402,122403,122406],{"class":125,"line":1741},[123,122404,122405],{"class":51311},"      networkmanager",[123,122407,122192],{"class":133},[123,122409,122410,122413,122415,122417],{"class":125,"line":1758},[123,122411,122412],{"class":51311},"        uuid",[123,122414,51448],{"class":133},[123,122416,122332],{"class":238},[123,122418,2683],{"class":133},[123,122420,122421,122423,122425],{"class":125,"line":1763},[123,122422,122241],{"class":51311},[123,122424,51448],{"class":133},[123,122426,122427],{"class":238},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122429,122430],{},"将其改为新wifi的名和密码：",[114,122432,122434],{"className":122180,"code":122433,"language":122182,"meta":37,"style":37},"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",[120,122435,122436,122442,122451,122457,122464,122473,122481,122487,122493],{"__ignoreMap":37},[123,122437,122438,122440],{"class":125,"line":126},[123,122439,122189],{"class":51311},[123,122441,3748],{"class":133},[123,122443,122444,122446,122448],{"class":125,"line":45},[123,122445,122197],{"class":51311},[123,122447,51448],{"class":133},[123,122449,122450],{"class":182},"2\n",[123,122452,122453,122455],{"class":125,"line":1189},[123,122454,122208],{"class":51311},[123,122456,3748],{"class":133},[123,122458,122459,122462],{"class":125,"line":1204},[123,122460,122461],{"class":51311},"    wlan0",[123,122463,3748],{"class":133},[123,122465,122466,122468,122470],{"class":125,"line":1210},[123,122467,122253],{"class":51311},[123,122469,51448],{"class":133},[123,122471,122472],{"class":182},"true\n",[123,122474,122475,122477,122479],{"class":125,"line":1224},[123,122476,122264],{"class":51311},[123,122478,51448],{"class":133},[123,122480,122472],{"class":182},[123,122482,122483,122485],{"class":125,"line":1230},[123,122484,122275],{"class":51311},[123,122486,3748],{"class":133},[123,122488,122489,122491],{"class":125,"line":1321},[123,122490,122282],{"class":238},[123,122492,3748],{"class":133},[123,122494,122495,122498,122500],{"class":125,"line":1327},[123,122496,122497],{"class":51311},"          password",[123,122499,51448],{"class":133},[123,122501,122502],{"class":238},"\"vinci666\"\n",[14,122504,122505],{},"工控机开机即可连上网。",[65,122507,122509],{"id":122508},"_72-ssh远程开发","7.2 SSH远程开发",[94,122511,122513],{"id":122512},"_721-环境准备","7.2.1 环境准备",[14,122515,122516],{},[283,122517,122518],{},"1.硬件准备",[14,122520,122521],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122523,122524],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122526,122527],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122529,122530],{},[283,122531,122532],{},"2.设置固定IP",[14,122534,122535],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122537,122538],{},"1.进入设置界面",[14,122540,122541],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122543,122544],{},[35,122545],{"alt":37,"src":122546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122548,122549],{},"2.配置所连接的网络",[14,122551,122552],{},[35,122553],{"alt":37,"src":122554},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122556,122557],{},"3.设置固定IP",[14,122559,122560],{},"查看当前IP地址。",[14,122562,122563],{},[35,122564],{"alt":37,"src":122565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122567,122568],{},"设置固定IP。",[14,122570,122571],{},[35,122572],{"alt":37,"src":122573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122575,122576],{},"至此，IP配置完毕。",[94,122578,122580],{"id":122579},"_722-环境搭建","7.2.2 环境搭建",[14,122582,122583],{},[283,122584,25764],{},[14,122586,122587],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122589,122590],{},[283,122591,122592],{},"实现",[14,122594,122595],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[77,122597,122598,122601,122604,122607],{},[80,122599,122600],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[80,122602,122603],{},"远程主机启动SSH服务；",[80,122605,122606],{},"本地主机登陆远程主机；",[80,122608,122609],{},"实现数据传输。",[14,122611,122612],{},"1.安装SSH客户端与服务端",[14,122614,122615],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[114,122617,122619],{"className":120813,"code":122618,"language":120815,"meta":120816,"style":37}," sudo apt install openssh-server\n",[120,122620,122621],{"__ignoreMap":37},[123,122622,122623],{"class":125,"line":126},[123,122624,122618],{},[14,122626,122627],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[114,122629,122631],{"className":120813,"code":122630,"language":120815,"meta":120816,"style":37},"sudo apt install openssh-client\n",[120,122632,122633],{"__ignoreMap":37},[123,122634,122635],{"class":125,"line":126},[123,122636,122630],{},[14,122638,122639],{},"2.远程主机启动SSH服务",[14,122641,122642],{},"远程主机启动 ssh 服务命令如下：",[114,122644,122646],{"className":120813,"code":122645,"language":120815,"meta":120816,"style":37},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[120,122647,122648],{"__ignoreMap":37},[123,122649,122650],{"class":125,"line":126},[123,122651,122645],{},[14,122653,122654],{},"启动后可使用如下命令查看服务是否正常运行：",[114,122656,122658],{"className":120813,"code":122657,"language":120815,"meta":120816,"style":37},"ps -e | grep ssh\n",[120,122659,122660],{"__ignoreMap":37},[123,122661,122662],{"class":125,"line":126},[123,122663,122657],{},[14,122665,122666],{},"如果启动成功，会包含 sshd 程序。",[14,122668,122669],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[114,122671,122673],{"className":120813,"code":122672,"language":120815,"meta":120816,"style":37},"sudo systemctl enable ssh\n",[120,122674,122675],{"__ignoreMap":37},[123,122676,122677],{"class":125,"line":126},[123,122678,122672],{},[14,122680,122681],{},"3.本地远程登录",[14,122683,122684],{},"登录远程主机可以调用如下命令:",[114,122686,122688],{"className":117293,"code":122687,"language":117295,"meta":37,"style":37},"ssh -X 用户名@ip地址\n",[120,122689,122690],{"__ignoreMap":37},[123,122691,122692,122694,122697],{"class":125,"line":126},[123,122693,121644],{"class":1972},[123,122695,122696],{"class":182}," -X",[123,122698,122699],{"class":238}," 用户名@ip地址\n",[14,122701,122702],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,122704,122705],{},"如果退出，可以调用exit命令：",[114,122707,122709],{"className":120813,"code":122708,"language":120815,"meta":120816,"style":37},"exit\n",[120,122710,122711],{"__ignoreMap":37},[123,122712,122713],{"class":125,"line":126},[123,122714,122708],{},[14,122716,122717],{},[283,122718,122719],{},"4.实现数据传输",[14,122721,122722],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,122724,122725],{},"上传文件指令格式如下：",[114,122727,122729],{"className":120813,"code":122728,"language":120815,"meta":120816,"style":37},"scp 本地文件路径 账号@ip:路径\n",[120,122730,122731],{"__ignoreMap":37},[123,122732,122733],{"class":125,"line":126},[123,122734,122728],{},[14,122736,122737],{},"上传文件夹指令格式如下：",[114,122739,122741],{"className":120813,"code":122740,"language":120815,"meta":120816,"style":37},"scp -r 本地文件夹路径 账号@ip:路径\n",[120,122742,122743],{"__ignoreMap":37},[123,122744,122745],{"class":125,"line":126},[123,122746,122740],{},[14,122748,122749],{},"下载文件指令格式如下：",[114,122751,122753],{"className":120813,"code":122752,"language":120815,"meta":120816,"style":37},"scp 账号@ip:路径 本地文件夹路径\n",[120,122754,122755],{"__ignoreMap":37},[123,122756,122757],{"class":125,"line":126},[123,122758,122752],{},[14,122760,122761],{},"下载文件夹指令格式如下：",[114,122763,122765],{"className":120813,"code":122764,"language":120815,"meta":120816,"style":37},"scp -r 账号@ip:路径 本地文件夹路径\n",[120,122766,122767],{"__ignoreMap":37},[123,122768,122769],{"class":125,"line":126},[123,122770,122764],{},[14,122772,122773],{},[283,122774,122775],{},"优化",[14,122777,122778],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[77,122780,122781,122784],{},[80,122782,122783],{},"本地生成密钥对；",[80,122785,122786],{},"将公钥上传至远程主机。",[14,122788,122789],{},[283,122790,122791],{},"1.生成密钥对",[14,122793,122794],{},"本地客户端生成公私钥：（一路回车默认即可）",[114,122796,122798],{"className":120813,"code":122797,"language":120815,"meta":120816,"style":37},"ssh-keygen\n",[120,122799,122800],{"__ignoreMap":37},[123,122801,122802],{"class":125,"line":126},[123,122803,122797],{},[14,122805,122806],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[77,122808,122809,122812],{},[80,122810,122811],{},"id_rsa （私钥）；",[80,122813,122814],{},"id_rsa.pub (公钥)。",[14,122816,122817],{},[283,122818,122819],{},"2.公钥上传",[14,122821,122822],{},"上传指令如下：",[114,122824,122826],{"className":120813,"code":122825,"language":120815,"meta":120816,"style":37},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[120,122827,122828],{"__ignoreMap":37},[123,122829,122830],{"class":125,"line":126},[123,122831,122825],{},[14,122833,122834],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,122836,122837],{},"以后再远程登录就无需录入密码了。",[94,122839,122841],{"id":122840},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,122843,122844],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,122846,122847],{},[283,122848,122849],{},"1.准备工作",[14,122851,122852],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,122854,122855],{},[283,122856,122857],{},"2.为VScode安装远程开发插件",[14,122859,122860,122861,122864,122865,122868,122869,28396],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[120,122862,122863],{},"扩展：商店","的搜索栏输入",[120,122866,122867],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[120,122870,122871],{},"安装",[14,122873,122874],{},[35,122875],{"alt":37,"src":122876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,122878,122879],{},[283,122880,122881],{},"3.配置远程连接",[14,122883,122884,122885,122888,122889,122892],{},"步骤1：使用快捷键",[120,122886,122887],{},"ctrl + shift + p","打开命令输入窗口，并输入",[120,122890,122891],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,122894,122895],{},[35,122896],{"alt":37,"src":122897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,122899,122900,122901,28396],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[120,122902,122903],{},"Add New SSH Host",[14,122905,122906],{},[35,122907],{"alt":37,"src":122908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,122910,122911,122912,122915,122916,122919,122920,122923],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[120,122913,122914],{},"ssh +X ubuntu@192.168.43.164","，其中，",[120,122917,122918],{},"ubuntu","需要替换为你的登录用户名，",[120,122921,122922],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,122925,122926],{},[35,122927],{"alt":37,"src":122928},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,122930,122931],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,122933,122934],{},[35,122935],{"alt":37,"src":122936},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,122938,122939],{},[35,122940],{"alt":37,"src":122941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,122943,122944],{},[283,122945,122946],{},"4.使用",[14,122948,122949,122950,122888,122952,122954],{},"步骤1：继续使用快捷键",[120,122951,122887],{},[120,122953,122891],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,122956,122957],{},[35,122958],{"alt":37,"src":122959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,122961,122962,122963,122966],{},"或者，也可以点击侧边栏的",[120,122964,122965],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,122968,122969],{},[35,122970],{"alt":37,"src":122971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,122973,122974,122975,122978,122979,122982],{},"步骤2：选择菜单栏的",[120,122976,122977],{},"文件","下的",[120,122980,122981],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,122984,122985],{},[35,122986],{"alt":37,"src":122987},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,122989,122990],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[65,122992,122994],{"id":122993},"_73-远程桌面","7.3 远程桌面",[14,122996,122997],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,122999,123000],{},"我们选择使用VNC来看。",[77,123002,123003],{},[80,123004,123005],{},"安装VNC服务器：",[14,123007,123008],{},"这里以TigerVNC为例进行安装：",[114,123010,123012],{"className":117293,"code":123011,"language":117295,"meta":37,"style":37},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[120,123013,123014],{"__ignoreMap":37},[123,123015,123016,123018,123020,123022,123025],{"class":125,"line":126},[123,123017,24587],{"class":1972},[123,123019,117314],{"class":238},[123,123021,23844],{"class":238},[123,123023,123024],{"class":238}," tigervnc-standalone-server",[123,123026,123027],{"class":238}," tigervnc-common\n",[77,123029,123030],{"start":45},[80,123031,123032],{},"设置VNC密码：",[14,123034,123035],{},"为VNC用户设置密码，运行以下命令：",[114,123037,123039],{"className":117293,"code":123038,"language":117295,"meta":37,"style":37},"vncpasswd\n",[120,123040,123041],{"__ignoreMap":37},[123,123042,123043],{"class":125,"line":126},[123,123044,123038],{"class":1972},[77,123046,123047],{"start":1189},[80,123048,123049],{},"配置VNC启动脚本:",[14,123051,123052],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[114,123054,123056],{"className":117293,"code":123055,"language":117295,"meta":37,"style":37},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[120,123057,123058,123067],{"__ignoreMap":37},[123,123059,123060,123062,123064],{"class":125,"line":126},[123,123061,101263],{"class":1972},[123,123063,29227],{"class":182},[123,123065,123066],{"class":238}," ~\u002F.vnc\n",[123,123068,123069,123072],{"class":125,"line":45},[123,123070,123071],{"class":1972},"nano",[123,123073,123074],{"class":238}," ~\u002F.vnc\u002Fxstartup\n",[14,123076,123077],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[114,123079,123081],{"className":117293,"code":123080,"language":117295,"meta":37,"style":37},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[120,123082,123083,123088,123096,123103],{"__ignoreMap":37},[123,123084,123085],{"class":125,"line":126},[123,123086,123087],{"class":192},"#!\u002Fbin\u002Fsh\n",[123,123089,123090,123093],{"class":125,"line":45},[123,123091,123092],{"class":182},"unset",[123,123094,123095],{"class":238}," SESSION_MANAGER\n",[123,123097,123098,123100],{"class":125,"line":1189},[123,123099,123092],{"class":182},[123,123101,123102],{"class":238}," DBUS_SESSION_BUS_ADDRESS\n",[123,123104,123105],{"class":125,"line":1204},[123,123106,123107],{"class":1972},"gnome-session\n",[14,123109,123110],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[77,123112,123113],{"start":1204},[80,123114,123115],{},"给予执行权限：",[14,123117,123118],{},"为xstartup文件设置执行权限：",[114,123120,123122],{"className":117293,"code":123121,"language":117295,"meta":37,"style":37},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[120,123123,123124],{"__ignoreMap":37},[123,123125,123126,123128,123131],{"class":125,"line":126},[123,123127,24622],{"class":1972},[123,123129,123130],{"class":238}," +x",[123,123132,123074],{"class":238},[77,123134,123135],{"start":1210},[80,123136,123137],{},"启动VNC服务器：",[114,123139,123141],{"className":117293,"code":123140,"language":117295,"meta":37,"style":37},"vncserver -geometry 1920x1080 -localhost=0\n",[120,123142,123143],{"__ignoreMap":37},[123,123144,123145,123148,123151,123154],{"class":125,"line":126},[123,123146,123147],{"class":1972},"vncserver",[123,123149,123150],{"class":182}," -geometry",[123,123152,123153],{"class":238}," 1920x1080",[123,123155,123156],{"class":182}," -localhost=0\n",[14,123158,123159],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123161,123162],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[77,123164,123165],{"start":1224},[80,123166,123167],{},"查看已开启的VNC服务器：",[114,123169,123171],{"className":117293,"code":123170,"language":117295,"meta":37,"style":37},"vncserver -list\n",[120,123172,123173],{"__ignoreMap":37},[123,123174,123175,123177],{"class":125,"line":126},[123,123176,123147],{"class":1972},[123,123178,123179],{"class":182}," -list\n",[14,123181,123182],{},[35,123183],{"alt":37,"src":123184},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[77,123186,123187],{"start":1230},[80,123188,123189],{},"连接到VNC服务器：",[14,123191,123192],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[77,123194,123195],{"start":1321},[80,123196,123197],{},"停止VNC服务器：",[14,123199,123200],{},"如果需要停止VNC服务器，可以使用以下命令：",[114,123202,123204],{"className":117293,"code":123203,"language":117295,"meta":37,"style":37},"vncserver -kill :1\n",[120,123205,123206],{"__ignoreMap":37},[123,123207,123208,123210,123213],{"class":125,"line":126},[123,123209,123147],{"class":1972},[123,123211,123212],{"class":182}," -kill",[123,123214,123215],{"class":238}," :1\n",[14,123217,123218],{},"将:1替换为你实际使用的显示编号。",[14,123220,123221],{},[35,123222],{"alt":37,"src":123223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123225,123226],{},[35,123227],{"alt":37,"src":123228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[65,123230,123232],{"id":123231},"_74-usb端口设置","7.4 USB端口设置",[14,123234,123235],{},[283,123236,123237],{},"首先先配置好权限",[114,123239,123241],{"className":117293,"code":123240,"language":117295,"meta":37,"style":37},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[120,123242,123243,123248,123261,123268,123273],{"__ignoreMap":37},[123,123244,123245],{"class":125,"line":126},[123,123246,123247],{"class":192},"# 将用户权限提高\n",[123,123249,123250,123252,123254,123256,123259],{"class":125,"line":45},[123,123251,24587],{"class":1972},[123,123253,26585],{"class":238},[123,123255,26588],{"class":182},[123,123257,123258],{"class":238}," dialout",[123,123260,26593],{"class":133},[123,123262,123263,123265],{"class":125,"line":1189},[123,123264,26612],{"class":1972},[123,123266,123267],{"class":238}," dialout\n",[123,123269,123270],{"class":125,"line":1204},[123,123271,123272],{"class":192},"# 查看下面命令是否输出dialout（若输出才正常）\n",[123,123274,123275],{"class":125,"line":1210},[123,123276,123277],{"class":1972},"groups\n",[14,123279,123280],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[94,123282,123284],{"id":123283},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123286,123287,123290],{},[283,123288,123289],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123292,123293,123296],{},[283,123294,123295],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123298,123299],{},[283,123300,123301],{},"流程如下：",[14,123303,123304],{},"（1）.查找设备idVendor和idProduct",[14,123306,123307,123308,123311],{},"接入两个USB设备，在终端调用指令",[120,123309,123310],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123313,123314],{},[35,123315],{"alt":37,"src":123316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123318,123319,123320,123323],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[120,123321,123322],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123325,123326],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123328,123329],{},"（2）.编写映射规则",[14,123331,123332,123333,123336],{},"在",[120,123334,123335],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[114,123338,123340],{"className":117293,"code":123339,"language":117295,"meta":37,"style":37},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[120,123341,123342],{"__ignoreMap":37},[123,123343,123344,123346,123348],{"class":125,"line":126},[123,123345,24587],{"class":1972},[123,123347,118580],{"class":238},[123,123349,123350],{"class":238}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123352,123353],{},"输入如下内容：",[114,123355,123357],{"className":117293,"code":123356,"language":117295,"meta":37,"style":37},"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",[120,123358,123359,123389],{"__ignoreMap":37},[123,123360,123361,123364,123366,123369,123372,123375,123378,123380,123383,123386],{"class":125,"line":126},[123,123362,123363],{"class":133},"KERNEL",[123,123365,179],{"class":129},[123,123367,123368],{"class":238},"=\"ttyUSB*\",",[123,123370,123371],{"class":1972}," ATTRS",[123,123373,123374],{"class":238},"{idVendor}==",[123,123376,123377],{"class":1972},"\"10c4\"",[123,123379,512],{"class":1972},[123,123381,123382],{"class":238}," ATTRS{idProduct}==\"ea60\",",[123,123384,123385],{"class":238}," MODE:=\"0777\",",[123,123387,123388],{"class":238}," SYMLINK+=\"mylidar\"\n",[123,123390,123391,123393,123395,123397,123399,123401,123404,123406,123409,123411],{"class":125,"line":45},[123,123392,123363],{"class":133},[123,123394,179],{"class":129},[123,123396,123368],{"class":238},[123,123398,123371],{"class":1972},[123,123400,123374],{"class":238},[123,123402,123403],{"class":1972},"\"1a86\"",[123,123405,512],{"class":1972},[123,123407,123408],{"class":238}," ATTRS{idProduct}==\"7523\",",[123,123410,123385],{"class":238},[123,123412,123413],{"class":238}," SYMLINK+=\"mycar\"\n",[14,123415,123416],{},"代码解释：",[1141,123418,123419,123422,123425,123428],{},[80,123420,123421],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[80,123423,123424],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[80,123426,123427],{},"SYMLINK是符号连接，即绑定的别名；",[80,123429,123430],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123432,123433,123434,123437,123440],{},"***小提示：***",[23563,123435,123436],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[120,123438,123439],{},"\u002Fetc\u002Fudev\u002Frule.d",[23563,123441,123442],{},"目录即可。",[14,123444,123445],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123447,123448],{},"（3）.使规则生效",[14,123450,123451],{},"在终端下输入如下指令：",[114,123453,123455],{"className":117293,"code":123454,"language":117295,"meta":37,"style":37},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[120,123456,123457,123462,123474,123485,123489,123494,123507],{"__ignoreMap":37},[123,123458,123459],{"class":125,"line":126},[123,123460,123461],{"class":192},"# Ubuntu用下方命令\n",[123,123463,123464,123466,123468,123471],{"class":125,"line":45},[123,123465,24587],{"class":1972},[123,123467,120045],{"class":238},[123,123469,123470],{"class":238}," udev",[123,123472,123473],{"class":238}," reload\n",[123,123475,123476,123478,123480,123482],{"class":125,"line":1189},[123,123477,24587],{"class":1972},[123,123479,120045],{"class":238},[123,123481,123470],{"class":238},[123,123483,123484],{"class":238}," restart\n",[123,123486,123487],{"class":125,"line":1204},[123,123488,2409],{"emptyLinePlaceholder":50},[123,123490,123491],{"class":125,"line":1210},[123,123492,123493],{"class":192},"#Fedora用下方命令\n",[123,123495,123496,123498,123501,123504],{"class":125,"line":1224},[123,123497,24587],{"class":1972},[123,123499,123500],{"class":238}," udevadm",[123,123502,123503],{"class":238}," control",[123,123505,123506],{"class":182}," --reload\n",[123,123508,123509,123511,123513],{"class":125,"line":1230},[123,123510,24587],{"class":1972},[123,123512,123500],{"class":238},[123,123514,123515],{"class":238}," trigger\n",[14,123517,123518],{},"再重新插拔设备即可。",[14,123520,123521],{},"（4）.测试",[14,123523,123524],{},"终端下输入如下指令",[114,123526,123528],{"className":117293,"code":123527,"language":117295,"meta":37,"style":37},"ll \u002Fdev | grep ttyUSB\n",[120,123529,123530],{"__ignoreMap":37},[123,123531,123532,123535,123538,123540,123542],{"class":125,"line":126},[123,123533,123534],{"class":1972},"ll",[123,123536,123537],{"class":238}," \u002Fdev",[123,123539,25120],{"class":129},[123,123541,30247],{"class":1972},[123,123543,123544],{"class":238}," ttyUSB\n",[14,123546,123547],{},"运行结果如下：",[14,123549,123550],{},[35,123551],{"alt":37,"src":123552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123554,123555,123556,123559],{},"也可以多次插拔USB设备，会发现设备端口",[120,123557,123558],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123561,123562],{},[283,123563,117961],{},[14,123565,123566],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[94,123568,123570],{"id":123569},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123572,123573,123575],{},[283,123574,123289],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123577,123578,123580],{},[283,123579,123295],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123582,123583],{},[283,123584,123301],{},[14,123586,123587],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123589,123590],{},"调用如下指令查看第一台雷达的USB信息：",[114,123592,123594],{"className":117293,"code":123593,"language":117295,"meta":37,"style":37},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[120,123595,123596,123616],{"__ignoreMap":37},[123,123597,123598,123601,123603,123606,123609,123611,123613],{"class":125,"line":126},[123,123599,123600],{"class":1972},"udevadm",[123,123602,69832],{"class":238},[123,123604,123605],{"class":182}," --attribute-walk",[123,123607,123608],{"class":182}," --name=\u002Fdev\u002FttyUSB0",[123,123610,25120],{"class":129},[123,123612,30247],{"class":1972},[123,123614,123615],{"class":238}," KERNELS\n",[123,123617,123618,123620,123622,123624,123627,123629,123631],{"class":125,"line":45},[123,123619,123600],{"class":1972},[123,123621,69832],{"class":238},[123,123623,123605],{"class":182},[123,123625,123626],{"class":182}," --name=\u002Fdev\u002FttyACM0",[123,123628,25120],{"class":129},[123,123630,30247],{"class":1972},[123,123632,123615],{"class":238},[14,123634,123635],{},[35,123636],{"alt":37,"src":123637},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,123639,123640],{},"调用如下指令查看第二台雷达的USB信息：",[114,123642,123644],{"className":117293,"code":123643,"language":117295,"meta":37,"style":37},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[120,123645,123646],{"__ignoreMap":37},[123,123647,123648,123650,123652,123654,123657,123659,123661],{"class":125,"line":126},[123,123649,123600],{"class":1972},[123,123651,69832],{"class":238},[123,123653,123605],{"class":182},[123,123655,123656],{"class":182}," --name=\u002Fdev\u002FttyUSB1",[123,123658,25120],{"class":129},[123,123660,30247],{"class":1972},[123,123662,123615],{"class":238},[14,123664,123665,123666,123669,123670,123673,123674,123677],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[120,123667,123668],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[120,123671,123672],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[283,123675,123676],{},"唯一性标识","”。",[14,123679,123329],{},[14,123681,123332,123682,123684],{},[120,123683,123335],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[114,123686,123687],{"className":117293,"code":123339,"language":117295,"meta":37,"style":37},[120,123688,123689],{"__ignoreMap":37},[123,123690,123691,123693,123695],{"class":125,"line":126},[123,123692,24587],{"class":1972},[123,123694,118580],{"class":238},[123,123696,123350],{"class":238},[114,123698,123700],{"className":117293,"code":123699,"language":117295,"meta":37,"style":37},"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",[120,123701,123702,123731],{"__ignoreMap":37},[123,123703,123704,123706,123708,123710,123713,123715,123718,123721,123723,123726,123728],{"class":125,"line":126},[123,123705,123363],{"class":133},[123,123707,179],{"class":129},[123,123709,123368],{"class":238},[123,123711,123712],{"class":133}," KERNELS",[123,123714,179],{"class":129},[123,123716,123717],{"class":238},"=\"1-1.3:1.0\",",[123,123719,123720],{"class":1972}," MODE:",[123,123722,179],{"class":238},[123,123724,123725],{"class":1972},"\"0777\"",[123,123727,512],{"class":1972},[123,123729,123730],{"class":238}," SYMLINK+=\"rplidar_front\"\n",[123,123732,123733,123735,123737,123739,123741,123743,123746,123748,123750,123752,123754],{"class":125,"line":45},[123,123734,123363],{"class":133},[123,123736,179],{"class":129},[123,123738,123368],{"class":238},[123,123740,123712],{"class":133},[123,123742,179],{"class":129},[123,123744,123745],{"class":238},"=\"1-1.4:1.0\",",[123,123747,123720],{"class":1972},[123,123749,179],{"class":238},[123,123751,123725],{"class":1972},[123,123753,512],{"class":1972},[123,123755,123756],{"class":238}," SYMLINK+=\"rplidar_back\"\n",[14,123758,123448],{},[14,123760,123451],{},[114,123762,123763],{"className":117293,"code":123454,"language":117295,"meta":37,"style":37},[120,123764,123765,123769,123779,123789,123793,123797,123807],{"__ignoreMap":37},[123,123766,123767],{"class":125,"line":126},[123,123768,123461],{"class":192},[123,123770,123771,123773,123775,123777],{"class":125,"line":45},[123,123772,24587],{"class":1972},[123,123774,120045],{"class":238},[123,123776,123470],{"class":238},[123,123778,123473],{"class":238},[123,123780,123781,123783,123785,123787],{"class":125,"line":1189},[123,123782,24587],{"class":1972},[123,123784,120045],{"class":238},[123,123786,123470],{"class":238},[123,123788,123484],{"class":238},[123,123790,123791],{"class":125,"line":1204},[123,123792,2409],{"emptyLinePlaceholder":50},[123,123794,123795],{"class":125,"line":1210},[123,123796,123493],{"class":192},[123,123798,123799,123801,123803,123805],{"class":125,"line":1224},[123,123800,24587],{"class":1972},[123,123802,123500],{"class":238},[123,123804,123503],{"class":238},[123,123806,123506],{"class":182},[123,123808,123809,123811,123813],{"class":125,"line":1230},[123,123810,24587],{"class":1972},[123,123812,123500],{"class":238},[123,123814,123515],{"class":238},[14,123816,123518],{},[14,123818,123521],{},[14,123820,123524,123821,123824],{},[120,123822,123823],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,123826,123827],{},[35,123828],{"alt":37,"src":123829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,123831,123832],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,123834,123835,123837],{},[283,123836,117961],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[94,123839,123841],{"id":123840},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,123843,123844],{},"（1）.查看所连接的主机USB接口的信息",[114,123846,123848],{"className":117293,"code":123847,"language":117295,"meta":37,"style":37},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[120,123849,123850,123880],{"__ignoreMap":37},[123,123851,123852,123854,123856,123859,123861,123863,123865,123867,123870,123873,123875,123878],{"class":125,"line":126},[123,123853,123600],{"class":1972},[123,123855,69832],{"class":238},[123,123857,123858],{"class":182}," -a",[123,123860,29227],{"class":182},[123,123862,28433],{"class":133},[123,123864,123600],{"class":1972},[123,123866,69832],{"class":238},[123,123868,123869],{"class":182}," -q",[123,123871,123872],{"class":238}," path",[123,123874,25126],{"class":182},[123,123876,123877],{"class":238}," \u002Fdev\u002FttyACM0",[123,123879,140],{"class":133},[123,123881,123882,123884,123886,123888,123890,123892,123894,123896,123898,123900,123902,123905],{"class":125,"line":45},[123,123883,123600],{"class":1972},[123,123885,69832],{"class":238},[123,123887,123858],{"class":182},[123,123889,29227],{"class":182},[123,123891,28433],{"class":133},[123,123893,123600],{"class":1972},[123,123895,69832],{"class":238},[123,123897,123869],{"class":182},[123,123899,123872],{"class":238},[123,123901,25126],{"class":182},[123,123903,123904],{"class":238}," \u002Fdev\u002FttyUSB0",[123,123906,140],{"class":133},[14,123908,123909],{},[35,123910],{"alt":37,"src":123911},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,123913,123914],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,123916,123329],{},[14,123918,123332,123919,123684],{},[120,123920,123335],{},[114,123922,123923],{"className":117293,"code":123339,"language":117295,"meta":37,"style":37},[120,123924,123925],{"__ignoreMap":37},[123,123926,123927,123929,123931],{"class":125,"line":126},[123,123928,24587],{"class":1972},[123,123930,118580],{"class":238},[123,123932,123350],{"class":238},[114,123934,123936],{"className":117293,"code":123935,"language":117295,"meta":37,"style":37},"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",[120,123937,123938,123966,123992],{"__ignoreMap":37},[123,123939,123940,123942,123944,123947,123949,123951,123953,123955,123958,123961,123963],{"class":125,"line":126},[123,123941,123363],{"class":133},[123,123943,179],{"class":129},[123,123945,123946],{"class":238},"=\"ttyACM*\",",[123,123948,123371],{"class":1972},[123,123950,123374],{"class":238},[123,123952,123403],{"class":1972},[123,123954,512],{"class":1972},[123,123956,123957],{"class":238}," ATTRS{idProduct}==\"55d4\",",[123,123959,123960],{"class":238}," ATTRS{serial}==\"0001\",",[123,123962,123385],{"class":238},[123,123964,123965],{"class":238}," SYMLINK+=\"ttyACM_MCU\"\n",[123,123967,123968,123970,123972,123974,123976,123978,123980,123982,123984,123987,123989],{"class":125,"line":45},[123,123969,123363],{"class":133},[123,123971,179],{"class":129},[123,123973,123946],{"class":238},[123,123975,123371],{"class":1972},[123,123977,123374],{"class":238},[123,123979,123403],{"class":1972},[123,123981,512],{"class":1972},[123,123983,123957],{"class":238},[123,123985,123986],{"class":238}," ATTRS{serial}==\"0002\",",[123,123988,123385],{"class":238},[123,123990,123991],{"class":238}," SYMLINK+=\"ttyACM_Lidar\"\n",[123,123993,123994,123996,123998,124000,124002,124004,124006,124008,124010,124012],{"class":125,"line":1189},[123,123995,123363],{"class":133},[123,123997,179],{"class":129},[123,123999,123368],{"class":238},[123,124001,123371],{"class":1972},[123,124003,123374],{"class":238},[123,124005,123403],{"class":1972},[123,124007,512],{"class":1972},[123,124009,123408],{"class":238},[123,124011,123385],{"class":238},[123,124013,124014],{"class":238}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124016,123448],{},[14,124018,123451],{},[114,124020,124021],{"className":117293,"code":123454,"language":117295,"meta":37,"style":37},[120,124022,124023,124027,124037,124047,124051,124055,124065],{"__ignoreMap":37},[123,124024,124025],{"class":125,"line":126},[123,124026,123461],{"class":192},[123,124028,124029,124031,124033,124035],{"class":125,"line":45},[123,124030,24587],{"class":1972},[123,124032,120045],{"class":238},[123,124034,123470],{"class":238},[123,124036,123473],{"class":238},[123,124038,124039,124041,124043,124045],{"class":125,"line":1189},[123,124040,24587],{"class":1972},[123,124042,120045],{"class":238},[123,124044,123470],{"class":238},[123,124046,123484],{"class":238},[123,124048,124049],{"class":125,"line":1204},[123,124050,2409],{"emptyLinePlaceholder":50},[123,124052,124053],{"class":125,"line":1210},[123,124054,123493],{"class":192},[123,124056,124057,124059,124061,124063],{"class":125,"line":1224},[123,124058,24587],{"class":1972},[123,124060,123500],{"class":238},[123,124062,123503],{"class":238},[123,124064,123506],{"class":182},[123,124066,124067,124069,124071],{"class":125,"line":1230},[123,124068,24587],{"class":1972},[123,124070,123500],{"class":238},[123,124072,123515],{"class":238},[14,124074,124075,124076],{},"再重新插拔设备即可，或者 ",[283,124077,124078],{},"直接重启系统。",[14,124080,123521],{},[14,124082,123524,124083,123824],{},[120,124084,123823],{},[14,124086,124087],{},[35,124088],{"alt":37,"src":124089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124091,123832],{},[14,124093,124094,124096],{},[283,124095,117961],{}," 一些设备可能没有串口号等。",[94,124098,124100],{"id":124099},"_744-其他注意事项","7.4.4 其他注意事项",[14,124102,124103,124104,124106,124107,124110,124111,18420,124114,124117,124118,124120],{},"并非所有的USB设备端口号都是",[120,124105,123558],{},"的格式，比如Arduino的端口号可能是",[120,124108,124109],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[120,124112,124113],{},"videon",[120,124115,124116],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[120,124119,124113],{},"端口，绑定时需要关联的也是该接口。",[14,124122,124123,124124,124127,124128,124131,124132,124134,124135,124138,124139,124142,124143,124146,124147,124146,124150,124146,124153,28396],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[120,124125,124126],{},"KERNEL==\"ttyUSB*\"","修改为",[120,124129,124130],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[120,124133,124126],{},"修改为类似于",[120,124136,124137],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[120,124140,124141],{},"video[0,2,4,6]","表示可以绑定的端口为",[120,124144,124145],{},"video0","或",[120,124148,124149],{},"video2",[120,124151,124152],{},"video4",[120,124154,124155],{},"video6",[65,124157,124159],{"id":124158},"_75-挂载内网网页","7.5 挂载内网网页",[14,124161,124162],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124164,124165],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124167,124168],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124170,124171,124172],{},"Termux 下载地址（F-Droid）：",[372,124173,124174],{"href":124174,"rel":124175},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23875],[14,124177,124178],{},"首先打开app后，先更新软件缓存：",[114,124180,124182],{"className":117293,"code":124181,"language":117295,"meta":37,"style":37},"pkg update\n",[120,124183,124184],{"__ignoreMap":37},[123,124185,124186,124189],{"class":125,"line":126},[123,124187,124188],{"class":1972},"pkg",[123,124190,26253],{"class":238},[14,124192,124193],{},"然后换源",[114,124195,124197],{"className":117293,"code":124196,"language":117295,"meta":37,"style":37},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[120,124198,124199],{"__ignoreMap":37},[123,124200,124201,124203,124206],{"class":125,"line":126},[123,124202,123071],{"class":1972},[123,124204,124205],{"class":133}," $PREFIX",[123,124207,124208],{"class":238},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124210,124211],{},"将该文件内容替换为下面：",[114,124213,124215],{"className":117293,"code":124214,"language":117295,"meta":37,"style":37},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[120,124216,124217],{"__ignoreMap":37},[123,124218,124219,124222,124225,124228],{"class":125,"line":126},[123,124220,124221],{"class":1972},"deb",[123,124223,124224],{"class":238}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[123,124226,124227],{"class":238}," stable",[123,124229,124230],{"class":238}," main\n",[1141,124232,124233,124260],{},[80,124234,124235,124236,124238,124239],{},"如果你使用的是",[120,124237,123071],{},"编辑器：",[1141,124240,124241,124248,124254],{},[80,124242,124243,124244,124247],{},"按 ",[120,124245,124246],{},"Ctrl+O"," 保存文件。",[80,124249,124243,124250,124253],{},[120,124251,124252],{},"Enter"," 确认文件名。",[80,124255,124243,124256,124259],{},[120,124257,124258],{},"Ctrl+X"," 退出编辑器。",[80,124261,124235,124262,124238,124265],{},[120,124263,124264],{},"vim",[1141,124266,124267,124273],{},[80,124268,124243,124269,124272],{},[120,124270,124271],{},"Esc"," 退出编辑模式。",[80,124274,124275,124276,124278],{},"输入 ",[120,124277,119218],{}," 保存并退出。",[14,124280,124281],{},"接下来重新更新软件源：",[114,124283,124285],{"className":117293,"code":124284,"language":117295,"meta":37,"style":37},"pkg update && pkg upgrade\n",[120,124286,124287],{"__ignoreMap":37},[123,124288,124289,124291,124293,124295,124297],{"class":125,"line":126},[123,124290,124188],{"class":1972},[123,124292,117344],{"class":238},[123,124294,26201],{"class":133},[123,124296,124188],{"class":1972},[123,124298,117330],{"class":238},[14,124300,124301],{},"安装python：",[114,124303,124305],{"className":117293,"code":124304,"language":117295,"meta":37,"style":37},"pkg install python\n",[120,124306,124307],{"__ignoreMap":37},[123,124308,124309,124311,124313],{"class":125,"line":126},[123,124310,124188],{"class":1972},[123,124312,23844],{"class":238},[123,124314,124315],{"class":238}," python\n",[14,124317,124318,26484],{},[283,124319,124320],{},"通过Termux访问设备存储",[14,124322,124323],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[114,124325,124327],{"className":117293,"code":124326,"language":117295,"meta":37,"style":37},"termux-setup-storage\n",[120,124328,124329],{"__ignoreMap":37},[123,124330,124331],{"class":125,"line":126},[123,124332,124326],{"class":1972},[77,124334,124335],{},[80,124336,124337,26484,124340],{},[283,124338,124339],{},"进入HTML文件所在的目录",[77,124341,124342],{},[80,124343,124344,124345,124347],{},"使用",[120,124346,101273],{},"命令进入HTML文件所在的目录：",[114,124349,124351],{"className":117293,"code":124350,"language":117295,"meta":37,"style":37},"cd ~\u002Fyour_html_folder\n",[120,124352,124353],{"__ignoreMap":37},[123,124354,124355,124357],{"class":125,"line":126},[123,124356,101273],{"class":182},[123,124358,124359],{"class":238}," ~\u002Fyour_html_folder\n",[77,124361,124362],{"start":45},[80,124363,124364,26484,124367,124372,124389],{},[283,124365,124366],{},"启动Python HTTP服务器",[77,124368,124369],{},[80,124370,124371],{},"运行以下命令启动一个简单的HTTP服务器：",[114,124373,124375],{"className":117293,"code":124374,"language":117295,"meta":37,"style":37},"python -m http.server 8000\n",[120,124376,124377],{"__ignoreMap":37},[123,124378,124379,124381,124383,124386],{"class":125,"line":126},[123,124380,30391],{"class":1972},[123,124382,100879],{"class":182},[123,124384,124385],{"class":238}," http.server",[123,124387,124388],{"class":182}," 8000\n",[77,124390,124391],{"start":1189},[80,124392,124393,124394,124397],{},"这会在端口",[120,124395,124396],{},"8000","上启动一个Web服务器。",[1141,124399,124400],{},[80,124401,124402],{},"启动服务器后，Termux会显示日志信息，例如：",[114,124404,124406],{"className":120813,"code":124405,"language":120815,"meta":120816,"style":37},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[120,124407,124408],{"__ignoreMap":37},[123,124409,124410],{"class":125,"line":126},[123,124411,124405],{},[1141,124413,124414],{},[80,124415,124416],{},"这表示服务器已成功启动。",[14,124418,124419],{},[283,124420,124421],{},"在浏览器中访问HTML文件",[77,124423,124424],{},[80,124425,124426,26484,124429,124434],{},[283,124427,124428],{},"在同一设备上访问",[77,124430,124431],{},[80,124432,124433],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[114,124435,124438],{"className":124436,"code":124437,"language":71675,"meta":37,"style":37},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[120,124439,124440],{"__ignoreMap":37},[123,124441,124442,124445],{"class":125,"line":126},[123,124443,124444],{"class":133},"http:",[123,124446,124447],{"class":192},"\u002F\u002Flocalhost:8000\n",[1141,124449,124450],{},[80,124451,124452,124453,124456],{},"如果HTML文件中有",[120,124454,124455],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[65,124458,124460],{"id":124459},"_76-linux重点知识","7.6 Linux重点知识",[94,124462,124464],{"id":124463},"_761-关于点的说明","7.6.1 关于点的说明",[14,124466,124467],{},[35,124468],{"alt":37,"src":124469},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124471,124472],{},"一点本目录，两点上目录",[94,124474,124476],{"id":124475},"_762-目录","7.6.2 目录",[22008,124478,124480],{"id":124479},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124482,124483],{},[283,124484,124485],{},"\u002Fboot:",[14,124487,124488],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124490,124491],{},[283,124492,124493],{},"\u002Fetc:",[14,124495,124496],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124498,124499],{},[283,124500,124501],{},"\u002Flib：",[14,124503,124504],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124506,124507],{},[283,124508,124509],{},"\u002Fsys:",[14,124511,124512],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[22008,124514,124516],{"id":124515},"_7622-指令集合","7.6.2.2 指令集合",[14,124518,124519],{},[283,124520,124521],{},"\u002Fbin:",[14,124523,124524],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124526,124527],{},[283,124528,124529],{},"\u002Fsbin:",[14,124531,124532],{},"只有系统管理员才能使用的程序和指令",[22008,124534,124536],{"id":124535},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124538,124539],{},[283,124540,124541],{},"\u002Fdev:",[14,124543,124544],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124546,124547],{},[283,124548,124549],{},"\u002Fmedia:",[14,124551,124552],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124554,124555],{},[283,124556,124557],{},"\u002Fmnt:",[14,124559,124560],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[22008,124562,124564],{"id":124563},"_7624-临时文件","7.6.2.4 临时文件",[14,124566,124567],{},[283,124568,124569],{},"\u002Frun:",[14,124571,124572],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124574,124575],{},[283,124576,124577],{},"\u002Flost+found:",[14,124579,124580],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124582,124583],{},[283,124584,124585],{},"\u002Ftmp:",[14,124587,124588],{},"这个目录是用来存放一些临时文件的",[22008,124590,124592],{"id":124591},"_7625-账户","7.6.2.5 账户",[14,124594,124595],{},[283,124596,124597],{},"\u002Froot：",[14,124599,124600],{},"系统管理员的用户主目录",[14,124602,124603,26484],{},[283,124604,124605],{},"\u002Fhome",[14,124607,124608],{},"用户的主目录，以用户的账号命名的",[14,124610,124611,26484],{},[283,124612,124613],{},"\u002Fusr",[14,124615,124616],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,124618,124619],{},[283,124620,124621],{},"\u002Fusr\u002Fbin：",[14,124623,124624],{},"系统用户使用的应用程序与指令",[14,124626,124627],{},[283,124628,124629],{},"\u002Fusr\u002Fsbin：",[14,124631,124632],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,124634,124635],{},[283,124636,124637],{},"\u002Fusr\u002Fsrc：",[14,124639,124640],{},"内核源代码默认的放置目录",[22008,124642,124644],{"id":124643},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,124646,124647],{},[283,124648,124649],{},"\u002Fvar：",[14,124651,124652],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,124654,124655],{},[283,124656,124657],{},"\u002Fproc:",[14,124659,124660,124661,124664],{},"管理 ",[283,124662,124663],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[22008,124666,124668],{"id":124667},"_7627-扩展用的","7.6.2.7 扩展用的",[14,124670,124671],{},[283,124672,124673],{},"\u002Fopt:",[14,124675,124676],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,124678,124679],{},[283,124680,124681],{},"\u002Fsrv:",[14,124683,124684],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[94,124686,124688],{"id":124687},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,124690,124691],{},[35,124692],{"alt":37,"src":124693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,124695,124696],{},"windows-->linux:",[14,124698,124699],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,124701,124702],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,124704,124705],{},"linux传输文件到windows",[14,124707,124708],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[94,124710,124712],{"id":124711},"_764-易忘知识","7.6.4 易忘知识",[14,124714,124715],{},"操作系统内核查看",[114,124717,124718],{"className":117293,"code":121287,"language":117295,"meta":37,"style":37},[120,124719,124720],{"__ignoreMap":37},[123,124721,124722,124724],{"class":125,"line":126},[123,124723,70215],{"class":1972},[123,124725,121296],{"class":182},[14,124727,124728],{},[35,124729],{"alt":37,"src":124730},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,124732,124733],{},[35,124734],{"alt":37,"src":124735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[114,124737,124739],{"className":117293,"code":124738,"language":117295,"meta":37,"style":37},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[120,124740,124741,124753],{"__ignoreMap":37},[123,124742,124743,124745,124748,124751],{"class":125,"line":126},[123,124744,121504],{"class":1972},[123,124746,124747],{"class":238}," mvtest",[123,124749,124750],{"class":238}," mvtest2",[123,124752,2683],{"class":133},[123,124754,124755],{"class":125,"line":45},[123,124756,124757],{"class":1972},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,124759,124760],{},[35,124761],{"alt":37,"src":124762},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,124764,124765],{},[35,124766],{"alt":37,"src":124767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,124769,124770,124771,124774],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[120,124772,124773],{},"du -a"," 可以快速查看磁盘使用细节。",[94,124776,124778],{"id":124777},"_765-vim","7.6.5 Vim",[14,124780,124781],{},[35,124782],{"alt":37,"src":124783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,124785,124786],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,124788,124789],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,124791,124792],{},[283,124793,124794],{},"1.命令模式：",[14,124796,124797],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,124799,124800],{},"x 删除当前光标所在处的字符",[14,124802,124803],{},"：切换到底线命令模式，以在最底一行输入命令",[14,124805,124806],{},"a 进行插入模式，在光标下一个位置输入文本",[14,124808,124809],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,124811,124812],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,124814,124815],{},"dd 剪切当前行",[14,124817,124818],{},"yy 复制当前行",[14,124820,124821],{},"p 粘贴剪贴板内容到光标下方",[14,124823,124824],{},"P 粘贴剪贴板内容到光标上方",[14,124826,124827],{},"u 撤销上一次操作",[14,124829,124830],{},"ctrl+r 重做上一次操作",[14,124832,124833,124835],{},[929,124834],{}," 保存文件",[14,124837,124838,124840],{},[779,124839],{}," 退出Vim编辑器",[14,124842,124843,124845],{},[779,124844],{},"! 强制退出Vim编辑器，不保存修改",[14,124847,124848],{},[283,124849,124850],{},"2.输入模式：",[14,124852,124853],{},[35,124854],{"alt":37,"src":124855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,124857,124858],{},[283,124859,124860],{},"3.底线命令模式：",[14,124862,124863],{},[35,124864],{"alt":37,"src":124865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,124867,124868],{},"按下esc可以退出底线命令模式",[94,124870,124872],{"id":124871},"_766-apt","7.6.6 apt",[14,124874,124875],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[94,124877,124879],{"id":124878},"_767-home与root的区别","7.6.7 home与root的区别",[14,124881,124882],{},[35,124883],{"alt":37,"src":124884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,124886,124887],{},[35,124888],{"alt":37,"src":124889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,124891,124892],{},[35,124893],{"alt":37,"src":124894},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,124896,124897],{},[35,124898],{"alt":37,"src":124899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[94,124901,124903],{"id":124902},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,124905,124906],{},[372,124907,124908],{"href":124908,"rel":124909},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23875],[77,124911,124912,124915],{},[80,124913,124914],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[80,124916,124917],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,124919,124920],{},[35,124921],{"alt":37,"src":124922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,124924,124925],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,124927,124928],{},[35,124929],{"alt":37,"src":124930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[114,124932,124934],{"className":120813,"code":124933,"language":120815,"meta":120816,"style":37},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[120,124935,124936,124941],{"__ignoreMap":37},[123,124937,124938],{"class":125,"line":126},[123,124939,124940],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[123,124942,124943],{"class":125,"line":45},[123,124944,124945],{},".\u002Fpycharm.sh\n",[14,124947,124948],{},"3️⃣创建.desktop文件",[14,124950,124951],{},[283,124952,124953],{},"原理：",[1141,124955,124956,124966],{},[80,124957,124958,124959,124965],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[283,124960,124961,124964],{},[120,124962,124963],{},".desktop"," 文件"," 来识别应用。",[80,124967,124968,124970,124971],{},[120,124969,124963],{}," 文件相当于一个“应用注册表”，告诉系统：",[1141,124972,124973,124976,124979,124982,124985],{},[80,124974,124975],{},"应用名字（Name）",[80,124977,124978],{},"图标（Icon）",[80,124980,124981],{},"执行命令（Exec）",[80,124983,124984],{},"分类（Categories）",[80,124986,124987],{},"是否需要终端（Terminal）",[114,124989,124991],{"className":120813,"code":124990,"language":120815,"meta":120816,"style":37},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[120,124992,124993,124998],{"__ignoreMap":37},[123,124994,124995],{"class":125,"line":126},[123,124996,124997],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[123,124999,125000],{"class":125,"line":45},[123,125001,125002],{},"nano pycharm.desktop\n",[14,125004,125005],{},"nano是一个命令行下的编辑器，也可以使用vim",[114,125007,125009],{"className":120813,"code":125008,"language":120815,"meta":120816,"style":37},"[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",[120,125010,125011,125016,125021,125026,125031,125036,125041,125046,125051,125056],{"__ignoreMap":37},[123,125012,125013],{"class":125,"line":126},[123,125014,125015],{},"[Desktop Entry]\n",[123,125017,125018],{"class":125,"line":45},[123,125019,125020],{},"Version=1.0\n",[123,125022,125023],{"class":125,"line":1189},[123,125024,125025],{},"Type=Application\n",[123,125027,125028],{"class":125,"line":1204},[123,125029,125030],{},"Name=PyCharm\n",[123,125032,125033],{"class":125,"line":1210},[123,125034,125035],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[123,125037,125038],{"class":125,"line":1224},[123,125039,125040],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[123,125042,125043],{"class":125,"line":1230},[123,125044,125045],{},"Comment=JetBrains PyCharm IDE\n",[123,125047,125048],{"class":125,"line":1321},[123,125049,125050],{},"Categories=Development;IDE;\n",[123,125052,125053],{"class":125,"line":1327},[123,125054,125055],{},"Terminal=false\n",[123,125057,125058],{"class":125,"line":1339},[123,125059,125060],{},"StartupWMClass=jetbrains-pycharm\n",[1141,125062,125063,125069,125075,125081],{},[80,125064,125065,125068],{},[120,125066,125067],{},"Exec"," → 点击图标时执行的命令",[80,125070,125071,125074],{},[120,125072,125073],{},"Icon"," → 显示在菜单和桌面上的图标",[80,125076,125077,125080],{},[120,125078,125079],{},"Terminal=false"," → 不打开终端",[80,125082,125083,125086],{},[120,125084,125085],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125088,125089,125090],"blockquote",{},[14,125091,125092,125093,125095,125096],{},"可以理解成 ",[120,125094,124963],{}," 文件是 Linux 的 ",[283,125097,125098],{},"快捷方式配置文件",[14,125100,125101],{},"4️⃣设置可执行权限",[114,125103,125105],{"className":120813,"code":125104,"language":120815,"meta":120816,"style":37},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[120,125106,125107],{"__ignoreMap":37},[123,125108,125109],{"class":125,"line":126},[123,125110,125104],{},[14,125112,125113],{},"5️⃣桌面图标启动的话如下：",[114,125115,125117],{"className":120813,"code":125116,"language":120815,"meta":120816,"style":37},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[120,125118,125119,125124],{"__ignoreMap":37},[123,125120,125121],{"class":125,"line":126},[123,125122,125123],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[123,125125,125126],{"class":125,"line":45},[123,125127,125128],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[77,125130,125131],{"start":1189},[80,125132,125133],{},"下载Appimage文件实现软件的安装",[14,125135,125136],{},"1️⃣先下载appimage",[14,125138,125139],{},[372,125140,125141],{"href":125141,"rel":125142},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23875],[14,125144,125145],{},[35,125146],{"alt":37,"src":125147},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125149,125150],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125152,125153],{},[35,125154],{"alt":37,"src":125155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125157,125158],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125160,125161],{},[35,125162],{"alt":37,"src":125163},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125165,125166],{},[35,125167],{"alt":37,"src":125168},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125170,125171,125172,125175],{},"3️⃣给他们放在",[120,125173,125174],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125177,125178],{},"4️⃣给软件执行权限",[114,125180,125182],{"className":120813,"code":125181,"language":120815,"meta":120816,"style":37},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[120,125183,125184,125189],{"__ignoreMap":37},[123,125185,125186],{"class":125,"line":126},[123,125187,125188],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[123,125190,125191],{"class":125,"line":45},[123,125192,125193],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125195,125196],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[114,125198,125200],{"className":117293,"code":125199,"language":117295,"meta":37,"style":37},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[120,125201,125202,125209,125216,125222],{"__ignoreMap":37},[123,125203,125204,125206],{"class":125,"line":126},[123,125205,101273],{"class":182},[123,125207,125208],{"class":238}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[123,125210,125211,125213],{"class":125,"line":45},[123,125212,101280],{"class":1972},[123,125214,125215],{"class":238}," .\u002Fqqmusic.desktop\n",[123,125217,125218,125220],{"class":125,"line":1189},[123,125219,124264],{"class":1972},[123,125221,125215],{"class":238},[123,125223,125224,125226,125228,125230],{"class":125,"line":1204},[123,125225,24587],{"class":1972},[123,125227,24590],{"class":238},[123,125229,123130],{"class":238},[123,125231,125215],{"class":238},[14,125233,125234,125236],{},[120,125235,101280],{},"：一个 Linux 命令，主要功能是：",[1141,125238,125239,125242],{},[80,125240,125241],{},"如果文件不存在，就创建一个新的空文件",[80,125243,125244],{},"如果文件已存在，就更新该文件的最后修改时间",[114,125246,125248],{"className":120813,"code":125247,"language":120815,"meta":120816,"style":37},"[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",[120,125249,125250,125254,125259,125264,125269,125273,125278],{"__ignoreMap":37},[123,125251,125252],{"class":125,"line":126},[123,125253,125015],{},[123,125255,125256],{"class":125,"line":45},[123,125257,125258],{},"Name=QQ音乐\n",[123,125260,125261],{"class":125,"line":1189},[123,125262,125263],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[123,125265,125266],{"class":125,"line":1204},[123,125267,125268],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[123,125270,125271],{"class":125,"line":1210},[123,125272,125025],{},[123,125274,125275],{"class":125,"line":1224},[123,125276,125277],{},"Categories=Audio;Music;Player;\n",[123,125279,125280],{"class":125,"line":1230},[123,125281,125282],{},"Comment=QQ Music Client for Linux\n",[14,125284,125285],{},"将文件复制进去",[14,125287,125288],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125290,125291],{},[35,125292],{"alt":37,"src":125293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125295,125296],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125298,125299],{},[35,125300],{"alt":37,"src":125301},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125303,125304,125305,125308,125309,125312],{},"如果你用的不是KDE，那么也可以直接修改",[120,125306,125307],{},"qqmuic.desktop","：在exec的末尾加上",[120,125310,125311],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[114,125314,125316],{"className":120813,"code":125315,"language":120815,"meta":120816,"style":37},"[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",[120,125317,125318,125322,125326,125331,125335,125339,125343],{"__ignoreMap":37},[123,125319,125320],{"class":125,"line":126},[123,125321,125015],{},[123,125323,125324],{"class":125,"line":45},[123,125325,125258],{},[123,125327,125328],{"class":125,"line":1189},[123,125329,125330],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[123,125332,125333],{"class":125,"line":1204},[123,125334,125268],{},[123,125336,125337],{"class":125,"line":1210},[123,125338,125025],{},[123,125340,125341],{"class":125,"line":1224},[123,125342,125277],{},[123,125344,125345],{"class":125,"line":1230},[123,125346,125282],{},[14,125348,125349],{},[35,125350],{"alt":37,"src":125351},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125353,125354],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[114,125356,125358],{"className":120813,"code":125357,"language":120815,"meta":120816,"style":37},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[120,125359,125360],{"__ignoreMap":37},[123,125361,125362],{"class":125,"line":126},[123,125363,125357],{},[77,125365,125366],{"start":1204},[80,125367,125368],{},"去Flathub上安装软件",[14,125370,125371],{},[372,125372,125373],{"href":125373,"rel":125374},"https:\u002F\u002Fflathub.org\u002F",[23875],[14,125376,125377],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125379,125380],{},[35,125381],{"alt":37,"src":125382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[114,125384,125386],{"className":120813,"code":125385,"language":120815,"meta":120816,"style":37},"flatpak install flathub com.obsproject.Studio\n",[120,125387,125388],{"__ignoreMap":37},[123,125389,125390],{"class":125,"line":126},[123,125391,125385],{},[14,125393,125394],{},[35,125395],{"alt":37,"src":125396},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125398,125399],{},"2️⃣运行软件",[14,125401,125402],{},"a.官方方式：",[14,125404,125405],{},[35,125406],{"alt":37,"src":125407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[114,125409,125410],{"className":120813,"code":125385,"language":120815,"meta":120816,"style":37},[120,125411,125412],{"__ignoreMap":37},[123,125413,125414],{"class":125,"line":126},[123,125415,125385],{},[14,125417,125418],{},"b.当普通软件运行：",[14,125420,125421],{},[35,125422],{"alt":37,"src":125423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125425,125426],{},[35,125427],{"alt":37,"src":125428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5136,125430,125431],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-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":37,"searchDepth":45,"depth":45,"links":125433},[125434,125435,125440,125441,125447,125448],{"id":122166,"depth":45,"text":122167},{"id":122508,"depth":45,"text":122509,"children":125436},[125437,125438,125439],{"id":122512,"depth":1189,"text":122513},{"id":122579,"depth":1189,"text":122580},{"id":122840,"depth":1189,"text":122841},{"id":122993,"depth":45,"text":122994},{"id":123231,"depth":45,"text":123232,"children":125442},[125443,125444,125445,125446],{"id":123283,"depth":1189,"text":123284},{"id":123569,"depth":1189,"text":123570},{"id":123840,"depth":1189,"text":123841},{"id":124099,"depth":1189,"text":124100},{"id":124158,"depth":45,"text":124159},{"id":124459,"depth":45,"text":124460,"children":125449},[125450,125451,125452,125453,125454,125455,125456,125457],{"id":124463,"depth":1189,"text":124464},{"id":124475,"depth":1189,"text":124476},{"id":124687,"depth":1189,"text":124688},{"id":124711,"depth":1189,"text":124712},{"id":124777,"depth":1189,"text":124778},{"id":124871,"depth":1189,"text":124872},{"id":124878,"depth":1189,"text":124879},{"id":124902,"depth":1189,"text":124903},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122158,"description":47},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125464,"title":125465,"body":125466,"description":47,"extension":48,"meta":125470,"navigation":50,"path":125471,"seo":125472,"stem":125473,"__hash__":125474},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125467,"toc":125468},[],{"title":37,"searchDepth":45,"depth":45,"links":125469},[],{"category":30274},"\u002Fwiki\u002F2025-01-27-linux",{"title":125465,"description":47},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125476,"title":125477,"body":125478,"description":125482,"extension":48,"meta":125873,"navigation":50,"path":125874,"seo":125875,"stem":125876,"__hash__":125877},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125479,"toc":125871},[125480,125483,125487,125504,125507,125560,125564,125566,125606,125615,125619,125622,125863,125868],[14,125481,125482],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125484,125486],{"id":125485},"_1ubuntu环境配置","1.Ubuntu环境配置",[77,125488,125489,125492,125495,125498,125501],{},[80,125490,125491],{},"ubuntu环境换源",[80,125493,125494],{},"安装cuda",[80,125496,125497],{},"安装miniconda",[80,125499,125500],{},"安装pytorch",[80,125502,125503],{},"安装genesis",[14,125505,125506],{},"参考链接：",[114,125508,125510],{"className":23832,"code":125509,"language":23834,"meta":37,"style":37},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[120,125511,125512],{"__ignoreMap":37},[123,125513,125514,125517,125520,125523,125525,125528,125531,125533,125536,125539,125541,125544,125547,125549,125552,125555,125557],{"class":125,"line":126},[123,125515,125516],{"class":1972},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[123,125518,125519],{"class":238},"=blogdetail",[123,125521,125522],{"class":133},"&sharetype",[123,125524,179],{"class":129},[123,125526,125527],{"class":238},"blogdetail",[123,125529,125530],{"class":133},"&sharerId",[123,125532,179],{"class":129},[123,125534,125535],{"class":238},"144728092",[123,125537,125538],{"class":133},"&sharerefer",[123,125540,179],{"class":129},[123,125542,125543],{"class":238},"PC",[123,125545,125546],{"class":133},"&sharesource",[123,125548,179],{"class":129},[123,125550,125551],{"class":238},"qq_69379513",[123,125553,125554],{"class":133},"&sharefrom",[123,125556,179],{"class":129},[123,125558,125559],{"class":238},"from_link\n",[10,125561,125563],{"id":125562},"_2genesis-报错issue","2.Genesis 报错issue",[14,125565,125506],{},[114,125567,125568],{"className":23832,"code":125509,"language":23834,"meta":37,"style":37},[120,125569,125570],{"__ignoreMap":37},[123,125571,125572,125574,125576,125578,125580,125582,125584,125586,125588,125590,125592,125594,125596,125598,125600,125602,125604],{"class":125,"line":126},[123,125573,125516],{"class":1972},[123,125575,125519],{"class":238},[123,125577,125522],{"class":133},[123,125579,179],{"class":129},[123,125581,125527],{"class":238},[123,125583,125530],{"class":133},[123,125585,179],{"class":129},[123,125587,125535],{"class":238},[123,125589,125538],{"class":133},[123,125591,179],{"class":129},[123,125593,125543],{"class":238},[123,125595,125546],{"class":133},[123,125597,179],{"class":129},[123,125599,125551],{"class":238},[123,125601,125554],{"class":133},[123,125603,179],{"class":129},[123,125605,125559],{"class":238},[114,125607,125609],{"className":23832,"code":125608,"language":23834,"meta":37,"style":37},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[120,125610,125611],{"__ignoreMap":37},[123,125612,125613],{"class":125,"line":126},[123,125614,125608],{"class":1972},[10,125616,125618],{"id":125617},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,125620,125621],{},"hello_robot.py",[114,125623,125625],{"className":30389,"code":125624,"language":30391,"meta":37,"style":37},"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",[120,125626,125627,125633,125648,125652,125664,125676,125680,125693,125697,125716,125726,125736,125750,125754,125758,125763,125767,125777,125784,125798,125805,125815,125820,125824,125842,125847,125851,125858],{"__ignoreMap":37},[123,125628,125629,125631],{"class":125,"line":126},[123,125630,30403],{"class":129},[123,125632,45316],{"class":133},[123,125634,125635,125638,125641,125643,125645],{"class":125,"line":45},[123,125636,125637],{"class":133},"os.environ[",[123,125639,125640],{"class":238},"'PYOPENGL_PLATFORM'",[123,125642,4452],{"class":133},[123,125644,179],{"class":129},[123,125646,125647],{"class":238}," 'glx'\n",[123,125649,125650],{"class":125,"line":1189},[123,125651,2409],{"emptyLinePlaceholder":50},[123,125653,125654,125656,125659,125661],{"class":125,"line":1204},[123,125655,30403],{"class":129},[123,125657,125658],{"class":133}," genesis ",[123,125660,31394],{"class":129},[123,125662,125663],{"class":133}," gs\n",[123,125665,125666,125668,125671,125673],{"class":125,"line":1210},[123,125667,30748],{"class":129},[123,125669,125670],{"class":133}," pynput ",[123,125672,30403],{"class":129},[123,125674,125675],{"class":133}," keyboard\n",[123,125677,125678],{"class":125,"line":1224},[123,125679,2409],{"emptyLinePlaceholder":50},[123,125681,125682,125685,125688,125690],{"class":125,"line":1230},[123,125683,125684],{"class":133},"gs.init(",[123,125686,125687],{"class":5226},"backend",[123,125689,179],{"class":129},[123,125691,125692],{"class":133},"gs.gpu)\n",[123,125694,125695],{"class":125,"line":1321},[123,125696,2409],{"emptyLinePlaceholder":50},[123,125698,125699,125702,125704,125707,125710,125712,125714],{"class":125,"line":1327},[123,125700,125701],{"class":133},"scene ",[123,125703,179],{"class":129},[123,125705,125706],{"class":133}," gs.Scene(",[123,125708,125709],{"class":5226},"show_viewer",[123,125711,179],{"class":129},[123,125713,31487],{"class":182},[123,125715,140],{"class":133},[123,125717,125718,125721,125723],{"class":125,"line":1339},[123,125719,125720],{"class":133},"plane ",[123,125722,179],{"class":129},[123,125724,125725],{"class":133}," scene.add_entity(gs.morphs.Plane())\n",[123,125727,125728,125731,125733],{"class":125,"line":1621},[123,125729,125730],{"class":133},"franka ",[123,125732,179],{"class":129},[123,125734,125735],{"class":133}," scene.add_entity(\n",[123,125737,125738,125741,125743,125745,125748],{"class":125,"line":1626},[123,125739,125740],{"class":133},"    gs.morphs.MJCF(",[123,125742,45365],{"class":5226},[123,125744,179],{"class":129},[123,125746,125747],{"class":238},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[123,125749,38058],{"class":133},[123,125751,125752],{"class":125,"line":1632},[123,125753,140],{"class":133},[123,125755,125756],{"class":125,"line":1637},[123,125757,2409],{"emptyLinePlaceholder":50},[123,125759,125760],{"class":125,"line":1651},[123,125761,125762],{"class":133},"scene.build()\n",[123,125764,125765],{"class":125,"line":1656},[123,125766,2409],{"emptyLinePlaceholder":50},[123,125768,125769,125771,125774],{"class":125,"line":1662},[123,125770,31958],{"class":129},[123,125772,125773],{"class":1972}," on_press",[123,125775,125776],{"class":133},"(key):\n",[123,125778,125779,125782],{"class":125,"line":1683},[123,125780,125781],{"class":129},"    try",[123,125783,3748],{"class":133},[123,125785,125786,125788,125791,125793,125796],{"class":125,"line":1688},[123,125787,2506],{"class":129},[123,125789,125790],{"class":133}," key.char ",[123,125792,2958],{"class":129},[123,125794,125795],{"class":238}," 'q'",[123,125797,3748],{"class":133},[123,125799,125800,125802],{"class":125,"line":1702},[123,125801,15742],{"class":129},[123,125803,125804],{"class":182}," False\n",[123,125806,125807,125810,125813],{"class":125,"line":1707},[123,125808,125809],{"class":129},"    except",[123,125811,125812],{"class":182}," AttributeError",[123,125814,3748],{"class":133},[123,125816,125817],{"class":125,"line":1736},[123,125818,125819],{"class":129},"        pass\n",[123,125821,125822],{"class":125,"line":1741},[123,125823,2409],{"emptyLinePlaceholder":50},[123,125825,125826,125829,125831,125834,125837,125839],{"class":125,"line":1758},[123,125827,125828],{"class":133},"listener ",[123,125830,179],{"class":129},[123,125832,125833],{"class":133}," keyboard.Listener(",[123,125835,125836],{"class":5226},"on_press",[123,125838,179],{"class":129},[123,125840,125841],{"class":133},"on_press)\n",[123,125843,125844],{"class":125,"line":1763},[123,125845,125846],{"class":133},"listener.start()\n",[123,125848,125849],{"class":125,"line":1768},[123,125850,2409],{"emptyLinePlaceholder":50},[123,125852,125853,125855],{"class":125,"line":1773},[123,125854,108660],{"class":129},[123,125856,125857],{"class":133}," listener.running:\n",[123,125859,125860],{"class":125,"line":1787},[123,125861,125862],{"class":133},"    scene.step()\n",[14,125864,125865],{},[35,125866],{"alt":37,"src":125867},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5136,125869,125870],{},"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":37,"searchDepth":45,"depth":45,"links":125872},[],{"category":23388},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125477,"description":125482},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125879,"title":125880,"body":125881,"description":47,"extension":48,"meta":125896,"navigation":50,"path":125897,"seo":125898,"stem":125899,"__hash__":125900},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125882,"toc":125893},[125883,125886,125890],[10,125884,125880],{"id":125885},"_1-基础知识",[65,125887,125889],{"id":125888},"_11-js的组成","1.1 js的组成",[14,125891,125892],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":37,"searchDepth":45,"depth":45,"links":125894},[125895],{"id":125888,"depth":45,"text":125889},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125880,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125902,"title":125903,"body":125904,"description":47,"extension":48,"meta":126043,"navigation":50,"path":126044,"seo":126045,"stem":126046,"__hash__":126047},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125905,"toc":126031},[125906,125909,125913,125916,125920,125930,125934,125937,125940,125943,125947,125954,125960,125964,125970,125981,125985,125988,125992,125995,125999,126002,126006,126009,126013,126016,126019,126022,126025,126028],[10,125907,125903],{"id":125908},"_2-vscode必备内容",[65,125910,125912],{"id":125911},"_21-标签分类","2.1 标签分类",[14,125914,125915],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[65,125917,125919],{"id":125918},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,125921,125922,125923,125925,125926,125929],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[120,125924,360],{}," 然后按 ",[120,125927,125928],{},"Tab","，快速自动生成基本结构。",[65,125931,125933],{"id":125932},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,125935,125936],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,125938,125939],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,125941,125942],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[65,125944,125946],{"id":125945},"_24-视图缩放","2.4 视图缩放",[14,125948,125949,125950,125953],{},"缩放视图 ",[120,125951,125952],{},"ctrl+"," 可实现代码增大。",[14,125955,125956,125959],{},[120,125957,125958],{},"ctrl-"," 可实现代码减小。",[65,125961,125963],{"id":125962},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,125965,125966,125967,28396],{},"VSCode 新建文件快捷键为 ",[120,125968,125969],{},"ctrl+N",[14,125971,125972,125973,125976,125977,125980],{},"保存快捷键为 ",[120,125974,125975],{},"ctrl+S","，将文本保存为 ",[120,125978,125979],{},".html"," 文件。",[65,125982,125984],{"id":125983},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,125986,125987],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[65,125989,125991],{"id":125990},"_27-vscode-icons","2.7 vscode-icons",[14,125993,125994],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[65,125996,125998],{"id":125997},"_28-easy-less","2.8 Easy LESS",[14,126000,126001],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[65,126003,126005],{"id":126004},"_29-会了吧插件","2.9 会了吧插件",[14,126007,126008],{},"会了吧插件可以展示代码中英语单词的意思。",[65,126010,126012],{"id":126011},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126014,126015],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126017,126018],{},"②选定多个相同的单词:ctrl+D",[14,126020,126021],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126023,126024],{},"④全局替换某些单词:ctrl+h",[14,126026,126027],{},"⑤快速定位到某一行:ctrl+g",[14,126029,126030],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":37,"searchDepth":45,"depth":45,"links":126032},[126033,126034,126035,126036,126037,126038,126039,126040,126041,126042],{"id":125911,"depth":45,"text":125912},{"id":125918,"depth":45,"text":125919},{"id":125932,"depth":45,"text":125933},{"id":125945,"depth":45,"text":125946},{"id":125962,"depth":45,"text":125963},{"id":125983,"depth":45,"text":125984},{"id":125990,"depth":45,"text":125991},{"id":125997,"depth":45,"text":125998},{"id":126004,"depth":45,"text":126005},{"id":126011,"depth":45,"text":126012},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125903,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126049,"title":126050,"body":126051,"description":47,"extension":48,"meta":126210,"navigation":50,"path":126211,"seo":126212,"stem":126213,"__hash__":126214},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126052,"toc":126202},[126053,126056,126060,126070,126076,126082,126086,126095,126099,126104,126107,126110,126114,126117,126127,126136,126145,126154,126164,126171,126176,126181,126194],[10,126054,126050],{"id":126055},"_3-html文本与容器标签",[65,126057,126059],{"id":126058},"_31-标题标签","3.1 标题标签",[14,126061,126062,126065,126066,126069],{},[120,126063,126064],{},"\u003Ch1>","我是一级标签",[120,126067,126068],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126071,126072,126065,126074],{},[120,126073,126064],{},[120,126075,126068],{},[14,126077,123332,126078,126081],{},[120,126079,126080],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[65,126083,126085],{"id":126084},"_32-段落标签","3.2 段落标签",[14,126087,126088,126091,126092],{},[120,126089,126090],{},"\u003Cp>","....",[120,126093,126094],{},"\u003C\u002Fp>",[65,126096,126098],{"id":126097},"_33-换行标签","3.3 换行标签",[14,126100,126101],{},[120,126102,126103],{},"\u003Cbr \u002F>",[14,126105,126106],{},"具有强制换行的作用",[14,126108,126109],{},"单标签",[65,126111,126113],{"id":126112},"_34-文本格式化标签","3.4 文本格式化标签",[14,126115,126116],{},"提供粗体、斜体和下划线等效果",[14,126118,126119,126120,82550,126123,126126],{},"加粗：",[120,126121,126122],{},"\u003Cstrong>...\u003C\u002Fstrong>",[120,126124,126125],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126128,126129,126130,82550,126133,126126],{},"斜体：",[120,126131,126132],{},"\u003Cem>...\u003C\u002Fem>",[120,126134,126135],{},"\u003Ci>...\u003C\u002Fi>",[14,126137,126138,126139,82550,126142,126126],{},"删除线：",[120,126140,126141],{},"\u003Cdel>...\u003C\u002Fdel>",[120,126143,126144],{},"\u003Cs>...\u003C\u002Fs>",[14,126146,126147,126148,82550,126151,126126],{},"下划线：",[120,126149,126150],{},"\u003Cins>...\u003C\u002Fins>",[120,126152,126153],{},"\u003Cu>...\u003C\u002Fu>",[65,126155,126157,126158,18420,126161,102690],{"id":126156},"_35-div和span标签","3.5 ",[120,126159,126160],{},"\u003Cdiv>",[120,126162,126163],{},"\u003Cspan>",[14,126165,126166,101015,126168,126170],{},[120,126167,126160],{},[120,126169,126163],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126172,126173],{},[120,126174,126175],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126177,126178],{},[120,126179,126180],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126182,126183,126184,126186,126187,126189,126190,126193],{},"两者特点：①",[120,126185,126160],{}," 标签用来布局，但一行通常只放一个 ",[120,126188,126160],{},"。可以理解为一个大盒子，独占一行，在 ",[120,126191,126192],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126195,77260,126196,126198,126199,126201],{},[120,126197,126163],{}," 标签也可用于布局，一行可以放多个 ",[120,126200,126163],{},"，可理解为小盒子。",{"title":37,"searchDepth":45,"depth":45,"links":126203},[126204,126205,126206,126207,126208],{"id":126058,"depth":45,"text":126059},{"id":126084,"depth":45,"text":126085},{"id":126097,"depth":45,"text":126098},{"id":126112,"depth":45,"text":126113},{"id":126156,"depth":45,"text":126209},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126050,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126216,"title":126217,"body":126218,"description":47,"extension":48,"meta":126415,"navigation":50,"path":126416,"seo":126417,"stem":126418,"__hash__":126419},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126219,"toc":126407},[126220,126223,126227,126230,126236,126243,126249,126255,126258,126261,126264,126267,126270,126273,126276,126280,126283,126286,126289,126295,126301,126307,126314,126318,126324,126330,126333,126336,126342,126348,126354,126357,126360,126364,126367,126377,126383,126387,126396,126400,126403],[10,126221,126217],{"id":126222},"_4-html图像与链接",[65,126224,126226],{"id":126225},"_41-图像标签","4.1 图像标签",[14,126228,126229],{},"（1）标签",[14,126231,126232,126235],{},[120,126233,126234],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126237,126238,126239,126242],{},"src是",[120,126240,126241],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126244,126245,126246],{},"alt:文本，替换文本。图像不能显示的文字 ",[120,126247,126248],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126250,126251,126252],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[120,126253,126254],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126256,126257],{},"width:像素，设置图像的宽度",[14,126259,126260],{},"height:像素，设置图像的高度",[14,126262,126263],{},"border：像素，设置图像的边框粗细",[14,126265,126266],{},"（2）图像标签属性的注意点：",[14,126268,126269],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126271,126272],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126274,126275],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[65,126277,126279],{"id":126278},"_42-路径注意要点","4.2 路径注意要点：",[14,126281,126282],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126284,126285],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126287,126288],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126290,126291,126292],{},"①同一级路径：图像文件位于HTML文件同一级，如",[120,126293,126294],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126296,126297,126298],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[120,126299,126300],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126302,126303,126304],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[120,126305,126306],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126308,126309,126310,385],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[372,126311,126312],{"href":126312,"rel":126313},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23875],[65,126315,126317],{"id":126316},"_43-超链接标签","4.3 超链接标签",[14,126319,126320,126323],{},[120,126321,126322],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126325,126326,126327],{},"①语法格式：",[120,126328,126329],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126331,126332],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126334,126335],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126337,126338,126339],{},"③链接分类：外部链接：",[120,126340,126341],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126343,126344,126345],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[120,126346,126347],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126349,126350,126351],{},"空链接：如果当时没有确定链接目标时，",[120,126352,126353],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126355,126356],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126358,126359],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[65,126361,126363],{"id":126362},"_44-锚点链接","4.4 锚点链接",[14,126365,126366],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126368,126369,126370,126373,126374],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[120,126371,126372],{},"\u003Ca href=\"#two\">","第二级",[120,126375,126376],{},"\u003C\u002Fa>",[14,126378,126379,126380],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[120,126381,126382],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[65,126384,126386],{"id":126385},"_45-注释标签","4.5 注释标签",[14,126388,126389,126392,126393],{},[120,126390,126391],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[120,126394,126395],{},"ctrl+\u002F",[65,126397,126399],{"id":126398},"_46-特殊字符","4.6 特殊字符",[14,126401,126402],{},"可以实现添加多个空格",[35,126404],{"style":126405,"src":126406},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":37,"searchDepth":45,"depth":45,"links":126408},[126409,126410,126411,126412,126413,126414],{"id":126225,"depth":45,"text":126226},{"id":126278,"depth":45,"text":126279},{"id":126316,"depth":45,"text":126317},{"id":126362,"depth":45,"text":126363},{"id":126385,"depth":45,"text":126386},{"id":126398,"depth":45,"text":126399},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126217,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126421,"title":126422,"body":126423,"description":47,"extension":48,"meta":126716,"navigation":50,"path":126717,"seo":126718,"stem":126719,"__hash__":126720},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126424,"toc":126707},[126425,126428,126432,126435,126438,126441,126444,126447,126450,126453,126456,126459,126479,126485,126489,126492,126495,126498,126501,126504,126507,126511,126514,126517,126520,126523,126536,126541,126544,126547,126562,126565,126568,126571,126574,126577,126581,126584,126591,126594,126597,126600,126603,126606,126612,126615,126618,126624,126627,126630,126633,126639,126642,126645,126659,126666,126669,126672,126679,126688,126691,126694,126697,126701,126704],[10,126426,126422],{"id":126427},"_5-html表格列表与表单",[65,126429,126431],{"id":126430},"_51-表格标签","5.1 表格标签",[14,126433,126434],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126436,126437],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126439,126440],{},"②表格基本语法：",[35,126442],{"style":126405,"src":126443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126445,126446],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[35,126448],{"style":126405,"src":126449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126451,126452],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[35,126454],{"style":126405,"src":126455},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126457,126458],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126460,126461,126464,126465,126467,126468,126471,126472,126474,126475,126478],{},[120,126462,126463],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[120,126466,126463],{},"内部必须拥有",[120,126469,126470],{},"\u003Ctr>","标签，一般位于第一行，",[120,126473,126463],{},"比",[120,126476,126477],{},"\u003Cth>","范围广",[14,126480,126481,126484],{},[120,126482,126483],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[65,126486,126488],{"id":126487},"_52-合并单元格","5.2 合并单元格",[14,126490,126491],{},"（1）合并单元格方式：",[14,126493,126494],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126496,126497],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126499,126500],{},"（2）目标单元格：",[14,126502,126503],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126505,126506],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[65,126508,126510],{"id":126509},"_53-列表标签","5.3 列表标签",[14,126512,126513],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126515,126516],{},"①无序列表：",[35,126518],{"style":126405,"src":126519},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126521,126522],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126524,126525,126528,126529,126532,126533,126535],{},[120,126526,126527],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[120,126530,126531],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[120,126534,126527],{},"中输入其他标签或文字是不对的",[14,126537,126538,126540],{},[120,126539,126531],{},"之间相当于一个容器，可以容纳所有元素",[14,126542,126543],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126545,126546],{},"在css中去除前边的小圆点采用如下代码:",[114,126548,126552],{"className":126549,"code":126550,"language":126551,"meta":37,"style":37},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[120,126553,126554],{"__ignoreMap":37},[123,126555,126556,126559],{"class":125,"line":126},[123,126557,126558],{"class":51311},"list-style",[123,126560,126561],{"class":133},": none;\n",[14,126563,126564],{},"②有序列表：",[35,126566],{"style":126405,"src":126567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126569,126570],{},"③自定义列表：",[35,126572],{"style":126405,"src":126573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[35,126575],{"style":126405,"src":126576},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[65,126578,126580],{"id":126579},"_54-表单标签","5.4 表单标签",[14,126582,126583],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126585,126586,126587,126590],{},"（1）表单域：包含单元素的区域，",[120,126588,126589],{},"\u003Cform>","标签可以实现信息的收集和传递。",[35,126592],{"style":126405,"src":126593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126595,126596],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126598,126599],{},"表单元素提交必须有name属性",[14,126601,126602],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126604,126605],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126607,77237,126608,126611],{},[120,126609,126610],{},"\u003Cinput>","输入表单元素",[35,126613],{"style":126405,"src":126614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[35,126616],{"style":126405,"src":126617},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,126619,126620,126621],{},"单选按钮：",[120,126622,126623],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[35,126625],{"style":126405,"src":126626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,126628,126629],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[35,126631],{"style":126405,"src":126632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,126634,126635,126638],{},[283,126636,126637],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,126640,126641],{},"②select下拉表单元素：可以节约页面控件",[35,126643],{"style":126405,"src":126644},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,126646,126647,13805,126649,126652,126653,126655,126656,126658],{},[283,126648,163],{},[120,126650,126651],{},"\u003Cselect>","中至少包含一对",[120,126654,102711],{},"；在",[120,126657,102711],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,126660,126661,126662,126665],{},"③",[120,126663,126664],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[35,126667],{"style":126405,"src":126668},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,126670,126671],{},"3行20列",[65,126673,126675,126676,102690],{"id":126674},"_55-lable标签","5.5 ",[120,126677,126678],{},"\u003Clable>",[14,126680,126681,126682,126684,126685,126687],{},"它不是表单标签，但常常与表单标签搭配使用，",[120,126683,126678],{},"标签用于绑定一个表单标签，当点击",[120,126686,126678],{},"标签内的文本",[14,126689,126690],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[35,126692],{"style":126405,"src":126693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[35,126695],{"style":126405,"src":126696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[65,126698,126700],{"id":126699},"_56-实例","5.6 实例",[35,126702],{"style":126405,"src":126703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5136,126705,126706],{},"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":37,"searchDepth":45,"depth":45,"links":126708},[126709,126710,126711,126712,126713,126715],{"id":126430,"depth":45,"text":126431},{"id":126487,"depth":45,"text":126488},{"id":126509,"depth":45,"text":126510},{"id":126579,"depth":45,"text":126580},{"id":126674,"depth":45,"text":126714},"5.5 \u003Clable>标签",{"id":126699,"depth":45,"text":126700},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126422,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126722,"title":126723,"body":126724,"description":47,"extension":48,"meta":127273,"navigation":50,"path":127274,"seo":127275,"stem":127276,"__hash__":127277},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126725,"toc":127248},[126726,126729,126733,126736,126739,126743,126746,126749,126752,126755,126758,126761,126764,126768,126771,126775,126778,126781,126784,126788,126791,126794,126797,126803,126806,126809,126812,126815,126818,126821,126824,126857,126861,126864,126867,126870,126874,126877,126880,126883,126886,126889,126893,126896,126899,126902,126906,126909,126913,126916,126920,126923,126928,126932,126935,126939,126942,126945,126948,126951,126978,126981,126985,126988,126991,126996,126999,127002,127006,127009,127014,127017,127020,127023,127027,127030,127033,127036,127040,127043,127046,127049,127053,127057,127060,127100,127103,127107,127114,127117,127121,127124,127170,127174,127177,127180,127183,127211,127215,127218,127245],[10,126727,126723],{"id":126728},"_6-css语法与文本样式",[65,126730,126732],{"id":126731},"_61-css语法规范","6.1 css语法规范",[14,126734,126735],{},"由两部分组成，选择器及一条或多条声明",[35,126737],{"style":126405,"src":126738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,126740,126741],{},[283,126742,163],{},[14,126744,126745],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,126747,126748],{},"②属性与属性值以“键值对”的形式出现",[14,126750,126751],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,126753,126754],{},"④属性和属性值之间用英文“;”分开",[35,126756],{"style":126405,"src":126757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[35,126759],{"style":126405,"src":126760},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[35,126762],{"style":126405,"src":126763},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[65,126765,126767],{"id":126766},"_62-css选择器","6.2 css选择器",[14,126769,126770],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[94,126772,126774],{"id":126773},"_621-标签选择器","6.2.1 标签选择器",[14,126776,126777],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,126779,126780],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[35,126782],{"style":126405,"src":126783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[94,126785,126787],{"id":126786},"_622-类选择器","6.2.2 类选择器",[14,126789,126790],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,126792,126793],{},"②样例",[35,126795],{"style":126405,"src":126796},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,126798,126799,126800,126802],{},"③ ",[283,126801,126637],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,126804,126805],{},"可以理解为给这个标签起了个名字，来表示；",[14,126807,126808],{},"长名称或词组可以使用横线来为选择器命名；",[14,126810,126811],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,126813,126814],{},"命名要有意义；",[35,126816],{"style":126405,"src":126817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,126819,126820],{},"类选择器也可以指定特殊的元素p.center{}",[14,126822,126823],{},"p.center和.center都对",[114,126825,126827],{"className":126549,"code":126826,"language":126551,"meta":37,"style":37},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[120,126828,126829,126834,126843,126853],{"__ignoreMap":37},[123,126830,126831],{"class":125,"line":126},[123,126832,126833],{"class":192},"\u002F* 类选择器指定特殊元素 *\u002F\n",[123,126835,126836,126838,126841],{"class":125,"line":45},[123,126837,14],{"class":51311},[123,126839,126840],{"class":1972},".center",[123,126842,15582],{"class":133},[123,126844,126845,126847,126849,126851],{"class":125,"line":1189},[123,126846,70537],{"class":182},[123,126848,51448],{"class":133},[123,126850,51603],{"class":182},[123,126852,1300],{"class":133},[123,126854,126855],{"class":125,"line":1204},[123,126856,1574],{"class":133},[94,126858,126860],{"id":126859},"_623-多类名使用","6.2.3 多类名使用",[14,126862,126863],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[35,126865],{"style":126405,"src":126866},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,126868,126869],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[94,126871,126873],{"id":126872},"_624-id选择器","6.2.4 id选择器",[14,126875,126876],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,126878,126879],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[35,126881],{"style":126405,"src":126882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,126884,126885],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,126887,126888],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[94,126890,126892],{"id":126891},"_625-通配符选择器","6.2.5 通配符选择器",[14,126894,126895],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,126897,126898],{},"* {",[14,126900,126901],{},"color=\"red\"}",[94,126903,126905],{"id":126904},"_626-总结","6.2.6 总结",[35,126907],{"style":126405,"src":126908},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[65,126910,126912],{"id":126911},"_63-css字体属性","6.3 css字体属性",[14,126914,126915],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[94,126917,126919],{"id":126918},"_631-字体系列","6.3.1 字体系列",[14,126921,126922],{},"font-family: '宋体';",[14,126924,126925,126927],{},[283,126926,163],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[94,126929,126931],{"id":126930},"_632-字体大小","6.3.2 字体大小",[14,126933,126934],{},"font-size: 20px",[14,126936,126937,26484],{},[283,126938,126637],{},[14,126940,126941],{},"①px（像素）大小是网页的最常用单位",[14,126943,126944],{},"②谷歌浏览器默认为16px",[14,126946,126947],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,126949,126950],{},"④可以给body指定整个页面的大小：会自动引用",[114,126952,126954],{"className":126549,"code":126953,"language":126551,"meta":37,"style":37},"body {\n  font-size: 16px;\n}\n",[120,126955,126956,126962,126974],{"__ignoreMap":37},[123,126957,126958,126960],{"class":125,"line":126},[123,126959,51811],{"class":51311},[123,126961,15582],{"class":133},[123,126963,126964,126966,126968,126970,126972],{"class":125,"line":45},[123,126965,70637],{"class":182},[123,126967,51448],{"class":133},[123,126969,735],{"class":182},[123,126971,51503],{"class":129},[123,126973,1300],{"class":133},[123,126975,126976],{"class":125,"line":1189},[123,126977,1574],{"class":133},[14,126979,126980],{},"⑤标题标签比较特殊，需要单独指定大小",[94,126982,126984],{"id":126983},"_633-字体粗细","6.3.3 字体粗细",[14,126986,126987],{},"font-weight: bold;",[14,126989,126990],{},"font-weight: 100；",[14,126992,126993,126995],{},[283,126994,163],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,126997,126998],{},"font-weight= 400;",[14,127000,127001],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[94,127003,127005],{"id":127004},"_634-文字样式","6.3.4 文字样式",[14,127007,127008],{},"font-style: normal；",[14,127010,127011,26484],{},[283,127012,127013],{},"属性值",[14,127015,127016],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127018,127019],{},"②italic：浏览器会显示斜体的字体样式",[35,127021],{"style":126405,"src":127022},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[94,127024,127026],{"id":127025},"_635-字体符合属性","6.3.5 字体符合属性",[35,127028],{"style":126405,"src":127029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[35,127031],{"style":126405,"src":127032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127034,127035],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127037,127038,26484],{},[283,127039,126637],{},[14,127041,127042],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127044,127045],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127047,127048],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[65,127050,127052],{"id":127051},"_64-css-test文本属性","6.4 css test文本属性",[94,127054,127056],{"id":127055},"_641-文本颜色","6.4.1 文本颜色",[14,127058,127059],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[114,127061,127063],{"className":126549,"code":127062,"language":126551,"meta":37,"style":37},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[120,127064,127065,127070,127076,127086,127091,127096],{"__ignoreMap":37},[123,127066,127067],{"class":125,"line":126},[123,127068,127069],{"class":192},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[123,127071,127072,127074],{"class":125,"line":45},[123,127073,14],{"class":51311},[123,127075,15582],{"class":133},[123,127077,127078,127080,127082,127084],{"class":125,"line":1189},[123,127079,70916],{"class":182},[123,127081,51448],{"class":133},[123,127083,57432],{"class":182},[123,127085,1300],{"class":133},[123,127087,127088],{"class":125,"line":1204},[123,127089,127090],{"class":192},"  \u002F* color: #ff0000; *\u002F\n",[123,127092,127093],{"class":125,"line":1210},[123,127094,127095],{"class":192},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[123,127097,127098],{"class":125,"line":1224},[123,127099,1574],{"class":133},[35,127101],{"style":126405,"src":127102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[94,127104,127106],{"id":127105},"_642-对齐文本","6.4.2 对齐文本",[14,127108,127109,127110,127113],{},"text-align属于用于设置元素内文本内容的 ",[283,127111,127112],{},"水平对齐"," 方式",[14,127115,127116],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[94,127118,127120],{"id":127119},"_643-装饰文本","6.4.3 装饰文本",[14,127122,127123],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[114,127125,127127],{"className":126549,"code":127126,"language":126551,"meta":37,"style":37},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[120,127128,127129,127135,127145,127149,127155,127166],{"__ignoreMap":37},[123,127130,127131,127133],{"class":125,"line":126},[123,127132,372],{"class":51311},[123,127134,15582],{"class":133},[123,127136,127137,127139,127141,127143],{"class":125,"line":45},[123,127138,70513],{"class":182},[123,127140,51448],{"class":133},[123,127142,54748],{"class":182},[123,127144,1300],{"class":133},[123,127146,127147],{"class":125,"line":1189},[123,127148,1574],{"class":133},[123,127150,127151,127153],{"class":125,"line":1204},[123,127152,14],{"class":51311},[123,127154,15582],{"class":133},[123,127156,127157,127159,127161,127164],{"class":125,"line":1210},[123,127158,70513],{"class":182},[123,127160,51448],{"class":133},[123,127162,127163],{"class":182},"underline",[123,127165,1300],{"class":133},[123,127167,127168],{"class":125,"line":1224},[123,127169,1574],{"class":133},[94,127171,127173],{"id":127172},"_644-文本缩进","6.4.4 文本缩进",[14,127175,127176],{},"实现文本的第一行首行缩进自己指定的距离",[14,127178,127179],{},"20px往右边走；-20px往左边走",[14,127181,127182],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[114,127184,127186],{"className":126549,"code":127185,"language":126551,"meta":37,"style":37},"p {\n  text-indent: 2em;\n}\n",[120,127187,127188,127194,127207],{"__ignoreMap":37},[123,127189,127190,127192],{"class":125,"line":126},[123,127191,14],{"class":51311},[123,127193,15582],{"class":133},[123,127195,127196,127199,127201,127203,127205],{"class":125,"line":45},[123,127197,127198],{"class":182},"  text-indent",[123,127200,51448],{"class":133},[123,127202,211],{"class":182},[123,127204,23563],{"class":129},[123,127206,1300],{"class":133},[123,127208,127209],{"class":125,"line":1189},[123,127210,1574],{"class":133},[94,127212,127214],{"id":127213},"_645-行间距","6.4.5 行间距",[14,127216,127217],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[114,127219,127221],{"className":126549,"code":127220,"language":126551,"meta":37,"style":37},"p {\n  line-height: 1.6;\n}\n",[120,127222,127223,127229,127241],{"__ignoreMap":37},[123,127224,127225,127227],{"class":125,"line":126},[123,127226,14],{"class":51311},[123,127228,15582],{"class":133},[123,127230,127231,127234,127236,127239],{"class":125,"line":45},[123,127232,127233],{"class":182},"  line-height",[123,127235,51448],{"class":133},[123,127237,127238],{"class":182},"1.6",[123,127240,1300],{"class":133},[123,127242,127243],{"class":125,"line":1189},[123,127244,1574],{"class":133},[5136,127246,127247],{},"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":37,"searchDepth":45,"depth":45,"links":127249},[127250,127251,127259,127266],{"id":126731,"depth":45,"text":126732},{"id":126766,"depth":45,"text":126767,"children":127252},[127253,127254,127255,127256,127257,127258],{"id":126773,"depth":1189,"text":126774},{"id":126786,"depth":1189,"text":126787},{"id":126859,"depth":1189,"text":126860},{"id":126872,"depth":1189,"text":126873},{"id":126891,"depth":1189,"text":126892},{"id":126904,"depth":1189,"text":126905},{"id":126911,"depth":45,"text":126912,"children":127260},[127261,127262,127263,127264,127265],{"id":126918,"depth":1189,"text":126919},{"id":126930,"depth":1189,"text":126931},{"id":126983,"depth":1189,"text":126984},{"id":127004,"depth":1189,"text":127005},{"id":127025,"depth":1189,"text":127026},{"id":127051,"depth":45,"text":127052,"children":127267},[127268,127269,127270,127271,127272],{"id":127055,"depth":1189,"text":127056},{"id":127105,"depth":1189,"text":127106},{"id":127119,"depth":1189,"text":127120},{"id":127172,"depth":1189,"text":127173},{"id":127213,"depth":1189,"text":127214},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126723,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127279,"title":127280,"body":127281,"description":47,"extension":48,"meta":127930,"navigation":50,"path":127931,"seo":127932,"stem":127933,"__hash__":127934},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127282,"toc":127911},[127283,127286,127290,127294,127354,127358,127368,127371,127374,127378,127403,127407,127410,127413,127416,127419,127422,127426,127429,127432,127474,127477,127503,127509,127512,127516,127520,127526,127529,127532,127535,127538,127541,127544,127589,127593,127596,127599,127603,127607,127636,127639,127644,127647,127650,127653,127656,127660,127664,127667,127669,127672,127676,127679,127683,127686,127689,127692,127696,127700,127706,127716,127719,127722,127725,127728,127731,127854,127862,127870,127908],[10,127284,127280],{"id":127285},"_7-css引入方式与选择器进阶",[65,127287,127289],{"id":127288},"_71-css引入方式","7.1 css引入方式",[94,127291,127293],{"id":127292},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[114,127295,127299],{"className":127296,"code":127297,"language":127298,"meta":37,"style":37},"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",[120,127300,127301,127309,127316,127328,127341,127346],{"__ignoreMap":37},[123,127302,127303,127305,127307],{"class":125,"line":126},[123,127304,1044],{"class":133},[123,127306,5136],{"class":51311},[123,127308,51318],{"class":133},[123,127310,127311,127314],{"class":125,"line":45},[123,127312,127313],{"class":51311},"  h1",[123,127315,15582],{"class":133},[123,127317,127318,127321,127323,127326],{"class":125,"line":1189},[123,127319,127320],{"class":182},"    color",[123,127322,51448],{"class":133},[123,127324,127325],{"class":182},"blue",[123,127327,1300],{"class":133},[123,127329,127330,127333,127335,127337,127339],{"class":125,"line":1204},[123,127331,127332],{"class":182},"    font-size",[123,127334,51448],{"class":133},[123,127336,934],{"class":182},[123,127338,51503],{"class":129},[123,127340,1300],{"class":133},[123,127342,127343],{"class":125,"line":1210},[123,127344,127345],{"class":133},"  }\n",[123,127347,127348,127350,127352],{"class":125,"line":1224},[123,127349,51796],{"class":133},[123,127351,5136],{"class":51311},[123,127353,51318],{"class":133},[14,127355,127356,26484],{},[283,127357,126637],{},[14,127359,77237,127360,127363,127364,127367],{},[120,127361,127362],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[120,127365,127366],{},"\u003Chead>","标签中",[14,127369,127370],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127372,127373],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[94,127375,127377],{"id":127376},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[114,127379,127381],{"className":127296,"code":127380,"language":127298,"meta":37,"style":37},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[120,127382,127383],{"__ignoreMap":37},[123,127384,127385,127387,127389,127391,127393,127396,127399,127401],{"class":125,"line":126},[123,127386,1044],{"class":133},[123,127388,14],{"class":51311},[123,127390,62637],{"class":1972},[123,127392,179],{"class":133},[123,127394,127395],{"class":238},"\"color: red; font-size: 16px;\"",[123,127397,127398],{"class":133},">这是一个段落\u003C\u002F",[123,127400,14],{"class":51311},[123,127402,51318],{"class":133},[14,127404,127405,26484],{},[283,127406,126637],{},[14,127408,127409],{},"①style其实就是标签的属性",[14,127411,127412],{},"②在双引号中间，写法要符合css规范",[14,127414,127415],{},"③可以控制当前的标签设置样式",[14,127417,127418],{},"④书写繁琐，简单时才用",[14,127420,127421],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[94,127423,127425],{"id":127424},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127427,127428],{},"使用最多，单独建一个css文件，然后html引用",[14,127430,127431],{},"①css文件部分： style.css",[114,127433,127435],{"className":126549,"code":127434,"language":126551,"meta":37,"style":37},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[120,127436,127437,127442,127448,127458,127470],{"__ignoreMap":37},[123,127438,127439],{"class":125,"line":126},[123,127440,127441],{"class":192},"\u002F* style.css *\u002F\n",[123,127443,127444,127446],{"class":125,"line":45},[123,127445,10],{"class":51311},[123,127447,15582],{"class":133},[123,127449,127450,127452,127454,127456],{"class":125,"line":1189},[123,127451,70916],{"class":182},[123,127453,51448],{"class":133},[123,127455,127325],{"class":182},[123,127457,1300],{"class":133},[123,127459,127460,127462,127464,127466,127468],{"class":125,"line":1204},[123,127461,70637],{"class":182},[123,127463,51448],{"class":133},[123,127465,934],{"class":182},[123,127467,51503],{"class":129},[123,127469,1300],{"class":133},[123,127471,127472],{"class":125,"line":1210},[123,127473,1574],{"class":133},[14,127475,127476],{},"②html部分",[114,127478,127480],{"className":127296,"code":127479,"language":127298,"meta":37,"style":37},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[120,127481,127482],{"__ignoreMap":37},[123,127483,127484,127486,127488,127490,127492,127494,127496,127498,127501],{"class":125,"line":126},[123,127485,1044],{"class":133},[123,127487,69016],{"class":51311},[123,127489,69019],{"class":1972},[123,127491,179],{"class":133},[123,127493,69024],{"class":238},[123,127495,61068],{"class":1972},[123,127497,179],{"class":133},[123,127499,127500],{"class":238},"\"style.css\"",[123,127502,51318],{"class":133},[14,127504,127505,127508],{},[120,127506,127507],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127510,127511],{},"ctrl+0回到页面原来大小",[65,127513,127515],{"id":127514},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[94,127517,127519],{"id":127518},"_721-快速生成html","7.2.1 快速生成html",[14,127521,127522,127523],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[120,127524,127525],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127527,127528],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127530,127531],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127533,127534],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127536,127537],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127539,127540],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127542,127543],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[114,127545,127547],{"className":127296,"code":127546,"language":127298,"meta":37,"style":37},"\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",[120,127548,127549,127554,127559,127564,127569,127574,127579,127584],{"__ignoreMap":37},[123,127550,127551],{"class":125,"line":126},[123,127552,127553],{"class":192},"\u003C!-- Emmet 语法示例 -->\n",[123,127555,127556],{"class":125,"line":45},[123,127557,127558],{"class":192},"\u003C!-- div*3        → 生成3个div -->\n",[123,127560,127561],{"class":125,"line":1189},[123,127562,127563],{"class":192},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[123,127565,127566],{"class":125,"line":1204},[123,127567,127568],{"class":192},"\u003C!-- div+p        → 兄弟div和p -->\n",[123,127570,127571],{"class":125,"line":1210},[123,127572,127573],{"class":192},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[123,127575,127576],{"class":125,"line":1224},[123,127577,127578],{"class":192},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[123,127580,127581],{"class":125,"line":1230},[123,127582,127583],{"class":192},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[123,127585,127586],{"class":125,"line":1321},[123,127587,127588],{"class":192},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[94,127590,127592],{"id":127591},"_722-快速生成css","7.2.2 快速生成css",[14,127594,127595],{},"简写开头",[14,127597,127598],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[65,127600,127602],{"id":127601},"_73-css复合选择器","7.3 css复合选择器",[94,127604,127606],{"id":127605},"_731-后代选择器","7.3.1 后代选择器",[114,127608,127610],{"className":126549,"code":127609,"language":126551,"meta":37,"style":37},".parent .child {\n  color: blue;\n}\n",[120,127611,127612,127622,127632],{"__ignoreMap":37},[123,127613,127614,127617,127620],{"class":125,"line":126},[123,127615,127616],{"class":1972},".parent",[123,127618,127619],{"class":1972}," .child",[123,127621,15582],{"class":133},[123,127623,127624,127626,127628,127630],{"class":125,"line":45},[123,127625,70916],{"class":182},[123,127627,51448],{"class":133},[123,127629,127325],{"class":182},[123,127631,1300],{"class":133},[123,127633,127634],{"class":125,"line":1189},[123,127635,1574],{"class":133},[14,127637,127638],{},"元素1 元素2 {样式声明}",[14,127640,127641],{},[283,127642,127643],{},"注意点:",[14,127645,127646],{},"①元素1和元素2中间用空格隔开",[14,127648,127649],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,127651,127652],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,127654,127655],{},"④元素1和元素2可以是任意基础选择器",[94,127657,127659],{"id":127658},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,127661,127662],{},[283,127663,127643],{},[14,127665,127666],{},"①元素1和元素2中间用大于号隔开",[14,127668,127649],{},[14,127670,127671],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[94,127673,127675],{"id":127674},"_733-并集选择器","7.3.3 并集选择器",[14,127677,127678],{},"元素1，元素2 {样式声明}",[14,127680,127681],{},[283,127682,127643],{},[14,127684,127685],{},"①元素1和元素2中间用逗号隔开",[14,127687,127688],{},"②逗号可以理解为和的意思",[14,127690,127691],{},"③并集选择器通常用于集体声明",[94,127693,127695],{"id":127694},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,127697,127698],{},[283,127699,127643],{},[14,127701,127702,127703,127705],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[69016,127704],{},"－:visited－:hover－:active。",[14,127707,127708,127709,127712,127713,25751],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127710,127711],"hover",{}," 、 ",[127714,127715],"first-child",{},[14,127717,127718],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,127720,127721],{},"link对没访问的进行设置",[14,127723,127724],{},"vistied对已访问的进行改变",[14,127726,127727],{},"hover鼠标经过就会变",[14,127729,127730],{},"active常按(点)就会变",[114,127732,127734],{"className":126549,"code":127733,"language":126551,"meta":37,"style":37},"\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",[120,127735,127736,127741,127750,127760,127770,127774,127783,127794,127798,127806,127816,127826,127830,127839,127850],{"__ignoreMap":37},[123,127737,127738],{"class":125,"line":126},[123,127739,127740],{"class":192},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[123,127742,127743,127745,127748],{"class":125,"line":45},[123,127744,372],{"class":51311},[123,127746,127747],{"class":1972},":link",[123,127749,15582],{"class":133},[123,127751,127752,127754,127756,127758],{"class":125,"line":1189},[123,127753,70916],{"class":182},[123,127755,51448],{"class":133},[123,127757,62380],{"class":182},[123,127759,1300],{"class":133},[123,127761,127762,127764,127766,127768],{"class":125,"line":1204},[123,127763,70513],{"class":182},[123,127765,51448],{"class":133},[123,127767,54748],{"class":182},[123,127769,1300],{"class":133},[123,127771,127772],{"class":125,"line":1210},[123,127773,1574],{"class":133},[123,127775,127776,127778,127781],{"class":125,"line":1224},[123,127777,372],{"class":51311},[123,127779,127780],{"class":1972},":visited",[123,127782,15582],{"class":133},[123,127784,127785,127787,127789,127792],{"class":125,"line":1230},[123,127786,70916],{"class":182},[123,127788,51448],{"class":133},[123,127790,127791],{"class":182},"purple",[123,127793,1300],{"class":133},[123,127795,127796],{"class":125,"line":1321},[123,127797,1574],{"class":133},[123,127799,127800,127802,127804],{"class":125,"line":1327},[123,127801,372],{"class":51311},[123,127803,60951],{"class":1972},[123,127805,15582],{"class":133},[123,127807,127808,127810,127812,127814],{"class":125,"line":1339},[123,127809,70916],{"class":182},[123,127811,51448],{"class":133},[123,127813,54900],{"class":182},[123,127815,1300],{"class":133},[123,127817,127818,127820,127822,127824],{"class":125,"line":1621},[123,127819,70513],{"class":182},[123,127821,51448],{"class":133},[123,127823,127163],{"class":182},[123,127825,1300],{"class":133},[123,127827,127828],{"class":125,"line":1626},[123,127829,1574],{"class":133},[123,127831,127832,127834,127837],{"class":125,"line":1632},[123,127833,372],{"class":51311},[123,127835,127836],{"class":1972},":active",[123,127838,15582],{"class":133},[123,127840,127841,127843,127845,127848],{"class":125,"line":1637},[123,127842,70916],{"class":182},[123,127844,51448],{"class":133},[123,127846,127847],{"class":182},"green",[123,127849,1300],{"class":133},[123,127851,127852],{"class":125,"line":1651},[123,127853,1574],{"class":133},[94,127855,127857,127858,127861],{"id":127856},"_735-伪类选择器","7.3.5 ",[127859,127860],"focus",{},"伪类选择器",[14,127863,127864,127866,127867,127869],{},[127859,127865],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[120,127868,126610],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[114,127871,127873],{"className":126549,"code":127872,"language":126551,"meta":37,"style":37},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[120,127874,127875,127883,127894,127904],{"__ignoreMap":37},[123,127876,127877,127879,127881],{"class":125,"line":126},[123,127878,53832],{"class":51311},[123,127880,61911],{"class":1972},[123,127882,15582],{"class":133},[123,127884,127885,127888,127890,127892],{"class":125,"line":45},[123,127886,127887],{"class":182},"  border-color",[123,127889,51448],{"class":133},[123,127891,54900],{"class":182},[123,127893,1300],{"class":133},[123,127895,127896,127898,127900,127902],{"class":125,"line":1189},[123,127897,70809],{"class":182},[123,127899,51448],{"class":133},[123,127901,54748],{"class":182},[123,127903,1300],{"class":133},[123,127905,127906],{"class":125,"line":1204},[123,127907,1574],{"class":133},[5136,127909,127910],{},"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":37,"searchDepth":45,"depth":45,"links":127912},[127913,127918,127922],{"id":127288,"depth":45,"text":127289,"children":127914},[127915,127916,127917],{"id":127292,"depth":1189,"text":127293},{"id":127376,"depth":1189,"text":127377},{"id":127424,"depth":1189,"text":127425},{"id":127514,"depth":45,"text":127515,"children":127919},[127920,127921],{"id":127518,"depth":1189,"text":127519},{"id":127591,"depth":1189,"text":127592},{"id":127601,"depth":45,"text":127602,"children":127923},[127924,127925,127926,127927,127928],{"id":127605,"depth":1189,"text":127606},{"id":127658,"depth":1189,"text":127659},{"id":127674,"depth":1189,"text":127675},{"id":127694,"depth":1189,"text":127695},{"id":127856,"depth":1189,"text":127929},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127280,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127936,"title":127937,"body":127938,"description":47,"extension":48,"meta":129861,"navigation":50,"path":129862,"seo":129863,"stem":129864,"__hash__":129865},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127939,"toc":129835},[127940,127943,127947,127956,127960,127986,127991,127994,127997,128000,128003,128007,128010,128020,128028,128032,128067,128072,128075,128078,128081,128084,128088,128091,128100,128104,128117,128122,128125,128128,128131,128135,128138,128142,128145,128200,128203,128234,128237,128291,128295,128298,128464,128587,128590,128593,128596,128599,128603,128606,128610,128613,128616,128620,128623,128654,128681,128709,128712,128716,128742,128785,128789,128883,128886,128913,128916,128919,128922,128925,128928,128931,128934,128937,128940,128944,129001,129028,129032,129080,129084,129125,129127,129130,129133,129136,129139,129143,129235,129238,129241,129244,129248,129371,129572,129576,129580,129583,129586,129589,129593,129596,129599,129624,129627,129630,129633,129636,129639,129643,129651,129713,129716,129774,129777,129780,129783,129786,129789,129792,129795,129832],[10,127941,127937],{"id":127942},"_8-css显示模式与背景特性",[65,127944,127946],{"id":127945},"_81-css元素显示模式","8.1 css元素显示模式",[14,127948,127949,127950,127952,127953,127955],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[120,127951,126160],{},"自己占一行，比如一行可以放多个",[120,127954,126163],{},"，HTML 元素一般分为块元素和行内元素两种类型",[94,127957,127959],{"id":127958},"_811-块元素","8.1.1 块元素",[14,127961,127962,127963,127965,127966,346,127969,346,127971,346,127973,346,127976,346,127979,127982,127983,127985],{},"常见的块元素有",[120,127964,126064],{},"~",[120,127967,127968],{},"\u003Ch6>",[120,127970,126090],{},[120,127972,126160],{},[120,127974,127975],{},"\u003Cul>",[120,127977,127978],{},"\u003Col>",[120,127980,127981],{},"\u003Cli>","等，其中 ",[120,127984,126160],{}," 标签是最典型的块元素",[14,127987,127988],{},[283,127989,127990],{},"块级元素的特点：",[14,127992,127993],{},"① 比较霸道，自己独占一行。",[14,127995,127996],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,127998,127999],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,128001,128002],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,128004,128005],{},[283,128006,163],{},[14,128008,128009],{},"①文字类的元素内不能使用块级元素",[14,128011,77260,128012,128014,128015,128017,128018],{},[120,128013,126090],{}," 标签主要用于存放文字，因此 ",[120,128016,126090],{}," 里面不能放块级元素，特别是不能放",[120,128019,126160],{},[14,128021,128022,128023,127965,128025,128027],{},"⑥同理， ",[120,128024,126064],{},[120,128026,127968],{},"等都是文字类块级标签，里面也不能放其他块级元素",[94,128029,128031],{"id":128030},"_812-行内元素","8.1.2 行内元素",[14,128033,128034,128035,346,128037,346,128040,346,128043,346,128046,346,128049,346,128052,346,128055,346,128058,346,128061,128063,128064,128066],{},"常见的行内元素有 ",[120,128036,126322],{},[120,128038,128039],{},"\u003Cstrong>",[120,128041,128042],{},"\u003Cb>",[120,128044,128045],{},"\u003Cem>",[120,128047,128048],{},"\u003Ci>",[120,128050,128051],{},"\u003Cdel>",[120,128053,128054],{},"\u003Cs>",[120,128056,128057],{},"\u003Cins>",[120,128059,128060],{},"\u003Cu>",[120,128062,126163],{}," 等，其中 ",[120,128065,126163],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128068,128069],{},[283,128070,128071],{},"特点：",[14,128073,128074],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128076,128077],{},"② 高、宽直接设置是无效的。",[14,128079,128080],{},"③ 默认宽度就是它本身内容的宽度。",[14,128082,128083],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128085,128086],{},[283,128087,163],{},[14,128089,128090],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128092,128093,128094,128096,128097,128099],{},"②特殊情况链接 ",[120,128095,126322],{}," 里面可以放块级元素，但是给 ",[120,128098,126322],{}," 转换一下块级模式最安全",[94,128101,128103],{"id":128102},"_813-行内块元素","8.1.3 行内块元素",[14,128105,128106,128107,346,128110,346,128113,128116],{},"在行内元素中有几个特殊的标签 —— ",[120,128108,128109],{},"\u003Cimg \u002F>",[120,128111,128112],{},"\u003Cinput \u002F>",[120,128114,128115],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128118,128119],{},[283,128120,128121],{},"行内块元素的特点：",[14,128123,128124],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128126,128127],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128129,128130],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[94,128132,128134],{"id":128133},"_814-总结","8.1.4 总结",[35,128136],{"style":126405,"src":128137},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[94,128139,128141],{"id":128140},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128143,128144],{},"①转换为块元素：display:block;",[114,128146,128148],{"className":126549,"code":128147,"language":126551,"meta":37,"style":37},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[120,128149,128150,128155,128161,128172,128184,128196],{"__ignoreMap":37},[123,128151,128152],{"class":125,"line":126},[123,128153,128154],{"class":192},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[123,128156,128157,128159],{"class":125,"line":45},[123,128158,372],{"class":51311},[123,128160,15582],{"class":133},[123,128162,128163,128166,128168,128170],{"class":125,"line":1189},[123,128164,128165],{"class":182},"  display",[123,128167,51448],{"class":133},[123,128169,60880],{"class":182},[123,128171,1300],{"class":133},[123,128173,128174,128176,128178,128180,128182],{"class":125,"line":1204},[123,128175,70579],{"class":182},[123,128177,51448],{"class":133},[123,128179,445],{"class":182},[123,128181,51503],{"class":129},[123,128183,1300],{"class":133},[123,128185,128186,128188,128190,128192,128194],{"class":125,"line":1210},[123,128187,70799],{"class":182},[123,128189,51448],{"class":133},[123,128191,535],{"class":182},[123,128193,51503],{"class":129},[123,128195,1300],{"class":133},[123,128197,128198],{"class":125,"line":1224},[123,128199,1574],{"class":133},[14,128201,128202],{},"②转换为行内元素：display:inline;",[114,128204,128206],{"className":126549,"code":128205,"language":126551,"meta":37,"style":37},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[120,128207,128208,128213,128219,128230],{"__ignoreMap":37},[123,128209,128210],{"class":125,"line":126},[123,128211,128212],{"class":192},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[123,128214,128215,128217],{"class":125,"line":45},[123,128216,51622],{"class":51311},[123,128218,15582],{"class":133},[123,128220,128221,128223,128225,128228],{"class":125,"line":1189},[123,128222,128165],{"class":182},[123,128224,51448],{"class":133},[123,128226,128227],{"class":182},"inline",[123,128229,1300],{"class":133},[123,128231,128232],{"class":125,"line":1204},[123,128233,1574],{"class":133},[14,128235,128236],{},"③转换为行内块：display:inline-block;",[114,128238,128240],{"className":126549,"code":128239,"language":126551,"meta":37,"style":37},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[120,128241,128242,128247,128253,128263,128275,128287],{"__ignoreMap":37},[123,128243,128244],{"class":125,"line":126},[123,128245,128246],{"class":192},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[123,128248,128249,128251],{"class":125,"line":45},[123,128250,123],{"class":51311},[123,128252,15582],{"class":133},[123,128254,128255,128257,128259,128261],{"class":125,"line":1189},[123,128256,128165],{"class":182},[123,128258,51448],{"class":133},[123,128260,72394],{"class":182},[123,128262,1300],{"class":133},[123,128264,128265,128267,128269,128271,128273],{"class":125,"line":1204},[123,128266,70579],{"class":182},[123,128268,51448],{"class":133},[123,128270,746],{"class":182},[123,128272,51503],{"class":129},[123,128274,1300],{"class":133},[123,128276,128277,128279,128281,128283,128285],{"class":125,"line":1210},[123,128278,70799],{"class":182},[123,128280,51448],{"class":133},[123,128282,1085],{"class":182},[123,128284,51503],{"class":129},[123,128286,1300],{"class":133},[123,128288,128289],{"class":125,"line":1224},[123,128290,1574],{"class":133},[94,128292,128294],{"id":128293},"_816-小米侧边栏","8.1.6 小米侧边栏",[35,128296],{"style":126405,"src":128297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[114,128299,128301],{"className":127296,"code":128300,"language":127298,"meta":37,"style":37},"\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",[120,128302,128303,128308,128323,128342,128361,128380,128399,128418,128437,128456],{"__ignoreMap":37},[123,128304,128305],{"class":125,"line":126},[123,128306,128307],{"class":192},"\u003C!-- 小米侧边栏案例 -->\n",[123,128309,128310,128312,128314,128316,128318,128321],{"class":125,"line":45},[123,128311,1044],{"class":133},[123,128313,51622],{"class":51311},[123,128315,53497],{"class":1972},[123,128317,179],{"class":133},[123,128319,128320],{"class":238},"\"sidebar\"",[123,128322,51318],{"class":133},[123,128324,128325,128327,128329,128331,128333,128335,128338,128340],{"class":125,"line":1189},[123,128326,52155],{"class":133},[123,128328,372],{"class":51311},[123,128330,61068],{"class":1972},[123,128332,179],{"class":133},[123,128334,61073],{"class":238},[123,128336,128337],{"class":133},">手机 电话卡\u003C\u002F",[123,128339,372],{"class":51311},[123,128341,51318],{"class":133},[123,128343,128344,128346,128348,128350,128352,128354,128357,128359],{"class":125,"line":1204},[123,128345,52155],{"class":133},[123,128347,372],{"class":51311},[123,128349,61068],{"class":1972},[123,128351,179],{"class":133},[123,128353,61073],{"class":238},[123,128355,128356],{"class":133},">电视 盒子\u003C\u002F",[123,128358,372],{"class":51311},[123,128360,51318],{"class":133},[123,128362,128363,128365,128367,128369,128371,128373,128376,128378],{"class":125,"line":1210},[123,128364,52155],{"class":133},[123,128366,372],{"class":51311},[123,128368,61068],{"class":1972},[123,128370,179],{"class":133},[123,128372,61073],{"class":238},[123,128374,128375],{"class":133},">笔记本 平板\u003C\u002F",[123,128377,372],{"class":51311},[123,128379,51318],{"class":133},[123,128381,128382,128384,128386,128388,128390,128392,128395,128397],{"class":125,"line":1224},[123,128383,52155],{"class":133},[123,128385,372],{"class":51311},[123,128387,61068],{"class":1972},[123,128389,179],{"class":133},[123,128391,61073],{"class":238},[123,128393,128394],{"class":133},">出行 穿戴\u003C\u002F",[123,128396,372],{"class":51311},[123,128398,51318],{"class":133},[123,128400,128401,128403,128405,128407,128409,128411,128414,128416],{"class":125,"line":1230},[123,128402,52155],{"class":133},[123,128404,372],{"class":51311},[123,128406,61068],{"class":1972},[123,128408,179],{"class":133},[123,128410,61073],{"class":238},[123,128412,128413],{"class":133},">智能 路由器\u003C\u002F",[123,128415,372],{"class":51311},[123,128417,51318],{"class":133},[123,128419,128420,128422,128424,128426,128428,128430,128433,128435],{"class":125,"line":1321},[123,128421,52155],{"class":133},[123,128423,372],{"class":51311},[123,128425,61068],{"class":1972},[123,128427,179],{"class":133},[123,128429,61073],{"class":238},[123,128431,128432],{"class":133},">健康 儿童\u003C\u002F",[123,128434,372],{"class":51311},[123,128436,51318],{"class":133},[123,128438,128439,128441,128443,128445,128447,128449,128452,128454],{"class":125,"line":1327},[123,128440,52155],{"class":133},[123,128442,372],{"class":51311},[123,128444,61068],{"class":1972},[123,128446,179],{"class":133},[123,128448,61073],{"class":238},[123,128450,128451],{"class":133},">耳机 音响\u003C\u002F",[123,128453,372],{"class":51311},[123,128455,51318],{"class":133},[123,128457,128458,128460,128462],{"class":125,"line":1339},[123,128459,51796],{"class":133},[123,128461,51622],{"class":51311},[123,128463,51318],{"class":133},[114,128465,128467],{"className":126549,"code":128466,"language":126551,"meta":37,"style":37},".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",[120,128468,128469,128478,128488,128501,128513,128525,128537,128547,128558,128562,128572,128583],{"__ignoreMap":37},[123,128470,128471,128474,128476],{"class":125,"line":126},[123,128472,128473],{"class":1972},".sidebar",[123,128475,1408],{"class":51311},[123,128477,15582],{"class":133},[123,128479,128480,128482,128484,128486],{"class":125,"line":45},[123,128481,128165],{"class":182},[123,128483,51448],{"class":133},[123,128485,60880],{"class":182},[123,128487,1300],{"class":133},[123,128489,128490,128492,128494,128497,128499],{"class":125,"line":1189},[123,128491,70579],{"class":182},[123,128493,51448],{"class":133},[123,128495,128496],{"class":182},"234",[123,128498,51503],{"class":129},[123,128500,1300],{"class":133},[123,128502,128503,128505,128507,128509,128511],{"class":125,"line":1204},[123,128504,70799],{"class":182},[123,128506,51448],{"class":133},[123,128508,586],{"class":182},[123,128510,51503],{"class":129},[123,128512,1300],{"class":133},[123,128514,128515,128517,128519,128521,128523],{"class":125,"line":1210},[123,128516,127233],{"class":182},[123,128518,51448],{"class":133},[123,128520,586],{"class":182},[123,128522,51503],{"class":129},[123,128524,1300],{"class":133},[123,128526,128527,128529,128531,128533,128535],{"class":125,"line":1224},[123,128528,70834],{"class":182},[123,128530,51448],{"class":133},[123,128532,1085],{"class":182},[123,128534,51503],{"class":129},[123,128536,1300],{"class":133},[123,128538,128539,128541,128543,128545],{"class":125,"line":1230},[123,128540,70916],{"class":182},[123,128542,51448],{"class":133},[123,128544,60853],{"class":182},[123,128546,1300],{"class":133},[123,128548,128549,128551,128553,128556],{"class":125,"line":1321},[123,128550,70889],{"class":182},[123,128552,51448],{"class":133},[123,128554,128555],{"class":182},"#55585a",[123,128557,1300],{"class":133},[123,128559,128560],{"class":125,"line":1327},[123,128561,1574],{"class":133},[123,128563,128564,128566,128568,128570],{"class":125,"line":1339},[123,128565,128473],{"class":1972},[123,128567,1408],{"class":51311},[123,128569,60951],{"class":1972},[123,128571,15582],{"class":133},[123,128573,128574,128576,128578,128581],{"class":125,"line":1621},[123,128575,70889],{"class":182},[123,128577,51448],{"class":133},[123,128579,128580],{"class":182},"#ff6700",[123,128582,1300],{"class":133},[123,128584,128585],{"class":125,"line":1626},[123,128586,1574],{"class":133},[35,128588],{"style":126405,"src":128589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128591,128592],{},"行高=盒子高度：实现文字的垂直居中",[14,128594,128595],{},"原理讲解：",[35,128597],{"style":126405,"src":128598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[65,128600,128602],{"id":128601},"_82-css背景","8.2 css背景",[14,128604,128605],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[94,128607,128609],{"id":128608},"_821-背景颜色","8.2.1 背景颜色",[14,128611,128612],{},"background-color:颜色值;",[14,128614,128615],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[94,128617,128619],{"id":128618},"_822-背景图片","8.2.2 背景图片",[14,128621,128622],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[114,128624,128626],{"className":126549,"code":128625,"language":126551,"meta":37,"style":37},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[120,128627,128628,128634,128650],{"__ignoreMap":37},[123,128629,128630,128632],{"class":125,"line":126},[123,128631,51622],{"class":51311},[123,128633,15582],{"class":133},[123,128635,128636,128639,128641,128643,128645,128648],{"class":125,"line":45},[123,128637,128638],{"class":182},"  background-image",[123,128640,51448],{"class":133},[123,128642,61737],{"class":182},[123,128644,134],{"class":133},[123,128646,128647],{"class":5226},"images\u002Fbg.png",[123,128649,2728],{"class":133},[123,128651,128652],{"class":125,"line":1189},[123,128653,1574],{"class":133},[271,128655,128656,128665],{},[274,128657,128658],{},[277,128659,128660,128663],{},[280,128661,128662],{"align":23746},"参数值",[280,128664,102693],{"align":23746},[318,128666,128667,128674],{},[277,128668,128669,128671],{},[323,128670,54748],{"align":23746},[323,128672,128673],{"align":23746},"无背景图（默认的）",[277,128675,128676,128678],{},[323,128677,61737],{"align":23746},[323,128679,128680],{"align":23746},"使用绝对或相对地址指定背景图像",[114,128682,128683],{"className":126549,"code":128625,"language":126551,"meta":37,"style":37},[120,128684,128685,128691,128705],{"__ignoreMap":37},[123,128686,128687,128689],{"class":125,"line":126},[123,128688,51622],{"class":51311},[123,128690,15582],{"class":133},[123,128692,128693,128695,128697,128699,128701,128703],{"class":125,"line":45},[123,128694,128638],{"class":182},[123,128696,51448],{"class":133},[123,128698,61737],{"class":182},[123,128700,134],{"class":133},[123,128702,128647],{"class":5226},[123,128704,2728],{"class":133},[123,128706,128707],{"class":125,"line":1189},[123,128708,1574],{"class":133},[14,128710,128711],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[94,128713,128715],{"id":128714},"_823-背景平铺","8.2.3 背景平铺",[114,128717,128719],{"className":126549,"code":128718,"language":126551,"meta":37,"style":37},"div {\n  background-repeat: no-repeat;\n}\n",[120,128720,128721,128727,128738],{"__ignoreMap":37},[123,128722,128723,128725],{"class":125,"line":126},[123,128724,51622],{"class":51311},[123,128726,15582],{"class":133},[123,128728,128729,128732,128734,128736],{"class":125,"line":45},[123,128730,128731],{"class":182},"  background-repeat",[123,128733,51448],{"class":133},[123,128735,61747],{"class":182},[123,128737,1300],{"class":133},[123,128739,128740],{"class":125,"line":1189},[123,128741,1574],{"class":133},[271,128743,128744,128752],{},[274,128745,128746],{},[277,128747,128748,128750],{},[280,128749,128662],{"align":23746},[280,128751,102693],{"align":23746},[318,128753,128754,128762,128769,128777],{},[277,128755,128756,128759],{},[323,128757,128758],{"align":23746},"repeat",[323,128760,128761],{"align":23746},"背景图像在纵向和横向上平铺（默认的）",[277,128763,128764,128766],{},[323,128765,61747],{"align":23746},[323,128767,128768],{"align":23746},"背景图像不平铺",[277,128770,128771,128774],{},[323,128772,128773],{"align":23746},"repeat-x",[323,128775,128776],{"align":23746},"背景图像在横向上平铺",[277,128778,128779,128782],{},[323,128780,128781],{"align":23746},"repeat-y",[323,128783,128784],{"align":23746},"背景图像在纵向平铺",[94,128786,128788],{"id":128787},"_824-背景图片位置","8.2.4 背景图片位置",[114,128790,128792],{"className":126549,"code":128791,"language":126551,"meta":37,"style":37},"\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",[120,128793,128794,128799,128805,128819,128823,128828,128834,128850,128854,128859,128865,128879],{"__ignoreMap":37},[123,128795,128796],{"class":125,"line":126},[123,128797,128798],{"class":192},"\u002F* 方位名词 *\u002F\n",[123,128800,128801,128803],{"class":125,"line":45},[123,128802,51622],{"class":51311},[123,128804,15582],{"class":133},[123,128806,128807,128810,128812,128814,128817],{"class":125,"line":1189},[123,128808,128809],{"class":182},"  background-position",[123,128811,51448],{"class":133},[123,128813,51603],{"class":182},[123,128815,128816],{"class":182}," top",[123,128818,1300],{"class":133},[123,128820,128821],{"class":125,"line":1204},[123,128822,1574],{"class":133},[123,128824,128825],{"class":125,"line":1210},[123,128826,128827],{"class":192},"\u002F* 精确单位 *\u002F\n",[123,128829,128830,128832],{"class":125,"line":1224},[123,128831,51622],{"class":51311},[123,128833,15582],{"class":133},[123,128835,128836,128838,128840,128842,128844,128846,128848],{"class":125,"line":1230},[123,128837,128809],{"class":182},[123,128839,51448],{"class":133},[123,128841,834],{"class":182},[123,128843,51503],{"class":129},[123,128845,57515],{"class":182},[123,128847,51503],{"class":129},[123,128849,1300],{"class":133},[123,128851,128852],{"class":125,"line":1321},[123,128853,1574],{"class":133},[123,128855,128856],{"class":125,"line":1327},[123,128857,128858],{"class":192},"\u002F* 混合单位 *\u002F\n",[123,128860,128861,128863],{"class":125,"line":1339},[123,128862,51622],{"class":51311},[123,128864,15582],{"class":133},[123,128866,128867,128869,128871,128873,128875,128877],{"class":125,"line":1621},[123,128868,128809],{"class":182},[123,128870,51448],{"class":133},[123,128872,834],{"class":182},[123,128874,51503],{"class":129},[123,128876,17154],{"class":182},[123,128878,1300],{"class":133},[123,128880,128881],{"class":125,"line":1626},[123,128882,1574],{"class":133},[14,128884,128885],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[271,128887,128888,128896],{},[274,128889,128890],{},[277,128891,128892,128894],{},[280,128893,128662],{"align":23746},[280,128895,25880],{"align":23746},[318,128897,128898,128905],{},[277,128899,128900,128902],{},[323,128901,51979],{"align":23746},[323,128903,128904],{"align":23746},"百分数|由浮点数和单位标识符组成的长度值",[277,128906,128907,128910],{},[323,128908,128909],{"align":23746},"position",[323,128911,128912],{"align":23746},"top|center|bottom|left|center|right 方位名词",[14,128914,128915],{},"其他说明：",[14,128917,128918],{},"①参数是方位名词",[14,128920,128921],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,128923,128924],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,128926,128927],{},"②参数是精确单位",[14,128929,128930],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,128932,128933],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,128935,128936],{},"③参数是混合单位",[14,128938,128939],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[94,128941,128943],{"id":128942},"_825-背景图片固定","8.2.5 背景图片固定",[114,128945,128947],{"className":126549,"code":128946,"language":126551,"meta":37,"style":37},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[120,128948,128949,128954,128960,128972,128976,128981,128987,128997],{"__ignoreMap":37},[123,128950,128951],{"class":125,"line":126},[123,128952,128953],{"class":192},"\u002F* 背景滚动（默认） *\u002F\n",[123,128955,128956,128958],{"class":125,"line":45},[123,128957,51622],{"class":51311},[123,128959,15582],{"class":133},[123,128961,128962,128965,128967,128970],{"class":125,"line":1189},[123,128963,128964],{"class":182},"  background-attachment",[123,128966,51448],{"class":133},[123,128968,128969],{"class":182},"scroll",[123,128971,1300],{"class":133},[123,128973,128974],{"class":125,"line":1204},[123,128975,1574],{"class":133},[123,128977,128978],{"class":125,"line":1210},[123,128979,128980],{"class":192},"\u002F* 背景固定 *\u002F\n",[123,128982,128983,128985],{"class":125,"line":1224},[123,128984,51622],{"class":51311},[123,128986,15582],{"class":133},[123,128988,128989,128991,128993,128995],{"class":125,"line":1230},[123,128990,128964],{"class":182},[123,128992,51448],{"class":133},[123,128994,86244],{"class":182},[123,128996,1300],{"class":133},[123,128998,128999],{"class":125,"line":1321},[123,129000,1574],{"class":133},[271,129002,129003,129012],{},[274,129004,129005],{},[277,129006,129007,129010],{},[280,129008,129009],{"align":23746},"参数",[280,129011,102693],{"align":23746},[318,129013,129014,129021],{},[277,129015,129016,129018],{},[323,129017,128969],{"align":23746},[323,129019,129020],{"align":23746},"背景图像是随对象内容滚动",[277,129022,129023,129025],{},[323,129024,86244],{"align":23746},[323,129026,129027],{"align":23746},"背景图像固定",[94,129029,129031],{"id":129030},"_826-背景样式合写","8.2.6 背景样式合写",[114,129033,129035],{"className":126549,"code":129034,"language":126551,"meta":37,"style":37},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[120,129036,129037,129042,129048,129076],{"__ignoreMap":37},[123,129038,129039],{"class":125,"line":126},[123,129040,129041],{"class":192},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[123,129043,129044,129046],{"class":125,"line":45},[123,129045,51622],{"class":51311},[123,129047,15582],{"class":133},[123,129049,129050,129052,129054,129056,129059,129061,129063,129065,129067,129070,129072,129074],{"class":125,"line":1189},[123,129051,70622],{"class":182},[123,129053,51448],{"class":133},[123,129055,60853],{"class":182},[123,129057,129058],{"class":182}," url",[123,129060,134],{"class":133},[123,129062,128647],{"class":5226},[123,129064,13724],{"class":133},[123,129066,61747],{"class":182},[123,129068,129069],{"class":182}," fixed",[123,129071,17154],{"class":182},[123,129073,128816],{"class":182},[123,129075,1300],{"class":133},[123,129077,129078],{"class":125,"line":1204},[123,129079,1574],{"class":133},[94,129081,129083],{"id":129082},"_827-背景色半透明","8.2.7 背景色半透明",[114,129085,129087],{"className":126549,"code":129086,"language":126551,"meta":37,"style":37},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[120,129088,129089,129095,129121],{"__ignoreMap":37},[123,129090,129091,129093],{"class":125,"line":126},[123,129092,51622],{"class":51311},[123,129094,15582],{"class":133},[123,129096,129097,129099,129101,129103,129105,129107,129109,129111,129113,129115,129117,129119],{"class":125,"line":45},[123,129098,70622],{"class":182},[123,129100,51448],{"class":133},[123,129102,55121],{"class":182},[123,129104,134],{"class":133},[123,129106,325],{"class":182},[123,129108,12445],{"class":133},[123,129110,325],{"class":182},[123,129112,12445],{"class":133},[123,129114,325],{"class":182},[123,129116,12445],{"class":133},[123,129118,100518],{"class":182},[123,129120,2728],{"class":133},[123,129122,129123],{"class":125,"line":1189},[123,129124,1574],{"class":133},[14,129126,99393],{},[14,129128,129129],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129131,129132],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129134,129135],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129137,129138],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[94,129140,129142],{"id":129141},"_828-总结","8.2.8 总结",[271,129144,129145,129156],{},[274,129146,129147],{},[277,129148,129149,129152,129154],{},[280,129150,129151],{"align":23746},"属性",[280,129153,102693],{"align":23746},[280,129155,286],{"align":23746},[318,129157,129158,129169,129180,129191,129202,129213,129224],{},[277,129159,129160,129163,129166],{},[323,129161,129162],{"align":23746},"background-color",[323,129164,129165],{"align":23746},"背景颜色",[323,129167,129168],{"align":23746},"预定义的颜色值\u002F十六进制\u002FRGB代码",[277,129170,129171,129174,129177],{},[323,129172,129173],{"align":23746},"background-image",[323,129175,129176],{"align":23746},"背景图片",[323,129178,129179],{"align":23746},"url(图片路径)",[277,129181,129182,129185,129188],{},[323,129183,129184],{"align":23746},"background-repeat",[323,129186,129187],{"align":23746},"是否平铺",[323,129189,129190],{"align":23746},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[277,129192,129193,129196,129199],{},[323,129194,129195],{"align":23746},"background-position",[323,129197,129198],{"align":23746},"背景位置",[323,129200,129201],{"align":23746},"length\u002Fposition 分别是x和y坐标",[277,129203,129204,129207,129210],{},[323,129205,129206],{"align":23746},"background-attachment",[323,129208,129209],{"align":23746},"背景附着",[323,129211,129212],{"align":23746},"scroll(背景滚动) \u002Ffixed (背景固定)",[277,129214,129215,129218,129221],{},[323,129216,129217],{"align":23746},"背景简写",[323,129219,129220],{"align":23746},"书写更简单",[323,129222,129223],{"align":23746},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[277,129225,129226,129229,129232],{},[323,129227,129228],{"align":23746},"背景半透明",[323,129230,129231],{"align":23746},"背景颜色半透明",[323,129233,129234],{"align":23746},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129236,129237],{},"颜色渐变：",[35,129239],{"style":126405,"src":129240},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[35,129242],{"style":126405,"src":129243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[94,129245,129247],{"id":129246},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[114,129249,129251],{"className":127296,"code":129250,"language":127298,"meta":37,"style":37},"\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",[120,129252,129253,129268,129287,129306,129325,129344,129363],{"__ignoreMap":37},[123,129254,129255,129257,129259,129261,129263,129266],{"class":125,"line":126},[123,129256,1044],{"class":133},[123,129258,51622],{"class":51311},[123,129260,53497],{"class":1972},[123,129262,179],{"class":133},[123,129264,129265],{"class":238},"\"nav\"",[123,129267,51318],{"class":133},[123,129269,129270,129272,129274,129276,129278,129280,129283,129285],{"class":125,"line":45},[123,129271,52155],{"class":133},[123,129273,372],{"class":51311},[123,129275,61068],{"class":1972},[123,129277,179],{"class":133},[123,129279,61073],{"class":238},[123,129281,129282],{"class":133},">五彩导航1\u003C\u002F",[123,129284,372],{"class":51311},[123,129286,51318],{"class":133},[123,129288,129289,129291,129293,129295,129297,129299,129302,129304],{"class":125,"line":1189},[123,129290,52155],{"class":133},[123,129292,372],{"class":51311},[123,129294,61068],{"class":1972},[123,129296,179],{"class":133},[123,129298,61073],{"class":238},[123,129300,129301],{"class":133},">五彩导航2\u003C\u002F",[123,129303,372],{"class":51311},[123,129305,51318],{"class":133},[123,129307,129308,129310,129312,129314,129316,129318,129321,129323],{"class":125,"line":1204},[123,129309,52155],{"class":133},[123,129311,372],{"class":51311},[123,129313,61068],{"class":1972},[123,129315,179],{"class":133},[123,129317,61073],{"class":238},[123,129319,129320],{"class":133},">五彩导航3\u003C\u002F",[123,129322,372],{"class":51311},[123,129324,51318],{"class":133},[123,129326,129327,129329,129331,129333,129335,129337,129340,129342],{"class":125,"line":1210},[123,129328,52155],{"class":133},[123,129330,372],{"class":51311},[123,129332,61068],{"class":1972},[123,129334,179],{"class":133},[123,129336,61073],{"class":238},[123,129338,129339],{"class":133},">五彩导航4\u003C\u002F",[123,129341,372],{"class":51311},[123,129343,51318],{"class":133},[123,129345,129346,129348,129350,129352,129354,129356,129359,129361],{"class":125,"line":1224},[123,129347,52155],{"class":133},[123,129349,372],{"class":51311},[123,129351,61068],{"class":1972},[123,129353,179],{"class":133},[123,129355,61073],{"class":238},[123,129357,129358],{"class":133},">五彩导航5\u003C\u002F",[123,129360,372],{"class":51311},[123,129362,51318],{"class":133},[123,129364,129365,129367,129369],{"class":125,"line":1230},[123,129366,51796],{"class":133},[123,129368,51622],{"class":51311},[123,129370,51318],{"class":133},[114,129372,129374],{"className":126549,"code":129373,"language":126551,"meta":37,"style":37},".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",[120,129375,129376,129385,129395,129407,129419,129429,129441,129451,129455,129480,129503,129526,129549],{"__ignoreMap":37},[123,129377,129378,129381,129383],{"class":125,"line":126},[123,129379,129380],{"class":1972},".nav",[123,129382,1408],{"class":51311},[123,129384,15582],{"class":133},[123,129386,129387,129389,129391,129393],{"class":125,"line":45},[123,129388,128165],{"class":182},[123,129390,51448],{"class":133},[123,129392,72394],{"class":182},[123,129394,1300],{"class":133},[123,129396,129397,129399,129401,129403,129405],{"class":125,"line":1189},[123,129398,70579],{"class":182},[123,129400,51448],{"class":133},[123,129402,951],{"class":182},[123,129404,51503],{"class":129},[123,129406,1300],{"class":133},[123,129408,129409,129411,129413,129415,129417],{"class":125,"line":1204},[123,129410,70799],{"class":182},[123,129412,51448],{"class":133},[123,129414,990],{"class":182},[123,129416,51503],{"class":129},[123,129418,1300],{"class":133},[123,129420,129421,129423,129425,129427],{"class":125,"line":1210},[123,129422,70537],{"class":182},[123,129424,51448],{"class":133},[123,129426,51603],{"class":182},[123,129428,1300],{"class":133},[123,129430,129431,129433,129435,129437,129439],{"class":125,"line":1224},[123,129432,127233],{"class":182},[123,129434,51448],{"class":133},[123,129436,990],{"class":182},[123,129438,51503],{"class":129},[123,129440,1300],{"class":133},[123,129442,129443,129445,129447,129449],{"class":125,"line":1230},[123,129444,70916],{"class":182},[123,129446,51448],{"class":133},[123,129448,60853],{"class":182},[123,129450,1300],{"class":133},[123,129452,129453],{"class":125,"line":1321},[123,129454,1574],{"class":133},[123,129456,129457,129459,129461,129464,129466,129468,129471,129473,129475,129477],{"class":125,"line":1327},[123,129458,129380],{"class":1972},[123,129460,1408],{"class":51311},[123,129462,129463],{"class":1972},":nth-child",[123,129465,134],{"class":133},[123,129467,351],{"class":182},[123,129469,129470],{"class":133},") { ",[123,129472,129162],{"class":182},[123,129474,51448],{"class":133},[123,129476,128580],{"class":182},[123,129478,129479],{"class":133},"; }\n",[123,129481,129482,129484,129486,129488,129490,129492,129494,129496,129498,129501],{"class":125,"line":1339},[123,129483,129380],{"class":1972},[123,129485,1408],{"class":51311},[123,129487,129463],{"class":1972},[123,129489,134],{"class":133},[123,129491,211],{"class":182},[123,129493,129470],{"class":133},[123,129495,129162],{"class":182},[123,129497,51448],{"class":133},[123,129499,129500],{"class":182},"#ff0000",[123,129502,129479],{"class":133},[123,129504,129505,129507,129509,129511,129513,129515,129517,129519,129521,129524],{"class":125,"line":1621},[123,129506,129380],{"class":1972},[123,129508,1408],{"class":51311},[123,129510,129463],{"class":1972},[123,129512,134],{"class":133},[123,129514,205],{"class":182},[123,129516,129470],{"class":133},[123,129518,129162],{"class":182},[123,129520,51448],{"class":133},[123,129522,129523],{"class":182},"#00a4ff",[123,129525,129479],{"class":133},[123,129527,129528,129530,129532,129534,129536,129538,129540,129542,129544,129547],{"class":125,"line":1626},[123,129529,129380],{"class":1972},[123,129531,1408],{"class":51311},[123,129533,129463],{"class":1972},[123,129535,134],{"class":133},[123,129537,427],{"class":182},[123,129539,129470],{"class":133},[123,129541,129162],{"class":182},[123,129543,51448],{"class":133},[123,129545,129546],{"class":182},"#ff00ff",[123,129548,129479],{"class":133},[123,129550,129551,129553,129555,129557,129559,129561,129563,129565,129567,129570],{"class":125,"line":1632},[123,129552,129380],{"class":1972},[123,129554,1408],{"class":51311},[123,129556,129463],{"class":1972},[123,129558,134],{"class":133},[123,129560,453],{"class":182},[123,129562,129470],{"class":133},[123,129564,129162],{"class":182},[123,129566,51448],{"class":133},[123,129568,129569],{"class":182},"#00ff00",[123,129571,129479],{"class":133},[65,129573,129575],{"id":129574},"_83-css三大特性","8.3 css三大特性",[94,129577,129579],{"id":129578},"_831-层叠性","8.3.1 层叠性",[14,129581,129582],{},"为了解决样式冲突问题",[14,129584,129585],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129587,129588],{},"   ②样式不冲突，不会层叠",[94,129590,129592],{"id":129591},"_832-继承性","8.3.2 继承性",[14,129594,129595],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129597,129598],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[114,129600,129602],{"className":126549,"code":129601,"language":126551,"meta":37,"style":37},"p {\n  color: #333;\n}\n",[120,129603,129604,129610,129620],{"__ignoreMap":37},[123,129605,129606,129608],{"class":125,"line":126},[123,129607,14],{"class":51311},[123,129609,15582],{"class":133},[123,129611,129612,129614,129616,129618],{"class":125,"line":45},[123,129613,70916],{"class":182},[123,129615,51448],{"class":133},[123,129617,62380],{"class":182},[123,129619,1300],{"class":133},[123,129621,129622],{"class":125,"line":1189},[123,129623,1574],{"class":133},[35,129625],{"style":126405,"src":129626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,129628,129629],{},"解释：①行高可以跟单位也可以不跟单位",[14,129631,129632],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,129634,129635],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,129637,129638],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[94,129640,129642],{"id":129641},"_833-优先级","8.3.3 优先级",[77,129644,129645,129648],{},[80,129646,129647],{},"选择器相同，则执行层叠性",[80,129649,129650],{},"选择器不同，则根据选择器权重执行",[271,129652,129653,129663],{},[274,129654,129655],{},[277,129656,129657,129660],{},[280,129658,129659],{"align":23746},"选择器",[280,129661,129662],{"align":23746},"选择器权重",[318,129664,129665,129673,129681,129689,129697,129705],{},[277,129666,129667,129670],{},[323,129668,129669],{"align":23746},"继承 或者*",[323,129671,129672],{"align":23746},"0，0，0，0",[277,129674,129675,129678],{},[323,129676,129677],{"align":23746},"标签选择器",[323,129679,129680],{"align":23746},"0，0，0，1",[277,129682,129683,129686],{},[323,129684,129685],{"align":23746},"类选择器，伪类选择器",[323,129687,129688],{"align":23746},"0，0，1，0",[277,129690,129691,129694],{},[323,129692,129693],{"align":23746},"ID选择器",[323,129695,129696],{"align":23746},"0，1，0，0",[277,129698,129699,129702],{},[323,129700,129701],{"align":23746},"行内样式",[323,129703,129704],{"align":23746},"1，0，0，0",[277,129706,129707,129710],{},[323,129708,129709],{"align":23746},"！important",[323,129711,129712],{"align":23746},"无穷大",[14,129714,129715],{},"! important用法：",[114,129717,129719],{"className":126549,"code":129718,"language":126551,"meta":37,"style":37},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[120,129720,129721,129726,129732,129745,129749,129754,129760,129770],{"__ignoreMap":37},[123,129722,129723],{"class":125,"line":126},[123,129724,129725],{"class":192},"\u002F* !important 拥有最高优先级 *\u002F\n",[123,129727,129728,129730],{"class":125,"line":45},[123,129729,51622],{"class":51311},[123,129731,15582],{"class":133},[123,129733,129734,129736,129738,129740,129743],{"class":125,"line":1189},[123,129735,70916],{"class":182},[123,129737,51448],{"class":133},[123,129739,51656],{"class":182},[123,129741,129742],{"class":129}," !important",[123,129744,1300],{"class":133},[123,129746,129747],{"class":125,"line":1204},[123,129748,1574],{"class":133},[123,129750,129751],{"class":125,"line":1210},[123,129752,129753],{"class":192},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[123,129755,129756,129758],{"class":125,"line":1224},[123,129757,51622],{"class":51311},[123,129759,15582],{"class":133},[123,129761,129762,129764,129766,129768],{"class":125,"line":1230},[123,129763,70916],{"class":182},[123,129765,51448],{"class":133},[123,129767,57432],{"class":182},[123,129769,1300],{"class":133},[123,129771,129772],{"class":125,"line":1321},[123,129773,1574],{"class":133},[14,129775,129776],{},"优先级注意点：",[14,129778,129779],{},"①权重是有4组数字组成,但是不会有进位",[14,129781,129782],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,129784,129785],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,129787,129788],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,129790,129791],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,129793,129794],{},"⑥复合选择器",[271,129796,129797,129807],{},[274,129798,129799],{},[277,129800,129801,129804],{},[280,129802,129803],{"align":23746},"div ul li",[280,129805,129806],{"align":23746},"0,0,0,3",[318,129808,129809,129817,129825],{},[277,129810,129811,129814],{},[323,129812,129813],{"align":23746},".nav ul li",[323,129815,129816],{"align":23746},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[277,129818,129819,129822],{},[323,129820,129821],{"align":23746},"a:hover",[323,129823,129824],{"align":23746},"0,0,1,1",[277,129826,129827,129830],{},[323,129828,129829],{"align":23746},".nav a",[323,129831,129824],{"align":23746},[5136,129833,129834],{},"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":37,"searchDepth":45,"depth":45,"links":129836},[129837,129845,129856],{"id":127945,"depth":45,"text":127946,"children":129838},[129839,129840,129841,129842,129843,129844],{"id":127958,"depth":1189,"text":127959},{"id":128030,"depth":1189,"text":128031},{"id":128102,"depth":1189,"text":128103},{"id":128133,"depth":1189,"text":128134},{"id":128140,"depth":1189,"text":128141},{"id":128293,"depth":1189,"text":128294},{"id":128601,"depth":45,"text":128602,"children":129846},[129847,129848,129849,129850,129851,129852,129853,129854,129855],{"id":128608,"depth":1189,"text":128609},{"id":128618,"depth":1189,"text":128619},{"id":128714,"depth":1189,"text":128715},{"id":128787,"depth":1189,"text":128788},{"id":128942,"depth":1189,"text":128943},{"id":129030,"depth":1189,"text":129031},{"id":129082,"depth":1189,"text":129083},{"id":129141,"depth":1189,"text":129142},{"id":129246,"depth":1189,"text":129247},{"id":129574,"depth":45,"text":129575,"children":129857},[129858,129859,129860],{"id":129578,"depth":1189,"text":129579},{"id":129591,"depth":1189,"text":129592},{"id":129641,"depth":1189,"text":129642},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127937,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129867,"title":129868,"body":129869,"description":47,"extension":48,"meta":131459,"navigation":50,"path":131460,"seo":131461,"stem":131462,"__hash__":131463},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129870,"toc":131438},[129871,129874,129878,129881,129884,129887,129890,129893,129896,129899,129903,129911,129948,129984,129987,130001,130006,130040,130043,130136,130141,130144,130174,130177,130182,130190,130194,130201,130247,130291,130296,130299,130302,130305,130308,130311,130314,130316,130319,130323,130328,130372,130377,130380,130383,130420,130425,130428,130431,130434,130437,130469,130472,130475,130478,130510,130513,130516,130519,130523,130526,130558,130561,130565,130585,130588,130596,130599,130603,130608,130611,130643,130648,130651,130689,130693,130698,130701,130704,130735,130738,130755,130760,130812,130872,130877,130931,130969,130973,130977,130980,130984,130992,130995,130997,131008,131013,131061,131095,131098,131101,131104,131107,131151,131154,131157,131160,131163,131166,131169,131213,131216,131219,131222,131225,131228,131231,131237,131240,131284,131287,131290,131293,131296,131299,131343,131346,131348,131351,131355,131359,131397,131401,131404,131407,131411,131419,131423,131426,131429,131432,131435],[10,129872,129868],{"id":129873},"_9-css盒模型浮动与切图",[65,129875,129877],{"id":129876},"_91-盒子模型","9.1 盒子模型",[14,129879,129880],{},"利用盒子来设计网页",[14,129882,129883],{},"盒子包含：边框、外边距、内边距、实际内容",[14,129885,129886],{},"网页布局设置：",[14,129888,129889],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,129891,129892],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,129894,129895],{},"③往盒子里装内容",[35,129897],{"style":126405,"src":129898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[94,129900,129902],{"id":129901},"_911-边框border","9.1.1 边框（border）",[77,129904,129905,129908],{},[80,129906,129907],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[80,129909,129910],{},"语法",[114,129912,129914],{"className":126549,"code":129913,"language":126551,"meta":37,"style":37},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[120,129915,129916,129921,129927,129944],{"__ignoreMap":37},[123,129917,129918],{"class":125,"line":126},[123,129919,129920],{"class":192},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[123,129922,129923,129925],{"class":125,"line":45},[123,129924,51622],{"class":51311},[123,129926,15582],{"class":133},[123,129928,129929,129931,129933,129935,129937,129939,129942],{"class":125,"line":1189},[123,129930,70907],{"class":182},[123,129932,51448],{"class":133},[123,129934,351],{"class":182},[123,129936,51503],{"class":129},[123,129938,51532],{"class":182},[123,129940,129941],{"class":182}," #ccc",[123,129943,1300],{"class":133},[123,129945,129946],{"class":125,"line":1204},[123,129947,1574],{"class":133},[271,129949,129950,129958],{},[274,129951,129952],{},[277,129953,129954,129956],{},[280,129955,129151],{"align":23746},[280,129957,102693],{"align":23746},[318,129959,129960,129968,129976],{},[277,129961,129962,129965],{},[323,129963,129964],{"align":23746},"border-width",[323,129966,129967],{"align":23746},"定义边框粗细，单位是px",[277,129969,129970,129973],{},[323,129971,129972],{"align":23746},"border-style",[323,129974,129975],{"align":23746},"边框的样式",[277,129977,129978,129981],{},[323,129979,129980],{"align":23746},"border-color",[323,129982,129983],{"align":23746},"边框的颜色",[14,129985,129986],{},"边框样式 border-style 可以设置如下值：",[1141,129988,129989,129992,129995,129998],{},[80,129990,129991],{},"none：没有边框即忽略所有边框的宽度（默认值）",[80,129993,129994],{},"solid：边框为单实线(最为常用的)",[80,129996,129997],{},"dashed：边框为虚线",[80,129999,130000],{},"dotted：边框为点线",[77,130002,130003],{"start":1189},[80,130004,130005],{},"边框的合写分写",[114,130007,130008],{"className":126549,"code":129913,"language":126551,"meta":37,"style":37},[120,130009,130010,130014,130020,130036],{"__ignoreMap":37},[123,130011,130012],{"class":125,"line":126},[123,130013,129920],{"class":192},[123,130015,130016,130018],{"class":125,"line":45},[123,130017,51622],{"class":51311},[123,130019,15582],{"class":133},[123,130021,130022,130024,130026,130028,130030,130032,130034],{"class":125,"line":1189},[123,130023,70907],{"class":182},[123,130025,51448],{"class":133},[123,130027,351],{"class":182},[123,130029,51503],{"class":129},[123,130031,51532],{"class":182},[123,130033,129941],{"class":182},[123,130035,1300],{"class":133},[123,130037,130038],{"class":125,"line":1204},[123,130039,1574],{"class":133},[14,130041,130042],{},"边框分开写法：",[114,130044,130046],{"className":126549,"code":130045,"language":126551,"meta":37,"style":37},"\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",[120,130047,130048,130053,130059,130077,130095,130114,130132],{"__ignoreMap":37},[123,130049,130050],{"class":125,"line":126},[123,130051,130052],{"class":192},"\u002F* 边框分开写法 *\u002F\n",[123,130054,130055,130057],{"class":125,"line":45},[123,130056,51622],{"class":51311},[123,130058,15582],{"class":133},[123,130060,130061,130064,130066,130068,130070,130072,130075],{"class":125,"line":1189},[123,130062,130063],{"class":182},"  border-top",[123,130065,51448],{"class":133},[123,130067,351],{"class":182},[123,130069,51503],{"class":129},[123,130071,51532],{"class":182},[123,130073,130074],{"class":182}," #000",[123,130076,1300],{"class":133},[123,130078,130079,130082,130084,130086,130088,130090,130093],{"class":125,"line":1204},[123,130080,130081],{"class":182},"  border-right",[123,130083,51448],{"class":133},[123,130085,211],{"class":182},[123,130087,51503],{"class":129},[123,130089,62252],{"class":182},[123,130091,130092],{"class":182}," #333",[123,130094,1300],{"class":133},[123,130096,130097,130100,130102,130104,130106,130109,130112],{"class":125,"line":1210},[123,130098,130099],{"class":182},"  border-bottom",[123,130101,51448],{"class":133},[123,130103,205],{"class":182},[123,130105,51503],{"class":129},[123,130107,130108],{"class":182}," dotted",[123,130110,130111],{"class":182}," #666",[123,130113,1300],{"class":133},[123,130115,130116,130119,130121,130123,130125,130127,130130],{"class":125,"line":1224},[123,130117,130118],{"class":182},"  border-left",[123,130120,51448],{"class":133},[123,130122,351],{"class":182},[123,130124,51503],{"class":129},[123,130126,51532],{"class":182},[123,130128,130129],{"class":182}," #999",[123,130131,1300],{"class":133},[123,130133,130134],{"class":125,"line":1230},[123,130135,1574],{"class":133},[77,130137,130138],{"start":1204},[80,130139,130140],{},"表格的细线边框",[14,130142,130143],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[114,130145,130147],{"className":126549,"code":130146,"language":126551,"meta":37,"style":37},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[120,130148,130149,130154,130160,130170],{"__ignoreMap":37},[123,130150,130151],{"class":125,"line":126},[123,130152,130153],{"class":192},"\u002F* 表格细线边框合并 *\u002F\n",[123,130155,130156,130158],{"class":125,"line":45},[123,130157,271],{"class":51311},[123,130159,15582],{"class":133},[123,130161,130162,130164,130166,130168],{"class":125,"line":1189},[123,130163,70589],{"class":182},[123,130165,51448],{"class":133},[123,130167,65046],{"class":182},[123,130169,1300],{"class":133},[123,130171,130172],{"class":125,"line":1204},[123,130173,1574],{"class":133},[14,130175,130176],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[77,130178,130179],{"start":1210},[80,130180,130181],{},"解决边框额外增加盒子的实际大小的方法：",[1141,130183,130184,130187],{},[80,130185,130186],{},"测量盒子大小的时候,不量边框",[80,130188,130189],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[94,130191,130193],{"id":130192},"_912-内边距","9.1.2 内边距",[77,130195,130196,130199],{},[80,130197,130198],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[80,130200,129910],{},[271,130202,130203,130213],{},[274,130204,130205],{},[277,130206,130207,130210],{},[280,130208,130209],{"align":23746},"值的个数",[280,130211,130212],{"align":23746},"表达意思",[318,130214,130215,130223,130231,130239],{},[277,130216,130217,130220],{},[323,130218,130219],{"align":23746},"padding: 5px;",[323,130221,130222],{"align":23746},"1个值，代表上下左右都有5个元素",[277,130224,130225,130228],{},[323,130226,130227],{"align":23746},"padding: 5px 10px;",[323,130229,130230],{"align":23746},"2个值，代表上下内边距为5像素，左右内边距为10像素",[277,130232,130233,130236],{},[323,130234,130235],{"align":23746},"padding: 5px 10px 20px;",[323,130237,130238],{"align":23746},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[277,130240,130241,130244],{},[323,130242,130243],{"align":23746},"padding: 5px 10px 20px 30px;",[323,130245,130246],{"align":23746},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[271,130248,130249,130257],{},[274,130250,130251],{},[277,130252,130253,130255],{},[280,130254,129151],{"align":23746},[280,130256,102693],{"align":23746},[318,130258,130259,130267,130275,130283],{},[277,130260,130261,130264],{},[323,130262,130263],{"align":23746},"padding-left",[323,130265,130266],{"align":23746},"左内边距",[277,130268,130269,130272],{},[323,130270,130271],{"align":23746},"padding-right",[323,130273,130274],{"align":23746},"右内边距",[277,130276,130277,130280],{},[323,130278,130279],{"align":23746},"padding-top",[323,130281,130282],{"align":23746},"上内边距",[277,130284,130285,130288],{},[323,130286,130287],{"align":23746},"padding-bottom",[323,130289,130290],{"align":23746},"下内边距",[77,130292,130293],{"start":1189},[80,130294,130295],{},"内边距会影响盒子的实际大小",[14,130297,130298],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130300,130301],{},"①内容和边框有了距离，添加了内边距",[14,130303,130304],{},"②padding影响了盒子实际大小",[14,130306,130307],{},"内边距对盒子大小的影响：",[14,130309,130310],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130312,130313],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130315,95217],{},[14,130317,130318],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[94,130320,130322],{"id":130321},"_913-外边距","9.1.3 外边距",[77,130324,130325],{},[80,130326,130327],{},"控制盒子与盒子之间的距离",[271,130329,130330,130338],{},[274,130331,130332],{},[277,130333,130334,130336],{},[280,130335,129151],{"align":23746},[280,130337,102693],{"align":23746},[318,130339,130340,130348,130356,130364],{},[277,130341,130342,130345],{},[323,130343,130344],{"align":23746},"margin-left",[323,130346,130347],{"align":23746},"左外边距",[277,130349,130350,130353],{},[323,130351,130352],{"align":23746},"margin-right",[323,130354,130355],{"align":23746},"右外边距",[277,130357,130358,130361],{},[323,130359,130360],{"align":23746},"margin-top",[323,130362,130363],{"align":23746},"上外边距",[277,130365,130366,130369],{},[323,130367,130368],{"align":23746},"margin-bottom",[323,130370,130371],{"align":23746},"下外边距",[77,130373,130374],{"start":45},[80,130375,130376],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130378,130379],{},"①盒子必须指定了宽度（width）",[14,130381,130382],{},"②盒子左右的外边距都设置为 auto",[114,130384,130386],{"className":126549,"code":130385,"language":126551,"meta":37,"style":37},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[120,130387,130388,130393,130400,130416],{"__ignoreMap":37},[123,130389,130390],{"class":125,"line":126},[123,130391,130392],{"class":192},"\u002F* margin 复合写法（同上） *\u002F\n",[123,130394,130395,130398],{"class":125,"line":45},[123,130396,130397],{"class":1972},".box",[123,130399,15582],{"class":133},[123,130401,130402,130404,130406,130408,130410,130413],{"class":125,"line":1189},[123,130403,70481],{"class":182},[123,130405,51448],{"class":133},[123,130407,325],{"class":182},[123,130409,51567],{"class":182},[123,130411,130412],{"class":133},";  ",[123,130414,130415],{"class":192},"\u002F* 块级盒子水平居中 *\u002F\n",[123,130417,130418],{"class":125,"line":1204},[123,130419,1574],{"class":133},[77,130421,130422],{"start":1189},[80,130423,130424],{},"外边距塌陷问题",[14,130426,130427],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[35,130429],{"style":126405,"src":130430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130432,130433],{},"解决方案：",[14,130435,130436],{},"①可以为父亲元素定义上边距",[114,130438,130439],{"className":126549,"code":130385,"language":126551,"meta":37,"style":37},[120,130440,130441,130445,130451,130465],{"__ignoreMap":37},[123,130442,130443],{"class":125,"line":126},[123,130444,130392],{"class":192},[123,130446,130447,130449],{"class":125,"line":45},[123,130448,130397],{"class":1972},[123,130450,15582],{"class":133},[123,130452,130453,130455,130457,130459,130461,130463],{"class":125,"line":1189},[123,130454,70481],{"class":182},[123,130456,51448],{"class":133},[123,130458,325],{"class":182},[123,130460,51567],{"class":182},[123,130462,130412],{"class":133},[123,130464,130415],{"class":192},[123,130466,130467],{"class":125,"line":1204},[123,130468,1574],{"class":133},[14,130470,130471],{},"②可以为父亲元素定义上内边距",[14,130473,130474],{},"③可以为父亲元素添加overflow:hidden",[35,130476],{"style":126405,"src":130477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[114,130479,130480],{"className":126549,"code":130385,"language":126551,"meta":37,"style":37},[120,130481,130482,130486,130492,130506],{"__ignoreMap":37},[123,130483,130484],{"class":125,"line":126},[123,130485,130392],{"class":192},[123,130487,130488,130490],{"class":125,"line":45},[123,130489,130397],{"class":1972},[123,130491,15582],{"class":133},[123,130493,130494,130496,130498,130500,130502,130504],{"class":125,"line":1189},[123,130495,70481],{"class":182},[123,130497,51448],{"class":133},[123,130499,325],{"class":182},[123,130501,51567],{"class":182},[123,130503,130412],{"class":133},[123,130505,130415],{"class":192},[123,130507,130508],{"class":125,"line":1204},[123,130509,1574],{"class":133},[35,130511],{"style":126405,"src":130512},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130514,130515],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130517,130518],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[94,130520,130522],{"id":130521},"_914-清除内外边距","9.1.4 清除内外边距",[14,130524,130525],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[114,130527,130528],{"className":126549,"code":130385,"language":126551,"meta":37,"style":37},[120,130529,130530,130534,130540,130554],{"__ignoreMap":37},[123,130531,130532],{"class":125,"line":126},[123,130533,130392],{"class":192},[123,130535,130536,130538],{"class":125,"line":45},[123,130537,130397],{"class":1972},[123,130539,15582],{"class":133},[123,130541,130542,130544,130546,130548,130550,130552],{"class":125,"line":1189},[123,130543,70481],{"class":182},[123,130545,51448],{"class":133},[123,130547,325],{"class":182},[123,130549,51567],{"class":182},[123,130551,130412],{"class":133},[123,130553,130415],{"class":192},[123,130555,130556],{"class":125,"line":1204},[123,130557,1574],{"class":133},[14,130559,130560],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[94,130562,130564],{"id":130563},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1141,130566,130567,130570,130573,130576,130579,130582],{},[80,130568,130569],{},"文件→打开 ：可以打开我们要测量的图片",[80,130571,130572],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[80,130574,130575],{},"右击标尺，把里面的单位改为像素",[80,130577,130578],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[80,130580,130581],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[80,130583,130584],{},"用选区拖动 可以测量大小",[35,130586],{"style":126405,"src":130587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1141,130589,130590,130593],{},[80,130591,130592],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[80,130594,130595],{},"吸管取色工具",[35,130597],{"style":126405,"src":130598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[94,130600,130602],{"id":130601},"_916-案例","9.1.6 案例",[77,130604,130605],{},[80,130606,130607],{},"小米商品",[35,130609],{"style":126405,"src":130610},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[114,130612,130613],{"className":126549,"code":130385,"language":126551,"meta":37,"style":37},[120,130614,130615,130619,130625,130639],{"__ignoreMap":37},[123,130616,130617],{"class":125,"line":126},[123,130618,130392],{"class":192},[123,130620,130621,130623],{"class":125,"line":45},[123,130622,130397],{"class":1972},[123,130624,15582],{"class":133},[123,130626,130627,130629,130631,130633,130635,130637],{"class":125,"line":1189},[123,130628,70481],{"class":182},[123,130630,51448],{"class":133},[123,130632,325],{"class":182},[123,130634,51567],{"class":182},[123,130636,130412],{"class":133},[123,130638,130415],{"class":192},[123,130640,130641],{"class":125,"line":1204},[123,130642,1574],{"class":133},[77,130644,130645],{"start":45},[80,130646,130647],{},"快报模块",[35,130649],{"style":126405,"src":130650},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[114,130652,130654],{"className":127296,"code":130653,"language":127298,"meta":37,"style":37},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[120,130655,130656,130661,130676,130681],{"__ignoreMap":37},[123,130657,130658],{"class":125,"line":126},[123,130659,130660],{"class":192},"\u003C!-- HTML 代码示例 -->\n",[123,130662,130663,130665,130667,130669,130671,130674],{"class":125,"line":45},[123,130664,1044],{"class":133},[123,130666,51622],{"class":51311},[123,130668,53497],{"class":1972},[123,130670,179],{"class":133},[123,130672,130673],{"class":238},"\"example\"",[123,130675,51318],{"class":133},[123,130677,130678],{"class":125,"line":1189},[123,130679,130680],{"class":133},"  示例内容\n",[123,130682,130683,130685,130687],{"class":125,"line":1204},[123,130684,51796],{"class":133},[123,130686,51622],{"class":51311},[123,130688,51318],{"class":133},[94,130690,130692],{"id":130691},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[77,130694,130695],{},[80,130696,130697],{},"圆角边框",[14,130699,130700],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[35,130702],{"style":126405,"src":130703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[114,130705,130707],{"className":126549,"code":130706,"language":126551,"meta":37,"style":37},"div {\n  border: 1px solid #ccc;\n}\n",[120,130708,130709,130715,130731],{"__ignoreMap":37},[123,130710,130711,130713],{"class":125,"line":126},[123,130712,51622],{"class":51311},[123,130714,15582],{"class":133},[123,130716,130717,130719,130721,130723,130725,130727,130729],{"class":125,"line":45},[123,130718,70907],{"class":182},[123,130720,51448],{"class":133},[123,130722,351],{"class":182},[123,130724,51503],{"class":129},[123,130726,51532],{"class":182},[123,130728,129941],{"class":182},[123,130730,1300],{"class":133},[123,130732,130733],{"class":125,"line":1189},[123,130734,1574],{"class":133},[14,130736,130737],{},"解释:",[1141,130739,130740,130743,130746,130749,130752],{},[80,130741,130742],{},"参数值可以为数值或百分比的形式",[80,130744,130745],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[80,130747,130748],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[80,130750,130751],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[80,130753,130754],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[77,130756,130757],{"start":45},[80,130758,130759],{},"盒子阴影",[114,130761,130763],{"className":126549,"code":130762,"language":126551,"meta":37,"style":37},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[120,130764,130765,130771,130808],{"__ignoreMap":37},[123,130766,130767,130769],{"class":125,"line":126},[123,130768,51622],{"class":51311},[123,130770,15582],{"class":133},[123,130772,130773,130776,130778,130780,130782,130784,130786,130788,130790,130792,130794,130796,130798,130800,130802,130804,130806],{"class":125,"line":45},[123,130774,130775],{"class":182},"  box-shadow",[123,130777,51448],{"class":133},[123,130779,325],{"class":182},[123,130781,14765],{"class":182},[123,130783,51503],{"class":129},[123,130785,2047],{"class":182},[123,130787,51503],{"class":129},[123,130789,78778],{"class":182},[123,130791,134],{"class":133},[123,130793,325],{"class":182},[123,130795,12445],{"class":133},[123,130797,325],{"class":182},[123,130799,12445],{"class":133},[123,130801,325],{"class":182},[123,130803,12445],{"class":133},[123,130805,86221],{"class":182},[123,130807,2728],{"class":133},[123,130809,130810],{"class":125,"line":1189},[123,130811,1574],{"class":133},[271,130813,130814,130822],{},[274,130815,130816],{},[277,130817,130818,130820],{},[280,130819,286],{"align":23746},[280,130821,27500],{"align":23746},[318,130823,130824,130832,130840,130848,130856,130864],{},[277,130825,130826,130829],{},[323,130827,130828],{"align":23746},"h-shadow",[323,130830,130831],{"align":23746},"必需,水平阴影的位置,允许负值",[277,130833,130834,130837],{},[323,130835,130836],{"align":23746},"v-shadow",[323,130838,130839],{"align":23746},"必需,垂直阴影的位置,允许负值",[277,130841,130842,130845],{},[323,130843,130844],{"align":23746},"blur",[323,130846,130847],{"align":23746},"可选,模糊距离,就是影子的虚实",[277,130849,130850,130853],{},[323,130851,130852],{"align":23746},"spread",[323,130854,130855],{"align":23746},"可选,阴影尺寸",[277,130857,130858,130861],{},[323,130859,130860],{"align":23746},"color",[323,130862,130863],{"align":23746},"可选,阴影的颜色",[277,130865,130866,130869],{},[323,130867,130868],{"align":23746},"inset",[323,130870,130871],{"align":23746},"可选,将外部阴影(outset)改为内部阴影",[77,130873,130874],{"start":1189},[80,130875,130876],{},"文字阴影",[114,130878,130880],{"className":126549,"code":130879,"language":126551,"meta":37,"style":37},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[120,130881,130882,130888,130927],{"__ignoreMap":37},[123,130883,130884,130886],{"class":125,"line":126},[123,130885,14],{"class":51311},[123,130887,15582],{"class":133},[123,130889,130890,130893,130895,130897,130899,130901,130903,130905,130907,130909,130911,130913,130915,130917,130919,130921,130923,130925],{"class":125,"line":45},[123,130891,130892],{"class":182},"  text-shadow",[123,130894,51448],{"class":133},[123,130896,351],{"class":182},[123,130898,51503],{"class":129},[123,130900,25129],{"class":182},[123,130902,51503],{"class":129},[123,130904,14765],{"class":182},[123,130906,51503],{"class":129},[123,130908,78778],{"class":182},[123,130910,134],{"class":133},[123,130912,325],{"class":182},[123,130914,12445],{"class":133},[123,130916,325],{"class":182},[123,130918,12445],{"class":133},[123,130920,325],{"class":182},[123,130922,12445],{"class":133},[123,130924,100518],{"class":182},[123,130926,2728],{"class":133},[123,130928,130929],{"class":125,"line":1189},[123,130930,1574],{"class":133},[271,130932,130933,130941],{},[274,130934,130935],{},[277,130936,130937,130939],{},[280,130938,286],{"align":23746},[280,130940,27500],{"align":23746},[318,130942,130943,130949,130956,130963],{},[277,130944,130945,130947],{},[323,130946,130828],{"align":23746},[323,130948,130831],{"align":23746},[277,130950,130951,130953],{},[323,130952,130836],{"align":23746},[323,130954,130955],{"align":23746},"必需,垂直阴影位置,允许负值",[277,130957,130958,130960],{},[323,130959,130844],{"align":23746},[323,130961,130962],{"align":23746},"可选,模糊的距离",[277,130964,130965,130967],{},[323,130966,130860],{"align":23746},[323,130968,130863],{"align":23746},[65,130970,130972],{"id":130971},"_92-浮动","9.2 浮动",[94,130974,130976],{"id":130975},"_921-浮动介绍","9.2.1 浮动介绍",[14,130978,130979],{},"在16.2中详细介绍",[94,130981,130983],{"id":130982},"_922-清除浮动","9.2.2 清除浮动",[77,130985,130986,130989],{},[80,130987,130988],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[80,130990,130991],{},"清除浮动的本质",[14,130993,130994],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,130996,9035],{},[1141,130998,130999,131002,131005],{},[80,131000,131001],{},"如果父盒子本身有高度，则不需要清除浮动",[80,131003,131004],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[80,131006,131007],{},"父级有了高度，就不会影响下面的标准流了",[77,131009,131010],{"start":1189},[80,131011,131012],{},"清除浮动样式",[114,131014,131016],{"className":126549,"code":131015,"language":126551,"meta":37,"style":37},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[120,131017,131018,131025,131036,131040,131047,131057],{"__ignoreMap":37},[123,131019,131020,131023],{"class":125,"line":126},[123,131021,131022],{"class":1972},".left",[123,131024,15582],{"class":133},[123,131026,131027,131030,131032,131034],{"class":125,"line":45},[123,131028,131029],{"class":182},"  float",[123,131031,51448],{"class":133},[123,131033,23746],{"class":182},[123,131035,1300],{"class":133},[123,131037,131038],{"class":125,"line":1189},[123,131039,1574],{"class":133},[123,131041,131042,131045],{"class":125,"line":1204},[123,131043,131044],{"class":1972},".right",[123,131046,15582],{"class":133},[123,131048,131049,131051,131053,131055],{"class":125,"line":1210},[123,131050,131029],{"class":182},[123,131052,51448],{"class":133},[123,131054,72533],{"class":182},[123,131056,1300],{"class":133},[123,131058,131059],{"class":125,"line":1224},[123,131060,1574],{"class":133},[271,131062,131063,131071],{},[274,131064,131065],{},[277,131066,131067,131069],{},[280,131068,127013],{"align":23746},[280,131070,27500],{"align":23746},[318,131072,131073,131080,131087],{},[277,131074,131075,131077],{},[323,131076,23746],{"align":23746},[323,131078,131079],{"align":23746},"不允许左侧有浮动元素（清除左侧浮动的影响）",[277,131081,131082,131084],{},[323,131083,72533],{"align":23746},[323,131085,131086],{"align":23746},"不允许右侧有浮动元素（清除右侧浮动的影响）",[277,131088,131089,131092],{},[323,131090,131091],{"align":23746},"both",[323,131093,131094],{"align":23746},"同时清除左右侧浮动的影响",[14,131096,131097],{},"法一",[14,131099,131100],{},"额外标签法也称为隔墙法",[14,131102,131103],{},"使用方式：",[14,131105,131106],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[114,131108,131109],{"className":126549,"code":131015,"language":126551,"meta":37,"style":37},[120,131110,131111,131117,131127,131131,131137,131147],{"__ignoreMap":37},[123,131112,131113,131115],{"class":125,"line":126},[123,131114,131022],{"class":1972},[123,131116,15582],{"class":133},[123,131118,131119,131121,131123,131125],{"class":125,"line":45},[123,131120,131029],{"class":182},[123,131122,51448],{"class":133},[123,131124,23746],{"class":182},[123,131126,1300],{"class":133},[123,131128,131129],{"class":125,"line":1189},[123,131130,1574],{"class":133},[123,131132,131133,131135],{"class":125,"line":1204},[123,131134,131044],{"class":1972},[123,131136,15582],{"class":133},[123,131138,131139,131141,131143,131145],{"class":125,"line":1210},[123,131140,131029],{"class":182},[123,131142,51448],{"class":133},[123,131144,72533],{"class":182},[123,131146,1300],{"class":133},[123,131148,131149],{"class":125,"line":1224},[123,131150,1574],{"class":133},[14,131152,131153],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131155,131156],{},"优点： 通俗易懂，书写方便",[14,131158,131159],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131161,131162],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131164,131165],{},"法二",[14,131167,131168],{},"父级添加overflow属性",[114,131170,131171],{"className":126549,"code":131015,"language":126551,"meta":37,"style":37},[120,131172,131173,131179,131189,131193,131199,131209],{"__ignoreMap":37},[123,131174,131175,131177],{"class":125,"line":126},[123,131176,131022],{"class":1972},[123,131178,15582],{"class":133},[123,131180,131181,131183,131185,131187],{"class":125,"line":45},[123,131182,131029],{"class":182},[123,131184,51448],{"class":133},[123,131186,23746],{"class":182},[123,131188,1300],{"class":133},[123,131190,131191],{"class":125,"line":1189},[123,131192,1574],{"class":133},[123,131194,131195,131197],{"class":125,"line":1204},[123,131196,131044],{"class":1972},[123,131198,15582],{"class":133},[123,131200,131201,131203,131205,131207],{"class":125,"line":1210},[123,131202,131029],{"class":182},[123,131204,51448],{"class":133},[123,131206,72533],{"class":182},[123,131208,1300],{"class":133},[123,131210,131211],{"class":125,"line":1224},[123,131212,1574],{"class":133},[14,131214,131215],{},"overflow: hidden;",[14,131217,131218],{},"优点：代码简洁",[14,131220,131221],{},"缺点：无法显示溢出的部分",[14,131223,131224],{},"注意：是给父元素添加代码",[14,131226,131227],{},"法三",[14,131229,131230],{},"父级添加after伪元素",[14,131232,131233,131236],{},[131234,131235],"after",{}," 方式是额外标签法的升级版",[14,131238,131239],{},"使用的时候复制就可以",[114,131241,131242],{"className":126549,"code":131015,"language":126551,"meta":37,"style":37},[120,131243,131244,131250,131260,131264,131270,131280],{"__ignoreMap":37},[123,131245,131246,131248],{"class":125,"line":126},[123,131247,131022],{"class":1972},[123,131249,15582],{"class":133},[123,131251,131252,131254,131256,131258],{"class":125,"line":45},[123,131253,131029],{"class":182},[123,131255,51448],{"class":133},[123,131257,23746],{"class":182},[123,131259,1300],{"class":133},[123,131261,131262],{"class":125,"line":1189},[123,131263,1574],{"class":133},[123,131265,131266,131268],{"class":125,"line":1204},[123,131267,131044],{"class":1972},[123,131269,15582],{"class":133},[123,131271,131272,131274,131276,131278],{"class":125,"line":1210},[123,131273,131029],{"class":182},[123,131275,51448],{"class":133},[123,131277,72533],{"class":182},[123,131279,1300],{"class":133},[123,131281,131282],{"class":125,"line":1224},[123,131283,1574],{"class":133},[14,131285,131286],{},"优点：没有增加标签，结构更简单",[14,131288,131289],{},"缺点：照顾低版本浏览器",[14,131291,131292],{},"代表网站： 百度、淘宝网、网易等",[14,131294,131295],{},"法四",[14,131297,131298],{},"父级添加双伪元素",[114,131300,131301],{"className":126549,"code":131015,"language":126551,"meta":37,"style":37},[120,131302,131303,131309,131319,131323,131329,131339],{"__ignoreMap":37},[123,131304,131305,131307],{"class":125,"line":126},[123,131306,131022],{"class":1972},[123,131308,15582],{"class":133},[123,131310,131311,131313,131315,131317],{"class":125,"line":45},[123,131312,131029],{"class":182},[123,131314,51448],{"class":133},[123,131316,23746],{"class":182},[123,131318,1300],{"class":133},[123,131320,131321],{"class":125,"line":1189},[123,131322,1574],{"class":133},[123,131324,131325,131327],{"class":125,"line":1204},[123,131326,131044],{"class":1972},[123,131328,15582],{"class":133},[123,131330,131331,131333,131335,131337],{"class":125,"line":1210},[123,131332,131029],{"class":182},[123,131334,51448],{"class":133},[123,131336,72533],{"class":182},[123,131338,1300],{"class":133},[123,131340,131341],{"class":125,"line":1224},[123,131342,1574],{"class":133},[14,131344,131345],{},"优点：代码更简洁",[14,131347,131289],{},[14,131349,131350],{},"代表网站：小米、腾讯等",[65,131352,131354],{"id":131353},"_93-ps切图","9.3 PS切图",[94,131356,131358],{"id":131357},"_931-常见图片格式","9.3.1 常见图片格式",[271,131360,131361,131371],{},[274,131362,131363],{},[277,131364,131365,131368],{},[280,131366,131367],{"align":23746},"jpg图像格式",[280,131369,131370],{"align":23746},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[318,131372,131373,131381,131389],{},[277,131374,131375,131378],{},[323,131376,131377],{"align":23746},"gif图像格式",[323,131379,131380],{"align":23746},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[277,131382,131383,131386],{},[323,131384,131385],{"align":23746},"png图像格式",[323,131387,131388],{"align":23746},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[277,131390,131391,131394],{},[323,131392,131393],{"align":23746},"PSD图像格式",[323,131395,131396],{"align":23746},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[94,131398,131400],{"id":131399},"_932-图层切图","9.3.2 图层切图",[14,131402,131403],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131405,131406],{},"按住shift选中两个图层->图层菜单->合并图层",[94,131408,131410],{"id":131409},"_933-切片切图","9.3.3 切片切图",[1141,131412,131413,131416],{},[80,131414,131415],{},"利用切片工具手动划出",[80,131417,131418],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[94,131420,131422],{"id":131421},"_934-切图步骤","9.3.4 切图步骤",[14,131424,131425],{},"用切片工具选中：",[35,131427],{"style":126405,"src":131428},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131430,131431],{},"文件 -> 导出",[35,131433],{"style":126405,"src":131434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5136,131436,131437],{},"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":37,"searchDepth":45,"depth":45,"links":131439},[131440,131449,131453],{"id":129876,"depth":45,"text":129877,"children":131441},[131442,131443,131444,131445,131446,131447,131448],{"id":129901,"depth":1189,"text":129902},{"id":130192,"depth":1189,"text":130193},{"id":130321,"depth":1189,"text":130322},{"id":130521,"depth":1189,"text":130522},{"id":130563,"depth":1189,"text":130564},{"id":130601,"depth":1189,"text":130602},{"id":130691,"depth":1189,"text":130692},{"id":130971,"depth":45,"text":130972,"children":131450},[131451,131452],{"id":130975,"depth":1189,"text":130976},{"id":130982,"depth":1189,"text":130983},{"id":131353,"depth":45,"text":131354,"children":131454},[131455,131456,131457,131458],{"id":131357,"depth":1189,"text":131358},{"id":131399,"depth":1189,"text":131400},{"id":131409,"depth":1189,"text":131410},{"id":131421,"depth":1189,"text":131422},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129868,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131465,"title":131466,"body":131467,"description":47,"extension":48,"meta":132108,"navigation":50,"path":132109,"seo":132110,"stem":132111,"__hash__":132112},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131468,"toc":132096},[131469,131472,131476,131502,131536,131540,131544,131547,131589,131596,131606,131614,131616,131619,131622,131625,131632,131646,131650,131653,131682,131686,131689,131703,131707,131710,131738,131742,131745,131771,131775,131780,131813,131818,131846,131850,131867,131913,131918,131962,131979,132086,132094],[10,131470,131466],{"id":131471},"_10-css规范与学成在线案例",[65,131473,131475],{"id":131474},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[77,131477,131478,131484,131490,131496],{},[80,131479,131480,131483],{},[283,131481,131482],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[80,131485,131486,131489],{},[283,131487,131488],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[80,131491,131492,131495],{},[283,131493,131494],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[80,131497,131498,131501],{},[283,131499,131500],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[114,131503,131504],{"className":126549,"code":129913,"language":126551,"meta":37,"style":37},[120,131505,131506,131510,131516,131532],{"__ignoreMap":37},[123,131507,131508],{"class":125,"line":126},[123,131509,129920],{"class":192},[123,131511,131512,131514],{"class":125,"line":45},[123,131513,51622],{"class":51311},[123,131515,15582],{"class":133},[123,131517,131518,131520,131522,131524,131526,131528,131530],{"class":125,"line":1189},[123,131519,70907],{"class":182},[123,131521,51448],{"class":133},[123,131523,351],{"class":182},[123,131525,51503],{"class":129},[123,131527,51532],{"class":182},[123,131529,129941],{"class":182},[123,131531,1300],{"class":133},[123,131533,131534],{"class":125,"line":1204},[123,131535,1574],{"class":133},[65,131537,131539],{"id":131538},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[94,131541,131543],{"id":131542},"_1021-header头部制作","10.2.1 header头部制作",[35,131545],{"style":126405,"src":131546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1141,131548,131549,131556,131563,131569,131576,131583],{},[80,131550,131551,131552,131555],{},"1号是版心盒子 ",[283,131553,131554],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[80,131557,131558,131559,131562],{},"版心盒子 里面包含 2号盒子 ",[283,131560,131561],{},"logo"," 图标",[80,131564,131565,131566,131568],{},"版心盒子 里面包含 3号盒子 ",[283,131567,53724],{}," 导航栏",[80,131570,131571,131572,131575],{},"版心盒子 里面包含 4号盒子 ",[283,131573,131574],{},"search"," 搜索框",[80,131577,131578,131579,131582],{},"版心盒子 里面包含 5号盒子 ",[283,131580,131581],{},"user"," 个人信息",[80,131584,131585,131586],{},"注意，要求里面的 ",[283,131587,131588],{},"4个子盒子 必须都浮动",[77,131590,131591],{},[80,131592,131593],{},[283,131594,131595],{},"导航栏注意点:",[14,131597,131598,131599,131602,131603],{},"实际开发中， ",[283,131600,131601],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[283,131604,131605],{},"用 li 包含链接(li+a)的做法",[1141,131607,131608,131611],{},[80,131609,131610],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[80,131612,131613],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,131615,9035],{},[14,131617,131618],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,131620,131621],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,131623,131624],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[77,131626,131627],{"start":45},[80,131628,131629],{},[283,131630,131631],{},"4号盒子search的细节：",[1141,131633,131634,131637,131640],{},[80,131635,131636],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[80,131638,131639],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[80,131641,131642,131645],{},[120,131643,131644],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[94,131647,131649],{"id":131648},"_1022-banner制作","10.2.2 banner制作",[35,131651],{"style":126405,"src":131652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1141,131654,131655,131662,131668,131675],{},[80,131656,131657,131658,131661],{},"1号盒子是通栏的大盒子 ",[283,131659,131660],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[80,131663,131664,131665,131667],{},"2号盒子是版心 ",[283,131666,929],{}," ， 要水平居中对齐",[80,131669,131670,131671,131674],{},"3号盒子版心内，左对齐 ",[283,131672,131673],{},"subnav"," 侧导航栏",[80,131676,131677,131678,131681],{},"4号盒子版心内，右对齐 ",[283,131679,131680],{},"course"," 课程",[94,131683,131685],{"id":131684},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[35,131687],{"style":126405,"src":131688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1141,131690,131691,131694,131697,131700],{},[80,131692,131693],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[80,131695,131696],{},"1号盒子是标题 H3 左侧浮动",[80,131698,131699],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[80,131701,131702],{},"3号盒子 右浮动 mod 修改",[94,131704,131706],{"id":131705},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[35,131708],{"style":126405,"src":131709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1141,131711,131712,131718,131725,131732,131735],{},[80,131713,131714,131715,131717],{},"1号盒子为最大的盒子 ",[283,131716,53725],{}," 版心水平居中对齐",[80,131719,131720,131721,131724],{},"2号盒子为上面部分 ",[283,131722,131723],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[80,131726,131727,131728,131731],{},"3号盒子为底下部分 ",[283,131729,131730],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[80,131733,131734],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[80,131736,131737],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[94,131739,131741],{"id":131740},"_1025-底部模块制作","10.2.5 底部模块制作",[35,131743],{"style":126405,"src":131744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1141,131746,131747,131754,131757,131764],{},[80,131748,131749,131750,131753],{},"1号盒子通栏大盒子 底部 ",[283,131751,131752],{},"footer"," 给高度 底色是白色",[80,131755,131756],{},"2号盒子版心水平居中",[80,131758,131759,131760,131763],{},"3号盒子版权 ",[283,131761,131762],{},"copyright"," 左对齐",[80,131765,131766,131767,131770],{},"4号盒子 链接组 ",[283,131768,131769],{},"links"," 右对齐",[94,131772,131774],{"id":131773},"_1026-代码模块","10.2.6 代码模块",[77,131776,131777],{},[80,131778,131779],{},"html部分",[114,131781,131783],{"className":127296,"code":131782,"language":127298,"meta":37,"style":37},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[120,131784,131785],{"__ignoreMap":37},[123,131786,131787,131789,131791,131793,131795,131798,131801,131803,131806,131809,131811],{"class":125,"line":126},[123,131788,1044],{"class":133},[123,131790,372],{"class":51311},[123,131792,61068],{"class":1972},[123,131794,179],{"class":133},[123,131796,131797],{"class":238},"\"https:\u002F\u002Fexample.com\"",[123,131799,131800],{"class":1972}," target",[123,131802,179],{"class":133},[123,131804,131805],{"class":238},"\"_blank\"",[123,131807,131808],{"class":133},">链接文字\u003C\u002F",[123,131810,372],{"class":51311},[123,131812,51318],{"class":133},[77,131814,131815],{"start":45},[80,131816,131817],{},"css部分",[114,131819,131820],{"className":127296,"code":131782,"language":127298,"meta":37,"style":37},[120,131821,131822],{"__ignoreMap":37},[123,131823,131824,131826,131828,131830,131832,131834,131836,131838,131840,131842,131844],{"class":125,"line":126},[123,131825,1044],{"class":133},[123,131827,372],{"class":51311},[123,131829,61068],{"class":1972},[123,131831,179],{"class":133},[123,131833,131797],{"class":238},[123,131835,131800],{"class":1972},[123,131837,179],{"class":133},[123,131839,131805],{"class":238},[123,131841,131808],{"class":133},[123,131843,372],{"class":51311},[123,131845,51318],{"class":133},[94,131847,131849],{"id":131848},"_1027-收获","10.2.7 收获",[77,131851,131852,131855,131858,131861,131864],{},[80,131853,131854],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[80,131856,131857],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[80,131859,131860],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[80,131862,131863],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[80,131865,131866],{},"遗忘代码",[114,131868,131870],{"className":126549,"code":131869,"language":126551,"meta":37,"style":37},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[120,131871,131872,131894,131899,131909],{"__ignoreMap":37},[123,131873,131874,131876,131878,131880,131882,131884,131886,131888,131890,131892],{"class":125,"line":126},[123,131875,51622],{"class":51311},[123,131877,12445],{"class":133},[123,131879,14],{"class":51311},[123,131881,12445],{"class":133},[123,131883,10],{"class":51311},[123,131885,12445],{"class":133},[123,131887,1141],{"class":51311},[123,131889,12445],{"class":133},[123,131891,80],{"class":51311},[123,131893,15582],{"class":133},[123,131895,131896],{"class":125,"line":45},[123,131897,131898],{"class":192},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[123,131900,131901,131903,131905,131907],{"class":125,"line":1189},[123,131902,128165],{"class":182},[123,131904,51448],{"class":133},[123,131906,60880],{"class":182},[123,131908,1300],{"class":133},[123,131910,131911],{"class":125,"line":1204},[123,131912,1574],{"class":133},[77,131914,131915],{"start":1224},[80,131916,131917],{},"html引css的程序",[114,131919,131920],{"className":126549,"code":131869,"language":126551,"meta":37,"style":37},[120,131921,131922,131944,131948,131958],{"__ignoreMap":37},[123,131923,131924,131926,131928,131930,131932,131934,131936,131938,131940,131942],{"class":125,"line":126},[123,131925,51622],{"class":51311},[123,131927,12445],{"class":133},[123,131929,14],{"class":51311},[123,131931,12445],{"class":133},[123,131933,10],{"class":51311},[123,131935,12445],{"class":133},[123,131937,1141],{"class":51311},[123,131939,12445],{"class":133},[123,131941,80],{"class":51311},[123,131943,15582],{"class":133},[123,131945,131946],{"class":125,"line":45},[123,131947,131898],{"class":192},[123,131949,131950,131952,131954,131956],{"class":125,"line":1189},[123,131951,128165],{"class":182},[123,131953,51448],{"class":133},[123,131955,60880],{"class":182},[123,131957,1300],{"class":133},[123,131959,131960],{"class":125,"line":1204},[123,131961,1574],{"class":133},[77,131963,131964,131967,131970,131973,131976],{"start":1230},[80,131965,131966],{},"浮动的盒子不会有外边距合并问题",[80,131968,131969],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[80,131971,131972],{},"ctrl+g快速定位行；shift+alt多个光标",[80,131974,131975],{},"学习上方各个模块的选择器起名方法，以后就这样用",[80,131977,131978],{},"在写选择器时尽量写全一些，例如",[114,131980,131982],{"className":126549,"code":131981,"language":126551,"meta":37,"style":37},"\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",[120,131983,131984,131989,132005,132010,132025,132030,132045,132050,132065,132070],{"__ignoreMap":37},[123,131985,131986],{"class":125,"line":126},[123,131987,131988],{"class":192},"\u002F* 静态定位（默认） *\u002F\n",[123,131990,131991,131994,131996,131998,132000,132003],{"class":125,"line":45},[123,131992,131993],{"class":1972},".static",[123,131995,79818],{"class":133},[123,131997,128909],{"class":182},[123,131999,51448],{"class":133},[123,132001,132002],{"class":182},"static",[123,132004,129479],{"class":133},[123,132006,132007],{"class":125,"line":1189},[123,132008,132009],{"class":192},"\u002F* 相对定位 *\u002F\n",[123,132011,132012,132015,132017,132019,132021,132023],{"class":125,"line":1204},[123,132013,132014],{"class":1972},".relative",[123,132016,79818],{"class":133},[123,132018,128909],{"class":182},[123,132020,51448],{"class":133},[123,132022,54775],{"class":182},[123,132024,129479],{"class":133},[123,132026,132027],{"class":125,"line":1210},[123,132028,132029],{"class":192},"\u002F* 绝对定位 *\u002F\n",[123,132031,132032,132035,132037,132039,132041,132043],{"class":125,"line":1224},[123,132033,132034],{"class":1972},".absolute",[123,132036,79818],{"class":133},[123,132038,128909],{"class":182},[123,132040,51448],{"class":133},[123,132042,54842],{"class":182},[123,132044,129479],{"class":133},[123,132046,132047],{"class":125,"line":1230},[123,132048,132049],{"class":192},"\u002F* 固定定位 *\u002F\n",[123,132051,132052,132055,132057,132059,132061,132063],{"class":125,"line":1321},[123,132053,132054],{"class":1972},".fixed",[123,132056,79818],{"class":133},[123,132058,128909],{"class":182},[123,132060,51448],{"class":133},[123,132062,86244],{"class":182},[123,132064,129479],{"class":133},[123,132066,132067],{"class":125,"line":1327},[123,132068,132069],{"class":192},"\u002F* 粘性定位 *\u002F\n",[123,132071,132072,132075,132077,132079,132081,132084],{"class":125,"line":1339},[123,132073,132074],{"class":1972},".sticky",[123,132076,79818],{"class":133},[123,132078,128909],{"class":182},[123,132080,51448],{"class":133},[123,132082,132083],{"class":182},"sticky",[123,132085,129479],{"class":133},[77,132087,132088,132091],{"start":1626},[80,132089,132090],{},"一定要用好注释",[80,132092,132093],{},"浮动的盒子不会有外边距合并的问题",[5136,132095,131437],{},{"title":37,"searchDepth":45,"depth":45,"links":132097},[132098,132099],{"id":131474,"depth":45,"text":131475},{"id":131538,"depth":45,"text":131539,"children":132100},[132101,132102,132103,132104,132105,132106,132107],{"id":131542,"depth":1189,"text":131543},{"id":131648,"depth":1189,"text":131649},{"id":131684,"depth":1189,"text":131685},{"id":131705,"depth":1189,"text":131706},{"id":131740,"depth":1189,"text":131741},{"id":131773,"depth":1189,"text":131774},{"id":131848,"depth":1189,"text":131849},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131466,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132114,"title":132115,"body":132116,"description":47,"extension":48,"meta":133602,"navigation":50,"path":133603,"seo":133604,"stem":133605,"__hash__":133606},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132117,"toc":133594},[132118,132121,132125,132129,132140,132144,132161,132205,132238,132241,132258,132261,132264,132308,132312,132316,132319,132322,132326,132329,132340,132403,132444,132447,132462,132516,132524,132527,132538,132592,132618,132621,132634,132688,132720,132774,132797,132851,132854,132857,132864,132918,132939,132993,132996,132999,133084,133092,133149,133172,133176,133179,133197,133201,133220,133274,133312,133316,133319,133322,133344,133348,133356,133359,133364,133375,133378,133382,133396,133440,133443,133447,133450,133455,133481,133486,133563,133566,133570,133573,133576,133579,133582,133585,133588,133591],[10,132119,132115],{"id":132120},"_11-传统布局与定位体系",[65,132122,132124],{"id":132123},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[94,132126,132128],{"id":132127},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1141,132130,132131,132134,132137],{},[80,132132,132133],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[80,132135,132136],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[80,132138,132139],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[94,132141,132143],{"id":132142},"_1112-浮动","11.1.2 浮动",[1141,132145,132146,132149,132152,132155,132158],{},[80,132147,132148],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[80,132150,132151],{},"浮动可以改变元素标签默认的排列方式",[80,132153,132154],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[80,132156,132157],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[80,132159,132160],{},"在使用行内块转换时盒子之间是有空隙的",[114,132162,132163],{"className":126549,"code":131015,"language":126551,"meta":37,"style":37},[120,132164,132165,132171,132181,132185,132191,132201],{"__ignoreMap":37},[123,132166,132167,132169],{"class":125,"line":126},[123,132168,131022],{"class":1972},[123,132170,15582],{"class":133},[123,132172,132173,132175,132177,132179],{"class":125,"line":45},[123,132174,131029],{"class":182},[123,132176,51448],{"class":133},[123,132178,23746],{"class":182},[123,132180,1300],{"class":133},[123,132182,132183],{"class":125,"line":1189},[123,132184,1574],{"class":133},[123,132186,132187,132189],{"class":125,"line":1204},[123,132188,131044],{"class":1972},[123,132190,15582],{"class":133},[123,132192,132193,132195,132197,132199],{"class":125,"line":1210},[123,132194,131029],{"class":182},[123,132196,51448],{"class":133},[123,132198,72533],{"class":182},[123,132200,1300],{"class":133},[123,132202,132203],{"class":125,"line":1224},[123,132204,1574],{"class":133},[271,132206,132207,132215],{},[274,132208,132209],{},[277,132210,132211,132213],{},[280,132212,127013],{"align":23746},[280,132214,27500],{"align":23746},[318,132216,132217,132224,132231],{},[277,132218,132219,132221],{},[323,132220,54748],{"align":23746},[323,132222,132223],{"align":23746},"元素不浮动（默认值）",[277,132225,132226,132228],{},[323,132227,23746],{"align":23746},[323,132229,132230],{"align":23746},"元素向左浮动",[277,132232,132233,132235],{},[323,132234,72533],{"align":23746},[323,132236,132237],{"align":23746},"元素向右浮动",[14,132239,132240],{},"浮动重点：",[1141,132242,132243,132246,132249,132252,132255],{},[80,132244,132245],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[80,132247,132248],{},"浮动的元素会一行内显示并且元素顶部对齐",[80,132250,132251],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[80,132253,132254],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[80,132256,132257],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132259,132260],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132262,132263],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[114,132265,132266],{"className":126549,"code":131015,"language":126551,"meta":37,"style":37},[120,132267,132268,132274,132284,132288,132294,132304],{"__ignoreMap":37},[123,132269,132270,132272],{"class":125,"line":126},[123,132271,131022],{"class":1972},[123,132273,15582],{"class":133},[123,132275,132276,132278,132280,132282],{"class":125,"line":45},[123,132277,131029],{"class":182},[123,132279,51448],{"class":133},[123,132281,23746],{"class":182},[123,132283,1300],{"class":133},[123,132285,132286],{"class":125,"line":1189},[123,132287,1574],{"class":133},[123,132289,132290,132292],{"class":125,"line":1204},[123,132291,131044],{"class":1972},[123,132293,15582],{"class":133},[123,132295,132296,132298,132300,132302],{"class":125,"line":1210},[123,132297,131029],{"class":182},[123,132299,51448],{"class":133},[123,132301,72533],{"class":182},[123,132303,1300],{"class":133},[123,132305,132306],{"class":125,"line":1224},[123,132307,1574],{"class":133},[94,132309,132311],{"id":132310},"_1113-定位","11.1.3 定位",[22008,132313,132315],{"id":132314},"_11131-使用场景","11.1.3.1 使用场景",[14,132317,132318],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132320,132321],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[22008,132323,132325],{"id":132324},"_11132-定位组成","11.1.3.2 定位组成",[14,132327,132328],{},"定位 = 定位模式 + 边偏移",[77,132330,132331],{},[80,132332,132333,132336,132337],{},[283,132334,132335],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[283,132338,132339],{},"定位模式",[114,132341,132343],{"className":126549,"code":132342,"language":126551,"meta":37,"style":37},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[120,132344,132345,132351,132365,132382,132399],{"__ignoreMap":37},[123,132346,132347,132349],{"class":125,"line":126},[123,132348,130397],{"class":1972},[123,132350,15582],{"class":133},[123,132352,132353,132356,132358,132360,132362],{"class":125,"line":45},[123,132354,132355],{"class":182},"  position",[123,132357,51448],{"class":133},[123,132359,54775],{"class":182},[123,132361,130412],{"class":133},[123,132363,132364],{"class":192},"\u002F* 定位模式 *\u002F\n",[123,132366,132367,132370,132372,132374,132376,132379],{"class":125,"line":1189},[123,132368,132369],{"class":182},"  top",[123,132371,51448],{"class":133},[123,132373,580],{"class":182},[123,132375,51503],{"class":129},[123,132377,132378],{"class":133},";           ",[123,132380,132381],{"class":192},"\u002F* 边偏移：上 *\u002F\n",[123,132383,132384,132387,132389,132391,132393,132396],{"class":125,"line":1204},[123,132385,132386],{"class":182},"  left",[123,132388,51448],{"class":133},[123,132390,834],{"class":182},[123,132392,51503],{"class":129},[123,132394,132395],{"class":133},";          ",[123,132397,132398],{"class":192},"\u002F* 边偏移：左 *\u002F\n",[123,132400,132401],{"class":125,"line":1210},[123,132402,1574],{"class":133},[271,132404,132405,132414],{},[274,132406,132407],{},[277,132408,132409,132411],{},[280,132410,286],{"align":23746},[280,132412,132413],{"align":23746},"语义",[318,132415,132416,132423,132430,132437],{},[277,132417,132418,132420],{},[323,132419,132002],{"align":23746},[323,132421,132422],{"align":23746},"静态定位",[277,132424,132425,132427],{},[323,132426,54775],{"align":23746},[323,132428,132429],{"align":23746},"相对定位",[277,132431,132432,132434],{},[323,132433,54842],{"align":23746},[323,132435,132436],{"align":23746},"绝对定位",[277,132438,132439,132441],{},[323,132440,86244],{"align":23746},[323,132442,132443],{"align":23746},"固定定位",[14,132445,132446],{},"（1）静态定位：",[1141,132448,132449,132460],{},[80,132450,132451,132452,132455,132456,132459],{},"静态定位是元素的 ",[283,132453,132454],{},"默认定位方式"," ， ",[283,132457,132458],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[80,132461,5191],{},[114,132463,132464],{"className":126549,"code":132342,"language":126551,"meta":37,"style":37},[120,132465,132466,132472,132484,132498,132512],{"__ignoreMap":37},[123,132467,132468,132470],{"class":125,"line":126},[123,132469,130397],{"class":1972},[123,132471,15582],{"class":133},[123,132473,132474,132476,132478,132480,132482],{"class":125,"line":45},[123,132475,132355],{"class":182},[123,132477,51448],{"class":133},[123,132479,54775],{"class":182},[123,132481,130412],{"class":133},[123,132483,132364],{"class":192},[123,132485,132486,132488,132490,132492,132494,132496],{"class":125,"line":1189},[123,132487,132369],{"class":182},[123,132489,51448],{"class":133},[123,132491,580],{"class":182},[123,132493,51503],{"class":129},[123,132495,132378],{"class":133},[123,132497,132381],{"class":192},[123,132499,132500,132502,132504,132506,132508,132510],{"class":125,"line":1204},[123,132501,132386],{"class":182},[123,132503,51448],{"class":133},[123,132505,834],{"class":182},[123,132507,51503],{"class":129},[123,132509,132395],{"class":133},[123,132511,132398],{"class":192},[123,132513,132514],{"class":125,"line":1210},[123,132515,1574],{"class":133},[1141,132517,132518,132521],{},[80,132519,132520],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[80,132522,132523],{},"静态定位在布局时我们几乎不用的",[14,132525,132526],{},"（2）相对定位",[1141,132528,132529,132536],{},[80,132530,132531,132532,132535],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[283,132533,132534],{},"原来的位置"," 来说的（自恋型）",[80,132537,5191],{},[114,132539,132540],{"className":126549,"code":132342,"language":126551,"meta":37,"style":37},[120,132541,132542,132548,132560,132574,132588],{"__ignoreMap":37},[123,132543,132544,132546],{"class":125,"line":126},[123,132545,130397],{"class":1972},[123,132547,15582],{"class":133},[123,132549,132550,132552,132554,132556,132558],{"class":125,"line":45},[123,132551,132355],{"class":182},[123,132553,51448],{"class":133},[123,132555,54775],{"class":182},[123,132557,130412],{"class":133},[123,132559,132364],{"class":192},[123,132561,132562,132564,132566,132568,132570,132572],{"class":125,"line":1189},[123,132563,132369],{"class":182},[123,132565,51448],{"class":133},[123,132567,580],{"class":182},[123,132569,51503],{"class":129},[123,132571,132378],{"class":133},[123,132573,132381],{"class":192},[123,132575,132576,132578,132580,132582,132584,132586],{"class":125,"line":1204},[123,132577,132386],{"class":182},[123,132579,51448],{"class":133},[123,132581,834],{"class":182},[123,132583,51503],{"class":129},[123,132585,132395],{"class":133},[123,132587,132398],{"class":192},[123,132589,132590],{"class":125,"line":1210},[123,132591,1574],{"class":133},[1141,132593,132594],{},[80,132595,132596,132597,132599,132600,132602,132603,132606,132607,132610,132611,132613,132614,132617],{},"相对定位的特点：",[53727,132598],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53727,132601],{},"  ② ",[283,132604,132605],{},"原来"," 在标准流的 ",[283,132608,132609],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53727,132612],{},"  ③因此， ",[283,132615,132616],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,132619,132620],{},"（3）绝对定位",[1141,132622,132623,132632],{},[80,132624,132625,132627,132628,132631],{},[283,132626,132436],{}," 是元素在移动位置的时候，是相对于它 ",[283,132629,132630],{},"祖先元素"," 来说的（拼爹型）",[80,132633,5191],{},[114,132635,132636],{"className":126549,"code":132342,"language":126551,"meta":37,"style":37},[120,132637,132638,132644,132656,132670,132684],{"__ignoreMap":37},[123,132639,132640,132642],{"class":125,"line":126},[123,132641,130397],{"class":1972},[123,132643,15582],{"class":133},[123,132645,132646,132648,132650,132652,132654],{"class":125,"line":45},[123,132647,132355],{"class":182},[123,132649,51448],{"class":133},[123,132651,54775],{"class":182},[123,132653,130412],{"class":133},[123,132655,132364],{"class":192},[123,132657,132658,132660,132662,132664,132666,132668],{"class":125,"line":1189},[123,132659,132369],{"class":182},[123,132661,51448],{"class":133},[123,132663,580],{"class":182},[123,132665,51503],{"class":129},[123,132667,132378],{"class":133},[123,132669,132381],{"class":192},[123,132671,132672,132674,132676,132678,132680,132682],{"class":125,"line":1204},[123,132673,132386],{"class":182},[123,132675,51448],{"class":133},[123,132677,834],{"class":182},[123,132679,51503],{"class":129},[123,132681,132395],{"class":133},[123,132683,132398],{"class":192},[123,132685,132686],{"class":125,"line":1210},[123,132687,1574],{"class":133},[1141,132689,132690,132705,132714,132717],{},[80,132691,132692,132693,132695,132696,132698,132699,132701,132702,132704],{},"绝对定位的特点：",[53727,132694],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53727,132697],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53727,132700],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53727,132703],{},"  (4)固定定位",[80,132706,132707,132709,132710,132713],{},[283,132708,132443],{}," 是元素 ",[283,132711,132712],{},"固定于浏览器可视区的位置"," 。（认死理型）",[80,132715,132716],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[80,132718,132719],{},"语法:",[114,132721,132722],{"className":126549,"code":132342,"language":126551,"meta":37,"style":37},[120,132723,132724,132730,132742,132756,132770],{"__ignoreMap":37},[123,132725,132726,132728],{"class":125,"line":126},[123,132727,130397],{"class":1972},[123,132729,15582],{"class":133},[123,132731,132732,132734,132736,132738,132740],{"class":125,"line":45},[123,132733,132355],{"class":182},[123,132735,51448],{"class":133},[123,132737,54775],{"class":182},[123,132739,130412],{"class":133},[123,132741,132364],{"class":192},[123,132743,132744,132746,132748,132750,132752,132754],{"class":125,"line":1189},[123,132745,132369],{"class":182},[123,132747,51448],{"class":133},[123,132749,580],{"class":182},[123,132751,51503],{"class":129},[123,132753,132378],{"class":133},[123,132755,132381],{"class":192},[123,132757,132758,132760,132762,132764,132766,132768],{"class":125,"line":1204},[123,132759,132386],{"class":182},[123,132761,51448],{"class":133},[123,132763,834],{"class":182},[123,132765,51503],{"class":129},[123,132767,132395],{"class":133},[123,132769,132398],{"class":192},[123,132771,132772],{"class":125,"line":1210},[123,132773,1574],{"class":133},[1141,132775,132776,132785],{},[80,132777,132778,132779,132781,132782,132784],{},"特点:",[53727,132780],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53727,132783],{},"  ②固定定位不再占有原先的位置,完全脱标",[80,132786,132787,132788,132790,132791,132793,132794,132796],{},"固定在版心位置的方法:",[53727,132789],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53727,132792],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53727,132795],{},"  实例：",[114,132798,132799],{"className":126549,"code":132342,"language":126551,"meta":37,"style":37},[120,132800,132801,132807,132819,132833,132847],{"__ignoreMap":37},[123,132802,132803,132805],{"class":125,"line":126},[123,132804,130397],{"class":1972},[123,132806,15582],{"class":133},[123,132808,132809,132811,132813,132815,132817],{"class":125,"line":45},[123,132810,132355],{"class":182},[123,132812,51448],{"class":133},[123,132814,54775],{"class":182},[123,132816,130412],{"class":133},[123,132818,132364],{"class":192},[123,132820,132821,132823,132825,132827,132829,132831],{"class":125,"line":1189},[123,132822,132369],{"class":182},[123,132824,51448],{"class":133},[123,132826,580],{"class":182},[123,132828,51503],{"class":129},[123,132830,132378],{"class":133},[123,132832,132381],{"class":192},[123,132834,132835,132837,132839,132841,132843,132845],{"class":125,"line":1204},[123,132836,132386],{"class":182},[123,132838,51448],{"class":133},[123,132840,834],{"class":182},[123,132842,51503],{"class":129},[123,132844,132395],{"class":133},[123,132846,132398],{"class":192},[123,132848,132849],{"class":125,"line":1210},[123,132850,1574],{"class":133},[35,132852],{"style":126405,"src":132853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,132855,132856],{},"(5)粘性定位",[1141,132858,132859,132862],{},[80,132860,132861],{},"粘性定位可以被认为是相对定位和固定定位的混合",[80,132863,5191],{},[114,132865,132866],{"className":126549,"code":132342,"language":126551,"meta":37,"style":37},[120,132867,132868,132874,132886,132900,132914],{"__ignoreMap":37},[123,132869,132870,132872],{"class":125,"line":126},[123,132871,130397],{"class":1972},[123,132873,15582],{"class":133},[123,132875,132876,132878,132880,132882,132884],{"class":125,"line":45},[123,132877,132355],{"class":182},[123,132879,51448],{"class":133},[123,132881,54775],{"class":182},[123,132883,130412],{"class":133},[123,132885,132364],{"class":192},[123,132887,132888,132890,132892,132894,132896,132898],{"class":125,"line":1189},[123,132889,132369],{"class":182},[123,132891,51448],{"class":133},[123,132893,580],{"class":182},[123,132895,51503],{"class":129},[123,132897,132378],{"class":133},[123,132899,132381],{"class":192},[123,132901,132902,132904,132906,132908,132910,132912],{"class":125,"line":1204},[123,132903,132386],{"class":182},[123,132905,51448],{"class":133},[123,132907,834],{"class":182},[123,132909,51503],{"class":129},[123,132911,132395],{"class":133},[123,132913,132398],{"class":192},[123,132915,132916],{"class":125,"line":1210},[123,132917,1574],{"class":133},[1141,132919,132920],{},[80,132921,132922,132923,132925,132926,132928,132929,132931,132932,132935,132936,132938],{},"粘性定位的特点：",[53727,132924],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53727,132927],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53727,132930],{},"  ③必须添加 top 、left、right、bottom ",[283,132933,132934],{},"其中一个"," 才有效",[53727,132937],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[114,132940,132941],{"className":126549,"code":132342,"language":126551,"meta":37,"style":37},[120,132942,132943,132949,132961,132975,132989],{"__ignoreMap":37},[123,132944,132945,132947],{"class":125,"line":126},[123,132946,130397],{"class":1972},[123,132948,15582],{"class":133},[123,132950,132951,132953,132955,132957,132959],{"class":125,"line":45},[123,132952,132355],{"class":182},[123,132954,51448],{"class":133},[123,132956,54775],{"class":182},[123,132958,130412],{"class":133},[123,132960,132364],{"class":192},[123,132962,132963,132965,132967,132969,132971,132973],{"class":125,"line":1189},[123,132964,132369],{"class":182},[123,132966,51448],{"class":133},[123,132968,580],{"class":182},[123,132970,51503],{"class":129},[123,132972,132378],{"class":133},[123,132974,132381],{"class":192},[123,132976,132977,132979,132981,132983,132985,132987],{"class":125,"line":1204},[123,132978,132386],{"class":182},[123,132980,51448],{"class":133},[123,132982,834],{"class":182},[123,132984,51503],{"class":129},[123,132986,132395],{"class":133},[123,132988,132398],{"class":192},[123,132990,132991],{"class":125,"line":1210},[123,132992,1574],{"class":133},[35,132994],{"style":126405,"src":132995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,132997,132998],{},"(6)总结",[271,133000,133001,133016],{},[274,133002,133003],{},[277,133004,133005,133007,133010,133013],{},[280,133006,132339],{"align":23746},[280,133008,133009],{"align":23746},"是否脱标",[280,133011,133012],{"align":23746},"移动位置",[280,133014,133015],{"align":23746},"是否常用",[318,133017,133018,133031,133045,133059,133072],{},[277,133019,133020,133023,133025,133028],{},[323,133021,133022],{"align":23746},"Static 静态定位",[323,133024,104675],{"align":23746},[323,133026,133027],{"align":23746},"不能使用边偏移",[323,133029,133030],{"align":23746},"很少",[277,133032,133033,133036,133039,133042],{},[323,133034,133035],{"align":23746},"Relative 相对定位",[323,133037,133038],{"align":23746},"否(占有位置)",[323,133040,133041],{"align":23746},"相对于自身位置移动",[323,133043,133044],{"align":23746},"基本单独使用",[277,133046,133047,133050,133053,133056],{},[323,133048,133049],{"align":23746},"Absolute 绝对定位",[323,133051,133052],{"align":23746},"是(不占有位置)",[323,133054,133055],{"align":23746},"带有定位的父级",[323,133057,133058],{"align":23746},"要和定位父级元素搭配使用",[277,133060,133061,133064,133066,133069],{},[323,133062,133063],{"align":23746},"Fixed 固定定位",[323,133065,133052],{"align":23746},[323,133067,133068],{"align":23746},"浏览器可视区",[323,133070,133071],{"align":23746},"单独使用,不需要父级",[277,133073,133074,133077,133079,133081],{},[323,133075,133076],{"align":23746},"Sticky 粘性定位",[323,133078,133038],{"align":23746},[323,133080,133068],{"align":23746},[323,133082,133083],{"align":23746},"当前阶段少",[77,133085,133086],{"start":45},[80,133087,133088,133091],{},[283,133089,133090],{},"边偏移"," 则决定了该元素的最终位置",[271,133093,133094,133105],{},[274,133095,133096],{},[277,133097,133098,133101,133103],{},[280,133099,133100],{"align":23746},"边偏移属性",[280,133102,27503],{"align":23746},[280,133104,27500],{"align":23746},[318,133106,133107,133118,133129,133139],{},[277,133108,133109,133112,133115],{},[323,133110,133111],{"align":23746},"top",[323,133113,133114],{"align":23746},"top: 80px;",[323,133116,133117],{"align":23746},"顶端偏移量，定义元素相对于父元素上边线的距离",[277,133119,133120,133123,133126],{},[323,133121,133122],{"align":23746},"bottom",[323,133124,133125],{"align":23746},"bottom: 80px ;",[323,133127,133128],{"align":23746},"底部偏移量，定义元素相对于其父元素下边线的距离",[277,133130,133131,133133,133136],{},[323,133132,23746],{"align":23746},[323,133134,133135],{"align":23746},"left: 80px ;",[323,133137,133138],{"align":23746},"左侧偏移量，定义元素相对于其父元素左边线的距离",[277,133140,133141,133143,133146],{},[323,133142,72533],{"align":23746},[323,133144,133145],{"align":23746},"right: 80px ;",[323,133147,133148],{"align":23746},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1141,133150,133151],{},[80,133152,9035,133153,133155,133156,133158,133159,133161,133162,133165,133166,133168,133169,133171],{},[53727,133154],{},"  ① ",[283,133157,133090],{}," 需要和 ",[283,133160,132339],{}," 联合使用， ",[283,133163,133164],{},"单独使用无效"," ；",[53727,133167],{},"  ②top和bottom不要同时使用",[53727,133170],{},"  ③left和right不要同时使用",[22008,133173,133175],{"id":133174},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133177,133178],{},"子级是绝对定位的话，父级要用相对定位",[1141,133180,133181,133184,133187,133190],{},[80,133182,133183],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[80,133185,133186],{},"父盒子需要加定位限制子盒子在父盒子内显示",[80,133188,133189],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[80,133191,133192,133193,133196],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[283,133194,133195],{},"子绝父绝"," 也会遇到",[22008,133198,133200],{"id":133199},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1141,133202,133203,133218],{},[80,133204,133205,133206,133209,133210,133213,133214,133217],{},"在使用 ",[283,133207,133208],{},"定位"," 布局时，可能会 ",[283,133211,133212],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[283,133215,133216],{},"z-index"," 来控制盒子的前后次序 (z轴)",[80,133219,5191],{},[114,133221,133222],{"className":126549,"code":132342,"language":126551,"meta":37,"style":37},[120,133223,133224,133230,133242,133256,133270],{"__ignoreMap":37},[123,133225,133226,133228],{"class":125,"line":126},[123,133227,130397],{"class":1972},[123,133229,15582],{"class":133},[123,133231,133232,133234,133236,133238,133240],{"class":125,"line":45},[123,133233,132355],{"class":182},[123,133235,51448],{"class":133},[123,133237,54775],{"class":182},[123,133239,130412],{"class":133},[123,133241,132364],{"class":192},[123,133243,133244,133246,133248,133250,133252,133254],{"class":125,"line":1189},[123,133245,132369],{"class":182},[123,133247,51448],{"class":133},[123,133249,580],{"class":182},[123,133251,51503],{"class":129},[123,133253,132378],{"class":133},[123,133255,132381],{"class":192},[123,133257,133258,133260,133262,133264,133266,133268],{"class":125,"line":1204},[123,133259,132386],{"class":182},[123,133261,51448],{"class":133},[123,133263,834],{"class":182},[123,133265,51503],{"class":129},[123,133267,132395],{"class":133},[123,133269,132398],{"class":192},[123,133271,133272],{"class":125,"line":1210},[123,133273,1574],{"class":133},[1141,133275,133276],{},[80,133277,133278,133279,133155,133281,133283,133284,127712,133287,82550,133290,133292,133293,133295,133296,133299,133300,133165,133303,133305,133306,133309,133311],{},"z-index的特性",[53727,133280],{},[283,133282,127013],{}," ： ",[283,133285,133286],{},"正整数",[283,133288,133289],{},"负整数",[283,133291,325],{}," ，默认值是 0，数值越大，盒子越靠上；",[53727,133294],{},"  ②如果 ",[283,133297,133298],{},"属性值相同"," ，则按照书写顺序， ",[283,133301,133302],{},"后来居上",[53727,133304],{},"  ③数字后面 ",[283,133307,133308],{},"不能加单位",[53727,133310],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[22008,133313,133315],{"id":133314},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133317,133318],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133320,133321],{},"方法:",[1141,133323,133324,133334],{},[80,133325,133326,133327,133330,133331],{},"left: 50%; 让 ",[283,133328,133329],{},"盒子的左侧"," 移动到 ",[283,133332,133333],{},"父级元素的水平中心位置",[80,133335,133336,133337,133340,133341],{},"margin-left: -100px; 让盒子 ",[283,133338,133339],{},"向左"," 移动 ",[283,133342,133343],{},"自身宽度的一半",[22008,133345,133347],{"id":133346},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[77,133349,133350,133353],{},[80,133351,133352],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[80,133354,133355],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133357,133358],{},"也就是说绝对定位和固定定位和浮动类似",[77,133360,133361],{"start":1189},[80,133362,133363],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1141,133365,133366,133369,133372],{},[80,133367,133368],{},"可以用inline-block 转换为行内块",[80,133370,133371],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[80,133373,133374],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133376,133377],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[22008,133379,133381],{"id":133380},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[77,133383,133384,133387,133390,133393],{},[80,133385,133386],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[80,133388,133389],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[80,133391,133392],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[80,133394,133395],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[114,133397,133398],{"className":126549,"code":131015,"language":126551,"meta":37,"style":37},[120,133399,133400,133406,133416,133420,133426,133436],{"__ignoreMap":37},[123,133401,133402,133404],{"class":125,"line":126},[123,133403,131022],{"class":1972},[123,133405,15582],{"class":133},[123,133407,133408,133410,133412,133414],{"class":125,"line":45},[123,133409,131029],{"class":182},[123,133411,51448],{"class":133},[123,133413,23746],{"class":182},[123,133415,1300],{"class":133},[123,133417,133418],{"class":125,"line":1189},[123,133419,1574],{"class":133},[123,133421,133422,133424],{"class":125,"line":1204},[123,133423,131044],{"class":1972},[123,133425,15582],{"class":133},[123,133427,133428,133430,133432,133434],{"class":125,"line":1210},[123,133429,131029],{"class":182},[123,133431,51448],{"class":133},[123,133433,72533],{"class":182},[123,133435,1300],{"class":133},[123,133437,133438],{"class":125,"line":1224},[123,133439,1574],{"class":133},[35,133441],{"style":126405,"src":133442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[22008,133444,133446],{"id":133445},"_11138-轮播图","11.1.3.8 轮播图",[35,133448],{"style":126405,"src":133449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[77,133451,133452],{},[80,133453,133454],{},"制作顺序:",[1141,133456,133457,133460,133463,133472],{},[80,133458,133459],{},"大盒子我们类名为： tb-promo 淘宝广告",[80,133461,133462],{},"里面先放一张图片",[80,133464,133465,133466,133468,133469,133471],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53727,133467],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53727,133470],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[80,133473,133474,133475,133477,133478,133480],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53727,133476],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53727,133479],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[77,133482,133483],{"start":45},[80,133484,133485],{},"代码模块",[114,133487,133489],{"className":126549,"code":133488,"language":126551,"meta":37,"style":37},"\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",[120,133490,133491,133496,133503,133513,133523,133533,133537,133542,133549,133559],{"__ignoreMap":37},[123,133492,133493],{"class":125,"line":126},[123,133494,133495],{"class":192},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[123,133497,133498,133501],{"class":125,"line":45},[123,133499,133500],{"class":1972},".son",[123,133502,15582],{"class":133},[123,133504,133505,133507,133509,133511],{"class":125,"line":1189},[123,133506,132355],{"class":182},[123,133508,51448],{"class":133},[123,133510,54842],{"class":182},[123,133512,1300],{"class":133},[123,133514,133515,133517,133519,133521],{"class":125,"line":1204},[123,133516,132369],{"class":182},[123,133518,51448],{"class":133},[123,133520,325],{"class":182},[123,133522,1300],{"class":133},[123,133524,133525,133527,133529,133531],{"class":125,"line":1210},[123,133526,132386],{"class":182},[123,133528,51448],{"class":133},[123,133530,325],{"class":182},[123,133532,1300],{"class":133},[123,133534,133535],{"class":125,"line":1224},[123,133536,1574],{"class":133},[123,133538,133539],{"class":125,"line":1230},[123,133540,133541],{"class":192},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[123,133543,133544,133547],{"class":125,"line":1321},[123,133545,133546],{"class":1972},".father",[123,133548,15582],{"class":133},[123,133550,133551,133553,133555,133557],{"class":125,"line":1327},[123,133552,132355],{"class":182},[123,133554,51448],{"class":133},[123,133556,54775],{"class":182},[123,133558,1300],{"class":133},[123,133560,133561],{"class":125,"line":1339},[123,133562,1574],{"class":133},[14,133564,133565],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[94,133567,133569],{"id":133568},"_1114-定位数值的移动","11.1.4 定位数值的移动",[35,133571],{"style":126405,"src":133572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133574,133575],{},"✨ 黄金口诀：",[14,133577,133578],{},"\"TOP正下负上，LEFT正右负左\"",[14,133580,133581],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133583,133584],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133586,133587],{},"✨ 简单记：",[14,133589,133590],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5136,133592,133593],{},"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":37,"searchDepth":45,"depth":45,"links":133595},[133596],{"id":132123,"depth":45,"text":132124,"children":133597},[133598,133599,133600,133601],{"id":132127,"depth":1189,"text":132128},{"id":132142,"depth":1189,"text":132143},{"id":132310,"depth":1189,"text":132311},{"id":133568,"depth":1189,"text":133569},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132115,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133608,"title":133609,"body":133610,"description":47,"extension":48,"meta":135033,"navigation":50,"path":135034,"seo":135035,"stem":135036,"__hash__":135037},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133611,"toc":135012},[133612,133615,133619,133627,133631,133636,133644,133656,133660,133665,133673,133684,133688,133693,133734,133742,133746,133749,133752,133755,133849,133852,133946,133949,134043,134046,134049,134084,134087,134090,134120,134123,134126,134129,134132,134135,134138,134141,134211,134214,134218,134222,134263,134267,134273,134276,134279,134283,134286,134289,134292,134373,134376,134379,134383,134387,134390,134393,134396,134399,134402,134408,134417,134421,134440,134444,134454,134457,134460,134463,134466,134469,134472,134475,134478,134487,134491,134500,134503,134508,134561,134566,134732,134735,134738,134743,134746,134749,134752,134755,134760,134908,134911,134914,134919,134922,134927,134961,134964,134967,134971,134974,134981,134984,134987,134990,134993,134996,134999,135002,135006,135009],[10,133613,133609],{"id":133614},"_12-显示隐藏与图形资源",[65,133616,133618],{"id":133617},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1141,133620,133621,133624],{},[80,133622,133623],{},"目的:让一个元素在页面中消失或者显示出来",[80,133625,133626],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[94,133628,133630],{"id":133629},"_1211-display-显示","12.1.1 display 显示",[77,133632,133633],{},[80,133634,133635],{},"display 设置或检索对象是否及如何显示",[1141,133637,133638,133641],{},[80,133639,133640],{},"display: none;隐藏对象",[80,133642,133643],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[77,133645,133646,133653],{"start":45},[80,133647,133648,133649,133652],{},"特点： display 隐藏元素后， ",[283,133650,133651],{},"不再占"," 有原来的位置",[80,133654,133655],{},"在js中使用非常的广泛",[94,133657,133659],{"id":133658},"_1212-visibility可见性","12.1.2 visibility可见性",[77,133661,133662],{},[80,133663,133664],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1141,133666,133667,133670],{},[80,133668,133669],{},"visibility： visible；元素可见",[80,133671,133672],{},"visibility：hidden；元素隐藏",[77,133674,133675,133678,133681],{"start":45},[80,133676,133677],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[80,133679,133680],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[80,133682,133683],{},"隐藏后继续占有原有位置",[94,133685,133687],{"id":133686},"_1213-overflow溢出","12.1.3 overflow溢出",[1141,133689,133690],{},[80,133691,133692],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[271,133694,133695,133703],{},[274,133696,133697],{},[277,133698,133699,133701],{},[280,133700,127013],{"align":23746},[280,133702,27500],{"align":23746},[318,133704,133705,133713,133720,133727],{},[277,133706,133707,133710],{},[323,133708,133709],{"align":23746},"visible",[323,133711,133712],{"align":23746},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[277,133714,133715,133717],{},[323,133716,61725],{"align":23746},[323,133718,133719],{"align":23746},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[277,133721,133722,133724],{},[323,133723,128969],{"align":23746},[323,133725,133726],{"align":23746},"不管超出内容否，总是显示滚动条",[277,133728,133729,133731],{},[323,133730,72674],{"align":23746},[323,133732,133733],{"align":23746},"超出自动显示滚动条，不超出不显示滚动条",[1141,133735,133736,133739],{},[80,133737,133738],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[80,133740,133741],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[94,133743,133745],{"id":133744},"_1214-案例收获","12.1.4 案例收获",[35,133747],{"style":126405,"src":133748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,133750,133751],{},"问题：没做出来动态效果，使用hover没实现",[14,133753,133754],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[114,133756,133757],{"className":126549,"code":131981,"language":126551,"meta":37,"style":37},[120,133758,133759,133763,133777,133781,133795,133799,133813,133817,133831,133835],{"__ignoreMap":37},[123,133760,133761],{"class":125,"line":126},[123,133762,131988],{"class":192},[123,133764,133765,133767,133769,133771,133773,133775],{"class":125,"line":45},[123,133766,131993],{"class":1972},[123,133768,79818],{"class":133},[123,133770,128909],{"class":182},[123,133772,51448],{"class":133},[123,133774,132002],{"class":182},[123,133776,129479],{"class":133},[123,133778,133779],{"class":125,"line":1189},[123,133780,132009],{"class":192},[123,133782,133783,133785,133787,133789,133791,133793],{"class":125,"line":1204},[123,133784,132014],{"class":1972},[123,133786,79818],{"class":133},[123,133788,128909],{"class":182},[123,133790,51448],{"class":133},[123,133792,54775],{"class":182},[123,133794,129479],{"class":133},[123,133796,133797],{"class":125,"line":1210},[123,133798,132029],{"class":192},[123,133800,133801,133803,133805,133807,133809,133811],{"class":125,"line":1224},[123,133802,132034],{"class":1972},[123,133804,79818],{"class":133},[123,133806,128909],{"class":182},[123,133808,51448],{"class":133},[123,133810,54842],{"class":182},[123,133812,129479],{"class":133},[123,133814,133815],{"class":125,"line":1230},[123,133816,132049],{"class":192},[123,133818,133819,133821,133823,133825,133827,133829],{"class":125,"line":1321},[123,133820,132054],{"class":1972},[123,133822,79818],{"class":133},[123,133824,128909],{"class":182},[123,133826,51448],{"class":133},[123,133828,86244],{"class":182},[123,133830,129479],{"class":133},[123,133832,133833],{"class":125,"line":1327},[123,133834,132069],{"class":192},[123,133836,133837,133839,133841,133843,133845,133847],{"class":125,"line":1339},[123,133838,132074],{"class":1972},[123,133840,79818],{"class":133},[123,133842,128909],{"class":182},[123,133844,51448],{"class":133},[123,133846,132083],{"class":182},[123,133848,129479],{"class":133},[14,133850,133851],{},"完整代码：",[114,133853,133854],{"className":126549,"code":131981,"language":126551,"meta":37,"style":37},[120,133855,133856,133860,133874,133878,133892,133896,133910,133914,133928,133932],{"__ignoreMap":37},[123,133857,133858],{"class":125,"line":126},[123,133859,131988],{"class":192},[123,133861,133862,133864,133866,133868,133870,133872],{"class":125,"line":45},[123,133863,131993],{"class":1972},[123,133865,79818],{"class":133},[123,133867,128909],{"class":182},[123,133869,51448],{"class":133},[123,133871,132002],{"class":182},[123,133873,129479],{"class":133},[123,133875,133876],{"class":125,"line":1189},[123,133877,132009],{"class":192},[123,133879,133880,133882,133884,133886,133888,133890],{"class":125,"line":1204},[123,133881,132014],{"class":1972},[123,133883,79818],{"class":133},[123,133885,128909],{"class":182},[123,133887,51448],{"class":133},[123,133889,54775],{"class":182},[123,133891,129479],{"class":133},[123,133893,133894],{"class":125,"line":1210},[123,133895,132029],{"class":192},[123,133897,133898,133900,133902,133904,133906,133908],{"class":125,"line":1224},[123,133899,132034],{"class":1972},[123,133901,79818],{"class":133},[123,133903,128909],{"class":182},[123,133905,51448],{"class":133},[123,133907,54842],{"class":182},[123,133909,129479],{"class":133},[123,133911,133912],{"class":125,"line":1230},[123,133913,132049],{"class":192},[123,133915,133916,133918,133920,133922,133924,133926],{"class":125,"line":1321},[123,133917,132054],{"class":1972},[123,133919,79818],{"class":133},[123,133921,128909],{"class":182},[123,133923,51448],{"class":133},[123,133925,86244],{"class":182},[123,133927,129479],{"class":133},[123,133929,133930],{"class":125,"line":1327},[123,133931,132069],{"class":192},[123,133933,133934,133936,133938,133940,133942,133944],{"class":125,"line":1339},[123,133935,132074],{"class":1972},[123,133937,79818],{"class":133},[123,133939,128909],{"class":182},[123,133941,51448],{"class":133},[123,133943,132083],{"class":182},[123,133945,129479],{"class":133},[14,133947,133948],{},"分布思路重点详解：",[114,133950,133951],{"className":126549,"code":131981,"language":126551,"meta":37,"style":37},[120,133952,133953,133957,133971,133975,133989,133993,134007,134011,134025,134029],{"__ignoreMap":37},[123,133954,133955],{"class":125,"line":126},[123,133956,131988],{"class":192},[123,133958,133959,133961,133963,133965,133967,133969],{"class":125,"line":45},[123,133960,131993],{"class":1972},[123,133962,79818],{"class":133},[123,133964,128909],{"class":182},[123,133966,51448],{"class":133},[123,133968,132002],{"class":182},[123,133970,129479],{"class":133},[123,133972,133973],{"class":125,"line":1189},[123,133974,132009],{"class":192},[123,133976,133977,133979,133981,133983,133985,133987],{"class":125,"line":1204},[123,133978,132014],{"class":1972},[123,133980,79818],{"class":133},[123,133982,128909],{"class":182},[123,133984,51448],{"class":133},[123,133986,54775],{"class":182},[123,133988,129479],{"class":133},[123,133990,133991],{"class":125,"line":1210},[123,133992,132029],{"class":192},[123,133994,133995,133997,133999,134001,134003,134005],{"class":125,"line":1224},[123,133996,132034],{"class":1972},[123,133998,79818],{"class":133},[123,134000,128909],{"class":182},[123,134002,51448],{"class":133},[123,134004,54842],{"class":182},[123,134006,129479],{"class":133},[123,134008,134009],{"class":125,"line":1230},[123,134010,132049],{"class":192},[123,134012,134013,134015,134017,134019,134021,134023],{"class":125,"line":1321},[123,134014,132054],{"class":1972},[123,134016,79818],{"class":133},[123,134018,128909],{"class":182},[123,134020,51448],{"class":133},[123,134022,86244],{"class":182},[123,134024,129479],{"class":133},[123,134026,134027],{"class":125,"line":1327},[123,134028,132069],{"class":192},[123,134030,134031,134033,134035,134037,134039,134041],{"class":125,"line":1339},[123,134032,132074],{"class":1972},[123,134034,79818],{"class":133},[123,134036,128909],{"class":182},[123,134038,51448],{"class":133},[123,134040,132083],{"class":182},[123,134042,129479],{"class":133},[35,134044],{"style":126405,"src":134045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134047,134048],{},"图片太大，盒子太小，此时需要修改图片的大小",[114,134050,134052],{"className":127296,"code":134051,"language":127298,"meta":37,"style":37},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[120,134053,134054],{"__ignoreMap":37},[123,134055,134056,134058,134060,134062,134064,134067,134069,134071,134074,134077,134079,134082],{"class":125,"line":126},[123,134057,1044],{"class":133},[123,134059,35],{"class":51311},[123,134061,55250],{"class":1972},[123,134063,179],{"class":133},[123,134065,134066],{"class":238},"\"images\u002Fpic.jpg\"",[123,134068,55258],{"class":1972},[123,134070,179],{"class":133},[123,134072,134073],{"class":238},"\"描述文字\"",[123,134075,134076],{"class":1972}," title",[123,134078,179],{"class":133},[123,134080,134081],{"class":238},"\"悬停提示\"",[123,134083,51318],{"class":133},[35,134085],{"style":126405,"src":134086},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134088,134089],{},"制造遮罩层",[114,134091,134092],{"className":127296,"code":134051,"language":127298,"meta":37,"style":37},[120,134093,134094],{"__ignoreMap":37},[123,134095,134096,134098,134100,134102,134104,134106,134108,134110,134112,134114,134116,134118],{"class":125,"line":126},[123,134097,1044],{"class":133},[123,134099,35],{"class":51311},[123,134101,55250],{"class":1972},[123,134103,179],{"class":133},[123,134105,134066],{"class":238},[123,134107,55258],{"class":1972},[123,134109,179],{"class":133},[123,134111,134073],{"class":238},[123,134113,134076],{"class":1972},[123,134115,179],{"class":133},[123,134117,134081],{"class":238},[123,134119,51318],{"class":133},[14,134121,134122],{},"此时是这样的为标准流",[35,134124],{"style":126405,"src":134125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134127,134128],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134130,134131],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134133,134134],{},"让他在中间，用center(background-position)",[14,134136,134137],{},"将需要变的尽可能放到一个盒子中",[14,134139,134140],{},"放大盒子上内部盒子发生变化",[114,134142,134144],{"className":126549,"code":134143,"language":126551,"meta":37,"style":37},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[120,134145,134146,134152,134162,134166,134173,134183,134195,134207],{"__ignoreMap":37},[123,134147,134148,134150],{"class":125,"line":126},[123,134149,127616],{"class":1972},[123,134151,15582],{"class":133},[123,134153,134154,134156,134158,134160],{"class":125,"line":45},[123,134155,132355],{"class":182},[123,134157,51448],{"class":133},[123,134159,54775],{"class":182},[123,134161,1300],{"class":133},[123,134163,134164],{"class":125,"line":1189},[123,134165,1574],{"class":133},[123,134167,134168,134171],{"class":125,"line":1204},[123,134169,134170],{"class":1972},".child",[123,134172,15582],{"class":133},[123,134174,134175,134177,134179,134181],{"class":125,"line":1210},[123,134176,132355],{"class":182},[123,134178,51448],{"class":133},[123,134180,54842],{"class":182},[123,134182,1300],{"class":133},[123,134184,134185,134187,134189,134191,134193],{"class":125,"line":1224},[123,134186,132369],{"class":182},[123,134188,51448],{"class":133},[123,134190,790],{"class":182},[123,134192,462],{"class":129},[123,134194,1300],{"class":133},[123,134196,134197,134199,134201,134203,134205],{"class":125,"line":1230},[123,134198,132386],{"class":182},[123,134200,51448],{"class":133},[123,134202,790],{"class":182},[123,134204,462],{"class":129},[123,134206,1300],{"class":133},[123,134208,134209],{"class":125,"line":1321},[123,134210,1574],{"class":133},[14,134212,134213],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[65,134215,134217],{"id":134216},"_122-精灵图","12.2 精灵图",[94,134219,134221],{"id":134220},"_1221-理解","12.2.1 理解",[77,134223,134224,134242],{},[80,134225,134226,134227,132455,134230,134233,134234,134237,134238,134241],{},"目的： ",[283,134228,134229],{},"为了有效地减少服务器接收和发送请求的次数",[283,134231,134232],{},"提高"," 页面的 ",[283,134235,134236],{},"加载速度"," ，出现了 ",[283,134239,134240],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[80,134243,134244,134245,134247,134248,134250,134251,134253,134254,134256,134257,134259,134260,134262],{},"使用精灵图核心：",[53727,134246],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53727,134249],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53727,134252],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53727,134255],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53727,134258],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53727,134261],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[94,134264,134266],{"id":134265},"_1222-扒图","12.2.2 扒图",[114,134268,134271],{"className":134269,"code":134270,"language":5197},[5195],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[120,134272,134270],{"__ignoreMap":37},[35,134274],{"style":126405,"src":134275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[35,134277],{"style":126405,"src":134278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[94,134280,134282],{"id":134281},"_1223-精灵图的实现","12.2.3 精灵图的实现",[35,134284],{"style":126405,"src":134285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134287,134288],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[35,134290],{"style":126405,"src":134291},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[114,134293,134295],{"className":126549,"code":134294,"language":126551,"meta":37,"style":37},"\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",[120,134296,134297,134302,134309,134321,134333,134352,134369],{"__ignoreMap":37},[123,134298,134299],{"class":125,"line":126},[123,134300,134301],{"class":192},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[123,134303,134304,134307],{"class":125,"line":45},[123,134305,134306],{"class":1972},".icon",[123,134308,15582],{"class":133},[123,134310,134311,134313,134315,134317,134319],{"class":125,"line":1189},[123,134312,70579],{"class":182},[123,134314,51448],{"class":133},[123,134316,834],{"class":182},[123,134318,51503],{"class":129},[123,134320,1300],{"class":133},[123,134322,134323,134325,134327,134329,134331],{"class":125,"line":1204},[123,134324,70799],{"class":182},[123,134326,51448],{"class":133},[123,134328,834],{"class":182},[123,134330,51503],{"class":129},[123,134332,1300],{"class":133},[123,134334,134335,134337,134339,134341,134343,134346,134348,134350],{"class":125,"line":1210},[123,134336,70622],{"class":182},[123,134338,51448],{"class":133},[123,134340,61737],{"class":182},[123,134342,134],{"class":133},[123,134344,134345],{"class":5226},"sprites.png",[123,134347,13724],{"class":133},[123,134349,61747],{"class":182},[123,134351,1300],{"class":133},[123,134353,134354,134356,134358,134360,134362,134365,134367],{"class":125,"line":1224},[123,134355,128809],{"class":182},[123,134357,51448],{"class":133},[123,134359,51774],{"class":182},[123,134361,51503],{"class":129},[123,134363,134364],{"class":182}," -20",[123,134366,51503],{"class":129},[123,134368,1300],{"class":133},[123,134370,134371],{"class":125,"line":1230},[123,134372,1574],{"class":133},[35,134374],{"style":126405,"src":134375},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134377,134378],{},"在前端中坐标轴的正方向是右和下",[65,134380,134382],{"id":134381},"_123-字体图标","12.3 字体图标",[94,134384,134386],{"id":134385},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134388,134389],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134391,134392],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134394,134395],{},"1.图片文件还是比较大的。",[14,134397,134398],{},"2.图片本身放大和缩小会失真。",[14,134400,134401],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134403,134404,134405,25751],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[283,134406,134407],{},"字体图标 iconfont",[14,134409,134410,134413,134414,28396],{},[283,134411,134412],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[283,134415,134416],{},"展示的是图标，本质属于字体",[94,134418,134420],{"id":134419},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1141,134422,134423,134428,134431,134434,134437],{},[80,134424,134425,134427],{},[283,134426,25887],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[80,134429,134430],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[80,134432,134433],{},"兼容性：几乎支持所有的浏览器，请放心使用",[80,134435,134436],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[80,134438,134439],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[94,134441,134443],{"id":134442},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1141,134445,134446],{},[80,134447,134448,134449],{},"icomoon字体库：",[372,134450,134453],{"href":134451,"rel":134452},"http:\u002F\u002Ficomoon.io\u002F",[23875],"http:\u002F\u002Ficomoon.io",[14,134455,134456],{},"进去之后点icomoon app",[35,134458],{"style":126405,"src":134459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134461,134462],{},"可以对其编辑：",[35,134464],{"style":126405,"src":134465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134467,134468],{},"生成字体：",[35,134470],{"style":126405,"src":134471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134473,134474],{},"下载：",[35,134476],{"style":126405,"src":134477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1141,134479,134480],{},[80,134481,134482,134483],{},"阿里iconfont字体库： ",[372,134484,134485],{"href":134485,"rel":134486},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23875],[94,134488,134490],{"id":134489},"_1234-字体图标的引入","12.3.4 字体图标的引入",[77,134492,134493],{},[80,134494,134495,134496,134499],{},"把下载包里面的 ",[283,134497,134498],{},"fonts"," 文件夹放入页面根目录下",[35,134501],{"style":126405,"src":134502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[77,134504,134505],{"start":45},[80,134506,134507],{},"字体文件格式",[271,134509,134510,134519],{},[274,134511,134512],{},[277,134513,134514,134517],{},[280,134515,134516],{"align":23746},"格式",[280,134518,23750],{"align":23746},[318,134520,134521,134531,134541,134551],{},[277,134522,134523,134528],{},[323,134524,134525],{"align":23746},[283,134526,134527],{},".ttf",[323,134529,134530],{"align":23746},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[277,134532,134533,134538],{},[323,134534,134535],{"align":23746},[283,134536,134537],{},".woff",[323,134539,134540],{"align":23746},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[277,134542,134543,134548],{},[323,134544,134545],{"align":23746},[283,134546,134547],{},".eot",[323,134549,134550],{"align":23746},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[277,134552,134553,134558],{},[323,134554,134555],{"align":23746},[283,134556,134557],{},"svg",[323,134559,134560],{"align":23746},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[77,134562,134563],{"start":1189},[80,134564,134565],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[114,134567,134569],{"className":126549,"code":134568,"language":126551,"meta":37,"style":37},"\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",[120,134570,134571,134576,134583,134595,134611,134636,134657,134677,134697,134701,134707,134717,134728],{"__ignoreMap":37},[123,134572,134573],{"class":125,"line":126},[123,134574,134575],{"class":192},"\u002F* 引入字体图标 *\u002F\n",[123,134577,134578,134581],{"class":125,"line":45},[123,134579,134580],{"class":129},"@font-face",[123,134582,15582],{"class":133},[123,134584,134585,134588,134590,134593],{"class":125,"line":1189},[123,134586,134587],{"class":182},"  font-family",[123,134589,51448],{"class":133},[123,134591,134592],{"class":238},"'icomoon'",[123,134594,1300],{"class":133},[123,134596,134597,134600,134602,134604,134606,134609],{"class":125,"line":1204},[123,134598,134599],{"class":182},"  src",[123,134601,51448],{"class":133},[123,134603,61737],{"class":182},[123,134605,134],{"class":133},[123,134607,134608],{"class":238},"'fonts\u002Ficomoon.eot'",[123,134610,2728],{"class":133},[123,134612,134613,134615,134617,134619,134621,134624,134626,134629,134631,134634],{"class":125,"line":1210},[123,134614,134599],{"class":182},[123,134616,51448],{"class":133},[123,134618,61737],{"class":182},[123,134620,134],{"class":133},[123,134622,134623],{"class":238},"'fonts\u002Ficomoon.eot?#iefix'",[123,134625,13724],{"class":133},[123,134627,134628],{"class":182},"format",[123,134630,134],{"class":133},[123,134632,134633],{"class":238},"'embedded-opentype'",[123,134635,38058],{"class":133},[123,134637,134638,134641,134643,134646,134648,134650,134652,134655],{"class":125,"line":1224},[123,134639,134640],{"class":182},"       url",[123,134642,134],{"class":133},[123,134644,134645],{"class":238},"'fonts\u002Ficomoon.woff'",[123,134647,13724],{"class":133},[123,134649,134628],{"class":182},[123,134651,134],{"class":133},[123,134653,134654],{"class":238},"'woff'",[123,134656,38058],{"class":133},[123,134658,134659,134661,134663,134666,134668,134670,134672,134675],{"class":125,"line":1230},[123,134660,134640],{"class":182},[123,134662,134],{"class":133},[123,134664,134665],{"class":238},"'fonts\u002Ficomoon.ttf'",[123,134667,13724],{"class":133},[123,134669,134628],{"class":182},[123,134671,134],{"class":133},[123,134673,134674],{"class":238},"'truetype'",[123,134676,38058],{"class":133},[123,134678,134679,134681,134683,134686,134688,134690,134692,134695],{"class":125,"line":1321},[123,134680,134640],{"class":182},[123,134682,134],{"class":133},[123,134684,134685],{"class":238},"'fonts\u002Ficomoon.svg#icomoon'",[123,134687,13724],{"class":133},[123,134689,134628],{"class":182},[123,134691,134],{"class":133},[123,134693,134694],{"class":238},"'svg'",[123,134696,2728],{"class":133},[123,134698,134699],{"class":125,"line":1327},[123,134700,1574],{"class":133},[123,134702,134703,134705],{"class":125,"line":1339},[123,134704,134306],{"class":1972},[123,134706,15582],{"class":133},[123,134708,134709,134711,134713,134715],{"class":125,"line":1621},[123,134710,134587],{"class":182},[123,134712,51448],{"class":133},[123,134714,134592],{"class":238},[123,134716,1300],{"class":133},[123,134718,134719,134722,134724,134726],{"class":125,"line":1626},[123,134720,134721],{"class":182},"  font-style",[123,134723,51448],{"class":133},[123,134725,63852],{"class":182},[123,134727,1300],{"class":133},[123,134729,134730],{"class":125,"line":1632},[123,134731,1574],{"class":133},[14,134733,134734],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[35,134736],{"style":126405,"src":134737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[77,134739,134740],{"start":1204},[80,134741,134742],{},"添加字体",[35,134744],{"style":126405,"src":134745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,134747,134748],{},"复制：",[35,134750],{"style":126405,"src":134751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,134753,134754],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[77,134756,134757],{"start":1210},[80,134758,134759],{},"代码展示：",[114,134761,134762],{"className":126549,"code":134568,"language":126551,"meta":37,"style":37},[120,134763,134764,134768,134774,134784,134798,134820,134838,134856,134874,134878,134884,134894,134904],{"__ignoreMap":37},[123,134765,134766],{"class":125,"line":126},[123,134767,134575],{"class":192},[123,134769,134770,134772],{"class":125,"line":45},[123,134771,134580],{"class":129},[123,134773,15582],{"class":133},[123,134775,134776,134778,134780,134782],{"class":125,"line":1189},[123,134777,134587],{"class":182},[123,134779,51448],{"class":133},[123,134781,134592],{"class":238},[123,134783,1300],{"class":133},[123,134785,134786,134788,134790,134792,134794,134796],{"class":125,"line":1204},[123,134787,134599],{"class":182},[123,134789,51448],{"class":133},[123,134791,61737],{"class":182},[123,134793,134],{"class":133},[123,134795,134608],{"class":238},[123,134797,2728],{"class":133},[123,134799,134800,134802,134804,134806,134808,134810,134812,134814,134816,134818],{"class":125,"line":1210},[123,134801,134599],{"class":182},[123,134803,51448],{"class":133},[123,134805,61737],{"class":182},[123,134807,134],{"class":133},[123,134809,134623],{"class":238},[123,134811,13724],{"class":133},[123,134813,134628],{"class":182},[123,134815,134],{"class":133},[123,134817,134633],{"class":238},[123,134819,38058],{"class":133},[123,134821,134822,134824,134826,134828,134830,134832,134834,134836],{"class":125,"line":1224},[123,134823,134640],{"class":182},[123,134825,134],{"class":133},[123,134827,134645],{"class":238},[123,134829,13724],{"class":133},[123,134831,134628],{"class":182},[123,134833,134],{"class":133},[123,134835,134654],{"class":238},[123,134837,38058],{"class":133},[123,134839,134840,134842,134844,134846,134848,134850,134852,134854],{"class":125,"line":1230},[123,134841,134640],{"class":182},[123,134843,134],{"class":133},[123,134845,134665],{"class":238},[123,134847,13724],{"class":133},[123,134849,134628],{"class":182},[123,134851,134],{"class":133},[123,134853,134674],{"class":238},[123,134855,38058],{"class":133},[123,134857,134858,134860,134862,134864,134866,134868,134870,134872],{"class":125,"line":1321},[123,134859,134640],{"class":182},[123,134861,134],{"class":133},[123,134863,134685],{"class":238},[123,134865,13724],{"class":133},[123,134867,134628],{"class":182},[123,134869,134],{"class":133},[123,134871,134694],{"class":238},[123,134873,2728],{"class":133},[123,134875,134876],{"class":125,"line":1327},[123,134877,1574],{"class":133},[123,134879,134880,134882],{"class":125,"line":1339},[123,134881,134306],{"class":1972},[123,134883,15582],{"class":133},[123,134885,134886,134888,134890,134892],{"class":125,"line":1621},[123,134887,134587],{"class":182},[123,134889,51448],{"class":133},[123,134891,134592],{"class":238},[123,134893,1300],{"class":133},[123,134895,134896,134898,134900,134902],{"class":125,"line":1626},[123,134897,134721],{"class":182},[123,134899,51448],{"class":133},[123,134901,63852],{"class":182},[123,134903,1300],{"class":133},[123,134905,134906],{"class":125,"line":1632},[123,134907,1574],{"class":133},[35,134909],{"style":126405,"src":134910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,134912,134913],{},"更加细节展示：",[77,134915,134916],{},[80,134917,134918],{},"html 标签内添加小图标",[35,134920],{"style":126405,"src":134921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[77,134923,134924],{"start":45},[80,134925,134926],{},"给标签定义字体",[114,134928,134929],{"className":127296,"code":130653,"language":127298,"meta":37,"style":37},[120,134930,134931,134935,134949,134953],{"__ignoreMap":37},[123,134932,134933],{"class":125,"line":126},[123,134934,130660],{"class":192},[123,134936,134937,134939,134941,134943,134945,134947],{"class":125,"line":45},[123,134938,1044],{"class":133},[123,134940,51622],{"class":51311},[123,134942,53497],{"class":1972},[123,134944,179],{"class":133},[123,134946,130673],{"class":238},[123,134948,51318],{"class":133},[123,134950,134951],{"class":125,"line":1189},[123,134952,130680],{"class":133},[123,134954,134955,134957,134959],{"class":125,"line":1204},[123,134956,51796],{"class":133},[123,134958,51622],{"class":51311},[123,134960,51318],{"class":133},[14,134962,134963],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[35,134965],{"style":126405,"src":134966},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[94,134968,134970],{"id":134969},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,134972,134973],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,134975,134976,134977,134980],{},"把压缩包里面的 ",[283,134978,134979],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,134982,134983],{},"打开网站，点下方：",[35,134985],{"style":126405,"src":134986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[35,134988],{"style":126405,"src":134989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[35,134991],{"style":126405,"src":134992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,134994,134995],{},"点yes重新加载",[14,134997,134998],{},"然后重复之前的操作就可以实现了",[14,135000,135001],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[94,135003,135005],{"id":135004},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[35,135007],{"style":126405,"src":135008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5136,135010,135011],{},"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":37,"searchDepth":45,"depth":45,"links":135013},[135014,135020,135025],{"id":133617,"depth":45,"text":133618,"children":135015},[135016,135017,135018,135019],{"id":133629,"depth":1189,"text":133630},{"id":133658,"depth":1189,"text":133659},{"id":133686,"depth":1189,"text":133687},{"id":133744,"depth":1189,"text":133745},{"id":134216,"depth":45,"text":134217,"children":135021},[135022,135023,135024],{"id":134220,"depth":1189,"text":134221},{"id":134265,"depth":1189,"text":134266},{"id":134281,"depth":1189,"text":134282},{"id":134381,"depth":45,"text":134382,"children":135026},[135027,135028,135029,135030,135031,135032],{"id":134385,"depth":1189,"text":134386},{"id":134419,"depth":1189,"text":134420},{"id":134442,"depth":1189,"text":134443},{"id":134489,"depth":1189,"text":134490},{"id":134969,"depth":1189,"text":134970},{"id":135004,"depth":1189,"text":135005},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133609,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135039,"title":135040,"body":135041,"description":47,"extension":48,"meta":136268,"navigation":50,"path":136269,"seo":136270,"stem":136271,"__hash__":136272},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135042,"toc":136249},[135043,135046,135050,135053,135067,135135,135165,135168,135172,135176,135278,135325,135329,135332,135335,135369,135372,135375,135378,135381,135384,135387,135390,135392,135395,135398,135401,135404,135407,135410,135413,135441,135444,135448,135451,135458,135461,135464,135490,135493,135497,135500,135503,135510,135514,135517,135519,135551,135554,135557,135569,135575,135578,135581,135584,135586,135590,135593,135596,135599,135644,135648,135650,135653,135660,135702,135705,135709,135714,135728,135732,135735,135738,135741,135744,135747,135781,135784,135787,135841,135844,135847,135850,135853,135905,135908,135911,135960,135964,135966,135969,135972,135975,135978,135981,136039,136042,136048,136051,136054,136086,136089,136093,136097,136100,136132,136136,136139,136183,136187,136190,136193,136196,136199,136202,136205,136208,136210,136213,136215,136218,136221,136224,136227,136232,136235,136237,136240,136243,136246],[10,135044,135040],{"id":135045},"_13-界面样式与布局技巧",[65,135047,135049],{"id":135048},"_131-css三角","13.1 css三角",[14,135051,135052],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1141,135054,135055,135058,135061,135064],{},[80,135056,135057],{},"用css 边框可以模拟三角效果",[80,135059,135060],{},"宽度高度为0",[80,135062,135063],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[80,135065,135066],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[114,135068,135070],{"className":126549,"code":135069,"language":126551,"meta":37,"style":37},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[120,135071,135072,135077,135084,135094,135104,135120,135131],{"__ignoreMap":37},[123,135073,135074],{"class":125,"line":126},[123,135075,135076],{"class":192},"\u002F* CSS 实现三角形 *\u002F\n",[123,135078,135079,135082],{"class":125,"line":45},[123,135080,135081],{"class":1972},".triangle",[123,135083,15582],{"class":133},[123,135085,135086,135088,135090,135092],{"class":125,"line":1189},[123,135087,70579],{"class":182},[123,135089,51448],{"class":133},[123,135091,325],{"class":182},[123,135093,1300],{"class":133},[123,135095,135096,135098,135100,135102],{"class":125,"line":1204},[123,135097,70799],{"class":182},[123,135099,51448],{"class":133},[123,135101,325],{"class":182},[123,135103,1300],{"class":133},[123,135105,135106,135108,135110,135112,135114,135116,135118],{"class":125,"line":1210},[123,135107,70907],{"class":182},[123,135109,51448],{"class":133},[123,135111,580],{"class":182},[123,135113,51503],{"class":129},[123,135115,51532],{"class":182},[123,135117,64002],{"class":182},[123,135119,1300],{"class":133},[123,135121,135122,135125,135127,135129],{"class":125,"line":1224},[123,135123,135124],{"class":182},"  border-bottom-color",[123,135126,51448],{"class":133},[123,135128,62380],{"class":182},[123,135130,1300],{"class":133},[123,135132,135133],{"class":125,"line":1230},[123,135134,1574],{"class":133},[114,135136,135137],{"className":126549,"code":130706,"language":126551,"meta":37,"style":37},[120,135138,135139,135145,135161],{"__ignoreMap":37},[123,135140,135141,135143],{"class":125,"line":126},[123,135142,51622],{"class":51311},[123,135144,15582],{"class":133},[123,135146,135147,135149,135151,135153,135155,135157,135159],{"class":125,"line":45},[123,135148,70907],{"class":182},[123,135150,51448],{"class":133},[123,135152,351],{"class":182},[123,135154,51503],{"class":129},[123,135156,51532],{"class":182},[123,135158,129941],{"class":182},[123,135160,1300],{"class":133},[123,135162,135163],{"class":125,"line":1189},[123,135164,1574],{"class":133},[35,135166],{"style":126405,"src":135167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[65,135169,135171],{"id":135170},"_132-css用户界面样式","13.2 css用户界面样式",[94,135173,135175],{"id":135174},"_1321-鼠标样式","13.2.1 鼠标样式",[114,135177,135179],{"className":126549,"code":135178,"language":126551,"meta":37,"style":37},"\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",[120,135180,135181,135186,135205,135223,135242,135259],{"__ignoreMap":37},[123,135182,135183],{"class":125,"line":126},[123,135184,135185],{"class":192},"\u002F* 鼠标样式 *\u002F\n",[123,135187,135188,135190,135192,135195,135197,135199,135202],{"class":125,"line":45},[123,135189,51622],{"class":51311},[123,135191,79818],{"class":133},[123,135193,135194],{"class":182},"cursor",[123,135196,51448],{"class":133},[123,135198,62041],{"class":182},[123,135200,135201],{"class":133},"; }   ",[123,135203,135204],{"class":192},"\u002F* 手型 *\u002F\n",[123,135206,135207,135209,135211,135213,135215,135218,135220],{"class":125,"line":1189},[123,135208,51622],{"class":51311},[123,135210,79818],{"class":133},[123,135212,135194],{"class":182},[123,135214,51448],{"class":133},[123,135216,135217],{"class":182},"default",[123,135219,135201],{"class":133},[123,135221,135222],{"class":192},"\u002F* 默认 *\u002F\n",[123,135224,135225,135227,135229,135231,135233,135236,135239],{"class":125,"line":1204},[123,135226,51622],{"class":51311},[123,135228,79818],{"class":133},[123,135230,135194],{"class":182},[123,135232,51448],{"class":133},[123,135234,135235],{"class":182},"move",[123,135237,135238],{"class":133},"; }      ",[123,135240,135241],{"class":192},"\u002F* 移动 *\u002F\n",[123,135243,135244,135246,135248,135250,135252,135254,135256],{"class":125,"line":1210},[123,135245,51622],{"class":51311},[123,135247,79818],{"class":133},[123,135249,135194],{"class":182},[123,135251,51448],{"class":133},[123,135253,5197],{"class":182},[123,135255,135238],{"class":133},[123,135257,135258],{"class":192},"\u002F* 文本 *\u002F\n",[123,135260,135261,135263,135265,135267,135269,135272,135275],{"class":125,"line":1224},[123,135262,51622],{"class":51311},[123,135264,79818],{"class":133},[123,135266,135194],{"class":182},[123,135268,51448],{"class":133},[123,135270,135271],{"class":182},"not-allowed",[123,135273,135274],{"class":133},"; } ",[123,135276,135277],{"class":192},"\u002F* 禁止 *\u002F\n",[271,135279,135280,135288],{},[274,135281,135282],{},[277,135283,135284,135286],{},[280,135285,127013],{"align":23746},[280,135287,27500],{"align":23746},[318,135289,135290,135297,135304,135311,135318],{},[277,135291,135292,135294],{},[323,135293,135217],{"align":23746},[323,135295,135296],{"align":23746},"小白 默认",[277,135298,135299,135301],{},[323,135300,62041],{"align":23746},[323,135302,135303],{"align":23746},"小手",[277,135305,135306,135308],{},[323,135307,135235],{"align":23746},[323,135309,135310],{"align":23746},"移动",[277,135312,135313,135315],{},[323,135314,5197],{"align":23746},[323,135316,135317],{"align":23746},"文本",[277,135319,135320,135322],{},[323,135321,135271],{"align":23746},[323,135323,135324],{"align":23746},"禁止",[94,135326,135328],{"id":135327},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135330,135331],{},"去除表单轮廓线",[14,135333,135334],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[114,135336,135337],{"className":126549,"code":129913,"language":126551,"meta":37,"style":37},[120,135338,135339,135343,135349,135365],{"__ignoreMap":37},[123,135340,135341],{"class":125,"line":126},[123,135342,129920],{"class":192},[123,135344,135345,135347],{"class":125,"line":45},[123,135346,51622],{"class":51311},[123,135348,15582],{"class":133},[123,135350,135351,135353,135355,135357,135359,135361,135363],{"class":125,"line":1189},[123,135352,70907],{"class":182},[123,135354,51448],{"class":133},[123,135356,351],{"class":182},[123,135358,51503],{"class":129},[123,135360,51532],{"class":182},[123,135362,129941],{"class":182},[123,135364,1300],{"class":133},[123,135366,135367],{"class":125,"line":1204},[123,135368,1574],{"class":133},[14,135370,135371],{},"文本域：",[35,135373],{"style":126405,"src":135374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135376,135377],{},"此时会有一个空白区域",[35,135379],{"style":126405,"src":135380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135382,135383],{},"写在同一行就不会出现这个问题",[35,135385],{"style":126405,"src":135386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135388,135389],{},"文本域是行内块元素，一定记住！！！",[14,135391,98230],{},[35,135393],{"style":126405,"src":135394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135396,135397],{},"文本域尽量放在一行",[14,135399,135400],{},"知识回顾：cols是列，rols是行",[35,135402],{"style":126405,"src":135403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135405,135406],{},"它可以进行拖动，显然这是我们不愿意看到的",[35,135408],{"style":126405,"src":135409},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135411,135412],{},"使用resize进行解决",[114,135414,135416],{"className":126549,"code":135415,"language":126551,"meta":37,"style":37},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[120,135417,135418,135424,135437],{"__ignoreMap":37},[123,135419,135420,135422],{"class":125,"line":126},[123,135421,53832],{"class":51311},[123,135423,15582],{"class":133},[123,135425,135426,135428,135430,135432,135434],{"class":125,"line":45},[123,135427,70809],{"class":182},[123,135429,51448],{"class":133},[123,135431,54748],{"class":182},[123,135433,130412],{"class":133},[123,135435,135436],{"class":192},"\u002F* 取消表单轮廓线 *\u002F\n",[123,135438,135439],{"class":125,"line":1189},[123,135440,1574],{"class":133},[14,135442,135443],{},"此时就无法通过右下方实现拖动了",[94,135445,135447],{"id":135446},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135449,135450],{},"实现一个盒子中的文字和图片对齐",[14,135452,135453,135454,135457],{},"用于设置一个元素的 ",[283,135455,135456],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135459,135460],{},"图片和文字默认是基线对齐",[35,135462],{"style":126405,"src":135463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[114,135465,135466],{"className":126549,"code":135415,"language":126551,"meta":37,"style":37},[120,135467,135468,135474,135486],{"__ignoreMap":37},[123,135469,135470,135472],{"class":125,"line":126},[123,135471,53832],{"class":51311},[123,135473,15582],{"class":133},[123,135475,135476,135478,135480,135482,135484],{"class":125,"line":45},[123,135477,70809],{"class":182},[123,135479,51448],{"class":133},[123,135481,54748],{"class":182},[123,135483,130412],{"class":133},[123,135485,135436],{"class":192},[123,135487,135488],{"class":125,"line":1189},[123,135489,1574],{"class":133},[35,135491],{"style":126405,"src":135492},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[22008,135494,135496],{"id":135495},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135498,135499],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[35,135501],{"style":126405,"src":135502},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135504,135505,135506,135509],{},"此时可以给图片、表单这些行内块元素的 ",[283,135507,135508],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[22008,135511,135513],{"id":135512},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135515,135516],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135518,14643],{},[114,135520,135522],{"className":126549,"code":135521,"language":126551,"meta":37,"style":37},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[120,135523,135524,135529,135535,135547],{"__ignoreMap":37},[123,135525,135526],{"class":125,"line":126},[123,135527,135528],{"class":192},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[123,135530,135531,135533],{"class":125,"line":45},[123,135532,35],{"class":51311},[123,135534,15582],{"class":133},[123,135536,135537,135540,135542,135545],{"class":125,"line":1189},[123,135538,135539],{"class":182},"  vertical-align",[123,135541,51448],{"class":133},[123,135543,135544],{"class":182},"middle",[123,135546,1300],{"class":133},[123,135548,135549],{"class":125,"line":1204},[123,135550,1574],{"class":133},[35,135552],{"style":126405,"src":135553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135555,135556],{},"主要解决方法有两种：",[77,135558,135559],{},[80,135560,135561,135564,135565,135568],{},[283,135562,135563],{},"给图片"," 添加 ",[283,135566,135567],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135570,135571,135572],{},"2.把图片转换为块级元素 ",[283,135573,135574],{},"display: block",[14,135576,135577],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135579,135580],{},"img {",[14,135582,135583],{},"vertical-align:middle;",[14,135585,1080],{},[94,135587,135589],{"id":135588},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135591,135592],{},"效果：",[35,135594],{"style":126405,"src":135595},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135597,135598],{},"单行文本溢出显示省略号--必须满足三个条件：",[114,135600,135602],{"className":126549,"code":135601,"language":126551,"meta":37,"style":37},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[120,135603,135604,135609,135615,135625,135630,135640],{"__ignoreMap":37},[123,135605,135606],{"class":125,"line":126},[123,135607,135608],{"class":192},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[123,135610,135611,135613],{"class":125,"line":45},[123,135612,35],{"class":51311},[123,135614,15582],{"class":133},[123,135616,135617,135619,135621,135623],{"class":125,"line":1189},[123,135618,135539],{"class":182},[123,135620,51448],{"class":133},[123,135622,135544],{"class":182},[123,135624,1300],{"class":133},[123,135626,135627],{"class":125,"line":1204},[123,135628,135629],{"class":192},"  \u002F* 或 *\u002F\n",[123,135631,135632,135634,135636,135638],{"class":125,"line":1210},[123,135633,128165],{"class":182},[123,135635,51448],{"class":133},[123,135637,60880],{"class":182},[123,135639,1300],{"class":133},[123,135641,135642],{"class":125,"line":1224},[123,135643,1574],{"class":133},[94,135645,135647],{"id":135646},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,135649,135592],{},[35,135651],{"style":126405,"src":135652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,135654,135655,135656,135659],{},"多行文本溢出显示省略号， ",[283,135657,135658],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[114,135661,135662],{"className":126549,"code":135601,"language":126551,"meta":37,"style":37},[120,135663,135664,135668,135674,135684,135688,135698],{"__ignoreMap":37},[123,135665,135666],{"class":125,"line":126},[123,135667,135608],{"class":192},[123,135669,135670,135672],{"class":125,"line":45},[123,135671,35],{"class":51311},[123,135673,15582],{"class":133},[123,135675,135676,135678,135680,135682],{"class":125,"line":1189},[123,135677,135539],{"class":182},[123,135679,51448],{"class":133},[123,135681,135544],{"class":182},[123,135683,1300],{"class":133},[123,135685,135686],{"class":125,"line":1204},[123,135687,135629],{"class":192},[123,135689,135690,135692,135694,135696],{"class":125,"line":1210},[123,135691,128165],{"class":182},[123,135693,51448],{"class":133},[123,135695,60880],{"class":182},[123,135697,1300],{"class":133},[123,135699,135700],{"class":125,"line":1224},[123,135701,1574],{"class":133},[14,135703,135704],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[65,135706,135708],{"id":135707},"_133-常见布局技巧","13.3 常见布局技巧",[14,135710,135711],{},[283,135712,135713],{},"巧妙利用一个技术更快更好的布局：",[77,135715,135716,135719,135722,135725],{},[80,135717,135718],{},"margin负值的运用",[80,135720,135721],{},"文字围绕浮动元素",[80,135723,135724],{},"行内块的巧妙运用",[80,135726,135727],{},"CSS三角强化",[94,135729,135731],{"id":135730},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,135733,135734],{},"应用场景：",[35,135736],{"style":126405,"src":135737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[35,135739],{"style":126405,"src":135740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,135742,135743],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,135745,135746],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[114,135748,135749],{"className":126549,"code":129913,"language":126551,"meta":37,"style":37},[120,135750,135751,135755,135761,135777],{"__ignoreMap":37},[123,135752,135753],{"class":125,"line":126},[123,135754,129920],{"class":192},[123,135756,135757,135759],{"class":125,"line":45},[123,135758,51622],{"class":51311},[123,135760,15582],{"class":133},[123,135762,135763,135765,135767,135769,135771,135773,135775],{"class":125,"line":1189},[123,135764,70907],{"class":182},[123,135766,51448],{"class":133},[123,135768,351],{"class":182},[123,135770,51503],{"class":129},[123,135772,51532],{"class":182},[123,135774,129941],{"class":182},[123,135776,1300],{"class":133},[123,135778,135779],{"class":125,"line":1204},[123,135780,1574],{"class":133},[35,135782],{"style":126405,"src":135783},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,135785,135786],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[114,135788,135790],{"className":126549,"code":135789,"language":126551,"meta":37,"style":37},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[120,135791,135792,135797,135803,135813,135825,135837],{"__ignoreMap":37},[123,135793,135794],{"class":125,"line":126},[123,135795,135796],{"class":192},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[123,135798,135799,135801],{"class":125,"line":45},[123,135800,130397],{"class":1972},[123,135802,15582],{"class":133},[123,135804,135805,135807,135809,135811],{"class":125,"line":1189},[123,135806,132355],{"class":182},[123,135808,51448],{"class":133},[123,135810,54775],{"class":182},[123,135812,1300],{"class":133},[123,135814,135815,135817,135819,135821,135823],{"class":125,"line":1204},[123,135816,132369],{"class":182},[123,135818,51448],{"class":133},[123,135820,580],{"class":182},[123,135822,51503],{"class":129},[123,135824,1300],{"class":133},[123,135826,135827,135829,135831,135833,135835],{"class":125,"line":1210},[123,135828,132386],{"class":182},[123,135830,51448],{"class":133},[123,135832,834],{"class":182},[123,135834,51503],{"class":129},[123,135836,1300],{"class":133},[123,135838,135839],{"class":125,"line":1224},[123,135840,1574],{"class":133},[14,135842,135843],{},"加上上述代码会发现：",[35,135845],{"style":126405,"src":135846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,135848,135849],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,135851,135852],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[114,135854,135855],{"className":126549,"code":135789,"language":126551,"meta":37,"style":37},[120,135856,135857,135861,135867,135877,135889,135901],{"__ignoreMap":37},[123,135858,135859],{"class":125,"line":126},[123,135860,135796],{"class":192},[123,135862,135863,135865],{"class":125,"line":45},[123,135864,130397],{"class":1972},[123,135866,15582],{"class":133},[123,135868,135869,135871,135873,135875],{"class":125,"line":1189},[123,135870,132355],{"class":182},[123,135872,51448],{"class":133},[123,135874,54775],{"class":182},[123,135876,1300],{"class":133},[123,135878,135879,135881,135883,135885,135887],{"class":125,"line":1204},[123,135880,132369],{"class":182},[123,135882,51448],{"class":133},[123,135884,580],{"class":182},[123,135886,51503],{"class":129},[123,135888,1300],{"class":133},[123,135890,135891,135893,135895,135897,135899],{"class":125,"line":1210},[123,135892,132386],{"class":182},[123,135894,51448],{"class":133},[123,135896,834],{"class":182},[123,135898,51503],{"class":129},[123,135900,1300],{"class":133},[123,135902,135903],{"class":125,"line":1224},[123,135904,1574],{"class":133},[14,135906,135907],{},"解决方式2：",[14,135909,135910],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[114,135912,135914],{"className":126549,"code":135913,"language":126551,"meta":37,"style":37},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[120,135915,135916,135922,135932,135944,135956],{"__ignoreMap":37},[123,135917,135918,135920],{"class":125,"line":126},[123,135919,51622],{"class":51311},[123,135921,15582],{"class":133},[123,135923,135924,135926,135928,135930],{"class":125,"line":45},[123,135925,132355],{"class":182},[123,135927,51448],{"class":133},[123,135929,54775],{"class":182},[123,135931,1300],{"class":133},[123,135933,135934,135936,135938,135940,135942],{"class":125,"line":1189},[123,135935,132369],{"class":182},[123,135937,51448],{"class":133},[123,135939,580],{"class":182},[123,135941,51503],{"class":129},[123,135943,1300],{"class":133},[123,135945,135946,135948,135950,135952,135954],{"class":125,"line":1204},[123,135947,132386],{"class":182},[123,135949,51448],{"class":133},[123,135951,834],{"class":182},[123,135953,51503],{"class":129},[123,135955,1300],{"class":133},[123,135957,135958],{"class":125,"line":1210},[123,135959,1574],{"class":133},[94,135961,135963],{"id":135962},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,135965,135734],{},[35,135967],{"style":126405,"src":135968},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,135970,135971],{},"实现结构图：",[35,135973],{"style":126405,"src":135974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,135976,135977],{},"巧妙运用浮动元素不会压住文字的特性",[14,135979,135980],{},"代码显示：",[114,135982,135984],{"className":126549,"code":135983,"language":126551,"meta":37,"style":37},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[120,135985,135986,135992,136002,136006,136011,136015,136021,136035],{"__ignoreMap":37},[123,135987,135988,135990],{"class":125,"line":126},[123,135989,130397],{"class":1972},[123,135991,15582],{"class":133},[123,135993,135994,135996,135998,136000],{"class":125,"line":45},[123,135995,131029],{"class":182},[123,135997,51448],{"class":133},[123,135999,23746],{"class":182},[123,136001,1300],{"class":133},[123,136003,136004],{"class":125,"line":1189},[123,136005,1574],{"class":133},[123,136007,136008],{"class":125,"line":1204},[123,136009,136010],{"class":133},"```Css\n",[123,136012,136013],{"class":125,"line":1210},[123,136014,130392],{"class":192},[123,136016,136017,136019],{"class":125,"line":1224},[123,136018,130397],{"class":1972},[123,136020,15582],{"class":133},[123,136022,136023,136025,136027,136029,136031,136033],{"class":125,"line":1230},[123,136024,70481],{"class":182},[123,136026,51448],{"class":133},[123,136028,325],{"class":182},[123,136030,51567],{"class":182},[123,136032,130412],{"class":133},[123,136034,130415],{"class":192},[123,136036,136037],{"class":125,"line":1321},[123,136038,1574],{"class":133},[14,136040,136041],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[114,136043,136046],{"className":136044,"code":136045,"language":5197},[5195],"\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",[120,136047,136045],{"__ignoreMap":37},[35,136049],{"style":126405,"src":136050},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136052,136053],{},"最终展示结果：",[114,136055,136056],{"className":126549,"code":130385,"language":126551,"meta":37,"style":37},[120,136057,136058,136062,136068,136082],{"__ignoreMap":37},[123,136059,136060],{"class":125,"line":126},[123,136061,130392],{"class":192},[123,136063,136064,136066],{"class":125,"line":45},[123,136065,130397],{"class":1972},[123,136067,15582],{"class":133},[123,136069,136070,136072,136074,136076,136078,136080],{"class":125,"line":1189},[123,136071,70481],{"class":182},[123,136073,51448],{"class":133},[123,136075,325],{"class":182},[123,136077,51567],{"class":182},[123,136079,130412],{"class":133},[123,136081,130415],{"class":192},[123,136083,136084],{"class":125,"line":1204},[123,136085,1574],{"class":133},[35,136087],{"style":126405,"src":136088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[65,136090,136092],{"id":136091},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[94,136094,136096],{"id":136095},"_1341-原理","13.4.1 原理",[35,136098],{"style":126405,"src":136099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[114,136101,136102],{"className":126549,"code":130385,"language":126551,"meta":37,"style":37},[120,136103,136104,136108,136114,136128],{"__ignoreMap":37},[123,136105,136106],{"class":125,"line":126},[123,136107,130392],{"class":192},[123,136109,136110,136112],{"class":125,"line":45},[123,136111,130397],{"class":1972},[123,136113,15582],{"class":133},[123,136115,136116,136118,136120,136122,136124,136126],{"class":125,"line":1189},[123,136117,70481],{"class":182},[123,136119,51448],{"class":133},[123,136121,325],{"class":182},[123,136123,51567],{"class":182},[123,136125,130412],{"class":133},[123,136127,130415],{"class":192},[123,136129,136130],{"class":125,"line":1204},[123,136131,1574],{"class":133},[94,136133,136135],{"id":136134},"_1342-实例","13.4.2 实例",[35,136137],{"style":126405,"src":136138},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[114,136140,136141],{"className":126549,"code":131015,"language":126551,"meta":37,"style":37},[120,136142,136143,136149,136159,136163,136169,136179],{"__ignoreMap":37},[123,136144,136145,136147],{"class":125,"line":126},[123,136146,131022],{"class":1972},[123,136148,15582],{"class":133},[123,136150,136151,136153,136155,136157],{"class":125,"line":45},[123,136152,131029],{"class":182},[123,136154,51448],{"class":133},[123,136156,23746],{"class":182},[123,136158,1300],{"class":133},[123,136160,136161],{"class":125,"line":1189},[123,136162,1574],{"class":133},[123,136164,136165,136167],{"class":125,"line":1204},[123,136166,131044],{"class":1972},[123,136168,15582],{"class":133},[123,136170,136171,136173,136175,136177],{"class":125,"line":1210},[123,136172,131029],{"class":182},[123,136174,51448],{"class":133},[123,136176,72533],{"class":182},[123,136178,1300],{"class":133},[123,136180,136181],{"class":125,"line":1224},[123,136182,1574],{"class":133},[65,136184,136186],{"id":136185},"_135-css的初始化","13.5 css的初始化",[14,136188,136189],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136191,136192],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136194,136195],{},"每个网页都必须首先进行 CSS初始化。",[14,136197,136198],{},"这里我们以 京东CSS初始化代码为例。",[14,136200,136201],{},"在网页右键查看网页源代码",[14,136203,136204],{},"找到css的link引入语句",[14,136206,136207],{},"然后ctrl+f 输入body",[14,136209,77237],{},[35,136211],{"style":126405,"src":136212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136214,77260],{},[35,136216],{"style":126405,"src":136217},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136219,136220],{},"③打开了网页上传压缩的代码",[35,136222],{"style":126405,"src":136223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136225,136226],{},"④从body前可以查看这个网页的初始化代码",[14,136228,136229],{},[283,136230,136231],{},"Unicode编码字体：",[14,136233,136234],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136236,83218],{},[14,136238,136239],{},"黑体 \\9ED1\\4F53",[14,136241,136242],{},"宋体 \\5B8B\\4F53",[14,136244,136245],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5136,136247,136248],{},"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":37,"searchDepth":45,"depth":45,"links":136250},[136251,136252,136259,136263,136267],{"id":135048,"depth":45,"text":135049},{"id":135170,"depth":45,"text":135171,"children":136253},[136254,136255,136256,136257,136258],{"id":135174,"depth":1189,"text":135175},{"id":135327,"depth":1189,"text":135328},{"id":135446,"depth":1189,"text":135447},{"id":135588,"depth":1189,"text":135589},{"id":135646,"depth":1189,"text":135647},{"id":135707,"depth":45,"text":135708,"children":136260},[136261,136262],{"id":135730,"depth":1189,"text":135731},{"id":135962,"depth":1189,"text":135963},{"id":136091,"depth":45,"text":136092,"children":136264},[136265,136266],{"id":136095,"depth":1189,"text":136096},{"id":136134,"depth":1189,"text":136135},{"id":136185,"depth":45,"text":136186},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135040,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136274,"title":136275,"body":136276,"description":47,"extension":48,"meta":137962,"navigation":50,"path":137963,"seo":137964,"stem":137965,"__hash__":137966},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136277,"toc":137951},[136278,136281,136285,136289,136292,136299,136302,136305,136343,136346,136348,136362,136366,136375,136379,136384,136387,136390,136393,136428,136433,136436,136466,136469,136474,136477,136480,136510,136513,136567,136570,136574,136579,136591,136594,136598,136628,136631,136636,136639,136669,136672,136676,136693,136697,136701,136704,136737,136740,136744,136747,136750,136753,136756,136759,136870,136873,136876,136879,136981,136984,136988,136992,136996,136999,137039,137042,137044,137060,137064,137067,137072,137153,137156,137159,137285,137290,137293,137301,137304,137309,137394,137397,137401,137404,137407,137411,137431,137436,137520,137523,137528,137531,137534,137612,137615,137618,137621,137624,137627,137632,137635,137638,137710,137713,137718,137721,137818,137821,137827,137830,137833,137836,137839,137842,137845,137848,137851,137855,137860,137863,137896,137901,137904,137945,137948],[10,136279,136275],{"id":136280},"_14-html5与css3新特性",[65,136282,136284],{"id":136283},"_141-html5的新特性","14.1 HTML5的新特性",[94,136286,136288],{"id":136287},"_1411-基本标签","14.1.1 基本标签",[14,136290,136291],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136293,136294,136295,136298],{},"这些新特性都有兼容性问题，基本是 ",[283,136296,136297],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136300,136301],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136303,136304],{},"现在使用的是新特性：",[1141,136306,136307,136313,136319,136325,136331,136337],{},[80,136308,136309,136312],{},[120,136310,136311],{},"\u003Cheader>"," 头部标签",[80,136314,136315,136318],{},[120,136316,136317],{},"\u003Cnav>"," 导航标签",[80,136320,136321,136324],{},[120,136322,136323],{},"\u003Carticle>"," 内容标签",[80,136326,136327,136330],{},[120,136328,136329],{},"\u003Csection>"," 定义文档某个区域",[80,136332,136333,136336],{},[120,136334,136335],{},"\u003Caside>"," 侧边栏标签",[80,136338,136339,136342],{},[120,136340,136341],{},"\u003Cfooter>"," 尾部标签",[35,136344],{"style":126405,"src":136345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136347,163],{},[1141,136349,136350,136353,136356,136359],{},[80,136351,136352],{},"这种语义化标准主要是针对搜索引擎的",[80,136354,136355],{},"这些标签页面中可以经常使用",[80,136357,136358],{},"在IE9中，需要把这些元素转换为块级元素",[80,136360,136361],{},"移动端更喜欢使用这些标签",[94,136363,136365],{"id":136364},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136367,136368,136369,136371,136372,136374],{},"音频 ",[283,136370,28185],{}," 和视频 ",[283,136373,28194],{}," 两个标签",[22008,136376,136378],{"id":136377},"_14121-视频标签-video","14.1.2.1 视频标签- video",[77,136380,136381],{},[80,136382,136383],{},"支持格式：",[35,136385],{"style":126405,"src":136386},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136388,136389],{},"尽量使用MP4，兼容性好",[14,136391,136392],{},"用MP4就可以",[114,136394,136396],{"className":127296,"code":136395,"language":127298,"meta":37,"style":37},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[120,136397,136398],{"__ignoreMap":37},[123,136399,136400,136402,136404,136406,136408,136411,136413,136416,136419,136422,136424,136426],{"class":125,"line":126},[123,136401,1044],{"class":133},[123,136403,28194],{"class":51311},[123,136405,55250],{"class":1972},[123,136407,179],{"class":133},[123,136409,136410],{"class":238},"\"movie.mp4\"",[123,136412,92434],{"class":1972},[123,136414,136415],{"class":1972}," autoplay",[123,136417,136418],{"class":1972}," muted",[123,136420,136421],{"class":1972}," loop",[123,136423,55325],{"class":133},[123,136425,28194],{"class":51311},[123,136427,51318],{"class":133},[77,136429,136430],{"start":45},[80,136431,136432],{},"兼容写法",[14,136434,136435],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[114,136437,136438],{"className":127296,"code":136395,"language":127298,"meta":37,"style":37},[120,136439,136440],{"__ignoreMap":37},[123,136441,136442,136444,136446,136448,136450,136452,136454,136456,136458,136460,136462,136464],{"class":125,"line":126},[123,136443,1044],{"class":133},[123,136445,28194],{"class":51311},[123,136447,55250],{"class":1972},[123,136449,179],{"class":133},[123,136451,136410],{"class":238},[123,136453,92434],{"class":1972},[123,136455,136415],{"class":1972},[123,136457,136418],{"class":1972},[123,136459,136421],{"class":1972},[123,136461,55325],{"class":133},[123,136463,28194],{"class":51311},[123,136465,51318],{"class":133},[14,136467,136468],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[77,136470,136471],{"start":1189},[80,136472,136473],{},"video常用属性",[35,136475],{"style":126405,"src":136476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136478,136479],{},"poster属性后面是跟的等待加载图片的地址",[114,136481,136482],{"className":127296,"code":134051,"language":127298,"meta":37,"style":37},[120,136483,136484],{"__ignoreMap":37},[123,136485,136486,136488,136490,136492,136494,136496,136498,136500,136502,136504,136506,136508],{"class":125,"line":126},[123,136487,1044],{"class":133},[123,136489,35],{"class":51311},[123,136491,55250],{"class":1972},[123,136493,179],{"class":133},[123,136495,134066],{"class":238},[123,136497,55258],{"class":1972},[123,136499,179],{"class":133},[123,136501,134073],{"class":238},[123,136503,134076],{"class":1972},[123,136505,179],{"class":133},[123,136507,134081],{"class":238},[123,136509,51318],{"class":133},[14,136511,136512],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[114,136514,136516],{"className":126549,"code":136515,"language":126551,"meta":37,"style":37},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[120,136517,136518,136523,136529,136553,136558,136563],{"__ignoreMap":37},[123,136519,136520],{"class":125,"line":126},[123,136521,136522],{"class":192},"\u002F* 2D 位移 *\u002F\n",[123,136524,136525,136527],{"class":125,"line":45},[123,136526,51622],{"class":51311},[123,136528,15582],{"class":133},[123,136530,136531,136534,136536,136539,136541,136543,136545,136547,136549,136551],{"class":125,"line":1189},[123,136532,136533],{"class":182},"  transform",[123,136535,51448],{"class":133},[123,136537,136538],{"class":182},"translate",[123,136540,134],{"class":133},[123,136542,445],{"class":182},[123,136544,51503],{"class":129},[123,136546,12445],{"class":133},[123,136548,790],{"class":182},[123,136550,51503],{"class":129},[123,136552,2728],{"class":133},[123,136554,136555],{"class":125,"line":1204},[123,136556,136557],{"class":192},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[123,136559,136560],{"class":125,"line":1210},[123,136561,136562],{"class":192},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[123,136564,136565],{"class":125,"line":1224},[123,136566,1574],{"class":133},[14,136568,136569],{},"muted:自动静音属性",[22008,136571,136573],{"id":136572},"_14122-音频标签audio","14.1.2.2 音频标签audio",[77,136575,136576],{},[80,136577,136578],{},"基本使用",[14,136580,136581,136582,136587,136588],{},"当前 ",[283,136583,136584],{},[120,136585,136586],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[283,136589,136590],{},"mp3格式",[35,136592],{"style":126405,"src":136593},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[77,136595,136596],{"start":45},[80,136597,136432],{},[114,136599,136600],{"className":127296,"code":136395,"language":127298,"meta":37,"style":37},[120,136601,136602],{"__ignoreMap":37},[123,136603,136604,136606,136608,136610,136612,136614,136616,136618,136620,136622,136624,136626],{"class":125,"line":126},[123,136605,1044],{"class":133},[123,136607,28194],{"class":51311},[123,136609,55250],{"class":1972},[123,136611,179],{"class":133},[123,136613,136410],{"class":238},[123,136615,92434],{"class":1972},[123,136617,136415],{"class":1972},[123,136619,136418],{"class":1972},[123,136621,136421],{"class":1972},[123,136623,55325],{"class":133},[123,136625,28194],{"class":51311},[123,136627,51318],{"class":133},[14,136629,136630],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[77,136632,136633],{"start":1189},[80,136634,136635],{},"常用属性",[35,136637],{"style":126405,"src":136638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[114,136640,136641],{"className":127296,"code":136395,"language":127298,"meta":37,"style":37},[120,136642,136643],{"__ignoreMap":37},[123,136644,136645,136647,136649,136651,136653,136655,136657,136659,136661,136663,136665,136667],{"class":125,"line":126},[123,136646,1044],{"class":133},[123,136648,28194],{"class":51311},[123,136650,55250],{"class":1972},[123,136652,179],{"class":133},[123,136654,136410],{"class":238},[123,136656,92434],{"class":1972},[123,136658,136415],{"class":1972},[123,136660,136418],{"class":1972},[123,136662,136421],{"class":1972},[123,136664,55325],{"class":133},[123,136666,28194],{"class":51311},[123,136668,51318],{"class":133},[14,136670,136671],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[22008,136673,136675],{"id":136674},"_14123-总结","14.1.2.3 总结",[1141,136677,136678,136681,136684,136687,136690],{},[80,136679,136680],{},"音频标签和视频标签使用方式基本一致",[80,136682,136683],{},"浏览器支持情况不同",[80,136685,136686],{},"谷歌浏览器把音频和视频自动播放禁止了",[80,136688,136689],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[80,136691,136692],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[94,136694,136696],{"id":136695},"_1413-表单元素","14.1.3 表单元素",[22008,136698,136700],{"id":136699},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[35,136702],{"style":126405,"src":136703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[114,136705,136707],{"className":127296,"code":136706,"language":127298,"meta":37,"style":37},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[120,136708,136709],{"__ignoreMap":37},[123,136710,136711,136713,136715,136717,136719,136721,136723,136725,136728,136730,136732,136735],{"class":125,"line":126},[123,136712,1044],{"class":133},[123,136714,53832],{"class":51311},[123,136716,53835],{"class":1972},[123,136718,179],{"class":133},[123,136720,62710],{"class":238},[123,136722,14930],{"class":1972},[123,136724,179],{"class":133},[123,136726,136727],{"class":238},"\"username\"",[123,136729,61031],{"class":1972},[123,136731,179],{"class":133},[123,136733,136734],{"class":238},"\"请输入用户名\"",[123,136736,51318],{"class":133},[35,136738],{"style":126405,"src":136739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[22008,136741,136743],{"id":136742},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[35,136745],{"style":126405,"src":136746},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,136748,136749],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,136751,136752],{},"快捷操作：",[35,136754],{"style":126405,"src":136755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,136757,136758],{},"例子1：",[114,136760,136762],{"className":127296,"code":136761,"language":127298,"meta":37,"style":37},"\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",[120,136763,136764,136787,136814,136843,136862],{"__ignoreMap":37},[123,136765,136766,136768,136770,136772,136774,136777,136780,136782,136785],{"class":125,"line":126},[123,136767,1044],{"class":133},[123,136769,66636],{"class":51311},[123,136771,66639],{"class":1972},[123,136773,179],{"class":133},[123,136775,136776],{"class":238},"\"\u002Fsubmit\"",[123,136778,136779],{"class":1972}," method",[123,136781,179],{"class":133},[123,136783,136784],{"class":238},"\"post\"",[123,136786,51318],{"class":133},[123,136788,136789,136791,136793,136795,136797,136799,136801,136803,136805,136807,136809,136812],{"class":125,"line":45},[123,136790,52155],{"class":133},[123,136792,53832],{"class":51311},[123,136794,53835],{"class":1972},[123,136796,179],{"class":133},[123,136798,62710],{"class":238},[123,136800,14930],{"class":1972},[123,136802,179],{"class":133},[123,136804,136727],{"class":238},[123,136806,61031],{"class":1972},[123,136808,179],{"class":133},[123,136810,136811],{"class":238},"\"用户名\"",[123,136813,51318],{"class":133},[123,136815,136816,136818,136820,136822,136824,136827,136829,136831,136834,136836,136838,136841],{"class":125,"line":1189},[123,136817,52155],{"class":133},[123,136819,53832],{"class":51311},[123,136821,53835],{"class":1972},[123,136823,179],{"class":133},[123,136825,136826],{"class":238},"\"password\"",[123,136828,14930],{"class":1972},[123,136830,179],{"class":133},[123,136832,136833],{"class":238},"\"pwd\"",[123,136835,61031],{"class":1972},[123,136837,179],{"class":133},[123,136839,136840],{"class":238},"\"密码\"",[123,136842,51318],{"class":133},[123,136844,136845,136847,136849,136851,136853,136855,136858,136860],{"class":125,"line":1204},[123,136846,52155],{"class":133},[123,136848,53898],{"class":51311},[123,136850,53835],{"class":1972},[123,136852,179],{"class":133},[123,136854,66659],{"class":238},[123,136856,136857],{"class":133},">提交\u003C\u002F",[123,136859,53898],{"class":51311},[123,136861,51318],{"class":133},[123,136863,136864,136866,136868],{"class":125,"line":1210},[123,136865,51796],{"class":133},[123,136867,66636],{"class":51311},[123,136869,51318],{"class":133},[35,136871],{"style":126405,"src":136872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,136874,136875],{},"value是表单域的内容",[14,136877,136878],{},"例子2：",[114,136880,136881],{"className":127296,"code":136761,"language":127298,"meta":37,"style":37},[120,136882,136883,136903,136929,136955,136973],{"__ignoreMap":37},[123,136884,136885,136887,136889,136891,136893,136895,136897,136899,136901],{"class":125,"line":126},[123,136886,1044],{"class":133},[123,136888,66636],{"class":51311},[123,136890,66639],{"class":1972},[123,136892,179],{"class":133},[123,136894,136776],{"class":238},[123,136896,136779],{"class":1972},[123,136898,179],{"class":133},[123,136900,136784],{"class":238},[123,136902,51318],{"class":133},[123,136904,136905,136907,136909,136911,136913,136915,136917,136919,136921,136923,136925,136927],{"class":125,"line":45},[123,136906,52155],{"class":133},[123,136908,53832],{"class":51311},[123,136910,53835],{"class":1972},[123,136912,179],{"class":133},[123,136914,62710],{"class":238},[123,136916,14930],{"class":1972},[123,136918,179],{"class":133},[123,136920,136727],{"class":238},[123,136922,61031],{"class":1972},[123,136924,179],{"class":133},[123,136926,136811],{"class":238},[123,136928,51318],{"class":133},[123,136930,136931,136933,136935,136937,136939,136941,136943,136945,136947,136949,136951,136953],{"class":125,"line":1189},[123,136932,52155],{"class":133},[123,136934,53832],{"class":51311},[123,136936,53835],{"class":1972},[123,136938,179],{"class":133},[123,136940,136826],{"class":238},[123,136942,14930],{"class":1972},[123,136944,179],{"class":133},[123,136946,136833],{"class":238},[123,136948,61031],{"class":1972},[123,136950,179],{"class":133},[123,136952,136840],{"class":238},[123,136954,51318],{"class":133},[123,136956,136957,136959,136961,136963,136965,136967,136969,136971],{"class":125,"line":1204},[123,136958,52155],{"class":133},[123,136960,53898],{"class":51311},[123,136962,53835],{"class":1972},[123,136964,179],{"class":133},[123,136966,66659],{"class":238},[123,136968,136857],{"class":133},[123,136970,53898],{"class":51311},[123,136972,51318],{"class":133},[123,136974,136975,136977,136979],{"class":125,"line":1210},[123,136976,51796],{"class":133},[123,136978,66636],{"class":51311},[123,136980,51318],{"class":133},[35,136982],{"style":126405,"src":136983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[65,136985,136987],{"id":136986},"_142-css新特性","14.2 CSS新特性",[94,136989,136991],{"id":136990},"_1421-新增选择器","14.2.1 新增选择器",[22008,136993,136995],{"id":136994},"_14211-属性选择器","14.2.1.1 属性选择器",[35,136997],{"style":126405,"src":136998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[114,137000,137002],{"className":126549,"code":137001,"language":126551,"meta":37,"style":37},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[120,137003,137004,137019,137035],{"__ignoreMap":37},[123,137005,137006,137008,137010,137012,137014,137016],{"class":125,"line":126},[123,137007,53832],{"class":51311},[123,137009,1024],{"class":133},[123,137011,103104],{"class":1972},[123,137013,179],{"class":129},[123,137015,62710],{"class":238},[123,137017,137018],{"class":133},"] {\n",[123,137020,137021,137023,137025,137027,137029,137031,137033],{"class":125,"line":45},[123,137022,70907],{"class":182},[123,137024,51448],{"class":133},[123,137026,351],{"class":182},[123,137028,51503],{"class":129},[123,137030,51532],{"class":182},[123,137032,130129],{"class":182},[123,137034,1300],{"class":133},[123,137036,137037],{"class":125,"line":1189},[123,137038,1574],{"class":133},[35,137040],{"style":126405,"src":137041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137043,163],{},[1141,137045,137046,137049,137052,137055],{},[80,137047,137048],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[80,137050,137051],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[80,137053,137054],{},"属性选择器也可以选择出来自定义的属性",[80,137056,137057,137059],{},[283,137058,9035],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[22008,137061,137063],{"id":137062},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[35,137065],{"style":126405,"src":137066},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[77,137068,137069],{},[80,137070,137071],{},"fist-child",[114,137073,137075],{"className":126549,"code":137074,"language":126551,"meta":37,"style":37},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[120,137076,137077,137082,137097,137117,137135],{"__ignoreMap":37},[123,137078,137079],{"class":125,"line":126},[123,137080,137081],{"class":192},"\u002F* 属性选择器 *\u002F\n",[123,137083,137084,137086,137088,137090,137092,137094],{"class":125,"line":45},[123,137085,53832],{"class":51311},[123,137087,1024],{"class":133},[123,137089,103104],{"class":1972},[123,137091,179],{"class":129},[123,137093,62710],{"class":238},[123,137095,137096],{"class":133},"] { }\n",[123,137098,137099,137101,137103,137105,137108,137111,137114],{"class":125,"line":1189},[123,137100,53832],{"class":51311},[123,137102,1024],{"class":133},[123,137104,14704],{"class":1972},[123,137106,137107],{"class":129},"^=",[123,137109,137110],{"class":238},"\"icon\"",[123,137112,137113],{"class":133},"] { }  ",[123,137115,137116],{"class":192},"\u002F* 以 icon 开头 *\u002F\n",[123,137118,137119,137121,137123,137125,137128,137130,137132],{"class":125,"line":1204},[123,137120,53832],{"class":51311},[123,137122,1024],{"class":133},[123,137124,14704],{"class":1972},[123,137126,137127],{"class":129},"$=",[123,137129,137110],{"class":238},[123,137131,137113],{"class":133},[123,137133,137134],{"class":192},"\u002F* 以 icon 结尾 *\u002F\n",[123,137136,137137,137139,137141,137143,137146,137148,137150],{"class":125,"line":1210},[123,137138,53832],{"class":51311},[123,137140,1024],{"class":133},[123,137142,14704],{"class":1972},[123,137144,137145],{"class":129},"*=",[123,137147,137110],{"class":238},[123,137149,137113],{"class":133},[123,137151,137152],{"class":192},"\u002F* 包含 icon *\u002F\n",[14,137154,137155],{},"ul的第一个儿子文本为红色",[14,137157,137158],{},"一定要在冒号前加空格，不然就是选中所有的了",[114,137160,137162],{"className":126549,"code":137161,"language":126551,"meta":37,"style":37},".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",[120,137163,137164,137170,137180,137184,137188,137193,137206,137219,137235,137252,137269],{"__ignoreMap":37},[123,137165,137166,137168],{"class":125,"line":126},[123,137167,126840],{"class":1972},[123,137169,15582],{"class":133},[123,137171,137172,137174,137176,137178],{"class":125,"line":45},[123,137173,70916],{"class":182},[123,137175,51448],{"class":133},[123,137177,57432],{"class":182},[123,137179,1300],{"class":133},[123,137181,137182],{"class":125,"line":1189},[123,137183,1574],{"class":133},[123,137185,137186],{"class":125,"line":1204},[123,137187,136010],{"class":133},[123,137189,137190],{"class":125,"line":1210},[123,137191,137192],{"class":192},"\u002F* 结构伪类选择器 *\u002F\n",[123,137194,137195,137197,137200,137203],{"class":125,"line":1224},[123,137196,80],{"class":51311},[123,137198,137199],{"class":1972},":first-child",[123,137201,137202],{"class":133}," { }           ",[123,137204,137205],{"class":192},"\u002F* 第一个 *\u002F\n",[123,137207,137208,137210,137213,137216],{"class":125,"line":1230},[123,137209,80],{"class":51311},[123,137211,137212],{"class":1972},":last-child",[123,137214,137215],{"class":133}," { }            ",[123,137217,137218],{"class":192},"\u002F* 最后一个 *\u002F\n",[123,137220,137221,137223,137225,137227,137229,137232],{"class":125,"line":1321},[123,137222,80],{"class":51311},[123,137224,129463],{"class":1972},[123,137226,134],{"class":133},[123,137228,211],{"class":182},[123,137230,137231],{"class":133},") { }          ",[123,137233,137234],{"class":192},"\u002F* 第2个 *\u002F\n",[123,137236,137237,137239,137241,137243,137246,137249],{"class":125,"line":1327},[123,137238,80],{"class":51311},[123,137240,129463],{"class":1972},[123,137242,134],{"class":133},[123,137244,137245],{"class":182},"2n",[123,137247,137248],{"class":133},") { }         ",[123,137250,137251],{"class":192},"\u002F* 偶数 *\u002F\n",[123,137253,137254,137256,137258,137260,137263,137266],{"class":125,"line":1339},[123,137255,80],{"class":51311},[123,137257,129463],{"class":1972},[123,137259,134],{"class":133},[123,137261,137262],{"class":182},"2n+1",[123,137264,137265],{"class":133},") { }       ",[123,137267,137268],{"class":192},"\u002F* 奇数 *\u002F\n",[123,137270,137271,137273,137275,137277,137280,137282],{"class":125,"line":1621},[123,137272,80],{"class":51311},[123,137274,129463],{"class":1972},[123,137276,134],{"class":133},[123,137278,137279],{"class":182},"-n+3",[123,137281,137265],{"class":133},[123,137283,137284],{"class":192},"\u002F* 前3个 *\u002F\n",[51622,137286,137289],{"className":137287},[137288],"example","\n  示例内容\n",[14,137291,137292],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1141,137294,137295],{},[80,137296,137297,137300],{},[120,137298,137299],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137302,137303],{},"也就是说它选择的是熊大",[77,137305,137306],{"start":1224},[80,137307,137308],{},"权重",[114,137310,137312],{"className":126549,"code":137311,"language":126551,"meta":37,"style":37},"\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",[120,137313,137314,137318,137328,137338,137352,137366,137380],{"__ignoreMap":37},[123,137315,137316],{"class":125,"line":126},[123,137317,137192],{"class":192},[123,137319,137320,137322,137324,137326],{"class":125,"line":45},[123,137321,80],{"class":51311},[123,137323,137199],{"class":1972},[123,137325,137202],{"class":133},[123,137327,137205],{"class":192},[123,137329,137330,137332,137334,137336],{"class":125,"line":1189},[123,137331,80],{"class":51311},[123,137333,137212],{"class":1972},[123,137335,137215],{"class":133},[123,137337,137218],{"class":192},[123,137339,137340,137342,137344,137346,137348,137350],{"class":125,"line":1204},[123,137341,80],{"class":51311},[123,137343,129463],{"class":1972},[123,137345,134],{"class":133},[123,137347,211],{"class":182},[123,137349,137231],{"class":133},[123,137351,137234],{"class":192},[123,137353,137354,137356,137358,137360,137362,137364],{"class":125,"line":1210},[123,137355,80],{"class":51311},[123,137357,129463],{"class":1972},[123,137359,134],{"class":133},[123,137361,137245],{"class":182},[123,137363,137248],{"class":133},[123,137365,137251],{"class":192},[123,137367,137368,137370,137372,137374,137376,137378],{"class":125,"line":1224},[123,137369,80],{"class":51311},[123,137371,129463],{"class":1972},[123,137373,134],{"class":133},[123,137375,137262],{"class":182},[123,137377,137265],{"class":133},[123,137379,137268],{"class":192},[123,137381,137382,137384,137386,137388,137390,137392],{"class":125,"line":1230},[123,137383,80],{"class":51311},[123,137385,129463],{"class":1972},[123,137387,134],{"class":133},[123,137389,137279],{"class":182},[123,137391,137265],{"class":133},[123,137393,137284],{"class":192},[14,137395,137396],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[22008,137398,137400],{"id":137399},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137402,137403],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[35,137405],{"style":126405,"src":137406},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[77,137408,137409],{},[80,137410,163],{},[1141,137412,137413,137416,137419,137422,137425,137428],{},[80,137414,137415],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[80,137417,137418],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[80,137420,137421],{},"语法： element::before {}",[80,137423,137424],{},"before 和 after 必须有 content 属性",[80,137426,137427],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[80,137429,137430],{},"伪元素选择器和标签选择器一样，权重为 1",[77,137432,137433],{"start":45},[80,137434,137435],{},"实例",[114,137437,137438],{"className":126549,"code":137311,"language":126551,"meta":37,"style":37},[120,137439,137440,137444,137454,137464,137478,137492,137506],{"__ignoreMap":37},[123,137441,137442],{"class":125,"line":126},[123,137443,137192],{"class":192},[123,137445,137446,137448,137450,137452],{"class":125,"line":45},[123,137447,80],{"class":51311},[123,137449,137199],{"class":1972},[123,137451,137202],{"class":133},[123,137453,137205],{"class":192},[123,137455,137456,137458,137460,137462],{"class":125,"line":1189},[123,137457,80],{"class":51311},[123,137459,137212],{"class":1972},[123,137461,137215],{"class":133},[123,137463,137218],{"class":192},[123,137465,137466,137468,137470,137472,137474,137476],{"class":125,"line":1204},[123,137467,80],{"class":51311},[123,137469,129463],{"class":1972},[123,137471,134],{"class":133},[123,137473,211],{"class":182},[123,137475,137231],{"class":133},[123,137477,137234],{"class":192},[123,137479,137480,137482,137484,137486,137488,137490],{"class":125,"line":1210},[123,137481,80],{"class":51311},[123,137483,129463],{"class":1972},[123,137485,134],{"class":133},[123,137487,137245],{"class":182},[123,137489,137248],{"class":133},[123,137491,137251],{"class":192},[123,137493,137494,137496,137498,137500,137502,137504],{"class":125,"line":1224},[123,137495,80],{"class":51311},[123,137497,129463],{"class":1972},[123,137499,134],{"class":133},[123,137501,137262],{"class":182},[123,137503,137265],{"class":133},[123,137505,137268],{"class":192},[123,137507,137508,137510,137512,137514,137516,137518],{"class":125,"line":1230},[123,137509,80],{"class":51311},[123,137511,129463],{"class":1972},[123,137513,134],{"class":133},[123,137515,137279],{"class":182},[123,137517,137265],{"class":133},[123,137519,137284],{"class":192},[35,137521],{"style":126405,"src":137522},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[77,137524,137525],{"start":1189},[80,137526,137527],{},"使用场景1",[35,137529],{"style":126405,"src":137530},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137532,137533],{},"不需要再加盒子来整红色那部分了",[114,137535,137537],{"className":126549,"code":137536,"language":126551,"meta":37,"style":37},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[120,137538,137539,137544,137553,137564,137574,137578,137587,137598,137608],{"__ignoreMap":37},[123,137540,137541],{"class":125,"line":126},[123,137542,137543],{"class":192},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[123,137545,137546,137548,137551],{"class":125,"line":45},[123,137547,51622],{"class":51311},[123,137549,137550],{"class":1972},"::before",[123,137552,15582],{"class":133},[123,137554,137555,137558,137560,137562],{"class":125,"line":1189},[123,137556,137557],{"class":182},"  content",[123,137559,51448],{"class":133},[123,137561,7662],{"class":238},[123,137563,1300],{"class":133},[123,137565,137566,137568,137570,137572],{"class":125,"line":1204},[123,137567,128165],{"class":182},[123,137569,51448],{"class":133},[123,137571,60880],{"class":182},[123,137573,1300],{"class":133},[123,137575,137576],{"class":125,"line":1210},[123,137577,1574],{"class":133},[123,137579,137580,137582,137585],{"class":125,"line":1224},[123,137581,51622],{"class":51311},[123,137583,137584],{"class":1972},"::after",[123,137586,15582],{"class":133},[123,137588,137589,137591,137593,137596],{"class":125,"line":1230},[123,137590,137557],{"class":182},[123,137592,51448],{"class":133},[123,137594,137595],{"class":238},"\"→\"",[123,137597,1300],{"class":133},[123,137599,137600,137602,137604,137606],{"class":125,"line":1321},[123,137601,70916],{"class":182},[123,137603,51448],{"class":133},[123,137605,62081],{"class":182},[123,137607,1300],{"class":133},[123,137609,137610],{"class":125,"line":1327},[123,137611,1574],{"class":133},[35,137613],{"style":126405,"src":137614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,137616,137617],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[35,137619],{"style":126405,"src":137620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,137622,137623],{},"但是在引用时需要先转义一下",[14,137625,137626],{},"content='\\e930'",[77,137628,137629],{"start":1204},[80,137630,137631],{},"使用场景2",[14,137633,137634],{},"仿土豆效果",[14,137636,137637],{},"通过使用伪元素选择器可以减少body中盒子的数量",[114,137639,137640],{"className":126549,"code":137536,"language":126551,"meta":37,"style":37},[120,137641,137642,137646,137654,137664,137674,137678,137686,137696,137706],{"__ignoreMap":37},[123,137643,137644],{"class":125,"line":126},[123,137645,137543],{"class":192},[123,137647,137648,137650,137652],{"class":125,"line":45},[123,137649,51622],{"class":51311},[123,137651,137550],{"class":1972},[123,137653,15582],{"class":133},[123,137655,137656,137658,137660,137662],{"class":125,"line":1189},[123,137657,137557],{"class":182},[123,137659,51448],{"class":133},[123,137661,7662],{"class":238},[123,137663,1300],{"class":133},[123,137665,137666,137668,137670,137672],{"class":125,"line":1204},[123,137667,128165],{"class":182},[123,137669,51448],{"class":133},[123,137671,60880],{"class":182},[123,137673,1300],{"class":133},[123,137675,137676],{"class":125,"line":1210},[123,137677,1574],{"class":133},[123,137679,137680,137682,137684],{"class":125,"line":1224},[123,137681,51622],{"class":51311},[123,137683,137584],{"class":1972},[123,137685,15582],{"class":133},[123,137687,137688,137690,137692,137694],{"class":125,"line":1230},[123,137689,137557],{"class":182},[123,137691,51448],{"class":133},[123,137693,137595],{"class":238},[123,137695,1300],{"class":133},[123,137697,137698,137700,137702,137704],{"class":125,"line":1321},[123,137699,70916],{"class":182},[123,137701,51448],{"class":133},[123,137703,62081],{"class":182},[123,137705,1300],{"class":133},[123,137707,137708],{"class":125,"line":1327},[123,137709,1574],{"class":133},[35,137711],{"style":126405,"src":137712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[77,137714,137715],{"start":1210},[80,137716,137717],{},"使用场景3",[14,137719,137720],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[114,137722,137724],{"className":126549,"code":137723,"language":126551,"meta":37,"style":37},".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",[120,137725,137726,137732,137742,137746,137750,137754,137762,137772,137782,137786,137794,137804,137814],{"__ignoreMap":37},[123,137727,137728,137730],{"class":125,"line":126},[123,137729,130397],{"class":1972},[123,137731,15582],{"class":133},[123,137733,137734,137736,137738,137740],{"class":125,"line":45},[123,137735,131029],{"class":182},[123,137737,51448],{"class":133},[123,137739,23746],{"class":182},[123,137741,1300],{"class":133},[123,137743,137744],{"class":125,"line":1189},[123,137745,1574],{"class":133},[123,137747,137748],{"class":125,"line":1204},[123,137749,136010],{"class":133},[123,137751,137752],{"class":125,"line":1210},[123,137753,137543],{"class":192},[123,137755,137756,137758,137760],{"class":125,"line":1224},[123,137757,51622],{"class":51311},[123,137759,137550],{"class":1972},[123,137761,15582],{"class":133},[123,137763,137764,137766,137768,137770],{"class":125,"line":1230},[123,137765,137557],{"class":182},[123,137767,51448],{"class":133},[123,137769,7662],{"class":238},[123,137771,1300],{"class":133},[123,137773,137774,137776,137778,137780],{"class":125,"line":1321},[123,137775,128165],{"class":182},[123,137777,51448],{"class":133},[123,137779,60880],{"class":182},[123,137781,1300],{"class":133},[123,137783,137784],{"class":125,"line":1327},[123,137785,1574],{"class":133},[123,137787,137788,137790,137792],{"class":125,"line":1339},[123,137789,51622],{"class":51311},[123,137791,137584],{"class":1972},[123,137793,15582],{"class":133},[123,137795,137796,137798,137800,137802],{"class":125,"line":1621},[123,137797,137557],{"class":182},[123,137799,51448],{"class":133},[123,137801,137595],{"class":238},[123,137803,1300],{"class":133},[123,137805,137806,137808,137810,137812],{"class":125,"line":1626},[123,137807,70916],{"class":182},[123,137809,51448],{"class":133},[123,137811,62081],{"class":182},[123,137813,1300],{"class":133},[123,137815,137816],{"class":125,"line":1632},[123,137817,1574],{"class":133},[14,137819,137820],{},"div {\nmargin: 0 auto;\n}",[114,137822,137825],{"className":137823,"code":137824,"language":5197},[5195],"\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",[120,137826,137824],{"__ignoreMap":37},[14,137828,137829],{},"如果想让多个元素都发生变化",[14,137831,137832],{},"不能如下操作：",[14,137834,137835],{},"transition: width 2s ease 0.5s;",[14,137837,137838],{},"transition: height 2s ease 0.5s;不对！！！",[14,137840,137841],{},"上方会样式冲突，导致不显示任何过渡效果",[14,137843,137844],{},"使用如下：加逗号隔开",[14,137846,137847],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,137849,137850],{},"transition all 2s ease;",[94,137852,137854],{"id":137853},"_1426-过渡练习","14.2.6 过渡练习",[77,137856,137857],{},[80,137858,137859],{},"进度条",[35,137861],{"style":126405,"src":137862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[114,137864,137866],{"className":126549,"code":137865,"language":126551,"meta":37,"style":37},"div {\n  transition: all 0.3s ease;\n}\n",[120,137867,137868,137874,137892],{"__ignoreMap":37},[123,137869,137870,137872],{"class":125,"line":126},[123,137871,51622],{"class":51311},[123,137873,15582],{"class":133},[123,137875,137876,137879,137881,137883,137886,137888,137890],{"class":125,"line":45},[123,137877,137878],{"class":182},"  transition",[123,137880,51448],{"class":133},[123,137882,28132],{"class":182},[123,137884,137885],{"class":182}," 0.3",[123,137887,829],{"class":129},[123,137889,78691],{"class":182},[123,137891,1300],{"class":133},[123,137893,137894],{"class":125,"line":1189},[123,137895,1574],{"class":133},[77,137897,137898],{"start":45},[80,137899,137900],{},"小米logo",[14,137902,137903],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[114,137905,137907],{"className":126549,"code":137906,"language":126551,"meta":37,"style":37},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[120,137908,137909,137914,137920,137936,137941],{"__ignoreMap":37},[123,137910,137911],{"class":125,"line":126},[123,137912,137913],{"class":192},"\u002F* CSS3 过渡 *\u002F\n",[123,137915,137916,137918],{"class":125,"line":45},[123,137917,51622],{"class":51311},[123,137919,15582],{"class":133},[123,137921,137922,137924,137926,137928,137930,137932,137934],{"class":125,"line":1189},[123,137923,137878],{"class":182},[123,137925,51448],{"class":133},[123,137927,28132],{"class":182},[123,137929,137885],{"class":182},[123,137931,829],{"class":129},[123,137933,78691],{"class":182},[123,137935,1300],{"class":133},[123,137937,137938],{"class":125,"line":1204},[123,137939,137940],{"class":192},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[123,137942,137943],{"class":125,"line":1210},[123,137944,1574],{"class":133},[14,137946,137947],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5136,137949,137950],{},"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":37,"searchDepth":45,"depth":45,"links":137952},[137953,137958],{"id":136283,"depth":45,"text":136284,"children":137954},[137955,137956,137957],{"id":136287,"depth":1189,"text":136288},{"id":136364,"depth":1189,"text":136365},{"id":136695,"depth":1189,"text":136696},{"id":136986,"depth":45,"text":136987,"children":137959},[137960,137961],{"id":136990,"depth":1189,"text":136991},{"id":137853,"depth":1189,"text":137854},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136275,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":137968,"title":137969,"body":137970,"description":47,"extension":48,"meta":139714,"navigation":50,"path":139715,"seo":139716,"stem":139717,"__hash__":139718},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":137971,"toc":139695},[137972,137975,137979,137982,137988,137994,137998,138000,138003,138006,138009,138012,138015,138018,138021,138025,138029,138032,138035,138038,138042,138045,138048,138053,138056,138059,138062,138066,138069,138078,138081,138084,138088,138091,138094,138099,138106,138120,138128,138135,138140,138143,138146,138149,138156,138160,138166,138172,138175,138178,138183,138189,138191,138199,138204,138207,138213,138215,138220,138225,138228,138230,138235,138238,138243,138248,138282,138286,138290,138293,138297,138300,138386,138389,138426,138429,138465,138469,138474,138487,138541,138543,138571,138573,138601,138607,138621,138623,138667,138669,138713,138716,138723,138734,138736,138763,138765,138791,138798,138814,138816,138910,138912,139006,139013,139016,139021,139027,139101,139104,139106,139142,139144,139180,139183,139190,139209,139212,139215,139217,139242,139244,139268,139271,139274,139304,139308,139311,139374,139376,139442,139444,139508,139511,139543,139545,139571,139573,139599,139602,139633,139635,139661,139663,139689,139692],[10,137973,137969],{"id":137974},"_15-品优购项目上篇-搭建与公共模块",[65,137976,137978],{"id":137977},"_151-项目规划","15.1 项目规划",[35,137980],{"style":126405,"src":137981},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,137983,137984,137987],{},[283,137985,137986],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,137989,137990,137993],{},[283,137991,137992],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[65,137995,137997],{"id":137996},"_152-项目介绍","15.2 项目介绍",[14,137999,137986],{},[35,138001],{"style":126405,"src":138002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,138004,138005],{},"主页：",[35,138007],{"style":126405,"src":138008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,138010,138011],{},"列表页：",[35,138013],{"style":126405,"src":138014},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138016,138017],{},"注册页：",[35,138019],{"style":126405,"src":138020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[65,138022,138024],{"id":138023},"_153-项目搭建工作","15.3 项目搭建工作",[94,138026,138028],{"id":138027},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[35,138030],{"style":126405,"src":138031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138033,138034],{},"经常更换的图片要放到upload文件夹中",[14,138036,138037],{},"不经常换的放到images文件夹中",[94,138039,138041],{"id":138040},"_1532-创建文件如下","15.3.2 创建文件如下",[35,138043],{"style":126405,"src":138044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[35,138046],{"style":126405,"src":138047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138049,138050],{},[283,138051,138052],{},"初始化样式：",[14,138054,138055],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138057,138058],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138060,138061],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[94,138063,138065],{"id":138064},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138067,138068],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138070,138071,138072,138077],{},"这里最典型的应用就是 ",[283,138073,138074],{},[120,138075,138076],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[35,138079],{"style":126405,"src":138080},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138082,138083],{},"通过link方法来引入",[94,138085,138087],{"id":138086},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[35,138089],{"style":126405,"src":138090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138092,138093],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[77,138095,138096],{},[80,138097,138098],{},"制作favicon图标",[14,138100,138101,138102,138105],{},"①把品优购图标切成 ",[120,138103,138104],{},"png"," 图片",[14,138107,138108,138109,138111,138112,138115,138116],{},"②把 ",[120,138110,138104],{}," 图片转换为 ",[120,138113,138114],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[372,138117,138118],{"href":138118,"rel":138119},"http:\u002F\u002Fwww.bitbug.net\u002F",[23875],[77,138121,138122,138125],{"start":45},[80,138123,138124],{},"favicon图标放到网站根目录下",[80,138126,138127],{},"HTML页面引入favicon",[14,138129,138130,138131,138134],{},"在html 页面里面的 ",[120,138132,138133],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138136,138137],{},[120,138138,138139],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138141,138142],{},"复制这行代码或者在生成这个的网站进行复制",[35,138144],{"style":126405,"src":138145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138147,138148],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138150,138151,138152],{},"例如:",[372,138153,138154],{"href":138154,"rel":138155},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23875],[94,138157,138159],{"id":138158},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138161,138162,138165],{},[283,138163,138164],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138167,138168,138171],{},[283,138169,138170],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138173,138174],{},"页面必须有三个标签用来符合 SEO 优化",[35,138176],{"style":126405,"src":138177},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[77,138179,138180],{},[80,138181,138182],{},"title网站标题",[14,138184,138185,138188],{},[283,138186,138187],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138190,68801],{},[1141,138192,138193,138196],{},[80,138194,138195],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[80,138197,138198],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[77,138200,138201],{"start":45},[80,138202,138203],{},"description网站描述",[14,138205,138206],{},"简要说明我们网站主要是做什么的",[14,138208,138209,138212],{},[283,138210,138211],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138214,68801],{},[14,138216,138217],{},[120,138218,138219],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[77,138221,138222],{"start":1189},[80,138223,138224],{},"keywords关键词",[14,138226,138227],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138229,68801],{},[14,138231,138232],{},[120,138233,138234],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138236,138237],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138239,138240],{},[283,138241,138242],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[77,138244,138245],{"start":1204},[80,138246,138247],{},"代码总结",[114,138249,138250],{"className":127296,"code":130653,"language":127298,"meta":37,"style":37},[120,138251,138252,138256,138270,138274],{"__ignoreMap":37},[123,138253,138254],{"class":125,"line":126},[123,138255,130660],{"class":192},[123,138257,138258,138260,138262,138264,138266,138268],{"class":125,"line":45},[123,138259,1044],{"class":133},[123,138261,51622],{"class":51311},[123,138263,53497],{"class":1972},[123,138265,179],{"class":133},[123,138267,130673],{"class":238},[123,138269,51318],{"class":133},[123,138271,138272],{"class":125,"line":1189},[123,138273,130680],{"class":133},[123,138275,138276,138278,138280],{"class":125,"line":1204},[123,138277,51796],{"class":133},[123,138279,51622],{"class":51311},[123,138281,51318],{"class":133},[65,138283,138285],{"id":138284},"_154-项目公共部分制作","15.4 项目公共部分制作",[94,138287,138289],{"id":138288},"_1541-常用模块类命名","15.4.1 常用模块类命名",[35,138291],{"style":126405,"src":138292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[94,138294,138296],{"id":138295},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138298,138299],{},"布局思路：",[1141,138301,138302,138305,138308,138330,138363],{},[80,138303,138304],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[80,138306,138307],{},"里面包含版心的盒子",[80,138309,138310,138311],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1141,138312,138313,138321,138327],{},[80,138314,138315,138316,21510,138318,138320],{},"1 号盒子 里面包含一个",[120,138317,1141],{},[120,138319,1141],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[80,138322,138323,138324,138326],{},"里面的内容是水平排列，所以需要给",[120,138325,80],{},"设置浮动",[80,138328,138329],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[80,138331,138332,138333],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1141,138334,138335,138349,138354],{},[80,138336,138337,138338,21510,138340,138342,138343,138345,138346,138348],{},"2 号盒子 里面包含一个",[120,138339,1141],{},[120,138341,1141],{},"包裹",[120,138344,80],{},"，中间的",[120,138347,1055],{},"可以用样式去设置，也可以用字符 |",[80,138350,138351,138352,138326],{},"里面内容水平排列，给",[120,138353,80],{},[80,138355,138356,138357,138359,138360,138362],{},"找到里面所有偶数的 ",[120,138358,80],{}," 设置样式（偶数的 ",[120,138361,80],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[80,138364,138365,138366],{},"需要用到字体图标",[1141,138367,138368,138374,138377,138380,138383],{},[80,138369,138370,138371],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[120,138372,138373],{},"arrow-icon",[80,138375,138376],{},"先要引入字体图片的资源",[80,138378,138379],{},"在样式里面利用 font-face 来进行声明",[80,138381,138382],{},"在伪元素的 content属性设置 图标的编码",[80,138384,138385],{},"给伪元素设置font-family属性",[14,138387,138388],{},"结构实例代码：",[114,138390,138392],{"className":126549,"code":138391,"language":126551,"meta":37,"style":37},"div::before {\n  content: \"\";\n  display: block;\n}\n",[120,138393,138394,138402,138412,138422],{"__ignoreMap":37},[123,138395,138396,138398,138400],{"class":125,"line":126},[123,138397,51622],{"class":51311},[123,138399,137550],{"class":1972},[123,138401,15582],{"class":133},[123,138403,138404,138406,138408,138410],{"class":125,"line":45},[123,138405,137557],{"class":182},[123,138407,51448],{"class":133},[123,138409,7662],{"class":238},[123,138411,1300],{"class":133},[123,138413,138414,138416,138418,138420],{"class":125,"line":1189},[123,138415,128165],{"class":182},[123,138417,51448],{"class":133},[123,138419,60880],{"class":182},[123,138421,1300],{"class":133},[123,138423,138424],{"class":125,"line":1204},[123,138425,1574],{"class":133},[14,138427,138428],{},"样式实例代码：",[114,138430,138431],{"className":126549,"code":138391,"language":126551,"meta":37,"style":37},[120,138432,138433,138441,138451,138461],{"__ignoreMap":37},[123,138434,138435,138437,138439],{"class":125,"line":126},[123,138436,51622],{"class":51311},[123,138438,137550],{"class":1972},[123,138440,15582],{"class":133},[123,138442,138443,138445,138447,138449],{"class":125,"line":45},[123,138444,137557],{"class":182},[123,138446,51448],{"class":133},[123,138448,7662],{"class":238},[123,138450,1300],{"class":133},[123,138452,138453,138455,138457,138459],{"class":125,"line":1189},[123,138454,128165],{"class":182},[123,138456,51448],{"class":133},[123,138458,60880],{"class":182},[123,138460,1300],{"class":133},[123,138462,138463],{"class":125,"line":1204},[123,138464,1574],{"class":133},[94,138466,138468],{"id":138467},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1141,138470,138471],{},[80,138472,138473],{},"header 盒子必须要有高度",[14,138475,138476,138477,138479,138480],{},"1 号盒子是 ",[120,138478,131561],{}," 标志定位，在正常开发过程中， ",[283,138481,138482,138483,138486],{},"logo的布局其实是有讲究的，需要进行 ",[120,138484,138485],{},"logoSEO","的优化 （★★★）",[1141,138488,138489,138497,138505,138532],{},[80,138490,138491,138493,138494,138496],{},[120,138492,131561],{}," 里面首先放一个 ",[120,138495,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[80,138498,138499,138501,138502,138504],{},[120,138500,10],{}," 里面再放一个链接，可以返回首页的，把 ",[120,138503,131561],{}," 的背景图片给链接即可",[80,138506,138507,138508],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1141,138509,138510,138525],{},[80,138511,138512,138513,138516,138517,138520,138521,138524],{},"方法1：",[120,138514,138515],{},"text-indent"," 移到盒子外面（",[120,138518,138519],{},"text-indent: -9999px",") ，然后 ",[120,138522,138523],{},"overflow:hidden"," ，淘宝的做法",[80,138526,138527,138528,138531],{},"方法2：直接给 ",[120,138529,138530],{},"font-size: 0;"," 就看不到文字了，京东的做法",[80,138533,138534,138535,138537,138538,138540],{},"最后给链接一个 ",[120,138536,51418],{}," 属性，这样鼠标放到 ",[120,138539,131561],{}," 上就可以看到提示文字了",[14,138542,138388],{},[114,138544,138545],{"className":127296,"code":131782,"language":127298,"meta":37,"style":37},[120,138546,138547],{"__ignoreMap":37},[123,138548,138549,138551,138553,138555,138557,138559,138561,138563,138565,138567,138569],{"class":125,"line":126},[123,138550,1044],{"class":133},[123,138552,372],{"class":51311},[123,138554,61068],{"class":1972},[123,138556,179],{"class":133},[123,138558,131797],{"class":238},[123,138560,131800],{"class":1972},[123,138562,179],{"class":133},[123,138564,131805],{"class":238},[123,138566,131808],{"class":133},[123,138568,372],{"class":51311},[123,138570,51318],{"class":133},[14,138572,138428],{},[114,138574,138575],{"className":127296,"code":131782,"language":127298,"meta":37,"style":37},[120,138576,138577],{"__ignoreMap":37},[123,138578,138579,138581,138583,138585,138587,138589,138591,138593,138595,138597,138599],{"class":125,"line":126},[123,138580,1044],{"class":133},[123,138582,372],{"class":51311},[123,138584,61068],{"class":1972},[123,138586,179],{"class":133},[123,138588,131797],{"class":238},[123,138590,131800],{"class":1972},[123,138592,179],{"class":133},[123,138594,131805],{"class":238},[123,138596,131808],{"class":133},[123,138598,372],{"class":51311},[123,138600,51318],{"class":133},[14,138602,138603,138604,138606],{},"2 号盒子是 ",[120,138605,131574],{}," 搜索模块定位",[1141,138608,138609,138612,138615,138618],{},[80,138610,138611],{},"search盒子利用定位的方式放在对应的位置",[80,138613,138614],{},"search盒子设置绝对定位，header盒子设置相对定位",[80,138616,138617],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[80,138619,138620],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,138622,138388],{},[114,138624,138625],{"className":126549,"code":131869,"language":126551,"meta":37,"style":37},[120,138626,138627,138649,138653,138663],{"__ignoreMap":37},[123,138628,138629,138631,138633,138635,138637,138639,138641,138643,138645,138647],{"class":125,"line":126},[123,138630,51622],{"class":51311},[123,138632,12445],{"class":133},[123,138634,14],{"class":51311},[123,138636,12445],{"class":133},[123,138638,10],{"class":51311},[123,138640,12445],{"class":133},[123,138642,1141],{"class":51311},[123,138644,12445],{"class":133},[123,138646,80],{"class":51311},[123,138648,15582],{"class":133},[123,138650,138651],{"class":125,"line":45},[123,138652,131898],{"class":192},[123,138654,138655,138657,138659,138661],{"class":125,"line":1189},[123,138656,128165],{"class":182},[123,138658,51448],{"class":133},[123,138660,60880],{"class":182},[123,138662,1300],{"class":133},[123,138664,138665],{"class":125,"line":1204},[123,138666,1574],{"class":133},[14,138668,138428],{},[114,138670,138671],{"className":126549,"code":131869,"language":126551,"meta":37,"style":37},[120,138672,138673,138695,138699,138709],{"__ignoreMap":37},[123,138674,138675,138677,138679,138681,138683,138685,138687,138689,138691,138693],{"class":125,"line":126},[123,138676,51622],{"class":51311},[123,138678,12445],{"class":133},[123,138680,14],{"class":51311},[123,138682,12445],{"class":133},[123,138684,10],{"class":51311},[123,138686,12445],{"class":133},[123,138688,1141],{"class":51311},[123,138690,12445],{"class":133},[123,138692,80],{"class":51311},[123,138694,15582],{"class":133},[123,138696,138697],{"class":125,"line":45},[123,138698,131898],{"class":192},[123,138700,138701,138703,138705,138707],{"class":125,"line":1189},[123,138702,128165],{"class":182},[123,138704,51448],{"class":133},[123,138706,60880],{"class":182},[123,138708,1300],{"class":133},[123,138710,138711],{"class":125,"line":1204},[123,138712,1574],{"class":133},[14,138714,138715],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,138717,138718,138719,138722],{},"3 号盒子是 ",[120,138720,138721],{},"hotwords"," 热词模块定位",[1141,138724,138725,138728,138731],{},[80,138726,138727],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[80,138729,138730],{},"给里面所有的a标签设置 左右10px的外边距",[80,138732,138733],{},"给第一个a标签设置文字变红色（#c81623）",[14,138735,138388],{},[114,138737,138739],{"className":126549,"code":138738,"language":126551,"meta":37,"style":37},"div {\n  margin: 0 auto;\n}\n",[120,138740,138741,138747,138759],{"__ignoreMap":37},[123,138742,138743,138745],{"class":125,"line":126},[123,138744,51622],{"class":51311},[123,138746,15582],{"class":133},[123,138748,138749,138751,138753,138755,138757],{"class":125,"line":45},[123,138750,70481],{"class":182},[123,138752,51448],{"class":133},[123,138754,325],{"class":182},[123,138756,51567],{"class":182},[123,138758,1300],{"class":133},[123,138760,138761],{"class":125,"line":1189},[123,138762,1574],{"class":133},[14,138764,138428],{},[114,138766,138767],{"className":126549,"code":138738,"language":126551,"meta":37,"style":37},[120,138768,138769,138775,138787],{"__ignoreMap":37},[123,138770,138771,138773],{"class":125,"line":126},[123,138772,51622],{"class":51311},[123,138774,15582],{"class":133},[123,138776,138777,138779,138781,138783,138785],{"class":125,"line":45},[123,138778,70481],{"class":182},[123,138780,51448],{"class":133},[123,138782,325],{"class":182},[123,138784,51567],{"class":182},[123,138786,1300],{"class":133},[123,138788,138789],{"class":125,"line":1189},[123,138790,1574],{"class":133},[14,138792,138793,138794,138797],{},"4 号盒子是 ",[120,138795,138796],{},"shopcar"," 购物车模块",[1141,138799,138800,138805,138808,138811],{},[80,138801,123332,138802,138804],{},[120,138803,138796],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[80,138806,138807],{},"count 统计部分用绝对定位做",[80,138809,138810],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[80,138812,138813],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,138815,138388],{},[114,138817,138818],{"className":126549,"code":131981,"language":126551,"meta":37,"style":37},[120,138819,138820,138824,138838,138842,138856,138860,138874,138878,138892,138896],{"__ignoreMap":37},[123,138821,138822],{"class":125,"line":126},[123,138823,131988],{"class":192},[123,138825,138826,138828,138830,138832,138834,138836],{"class":125,"line":45},[123,138827,131993],{"class":1972},[123,138829,79818],{"class":133},[123,138831,128909],{"class":182},[123,138833,51448],{"class":133},[123,138835,132002],{"class":182},[123,138837,129479],{"class":133},[123,138839,138840],{"class":125,"line":1189},[123,138841,132009],{"class":192},[123,138843,138844,138846,138848,138850,138852,138854],{"class":125,"line":1204},[123,138845,132014],{"class":1972},[123,138847,79818],{"class":133},[123,138849,128909],{"class":182},[123,138851,51448],{"class":133},[123,138853,54775],{"class":182},[123,138855,129479],{"class":133},[123,138857,138858],{"class":125,"line":1210},[123,138859,132029],{"class":192},[123,138861,138862,138864,138866,138868,138870,138872],{"class":125,"line":1224},[123,138863,132034],{"class":1972},[123,138865,79818],{"class":133},[123,138867,128909],{"class":182},[123,138869,51448],{"class":133},[123,138871,54842],{"class":182},[123,138873,129479],{"class":133},[123,138875,138876],{"class":125,"line":1230},[123,138877,132049],{"class":192},[123,138879,138880,138882,138884,138886,138888,138890],{"class":125,"line":1321},[123,138881,132054],{"class":1972},[123,138883,79818],{"class":133},[123,138885,128909],{"class":182},[123,138887,51448],{"class":133},[123,138889,86244],{"class":182},[123,138891,129479],{"class":133},[123,138893,138894],{"class":125,"line":1327},[123,138895,132069],{"class":192},[123,138897,138898,138900,138902,138904,138906,138908],{"class":125,"line":1339},[123,138899,132074],{"class":1972},[123,138901,79818],{"class":133},[123,138903,128909],{"class":182},[123,138905,51448],{"class":133},[123,138907,132083],{"class":182},[123,138909,129479],{"class":133},[14,138911,138428],{},[114,138913,138914],{"className":126549,"code":131981,"language":126551,"meta":37,"style":37},[120,138915,138916,138920,138934,138938,138952,138956,138970,138974,138988,138992],{"__ignoreMap":37},[123,138917,138918],{"class":125,"line":126},[123,138919,131988],{"class":192},[123,138921,138922,138924,138926,138928,138930,138932],{"class":125,"line":45},[123,138923,131993],{"class":1972},[123,138925,79818],{"class":133},[123,138927,128909],{"class":182},[123,138929,51448],{"class":133},[123,138931,132002],{"class":182},[123,138933,129479],{"class":133},[123,138935,138936],{"class":125,"line":1189},[123,138937,132009],{"class":192},[123,138939,138940,138942,138944,138946,138948,138950],{"class":125,"line":1204},[123,138941,132014],{"class":1972},[123,138943,79818],{"class":133},[123,138945,128909],{"class":182},[123,138947,51448],{"class":133},[123,138949,54775],{"class":182},[123,138951,129479],{"class":133},[123,138953,138954],{"class":125,"line":1210},[123,138955,132029],{"class":192},[123,138957,138958,138960,138962,138964,138966,138968],{"class":125,"line":1224},[123,138959,132034],{"class":1972},[123,138961,79818],{"class":133},[123,138963,128909],{"class":182},[123,138965,51448],{"class":133},[123,138967,54842],{"class":182},[123,138969,129479],{"class":133},[123,138971,138972],{"class":125,"line":1230},[123,138973,132049],{"class":192},[123,138975,138976,138978,138980,138982,138984,138986],{"class":125,"line":1321},[123,138977,132054],{"class":1972},[123,138979,79818],{"class":133},[123,138981,128909],{"class":182},[123,138983,51448],{"class":133},[123,138985,86244],{"class":182},[123,138987,129479],{"class":133},[123,138989,138990],{"class":125,"line":1327},[123,138991,132069],{"class":192},[123,138993,138994,138996,138998,139000,139002,139004],{"class":125,"line":1339},[123,138995,132074],{"class":1972},[123,138997,79818],{"class":133},[123,138999,128909],{"class":182},[123,139001,51448],{"class":133},[123,139003,132083],{"class":182},[123,139005,129479],{"class":133},[94,139007,139009,139010,139012],{"id":139008},"_1544-nav导航模块制作","15.4.4 ",[120,139011,53724],{},"导航模块制作",[35,139014],{"style":126405,"src":139015},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139017,139018,139020],{},[120,139019,53724],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139022,139023,139024],{},"1 号盒子左侧浮动，",[120,139025,139026],{},"dropdown",[1141,139028,139029,139039,139047,139053,139061,139071,139079,139090],{},[80,139030,139031,139032,101015,139035,139038],{},"1号盒子有讲究，根据相关性 里面包含 ",[120,139033,139034],{},".dt",[120,139036,139037],{},".dd"," 两个盒子",[80,139040,139041,139043,139044,139046],{},[120,139042,139034],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[120,139045,139037],{}," 挤到下面去了",[80,139048,139049,139050,139052],{},"给 ",[120,139051,139037],{}," 盒子设置宽度 和 高度，以及背景颜色",[80,139054,139049,139055,139057,139058,120234],{},[120,139056,139037],{}," 盒子里面定义 无序列表 （",[120,139059,139060],{},"ul > li > a",[80,139062,139063,139064,139066,139067,139070],{},"每个 ",[120,139065,80],{}," 都有一个高度（",[120,139068,139069],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[80,139072,139049,139073,139075,139076,120234],{},[120,139074,80],{}," 里面的a设置文字大小（",[120,139077,139078],{},"14px",[80,139080,139049,139081,139083,139084,139086,139087,139089],{},[120,139082,80],{}," 设置 ",[120,139085,127710],{},"，当鼠标移入的时候，让",[120,139088,80],{},"的背景变成白色，让里面的文字变成红色",[80,139091,139092,139094,139095,139097,139098,139100],{},[120,139093,80],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[120,139096,80],{},"的右侧，那么给",[120,139099,80],{},"设置相对定位",[14,139102,139103],{},"一定要注意相关性",[14,139105,138388],{},[114,139107,139108],{"className":126549,"code":138391,"language":126551,"meta":37,"style":37},[120,139109,139110,139118,139128,139138],{"__ignoreMap":37},[123,139111,139112,139114,139116],{"class":125,"line":126},[123,139113,51622],{"class":51311},[123,139115,137550],{"class":1972},[123,139117,15582],{"class":133},[123,139119,139120,139122,139124,139126],{"class":125,"line":45},[123,139121,137557],{"class":182},[123,139123,51448],{"class":133},[123,139125,7662],{"class":238},[123,139127,1300],{"class":133},[123,139129,139130,139132,139134,139136],{"class":125,"line":1189},[123,139131,128165],{"class":182},[123,139133,51448],{"class":133},[123,139135,60880],{"class":182},[123,139137,1300],{"class":133},[123,139139,139140],{"class":125,"line":1204},[123,139141,1574],{"class":133},[14,139143,138428],{},[114,139145,139146],{"className":126549,"code":138391,"language":126551,"meta":37,"style":37},[120,139147,139148,139156,139166,139176],{"__ignoreMap":37},[123,139149,139150,139152,139154],{"class":125,"line":126},[123,139151,51622],{"class":51311},[123,139153,137550],{"class":1972},[123,139155,15582],{"class":133},[123,139157,139158,139160,139162,139164],{"class":125,"line":45},[123,139159,137557],{"class":182},[123,139161,51448],{"class":133},[123,139163,7662],{"class":238},[123,139165,1300],{"class":133},[123,139167,139168,139170,139172,139174],{"class":125,"line":1189},[123,139169,128165],{"class":182},[123,139171,51448],{"class":133},[123,139173,60880],{"class":182},[123,139175,1300],{"class":133},[123,139177,139178],{"class":125,"line":1204},[123,139179,1574],{"class":133},[14,139181,139182],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139184,139185,139186,139189],{},"2 号盒子左侧浮动，",[120,139187,139188],{},"navitems"," 导航栏组",[1141,139191,139192,139197,139206],{},[80,139193,139194,139195],{},"里面结构是 ",[120,139196,139060],{},[80,139198,139199,139200,139202,139203,139205],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[120,139201,372],{},"左右的",[120,139204,30894],{},"把两侧撑开",[80,139207,139208],{},"让文字垂直居中（行高等于高度）",[35,139210],{"style":126405,"src":139211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139213,139214],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139216,138388],{},[114,139218,139220],{"className":126549,"code":139219,"language":126551,"meta":37,"style":37},".box {\n  float: left;\n}\n",[120,139221,139222,139228,139238],{"__ignoreMap":37},[123,139223,139224,139226],{"class":125,"line":126},[123,139225,130397],{"class":1972},[123,139227,15582],{"class":133},[123,139229,139230,139232,139234,139236],{"class":125,"line":45},[123,139231,131029],{"class":182},[123,139233,51448],{"class":133},[123,139235,23746],{"class":182},[123,139237,1300],{"class":133},[123,139239,139240],{"class":125,"line":1189},[123,139241,1574],{"class":133},[14,139243,138428],{},[114,139245,139246],{"className":126549,"code":139219,"language":126551,"meta":37,"style":37},[120,139247,139248,139254,139264],{"__ignoreMap":37},[123,139249,139250,139252],{"class":125,"line":126},[123,139251,130397],{"class":1972},[123,139253,15582],{"class":133},[123,139255,139256,139258,139260,139262],{"class":125,"line":45},[123,139257,131029],{"class":182},[123,139259,51448],{"class":133},[123,139261,23746],{"class":182},[123,139263,1300],{"class":133},[123,139265,139266],{"class":125,"line":1189},[123,139267,1574],{"class":133},[14,139269,139270],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[35,139272],{"style":126405,"src":139273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[114,139275,139276],{"className":126549,"code":130706,"language":126551,"meta":37,"style":37},[120,139277,139278,139284,139300],{"__ignoreMap":37},[123,139279,139280,139282],{"class":125,"line":126},[123,139281,51622],{"class":51311},[123,139283,15582],{"class":133},[123,139285,139286,139288,139290,139292,139294,139296,139298],{"class":125,"line":45},[123,139287,70907],{"class":182},[123,139289,51448],{"class":133},[123,139291,351],{"class":182},[123,139293,51503],{"class":129},[123,139295,51532],{"class":182},[123,139297,129941],{"class":182},[123,139299,1300],{"class":133},[123,139301,139302],{"class":125,"line":1189},[123,139303,1574],{"class":133},[94,139305,139307],{"id":139306},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[35,139309],{"style":126405,"src":139310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1141,139312,139313,139318,139323],{},[80,139314,139315,139317],{},[120,139316,131752],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[80,139319,139320,139322],{},[120,139321,131752],{}," 里面有一个大的版心",[80,139324,139325,139326,139329,139330],{},"版心里面包含 1 号盒子，",[120,139327,139328],{},"mod_service"," 是服务模块，mod 是模块的意思",[1141,139331,139332,139337,139350,139366,139371],{},[80,139333,139049,139334,139336],{},[120,139335,139328],{}," 设置高度（80px）和下边框",[80,139338,139339,139340,139343,139344,139346,139347,139349],{},"在里面定义 ",[120,139341,139342],{},"ul > li"," ,每个",[120,139345,80],{}," 宽度是300px 高度是 50px，给每个",[120,139348,80],{},"设置35px的左内边距",[80,139351,139352,139353,139355,139356,139358,139359,139361,139362,18420,139364,120234],{},"在每个",[120,139354,80],{},"里面，放一个 ",[120,139357,22920],{},"（里面放图标），一个",[120,139360,51622],{},"（里面放",[120,139363,51622],{},[120,139365,14],{},[80,139367,139049,139368,139370],{},[120,139369,22920],{},"设置浮动，让h5与这个div左右排列",[80,139372,139373],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139375,138388],{},[114,139377,139379],{"className":126549,"code":139378,"language":126551,"meta":37,"style":37},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[120,139380,139381,139387,139399,139411,139438],{"__ignoreMap":37},[123,139382,139383,139385],{"class":125,"line":126},[123,139384,134306],{"class":1972},[123,139386,15582],{"class":133},[123,139388,139389,139391,139393,139395,139397],{"class":125,"line":45},[123,139390,70579],{"class":182},[123,139392,51448],{"class":133},[123,139394,834],{"class":182},[123,139396,51503],{"class":129},[123,139398,1300],{"class":133},[123,139400,139401,139403,139405,139407,139409],{"class":125,"line":1189},[123,139402,70799],{"class":182},[123,139404,51448],{"class":133},[123,139406,834],{"class":182},[123,139408,51503],{"class":129},[123,139410,1300],{"class":133},[123,139412,139413,139415,139417,139419,139421,139423,139425,139427,139430,139432,139434,139436],{"class":125,"line":1204},[123,139414,70622],{"class":182},[123,139416,51448],{"class":133},[123,139418,61737],{"class":182},[123,139420,134],{"class":133},[123,139422,134345],{"class":5226},[123,139424,13724],{"class":133},[123,139426,61747],{"class":182},[123,139428,139429],{"class":182}," -10",[123,139431,51503],{"class":129},[123,139433,134364],{"class":182},[123,139435,51503],{"class":129},[123,139437,1300],{"class":133},[123,139439,139440],{"class":125,"line":1210},[123,139441,1574],{"class":133},[14,139443,138428],{},[114,139445,139446],{"className":126549,"code":139378,"language":126551,"meta":37,"style":37},[120,139447,139448,139454,139466,139478,139504],{"__ignoreMap":37},[123,139449,139450,139452],{"class":125,"line":126},[123,139451,134306],{"class":1972},[123,139453,15582],{"class":133},[123,139455,139456,139458,139460,139462,139464],{"class":125,"line":45},[123,139457,70579],{"class":182},[123,139459,51448],{"class":133},[123,139461,834],{"class":182},[123,139463,51503],{"class":129},[123,139465,1300],{"class":133},[123,139467,139468,139470,139472,139474,139476],{"class":125,"line":1189},[123,139469,70799],{"class":182},[123,139471,51448],{"class":133},[123,139473,834],{"class":182},[123,139475,51503],{"class":129},[123,139477,1300],{"class":133},[123,139479,139480,139482,139484,139486,139488,139490,139492,139494,139496,139498,139500,139502],{"class":125,"line":1204},[123,139481,70622],{"class":182},[123,139483,51448],{"class":133},[123,139485,61737],{"class":182},[123,139487,134],{"class":133},[123,139489,134345],{"class":5226},[123,139491,13724],{"class":133},[123,139493,61747],{"class":182},[123,139495,139429],{"class":182},[123,139497,51503],{"class":129},[123,139499,134364],{"class":182},[123,139501,51503],{"class":129},[123,139503,1300],{"class":133},[123,139505,139506],{"class":125,"line":1210},[123,139507,1574],{"class":133},[14,139509,139510],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1141,139512,139513,139516,139522,139528,139540],{},[80,139514,139515],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[80,139517,139518,139519,120234],{},"里面的布局利用 自定义列表来实现（",[120,139520,139521],{},"dl > dt + dd",[80,139523,139049,139524,139527],{},[120,139525,139526],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[80,139529,139049,139530,139533,139534,18420,139536,139539],{},[120,139531,139532],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[120,139535,139532],{},[120,139537,139538],{},"dd","之间有些距离",[80,139541,139542],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139544,138388],{},[114,139546,139547],{"className":126549,"code":138738,"language":126551,"meta":37,"style":37},[120,139548,139549,139555,139567],{"__ignoreMap":37},[123,139550,139551,139553],{"class":125,"line":126},[123,139552,51622],{"class":51311},[123,139554,15582],{"class":133},[123,139556,139557,139559,139561,139563,139565],{"class":125,"line":45},[123,139558,70481],{"class":182},[123,139560,51448],{"class":133},[123,139562,325],{"class":182},[123,139564,51567],{"class":182},[123,139566,1300],{"class":133},[123,139568,139569],{"class":125,"line":1189},[123,139570,1574],{"class":133},[14,139572,138428],{},[114,139574,139575],{"className":126549,"code":138738,"language":126551,"meta":37,"style":37},[120,139576,139577,139583,139595],{"__ignoreMap":37},[123,139578,139579,139581],{"class":125,"line":126},[123,139580,51622],{"class":51311},[123,139582,15582],{"class":133},[123,139584,139585,139587,139589,139591,139593],{"class":125,"line":45},[123,139586,70481],{"class":182},[123,139588,51448],{"class":133},[123,139590,325],{"class":182},[123,139592,51567],{"class":182},[123,139594,1300],{"class":133},[123,139596,139597],{"class":125,"line":1189},[123,139598,1574],{"class":133},[14,139600,139601],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1141,139603,139604,139613,139616,139627],{},[80,139605,139606,139607,139609,139610,139612],{},"分为上下两块，上面是 ",[120,139608,131769],{}," 友情链接，下面是 ",[120,139611,131762],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[80,139614,139615],{},"把内容分别复制到相应模块中",[80,139617,139049,139618,139620,139621,139623,139624,139626],{},[120,139619,131769],{}," 设置 15px 的下外边距，给",[120,139622,131769],{}," 里面 的 ",[120,139625,372],{}," 标签设置 左右 3px 的外边距",[80,139628,139629,139630,139632],{},"给",[120,139631,131762],{}," 设置 20px 的行高",[14,139634,138388],{},[114,139636,139637],{"className":126549,"code":138738,"language":126551,"meta":37,"style":37},[120,139638,139639,139645,139657],{"__ignoreMap":37},[123,139640,139641,139643],{"class":125,"line":126},[123,139642,51622],{"class":51311},[123,139644,15582],{"class":133},[123,139646,139647,139649,139651,139653,139655],{"class":125,"line":45},[123,139648,70481],{"class":182},[123,139650,51448],{"class":133},[123,139652,325],{"class":182},[123,139654,51567],{"class":182},[123,139656,1300],{"class":133},[123,139658,139659],{"class":125,"line":1189},[123,139660,1574],{"class":133},[14,139662,138428],{},[114,139664,139665],{"className":126549,"code":138738,"language":126551,"meta":37,"style":37},[120,139666,139667,139673,139685],{"__ignoreMap":37},[123,139668,139669,139671],{"class":125,"line":126},[123,139670,51622],{"class":51311},[123,139672,15582],{"class":133},[123,139674,139675,139677,139679,139681,139683],{"class":125,"line":45},[123,139676,70481],{"class":182},[123,139678,51448],{"class":133},[123,139680,325],{"class":182},[123,139682,51567],{"class":182},[123,139684,1300],{"class":133},[123,139686,139687],{"class":125,"line":1189},[123,139688,1574],{"class":133},[14,139690,139691],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5136,139693,139694],{},"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":37,"searchDepth":45,"depth":45,"links":139696},[139697,139698,139699,139706],{"id":137977,"depth":45,"text":137978},{"id":137996,"depth":45,"text":137997},{"id":138023,"depth":45,"text":138024,"children":139700},[139701,139702,139703,139704,139705],{"id":138027,"depth":1189,"text":138028},{"id":138040,"depth":1189,"text":138041},{"id":138064,"depth":1189,"text":138065},{"id":138086,"depth":1189,"text":138087},{"id":138158,"depth":1189,"text":138159},{"id":138284,"depth":45,"text":138285,"children":139707},[139708,139709,139710,139711,139713],{"id":138288,"depth":1189,"text":138289},{"id":138295,"depth":1189,"text":138296},{"id":138467,"depth":1189,"text":138468},{"id":139008,"depth":1189,"text":139712},"15.4.4 nav导航模块制作",{"id":139306,"depth":1189,"text":139307},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":137969,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139720,"title":139721,"body":139722,"description":47,"extension":48,"meta":142124,"navigation":50,"path":142125,"seo":142126,"stem":142127,"__hash__":142128},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139723,"toc":142101},[139724,139727,139731,139735,139747,139750,139753,139756,139767,139769,139793,139795,139819,139824,139827,139829,139865,139867,139903,139906,139911,139914,139917,139920,139950,139957,139960,139970,139972,140006,140009,140043,140049,140066,140068,140104,140106,140142,140147,140172,140174,140200,140202,140226,140233,140236,140300,140302,140344,140346,140386,140393,140398,140400,140430,140432,140462,140466,140469,140476,140488,140490,140516,140518,140542,140545,140547,140571,140577,140587,140589,140619,140621,140651,140658,140699,140701,140737,140739,140775,140779,140782,140785,140788,140794,140799,140802,140825,140828,140852,140855,140879,140884,140887,140890,140893,140896,140899,140973,140975,141005,141007,141037,141040,141043,141075,141079,141083,141097,141106,141109,141114,141116,141210,141212,141306,141329,141331,141355,141357,141381,141388,141391,141401,141403,141427,141432,141440,141442,141472,141477,141517,141519,141545,141547,141573,141577,141580,141585,141588,141592,141600,141607,141615,141617,141647,141649,141679,141687,141690,141693,141695,141725,141727,141757,141760,141765,141767,141791,141793,141817,141820,141905,141907,141931,141933,141957,141961,141963,141987,141989,142023,142027,142041,142044,142049,142052,142057,142060,142090,142098],[10,139725,139721],{"id":139726},"_16-品优购项目下篇-主体与页面开发",[65,139728,139730],{"id":139729},"_161-项目主体模块制作","16.1 项目主体模块制作",[94,139732,139734],{"id":139733},"_1611-首页制作","16.1.1 首页制作",[14,139736,139737,139739,139740,139742,139743,139746],{},[283,139738,102055],{}," 主体模块是 ",[283,139741,74069],{}," 里面专有的，注意需要新的样式文件 ",[283,139744,139745],{},"index.css，"," 就不要写在common.css中了",[35,139748],{"style":126405,"src":139749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[35,139751],{"style":126405,"src":139752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,139754,139755],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1141,139757,139758,139761,139764],{},[80,139759,139760],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[80,139762,139763],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[80,139765,139766],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,139768,138388],{},[114,139770,139771],{"className":126549,"code":139219,"language":126551,"meta":37,"style":37},[120,139772,139773,139779,139789],{"__ignoreMap":37},[123,139774,139775,139777],{"class":125,"line":126},[123,139776,130397],{"class":1972},[123,139778,15582],{"class":133},[123,139780,139781,139783,139785,139787],{"class":125,"line":45},[123,139782,131029],{"class":182},[123,139784,51448],{"class":133},[123,139786,23746],{"class":182},[123,139788,1300],{"class":133},[123,139790,139791],{"class":125,"line":1189},[123,139792,1574],{"class":133},[14,139794,138428],{},[114,139796,139797],{"className":126549,"code":139219,"language":126551,"meta":37,"style":37},[120,139798,139799,139805,139815],{"__ignoreMap":37},[123,139800,139801,139803],{"class":125,"line":126},[123,139802,130397],{"class":1972},[123,139804,15582],{"class":133},[123,139806,139807,139809,139811,139813],{"class":125,"line":45},[123,139808,131029],{"class":182},[123,139810,51448],{"class":133},[123,139812,23746],{"class":182},[123,139814,1300],{"class":133},[123,139816,139817],{"class":125,"line":1189},[123,139818,1574],{"class":133},[77,139820,139821],{},[80,139822,139823],{},"左侧focus模块制作",[35,139825],{"style":126405,"src":139826},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,139828,138388],{},[114,139830,139831],{"className":126549,"code":127872,"language":126551,"meta":37,"style":37},[120,139832,139833,139841,139851,139861],{"__ignoreMap":37},[123,139834,139835,139837,139839],{"class":125,"line":126},[123,139836,53832],{"class":51311},[123,139838,61911],{"class":1972},[123,139840,15582],{"class":133},[123,139842,139843,139845,139847,139849],{"class":125,"line":45},[123,139844,127887],{"class":182},[123,139846,51448],{"class":133},[123,139848,54900],{"class":182},[123,139850,1300],{"class":133},[123,139852,139853,139855,139857,139859],{"class":125,"line":1189},[123,139854,70809],{"class":182},[123,139856,51448],{"class":133},[123,139858,54748],{"class":182},[123,139860,1300],{"class":133},[123,139862,139863],{"class":125,"line":1204},[123,139864,1574],{"class":133},[14,139866,138428],{},[114,139868,139869],{"className":126549,"code":127872,"language":126551,"meta":37,"style":37},[120,139870,139871,139879,139889,139899],{"__ignoreMap":37},[123,139872,139873,139875,139877],{"class":125,"line":126},[123,139874,53832],{"class":51311},[123,139876,61911],{"class":1972},[123,139878,15582],{"class":133},[123,139880,139881,139883,139885,139887],{"class":125,"line":45},[123,139882,127887],{"class":182},[123,139884,51448],{"class":133},[123,139886,54900],{"class":182},[123,139888,1300],{"class":133},[123,139890,139891,139893,139895,139897],{"class":125,"line":1189},[123,139892,70809],{"class":182},[123,139894,51448],{"class":133},[123,139896,54748],{"class":182},[123,139898,1300],{"class":133},[123,139900,139901],{"class":125,"line":1204},[123,139902,1574],{"class":133},[14,139904,139905],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[77,139907,139908],{"start":45},[80,139909,139910],{},"右侧newsflash模块制作",[35,139912],{"style":126405,"src":139913},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,139915,139916],{},"右侧的模块 分为上中下三个盒子",[14,139918,139919],{},"结构代码：",[114,139921,139922],{"className":127296,"code":134051,"language":127298,"meta":37,"style":37},[120,139923,139924],{"__ignoreMap":37},[123,139925,139926,139928,139930,139932,139934,139936,139938,139940,139942,139944,139946,139948],{"class":125,"line":126},[123,139927,1044],{"class":133},[123,139929,35],{"class":51311},[123,139931,55250],{"class":1972},[123,139933,179],{"class":133},[123,139935,134066],{"class":238},[123,139937,55258],{"class":1972},[123,139939,179],{"class":133},[123,139941,134073],{"class":238},[123,139943,134076],{"class":1972},[123,139945,179],{"class":133},[123,139947,134081],{"class":238},[123,139949,51318],{"class":133},[14,139951,139952,139953,139956],{},"1 号盒子为 ",[120,139954,139955],{},"news"," 新闻模块 高度为 165px",[35,139958],{"style":126405,"src":139959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,139961,139962,139963,139966,139967],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[120,139964,139965],{},"news-hd","，下面是 ",[120,139968,139969],{},"news-bd",[14,139971,139919],{},[114,139973,139974],{"className":127296,"code":130653,"language":127298,"meta":37,"style":37},[120,139975,139976,139980,139994,139998],{"__ignoreMap":37},[123,139977,139978],{"class":125,"line":126},[123,139979,130660],{"class":192},[123,139981,139982,139984,139986,139988,139990,139992],{"class":125,"line":45},[123,139983,1044],{"class":133},[123,139985,51622],{"class":51311},[123,139987,53497],{"class":1972},[123,139989,179],{"class":133},[123,139991,130673],{"class":238},[123,139993,51318],{"class":133},[123,139995,139996],{"class":125,"line":1189},[123,139997,130680],{"class":133},[123,139999,140000,140002,140004],{"class":125,"line":1204},[123,140001,51796],{"class":133},[123,140003,51622],{"class":51311},[123,140005,51318],{"class":133},[14,140007,140008],{},"样式代码：",[114,140010,140011],{"className":127296,"code":130653,"language":127298,"meta":37,"style":37},[120,140012,140013,140017,140031,140035],{"__ignoreMap":37},[123,140014,140015],{"class":125,"line":126},[123,140016,130660],{"class":192},[123,140018,140019,140021,140023,140025,140027,140029],{"class":125,"line":45},[123,140020,1044],{"class":133},[123,140022,51622],{"class":51311},[123,140024,53497],{"class":1972},[123,140026,179],{"class":133},[123,140028,130673],{"class":238},[123,140030,51318],{"class":133},[123,140032,140033],{"class":125,"line":1189},[123,140034,130680],{"class":133},[123,140036,140037,140039,140041],{"class":125,"line":1204},[123,140038,51796],{"class":133},[123,140040,51622],{"class":51311},[123,140042,51318],{"class":133},[14,140044,140045,140046,140048],{},"上面是",[120,140047,139965],{},"，设置高度是 33px，设置下边框",[1141,140050,140051,140057],{},[80,140052,140053,140054,140056],{},"里面放一个",[120,140055,22920],{}," 标题",[80,140058,140059,140060,140062,140063,140065],{},"放一个a",[120,140061,102690],{},"，内容是 更多，然后让 ",[120,140064,372],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140067,139919],{},[114,140069,140070],{"className":126549,"code":138391,"language":126551,"meta":37,"style":37},[120,140071,140072,140080,140090,140100],{"__ignoreMap":37},[123,140073,140074,140076,140078],{"class":125,"line":126},[123,140075,51622],{"class":51311},[123,140077,137550],{"class":1972},[123,140079,15582],{"class":133},[123,140081,140082,140084,140086,140088],{"class":125,"line":45},[123,140083,137557],{"class":182},[123,140085,51448],{"class":133},[123,140087,7662],{"class":238},[123,140089,1300],{"class":133},[123,140091,140092,140094,140096,140098],{"class":125,"line":1189},[123,140093,128165],{"class":182},[123,140095,51448],{"class":133},[123,140097,60880],{"class":182},[123,140099,1300],{"class":133},[123,140101,140102],{"class":125,"line":1204},[123,140103,1574],{"class":133},[14,140105,140008],{},[114,140107,140108],{"className":126549,"code":138391,"language":126551,"meta":37,"style":37},[120,140109,140110,140118,140128,140138],{"__ignoreMap":37},[123,140111,140112,140114,140116],{"class":125,"line":126},[123,140113,51622],{"class":51311},[123,140115,137550],{"class":1972},[123,140117,15582],{"class":133},[123,140119,140120,140122,140124,140126],{"class":125,"line":45},[123,140121,137557],{"class":182},[123,140123,51448],{"class":133},[123,140125,7662],{"class":238},[123,140127,1300],{"class":133},[123,140129,140130,140132,140134,140136],{"class":125,"line":1189},[123,140131,128165],{"class":182},[123,140133,51448],{"class":133},[123,140135,60880],{"class":182},[123,140137,1300],{"class":133},[123,140139,140140],{"class":125,"line":1204},[123,140141,1574],{"class":133},[14,140143,140144,140145],{},"下面是",[120,140146,139969],{},[1141,140148,140149,140157],{},[80,140150,140151,140152,101015,140154,140156],{},"里面包含 ",[120,140153,1141],{},[120,140155,80],{}," 还有链接",[80,140158,139629,140159,140161,140162,140164,140165,140168,140169],{},[120,140160,80],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[120,140163,131215],{}," 2.设置 ",[120,140166,140167],{},"white-space: nowrap;"," 3. 设置 ",[120,140170,140171],{},"text-overflow: ellipsis;",[14,140173,139919],{},[114,140175,140177],{"className":126549,"code":140176,"language":126551,"meta":37,"style":37},"div {\n  overflow: hidden;\n}\n",[120,140178,140179,140185,140196],{"__ignoreMap":37},[123,140180,140181,140183],{"class":125,"line":126},[123,140182,51622],{"class":51311},[123,140184,15582],{"class":133},[123,140186,140187,140190,140192,140194],{"class":125,"line":45},[123,140188,140189],{"class":182},"  overflow",[123,140191,51448],{"class":133},[123,140193,61725],{"class":182},[123,140195,1300],{"class":133},[123,140197,140198],{"class":125,"line":1189},[123,140199,1574],{"class":133},[14,140201,140008],{},[114,140203,140204],{"className":126549,"code":140176,"language":126551,"meta":37,"style":37},[120,140205,140206,140212,140222],{"__ignoreMap":37},[123,140207,140208,140210],{"class":125,"line":126},[123,140209,51622],{"class":51311},[123,140211,15582],{"class":133},[123,140213,140214,140216,140218,140220],{"class":125,"line":45},[123,140215,140189],{"class":182},[123,140217,51448],{"class":133},[123,140219,61725],{"class":182},[123,140221,1300],{"class":133},[123,140223,140224],{"class":125,"line":1189},[123,140225,1574],{"class":133},[14,140227,140228,140229,140232],{},"2 号盒子为 ",[120,140230,140231],{},"lifeservice"," 生活服务模块 高度为 209px",[35,140234],{"style":126405,"src":140235},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1141,140237,140238,140241,140251,140275,140286],{},[80,140239,140240],{},"设置边框（左右下边框）",[80,140242,140243,140244,140247,140248,140250],{},"里面的内容 是 ",[120,140245,140246],{},"ul > 12*li","，给",[120,140249,80],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[80,140252,140253,140254],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1141,140255,140256,140261,140270],{},[80,140257,140258,140260],{},[120,140259,140231],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[80,140262,140263,140264,140266,140267,140269],{},"可以让 ",[120,140265,140231],{}," 里面的 ",[120,140268,1141],{}," 宽度为 252，就可以装的下 4 个 小 li",[80,140271,140272,140274],{},[120,140273,140231],{}," 盒子 overflow 隐藏多余的部分就可以了",[80,140276,116464,140277,140279,140280,140282,140283,140285],{},[120,140278,80],{}," 里面放一个 ",[120,140281,575],{},"（里面放图标），下面的文本用 ",[120,140284,14],{}," 标签包裹",[80,140287,139049,140288,140290,140291,140293,140294,139083,140296,140299],{},[120,140289,575],{}," 设置 24px宽和28px的高（注意 ",[120,140292,575],{}," 是行内元素， 转成行内块），给 ",[120,140295,80],{},[120,140297,140298],{},"text-align:center"," 让里面内容居中显示",[14,140301,139919],{},[114,140303,140305],{"className":126549,"code":140304,"language":126551,"meta":37,"style":37},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[120,140306,140307,140325,140330,140340],{"__ignoreMap":37},[123,140308,140309,140311,140313,140315,140317,140319,140321,140323],{"class":125,"line":126},[123,140310,123],{"class":51311},[123,140312,12445],{"class":133},[123,140314,372],{"class":51311},[123,140316,12445],{"class":133},[123,140318,23563],{"class":51311},[123,140320,12445],{"class":133},[123,140322,283],{"class":51311},[123,140324,15582],{"class":133},[123,140326,140327],{"class":125,"line":45},[123,140328,140329],{"class":192},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[123,140331,140332,140334,140336,140338],{"class":125,"line":1189},[123,140333,128165],{"class":182},[123,140335,51448],{"class":133},[123,140337,128227],{"class":182},[123,140339,1300],{"class":133},[123,140341,140342],{"class":125,"line":1204},[123,140343,1574],{"class":133},[14,140345,140008],{},[114,140347,140348],{"className":126549,"code":140304,"language":126551,"meta":37,"style":37},[120,140349,140350,140368,140372,140382],{"__ignoreMap":37},[123,140351,140352,140354,140356,140358,140360,140362,140364,140366],{"class":125,"line":126},[123,140353,123],{"class":51311},[123,140355,12445],{"class":133},[123,140357,372],{"class":51311},[123,140359,12445],{"class":133},[123,140361,23563],{"class":51311},[123,140363,12445],{"class":133},[123,140365,283],{"class":51311},[123,140367,15582],{"class":133},[123,140369,140370],{"class":125,"line":45},[123,140371,140329],{"class":192},[123,140373,140374,140376,140378,140380],{"class":125,"line":1189},[123,140375,128165],{"class":182},[123,140377,51448],{"class":133},[123,140379,128227],{"class":182},[123,140381,1300],{"class":133},[123,140383,140384],{"class":125,"line":1204},[123,140385,1574],{"class":133},[14,140387,140388,140389,140392],{},"3 号盒子为 ",[120,140390,140391],{},"bargain"," 特价商品",[1141,140394,140395],{},[80,140396,140397],{},"这个比较简单，直接插入一张图片即可",[14,140399,139919],{},[114,140401,140402],{"className":127296,"code":134051,"language":127298,"meta":37,"style":37},[120,140403,140404],{"__ignoreMap":37},[123,140405,140406,140408,140410,140412,140414,140416,140418,140420,140422,140424,140426,140428],{"class":125,"line":126},[123,140407,1044],{"class":133},[123,140409,35],{"class":51311},[123,140411,55250],{"class":1972},[123,140413,179],{"class":133},[123,140415,134066],{"class":238},[123,140417,55258],{"class":1972},[123,140419,179],{"class":133},[123,140421,134073],{"class":238},[123,140423,134076],{"class":1972},[123,140425,179],{"class":133},[123,140427,134081],{"class":238},[123,140429,51318],{"class":133},[14,140431,140008],{},[114,140433,140434],{"className":127296,"code":134051,"language":127298,"meta":37,"style":37},[120,140435,140436],{"__ignoreMap":37},[123,140437,140438,140440,140442,140444,140446,140448,140450,140452,140454,140456,140458,140460],{"class":125,"line":126},[123,140439,1044],{"class":133},[123,140441,35],{"class":51311},[123,140443,55250],{"class":1972},[123,140445,179],{"class":133},[123,140447,134066],{"class":238},[123,140449,55258],{"class":1972},[123,140451,179],{"class":133},[123,140453,134073],{"class":238},[123,140455,134076],{"class":1972},[123,140457,179],{"class":133},[123,140459,134081],{"class":238},[123,140461,51318],{"class":133},[94,140463,140465],{"id":140464},"_1612-推荐模块制作","16.1.2 推荐模块制作",[35,140467],{"style":126405,"src":140468},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140470,140471,140472,140475],{},"大盒子 ",[120,140473,140474],{},"recom"," 推荐模块 recommend",[1141,140477,140478],{},[80,140479,140480,140481,140483,140484,140487],{},"给这个 ",[120,140482,140474],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[120,140485,140486],{},"#ebebeb","），设置距离上边 12px",[14,140489,139919],{},[114,140491,140493],{"className":126549,"code":140492,"language":126551,"meta":37,"style":37},"div {\n  background-color: #f0f0f0;\n}\n",[120,140494,140495,140501,140512],{"__ignoreMap":37},[123,140496,140497,140499],{"class":125,"line":126},[123,140498,51622],{"class":51311},[123,140500,15582],{"class":133},[123,140502,140503,140505,140507,140510],{"class":125,"line":45},[123,140504,70889],{"class":182},[123,140506,51448],{"class":133},[123,140508,140509],{"class":182},"#f0f0f0",[123,140511,1300],{"class":133},[123,140513,140514],{"class":125,"line":1189},[123,140515,1574],{"class":133},[14,140517,140008],{},[114,140519,140520],{"className":126549,"code":140492,"language":126551,"meta":37,"style":37},[120,140521,140522,140528,140538],{"__ignoreMap":37},[123,140523,140524,140526],{"class":125,"line":126},[123,140525,51622],{"class":51311},[123,140527,15582],{"class":133},[123,140529,140530,140532,140534,140536],{"class":125,"line":45},[123,140531,70889],{"class":182},[123,140533,51448],{"class":133},[123,140535,140509],{"class":182},[123,140537,1300],{"class":133},[123,140539,140540],{"class":125,"line":1189},[123,140541,1574],{"class":133},[14,140543,140544],{},"里面包含 2 个盒子， 浮动即可",[14,140546,139919],{},[114,140548,140549],{"className":126549,"code":139219,"language":126551,"meta":37,"style":37},[120,140550,140551,140557,140567],{"__ignoreMap":37},[123,140552,140553,140555],{"class":125,"line":126},[123,140554,130397],{"class":1972},[123,140556,15582],{"class":133},[123,140558,140559,140561,140563,140565],{"class":125,"line":45},[123,140560,131029],{"class":182},[123,140562,51448],{"class":133},[123,140564,23746],{"class":182},[123,140566,1300],{"class":133},[123,140568,140569],{"class":125,"line":1189},[123,140570,1574],{"class":133},[14,140572,140573,140574],{},"1 号盒子 ",[120,140575,140576],{},"recom_hd",[1141,140578,140579,140582],{},[80,140580,140581],{},"设置宽度205px，高度163px",[80,140583,140053,140584,140586],{},[120,140585,35],{},"标签，插入图片即可",[14,140588,139919],{},[114,140590,140591],{"className":127296,"code":134051,"language":127298,"meta":37,"style":37},[120,140592,140593],{"__ignoreMap":37},[123,140594,140595,140597,140599,140601,140603,140605,140607,140609,140611,140613,140615,140617],{"class":125,"line":126},[123,140596,1044],{"class":133},[123,140598,35],{"class":51311},[123,140600,55250],{"class":1972},[123,140602,179],{"class":133},[123,140604,134066],{"class":238},[123,140606,55258],{"class":1972},[123,140608,179],{"class":133},[123,140610,134073],{"class":238},[123,140612,134076],{"class":1972},[123,140614,179],{"class":133},[123,140616,134081],{"class":238},[123,140618,51318],{"class":133},[14,140620,140008],{},[114,140622,140623],{"className":127296,"code":134051,"language":127298,"meta":37,"style":37},[120,140624,140625],{"__ignoreMap":37},[123,140626,140627,140629,140631,140633,140635,140637,140639,140641,140643,140645,140647,140649],{"class":125,"line":126},[123,140628,1044],{"class":133},[123,140630,35],{"class":51311},[123,140632,55250],{"class":1972},[123,140634,179],{"class":133},[123,140636,134066],{"class":238},[123,140638,55258],{"class":1972},[123,140640,179],{"class":133},[123,140642,134073],{"class":238},[123,140644,134076],{"class":1972},[123,140646,179],{"class":133},[123,140648,134081],{"class":238},[123,140650,51318],{"class":133},[14,140652,140653,140654,140657],{},"2 号盒子 ",[120,140655,140656],{},"recom_bd"," ，注意里面的小竖线",[1141,140659,140660,140671,140674,140679,140684],{},[80,140661,140662,140663,140665,140666,140668,140669],{},"右侧结构里面放 ",[120,140664,1141],{}," 包含 4个 ",[120,140667,80],{},"，每个li里面包含一个",[120,140670,35],{},[80,140672,140673],{},"直接利用切片工具把里面的内容当成一张图片",[80,140675,139049,140676,140678],{},[120,140677,80],{}," 设置浮动",[80,140680,139049,140681,140683],{},[120,140682,35],{}," 设置宽高，宽度 248px，高度 163px",[80,140685,140686,140687,140247,140690,140692,140693,140695,140696],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[120,140688,140689],{},"top 10px",[120,140691,80],{},"设置相对定位（注意，最后一个",[120,140694,80],{},"不用设置伪元素），可以利用 ",[120,140697,140698],{},"nth-child(-n+3){...}",[14,140700,139919],{},[114,140702,140703],{"className":126549,"code":138391,"language":126551,"meta":37,"style":37},[120,140704,140705,140713,140723,140733],{"__ignoreMap":37},[123,140706,140707,140709,140711],{"class":125,"line":126},[123,140708,51622],{"class":51311},[123,140710,137550],{"class":1972},[123,140712,15582],{"class":133},[123,140714,140715,140717,140719,140721],{"class":125,"line":45},[123,140716,137557],{"class":182},[123,140718,51448],{"class":133},[123,140720,7662],{"class":238},[123,140722,1300],{"class":133},[123,140724,140725,140727,140729,140731],{"class":125,"line":1189},[123,140726,128165],{"class":182},[123,140728,51448],{"class":133},[123,140730,60880],{"class":182},[123,140732,1300],{"class":133},[123,140734,140735],{"class":125,"line":1204},[123,140736,1574],{"class":133},[14,140738,140008],{},[114,140740,140741],{"className":126549,"code":138391,"language":126551,"meta":37,"style":37},[120,140742,140743,140751,140761,140771],{"__ignoreMap":37},[123,140744,140745,140747,140749],{"class":125,"line":126},[123,140746,51622],{"class":51311},[123,140748,137550],{"class":1972},[123,140750,15582],{"class":133},[123,140752,140753,140755,140757,140759],{"class":125,"line":45},[123,140754,137557],{"class":182},[123,140756,51448],{"class":133},[123,140758,7662],{"class":238},[123,140760,1300],{"class":133},[123,140762,140763,140765,140767,140769],{"class":125,"line":1189},[123,140764,128165],{"class":182},[123,140766,51448],{"class":133},[123,140768,60880],{"class":182},[123,140770,1300],{"class":133},[123,140772,140773],{"class":125,"line":1204},[123,140774,1574],{"class":133},[94,140776,140778],{"id":140777},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[35,140780],{"style":126405,"src":140781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,140783,140784],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,140786,140787],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,140789,140790,140793],{},[120,140791,140792],{},"box_hd"," 制作",[14,140795,140573,140796,140798],{},[120,140797,140792],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[35,140800],{"style":126405,"src":140801},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1141,140803,140804,140809,140814,140817],{},[80,140805,140806,140808],{},[120,140807,140792],{}," 给 30px 的高度，2个像素的下边框",[80,140810,140811,140812],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[120,140813,139060],{},[80,140815,140816],{},"左侧盒左浮动，右侧盒子右浮动",[80,140818,140819,140821,140822,140824],{},[120,140820,372],{},"标签之间的距离用左右的",[120,140823,30894],{},"撑开即可",[14,140826,140827],{},"结构代码",[114,140829,140830],{"className":126549,"code":139219,"language":126551,"meta":37,"style":37},[120,140831,140832,140838,140848],{"__ignoreMap":37},[123,140833,140834,140836],{"class":125,"line":126},[123,140835,130397],{"class":1972},[123,140837,15582],{"class":133},[123,140839,140840,140842,140844,140846],{"class":125,"line":45},[123,140841,131029],{"class":182},[123,140843,51448],{"class":133},[123,140845,23746],{"class":182},[123,140847,1300],{"class":133},[123,140849,140850],{"class":125,"line":1189},[123,140851,1574],{"class":133},[14,140853,140854],{},"样式代码",[114,140856,140857],{"className":126549,"code":139219,"language":126551,"meta":37,"style":37},[120,140858,140859,140865,140875],{"__ignoreMap":37},[123,140860,140861,140863],{"class":125,"line":126},[123,140862,130397],{"class":1972},[123,140864,15582],{"class":133},[123,140866,140867,140869,140871,140873],{"class":125,"line":45},[123,140868,131029],{"class":182},[123,140870,51448],{"class":133},[123,140872,23746],{"class":182},[123,140874,1300],{"class":133},[123,140876,140877],{"class":125,"line":1189},[123,140878,1574],{"class":133},[14,140880,140881,140793],{},[120,140882,140883],{},"box_bd",[14,140885,140886],{},"2 号盒子 box_bd，不要给高度",[35,140888],{"style":126405,"src":140889},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,140891,140892],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,140894,140895],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,140897,140898],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1141,140900,140901,140913,140929],{},[80,140902,140903,140905,140906,140909,140910,140912],{},[120,140904,140883],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[120,140907,140908],{},"tab_content","，在",[120,140911,140908],{}," 里面包裹tab选项卡对应的内容",[80,140914,140915,140916,140919,140920,140922,140923,140925,140926,140928],{},"内容被一个大盒子包裹（",[120,140917,140918],{},"tab_list_item","），里面是 ",[120,140921,1141],{}," 包裹 5个 ",[120,140924,80],{},"，每个",[120,140927,80],{},"设置对应的宽度，然后设置浮动",[80,140930,140931,140932,140934,140935,140937,140938],{},"而这5个",[120,140933,80],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[120,140936,80],{},"设置",[1141,140939,140940,140958,140961],{},[80,140941,140942,140943,140945,140946,140948,140949,140951,140952,140954,140955,140957],{},"第一个小 ",[120,140944,80],{}," 分为上下结构，上面是 ",[120,140947,1141],{}," 包裹 ",[120,140950,80],{}," ，",[120,140953,80],{},"里面包裹 ",[120,140956,372],{},"，下面插入一张图片",[80,140959,140960],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[80,140962,140963,140964,140966,140967,140969,140970,140972],{},"后面的小 ",[120,140965,80],{}," 里面先放一个",[120,140968,372],{},"标签，然后在",[120,140971,372],{},"标签里面插入图片即可",[14,140974,140827],{},[114,140976,140977],{"className":127296,"code":134051,"language":127298,"meta":37,"style":37},[120,140978,140979],{"__ignoreMap":37},[123,140980,140981,140983,140985,140987,140989,140991,140993,140995,140997,140999,141001,141003],{"class":125,"line":126},[123,140982,1044],{"class":133},[123,140984,35],{"class":51311},[123,140986,55250],{"class":1972},[123,140988,179],{"class":133},[123,140990,134066],{"class":238},[123,140992,55258],{"class":1972},[123,140994,179],{"class":133},[123,140996,134073],{"class":238},[123,140998,134076],{"class":1972},[123,141000,179],{"class":133},[123,141002,134081],{"class":238},[123,141004,51318],{"class":133},[14,141006,140854],{},[114,141008,141009],{"className":127296,"code":134051,"language":127298,"meta":37,"style":37},[120,141010,141011],{"__ignoreMap":37},[123,141012,141013,141015,141017,141019,141021,141023,141025,141027,141029,141031,141033,141035],{"class":125,"line":126},[123,141014,1044],{"class":133},[123,141016,35],{"class":51311},[123,141018,55250],{"class":1972},[123,141020,179],{"class":133},[123,141022,134066],{"class":238},[123,141024,55258],{"class":1972},[123,141026,179],{"class":133},[123,141028,134073],{"class":238},[123,141030,134076],{"class":1972},[123,141032,179],{"class":133},[123,141034,134081],{"class":238},[123,141036,51318],{"class":133},[14,141038,141039],{},"tab栏切换需求！！！！！！介绍：",[35,141041],{"style":126405,"src":141042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1141,141044,141045,141053,141059,141062],{},[80,141046,141047,141050,141051],{},[120,141048,141049],{},"tab","栏的布局是 ",[120,141052,139060],{},[80,141054,141055,141056,141058],{},"有多少个",[120,141057,141049],{},"选项卡，那么对应就有多少个内容",[80,141060,141061],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[80,141063,141064,141065,141068,141069,141071,141072,141074],{},"等后面我们学习了",[120,141066,141067],{},"js","之后，我们就会配合",[120,141070,141067],{},"来实现，",[120,141073,141049],{},"栏的切换",[65,141076,141078],{"id":141077},"_162-列表制作","16.2 列表制作",[94,141080,141082],{"id":141081},"_1621-准备工作","16.2.1 准备工作",[1141,141084,141085,141088,141091,141094],{},[80,141086,141087],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[80,141089,141090],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[80,141092,141093],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[80,141095,141096],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[94,141098,141100,141101,101015,141103,141105],{"id":141099},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[120,141102,131554],{},[120,141104,53724],{}," 修改",[35,141107],{"style":126405,"src":141108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1141,141110,141111],{},[80,141112,141113],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141115,139919],{},[114,141117,141118],{"className":126549,"code":131981,"language":126551,"meta":37,"style":37},[120,141119,141120,141124,141138,141142,141156,141160,141174,141178,141192,141196],{"__ignoreMap":37},[123,141121,141122],{"class":125,"line":126},[123,141123,131988],{"class":192},[123,141125,141126,141128,141130,141132,141134,141136],{"class":125,"line":45},[123,141127,131993],{"class":1972},[123,141129,79818],{"class":133},[123,141131,128909],{"class":182},[123,141133,51448],{"class":133},[123,141135,132002],{"class":182},[123,141137,129479],{"class":133},[123,141139,141140],{"class":125,"line":1189},[123,141141,132009],{"class":192},[123,141143,141144,141146,141148,141150,141152,141154],{"class":125,"line":1204},[123,141145,132014],{"class":1972},[123,141147,79818],{"class":133},[123,141149,128909],{"class":182},[123,141151,51448],{"class":133},[123,141153,54775],{"class":182},[123,141155,129479],{"class":133},[123,141157,141158],{"class":125,"line":1210},[123,141159,132029],{"class":192},[123,141161,141162,141164,141166,141168,141170,141172],{"class":125,"line":1224},[123,141163,132034],{"class":1972},[123,141165,79818],{"class":133},[123,141167,128909],{"class":182},[123,141169,51448],{"class":133},[123,141171,54842],{"class":182},[123,141173,129479],{"class":133},[123,141175,141176],{"class":125,"line":1230},[123,141177,132049],{"class":192},[123,141179,141180,141182,141184,141186,141188,141190],{"class":125,"line":1321},[123,141181,132054],{"class":1972},[123,141183,79818],{"class":133},[123,141185,128909],{"class":182},[123,141187,51448],{"class":133},[123,141189,86244],{"class":182},[123,141191,129479],{"class":133},[123,141193,141194],{"class":125,"line":1327},[123,141195,132069],{"class":192},[123,141197,141198,141200,141202,141204,141206,141208],{"class":125,"line":1339},[123,141199,132074],{"class":1972},[123,141201,79818],{"class":133},[123,141203,128909],{"class":182},[123,141205,51448],{"class":133},[123,141207,132083],{"class":182},[123,141209,129479],{"class":133},[14,141211,140008],{},[114,141213,141214],{"className":126549,"code":131981,"language":126551,"meta":37,"style":37},[120,141215,141216,141220,141234,141238,141252,141256,141270,141274,141288,141292],{"__ignoreMap":37},[123,141217,141218],{"class":125,"line":126},[123,141219,131988],{"class":192},[123,141221,141222,141224,141226,141228,141230,141232],{"class":125,"line":45},[123,141223,131993],{"class":1972},[123,141225,79818],{"class":133},[123,141227,128909],{"class":182},[123,141229,51448],{"class":133},[123,141231,132002],{"class":182},[123,141233,129479],{"class":133},[123,141235,141236],{"class":125,"line":1189},[123,141237,132009],{"class":192},[123,141239,141240,141242,141244,141246,141248,141250],{"class":125,"line":1204},[123,141241,132014],{"class":1972},[123,141243,79818],{"class":133},[123,141245,128909],{"class":182},[123,141247,51448],{"class":133},[123,141249,54775],{"class":182},[123,141251,129479],{"class":133},[123,141253,141254],{"class":125,"line":1210},[123,141255,132029],{"class":192},[123,141257,141258,141260,141262,141264,141266,141268],{"class":125,"line":1224},[123,141259,132034],{"class":1972},[123,141261,79818],{"class":133},[123,141263,128909],{"class":182},[123,141265,51448],{"class":133},[123,141267,54842],{"class":182},[123,141269,129479],{"class":133},[123,141271,141272],{"class":125,"line":1230},[123,141273,132049],{"class":192},[123,141275,141276,141278,141280,141282,141284,141286],{"class":125,"line":1321},[123,141277,132054],{"class":1972},[123,141279,79818],{"class":133},[123,141281,128909],{"class":182},[123,141283,51448],{"class":133},[123,141285,86244],{"class":182},[123,141287,129479],{"class":133},[123,141289,141290],{"class":125,"line":1327},[123,141291,132069],{"class":192},[123,141293,141294,141296,141298,141300,141302,141304],{"class":125,"line":1339},[123,141295,132074],{"class":1972},[123,141297,79818],{"class":133},[123,141299,128909],{"class":182},[123,141301,51448],{"class":133},[123,141303,132083],{"class":182},[123,141305,129479],{"class":133},[1141,141307,141308,141319],{},[80,141309,141310,141311,141314,141315,101015,141317],{},"1 号盒子左侧浮动 ",[120,141312,141313],{},"sk_list"," 里面包含 ",[120,141316,1141],{},[120,141318,80],{},[80,141320,141321,141322,141314,141325,101015,141327],{},"2 号盒子左侧浮动 ",[120,141323,141324],{},"sk_con",[120,141326,1141],{},[120,141328,80],{},[14,141330,139919],{},[114,141332,141333],{"className":126549,"code":139219,"language":126551,"meta":37,"style":37},[120,141334,141335,141341,141351],{"__ignoreMap":37},[123,141336,141337,141339],{"class":125,"line":126},[123,141338,130397],{"class":1972},[123,141340,15582],{"class":133},[123,141342,141343,141345,141347,141349],{"class":125,"line":45},[123,141344,131029],{"class":182},[123,141346,51448],{"class":133},[123,141348,23746],{"class":182},[123,141350,1300],{"class":133},[123,141352,141353],{"class":125,"line":1189},[123,141354,1574],{"class":133},[14,141356,140008],{},[114,141358,141359],{"className":126549,"code":139219,"language":126551,"meta":37,"style":37},[120,141360,141361,141367,141377],{"__ignoreMap":37},[123,141362,141363,141365],{"class":125,"line":126},[123,141364,130397],{"class":1972},[123,141366,15582],{"class":133},[123,141368,141369,141371,141373,141375],{"class":125,"line":45},[123,141370,131029],{"class":182},[123,141372,51448],{"class":133},[123,141374,23746],{"class":182},[123,141376,1300],{"class":133},[123,141378,141379],{"class":125,"line":1189},[123,141380,1574],{"class":133},[94,141382,141384,141385],{"id":141383},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[120,141386,141387],{},"sk_container",[35,141389],{"style":126405,"src":141390},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1141,141392,141393,141398],{},[80,141394,140573,141395,141397],{},[120,141396,141387],{}," 给宽度 1200，不要给高度",[80,141399,141400],{},"一定不要忘记清除浮动",[14,141402,139919],{},[114,141404,141405],{"className":126549,"code":139219,"language":126551,"meta":37,"style":37},[120,141406,141407,141413,141423],{"__ignoreMap":37},[123,141408,141409,141411],{"class":125,"line":126},[123,141410,130397],{"class":1972},[123,141412,15582],{"class":133},[123,141414,141415,141417,141419,141421],{"class":125,"line":45},[123,141416,131029],{"class":182},[123,141418,51448],{"class":133},[123,141420,23746],{"class":182},[123,141422,1300],{"class":133},[123,141424,141425],{"class":125,"line":1189},[123,141426,1574],{"class":133},[77,141428,141429],{},[80,141430,141431],{},"sk_hd制作",[1141,141433,141434],{},[80,141435,140653,141436,141439],{},[120,141437,141438],{},"sk_hd"," ，插入图片即可",[14,141441,139919],{},[114,141443,141444],{"className":127296,"code":134051,"language":127298,"meta":37,"style":37},[120,141445,141446],{"__ignoreMap":37},[123,141447,141448,141450,141452,141454,141456,141458,141460,141462,141464,141466,141468,141470],{"class":125,"line":126},[123,141449,1044],{"class":133},[123,141451,35],{"class":51311},[123,141453,55250],{"class":1972},[123,141455,179],{"class":133},[123,141457,134066],{"class":238},[123,141459,55258],{"class":1972},[123,141461,179],{"class":133},[123,141463,134073],{"class":238},[123,141465,134076],{"class":1972},[123,141467,179],{"class":133},[123,141469,134081],{"class":238},[123,141471,51318],{"class":133},[77,141473,141474],{"start":45},[80,141475,141476],{},"sk_bd制作",[1141,141478,141479],{},[80,141480,141481,141482,141485,141486,101015,141488,141490],{},"3 号盒子 ",[120,141483,141484],{},"sk_bd"," ，里面包含很多的 ",[120,141487,1141],{},[120,141489,80],{},[1141,141491,141492,141501],{},[80,141493,141494,141495,141497,141498,141500],{},"当鼠标移入到 ",[120,141496,80],{}," 上面的时候显示红色的边框，在这里先给 ",[120,141499,80],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[80,141502,141503,141504,141506,141507,141509,141510,141513,141514,141516],{},"由于给每个 ",[120,141505,80],{}," 都设置了外边距，导致一行的最后一个 ",[120,141508,80],{}," 掉了下来，在这里我们利用 ",[120,141511,141512],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[120,141515,80],{},"，去掉外边距就好了",[14,141518,139919],{},[114,141520,141521],{"className":126549,"code":138738,"language":126551,"meta":37,"style":37},[120,141522,141523,141529,141541],{"__ignoreMap":37},[123,141524,141525,141527],{"class":125,"line":126},[123,141526,51622],{"class":51311},[123,141528,15582],{"class":133},[123,141530,141531,141533,141535,141537,141539],{"class":125,"line":45},[123,141532,70481],{"class":182},[123,141534,51448],{"class":133},[123,141536,325],{"class":182},[123,141538,51567],{"class":182},[123,141540,1300],{"class":133},[123,141542,141543],{"class":125,"line":1189},[123,141544,1574],{"class":133},[14,141546,140008],{},[114,141548,141549],{"className":126549,"code":138738,"language":126551,"meta":37,"style":37},[120,141550,141551,141557,141569],{"__ignoreMap":37},[123,141552,141553,141555],{"class":125,"line":126},[123,141554,51622],{"class":51311},[123,141556,15582],{"class":133},[123,141558,141559,141561,141563,141565,141567],{"class":125,"line":45},[123,141560,70481],{"class":182},[123,141562,51448],{"class":133},[123,141564,325],{"class":182},[123,141566,51567],{"class":182},[123,141568,1300],{"class":133},[123,141570,141571],{"class":125,"line":1189},[123,141572,1574],{"class":133},[65,141574,141576],{"id":141575},"_163-注册页面制作","16.3 注册页面制作",[35,141578],{"style":126405,"src":141579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141581,141582,141584],{},[283,141583,9035],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[35,141586],{"style":126405,"src":141587},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[94,141589,141591],{"id":141590},"_1631-准备工作","16.3.1 准备工作",[1141,141593,141594,141597],{},[80,141595,141596],{},"创建register.html，引入 base.css，引入favicon图标",[80,141598,141599],{},"创建register.css ，在html页面进行引入",[94,141601,141603,141604,141606],{"id":141602},"_1632-header-头部实现","16.3.2 ",[120,141605,131554],{}," 头部实现",[1141,141608,141609,141612],{},[80,141610,141611],{},"整个内容用 版心 进行包裹",[80,141613,141614],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,141616,139919],{},[114,141618,141619],{"className":127296,"code":134051,"language":127298,"meta":37,"style":37},[120,141620,141621],{"__ignoreMap":37},[123,141622,141623,141625,141627,141629,141631,141633,141635,141637,141639,141641,141643,141645],{"class":125,"line":126},[123,141624,1044],{"class":133},[123,141626,35],{"class":51311},[123,141628,55250],{"class":1972},[123,141630,179],{"class":133},[123,141632,134066],{"class":238},[123,141634,55258],{"class":1972},[123,141636,179],{"class":133},[123,141638,134073],{"class":238},[123,141640,134076],{"class":1972},[123,141642,179],{"class":133},[123,141644,134081],{"class":238},[123,141646,51318],{"class":133},[14,141648,140008],{},[114,141650,141651],{"className":127296,"code":134051,"language":127298,"meta":37,"style":37},[120,141652,141653],{"__ignoreMap":37},[123,141654,141655,141657,141659,141661,141663,141665,141667,141669,141671,141673,141675,141677],{"class":125,"line":126},[123,141656,1044],{"class":133},[123,141658,35],{"class":51311},[123,141660,55250],{"class":1972},[123,141662,179],{"class":133},[123,141664,134066],{"class":238},[123,141666,55258],{"class":1972},[123,141668,179],{"class":133},[123,141670,134073],{"class":238},[123,141672,134076],{"class":1972},[123,141674,179],{"class":133},[123,141676,134081],{"class":238},[123,141678,51318],{"class":133},[94,141680,141682,141683,141686],{"id":141681},"_1633-registerarea-主体模块实现","16.3.3 ",[120,141684,141685],{},"registerarea"," 主体模块实现",[35,141688],{"style":126405,"src":141689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,141691,141692],{},"整个大盒子 高度为 522px，设置4个边框",[14,141694,139919],{},[114,141696,141697],{"className":126549,"code":130706,"language":126551,"meta":37,"style":37},[120,141698,141699,141705,141721],{"__ignoreMap":37},[123,141700,141701,141703],{"class":125,"line":126},[123,141702,51622],{"class":51311},[123,141704,15582],{"class":133},[123,141706,141707,141709,141711,141713,141715,141717,141719],{"class":125,"line":45},[123,141708,70907],{"class":182},[123,141710,51448],{"class":133},[123,141712,351],{"class":182},[123,141714,51503],{"class":129},[123,141716,51532],{"class":182},[123,141718,129941],{"class":182},[123,141720,1300],{"class":133},[123,141722,141723],{"class":125,"line":1189},[123,141724,1574],{"class":133},[14,141726,140008],{},[114,141728,141729],{"className":126549,"code":130706,"language":126551,"meta":37,"style":37},[120,141730,141731,141737,141753],{"__ignoreMap":37},[123,141732,141733,141735],{"class":125,"line":126},[123,141734,51622],{"class":51311},[123,141736,15582],{"class":133},[123,141738,141739,141741,141743,141745,141747,141749,141751],{"class":125,"line":45},[123,141740,70907],{"class":182},[123,141742,51448],{"class":133},[123,141744,351],{"class":182},[123,141746,51503],{"class":129},[123,141748,51532],{"class":182},[123,141750,129941],{"class":182},[123,141752,1300],{"class":133},[123,141754,141755],{"class":125,"line":1189},[123,141756,1574],{"class":133},[14,141758,141759],{},"1号盒子 是一个 h3 标签，放标题",[1141,141761,141762],{},[80,141763,141764],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,141766,139919],{},[114,141768,141769],{"className":126549,"code":139219,"language":126551,"meta":37,"style":37},[120,141770,141771,141777,141787],{"__ignoreMap":37},[123,141772,141773,141775],{"class":125,"line":126},[123,141774,130397],{"class":1972},[123,141776,15582],{"class":133},[123,141778,141779,141781,141783,141785],{"class":125,"line":45},[123,141780,131029],{"class":182},[123,141782,51448],{"class":133},[123,141784,23746],{"class":182},[123,141786,1300],{"class":133},[123,141788,141789],{"class":125,"line":1189},[123,141790,1574],{"class":133},[14,141792,140008],{},[114,141794,141795],{"className":126549,"code":139219,"language":126551,"meta":37,"style":37},[120,141796,141797,141803,141813],{"__ignoreMap":37},[123,141798,141799,141801],{"class":125,"line":126},[123,141800,130397],{"class":1972},[123,141802,15582],{"class":133},[123,141804,141805,141807,141809,141811],{"class":125,"line":45},[123,141806,131029],{"class":182},[123,141808,51448],{"class":133},[123,141810,23746],{"class":182},[123,141812,1300],{"class":133},[123,141814,141815],{"class":125,"line":1189},[123,141816,1574],{"class":133},[14,141818,141819],{},"2号盒子 里面放注册的内容",[1141,141821,141822,141825,141834,141848,141861,141864,141867,141885,141899],{},[80,141823,141824],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[80,141826,141827,141828,141830,141831,141833],{},"里面的内容利用 ",[120,141829,1141],{}," 包含 ",[120,141832,80],{}," 来实现的（不需要用表格）",[80,141835,139063,141836,141838,141839,141841,141842,141844,141845,141847],{},[120,141837,80],{}," 里面，左侧放 ",[120,141840,33619],{}," 标签， 中间放",[120,141843,53832],{}," 标签， 右侧放 ",[120,141846,123],{}," 提示信息",[80,141849,141850,141851,141853,141854,141856,141857,141860],{},"左侧 ",[120,141852,33619],{},"里面的文字都是右对齐，我们可以给",[120,141855,33619],{},"设置一个宽度（88px），然后利用",[120,141858,141859],{},"text-align"," 来设置右对齐",[80,141862,141863],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[80,141865,141866],{},"右侧 span修饰一下文字颜色",[80,141868,141869,141870],{},"提示信息的样式优化",[1141,141871,141872,141875,141878],{},[80,141873,141874],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[80,141876,141877],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[80,141879,141880,141881,141884],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[120,141882,141883],{},"vertical-algin"," 来设置 图片与文字对齐方式",[80,141886,141887,141888],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1141,141889,141890,141896],{},[80,141891,141892,141893,141895],{},"设置 ",[120,141894,23563],{}," 的 左右 12px 的内边距，设置一下文字颜色",[80,141897,141898],{},"分别设置 背景颜色",[80,141900,141901,141902,141904],{},"同意协议 和 完成注册 都是用 ",[120,141903,80],{}," 进行包裹",[14,141906,139919],{},[114,141908,141909],{"className":126549,"code":140492,"language":126551,"meta":37,"style":37},[120,141910,141911,141917,141927],{"__ignoreMap":37},[123,141912,141913,141915],{"class":125,"line":126},[123,141914,51622],{"class":51311},[123,141916,15582],{"class":133},[123,141918,141919,141921,141923,141925],{"class":125,"line":45},[123,141920,70889],{"class":182},[123,141922,51448],{"class":133},[123,141924,140509],{"class":182},[123,141926,1300],{"class":133},[123,141928,141929],{"class":125,"line":1189},[123,141930,1574],{"class":133},[14,141932,140008],{},[114,141934,141935],{"className":126549,"code":140492,"language":126551,"meta":37,"style":37},[120,141936,141937,141943,141953],{"__ignoreMap":37},[123,141938,141939,141941],{"class":125,"line":126},[123,141940,51622],{"class":51311},[123,141942,15582],{"class":133},[123,141944,141945,141947,141949,141951],{"class":125,"line":45},[123,141946,70889],{"class":182},[123,141948,51448],{"class":133},[123,141950,140509],{"class":182},[123,141952,1300],{"class":133},[123,141954,141955],{"class":125,"line":1189},[123,141956,1574],{"class":133},[94,141958,141960],{"id":141959},"_1634-底部实现","16.3.4 底部实现",[14,141962,139919],{},[114,141964,141965],{"className":126549,"code":140492,"language":126551,"meta":37,"style":37},[120,141966,141967,141973,141983],{"__ignoreMap":37},[123,141968,141969,141971],{"class":125,"line":126},[123,141970,51622],{"class":51311},[123,141972,15582],{"class":133},[123,141974,141975,141977,141979,141981],{"class":125,"line":45},[123,141976,70889],{"class":182},[123,141978,51448],{"class":133},[123,141980,140509],{"class":182},[123,141982,1300],{"class":133},[123,141984,141985],{"class":125,"line":1189},[123,141986,1574],{"class":133},[14,141988,140008],{},[114,141990,141991],{"className":127296,"code":130653,"language":127298,"meta":37,"style":37},[120,141992,141993,141997,142011,142015],{"__ignoreMap":37},[123,141994,141995],{"class":125,"line":126},[123,141996,130660],{"class":192},[123,141998,141999,142001,142003,142005,142007,142009],{"class":125,"line":45},[123,142000,1044],{"class":133},[123,142002,51622],{"class":51311},[123,142004,53497],{"class":1972},[123,142006,179],{"class":133},[123,142008,130673],{"class":238},[123,142010,51318],{"class":133},[123,142012,142013],{"class":125,"line":1189},[123,142014,130680],{"class":133},[123,142016,142017,142019,142021],{"class":125,"line":1204},[123,142018,51796],{"class":133},[123,142020,51622],{"class":51311},[123,142022,51318],{"class":133},[65,142024,142026],{"id":142025},"_164-项目总结","16.4 项目总结",[77,142028,142029,142032,142035,142038],{},[80,142030,142031],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[80,142033,142034],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[80,142036,142037],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[80,142039,142040],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[35,142042],{"style":126405,"src":142043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[77,142045,142046],{"start":1210},[80,142047,142048],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[35,142050],{"style":126405,"src":142051},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[77,142053,142054],{"start":1224},[80,142055,142056],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[35,142058],{"style":126405,"src":142059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[114,142061,142062],{"className":127296,"code":136706,"language":127298,"meta":37,"style":37},[120,142063,142064],{"__ignoreMap":37},[123,142065,142066,142068,142070,142072,142074,142076,142078,142080,142082,142084,142086,142088],{"class":125,"line":126},[123,142067,1044],{"class":133},[123,142069,53832],{"class":51311},[123,142071,53835],{"class":1972},[123,142073,179],{"class":133},[123,142075,62710],{"class":238},[123,142077,14930],{"class":1972},[123,142079,179],{"class":133},[123,142081,136727],{"class":238},[123,142083,61031],{"class":1972},[123,142085,179],{"class":133},[123,142087,136734],{"class":238},[123,142089,51318],{"class":133},[77,142091,142092,142095],{"start":1230},[80,142093,142094],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[80,142096,142097],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5136,142099,142100],{},"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":37,"searchDepth":45,"depth":45,"links":142102},[142103,142108,142115,142123],{"id":139729,"depth":45,"text":139730,"children":142104},[142105,142106,142107],{"id":139733,"depth":1189,"text":139734},{"id":140464,"depth":1189,"text":140465},{"id":140777,"depth":1189,"text":140778},{"id":141077,"depth":45,"text":141078,"children":142109},[142110,142111,142113],{"id":141081,"depth":1189,"text":141082},{"id":141099,"depth":1189,"text":142112},"16.2.2 列表页 header 和 nav 修改",{"id":141383,"depth":1189,"text":142114},"16.2.3 列表页主体 sk_container",{"id":141575,"depth":45,"text":141576,"children":142116},[142117,142118,142120,142122],{"id":141590,"depth":1189,"text":141591},{"id":141602,"depth":1189,"text":142119},"16.3.2 header 头部实现",{"id":141681,"depth":1189,"text":142121},"16.3.3 registerarea 主体模块实现",{"id":141959,"depth":1189,"text":141960},{"id":142025,"depth":45,"text":142026},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139721,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142130,"title":142131,"body":142132,"description":47,"extension":48,"meta":142240,"navigation":50,"path":142241,"seo":142242,"stem":142243,"__hash__":142244},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142133,"toc":142235},[142134,142137,142141,142144,142147,142156,142165,142169,142174,142181,142199,142202,142205,142208,142211,142214,142217,142220,142223,142226,142229,142232],[10,142135,142131],{"id":142136},"_17-web服务器与网站发布",[65,142138,142140],{"id":142139},"_171-web服务器","17.1 Web服务器",[14,142142,142143],{},"把自己网站上传到服务器上，可以让其他人访问",[35,142145],{"style":126405,"src":142146},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142148,142149,142152,142153],{},[283,142150,142151],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[283,142154,142155],{},"Web 服务器等",[14,142157,142158,142159,101015,142162,25751],{},"根据服务器在网络中所在的位置不同，又可分为 ",[283,142160,142161],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[283,142163,142164],{},"远程服务器",[94,142166,142168],{"id":142167},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142170,142171],{},[283,142172,142173],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142175,142176,142177],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[372,142178,142179],{"href":142179,"rel":142180},"http:\u002F\u002Ffree.3v.do\u002F",[23875],[1141,142182,142183,142186,142189,142196],{},[80,142184,142185],{},"去免费空间网站注册账号。",[80,142187,142188],{},"记录下主机名、用户名、密码、域名。",[80,142190,142191,142192,142195],{},"利用 ",[120,142193,142194],{},"utftp"," 软件 上传网站到远程服务器",[80,142197,142198],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142200,142201],{},"使用软件上传，对上传软件文件进行解压",[35,142203],{"style":126405,"src":142204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[35,142206],{"style":126405,"src":142207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142209,142210],{},"输入刚刚申请的服务器账号信息：",[35,142212],{"style":126405,"src":142213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[35,142215],{"style":126405,"src":142216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[35,142218],{"style":126405,"src":142219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[35,142221],{"style":126405,"src":142222},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142224,142225],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[35,142227],{"style":126405,"src":142228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142230,142231],{},"浏览器输入域名即可访问",[14,142233,142234],{},"首页一定必须是index",{"title":37,"searchDepth":45,"depth":45,"links":142236},[142237],{"id":142139,"depth":45,"text":142140,"children":142238},[142239],{"id":142167,"depth":1189,"text":142168},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142131,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142246,"title":142247,"body":142248,"description":47,"extension":48,"meta":143175,"navigation":50,"path":143176,"seo":143177,"stem":143178,"__hash__":143179},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142249,"toc":143158},[142250,142253,142257,142260,142263,142274,142277,142281,142285,142290,142293,142296,142299,142302,142306,142332,142336,142340,142343,142346,142350,142383,142387,142390,142393,142457,142461,142465,142468,142471,142474,142478,142523,142527,142530,142560,142564,142568,142571,142574,142578,142581,142650,142653,142761,142763,142769,142773,142776,142779,142875,142878,142882,142906,142910,142913,142917,142920,142924,142927,142930,142933,142936,142940,142943,142946,142950,142954,142957,142960,142963,142966,142970,142973,142977,142980,142983,143028,143032,143036,143039,143042,143045,143077,143081,143084,143118,143122,143125,143155],[10,142251,142247],{"id":142252},"_18-2d动画与3d转换",[65,142254,142256],{"id":142255},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142258,142259],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142261,142262],{},"转换（transform）你可以简单理解为变形",[1141,142264,142265,142268,142271],{},[80,142266,142267],{},"移动：translate",[80,142269,142270],{},"旋转：rotate",[80,142272,142273],{},"缩放：scale",[35,142275],{"style":126405,"src":142276},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[94,142278,142280],{"id":142279},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[22008,142282,142284],{"id":142283},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142286,142287,142288],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[283,142289,133208],{},[35,142291],{"style":126405,"src":142292},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142294,142295],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142297,142298],{},"对于行内元素无效",[14,142300,142301],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[22008,142303,142305],{"id":142304},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[114,142307,142308],{"className":126549,"code":138738,"language":126551,"meta":37,"style":37},[120,142309,142310,142316,142328],{"__ignoreMap":37},[123,142311,142312,142314],{"class":125,"line":126},[123,142313,51622],{"class":51311},[123,142315,15582],{"class":133},[123,142317,142318,142320,142322,142324,142326],{"class":125,"line":45},[123,142319,70481],{"class":182},[123,142321,51448],{"class":133},[123,142323,325],{"class":182},[123,142325,51567],{"class":182},[123,142327,1300],{"class":133},[123,142329,142330],{"class":125,"line":1189},[123,142331,1574],{"class":133},[94,142333,142335],{"id":142334},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[22008,142337,142339],{"id":142338},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142341,142342],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[35,142344],{"style":126405,"src":142345},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[22008,142347,142349],{"id":142348},"_18122-旋转效果","18.1.2.2 旋转效果",[114,142351,142353],{"className":126549,"code":142352,"language":126551,"meta":37,"style":37},"div {\n  transform: rotate(45deg);\n}\n",[120,142354,142355,142361,142379],{"__ignoreMap":37},[123,142356,142357,142359],{"class":125,"line":126},[123,142358,51622],{"class":51311},[123,142360,15582],{"class":133},[123,142362,142363,142365,142367,142370,142372,142374,142377],{"class":125,"line":45},[123,142364,136533],{"class":182},[123,142366,51448],{"class":133},[123,142368,142369],{"class":182},"rotate",[123,142371,134],{"class":133},[123,142373,663],{"class":182},[123,142375,142376],{"class":129},"deg",[123,142378,2728],{"class":133},[123,142380,142381],{"class":125,"line":1189},[123,142382,1574],{"class":133},[22008,142384,142386],{"id":142385},"_18123-三角做法","18.1.2.3 三角做法",[14,142388,142389],{},"该下标当经过最外层大盒子时会实现向上反转",[35,142391],{"style":126405,"src":142392},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[114,142394,142395],{"className":126549,"code":135069,"language":126551,"meta":37,"style":37},[120,142396,142397,142401,142407,142417,142427,142443,142453],{"__ignoreMap":37},[123,142398,142399],{"class":125,"line":126},[123,142400,135076],{"class":192},[123,142402,142403,142405],{"class":125,"line":45},[123,142404,135081],{"class":1972},[123,142406,15582],{"class":133},[123,142408,142409,142411,142413,142415],{"class":125,"line":1189},[123,142410,70579],{"class":182},[123,142412,51448],{"class":133},[123,142414,325],{"class":182},[123,142416,1300],{"class":133},[123,142418,142419,142421,142423,142425],{"class":125,"line":1204},[123,142420,70799],{"class":182},[123,142422,51448],{"class":133},[123,142424,325],{"class":182},[123,142426,1300],{"class":133},[123,142428,142429,142431,142433,142435,142437,142439,142441],{"class":125,"line":1210},[123,142430,70907],{"class":182},[123,142432,51448],{"class":133},[123,142434,580],{"class":182},[123,142436,51503],{"class":129},[123,142438,51532],{"class":182},[123,142440,64002],{"class":182},[123,142442,1300],{"class":133},[123,142444,142445,142447,142449,142451],{"class":125,"line":1224},[123,142446,135124],{"class":182},[123,142448,51448],{"class":133},[123,142450,62380],{"class":182},[123,142452,1300],{"class":133},[123,142454,142455],{"class":125,"line":1230},[123,142456,1574],{"class":133},[94,142458,142460],{"id":142459},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[22008,142462,142464],{"id":142463},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142466,142467],{},"设置中心点",[35,142469],{"style":126405,"src":142470},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142472,142473],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[22008,142475,142477],{"id":142476},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[114,142479,142481],{"className":126549,"code":142480,"language":126551,"meta":37,"style":37},"\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",[120,142482,142483,142488,142494,142509,142514,142519],{"__ignoreMap":37},[123,142484,142485],{"class":125,"line":126},[123,142486,142487],{"class":192},"\u002F* 转换中心点 *\u002F\n",[123,142489,142490,142492],{"class":125,"line":45},[123,142491,51622],{"class":51311},[123,142493,15582],{"class":133},[123,142495,142496,142499,142501,142503,142505,142507],{"class":125,"line":1189},[123,142497,142498],{"class":182},"  transform-origin",[123,142500,51448],{"class":133},[123,142502,51603],{"class":182},[123,142504,17154],{"class":182},[123,142506,130412],{"class":133},[123,142508,135222],{"class":192},[123,142510,142511],{"class":125,"line":1204},[123,142512,142513],{"class":192},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[123,142515,142516],{"class":125,"line":1210},[123,142517,142518],{"class":192},"  \u002F* transform-origin: left top; *\u002F\n",[123,142520,142521],{"class":125,"line":1224},[123,142522,1574],{"class":133},[22008,142524,142526],{"id":142525},"_18133-旋转案例","18.1.3.3 旋转案例",[35,142528],{"style":126405,"src":142529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[114,142531,142532],{"className":126549,"code":142352,"language":126551,"meta":37,"style":37},[120,142533,142534,142540,142556],{"__ignoreMap":37},[123,142535,142536,142538],{"class":125,"line":126},[123,142537,51622],{"class":51311},[123,142539,15582],{"class":133},[123,142541,142542,142544,142546,142548,142550,142552,142554],{"class":125,"line":45},[123,142543,136533],{"class":182},[123,142545,51448],{"class":133},[123,142547,142369],{"class":182},[123,142549,134],{"class":133},[123,142551,663],{"class":182},[123,142553,142376],{"class":129},[123,142555,2728],{"class":133},[123,142557,142558],{"class":125,"line":1189},[123,142559,1574],{"class":133},[94,142561,142563],{"id":142562},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[22008,142565,142567],{"id":142566},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142569,142570],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[35,142572],{"style":126405,"src":142573},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[22008,142575,142577],{"id":142576},"_18142-分页按钮","18.1.4.2 分页按钮",[35,142579],{"style":126405,"src":142580},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[114,142582,142584],{"className":126549,"code":142583,"language":126551,"meta":37,"style":37},"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",[120,142585,142586,142592,142608,142612,142616,142621,142627,142641,142646],{"__ignoreMap":37},[123,142587,142588,142590],{"class":125,"line":126},[123,142589,51622],{"class":51311},[123,142591,15582],{"class":133},[123,142593,142594,142596,142598,142601,142603,142606],{"class":125,"line":45},[123,142595,136533],{"class":182},[123,142597,51448],{"class":133},[123,142599,142600],{"class":182},"scale",[123,142602,134],{"class":133},[123,142604,142605],{"class":182},"1.2",[123,142607,2728],{"class":133},[123,142609,142610],{"class":125,"line":1189},[123,142611,1574],{"class":133},[123,142613,142614],{"class":125,"line":1204},[123,142615,136010],{"class":133},[123,142617,142618],{"class":125,"line":1210},[123,142619,142620],{"class":192},"\u002F* 2D 缩放 *\u002F\n",[123,142622,142623,142625],{"class":125,"line":1224},[123,142624,51622],{"class":51311},[123,142626,15582],{"class":133},[123,142628,142629,142631,142633,142635,142637,142639],{"class":125,"line":1230},[123,142630,136533],{"class":182},[123,142632,51448],{"class":133},[123,142634,142600],{"class":182},[123,142636,134],{"class":133},[123,142638,142605],{"class":182},[123,142640,2728],{"class":133},[123,142642,142643],{"class":125,"line":1321},[123,142644,142645],{"class":192},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[123,142647,142648],{"class":125,"line":1327},[123,142649,1574],{"class":133},[14,142651,142652],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[114,142654,142656],{"className":126549,"code":142655,"language":126551,"meta":37,"style":37},"\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",[120,142657,142658,142663,142673,142694,142715,142719,142724,142730,142757],{"__ignoreMap":37},[123,142659,142660],{"class":125,"line":126},[123,142661,142662],{"class":192},"\u002F* 定义动画 *\u002F\n",[123,142664,142665,142668,142671],{"class":125,"line":45},[123,142666,142667],{"class":129},"@keyframes",[123,142669,142670],{"class":5226}," move",[123,142672,15582],{"class":133},[123,142674,142675,142678,142680,142682,142684,142687,142689,142691],{"class":125,"line":1189},[123,142676,142677],{"class":1972},"  0%",[123,142679,79818],{"class":133},[123,142681,48145],{"class":182},[123,142683,51448],{"class":133},[123,142685,142686],{"class":182},"translateX",[123,142688,134],{"class":133},[123,142690,325],{"class":182},[123,142692,142693],{"class":133},"); }\n",[123,142695,142696,142699,142701,142703,142705,142707,142709,142711,142713],{"class":125,"line":1204},[123,142697,142698],{"class":1972},"  100%",[123,142700,79818],{"class":133},[123,142702,48145],{"class":182},[123,142704,51448],{"class":133},[123,142706,142686],{"class":182},[123,142708,134],{"class":133},[123,142710,445],{"class":182},[123,142712,51503],{"class":129},[123,142714,142693],{"class":133},[123,142716,142717],{"class":125,"line":1210},[123,142718,1574],{"class":133},[123,142720,142721],{"class":125,"line":1224},[123,142722,142723],{"class":192},"\u002F* 调用动画 *\u002F\n",[123,142725,142726,142728],{"class":125,"line":1230},[123,142727,51622],{"class":51311},[123,142729,15582],{"class":133},[123,142731,142732,142735,142737,142739,142741,142743,142745,142747,142749,142752,142755],{"class":125,"line":1321},[123,142733,142734],{"class":182},"  animation",[123,142736,51448],{"class":133},[123,142738,135235],{"class":182},[123,142740,25129],{"class":182},[123,142742,829],{"class":129},[123,142744,78691],{"class":182},[123,142746,4102],{"class":182},[123,142748,829],{"class":129},[123,142750,142751],{"class":182}," infinite",[123,142753,142754],{"class":182}," alternate",[123,142756,1300],{"class":133},[123,142758,142759],{"class":125,"line":1327},[123,142760,1574],{"class":133},[14,142762,142652],{},[114,142764,142767],{"className":142765,"code":142766,"language":5197},[5195],"\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",[120,142768,142766],{"__ignoreMap":37},[22008,142770,142772],{"id":142771},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,142774,142775],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[35,142777],{"style":126405,"src":142778},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[114,142780,142781],{"className":126549,"code":142655,"language":126551,"meta":37,"style":37},[120,142782,142783,142787,142795,142813,142833,142837,142841,142847,142871],{"__ignoreMap":37},[123,142784,142785],{"class":125,"line":126},[123,142786,142662],{"class":192},[123,142788,142789,142791,142793],{"class":125,"line":45},[123,142790,142667],{"class":129},[123,142792,142670],{"class":5226},[123,142794,15582],{"class":133},[123,142796,142797,142799,142801,142803,142805,142807,142809,142811],{"class":125,"line":1189},[123,142798,142677],{"class":1972},[123,142800,79818],{"class":133},[123,142802,48145],{"class":182},[123,142804,51448],{"class":133},[123,142806,142686],{"class":182},[123,142808,134],{"class":133},[123,142810,325],{"class":182},[123,142812,142693],{"class":133},[123,142814,142815,142817,142819,142821,142823,142825,142827,142829,142831],{"class":125,"line":1204},[123,142816,142698],{"class":1972},[123,142818,79818],{"class":133},[123,142820,48145],{"class":182},[123,142822,51448],{"class":133},[123,142824,142686],{"class":182},[123,142826,134],{"class":133},[123,142828,445],{"class":182},[123,142830,51503],{"class":129},[123,142832,142693],{"class":133},[123,142834,142835],{"class":125,"line":1210},[123,142836,1574],{"class":133},[123,142838,142839],{"class":125,"line":1224},[123,142840,142723],{"class":192},[123,142842,142843,142845],{"class":125,"line":1230},[123,142844,51622],{"class":51311},[123,142846,15582],{"class":133},[123,142848,142849,142851,142853,142855,142857,142859,142861,142863,142865,142867,142869],{"class":125,"line":1321},[123,142850,142734],{"class":182},[123,142852,51448],{"class":133},[123,142854,135235],{"class":182},[123,142856,25129],{"class":182},[123,142858,829],{"class":129},[123,142860,78691],{"class":182},[123,142862,4102],{"class":182},[123,142864,829],{"class":129},[123,142866,142751],{"class":182},[123,142868,142754],{"class":182},[123,142870,1300],{"class":133},[123,142872,142873],{"class":125,"line":1327},[123,142874,1574],{"class":133},[14,142876,142877],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[94,142879,142881],{"id":142880},"_1823-知识点回顾","18.2.3 知识点回顾",[114,142883,142884],{"className":126549,"code":128718,"language":126551,"meta":37,"style":37},[120,142885,142886,142892,142902],{"__ignoreMap":37},[123,142887,142888,142890],{"class":125,"line":126},[123,142889,51622],{"class":51311},[123,142891,15582],{"class":133},[123,142893,142894,142896,142898,142900],{"class":125,"line":45},[123,142895,128731],{"class":182},[123,142897,51448],{"class":133},[123,142899,61747],{"class":182},[123,142901,1300],{"class":133},[123,142903,142904],{"class":125,"line":1189},[123,142905,1574],{"class":133},[65,142907,142909],{"id":142908},"_183-3d-转换","18.3 3D 转换",[14,142911,142912],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[94,142914,142916],{"id":142915},"_1831-坐标轴认识","18.3.1 坐标轴认识",[35,142918],{"style":126405,"src":142919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[94,142921,142923],{"id":142922},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[35,142925],{"style":126405,"src":142926},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,142928,142929],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,142931,142932],{},"translate3d的效果需要搭配透视perspective来使用",[35,142934],{"style":126405,"src":142935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[94,142937,142939],{"id":142938},"_1833-透视-perspective","18.3.3 透视 perspective",[35,142941],{"style":126405,"src":142942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,142944,142945],{},"透视写在父盒子上，单位为像素",[94,142947,142949],{"id":142948},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[22008,142951,142953],{"id":142952},"_18341-分开解释","18.3.4.1 分开解释",[35,142955],{"style":126405,"src":142956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[35,142958],{"style":126405,"src":142959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[35,142961],{"style":126405,"src":142962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,142964,142965],{},"总结来说就是左手原则",[22008,142967,142969],{"id":142968},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[35,142971],{"style":126405,"src":142972},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[94,142974,142976],{"id":142975},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[35,142978],{"style":126405,"src":142979},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[35,142981],{"style":126405,"src":142982},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[114,142984,142986],{"className":126549,"code":142985,"language":126551,"meta":37,"style":37},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[120,142987,142988,142994,143007,143024],{"__ignoreMap":37},[123,142989,142990,142992],{"class":125,"line":126},[123,142991,51622],{"class":51311},[123,142993,15582],{"class":133},[123,142995,142996,142999,143001,143003,143005],{"class":125,"line":45},[123,142997,142998],{"class":182},"  perspective",[123,143000,51448],{"class":133},[123,143002,65085],{"class":182},[123,143004,51503],{"class":129},[123,143006,1300],{"class":133},[123,143008,143009,143011,143013,143016,143018,143020,143022],{"class":125,"line":1189},[123,143010,136533],{"class":182},[123,143012,51448],{"class":133},[123,143014,143015],{"class":182},"rotateX",[123,143017,134],{"class":133},[123,143019,663],{"class":182},[123,143021,142376],{"class":129},[123,143023,2728],{"class":133},[123,143025,143026],{"class":125,"line":1204},[123,143027,1574],{"class":133},[94,143029,143031],{"id":143030},"_1836-案例","18.3.6 案例",[22008,143033,143035],{"id":143034},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[35,143037],{"style":126405,"src":143038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[35,143040],{"style":126405,"src":143041},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[35,143043],{"style":126405,"src":143044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[114,143046,143048],{"className":126549,"code":143047,"language":126551,"meta":37,"style":37},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[120,143049,143050,143055,143061,143073],{"__ignoreMap":37},[123,143051,143052],{"class":125,"line":126},[123,143053,143054],{"class":192},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[123,143056,143057,143059],{"class":125,"line":45},[123,143058,133546],{"class":1972},[123,143060,15582],{"class":133},[123,143062,143063,143065,143067,143069,143071],{"class":125,"line":1189},[123,143064,142998],{"class":182},[123,143066,51448],{"class":133},[123,143068,65085],{"class":182},[123,143070,51503],{"class":129},[123,143072,1300],{"class":133},[123,143074,143075],{"class":125,"line":1204},[123,143076,1574],{"class":133},[22008,143078,143080],{"id":143079},"_18362-3d导航栏","18.3.6.2 3D导航栏",[35,143082],{"style":126405,"src":143083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[114,143085,143086],{"className":127296,"code":130653,"language":127298,"meta":37,"style":37},[120,143087,143088,143092,143106,143110],{"__ignoreMap":37},[123,143089,143090],{"class":125,"line":126},[123,143091,130660],{"class":192},[123,143093,143094,143096,143098,143100,143102,143104],{"class":125,"line":45},[123,143095,1044],{"class":133},[123,143097,51622],{"class":51311},[123,143099,53497],{"class":1972},[123,143101,179],{"class":133},[123,143103,130673],{"class":238},[123,143105,51318],{"class":133},[123,143107,143108],{"class":125,"line":1189},[123,143109,130680],{"class":133},[123,143111,143112,143114,143116],{"class":125,"line":1204},[123,143113,51796],{"class":133},[123,143115,51622],{"class":51311},[123,143117,51318],{"class":133},[22008,143119,143121],{"id":143120},"_18363-旋转木马","18.3.6.3 旋转木马",[35,143123],{"style":126405,"src":143124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[114,143126,143127],{"className":126549,"code":142352,"language":126551,"meta":37,"style":37},[120,143128,143129,143135,143151],{"__ignoreMap":37},[123,143130,143131,143133],{"class":125,"line":126},[123,143132,51622],{"class":51311},[123,143134,15582],{"class":133},[123,143136,143137,143139,143141,143143,143145,143147,143149],{"class":125,"line":45},[123,143138,136533],{"class":182},[123,143140,51448],{"class":133},[123,143142,142369],{"class":182},[123,143144,134],{"class":133},[123,143146,663],{"class":182},[123,143148,142376],{"class":129},[123,143150,2728],{"class":133},[123,143152,143153],{"class":125,"line":1189},[123,143154,1574],{"class":133},[5136,143156,143157],{},"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":37,"searchDepth":45,"depth":45,"links":143159},[143160,143167],{"id":142255,"depth":45,"text":142256,"children":143161},[143162,143163,143164,143165,143166],{"id":142279,"depth":1189,"text":142280},{"id":142334,"depth":1189,"text":142335},{"id":142459,"depth":1189,"text":142460},{"id":142562,"depth":1189,"text":142563},{"id":142880,"depth":1189,"text":142881},{"id":142908,"depth":45,"text":142909,"children":143168},[143169,143170,143171,143172,143173,143174],{"id":142915,"depth":1189,"text":142916},{"id":142922,"depth":1189,"text":142923},{"id":142938,"depth":1189,"text":142939},{"id":142948,"depth":1189,"text":142949},{"id":142975,"depth":1189,"text":142976},{"id":143030,"depth":1189,"text":143031},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142247,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143181,"title":143182,"body":143183,"description":47,"extension":48,"meta":143386,"navigation":50,"path":143387,"seo":143388,"stem":143389,"__hash__":143390},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143184,"toc":143375},[143185,143188,143192,143195,143198,143202,143205,143208,143211,143215,143218,143222,143225,143229,143232,143236,143250,143254,143279,143282,143285,143302,143306,143310,143313,143316,143320,143323,143326,143344,143348,143351,143365,143369,143372],[10,143186,143182],{"id":143187},"_19-移动端基础-前缀现状与视口",[65,143189,143191],{"id":143190},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[35,143193],{"style":126405,"src":143194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143196,143197],{},"意思就是加个前缀，增加兼容性",[65,143199,143201],{"id":143200},"_192-移动端现状认识","19.2 移动端现状认识",[35,143203],{"style":126405,"src":143204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143206,143207],{},"调试方法：",[35,143209],{"style":126405,"src":143210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[65,143212,143214],{"id":143213},"_193-视口","19.3 视口",[14,143216,143217],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[94,143219,143221],{"id":143220},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[35,143223],{"style":126405,"src":143224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[94,143226,143228],{"id":143227},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[35,143230],{"style":126405,"src":143231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[94,143233,143235],{"id":143234},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1141,143237,143238,143241,143244,143247],{},[80,143239,143240],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[80,143242,143243],{},"理想视口，对设备来讲，是最理想的视口尺寸",[80,143245,143246],{},"需要手动添写meta视口标签通知浏览器操作",[80,143248,143249],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[94,143251,143253],{"id":143252},"_1934-meta视口标签","19.3.4 meta视口标签",[114,143255,143257],{"className":127296,"code":143256,"language":127298,"meta":37,"style":37},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[120,143258,143259],{"__ignoreMap":37},[123,143260,143261,143263,143265,143267,143269,143271,143273,143275,143277],{"class":125,"line":126},[123,143262,1044],{"class":133},[123,143264,51355],{"class":51311},[123,143266,14930],{"class":1972},[123,143268,179],{"class":133},[123,143270,51402],{"class":238},[123,143272,51382],{"class":1972},[123,143274,179],{"class":133},[123,143276,51409],{"class":238},[123,143278,51318],{"class":133},[35,143280],{"style":126405,"src":143281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143283,143284],{},"标准视口设置：",[77,143286,143287,143290,143293,143296,143299],{},[80,143288,143289],{},"视口宽度和设备保持一致",[80,143291,143292],{},"视口的默认缩放比例1.0",[80,143294,143295],{},"不允许用户自行缩放",[80,143297,143298],{},"最大允许的缩放比例1.0",[80,143300,143301],{},"最小允许的缩放比例1.0",[94,143303,143305],{"id":143304},"_1935-二倍图","19.3.5 二倍图",[22008,143307,143309],{"id":143308},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[35,143311],{"style":126405,"src":143312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[35,143314],{"style":126405,"src":143315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[22008,143317,143319],{"id":143318},"_19352-多倍图","19.3.5.2 多倍图",[35,143321],{"style":126405,"src":143322},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143324,143325],{},"二倍图法，代码如下：",[114,143327,143329],{"className":126549,"code":143328,"language":126551,"meta":37,"style":37},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[120,143330,143331,143336],{"__ignoreMap":37},[123,143332,143333],{"class":125,"line":126},[123,143334,143335],{"class":192},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[123,143337,143338,143341],{"class":125,"line":45},[123,143339,143340],{"class":51311},"background-size",[123,143342,143343],{"class":133},": 50% 50%;\n",[22008,143345,143347],{"id":143346},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[35,143349],{"style":126405,"src":143350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[77,143352,143353,143356,143359,143362],{},[80,143354,143355],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[80,143357,143358],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[80,143360,143361],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[80,143363,143364],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[22008,143366,143368],{"id":143367},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[35,143370],{"style":126405,"src":143371},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5136,143373,143374],{},"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":37,"searchDepth":45,"depth":45,"links":143376},[143377,143378,143379],{"id":143190,"depth":45,"text":143191},{"id":143200,"depth":45,"text":143201},{"id":143213,"depth":45,"text":143214,"children":143380},[143381,143382,143383,143384,143385],{"id":143220,"depth":1189,"text":143221},{"id":143227,"depth":1189,"text":143228},{"id":143234,"depth":1189,"text":143235},{"id":143252,"depth":1189,"text":143253},{"id":143304,"depth":1189,"text":143305},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143182,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143392,"title":143393,"body":143394,"description":47,"extension":48,"meta":144271,"navigation":50,"path":144272,"seo":144273,"stem":144274,"__hash__":144275},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143395,"toc":144255},[143396,143399,143403,143410,143413,143420,143423,143428,143431,143435,143439,143446,143449,143452,143456,143459,143462,143465,143468,143471,143475,143478,143482,143484,143487,143490,143493,143496,143498,143501,143503,143533,143535,143565,143569,143572,143576,143579,143596,143599,143602,143678,143680,143683,143686,143689,143692,143694,143697,143700,143704,143726,143729,143732,143736,143739,143745,143748,143752,143755,143758,143762,143765,143768,143771,143775,143778,143781,143784,143787,143791,143794,143798,143805,143808,143811,143814,143817,143827,143830,143833,143840,143843,143847,143850,143853,143857,143860,143863,143866,143911,143914,143917,143920,143922,144051,144053,144091,144094,144097,144099,144217,144219,144253],[10,143397,143393],{"id":143398},"_20-移动端布局实战上篇",[65,143400,143402],{"id":143401},"_201-移动端主流方案","20.1 移动端主流方案",[77,143404,143405],{},[80,143406,143407],{},[283,143408,143409],{},"单独移动端页面（主流）",[35,143411],{"style":126405,"src":143412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[77,143414,143415],{"start":45},[80,143416,143417],{},[283,143418,143419],{},"响应式兼容PC移动端",[35,143421],{"style":126405,"src":143422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[77,143424,143425],{"start":1189},[80,143426,143427],{},"两种页面选型布局方式",[35,143429],{"style":126405,"src":143430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[65,143432,143434],{"id":143433},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[94,143436,143438],{"id":143437},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143440,143441,143442],{},"官网地址： ",[372,143443,143444],{"href":143444,"rel":143445},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23875],[35,143447],{"style":126405,"src":143448},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[35,143450],{"style":126405,"src":143451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[94,143453,143455],{"id":143454},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[35,143457],{"style":126405,"src":143458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[35,143460],{"style":126405,"src":143461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143463,143464],{},"去除高亮：",[14,143466,143467],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143469,143470],{},"-webkit- tap-highlight-color: transparent;",[65,143472,143474],{"id":143473},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[35,143476],{"style":126405,"src":143477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[65,143479,143481],{"id":143480},"_204-流式布局案例","20.4 流式布局案例",[14,143483,163],{},[14,143485,143486],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143488,143489],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143491,143492],{},"图片格式：",[35,143494],{"style":126405,"src":143495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143497,135592],{},[35,143499],{"style":126405,"src":143500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143502,139919],{},[114,143504,143505],{"className":127296,"code":134051,"language":127298,"meta":37,"style":37},[120,143506,143507],{"__ignoreMap":37},[123,143508,143509,143511,143513,143515,143517,143519,143521,143523,143525,143527,143529,143531],{"class":125,"line":126},[123,143510,1044],{"class":133},[123,143512,35],{"class":51311},[123,143514,55250],{"class":1972},[123,143516,179],{"class":133},[123,143518,134066],{"class":238},[123,143520,55258],{"class":1972},[123,143522,179],{"class":133},[123,143524,134073],{"class":238},[123,143526,134076],{"class":1972},[123,143528,179],{"class":133},[123,143530,134081],{"class":238},[123,143532,51318],{"class":133},[14,143534,140008],{},[114,143536,143537],{"className":127296,"code":134051,"language":127298,"meta":37,"style":37},[120,143538,143539],{"__ignoreMap":37},[123,143540,143541,143543,143545,143547,143549,143551,143553,143555,143557,143559,143561,143563],{"class":125,"line":126},[123,143542,1044],{"class":133},[123,143544,35],{"class":51311},[123,143546,55250],{"class":1972},[123,143548,179],{"class":133},[123,143550,134066],{"class":238},[123,143552,55258],{"class":1972},[123,143554,179],{"class":133},[123,143556,134073],{"class":238},[123,143558,134076],{"class":1972},[123,143560,179],{"class":133},[123,143562,134081],{"class":238},[123,143564,51318],{"class":133},[65,143566,143568],{"id":143567},"_205-flex布局","20.5 flex布局",[35,143570],{"style":126405,"src":143571},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[94,143573,143575],{"id":143574},"_2051-布局原理","20.5.1 布局原理",[14,143577,143578],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1141,143580,143581,143584,143587,143590,143593],{},[80,143582,143583],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[80,143585,143586],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[80,143588,143589],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[80,143591,143592],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[80,143594,143595],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143597,143598],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143600,143601],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[114,143603,143605],{"className":126549,"code":143604,"language":126551,"meta":37,"style":37},"\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",[120,143606,143607,143612,143619,143629,143641,143652,143663,143674],{"__ignoreMap":37},[123,143608,143609],{"class":125,"line":126},[123,143610,143611],{"class":192},"\u002F* Flex 弹性布局 *\u002F\n",[123,143613,143614,143617],{"class":125,"line":45},[123,143615,143616],{"class":1972},".container",[123,143618,15582],{"class":133},[123,143620,143621,143623,143625,143627],{"class":125,"line":1189},[123,143622,128165],{"class":182},[123,143624,51448],{"class":133},[123,143626,51488],{"class":182},[123,143628,1300],{"class":133},[123,143630,143631,143634,143636,143639],{"class":125,"line":1204},[123,143632,143633],{"class":182},"  flex-direction",[123,143635,51448],{"class":133},[123,143637,143638],{"class":182},"row",[123,143640,1300],{"class":133},[123,143642,143643,143646,143648,143650],{"class":125,"line":1210},[123,143644,143645],{"class":182},"  justify-content",[123,143647,51448],{"class":133},[123,143649,51679],{"class":182},[123,143651,1300],{"class":133},[123,143653,143654,143657,143659,143661],{"class":125,"line":1224},[123,143655,143656],{"class":182},"  align-items",[123,143658,51448],{"class":133},[123,143660,51603],{"class":182},[123,143662,1300],{"class":133},[123,143664,143665,143668,143670,143672],{"class":125,"line":1230},[123,143666,143667],{"class":182},"  flex-wrap",[123,143669,51448],{"class":133},[123,143671,78621],{"class":182},[123,143673,1300],{"class":133},[123,143675,143676],{"class":125,"line":1321},[123,143677,1574],{"class":133},[14,143679,70464],{},[14,143681,143682],{},".form-item .male-label {",[14,143684,143685],{},"   margin-right: 20px;",[14,143687,143688],{},"   display: inline-flex;",[14,143690,143691],{},"   align-items: center;",[14,143693,1080],{},[35,143695],{"style":126405,"src":143696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[35,143698],{"style":126405,"src":143699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[94,143701,143703],{"id":143702},"_2052-常见父项属性","20.5.2 常见父项属性",[77,143705,143706,143709,143712,143715,143718,143721,143724],{},[80,143707,143708],{},"flex-direction：设置主轴的方向",[80,143710,143711],{},"justify-content：设置主轴上的子元素排列方式",[80,143713,143714],{},"flex-wrap：设置子元素是否换行",[80,143716,143717],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[80,143719,143720],{},"align-items：设置侧轴上的子元素排列方式（单行）",[80,143722,143723],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[80,143725,143708],{},[35,143727],{"style":126405,"src":143728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[35,143730],{"style":126405,"src":143731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[77,143733,143734],{"start":45},[80,143735,143711],{},[35,143737],{"style":126405,"src":143738},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,143740,143741,143744],{},[120,143742,143743],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,143746,143747],{},"跟着主轴走",[77,143749,143750],{"start":1189},[80,143751,143714],{},[35,143753],{"style":126405,"src":143754},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,143756,143757],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[77,143759,143760],{"start":1204},[80,143761,143717],{},[35,143763],{"style":126405,"src":143764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,143766,143767],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,143769,143770],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[77,143772,143773],{"start":1210},[80,143774,143720],{},[35,143776],{"style":126405,"src":143777},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,143779,143780],{},"align-items与align-content之间的区别：",[14,143782,143783],{},"单找items，多找content",[35,143785],{"style":126405,"src":143786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[77,143788,143789],{"start":1224},[80,143790,143723],{},[35,143792],{"style":126405,"src":143793},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[94,143795,143797],{"id":143796},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[77,143799,143800],{},[80,143801,143802],{},[283,143803,143804],{},"flex 属性",[14,143806,143807],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[35,143809],{"style":126405,"src":143810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,143812,143813],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,143815,143816],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[77,143818,143819],{"start":45},[80,143820,143821,13805,143824],{},[283,143822,143823],{},"align-self",[283,143825,143826],{},"控制子项自己在侧轴上的排列方式",[35,143828],{"style":126405,"src":143829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,143831,143832],{},"单个子盒子在父盒子侧轴上的排列方式",[77,143834,143835],{"start":1189},[80,143836,143837,143839],{},[283,143838,95294],{}," 属性定义项目的排列顺序",[35,143841],{"style":126405,"src":143842},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[94,143844,143846],{"id":143845},"_2054-背景线性渐变","20.5.4 背景线性渐变",[35,143848],{"style":126405,"src":143849},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,143851,143852],{},"必须要添加浏览器的私有前缀",[94,143854,143856],{"id":143855},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,143858,143859],{},"学到最重要的知识：",[14,143861,143862],{},"flex处理这样的布局思路",[35,143864],{"style":126405,"src":143865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[114,143867,143869],{"className":126549,"code":143868,"language":126551,"meta":37,"style":37},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[120,143870,143871,143877,143887,143897,143907],{"__ignoreMap":37},[123,143872,143873,143875],{"class":125,"line":126},[123,143874,143616],{"class":1972},[123,143876,15582],{"class":133},[123,143878,143879,143881,143883,143885],{"class":125,"line":45},[123,143880,128165],{"class":182},[123,143882,51448],{"class":133},[123,143884,51488],{"class":182},[123,143886,1300],{"class":133},[123,143888,143889,143891,143893,143895],{"class":125,"line":1189},[123,143890,143645],{"class":182},[123,143892,51448],{"class":133},[123,143894,51603],{"class":182},[123,143896,1300],{"class":133},[123,143898,143899,143901,143903,143905],{"class":125,"line":1204},[123,143900,143656],{"class":182},[123,143902,51448],{"class":133},[123,143904,51603],{"class":182},[123,143906,1300],{"class":133},[123,143908,143909],{"class":125,"line":1210},[123,143910,1574],{"class":133},[14,143912,143913],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,143915,143916],{},"使用属性选择器",[35,143918],{"style":126405,"src":143919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,143921,68900],{},[114,143923,143925],{"className":127296,"code":143924,"language":127298,"meta":37,"style":37},"\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",[120,143926,143927,143932,143946,143951,143971,143976,143995,144000,144019,144024,144043],{"__ignoreMap":37},[123,143928,143929],{"class":125,"line":126},[123,143930,143931],{"class":192},"\u003C!-- 携程网移动端案例结构 -->\n",[123,143933,143934,143936,143938,143940,143942,143944],{"class":125,"line":45},[123,143935,1044],{"class":133},[123,143937,51622],{"class":51311},[123,143939,53497],{"class":1972},[123,143941,179],{"class":133},[123,143943,92334],{"class":238},[123,143945,51318],{"class":133},[123,143947,143948],{"class":125,"line":1189},[123,143949,143950],{"class":192},"  \u003C!-- 搜索栏 -->\n",[123,143952,143953,143955,143957,143959,143961,143964,143967,143969],{"class":125,"line":1204},[123,143954,52155],{"class":133},[123,143956,51622],{"class":51311},[123,143958,53497],{"class":1972},[123,143960,179],{"class":133},[123,143962,143963],{"class":238},"\"search-index\"",[123,143965,143966],{"class":133},">...\u003C\u002F",[123,143968,51622],{"class":51311},[123,143970,51318],{"class":133},[123,143972,143973],{"class":125,"line":1210},[123,143974,143975],{"class":192},"  \u003C!-- 焦点图 -->\n",[123,143977,143978,143980,143982,143984,143986,143989,143991,143993],{"class":125,"line":1224},[123,143979,52155],{"class":133},[123,143981,51622],{"class":51311},[123,143983,53497],{"class":1972},[123,143985,179],{"class":133},[123,143987,143988],{"class":238},"\"focus\"",[123,143990,143966],{"class":133},[123,143992,51622],{"class":51311},[123,143994,51318],{"class":133},[123,143996,143997],{"class":125,"line":1230},[123,143998,143999],{"class":192},"  \u003C!-- 主导航 -->\n",[123,144001,144002,144004,144006,144008,144010,144013,144015,144017],{"class":125,"line":1321},[123,144003,52155],{"class":133},[123,144005,51622],{"class":51311},[123,144007,53497],{"class":1972},[123,144009,179],{"class":133},[123,144011,144012],{"class":238},"\"local-nav\"",[123,144014,143966],{"class":133},[123,144016,51622],{"class":51311},[123,144018,51318],{"class":133},[123,144020,144021],{"class":125,"line":1327},[123,144022,144023],{"class":192},"  \u003C!-- 子导航 -->\n",[123,144025,144026,144028,144030,144032,144034,144037,144039,144041],{"class":125,"line":1339},[123,144027,52155],{"class":133},[123,144029,51622],{"class":51311},[123,144031,53497],{"class":1972},[123,144033,179],{"class":133},[123,144035,144036],{"class":238},"\"nav-common\"",[123,144038,143966],{"class":133},[123,144040,51622],{"class":51311},[123,144042,51318],{"class":133},[123,144044,144045,144047,144049],{"class":125,"line":1621},[123,144046,51796],{"class":133},[123,144048,51622],{"class":51311},[123,144050,51318],{"class":133},[14,144052,70464],{},[114,144054,144055],{"className":126549,"code":137001,"language":126551,"meta":37,"style":37},[120,144056,144057,144071,144087],{"__ignoreMap":37},[123,144058,144059,144061,144063,144065,144067,144069],{"class":125,"line":126},[123,144060,53832],{"class":51311},[123,144062,1024],{"class":133},[123,144064,103104],{"class":1972},[123,144066,179],{"class":129},[123,144068,62710],{"class":238},[123,144070,137018],{"class":133},[123,144072,144073,144075,144077,144079,144081,144083,144085],{"class":125,"line":45},[123,144074,70907],{"class":182},[123,144076,51448],{"class":133},[123,144078,351],{"class":182},[123,144080,51503],{"class":129},[123,144082,51532],{"class":182},[123,144084,130129],{"class":182},[123,144086,1300],{"class":133},[123,144088,144089],{"class":125,"line":1189},[123,144090,1574],{"class":133},[14,144092,144093],{},"总代码和效果展示：",[35,144095],{"style":126405,"src":144096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144098,68900],{},[114,144100,144101],{"className":127296,"code":143924,"language":127298,"meta":37,"style":37},[120,144102,144103,144107,144121,144125,144143,144147,144165,144169,144187,144191,144209],{"__ignoreMap":37},[123,144104,144105],{"class":125,"line":126},[123,144106,143931],{"class":192},[123,144108,144109,144111,144113,144115,144117,144119],{"class":125,"line":45},[123,144110,1044],{"class":133},[123,144112,51622],{"class":51311},[123,144114,53497],{"class":1972},[123,144116,179],{"class":133},[123,144118,92334],{"class":238},[123,144120,51318],{"class":133},[123,144122,144123],{"class":125,"line":1189},[123,144124,143950],{"class":192},[123,144126,144127,144129,144131,144133,144135,144137,144139,144141],{"class":125,"line":1204},[123,144128,52155],{"class":133},[123,144130,51622],{"class":51311},[123,144132,53497],{"class":1972},[123,144134,179],{"class":133},[123,144136,143963],{"class":238},[123,144138,143966],{"class":133},[123,144140,51622],{"class":51311},[123,144142,51318],{"class":133},[123,144144,144145],{"class":125,"line":1210},[123,144146,143975],{"class":192},[123,144148,144149,144151,144153,144155,144157,144159,144161,144163],{"class":125,"line":1224},[123,144150,52155],{"class":133},[123,144152,51622],{"class":51311},[123,144154,53497],{"class":1972},[123,144156,179],{"class":133},[123,144158,143988],{"class":238},[123,144160,143966],{"class":133},[123,144162,51622],{"class":51311},[123,144164,51318],{"class":133},[123,144166,144167],{"class":125,"line":1230},[123,144168,143999],{"class":192},[123,144170,144171,144173,144175,144177,144179,144181,144183,144185],{"class":125,"line":1321},[123,144172,52155],{"class":133},[123,144174,51622],{"class":51311},[123,144176,53497],{"class":1972},[123,144178,179],{"class":133},[123,144180,144012],{"class":238},[123,144182,143966],{"class":133},[123,144184,51622],{"class":51311},[123,144186,51318],{"class":133},[123,144188,144189],{"class":125,"line":1327},[123,144190,144023],{"class":192},[123,144192,144193,144195,144197,144199,144201,144203,144205,144207],{"class":125,"line":1339},[123,144194,52155],{"class":133},[123,144196,51622],{"class":51311},[123,144198,53497],{"class":1972},[123,144200,179],{"class":133},[123,144202,144036],{"class":238},[123,144204,143966],{"class":133},[123,144206,51622],{"class":51311},[123,144208,51318],{"class":133},[123,144210,144211,144213,144215],{"class":125,"line":1621},[123,144212,51796],{"class":133},[123,144214,51622],{"class":51311},[123,144216,51318],{"class":133},[14,144218,70464],{},[114,144220,144221],{"className":127296,"code":130653,"language":127298,"meta":37,"style":37},[120,144222,144223,144227,144241,144245],{"__ignoreMap":37},[123,144224,144225],{"class":125,"line":126},[123,144226,130660],{"class":192},[123,144228,144229,144231,144233,144235,144237,144239],{"class":125,"line":45},[123,144230,1044],{"class":133},[123,144232,51622],{"class":51311},[123,144234,53497],{"class":1972},[123,144236,179],{"class":133},[123,144238,130673],{"class":238},[123,144240,51318],{"class":133},[123,144242,144243],{"class":125,"line":1189},[123,144244,130680],{"class":133},[123,144246,144247,144249,144251],{"class":125,"line":1204},[123,144248,51796],{"class":133},[123,144250,51622],{"class":51311},[123,144252,51318],{"class":133},[5136,144254,137950],{},{"title":37,"searchDepth":45,"depth":45,"links":144256},[144257,144258,144262,144263,144264],{"id":143401,"depth":45,"text":143402},{"id":143433,"depth":45,"text":143434,"children":144259},[144260,144261],{"id":143437,"depth":1189,"text":143438},{"id":143454,"depth":1189,"text":143455},{"id":143473,"depth":45,"text":143474},{"id":143480,"depth":45,"text":143481},{"id":143567,"depth":45,"text":143568,"children":144265},[144266,144267,144268,144269,144270],{"id":143574,"depth":1189,"text":143575},{"id":143702,"depth":1189,"text":143703},{"id":143796,"depth":1189,"text":143797},{"id":143845,"depth":1189,"text":143846},{"id":143855,"depth":1189,"text":143856},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143393,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144277,"title":144278,"body":144279,"description":47,"extension":48,"meta":145506,"navigation":50,"path":145507,"seo":145508,"stem":145509,"__hash__":145510},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144280,"toc":145484},[144281,144284,144288,144292,144295,144298,144302,144307,144310,144313,144316,144319,144322,144379,144382,144387,144390,144393,144397,144408,144412,144415,144418,144425,144430,144434,144437,144443,144446,144450,144453,144460,144463,144466,144473,144476,144483,144486,144489,144496,144499,144502,144504,144521,144525,144528,144531,144534,144538,144541,144544,144547,144550,144553,144556,144558,144561,144564,144626,144629,144739,144746,144752,144755,144758,144762,144765,144769,144774,144777,144784,144787,144793,144798,144801,144804,144807,144810,144813,144816,144819,144822,144878,144880,144906,144910,144913,144916,144919,144927,144930,144933,144937,144993,144996,145000,145006,145017,145020,145025,145028,145031,145037,145040,145043,145046,145049,145052,145055,145058,145061,145086,145092,145095,145098,145101,145104,145107,145110,145115,145118,145121,145124,145132,145135,145142,145145,145148,145150,145174,145176,145179,145182,145185,145188,145191,145194,145197,145231,145234,145237,145271,145278,145281,145284,145287,145290,145293,145296,145303,145306,145309,145312,145315,145322,145325,145328,145335,145338,145341,145345,145348,145351,145354,145357,145360,145363,145366,145369,145371,145395,145397,145421,145425,145436,145439,145442,145445,145448,145451,145454,145457,145460,145463,145466,145469,145472,145475,145478,145481],[10,144282,144278],{"id":144283},"_21-移动端布局实战下篇",[65,144285,144287],{"id":144286},"_211-rem适配布局","21.1 rem适配布局",[94,144289,144291],{"id":144290},"_2111-rem单位","21.1.1 rem单位",[35,144293],{"style":126405,"src":144294},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144296,144297],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[94,144299,144301],{"id":144300},"_2112-媒体查询","21.1.2 媒体查询",[77,144303,144304],{},[80,144305,144306],{},"参数介绍",[35,144308],{"style":126405,"src":144309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[35,144311],{"style":126405,"src":144312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[35,144314],{"style":126405,"src":144315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[35,144317],{"style":126405,"src":144318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[35,144320],{"style":126405,"src":144321},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[114,144323,144325],{"className":126549,"code":144324,"language":126551,"meta":37,"style":37},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[120,144326,144327,144332,144351,144358,144371,144375],{"__ignoreMap":37},[123,144328,144329],{"class":125,"line":126},[123,144330,144331],{"class":192},"\u002F* 媒体查询 *\u002F\n",[123,144333,144334,144337,144339,144342,144344,144347,144349],{"class":125,"line":45},[123,144335,144336],{"class":129},"@media",[123,144338,1667],{"class":133},[123,144340,144341],{"class":182},"max-width",[123,144343,51448],{"class":133},[123,144345,144346],{"class":182},"768",[123,144348,51503],{"class":129},[123,144350,12452],{"class":133},[123,144352,144353,144356],{"class":125,"line":1189},[123,144354,144355],{"class":1972},"  .container",[123,144357,15582],{"class":133},[123,144359,144360,144363,144365,144367,144369],{"class":125,"line":1204},[123,144361,144362],{"class":182},"    width",[123,144364,51448],{"class":133},[123,144366,445],{"class":182},[123,144368,462],{"class":129},[123,144370,1300],{"class":133},[123,144372,144373],{"class":125,"line":1210},[123,144374,127345],{"class":133},[123,144376,144377],{"class":125,"line":1224},[123,144378,1574],{"class":133},[14,144380,144381],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[77,144383,144384],{"start":45},[80,144385,144386],{},"引入资源",[35,144388],{"style":126405,"src":144389},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144391,144392],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[94,144394,144396],{"id":144395},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1141,144398,144399,144402,144405],{},[80,144400,144401],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[80,144403,144404],{},"媒体查询可以根据不同设备宽度来修改样式",[80,144406,144407],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[65,144409,144411],{"id":144410},"_212-less基础","21.2 Less基础",[14,144413,144414],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144416,144417],{},"Less可以解决该问题，它是css的扩展语言",[14,144419,144420,144421],{},"Less中文网址： ",[372,144422,144423],{"href":144423,"rel":144424},"http:\u002F\u002Flesscss.cn\u002F",[23875],[14,144426,144427],{},[283,144428,144429],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[94,144431,144433],{"id":144432},"_2121-less安装","21.2.1 less安装",[14,144435,144436],{},"如果使用vscode，则无需进行下方安装步骤",[14,144438,144439],{},[372,144440,144441],{"href":144441,"rel":144442},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23875],[35,144444],{"style":126405,"src":144445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[94,144447,144449],{"id":144448},"_2122-less使用","21.2.2 less使用",[14,144451,144452],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[77,144454,144455],{},[80,144456,144457],{},[283,144458,144459],{},"Less 变量",[35,144461],{"style":126405,"src":144462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[35,144464],{"style":126405,"src":144465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[77,144467,144468],{"start":45},[80,144469,144470],{},[283,144471,144472],{},"Less 编译",[35,144474],{"style":126405,"src":144475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[77,144477,144478],{"start":1189},[80,144479,144480],{},[283,144481,144482],{},"Less 嵌套",[35,144484],{"style":126405,"src":144485},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[35,144487],{"style":126405,"src":144488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[77,144490,144491],{"start":1204},[80,144492,144493],{},[283,144494,144495],{},"Less 运算",[35,144497],{"style":126405,"src":144498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144500,144501],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144503,163],{},[1141,144505,144506,144509,144512,144515,144518],{},[80,144507,144508],{},"乘号（*）和除号（\u002F）的写法",[80,144510,144511],{},"运算符中间左右有个空格隔开 1px + 5",[80,144513,144514],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[80,144516,144517],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[80,144519,144520],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[65,144522,144524],{"id":144523},"_213-rem-适配方案","21.3 rem 适配方案",[14,144526,144527],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144529,144530],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[35,144532],{"style":126405,"src":144533},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[94,144535,144537],{"id":144536},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144539,144540],{},"rem + 媒体查询 + less 技术",[35,144542],{"style":126405,"src":144543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144545,144546],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144548,144549],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[35,144551],{"style":126405,"src":144552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144554,144555],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144557,14643],{},[35,144559],{"style":126405,"src":144560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144562,144563],{},"index.html:",[114,144565,144567],{"className":126549,"code":144566,"language":126551,"meta":37,"style":37},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[120,144568,144569,144574,144580,144596,144600,144606,144622],{"__ignoreMap":37},[123,144570,144571],{"class":125,"line":126},[123,144572,144573],{"class":192},"\u002F* rem 适配方案 *\u002F\n",[123,144575,144576,144578],{"class":125,"line":45},[123,144577,50646],{"class":51311},[123,144579,15582],{"class":133},[123,144581,144582,144584,144586,144589,144591,144593],{"class":125,"line":1189},[123,144583,70637],{"class":182},[123,144585,51448],{"class":133},[123,144587,144588],{"class":182},"62.5",[123,144590,462],{"class":129},[123,144592,130412],{"class":133},[123,144594,144595],{"class":192},"\u002F* 1rem = 10px *\u002F\n",[123,144597,144598],{"class":125,"line":1204},[123,144599,1574],{"class":133},[123,144601,144602,144604],{"class":125,"line":1210},[123,144603,130397],{"class":1972},[123,144605,15582],{"class":133},[123,144607,144608,144610,144612,144614,144617,144619],{"class":125,"line":1224},[123,144609,70579],{"class":182},[123,144611,51448],{"class":133},[123,144613,580],{"class":182},[123,144615,144616],{"class":129},"rem",[123,144618,130412],{"class":133},[123,144620,144621],{"class":192},"\u002F* 100px *\u002F\n",[123,144623,144624],{"class":125,"line":1230},[123,144625,1574],{"class":133},[14,144627,144628],{},"common.less",[114,144630,144632],{"className":126549,"code":144631,"language":126551,"meta":37,"style":37},"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",[120,144633,144634,144640,144655,144659,144665,144679,144683,144687,144691,144697,144711,144715,144721,144735],{"__ignoreMap":37},[123,144635,144636,144638],{"class":125,"line":126},[123,144637,50646],{"class":51311},[123,144639,15582],{"class":133},[123,144641,144642,144644,144646,144648,144650,144652],{"class":125,"line":45},[123,144643,70637],{"class":182},[123,144645,51448],{"class":133},[123,144647,144588],{"class":182},[123,144649,462],{"class":129},[123,144651,26078],{"class":133},[123,144653,144654],{"class":192},"\u002F* 10px *\u002F\n",[123,144656,144657],{"class":125,"line":1189},[123,144658,1574],{"class":133},[123,144660,144661,144663],{"class":125,"line":1204},[123,144662,51622],{"class":51311},[123,144664,15582],{"class":133},[123,144666,144667,144669,144671,144673,144675,144677],{"class":125,"line":1210},[123,144668,70579],{"class":182},[123,144670,51448],{"class":133},[123,144672,580],{"class":182},[123,144674,144616],{"class":129},[123,144676,26078],{"class":133},[123,144678,144621],{"class":192},[123,144680,144681],{"class":125,"line":1224},[123,144682,1574],{"class":133},[123,144684,144685],{"class":125,"line":1230},[123,144686,136010],{"class":133},[123,144688,144689],{"class":125,"line":1321},[123,144690,144573],{"class":192},[123,144692,144693,144695],{"class":125,"line":1327},[123,144694,50646],{"class":51311},[123,144696,15582],{"class":133},[123,144698,144699,144701,144703,144705,144707,144709],{"class":125,"line":1339},[123,144700,70637],{"class":182},[123,144702,51448],{"class":133},[123,144704,144588],{"class":182},[123,144706,462],{"class":129},[123,144708,130412],{"class":133},[123,144710,144595],{"class":192},[123,144712,144713],{"class":125,"line":1621},[123,144714,1574],{"class":133},[123,144716,144717,144719],{"class":125,"line":1626},[123,144718,130397],{"class":1972},[123,144720,15582],{"class":133},[123,144722,144723,144725,144727,144729,144731,144733],{"class":125,"line":1632},[123,144724,70579],{"class":182},[123,144726,51448],{"class":133},[123,144728,580],{"class":182},[123,144730,144616],{"class":129},[123,144732,130412],{"class":133},[123,144734,144621],{"class":192},[123,144736,144737],{"class":125,"line":1637},[123,144738,1574],{"class":133},[14,144740,144741,144742,144745],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23563,144743,144744],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[114,144747,144750],{"className":144748,"code":144749,"language":5197},[5195],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[120,144751,144749],{"__ignoreMap":37},[14,144753,144754],{},"less保存时会自动变成.css文件",[14,144756,144757],{},"好好搞懂上述代码写法",[94,144759,144761],{"id":144760},"_2132-样式导入样式","21.3.2 样式导入样式",[35,144763],{"style":126405,"src":144764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[94,144766,144768],{"id":144767},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[77,144770,144771],{},[80,144772,144773],{},"准备工作",[35,144775],{"style":126405,"src":144776},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,144778,144779,144780],{},"github地址：",[372,144781,144782],{"href":144782,"rel":144783},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23875],[14,144785,144786],{},"下载之后，将index.js文件拖到项目中就可以了",[14,144788,144789,144790],{},"js文件引入到index.html中使用的是",[120,144791,144792],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[77,144794,144795],{"start":45},[80,144796,144797],{},"vscode插件",[35,144799],{"style":126405,"src":144800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,144802,144803],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,144805,144806],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[35,144808],{"style":126405,"src":144809},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,144811,144812],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[35,144814],{"style":126405,"src":144815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,144817,144818],{},"修改成75就可以，alt+z为快捷键",[14,144820,144821],{},"index.css：",[114,144823,144824],{"className":126549,"code":144566,"language":126551,"meta":37,"style":37},[120,144825,144826,144830,144836,144850,144854,144860,144874],{"__ignoreMap":37},[123,144827,144828],{"class":125,"line":126},[123,144829,144573],{"class":192},[123,144831,144832,144834],{"class":125,"line":45},[123,144833,50646],{"class":51311},[123,144835,15582],{"class":133},[123,144837,144838,144840,144842,144844,144846,144848],{"class":125,"line":1189},[123,144839,70637],{"class":182},[123,144841,51448],{"class":133},[123,144843,144588],{"class":182},[123,144845,462],{"class":129},[123,144847,130412],{"class":133},[123,144849,144595],{"class":192},[123,144851,144852],{"class":125,"line":1204},[123,144853,1574],{"class":133},[123,144855,144856,144858],{"class":125,"line":1210},[123,144857,130397],{"class":1972},[123,144859,15582],{"class":133},[123,144861,144862,144864,144866,144868,144870,144872],{"class":125,"line":1224},[123,144863,70579],{"class":182},[123,144865,51448],{"class":133},[123,144867,580],{"class":182},[123,144869,144616],{"class":129},[123,144871,130412],{"class":133},[123,144873,144621],{"class":192},[123,144875,144876],{"class":125,"line":1230},[123,144877,1574],{"class":133},[14,144879,144563],{},[114,144881,144882],{"className":126549,"code":126953,"language":126551,"meta":37,"style":37},[120,144883,144884,144890,144902],{"__ignoreMap":37},[123,144885,144886,144888],{"class":125,"line":126},[123,144887,51811],{"class":51311},[123,144889,15582],{"class":133},[123,144891,144892,144894,144896,144898,144900],{"class":125,"line":45},[123,144893,70637],{"class":182},[123,144895,51448],{"class":133},[123,144897,735],{"class":182},[123,144899,51503],{"class":129},[123,144901,1300],{"class":133},[123,144903,144904],{"class":125,"line":1189},[123,144905,1574],{"class":133},[65,144907,144909],{"id":144908},"_214-响应式开发","21.4 响应式开发",[14,144911,144912],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[35,144914],{"style":126405,"src":144915},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,144917,144918],{},"做法：",[1141,144920,144921,144924],{},[80,144922,144923],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[80,144925,144926],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[35,144928],{"style":126405,"src":144929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,144931,144932],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[94,144934,144936],{"id":144935},"_2141-简单代码示范","21.4.1 简单代码示范",[114,144938,144939],{"className":126549,"code":144566,"language":126551,"meta":37,"style":37},[120,144940,144941,144945,144951,144965,144969,144975,144989],{"__ignoreMap":37},[123,144942,144943],{"class":125,"line":126},[123,144944,144573],{"class":192},[123,144946,144947,144949],{"class":125,"line":45},[123,144948,50646],{"class":51311},[123,144950,15582],{"class":133},[123,144952,144953,144955,144957,144959,144961,144963],{"class":125,"line":1189},[123,144954,70637],{"class":182},[123,144956,51448],{"class":133},[123,144958,144588],{"class":182},[123,144960,462],{"class":129},[123,144962,130412],{"class":133},[123,144964,144595],{"class":192},[123,144966,144967],{"class":125,"line":1204},[123,144968,1574],{"class":133},[123,144970,144971,144973],{"class":125,"line":1210},[123,144972,130397],{"class":1972},[123,144974,15582],{"class":133},[123,144976,144977,144979,144981,144983,144985,144987],{"class":125,"line":1224},[123,144978,70579],{"class":182},[123,144980,51448],{"class":133},[123,144982,580],{"class":182},[123,144984,144616],{"class":129},[123,144986,130412],{"class":133},[123,144988,144621],{"class":192},[123,144990,144991],{"class":125,"line":1230},[123,144992,1574],{"class":133},[14,144994,144995],{},"父盒子一般命名为container",[94,144997,144999],{"id":144998},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,145001,145002,145003],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[283,145004,145005],{},"使得 Web 开发更加快捷",[1141,145007,145008],{},[80,145009,145010,145011],{},"官网：",[283,145012,145013],{},[372,145014,145015],{"href":145015,"rel":145016},"http:\u002F\u002Fgetbootstrap.com\u002F",[23875],[14,145018,145019],{},"可以直接去官网拿现成的东西",[77,145021,145022],{},[80,145023,145024],{},"Bootstrap的使用",[14,145026,145027],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145029,145030],{},"Bootstrap 使用四步曲：",[14,145032,145033,145036],{},[283,145034,145035],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[35,145038],{"style":126405,"src":145039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145041,145042],{},"打开Bootstrap官网，然后下载",[35,145044],{"style":126405,"src":145045},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[35,145047],{"style":126405,"src":145048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145050,145051],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145053,145054],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145056,145057],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[35,145059],{"style":126405,"src":145060},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[114,145062,145064],{"className":126549,"code":145063,"language":126551,"meta":37,"style":37},".center {\n  color: red;\n}\n",[120,145065,145066,145072,145082],{"__ignoreMap":37},[123,145067,145068,145070],{"class":125,"line":126},[123,145069,126840],{"class":1972},[123,145071,15582],{"class":133},[123,145073,145074,145076,145078,145080],{"class":125,"line":45},[123,145075,70916],{"class":182},[123,145077,51448],{"class":133},[123,145079,57432],{"class":182},[123,145081,1300],{"class":133},[123,145083,145084],{"class":125,"line":1189},[123,145085,1574],{"class":133},[14,145087,145088,145091],{},[120,145089,145090],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[35,145093],{"style":126405,"src":145094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[35,145096],{"style":126405,"src":145097},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[35,145099],{"style":126405,"src":145100},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145102,145103],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[35,145105],{"style":126405,"src":145106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145108,145109],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[77,145111,145112],{"start":45},[80,145113,145114],{},"布局容器",[35,145116],{"style":126405,"src":145117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145119,145120],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145122,145123],{},"container-fluid用于移动式布局比较方便",[77,145125,145126],{"start":1189},[80,145127,145128,145129],{},"bootstrap ",[283,145130,145131],{},"栅格系统原理",[35,145133],{"style":126405,"src":145134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[77,145136,145137],{"start":1204},[80,145138,145139],{},[283,145140,145141],{},"栅格选项参数",[35,145143],{"style":126405,"src":145144},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145146,145147],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145149,14643],{},[114,145151,145152],{"className":126549,"code":145063,"language":126551,"meta":37,"style":37},[120,145153,145154,145160,145170],{"__ignoreMap":37},[123,145155,145156,145158],{"class":125,"line":126},[123,145157,126840],{"class":1972},[123,145159,15582],{"class":133},[123,145161,145162,145164,145166,145168],{"class":125,"line":45},[123,145163,70916],{"class":182},[123,145165,51448],{"class":133},[123,145167,57432],{"class":182},[123,145169,1300],{"class":133},[123,145171,145172],{"class":125,"line":1189},[123,145173,1574],{"class":133},[14,145175,135592],{},[35,145177],{"style":126405,"src":145178},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145180,145181],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145183,145184],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145186,145187],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145189,145190],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145192,145193],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145195,145196],{},"汇总展示说明：",[114,145198,145199],{"className":127296,"code":130653,"language":127298,"meta":37,"style":37},[120,145200,145201,145205,145219,145223],{"__ignoreMap":37},[123,145202,145203],{"class":125,"line":126},[123,145204,130660],{"class":192},[123,145206,145207,145209,145211,145213,145215,145217],{"class":125,"line":45},[123,145208,1044],{"class":133},[123,145210,51622],{"class":51311},[123,145212,53497],{"class":1972},[123,145214,179],{"class":133},[123,145216,130673],{"class":238},[123,145218,51318],{"class":133},[123,145220,145221],{"class":125,"line":1189},[123,145222,130680],{"class":133},[123,145224,145225,145227,145229],{"class":125,"line":1204},[123,145226,51796],{"class":133},[123,145228,51622],{"class":51311},[123,145230,51318],{"class":133},[35,145232],{"style":126405,"src":145233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145235,145236],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[114,145238,145239],{"className":127296,"code":130653,"language":127298,"meta":37,"style":37},[120,145240,145241,145245,145259,145263],{"__ignoreMap":37},[123,145242,145243],{"class":125,"line":126},[123,145244,130660],{"class":192},[123,145246,145247,145249,145251,145253,145255,145257],{"class":125,"line":45},[123,145248,1044],{"class":133},[123,145250,51622],{"class":51311},[123,145252,53497],{"class":1972},[123,145254,179],{"class":133},[123,145256,130673],{"class":238},[123,145258,51318],{"class":133},[123,145260,145261],{"class":125,"line":1189},[123,145262,130680],{"class":133},[123,145264,145265,145267,145269],{"class":125,"line":1204},[123,145266,51796],{"class":133},[123,145268,51622],{"class":51311},[123,145270,51318],{"class":133},[77,145272,145273],{"start":1210},[80,145274,145275],{},[283,145276,145277],{},"列嵌套",[35,145279],{"style":126405,"src":145280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145282,145283],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145285,145286],{},"没加row内部这样：",[35,145288],{"style":126405,"src":145289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145291,145292],{},"加上row之后内部为：",[35,145294],{"style":126405,"src":145295},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[77,145297,145298],{"start":1224},[80,145299,145300],{},[283,145301,145302],{},"列偏移",[35,145304],{"style":126405,"src":145305},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145307,145308],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145310,145311],{},"要加偏移量，即偏移份数",[14,145313,145314],{},"偏移的份数=12-两个盒子的份数",[77,145316,145317],{"start":1230},[80,145318,145319],{},[283,145320,145321],{},"列排序",[35,145323],{"style":126405,"src":145324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145326,145327],{},"pull拉左；push推右",[77,145329,145330],{"start":1321},[80,145331,145332],{},[283,145333,145334],{},"响应式工具",[35,145336],{"style":126405,"src":145337},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145339,145340],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[94,145342,145344],{"id":145343},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145346,145347],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145349,145350],{},"ul {",[14,145352,145353],{},"list-style: none;",[14,145355,145356],{},"margin:0;",[14,145358,145359],{},"padding:0; }",[35,145361],{"style":126405,"src":145362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[35,145364],{"style":126405,"src":145365},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145367,145368],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145370,68900],{},[114,145372,145373],{"className":126549,"code":139219,"language":126551,"meta":37,"style":37},[120,145374,145375,145381,145391],{"__ignoreMap":37},[123,145376,145377,145379],{"class":125,"line":126},[123,145378,130397],{"class":1972},[123,145380,15582],{"class":133},[123,145382,145383,145385,145387,145389],{"class":125,"line":45},[123,145384,131029],{"class":182},[123,145386,51448],{"class":133},[123,145388,23746],{"class":182},[123,145390,1300],{"class":133},[123,145392,145393],{"class":125,"line":1189},[123,145394,1574],{"class":133},[14,145396,70464],{},[114,145398,145399],{"className":126549,"code":139219,"language":126551,"meta":37,"style":37},[120,145400,145401,145407,145417],{"__ignoreMap":37},[123,145402,145403,145405],{"class":125,"line":126},[123,145404,130397],{"class":1972},[123,145406,15582],{"class":133},[123,145408,145409,145411,145413,145415],{"class":125,"line":45},[123,145410,131029],{"class":182},[123,145412,51448],{"class":133},[123,145414,23746],{"class":182},[123,145416,1300],{"class":133},[123,145418,145419],{"class":125,"line":1189},[123,145420,1574],{"class":133},[65,145422,145424],{"id":145423},"_215-swiper-插件使用","21.5 swiper 插件使用",[1141,145426,145427,145430,145433],{},[80,145428,145429],{},"下载需要的css和js文件html页面中 引入相关文件",[80,145431,145432],{},"官网找到类似案例，复制html结构，css样式 js 语法",[80,145434,145435],{},"根据需求定制修改模块",[35,145437],{"style":126405,"src":145438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145440,145441],{},"解压后将这两部分放到项目中",[35,145443],{"style":126405,"src":145444},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145446,145447],{},"这个插件可以帮助我们实现轮播图效果",[14,145449,145450],{},"用法：",[35,145452],{"style":126405,"src":145453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145455,145456],{},"找到自己喜欢的",[35,145458],{"style":126405,"src":145459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145461,145462],{},"右键，查看网页源代码",[35,145464],{"style":126405,"src":145465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145467,145468],{},"复制人家的结构内容",[14,145470,145471],{},"然后去看API文档：",[35,145473],{"style":126405,"src":145474},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145476,145477],{},"可以看看如何修改样式",[14,145479,145480],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5136,145482,145483],{},"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":37,"searchDepth":45,"depth":45,"links":145485},[145486,145491,145495,145500,145505],{"id":144286,"depth":45,"text":144287,"children":145487},[145488,145489,145490],{"id":144290,"depth":1189,"text":144291},{"id":144300,"depth":1189,"text":144301},{"id":144395,"depth":1189,"text":144396},{"id":144410,"depth":45,"text":144411,"children":145492},[145493,145494],{"id":144432,"depth":1189,"text":144433},{"id":144448,"depth":1189,"text":144449},{"id":144523,"depth":45,"text":144524,"children":145496},[145497,145498,145499],{"id":144536,"depth":1189,"text":144537},{"id":144760,"depth":1189,"text":144761},{"id":144767,"depth":1189,"text":144768},{"id":144908,"depth":45,"text":144909,"children":145501},[145502,145503,145504],{"id":144935,"depth":1189,"text":144936},{"id":144998,"depth":1189,"text":144999},{"id":145343,"depth":1189,"text":145344},{"id":145423,"depth":45,"text":145424},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144278,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145512,"title":145513,"body":145514,"description":47,"extension":48,"meta":145734,"navigation":50,"path":145735,"seo":145736,"stem":145737,"__hash__":145738},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145515,"toc":145730},[145516,145519,145523,145526,145541,145546,145549,145554,145589,145594,145606,145611,145624,145629,145646,145651,145671,145676,145694,145697,145700,145703,145706,145710,145713,145716,145719,145722,145725,145728],[10,145517,145513],{"id":145518},"_22-代码提交与新型相对单位",[65,145520,145522],{"id":145521},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145524,145525],{},"法1：",[77,145527,145528,145535,145538],{},[80,145529,145530,145531],{},"登录网站注册：",[372,145532,145533],{"href":145533,"rel":145534},"https:\u002F\u002Fgitee.com\u002F",[23875],[80,145536,145537],{},"码云创建新的仓库",[80,145539,145540],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1141,145542,145543],{},[80,145544,145545],{},"在网站根目录右键-- Git Bash Here",[35,145547],{"style":126405,"src":145548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1141,145550,145551],{},[80,145552,145553],{},"如果是第一次利用git提交，请配置好全局选项",[114,145555,145557],{"className":117293,"code":145556,"language":117295,"meta":37,"style":37},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[120,145558,145559,145575],{"__ignoreMap":37},[123,145560,145561,145564,145566,145569,145572],{"class":125,"line":126},[123,145562,145563],{"class":1972},"git",[123,145565,119716],{"class":238},[123,145567,145568],{"class":182}," --global",[123,145570,145571],{"class":238}," user.name",[123,145573,145574],{"class":238}," \"你的名字\"\n",[123,145576,145577,145579,145581,145583,145586],{"class":125,"line":45},[123,145578,145563],{"class":1972},[123,145580,119716],{"class":238},[123,145582,145568],{"class":182},[123,145584,145585],{"class":238}," user.email",[123,145587,145588],{"class":238}," \"你的邮箱\"\n",[1141,145590,145591],{},[80,145592,145593],{},"初始化仓库",[114,145595,145597],{"className":117293,"code":145596,"language":117295,"meta":37,"style":37},"git init\n",[120,145598,145599],{"__ignoreMap":37},[123,145600,145601,145603],{"class":125,"line":126},[123,145602,145563],{"class":1972},[123,145604,145605],{"class":238}," init\n",[1141,145607,145608],{},[80,145609,145610],{},"把本地文件放到暂存区",[114,145612,145614],{"className":117293,"code":145613,"language":117295,"meta":37,"style":37},"git add .\n",[120,145615,145616],{"__ignoreMap":37},[123,145617,145618,145620,145622],{"class":125,"line":126},[123,145619,145563],{"class":1972},[123,145621,5219],{"class":238},[123,145623,28752],{"class":238},[1141,145625,145626],{},[80,145627,145628],{},"把本地文件放到本地仓库里面",[114,145630,145632],{"className":117293,"code":145631,"language":117295,"meta":37,"style":37},"git commit -m \"first commit\"\n",[120,145633,145634],{"__ignoreMap":37},[123,145635,145636,145638,145641,145643],{"class":125,"line":126},[123,145637,145563],{"class":1972},[123,145639,145640],{"class":238}," commit",[123,145642,100879],{"class":182},[123,145644,145645],{"class":238}," \"first commit\"\n",[1141,145647,145648],{},[80,145649,145650],{},"链接远程仓库",[114,145652,145654],{"className":117293,"code":145653,"language":117295,"meta":37,"style":37},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[120,145655,145656],{"__ignoreMap":37},[123,145657,145658,145660,145663,145665,145668],{"class":125,"line":126},[123,145659,145563],{"class":1972},[123,145661,145662],{"class":238}," remote",[123,145664,5219],{"class":238},[123,145666,145667],{"class":238}," origin",[123,145669,145670],{"class":238}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1141,145672,145673],{},[80,145674,145675],{},"把本地仓库的文件推送到远程仓库 push",[114,145677,145679],{"className":117293,"code":145678,"language":117295,"meta":37,"style":37},"git push -u origin master\n",[120,145680,145681],{"__ignoreMap":37},[123,145682,145683,145685,145687,145689,145691],{"class":125,"line":126},[123,145684,145563],{"class":1972},[123,145686,29027],{"class":238},[123,145688,28301],{"class":182},[123,145690,145667],{"class":238},[123,145692,145693],{"class":238}," master\n",[35,145695],{"style":126405,"src":145696},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,145698,145699],{},"上方方法暂未实现，后边学完git后在整",[14,145701,145702],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[35,145704],{"style":126405,"src":145705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[65,145707,145709],{"id":145708},"_222-新型相对单位","22.2 新型相对单位",[35,145711],{"style":126405,"src":145712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[35,145714],{"style":126405,"src":145715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,145717,145718],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,145720,145721],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[35,145723],{"style":126405,"src":145724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,145726,145727],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5136,145729,23968],{},{"title":37,"searchDepth":45,"depth":45,"links":145731},[145732,145733],{"id":145521,"depth":45,"text":145522},{"id":145708,"depth":45,"text":145709},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145513,"description":47},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145740,"title":145741,"body":145742,"description":145746,"extension":48,"meta":145747,"navigation":50,"path":145748,"seo":145749,"stem":145750,"__hash__":145751},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145743,"toc":145744},[],{"title":37,"searchDepth":45,"depth":45,"links":145745},[],"自己正经开始学编程的第一门语言！",{"category":92850},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145741,"description":145746},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145753,"title":145754,"body":145755,"description":47,"extension":48,"meta":146902,"navigation":50,"path":146903,"seo":146904,"stem":146905,"__hash__":146906},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145756,"toc":146878},[145757,145760,145764,145767,145770,145795,145798,145804,145808,145811,145838,145841,145881,145884,145896,145899,145905,145909,145913,145940,145957,145964,145968,145971,145997,146000,146004,146007,146047,146050,146067,146073,146077,146082,146126,146129,146147,146150,146218,146222,146229,146232,146247,146250,146259,146262,146273,146276,146285,146288,146305,146308,146323,146327,146331,146334,146336,146356,146360,146363,146366,146377,146380,146386,146390,146396,146423,146426,146438,146441,146452,146455,146461,146465,146471,146521,146524,146566,146569,146602,146605,146639,146643,146646,146666,146669,146705,146708,146721,146725,146729,146735,146738,146751,146755,146758,146764,146767,146771,146774,146777,146826,146830,146846,146852,146859,146865,146875],[10,145758,145754],{"id":145759},"_1-python环境与第一个程序",[65,145761,145763],{"id":145762},"_11-什么是python","1.1 什么是Python",[14,145765,145766],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,145768,145769],{},"理解 Python 时抓住三个关键词：",[77,145771,145772,145775,145778],{},[80,145773,145774],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[80,145776,145777],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[80,145779,145780,145781,346,145784,346,145787,346,145790,346,145792,28396],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[120,145782,145783],{},"os",[120,145785,145786],{},"sys",[120,145788,145789],{},"json",[120,145791,57871],{},[120,145793,145794],{},"datetime",[14,145796,145797],{},"Python 程序的运行链路：",[114,145799,145802],{"className":145800,"code":145801,"language":5197,"meta":37},[5195],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[120,145803,145801],{"__ignoreMap":37},[65,145805,145807],{"id":145806},"_12-python解释器","1.2 Python解释器",[14,145809,145810],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[114,145812,145814],{"className":23832,"code":145813,"language":23834,"meta":37,"style":37},"python --version\npython3 --version\npython\npython3\n",[120,145815,145816,145822,145828,145833],{"__ignoreMap":37},[123,145817,145818,145820],{"class":125,"line":126},[123,145819,30391],{"class":1972},[123,145821,26304],{"class":182},[123,145823,145824,145826],{"class":125,"line":45},[123,145825,100876],{"class":1972},[123,145827,26304],{"class":182},[123,145829,145830],{"class":125,"line":1189},[123,145831,145832],{"class":1972},"python\n",[123,145834,145835],{"class":125,"line":1204},[123,145836,145837],{"class":1972},"python3\n",[14,145839,145840],{},"进入交互模式后，可以直接输入表达式：",[114,145842,145844],{"className":30389,"code":145843,"language":30391,"meta":37,"style":37},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[120,145845,145846,145857,145862,145876],{"__ignoreMap":37},[123,145847,145848,145851,145853,145855],{"class":125,"line":126},[123,145849,145850],{"class":129},">>>",[123,145852,25129],{"class":182},[123,145854,45577],{"class":129},[123,145856,47734],{"class":182},[123,145858,145859],{"class":125,"line":45},[123,145860,145861],{"class":182},"3\n",[123,145863,145864,145866,145869,145871,145874],{"class":125,"line":1189},[123,145865,145850],{"class":129},[123,145867,145868],{"class":182}," print",[123,145870,134],{"class":133},[123,145872,145873],{"class":238},"\"hello python\"",[123,145875,140],{"class":133},[123,145877,145878],{"class":125,"line":1204},[123,145879,145880],{"class":133},"hello python\n",[14,145882,145883],{},"退出交互模式：",[114,145885,145887],{"className":30389,"code":145886,"language":30391,"meta":37,"style":37},"exit()\n",[120,145888,145889],{"__ignoreMap":37},[123,145890,145891,145894],{"class":125,"line":126},[123,145892,145893],{"class":182},"exit",[123,145895,1985],{"class":133},[14,145897,145898],{},"或使用快捷键：",[114,145900,145903],{"className":145901,"code":145902,"language":5197,"meta":37},[5195],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[120,145904,145902],{"__ignoreMap":37},[65,145906,145908],{"id":145907},"_13-安装python","1.3 安装Python",[94,145910,145912],{"id":145911},"_131-windows安装","1.3.1 Windows安装",[77,145914,145915,145922,145925,145931,145937],{},[80,145916,145917,145918],{},"打开 Python 官网：",[372,145919,145920],{"href":145920,"rel":145921},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23875],[80,145923,145924],{},"下载 Windows Installer。",[80,145926,145927,145928,28396],{},"安装时勾选 ",[120,145929,145930],{},"Add Python to PATH",[80,145932,145933,145934,28396],{},"点击 ",[120,145935,145936],{},"Install Now",[80,145938,145939],{},"安装完成后打开命令提示符验证：",[114,145941,145943],{"className":23832,"code":145942,"language":23834,"meta":37,"style":37},"python --version\npip --version\n",[120,145944,145945,145951],{"__ignoreMap":37},[123,145946,145947,145949],{"class":125,"line":126},[123,145948,30391],{"class":1972},[123,145950,26304],{"class":182},[123,145952,145953,145955],{"class":125,"line":45},[123,145954,23841],{"class":1972},[123,145956,26304],{"class":182},[14,145958,145959,145960,145963],{},"如果提示 ",[120,145961,145962],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[94,145965,145967],{"id":145966},"_132-macos安装","1.3.2 macOS安装",[14,145969,145970],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[114,145972,145974],{"className":23832,"code":145973,"language":23834,"meta":37,"style":37},"brew install python\npython3 --version\npip3 --version\n",[120,145975,145976,145985,145991],{"__ignoreMap":37},[123,145977,145978,145981,145983],{"class":125,"line":126},[123,145979,145980],{"class":1972},"brew",[123,145982,23844],{"class":238},[123,145984,124315],{"class":238},[123,145986,145987,145989],{"class":125,"line":45},[123,145988,100876],{"class":1972},[123,145990,26304],{"class":182},[123,145992,145993,145995],{"class":125,"line":1189},[123,145994,119697],{"class":1972},[123,145996,26304],{"class":182},[14,145998,145999],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[94,146001,146003],{"id":146002},"_133-linux安装","1.3.3 Linux安装",[14,146005,146006],{},"Ubuntu\u002FDebian：",[114,146008,146010],{"className":23832,"code":146009,"language":23834,"meta":37,"style":37},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[120,146011,146012,146020,146035,146041],{"__ignoreMap":37},[123,146013,146014,146016,146018],{"class":125,"line":126},[123,146015,24587],{"class":1972},[123,146017,117314],{"class":238},[123,146019,26253],{"class":238},[123,146021,146022,146024,146026,146028,146030,146032],{"class":125,"line":45},[123,146023,24587],{"class":1972},[123,146025,117314],{"class":238},[123,146027,23844],{"class":238},[123,146029,104400],{"class":238},[123,146031,100795],{"class":238},[123,146033,146034],{"class":238}," python3-venv\n",[123,146036,146037,146039],{"class":125,"line":1189},[123,146038,100876],{"class":1972},[123,146040,26304],{"class":182},[123,146042,146043,146045],{"class":125,"line":1204},[123,146044,119697],{"class":1972},[123,146046,26304],{"class":182},[14,146048,146049],{},"Fedora：",[114,146051,146053],{"className":23832,"code":146052,"language":23834,"meta":37,"style":37},"sudo dnf install python3 python3-pip\n",[120,146054,146055],{"__ignoreMap":37},[123,146056,146057,146059,146061,146063,146065],{"class":125,"line":126},[123,146058,24587],{"class":1972},[123,146060,26326],{"class":238},[123,146062,23844],{"class":238},[123,146064,104400],{"class":238},[123,146066,119762],{"class":238},[14,146068,146069,146070,146072],{},"Linux 上通常使用 ",[120,146071,100876],{}," 命令，避免和系统旧版本 Python 冲突。",[65,146074,146076],{"id":146075},"_14-pip包管理器","1.4 pip包管理器",[14,146078,146079,146081],{},[120,146080,23841],{}," 用来安装第三方库。",[114,146083,146085],{"className":23832,"code":146084,"language":23834,"meta":37,"style":37},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[120,146086,146087,146096,146105,146113,146119],{"__ignoreMap":37},[123,146088,146089,146091,146093],{"class":125,"line":126},[123,146090,23841],{"class":1972},[123,146092,23844],{"class":238},[123,146094,146095],{"class":238}," requests\n",[123,146097,146098,146100,146103],{"class":125,"line":45},[123,146099,23841],{"class":1972},[123,146101,146102],{"class":238}," uninstall",[123,146104,146095],{"class":238},[123,146106,146107,146109,146111],{"class":125,"line":1189},[123,146108,23841],{"class":1972},[123,146110,117571],{"class":238},[123,146112,146095],{"class":238},[123,146114,146115,146117],{"class":125,"line":1204},[123,146116,23841],{"class":1972},[123,146118,118952],{"class":238},[123,146120,146121,146123],{"class":125,"line":1210},[123,146122,23841],{"class":1972},[123,146124,146125],{"class":238}," freeze\n",[14,146127,146128],{},"国内网络较慢时可以临时使用镜像：",[114,146130,146132],{"className":23832,"code":146131,"language":23834,"meta":37,"style":37},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[120,146133,146134],{"__ignoreMap":37},[123,146135,146136,146138,146140,146143,146145],{"class":125,"line":126},[123,146137,23841],{"class":1972},[123,146139,23844],{"class":238},[123,146141,146142],{"class":238}," requests",[123,146144,26441],{"class":182},[123,146146,119725],{"class":238},[14,146148,146149],{},"常见第三方库：",[271,146151,146152,146161],{},[274,146153,146154],{},[277,146155,146156,146159],{},[280,146157,146158],{},"库",[280,146160,102693],{},[318,146162,146163,146171,146178,146186,146194,146202,146210],{},[277,146164,146165,146168],{},[323,146166,146167],{},"requests",[323,146169,146170],{},"网络请求",[277,146172,146173,146175],{},[323,146174,100623],{},[323,146176,146177],{},"数值计算",[277,146179,146180,146183],{},[323,146181,146182],{},"pandas",[323,146184,146185],{},"表格数据处理",[277,146187,146188,146191],{},[323,146189,146190],{},"matplotlib",[323,146192,146193],{},"绘图",[277,146195,146196,146199],{},[323,146197,146198],{},"pyecharts",[323,146200,146201],{},"ECharts 图表",[277,146203,146204,146207],{},[323,146205,146206],{},"flask",[323,146208,146209],{},"Web 后端",[277,146211,146212,146215],{},[323,146213,146214],{},"pytest",[323,146216,146217],{},"自动化测试",[65,146219,146221],{"id":146220},"_15-虚拟环境","1.5 虚拟环境",[14,146223,146224,146225,146228],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[120,146226,146227],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146230,146231],{},"创建虚拟环境：",[114,146233,146235],{"className":23832,"code":146234,"language":23834,"meta":37,"style":37},"python -m venv .venv\n",[120,146236,146237],{"__ignoreMap":37},[123,146238,146239,146241,146243,146245],{"class":125,"line":126},[123,146240,30391],{"class":1972},[123,146242,100879],{"class":182},[123,146244,100882],{"class":238},[123,146246,100885],{"class":238},[14,146248,146249],{},"Windows 激活：",[114,146251,146253],{"className":23832,"code":146252,"language":23834,"meta":37,"style":37},".venv\\Scripts\\activate\n",[120,146254,146255],{"__ignoreMap":37},[123,146256,146257],{"class":125,"line":126},[123,146258,146252],{"class":1972},[14,146260,146261],{},"macOS\u002FLinux 激活：",[114,146263,146265],{"className":23832,"code":146264,"language":23834,"meta":37,"style":37},"source .venv\u002Fbin\u002Factivate\n",[120,146266,146267],{"__ignoreMap":37},[123,146268,146269,146271],{"class":125,"line":126},[123,146270,100890],{"class":182},[123,146272,100893],{"class":238},[14,146274,146275],{},"退出虚拟环境：",[114,146277,146279],{"className":23832,"code":146278,"language":23834,"meta":37,"style":37},"deactivate\n",[120,146280,146281],{"__ignoreMap":37},[123,146282,146283],{"class":125,"line":126},[123,146284,146278],{"class":1972},[14,146286,146287],{},"保存依赖：",[114,146289,146291],{"className":23832,"code":146290,"language":23834,"meta":37,"style":37},"pip freeze > requirements.txt\n",[120,146292,146293],{"__ignoreMap":37},[123,146294,146295,146297,146300,146302],{"class":125,"line":126},[123,146296,23841],{"class":1972},[123,146298,146299],{"class":238}," freeze",[123,146301,26233],{"class":129},[123,146303,146304],{"class":238}," requirements.txt\n",[14,146306,146307],{},"安装依赖：",[114,146309,146311],{"className":23832,"code":146310,"language":23834,"meta":37,"style":37},"pip install -r requirements.txt\n",[120,146312,146313],{"__ignoreMap":37},[123,146314,146315,146317,146319,146321],{"class":125,"line":126},[123,146316,23841],{"class":1972},[123,146318,23844],{"class":238},[123,146320,119636],{"class":182},[123,146322,146304],{"class":238},[65,146324,146326],{"id":146325},"_16-开发工具","1.6 开发工具",[94,146328,146330],{"id":146329},"_161-pycharm","1.6.1 PyCharm",[14,146332,146333],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146335,122059],{},[77,146337,146338,146341,146344,146350,146353],{},[80,146339,146340],{},"New Project：创建项目。",[80,146342,146343],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[80,146345,146346,146347,125980],{},"New Python File：创建 ",[120,146348,146349],{},".py",[80,146351,146352],{},"Run：运行当前文件。",[80,146354,146355],{},"Debug：断点调试。",[94,146357,146359],{"id":146358},"_162-vs-code","1.6.2 VS Code",[14,146361,146362],{},"VS Code 轻量，适合后续多语言开发。",[14,146364,146365],{},"建议安装插件：",[77,146367,146368,146371,146374],{},[80,146369,146370],{},"Python。",[80,146372,146373],{},"Pylance。",[80,146375,146376],{},"Jupyter。",[14,146378,146379],{},"选择解释器：",[114,146381,146384],{"className":146382,"code":146383,"language":5197,"meta":37},[5195],"Ctrl + Shift + P -> Python: Select Interpreter\n",[120,146385,146383],{"__ignoreMap":37},[65,146387,146389],{"id":146388},"_17-第一个python程序","1.7 第一个Python程序",[14,146391,146392,146393,24629],{},"创建文件 ",[120,146394,146395],{},"hello.py",[114,146397,146399],{"className":30389,"code":146398,"language":30391,"meta":37,"style":37},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[120,146400,146401,146412],{"__ignoreMap":37},[123,146402,146403,146405,146407,146410],{"class":125,"line":126},[123,146404,30426],{"class":182},[123,146406,134],{"class":133},[123,146408,146409],{"class":238},"\"Hello World\"",[123,146411,140],{"class":133},[123,146413,146414,146416,146418,146421],{"class":125,"line":45},[123,146415,30426],{"class":182},[123,146417,134],{"class":133},[123,146419,146420],{"class":238},"\"你好，Python\"",[123,146422,140],{"class":133},[14,146424,146425],{},"在终端运行：",[114,146427,146429],{"className":23832,"code":146428,"language":23834,"meta":37,"style":37},"python hello.py\n",[120,146430,146431],{"__ignoreMap":37},[123,146432,146433,146435],{"class":125,"line":126},[123,146434,30391],{"class":1972},[123,146436,146437],{"class":238}," hello.py\n",[14,146439,146440],{},"或：",[114,146442,146444],{"className":23832,"code":146443,"language":23834,"meta":37,"style":37},"python3 hello.py\n",[120,146445,146446],{"__ignoreMap":37},[123,146447,146448,146450],{"class":125,"line":126},[123,146449,100876],{"class":1972},[123,146451,146437],{"class":238},[14,146453,146454],{},"输出：",[114,146456,146459],{"className":146457,"code":146458,"language":5197,"meta":37},[5195],"Hello World\n你好，Python\n",[120,146460,146458],{"__ignoreMap":37},[65,146462,146464],{"id":146463},"_18-print函数","1.8 print函数",[14,146466,146467,146470],{},[120,146468,146469],{},"print()"," 用来输出内容。",[114,146472,146474],{"className":30389,"code":146473,"language":30391,"meta":37,"style":37},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[120,146475,146476,146486,146496,146506],{"__ignoreMap":37},[123,146477,146478,146480,146482,146484],{"class":125,"line":126},[123,146479,30426],{"class":182},[123,146481,134],{"class":133},[123,146483,5854],{"class":238},[123,146485,140],{"class":133},[123,146487,146488,146490,146492,146494],{"class":125,"line":45},[123,146489,30426],{"class":182},[123,146491,134],{"class":133},[123,146493,445],{"class":182},[123,146495,140],{"class":133},[123,146497,146498,146500,146502,146504],{"class":125,"line":1189},[123,146499,30426],{"class":182},[123,146501,134],{"class":133},[123,146503,183],{"class":182},[123,146505,140],{"class":133},[123,146507,146508,146510,146512,146515,146517,146519],{"class":125,"line":1204},[123,146509,30426],{"class":182},[123,146511,134],{"class":133},[123,146513,146514],{"class":238},"\"年龄:\"",[123,146516,12445],{"class":133},[123,146518,784],{"class":182},[123,146520,140],{"class":133},[14,146522,146523],{},"多个内容用逗号隔开，默认中间加空格：",[114,146525,146527],{"className":30389,"code":146526,"language":30391,"meta":37,"style":37},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[120,146528,146529,146539,146549],{"__ignoreMap":37},[123,146530,146531,146534,146536],{"class":125,"line":126},[123,146532,146533],{"class":133},"name ",[123,146535,179],{"class":129},[123,146537,146538],{"class":238}," \"张三\"\n",[123,146540,146541,146544,146546],{"class":125,"line":45},[123,146542,146543],{"class":133},"age ",[123,146545,179],{"class":129},[123,146547,146548],{"class":182}," 18\n",[123,146550,146551,146553,146555,146558,146561,146563],{"class":125,"line":1189},[123,146552,30426],{"class":182},[123,146554,134],{"class":133},[123,146556,146557],{"class":238},"\"姓名:\"",[123,146559,146560],{"class":133},", name, ",[123,146562,146514],{"class":238},[123,146564,146565],{"class":133},", age)\n",[14,146567,146568],{},"修改分隔符：",[114,146570,146572],{"className":30389,"code":146571,"language":30391,"meta":37,"style":37},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[120,146573,146574],{"__ignoreMap":37},[123,146575,146576,146578,146580,146583,146585,146587,146589,146591,146593,146596,146598,146600],{"class":125,"line":126},[123,146577,30426],{"class":182},[123,146579,134],{"class":133},[123,146581,146582],{"class":238},"\"2024\"",[123,146584,12445],{"class":133},[123,146586,54327],{"class":238},[123,146588,12445],{"class":133},[123,146590,54327],{"class":238},[123,146592,12445],{"class":133},[123,146594,146595],{"class":5226},"sep",[123,146597,179],{"class":129},[123,146599,32494],{"class":238},[123,146601,140],{"class":133},[14,146603,146604],{},"修改结尾符：",[114,146606,146608],{"className":30389,"code":146607,"language":30391,"meta":37,"style":37},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[120,146609,146610,146628],{"__ignoreMap":37},[123,146611,146612,146614,146616,146618,146620,146622,146624,146626],{"class":125,"line":126},[123,146613,30426],{"class":182},[123,146615,134],{"class":133},[123,146617,5854],{"class":238},[123,146619,12445],{"class":133},[123,146621,45812],{"class":5226},[123,146623,179],{"class":129},[123,146625,4368],{"class":238},[123,146627,140],{"class":133},[123,146629,146630,146632,146634,146637],{"class":125,"line":45},[123,146631,30426],{"class":182},[123,146633,134],{"class":133},[123,146635,146636],{"class":238},"\"python\"",[123,146638,140],{"class":133},[65,146640,146642],{"id":146641},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,146644,146645],{},"交互运行适合临时验证：",[114,146647,146649],{"className":30389,"code":146648,"language":30391,"meta":37,"style":37},">>> 10 * 3\n30\n",[120,146650,146651,146661],{"__ignoreMap":37},[123,146652,146653,146655,146657,146659],{"class":125,"line":126},[123,146654,145850],{"class":129},[123,146656,2047],{"class":182},[123,146658,6528],{"class":129},[123,146660,120033],{"class":182},[123,146662,146663],{"class":125,"line":45},[123,146664,146665],{"class":182},"30\n",[14,146667,146668],{},"脚本运行适合保存程序：",[114,146670,146672],{"className":30389,"code":146671,"language":30391,"meta":37,"style":37},"price = 8\ncount = 5\nprint(price * count)\n",[120,146673,146674,146684,146693],{"__ignoreMap":37},[123,146675,146676,146679,146681],{"class":125,"line":126},[123,146677,146678],{"class":133},"price ",[123,146680,179],{"class":129},[123,146682,146683],{"class":182}," 8\n",[123,146685,146686,146689,146691],{"class":125,"line":45},[123,146687,146688],{"class":133},"count ",[123,146690,179],{"class":129},[123,146692,54438],{"class":182},[123,146694,146695,146697,146700,146702],{"class":125,"line":1189},[123,146696,30426],{"class":182},[123,146698,146699],{"class":133},"(price ",[123,146701,589],{"class":129},[123,146703,146704],{"class":133}," count)\n",[14,146706,146707],{},"实际学习中推荐：",[77,146709,146710,146713,146718],{},[80,146711,146712],{},"临时试一个语法，用交互模式。",[80,146714,146715,146716,125980],{},"写完整练习，用 ",[120,146717,146349],{},[80,146719,146720],{},"写项目，用独立目录和虚拟环境。",[65,146722,146724],{"id":146723},"_110-常见错误","1.10 常见错误",[94,146726,146728],{"id":146727},"_1101-命令找不到","1.10.1 命令找不到",[114,146730,146733],{"className":146731,"code":146732,"language":5197,"meta":37},[5195],"python: command not found\n",[120,146734,146732],{"__ignoreMap":37},[14,146736,146737],{},"原因：",[77,146739,146740,146743,146746],{},[80,146741,146742],{},"没安装 Python。",[80,146744,146745],{},"PATH 没配置。",[80,146747,146748,146749,28396],{},"Linux\u002FmacOS 应该使用 ",[120,146750,100876],{},[94,146752,146754],{"id":146753},"_1102-文件名冲突","1.10.2 文件名冲突",[14,146756,146757],{},"不要把文件命名为：",[114,146759,146762],{"className":146760,"code":146761,"language":5197,"meta":37},[5195],"random.py\njson.py\ntime.py\nrequests.py\n",[120,146763,146761],{"__ignoreMap":37},[14,146765,146766],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[94,146768,146770],{"id":146769},"_1103-中文乱码","1.10.3 中文乱码",[14,146772,146773],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,146775,146776],{},"如果读写文件出现乱码，要明确指定编码：",[114,146778,146780],{"className":30389,"code":146779,"language":30391,"meta":37,"style":37},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[120,146781,146782,146816],{"__ignoreMap":37},[123,146783,146784,146786,146789,146791,146794,146796,146799,146801,146804,146806,146809,146811,146813],{"class":125,"line":126},[123,146785,107830],{"class":129},[123,146787,146788],{"class":182}," open",[123,146790,134],{"class":133},[123,146792,146793],{"class":238},"\"data.txt\"",[123,146795,12445],{"class":133},[123,146797,146798],{"class":238},"\"r\"",[123,146800,12445],{"class":133},[123,146802,146803],{"class":5226},"encoding",[123,146805,179],{"class":129},[123,146807,146808],{"class":238},"\"utf-8\"",[123,146810,13724],{"class":133},[123,146812,31394],{"class":129},[123,146814,146815],{"class":133}," f:\n",[123,146817,146818,146821,146823],{"class":125,"line":45},[123,146819,146820],{"class":133},"    content ",[123,146822,179],{"class":129},[123,146824,146825],{"class":133}," f.read()\n",[65,146827,146829],{"id":146828},"_111-本章练习","1.11 本章练习",[77,146831,146832,146835,146841],{},[80,146833,146834],{},"安装 Python，并在终端输出版本号。",[80,146836,146837,146838,146840],{},"新建 ",[120,146839,146395],{},"，输出自己的姓名、年龄、学习目标。",[80,146842,104363,146843,146845],{},[120,146844,146469],{}," 输出下面格式：",[114,146847,146850],{"className":146848,"code":146849,"language":5197,"meta":37},[5195],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[120,146851,146849],{"__ignoreMap":37},[77,146853,146854],{"start":1204},[80,146855,104363,146856,146858],{},[120,146857,146595],{}," 输出日期：",[114,146860,146863],{"className":146861,"code":146862,"language":5197,"meta":37},[5195],"2024-10-10\n",[120,146864,146862],{"__ignoreMap":37},[77,146866,146867],{"start":1210},[80,146868,104363,146869,146871,146872,146874],{},[120,146870,45812],{}," 让两次 ",[120,146873,146469],{}," 输出在同一行。",[5136,146876,146877],{},"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":37,"searchDepth":45,"depth":45,"links":146879},[146880,146881,146882,146887,146888,146889,146893,146894,146895,146896,146901],{"id":145762,"depth":45,"text":145763},{"id":145806,"depth":45,"text":145807},{"id":145907,"depth":45,"text":145908,"children":146883},[146884,146885,146886],{"id":145911,"depth":1189,"text":145912},{"id":145966,"depth":1189,"text":145967},{"id":146002,"depth":1189,"text":146003},{"id":146075,"depth":45,"text":146076},{"id":146220,"depth":45,"text":146221},{"id":146325,"depth":45,"text":146326,"children":146890},[146891,146892],{"id":146329,"depth":1189,"text":146330},{"id":146358,"depth":1189,"text":146359},{"id":146388,"depth":45,"text":146389},{"id":146463,"depth":45,"text":146464},{"id":146641,"depth":45,"text":146642},{"id":146723,"depth":45,"text":146724,"children":146897},[146898,146899,146900],{"id":146727,"depth":1189,"text":146728},{"id":146753,"depth":1189,"text":146754},{"id":146769,"depth":1189,"text":146770},{"id":146828,"depth":45,"text":146829},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145754,"description":47},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146908,"title":146909,"body":146910,"description":47,"extension":48,"meta":149314,"navigation":50,"path":149315,"seo":149316,"stem":149317,"__hash__":149318},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146911,"toc":149299},[146912,146915,146919,146922,146925,146942,146945,146987,146990,146994,146997,147000,147037,147040,147074,147077,147169,147173,147187,147190,147217,147220,147224,147327,147334,147337,147354,147358,147365,147554,147557,147630,147634,147637,147721,147724,147756,147760,147964,147967,147971,147977,148079,148082,148338,148342,148345,148348,148362,148364,148550,148554,148916,148922,148926,148929,149053,149056,149235,149238,149242,149275,149279,149296],[10,146913,146909],{"id":146914},"_10-json与pyecharts折线图",[65,146916,146918],{"id":146917},"_101-数据可视化","10.1 数据可视化",[14,146920,146921],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,146923,146924],{},"常见图表：",[77,146926,146927,146930,146933,146936,146939],{},[80,146928,146929],{},"折线图：看趋势。",[80,146931,146932],{},"柱状图：看分类对比。",[80,146934,146935],{},"饼图：看占比。",[80,146937,146938],{},"地图：看地域分布。",[80,146940,146941],{},"散点图：看两个变量之间的关系。",[14,146943,146944],{},"Python 可视化常用库：",[271,146946,146947,146955],{},[274,146948,146949],{},[277,146950,146951,146953],{},[280,146952,146158],{},[280,146954,23750],{},[318,146956,146957,146964,146972,146979],{},[277,146958,146959,146961],{},[323,146960,146190],{},[323,146962,146963],{},"基础、经典、可定制",[277,146965,146966,146969],{},[323,146967,146968],{},"seaborn",[323,146970,146971],{},"统计图表更美观",[277,146973,146974,146976],{},[323,146975,146198],{},[323,146977,146978],{},"生成交互式网页图表",[277,146980,146981,146984],{},[323,146982,146983],{},"plotly",[323,146985,146986],{},"交互图表能力强",[14,146988,146989],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[65,146991,146993],{"id":146992},"_102-json回顾","10.2 JSON回顾",[14,146995,146996],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,146998,146999],{},"Python 字典：",[114,147001,147003],{"className":30389,"code":147002,"language":30391,"meta":37,"style":37},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[120,147004,147005,147013,147024,147033],{"__ignoreMap":37},[123,147006,147007,147009,147011],{"class":125,"line":126},[123,147008,101655],{"class":133},[123,147010,179],{"class":129},[123,147012,15582],{"class":133},[123,147014,147015,147018,147020,147022],{"class":125,"line":45},[123,147016,147017],{"class":238},"    \"name\"",[123,147019,51448],{"class":133},[123,147021,69280],{"class":238},[123,147023,31477],{"class":133},[123,147025,147026,147029,147031],{"class":125,"line":1189},[123,147027,147028],{"class":238},"    \"value\"",[123,147030,51448],{"class":133},[123,147032,97455],{"class":182},[123,147034,147035],{"class":125,"line":1204},[123,147036,1574],{"class":133},[14,147038,147039],{},"JSON 字符串：",[114,147041,147044],{"className":147042,"code":147043,"language":145789,"meta":37,"style":37},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[120,147045,147046,147050,147061,147070],{"__ignoreMap":37},[123,147047,147048],{"class":125,"line":126},[123,147049,1555],{"class":133},[123,147051,147052,147055,147057,147059],{"class":125,"line":45},[123,147053,147054],{"class":182},"  \"name\"",[123,147056,51448],{"class":133},[123,147058,69280],{"class":238},[123,147060,31477],{"class":133},[123,147062,147063,147066,147068],{"class":125,"line":1189},[123,147064,147065],{"class":182},"  \"value\"",[123,147067,51448],{"class":133},[123,147069,97455],{"class":182},[123,147071,147072],{"class":125,"line":1204},[123,147073,1574],{"class":133},[14,147075,147076],{},"Python 与 JSON 的转换：",[114,147078,147080],{"className":30389,"code":147079,"language":30391,"meta":37,"style":37},"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",[120,147081,147082,147089,147093,147118,147122,147141,147148,147152,147162],{"__ignoreMap":37},[123,147083,147084,147086],{"class":125,"line":126},[123,147085,30403],{"class":129},[123,147087,147088],{"class":133}," json\n",[123,147090,147091],{"class":125,"line":45},[123,147092,2409],{"emptyLinePlaceholder":50},[123,147094,147095,147097,147099,147101,147103,147105,147107,147109,147112,147114,147116],{"class":125,"line":1189},[123,147096,101655],{"class":133},[123,147098,179],{"class":129},[123,147100,4457],{"class":133},[123,147102,62690],{"class":238},[123,147104,51448],{"class":133},[123,147106,69280],{"class":238},[123,147108,12445],{"class":133},[123,147110,147111],{"class":238},"\"value\"",[123,147113,51448],{"class":133},[123,147115,445],{"class":182},[123,147117,1574],{"class":133},[123,147119,147120],{"class":125,"line":1204},[123,147121,2409],{"emptyLinePlaceholder":50},[123,147123,147124,147127,147129,147132,147135,147137,147139],{"class":125,"line":1210},[123,147125,147126],{"class":133},"json_text ",[123,147128,179],{"class":129},[123,147130,147131],{"class":133}," json.dumps(data, ",[123,147133,147134],{"class":5226},"ensure_ascii",[123,147136,179],{"class":129},[123,147138,33998],{"class":182},[123,147140,140],{"class":133},[123,147142,147143,147145],{"class":125,"line":1224},[123,147144,30426],{"class":182},[123,147146,147147],{"class":133},"(json_text)\n",[123,147149,147150],{"class":125,"line":1230},[123,147151,2409],{"emptyLinePlaceholder":50},[123,147153,147154,147157,147159],{"class":125,"line":1321},[123,147155,147156],{"class":133},"new_data ",[123,147158,179],{"class":129},[123,147160,147161],{"class":133}," json.loads(json_text)\n",[123,147163,147164,147166],{"class":125,"line":1327},[123,147165,30426],{"class":182},[123,147167,147168],{"class":133},"(new_data)\n",[65,147170,147172],{"id":147171},"_103-安装pyecharts","10.3 安装pyecharts",[114,147174,147176],{"className":23832,"code":147175,"language":23834,"meta":37,"style":37},"pip install pyecharts\n",[120,147177,147178],{"__ignoreMap":37},[123,147179,147180,147182,147184],{"class":125,"line":126},[123,147181,23841],{"class":1972},[123,147183,23844],{"class":238},[123,147185,147186],{"class":238}," pyecharts\n",[14,147188,147189],{},"验证：",[114,147191,147193],{"className":30389,"code":147192,"language":30391,"meta":37,"style":37},"import pyecharts\n\nprint(pyecharts.__version__)\n",[120,147194,147195,147201,147205],{"__ignoreMap":37},[123,147196,147197,147199],{"class":125,"line":126},[123,147198,30403],{"class":129},[123,147200,147186],{"class":133},[123,147202,147203],{"class":125,"line":45},[123,147204,2409],{"emptyLinePlaceholder":50},[123,147206,147207,147209,147212,147215],{"class":125,"line":1189},[123,147208,30426],{"class":182},[123,147210,147211],{"class":133},"(pyecharts.",[123,147213,147214],{"class":182},"__version__",[123,147216,140],{"class":133},[14,147218,147219],{},"如果使用虚拟环境，要先激活环境再安装。",[65,147221,147223],{"id":147222},"_104-第一个折线图","10.4 第一个折线图",[114,147225,147227],{"className":30389,"code":147226,"language":30391,"meta":37,"style":37},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[120,147228,147229,147241,147245,147255,147285,147317],{"__ignoreMap":37},[123,147230,147231,147233,147236,147238],{"class":125,"line":126},[123,147232,30748],{"class":129},[123,147234,147235],{"class":133}," pyecharts.charts ",[123,147237,30403],{"class":129},[123,147239,147240],{"class":133}," Line\n",[123,147242,147243],{"class":125,"line":45},[123,147244,2409],{"emptyLinePlaceholder":50},[123,147246,147247,147250,147252],{"class":125,"line":1189},[123,147248,147249],{"class":133},"line ",[123,147251,179],{"class":129},[123,147253,147254],{"class":133}," Line()\n",[123,147256,147257,147260,147263,147265,147268,147270,147273,147275,147278,147280,147283],{"class":125,"line":1204},[123,147258,147259],{"class":133},"line.add_xaxis([",[123,147261,147262],{"class":238},"\"周一\"",[123,147264,12445],{"class":133},[123,147266,147267],{"class":238},"\"周二\"",[123,147269,12445],{"class":133},[123,147271,147272],{"class":238},"\"周三\"",[123,147274,12445],{"class":133},[123,147276,147277],{"class":238},"\"周四\"",[123,147279,12445],{"class":133},[123,147281,147282],{"class":238},"\"周五\"",[123,147284,4666],{"class":133},[123,147286,147287,147290,147293,147295,147297,147299,147301,147303,147305,147307,147310,147312,147315],{"class":125,"line":1210},[123,147288,147289],{"class":133},"line.add_yaxis(",[123,147291,147292],{"class":238},"\"销售额\"",[123,147294,77529],{"class":133},[123,147296,445],{"class":182},[123,147298,12445],{"class":133},[123,147300,951],{"class":182},[123,147302,12445],{"class":133},[123,147304,996],{"class":182},[123,147306,12445],{"class":133},[123,147308,147309],{"class":182},"150",[123,147311,12445],{"class":133},[123,147313,147314],{"class":182},"180",[123,147316,4666],{"class":133},[123,147318,147319,147322,147325],{"class":125,"line":1224},[123,147320,147321],{"class":133},"line.render(",[123,147323,147324],{"class":238},"\"line.html\"",[123,147326,140],{"class":133},[14,147328,147329,147330,147333],{},"运行后会生成 ",[120,147331,147332],{},"line.html","，用浏览器打开即可看到图表。",[14,147335,147336],{},"核心步骤：",[77,147338,147339,147342,147345,147348,147351],{},[80,147340,147341],{},"导入图表类。",[80,147343,147344],{},"创建图表对象。",[80,147346,147347],{},"添加 x 轴数据。",[80,147349,147350],{},"添加 y 轴数据。",[80,147352,147353],{},"渲染为 HTML。",[65,147355,147357],{"id":147356},"_105-全局配置","10.5 全局配置",[14,147359,147360,147361,147364],{},"常用配置在 ",[120,147362,147363],{},"pyecharts.options"," 中。",[114,147366,147368],{"className":30389,"code":147367,"language":30391,"meta":37,"style":37},"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",[120,147369,147370,147387,147397,147401,147409,147433,147461,147466,147485,147504,147522,147542,147546],{"__ignoreMap":37},[123,147371,147372,147374,147377,147379,147382,147384],{"class":125,"line":126},[123,147373,30748],{"class":129},[123,147375,147376],{"class":133}," pyecharts ",[123,147378,30403],{"class":129},[123,147380,147381],{"class":133}," options ",[123,147383,31394],{"class":129},[123,147385,147386],{"class":133}," opts\n",[123,147388,147389,147391,147393,147395],{"class":125,"line":45},[123,147390,30748],{"class":129},[123,147392,147235],{"class":133},[123,147394,30403],{"class":129},[123,147396,147240],{"class":133},[123,147398,147399],{"class":125,"line":1189},[123,147400,2409],{"emptyLinePlaceholder":50},[123,147402,147403,147405,147407],{"class":125,"line":1204},[123,147404,147249],{"class":133},[123,147406,179],{"class":129},[123,147408,147254],{"class":133},[123,147410,147411,147413,147415,147417,147419,147421,147423,147425,147427,147429,147431],{"class":125,"line":1210},[123,147412,147259],{"class":133},[123,147414,147262],{"class":238},[123,147416,12445],{"class":133},[123,147418,147267],{"class":238},[123,147420,12445],{"class":133},[123,147422,147272],{"class":238},[123,147424,12445],{"class":133},[123,147426,147277],{"class":238},[123,147428,12445],{"class":133},[123,147430,147282],{"class":238},[123,147432,4666],{"class":133},[123,147434,147435,147437,147439,147441,147443,147445,147447,147449,147451,147453,147455,147457,147459],{"class":125,"line":1224},[123,147436,147289],{"class":133},[123,147438,147292],{"class":238},[123,147440,77529],{"class":133},[123,147442,445],{"class":182},[123,147444,12445],{"class":133},[123,147446,951],{"class":182},[123,147448,12445],{"class":133},[123,147450,996],{"class":182},[123,147452,12445],{"class":133},[123,147454,147309],{"class":182},[123,147456,12445],{"class":133},[123,147458,147314],{"class":182},[123,147460,4666],{"class":133},[123,147462,147463],{"class":125,"line":1230},[123,147464,147465],{"class":133},"line.set_global_opts(\n",[123,147467,147468,147471,147473,147476,147478,147480,147483],{"class":125,"line":1321},[123,147469,147470],{"class":5226},"    title_opts",[123,147472,179],{"class":129},[123,147474,147475],{"class":133},"opts.TitleOpts(",[123,147477,51418],{"class":5226},[123,147479,179],{"class":129},[123,147481,147482],{"class":238},"\"一周销售额\"",[123,147484,38058],{"class":133},[123,147486,147487,147490,147492,147495,147497,147499,147502],{"class":125,"line":1327},[123,147488,147489],{"class":5226},"    xaxis_opts",[123,147491,179],{"class":129},[123,147493,147494],{"class":133},"opts.AxisOpts(",[123,147496,79821],{"class":5226},[123,147498,179],{"class":129},[123,147500,147501],{"class":238},"\"日期\"",[123,147503,38058],{"class":133},[123,147505,147506,147509,147511,147513,147515,147517,147520],{"class":125,"line":1339},[123,147507,147508],{"class":5226},"    yaxis_opts",[123,147510,179],{"class":129},[123,147512,147494],{"class":133},[123,147514,79821],{"class":5226},[123,147516,179],{"class":129},[123,147518,147519],{"class":238},"\"金额\"",[123,147521,38058],{"class":133},[123,147523,147524,147527,147529,147532,147535,147537,147540],{"class":125,"line":1621},[123,147525,147526],{"class":5226},"    tooltip_opts",[123,147528,179],{"class":129},[123,147530,147531],{"class":133},"opts.TooltipOpts(",[123,147533,147534],{"class":5226},"trigger",[123,147536,179],{"class":129},[123,147538,147539],{"class":238},"\"axis\"",[123,147541,38058],{"class":133},[123,147543,147544],{"class":125,"line":1626},[123,147545,140],{"class":133},[123,147547,147548,147550,147552],{"class":125,"line":1632},[123,147549,147321],{"class":133},[123,147551,147324],{"class":238},[123,147553,140],{"class":133},[14,147555,147556],{},"常见全局配置：",[271,147558,147559,147568],{},[274,147560,147561],{},[277,147562,147563,147566],{},[280,147564,147565],{},"配置",[280,147567,102693],{},[318,147569,147570,147580,147590,147600,147610,147620],{},[277,147571,147572,147577],{},[323,147573,147574],{},[120,147575,147576],{},"TitleOpts",[323,147578,147579],{},"标题",[277,147581,147582,147587],{},[323,147583,147584],{},[120,147585,147586],{},"LegendOpts",[323,147588,147589],{},"图例",[277,147591,147592,147597],{},[323,147593,147594],{},[120,147595,147596],{},"TooltipOpts",[323,147598,147599],{},"提示框",[277,147601,147602,147607],{},[323,147603,147604],{},[120,147605,147606],{},"AxisOpts",[323,147608,147609],{},"坐标轴",[277,147611,147612,147617],{},[323,147613,147614],{},[120,147615,147616],{},"VisualMapOpts",[323,147618,147619],{},"视觉映射",[277,147621,147622,147627],{},[323,147623,147624],{},[120,147625,147626],{},"DataZoomOpts",[323,147628,147629],{},"区域缩放",[65,147631,147633],{"id":147632},"_106-系列配置","10.6 系列配置",[14,147635,147636],{},"系列配置作用于某一组数据。",[114,147638,147640],{"className":30389,"code":147639,"language":30391,"meta":37,"style":37},"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",[120,147641,147642,147647,147658,147687,147698,147717],{"__ignoreMap":37},[123,147643,147644],{"class":125,"line":126},[123,147645,147646],{"class":133},"line.add_yaxis(\n",[123,147648,147649,147652,147654,147656],{"class":125,"line":45},[123,147650,147651],{"class":5226},"    series_name",[123,147653,179],{"class":129},[123,147655,147292],{"class":238},[123,147657,31477],{"class":133},[123,147659,147660,147663,147665,147667,147669,147671,147673,147675,147677,147679,147681,147683,147685],{"class":125,"line":1189},[123,147661,147662],{"class":5226},"    y_axis",[123,147664,179],{"class":129},[123,147666,1024],{"class":133},[123,147668,445],{"class":182},[123,147670,12445],{"class":133},[123,147672,951],{"class":182},[123,147674,12445],{"class":133},[123,147676,996],{"class":182},[123,147678,12445],{"class":133},[123,147680,147309],{"class":182},[123,147682,12445],{"class":133},[123,147684,147314],{"class":182},[123,147686,87847],{"class":133},[123,147688,147689,147692,147694,147696],{"class":125,"line":1204},[123,147690,147691],{"class":5226},"    is_smooth",[123,147693,179],{"class":129},[123,147695,31487],{"class":182},[123,147697,31477],{"class":133},[123,147699,147700,147703,147705,147708,147711,147713,147715],{"class":125,"line":1210},[123,147701,147702],{"class":5226},"    label_opts",[123,147704,179],{"class":129},[123,147706,147707],{"class":133},"opts.LabelOpts(",[123,147709,147710],{"class":5226},"is_show",[123,147712,179],{"class":129},[123,147714,31487],{"class":182},[123,147716,38058],{"class":133},[123,147718,147719],{"class":125,"line":1224},[123,147720,140],{"class":133},[14,147722,147723],{},"常用参数：",[77,147725,147726,147732,147738,147744,147750],{},[80,147727,147728,147731],{},[120,147729,147730],{},"series_name","：系列名称。",[80,147733,147734,147737],{},[120,147735,147736],{},"y_axis","：y 轴数据。",[80,147739,147740,147743],{},[120,147741,147742],{},"is_smooth","：是否平滑曲线。",[80,147745,147746,147749],{},[120,147747,147748],{},"label_opts","：标签配置。",[80,147751,147752,147755],{},[120,147753,147754],{},"symbol_size","：标记点大小。",[65,147757,147759],{"id":147758},"_107-多条折线","10.7 多条折线",[114,147761,147763],{"className":30389,"code":147762,"language":30391,"meta":37,"style":37},"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",[120,147764,147765,147779,147789,147793,147822,147826,147834,147839,147877,147914,147918,147935,147951,147955],{"__ignoreMap":37},[123,147766,147767,147769,147771,147773,147775,147777],{"class":125,"line":126},[123,147768,30748],{"class":129},[123,147770,147376],{"class":133},[123,147772,30403],{"class":129},[123,147774,147381],{"class":133},[123,147776,31394],{"class":129},[123,147778,147386],{"class":133},[123,147780,147781,147783,147785,147787],{"class":125,"line":45},[123,147782,30748],{"class":129},[123,147784,147235],{"class":133},[123,147786,30403],{"class":129},[123,147788,147240],{"class":133},[123,147790,147791],{"class":125,"line":1189},[123,147792,2409],{"emptyLinePlaceholder":50},[123,147794,147795,147798,147800,147802,147804,147806,147808,147810,147812,147814,147816,147818,147820],{"class":125,"line":1204},[123,147796,147797],{"class":133},"dates ",[123,147799,179],{"class":129},[123,147801,52237],{"class":133},[123,147803,147262],{"class":238},[123,147805,12445],{"class":133},[123,147807,147267],{"class":238},[123,147809,12445],{"class":133},[123,147811,147272],{"class":238},[123,147813,12445],{"class":133},[123,147815,147277],{"class":238},[123,147817,12445],{"class":133},[123,147819,147282],{"class":238},[123,147821,33257],{"class":133},[123,147823,147824],{"class":125,"line":1210},[123,147825,2409],{"emptyLinePlaceholder":50},[123,147827,147828,147830,147832],{"class":125,"line":1224},[123,147829,147249],{"class":133},[123,147831,179],{"class":129},[123,147833,147254],{"class":133},[123,147835,147836],{"class":125,"line":1230},[123,147837,147838],{"class":133},"line.add_xaxis(dates)\n",[123,147840,147841,147843,147846,147848,147850,147852,147855,147857,147859,147861,147863,147865,147867,147869,147871,147873,147875],{"class":125,"line":1321},[123,147842,147289],{"class":133},[123,147844,147845],{"class":238},"\"线上销售\"",[123,147847,77529],{"class":133},[123,147849,445],{"class":182},[123,147851,12445],{"class":133},[123,147853,147854],{"class":182},"130",[123,147856,12445],{"class":133},[123,147858,951],{"class":182},[123,147860,12445],{"class":133},[123,147862,21058],{"class":182},[123,147864,12445],{"class":133},[123,147866,1731],{"class":182},[123,147868,112199],{"class":133},[123,147870,147742],{"class":5226},[123,147872,179],{"class":129},[123,147874,31487],{"class":182},[123,147876,140],{"class":133},[123,147878,147879,147881,147884,147886,147888,147890,147892,147894,147896,147898,147900,147902,147904,147906,147908,147910,147912],{"class":125,"line":1327},[123,147880,147289],{"class":133},[123,147882,147883],{"class":238},"\"线下销售\"",[123,147885,77529],{"class":133},[123,147887,746],{"class":182},[123,147889,12445],{"class":133},[123,147891,996],{"class":182},[123,147893,12445],{"class":133},[123,147895,445],{"class":182},[123,147897,12445],{"class":133},[123,147899,951],{"class":182},[123,147901,12445],{"class":133},[123,147903,147309],{"class":182},[123,147905,112199],{"class":133},[123,147907,147742],{"class":5226},[123,147909,179],{"class":129},[123,147911,31487],{"class":182},[123,147913,140],{"class":133},[123,147915,147916],{"class":125,"line":1339},[123,147917,147465],{"class":133},[123,147919,147920,147922,147924,147926,147928,147930,147933],{"class":125,"line":1621},[123,147921,147470],{"class":5226},[123,147923,179],{"class":129},[123,147925,147475],{"class":133},[123,147927,51418],{"class":5226},[123,147929,179],{"class":129},[123,147931,147932],{"class":238},"\"线上线下销售趋势\"",[123,147934,38058],{"class":133},[123,147936,147937,147939,147941,147943,147945,147947,147949],{"class":125,"line":1626},[123,147938,147526],{"class":5226},[123,147940,179],{"class":129},[123,147942,147531],{"class":133},[123,147944,147534],{"class":5226},[123,147946,179],{"class":129},[123,147948,147539],{"class":238},[123,147950,38058],{"class":133},[123,147952,147953],{"class":125,"line":1632},[123,147954,140],{"class":133},[123,147956,147957,147959,147962],{"class":125,"line":1637},[123,147958,147321],{"class":133},[123,147960,147961],{"class":238},"\"sales.html\"",[123,147963,140],{"class":133},[14,147965,147966],{},"多条折线适合比较不同指标或不同地区。",[65,147968,147970],{"id":147969},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,147972,147973,147974,24629],{},"假设 ",[120,147975,147976],{},"sales.json",[114,147978,147980],{"className":147042,"code":147979,"language":145789,"meta":37,"style":37},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[120,147981,147982,147987,148019,148047,148075],{"__ignoreMap":37},[123,147983,147984],{"class":125,"line":126},[123,147985,147986],{"class":133},"[\n",[123,147988,147989,147992,147995,147997,147999,148001,148004,148006,148008,148010,148013,148015,148017],{"class":125,"line":45},[123,147990,147991],{"class":133},"  {",[123,147993,147994],{"class":182},"\"date\"",[123,147996,51448],{"class":133},[123,147998,147262],{"class":238},[123,148000,12445],{"class":133},[123,148002,148003],{"class":182},"\"online\"",[123,148005,51448],{"class":133},[123,148007,445],{"class":182},[123,148009,12445],{"class":133},[123,148011,148012],{"class":182},"\"offline\"",[123,148014,51448],{"class":133},[123,148016,746],{"class":182},[123,148018,4939],{"class":133},[123,148020,148021,148023,148025,148027,148029,148031,148033,148035,148037,148039,148041,148043,148045],{"class":125,"line":1189},[123,148022,147991],{"class":133},[123,148024,147994],{"class":182},[123,148026,51448],{"class":133},[123,148028,147267],{"class":238},[123,148030,12445],{"class":133},[123,148032,148003],{"class":182},[123,148034,51448],{"class":133},[123,148036,147854],{"class":182},[123,148038,12445],{"class":133},[123,148040,148012],{"class":182},[123,148042,51448],{"class":133},[123,148044,996],{"class":182},[123,148046,4939],{"class":133},[123,148048,148049,148051,148053,148055,148057,148059,148061,148063,148065,148067,148069,148071,148073],{"class":125,"line":1204},[123,148050,147991],{"class":133},[123,148052,147994],{"class":182},[123,148054,51448],{"class":133},[123,148056,147272],{"class":238},[123,148058,12445],{"class":133},[123,148060,148003],{"class":182},[123,148062,51448],{"class":133},[123,148064,951],{"class":182},[123,148066,12445],{"class":133},[123,148068,148012],{"class":182},[123,148070,51448],{"class":133},[123,148072,445],{"class":182},[123,148074,1574],{"class":133},[123,148076,148077],{"class":125,"line":1210},[123,148078,33257],{"class":133},[14,148080,148081],{},"读取并绘图：",[114,148083,148085],{"className":30389,"code":148084,"language":30391,"meta":37,"style":37},"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",[120,148086,148087,148093,148107,148117,148121,148153,148166,148170,148178,148187,148196,148200,148212,148221,148230,148239,148243,148251,148255,148272,148289,148293,148310,148326,148330],{"__ignoreMap":37},[123,148088,148089,148091],{"class":125,"line":126},[123,148090,30403],{"class":129},[123,148092,147088],{"class":133},[123,148094,148095,148097,148099,148101,148103,148105],{"class":125,"line":45},[123,148096,30748],{"class":129},[123,148098,147376],{"class":133},[123,148100,30403],{"class":129},[123,148102,147381],{"class":133},[123,148104,31394],{"class":129},[123,148106,147386],{"class":133},[123,148108,148109,148111,148113,148115],{"class":125,"line":1189},[123,148110,30748],{"class":129},[123,148112,147235],{"class":133},[123,148114,30403],{"class":129},[123,148116,147240],{"class":133},[123,148118,148119],{"class":125,"line":1204},[123,148120,2409],{"emptyLinePlaceholder":50},[123,148122,148123,148125,148127,148129,148132,148134,148136,148138,148140,148142,148144,148146,148148,148151],{"class":125,"line":1210},[123,148124,107830],{"class":129},[123,148126,146788],{"class":182},[123,148128,134],{"class":133},[123,148130,148131],{"class":238},"\"sales.json\"",[123,148133,12445],{"class":133},[123,148135,146798],{"class":238},[123,148137,12445],{"class":133},[123,148139,146803],{"class":5226},[123,148141,179],{"class":129},[123,148143,146808],{"class":238},[123,148145,13724],{"class":133},[123,148147,31394],{"class":129},[123,148149,148150],{"class":5226}," file",[123,148152,3748],{"class":133},[123,148154,148155,148157,148159,148162,148164],{"class":125,"line":1224},[123,148156,101418],{"class":133},[123,148158,179],{"class":129},[123,148160,148161],{"class":133}," json.load(",[123,148163,45365],{"class":5226},[123,148165,140],{"class":133},[123,148167,148168],{"class":125,"line":1230},[123,148169,2409],{"emptyLinePlaceholder":50},[123,148171,148172,148174,148176],{"class":125,"line":1321},[123,148173,147797],{"class":133},[123,148175,179],{"class":129},[123,148177,51849],{"class":133},[123,148179,148180,148183,148185],{"class":125,"line":1327},[123,148181,148182],{"class":133},"online_sales ",[123,148184,179],{"class":129},[123,148186,51849],{"class":133},[123,148188,148189,148192,148194],{"class":125,"line":1339},[123,148190,148191],{"class":133},"offline_sales ",[123,148193,179],{"class":129},[123,148195,51849],{"class":133},[123,148197,148198],{"class":125,"line":1621},[123,148199,2409],{"emptyLinePlaceholder":50},[123,148201,148202,148204,148207,148209],{"class":125,"line":1626},[123,148203,3034],{"class":129},[123,148205,148206],{"class":133}," item ",[123,148208,26054],{"class":129},[123,148210,148211],{"class":133}," data:\n",[123,148213,148214,148217,148219],{"class":125,"line":1632},[123,148215,148216],{"class":133},"    dates.append(item[",[123,148218,147994],{"class":238},[123,148220,4666],{"class":133},[123,148222,148223,148226,148228],{"class":125,"line":1637},[123,148224,148225],{"class":133},"    online_sales.append(item[",[123,148227,148003],{"class":238},[123,148229,4666],{"class":133},[123,148231,148232,148235,148237],{"class":125,"line":1651},[123,148233,148234],{"class":133},"    offline_sales.append(item[",[123,148236,148012],{"class":238},[123,148238,4666],{"class":133},[123,148240,148241],{"class":125,"line":1656},[123,148242,2409],{"emptyLinePlaceholder":50},[123,148244,148245,148247,148249],{"class":125,"line":1662},[123,148246,147249],{"class":133},[123,148248,179],{"class":129},[123,148250,147254],{"class":133},[123,148252,148253],{"class":125,"line":1683},[123,148254,147838],{"class":133},[123,148256,148257,148259,148261,148264,148266,148268,148270],{"class":125,"line":1688},[123,148258,147289],{"class":133},[123,148260,147845],{"class":238},[123,148262,148263],{"class":133},", online_sales, ",[123,148265,147742],{"class":5226},[123,148267,179],{"class":129},[123,148269,31487],{"class":182},[123,148271,140],{"class":133},[123,148273,148274,148276,148278,148281,148283,148285,148287],{"class":125,"line":1702},[123,148275,147289],{"class":133},[123,148277,147883],{"class":238},[123,148279,148280],{"class":133},", offline_sales, ",[123,148282,147742],{"class":5226},[123,148284,179],{"class":129},[123,148286,31487],{"class":182},[123,148288,140],{"class":133},[123,148290,148291],{"class":125,"line":1707},[123,148292,147465],{"class":133},[123,148294,148295,148297,148299,148301,148303,148305,148308],{"class":125,"line":1736},[123,148296,147470],{"class":5226},[123,148298,179],{"class":129},[123,148300,147475],{"class":133},[123,148302,51418],{"class":5226},[123,148304,179],{"class":129},[123,148306,148307],{"class":238},"\"销售趋势\"",[123,148309,38058],{"class":133},[123,148311,148312,148314,148316,148318,148320,148322,148324],{"class":125,"line":1741},[123,148313,147526],{"class":5226},[123,148315,179],{"class":129},[123,148317,147531],{"class":133},[123,148319,147534],{"class":5226},[123,148321,179],{"class":129},[123,148323,147539],{"class":238},[123,148325,38058],{"class":133},[123,148327,148328],{"class":125,"line":1758},[123,148329,140],{"class":133},[123,148331,148332,148334,148336],{"class":125,"line":1763},[123,148333,147321],{"class":133},[123,148335,147961],{"class":238},[123,148337,140],{"class":133},[65,148339,148341],{"id":148340},"_109-数据清洗","10.9 数据清洗",[14,148343,148344],{},"真实数据经常不整齐，需要清洗。",[14,148346,148347],{},"常见问题：",[77,148349,148350,148353,148356,148359],{},[80,148351,148352],{},"数字是字符串。",[80,148354,148355],{},"字段缺失。",[80,148357,148358],{},"空值。",[80,148360,148361],{},"日期格式不统一。",[14,148363,15145],{},[114,148365,148367],{"className":30389,"code":148366,"language":30391,"meta":37,"style":37},"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",[120,148368,148369,148378,148401,148421,148442,148446,148450,148458,148467,148471,148482,148496,148505,148510,148514,148522,148532,148536,148543],{"__ignoreMap":37},[123,148370,148371,148374,148376],{"class":125,"line":126},[123,148372,148373],{"class":133},"raw_data ",[123,148375,179],{"class":129},[123,148377,55458],{"class":133},[123,148379,148380,148383,148385,148387,148389,148391,148394,148396,148399],{"class":125,"line":45},[123,148381,148382],{"class":133},"    {",[123,148384,147994],{"class":238},[123,148386,51448],{"class":133},[123,148388,147262],{"class":238},[123,148390,12445],{"class":133},[123,148392,148393],{"class":238},"\"sales\"",[123,148395,51448],{"class":133},[123,148397,148398],{"class":238},"\"100\"",[123,148400,4939],{"class":133},[123,148402,148403,148405,148407,148409,148411,148413,148415,148417,148419],{"class":125,"line":1189},[123,148404,148382],{"class":133},[123,148406,147994],{"class":238},[123,148408,51448],{"class":133},[123,148410,147267],{"class":238},[123,148412,12445],{"class":133},[123,148414,148393],{"class":238},[123,148416,51448],{"class":133},[123,148418,7662],{"class":238},[123,148420,4939],{"class":133},[123,148422,148423,148425,148427,148429,148431,148433,148435,148437,148440],{"class":125,"line":1204},[123,148424,148382],{"class":133},[123,148426,147994],{"class":238},[123,148428,51448],{"class":133},[123,148430,147272],{"class":238},[123,148432,12445],{"class":133},[123,148434,148393],{"class":238},[123,148436,51448],{"class":133},[123,148438,148439],{"class":238},"\"120\"",[123,148441,4939],{"class":133},[123,148443,148444],{"class":125,"line":1210},[123,148445,33257],{"class":133},[123,148447,148448],{"class":125,"line":1224},[123,148449,2409],{"emptyLinePlaceholder":50},[123,148451,148452,148454,148456],{"class":125,"line":1230},[123,148453,147797],{"class":133},[123,148455,179],{"class":129},[123,148457,51849],{"class":133},[123,148459,148460,148463,148465],{"class":125,"line":1321},[123,148461,148462],{"class":133},"sales ",[123,148464,179],{"class":129},[123,148466,51849],{"class":133},[123,148468,148469],{"class":125,"line":1327},[123,148470,2409],{"emptyLinePlaceholder":50},[123,148472,148473,148475,148477,148479],{"class":125,"line":1339},[123,148474,3034],{"class":129},[123,148476,148206],{"class":133},[123,148478,26054],{"class":129},[123,148480,148481],{"class":133}," raw_data:\n",[123,148483,148484,148487,148489,148492,148494],{"class":125,"line":1621},[123,148485,148486],{"class":133},"    value ",[123,148488,179],{"class":129},[123,148490,148491],{"class":133}," item.get(",[123,148493,148393],{"class":238},[123,148495,140],{"class":133},[123,148497,148498,148500,148502],{"class":125,"line":1626},[123,148499,3110],{"class":129},[123,148501,38941],{"class":129},[123,148503,148504],{"class":133}," value:\n",[123,148506,148507],{"class":125,"line":1632},[123,148508,148509],{"class":129},"        continue\n",[123,148511,148512],{"class":125,"line":1637},[123,148513,2409],{"emptyLinePlaceholder":50},[123,148515,148516,148518,148520],{"class":125,"line":1651},[123,148517,148216],{"class":133},[123,148519,147994],{"class":238},[123,148521,4666],{"class":133},[123,148523,148524,148527,148529],{"class":125,"line":1656},[123,148525,148526],{"class":133},"    sales.append(",[123,148528,137],{"class":182},[123,148530,148531],{"class":133},"(value))\n",[123,148533,148534],{"class":125,"line":1662},[123,148535,2409],{"emptyLinePlaceholder":50},[123,148537,148538,148540],{"class":125,"line":1683},[123,148539,30426],{"class":182},[123,148541,148542],{"class":133},"(dates)\n",[123,148544,148545,148547],{"class":125,"line":1688},[123,148546,30426],{"class":182},[123,148548,148549],{"class":133},"(sales)\n",[65,148551,148553],{"id":148552},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[114,148555,148557],{"className":30389,"code":148556,"language":30391,"meta":37,"style":37},"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",[120,148558,148559,148573,148583,148587,148595,148616,148638,148660,148682,148704,148708,148712,148734,148755,148759,148767,148771,148775,148785,148794,148804,148820,148824,148828,148845,148861,148877,148893,148903,148907],{"__ignoreMap":37},[123,148560,148561,148563,148565,148567,148569,148571],{"class":125,"line":126},[123,148562,30748],{"class":129},[123,148564,147376],{"class":133},[123,148566,30403],{"class":129},[123,148568,147381],{"class":133},[123,148570,31394],{"class":129},[123,148572,147386],{"class":133},[123,148574,148575,148577,148579,148581],{"class":125,"line":45},[123,148576,30748],{"class":129},[123,148578,147235],{"class":133},[123,148580,30403],{"class":129},[123,148582,147240],{"class":133},[123,148584,148585],{"class":125,"line":1189},[123,148586,2409],{"emptyLinePlaceholder":50},[123,148588,148589,148591,148593],{"class":125,"line":1204},[123,148590,148462],{"class":133},[123,148592,179],{"class":129},[123,148594,55458],{"class":133},[123,148596,148597,148599,148601,148603,148606,148608,148610,148612,148614],{"class":125,"line":1210},[123,148598,148382],{"class":133},[123,148600,147994],{"class":238},[123,148602,51448],{"class":133},[123,148604,148605],{"class":238},"\"2024-10-01\"",[123,148607,12445],{"class":133},[123,148609,84095],{"class":238},[123,148611,51448],{"class":133},[123,148613,92034],{"class":182},[123,148615,4939],{"class":133},[123,148617,148618,148620,148622,148624,148627,148629,148631,148633,148636],{"class":125,"line":1224},[123,148619,148382],{"class":133},[123,148621,147994],{"class":238},[123,148623,51448],{"class":133},[123,148625,148626],{"class":238},"\"2024-10-02\"",[123,148628,12445],{"class":133},[123,148630,84095],{"class":238},[123,148632,51448],{"class":133},[123,148634,148635],{"class":182},"1800",[123,148637,4939],{"class":133},[123,148639,148640,148642,148644,148646,148649,148651,148653,148655,148658],{"class":125,"line":1230},[123,148641,148382],{"class":133},[123,148643,147994],{"class":238},[123,148645,51448],{"class":133},[123,148647,148648],{"class":238},"\"2024-10-03\"",[123,148650,12445],{"class":133},[123,148652,84095],{"class":238},[123,148654,51448],{"class":133},[123,148656,148657],{"class":182},"1500",[123,148659,4939],{"class":133},[123,148661,148662,148664,148666,148668,148671,148673,148675,148677,148680],{"class":125,"line":1321},[123,148663,148382],{"class":133},[123,148665,147994],{"class":238},[123,148667,51448],{"class":133},[123,148669,148670],{"class":238},"\"2024-10-04\"",[123,148672,12445],{"class":133},[123,148674,84095],{"class":238},[123,148676,51448],{"class":133},[123,148678,148679],{"class":182},"2100",[123,148681,4939],{"class":133},[123,148683,148684,148686,148688,148690,148693,148695,148697,148699,148702],{"class":125,"line":1327},[123,148685,148382],{"class":133},[123,148687,147994],{"class":238},[123,148689,51448],{"class":133},[123,148691,148692],{"class":238},"\"2024-10-05\"",[123,148694,12445],{"class":133},[123,148696,84095],{"class":238},[123,148698,51448],{"class":133},[123,148700,148701],{"class":182},"2600",[123,148703,4939],{"class":133},[123,148705,148706],{"class":125,"line":1339},[123,148707,33257],{"class":133},[123,148709,148710],{"class":125,"line":1621},[123,148711,2409],{"emptyLinePlaceholder":50},[123,148713,148714,148716,148718,148721,148723,148725,148727,148729,148731],{"class":125,"line":1626},[123,148715,147797],{"class":133},[123,148717,179],{"class":129},[123,148719,148720],{"class":133}," [item[",[123,148722,147994],{"class":238},[123,148724,4452],{"class":133},[123,148726,3034],{"class":129},[123,148728,148206],{"class":133},[123,148730,26054],{"class":129},[123,148732,148733],{"class":133}," sales]\n",[123,148735,148736,148739,148741,148743,148745,148747,148749,148751,148753],{"class":125,"line":1632},[123,148737,148738],{"class":133},"amounts ",[123,148740,179],{"class":129},[123,148742,148720],{"class":133},[123,148744,84095],{"class":238},[123,148746,4452],{"class":133},[123,148748,3034],{"class":129},[123,148750,148206],{"class":133},[123,148752,26054],{"class":129},[123,148754,148733],{"class":133},[123,148756,148757],{"class":125,"line":1637},[123,148758,2409],{"emptyLinePlaceholder":50},[123,148760,148761,148763,148765],{"class":125,"line":1651},[123,148762,147249],{"class":133},[123,148764,179],{"class":129},[123,148766,147254],{"class":133},[123,148768,148769],{"class":125,"line":1656},[123,148770,147838],{"class":133},[123,148772,148773],{"class":125,"line":1662},[123,148774,147646],{"class":133},[123,148776,148777,148779,148781,148783],{"class":125,"line":1683},[123,148778,147651],{"class":5226},[123,148780,179],{"class":129},[123,148782,147292],{"class":238},[123,148784,31477],{"class":133},[123,148786,148787,148789,148791],{"class":125,"line":1688},[123,148788,147662],{"class":5226},[123,148790,179],{"class":129},[123,148792,148793],{"class":133},"amounts,\n",[123,148795,148796,148798,148800,148802],{"class":125,"line":1702},[123,148797,147691],{"class":5226},[123,148799,179],{"class":129},[123,148801,31487],{"class":182},[123,148803,31477],{"class":133},[123,148805,148806,148808,148810,148812,148814,148816,148818],{"class":125,"line":1707},[123,148807,147702],{"class":5226},[123,148809,179],{"class":129},[123,148811,147707],{"class":133},[123,148813,147710],{"class":5226},[123,148815,179],{"class":129},[123,148817,31487],{"class":182},[123,148819,38058],{"class":133},[123,148821,148822],{"class":125,"line":1736},[123,148823,140],{"class":133},[123,148825,148826],{"class":125,"line":1741},[123,148827,147465],{"class":133},[123,148829,148830,148832,148834,148836,148838,148840,148843],{"class":125,"line":1758},[123,148831,147470],{"class":5226},[123,148833,179],{"class":129},[123,148835,147475],{"class":133},[123,148837,51418],{"class":5226},[123,148839,179],{"class":129},[123,148841,148842],{"class":238},"\"每日销售额\"",[123,148844,38058],{"class":133},[123,148846,148847,148849,148851,148853,148855,148857,148859],{"class":125,"line":1763},[123,148848,147489],{"class":5226},[123,148850,179],{"class":129},[123,148852,147494],{"class":133},[123,148854,79821],{"class":5226},[123,148856,179],{"class":129},[123,148858,147501],{"class":238},[123,148860,38058],{"class":133},[123,148862,148863,148865,148867,148869,148871,148873,148875],{"class":125,"line":1768},[123,148864,147508],{"class":5226},[123,148866,179],{"class":129},[123,148868,147494],{"class":133},[123,148870,79821],{"class":5226},[123,148872,179],{"class":129},[123,148874,147519],{"class":238},[123,148876,38058],{"class":133},[123,148878,148879,148881,148883,148885,148887,148889,148891],{"class":125,"line":1773},[123,148880,147526],{"class":5226},[123,148882,179],{"class":129},[123,148884,147531],{"class":133},[123,148886,147534],{"class":5226},[123,148888,179],{"class":129},[123,148890,147539],{"class":238},[123,148892,38058],{"class":133},[123,148894,148895,148898,148900],{"class":125,"line":1787},[123,148896,148897],{"class":5226},"    datazoom_opts",[123,148899,179],{"class":129},[123,148901,148902],{"class":133},"[opts.DataZoomOpts()],\n",[123,148904,148905],{"class":125,"line":1792},[123,148906,140],{"class":133},[123,148908,148909,148911,148914],{"class":125,"line":2586},[123,148910,147321],{"class":133},[123,148912,148913],{"class":238},"\"daily_sales.html\"",[123,148915,140],{"class":133},[14,148917,148918,148921],{},[120,148919,148920],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[65,148923,148925],{"id":148924},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,148927,148928],{},"如果数据结构如下：",[114,148930,148932],{"className":30389,"code":148931,"language":30391,"meta":37,"style":37},"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",[120,148933,148934,148942,148950,148972,148993,148998,149005,149025,149045,149049],{"__ignoreMap":37},[123,148935,148936,148938,148940],{"class":125,"line":126},[123,148937,101655],{"class":133},[123,148939,179],{"class":129},[123,148941,15582],{"class":133},[123,148943,148944,148947],{"class":125,"line":45},[123,148945,148946],{"class":238},"    \"北京\"",[123,148948,148949],{"class":133},": [\n",[123,148951,148952,148954,148956,148958,148961,148963,148966,148968,148970],{"class":125,"line":1189},[123,148953,4926],{"class":133},[123,148955,147994],{"class":238},[123,148957,51448],{"class":133},[123,148959,148960],{"class":238},"\"2024-01-01\"",[123,148962,12445],{"class":133},[123,148964,148965],{"class":238},"\"confirm\"",[123,148967,51448],{"class":133},[123,148969,580],{"class":182},[123,148971,4939],{"class":133},[123,148973,148974,148976,148978,148980,148983,148985,148987,148989,148991],{"class":125,"line":1204},[123,148975,4926],{"class":133},[123,148977,147994],{"class":238},[123,148979,51448],{"class":133},[123,148981,148982],{"class":238},"\"2024-01-02\"",[123,148984,12445],{"class":133},[123,148986,148965],{"class":238},[123,148988,51448],{"class":133},[123,148990,632],{"class":182},[123,148992,4939],{"class":133},[123,148994,148995],{"class":125,"line":1210},[123,148996,148997],{"class":133},"    ],\n",[123,148999,149000,149003],{"class":125,"line":1224},[123,149001,149002],{"class":238},"    \"上海\"",[123,149004,148949],{"class":133},[123,149006,149007,149009,149011,149013,149015,149017,149019,149021,149023],{"class":125,"line":1230},[123,149008,4926],{"class":133},[123,149010,147994],{"class":238},[123,149012,51448],{"class":133},[123,149014,148960],{"class":238},[123,149016,12445],{"class":133},[123,149018,148965],{"class":238},[123,149020,51448],{"class":133},[123,149022,529],{"class":182},[123,149024,4939],{"class":133},[123,149026,149027,149029,149031,149033,149035,149037,149039,149041,149043],{"class":125,"line":1321},[123,149028,4926],{"class":133},[123,149030,147994],{"class":238},[123,149032,51448],{"class":133},[123,149034,148982],{"class":238},[123,149036,12445],{"class":133},[123,149038,148965],{"class":238},[123,149040,51448],{"class":133},[123,149042,657],{"class":182},[123,149044,4939],{"class":133},[123,149046,149047],{"class":125,"line":1327},[123,149048,148997],{"class":133},[123,149050,149051],{"class":125,"line":1339},[123,149052,1574],{"class":133},[14,149054,149055],{},"绘制多地区趋势：",[114,149057,149059],{"className":30389,"code":149058,"language":30391,"meta":37,"style":37},"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",[120,149060,149061,149075,149085,149089,149114,149118,149126,149130,149134,149146,149168,149181,149185,149189,149206,149222,149226],{"__ignoreMap":37},[123,149062,149063,149065,149067,149069,149071,149073],{"class":125,"line":126},[123,149064,30748],{"class":129},[123,149066,147376],{"class":133},[123,149068,30403],{"class":129},[123,149070,147381],{"class":133},[123,149072,31394],{"class":129},[123,149074,147386],{"class":133},[123,149076,149077,149079,149081,149083],{"class":125,"line":45},[123,149078,30748],{"class":129},[123,149080,147235],{"class":133},[123,149082,30403],{"class":129},[123,149084,147240],{"class":133},[123,149086,149087],{"class":125,"line":1189},[123,149088,2409],{"emptyLinePlaceholder":50},[123,149090,149091,149093,149095,149097,149099,149101,149103,149105,149107,149110,149112],{"class":125,"line":1204},[123,149092,147797],{"class":133},[123,149094,179],{"class":129},[123,149096,148720],{"class":133},[123,149098,147994],{"class":238},[123,149100,4452],{"class":133},[123,149102,3034],{"class":129},[123,149104,148206],{"class":133},[123,149106,26054],{"class":129},[123,149108,149109],{"class":133}," data[",[123,149111,69280],{"class":238},[123,149113,77538],{"class":133},[123,149115,149116],{"class":125,"line":1210},[123,149117,2409],{"emptyLinePlaceholder":50},[123,149119,149120,149122,149124],{"class":125,"line":1224},[123,149121,147249],{"class":133},[123,149123,179],{"class":129},[123,149125,147254],{"class":133},[123,149127,149128],{"class":125,"line":1230},[123,149129,147838],{"class":133},[123,149131,149132],{"class":125,"line":1321},[123,149133,2409],{"emptyLinePlaceholder":50},[123,149135,149136,149138,149141,149143],{"class":125,"line":1327},[123,149137,3034],{"class":129},[123,149139,149140],{"class":133}," city, records ",[123,149142,26054],{"class":129},[123,149144,149145],{"class":133}," data.items():\n",[123,149147,149148,149151,149153,149155,149157,149159,149161,149163,149165],{"class":125,"line":1339},[123,149149,149150],{"class":133},"    values ",[123,149152,179],{"class":129},[123,149154,148720],{"class":133},[123,149156,148965],{"class":238},[123,149158,4452],{"class":133},[123,149160,3034],{"class":129},[123,149162,148206],{"class":133},[123,149164,26054],{"class":129},[123,149166,149167],{"class":133}," records]\n",[123,149169,149170,149173,149175,149177,149179],{"class":125,"line":1621},[123,149171,149172],{"class":133},"    line.add_yaxis(city, values, ",[123,149174,147742],{"class":5226},[123,149176,179],{"class":129},[123,149178,31487],{"class":182},[123,149180,140],{"class":133},[123,149182,149183],{"class":125,"line":1626},[123,149184,2409],{"emptyLinePlaceholder":50},[123,149186,149187],{"class":125,"line":1632},[123,149188,147465],{"class":133},[123,149190,149191,149193,149195,149197,149199,149201,149204],{"class":125,"line":1637},[123,149192,147470],{"class":5226},[123,149194,179],{"class":129},[123,149196,147475],{"class":133},[123,149198,51418],{"class":5226},[123,149200,179],{"class":129},[123,149202,149203],{"class":238},"\"多地区趋势图\"",[123,149205,38058],{"class":133},[123,149207,149208,149210,149212,149214,149216,149218,149220],{"class":125,"line":1651},[123,149209,147526],{"class":5226},[123,149211,179],{"class":129},[123,149213,147531],{"class":133},[123,149215,147534],{"class":5226},[123,149217,179],{"class":129},[123,149219,147539],{"class":238},[123,149221,38058],{"class":133},[123,149223,149224],{"class":125,"line":1656},[123,149225,140],{"class":133},[123,149227,149228,149230,149233],{"class":125,"line":1662},[123,149229,147321],{"class":133},[123,149231,149232],{"class":238},"\"trend.html\"",[123,149234,140],{"class":133},[14,149236,149237],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[65,149239,149241],{"id":149240},"_1012-易错点","10.12 易错点",[77,149243,149244,149250,149256,149266,149272],{},[80,149245,149246,149249],{},[120,149247,149248],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[80,149251,149252,149255],{},[120,149253,149254],{},"render()"," 生成的是 HTML，不是图片。",[80,149257,149258,149259,149262,149263,28396],{},"JSON 字符串用 ",[120,149260,149261],{},"json.loads()","，JSON 文件用 ",[120,149264,149265],{},"json.load()",[80,149267,149268,149269,28396],{},"中文 JSON 保存时加 ",[120,149270,149271],{},"ensure_ascii=False",[80,149273,149274],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[65,149276,149278],{"id":149277},"_1013-本章练习","10.13 本章练习",[77,149280,149281,149284,149287,149290,149293],{},[80,149282,149283],{},"安装 pyecharts 并生成第一个折线图。",[80,149285,149286],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[80,149288,149289],{},"绘制两条折线，对比线上和线下销售额。",[80,149291,149292],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[80,149294,149295],{},"对含有空值的销售数据进行清洗后再绘图。",[5136,149297,149298],{},"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":37,"searchDepth":45,"depth":45,"links":149300},[149301,149302,149303,149304,149305,149306,149307,149308,149309,149310,149311,149312,149313],{"id":146917,"depth":45,"text":146918},{"id":146992,"depth":45,"text":146993},{"id":147171,"depth":45,"text":147172},{"id":147222,"depth":45,"text":147223},{"id":147356,"depth":45,"text":147357},{"id":147632,"depth":45,"text":147633},{"id":147758,"depth":45,"text":147759},{"id":147969,"depth":45,"text":147970},{"id":148340,"depth":45,"text":148341},{"id":148552,"depth":45,"text":148553},{"id":148924,"depth":45,"text":148925},{"id":149240,"depth":45,"text":149241},{"id":149277,"depth":45,"text":149278},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146909,"description":47},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149320,"title":149321,"body":149322,"description":47,"extension":48,"meta":151682,"navigation":50,"path":151683,"seo":151684,"stem":151685,"__hash__":151686},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149323,"toc":151659},[149324,149327,149331,149334,149337,149413,149416,149507,149510,149514,149517,149561,149574,149578,149581,149648,149651,149655,149658,149742,149750,149754,149759,149900,149903,149914,149920,149926,150040,150044,150047,150050,150303,150306,150310,150313,150417,150420,150424,150575,150579,150586,150699,150703,150706,150812,150815,150819,150822,150853,150856,150961,150964,150968,150972,150982,151050,151054,151061,151125,151128,151132,151138,151234,151243,151247,151571,151580,151584,151612,151616,151656],[10,149325,149321],{"id":149326},"_11-面向对象基础",[65,149328,149330],{"id":149329},"_111-什么是面向对象","11.1 什么是面向对象",[14,149332,149333],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149335,149336],{},"面向过程：",[114,149338,149340],{"className":30389,"code":149339,"language":30391,"meta":37,"style":37},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[120,149341,149342,149351,149359,149363,149373,149404,149408],{"__ignoreMap":37},[123,149343,149344,149346,149348],{"class":125,"line":126},[123,149345,146533],{"class":133},[123,149347,179],{"class":129},[123,149349,149350],{"class":238}," \"小明\"\n",[123,149352,149353,149355,149357],{"class":125,"line":45},[123,149354,146543],{"class":133},[123,149356,179],{"class":129},[123,149358,146548],{"class":182},[123,149360,149361],{"class":125,"line":1189},[123,149362,2409],{"emptyLinePlaceholder":50},[123,149364,149365,149367,149370],{"class":125,"line":1204},[123,149366,31958],{"class":129},[123,149368,149369],{"class":1972}," introduce",[123,149371,149372],{"class":133},"(name, age):\n",[123,149374,149375,149377,149379,149381,149384,149386,149388,149390,149393,149395,149397,149399,149402],{"class":125,"line":1210},[123,149376,31310],{"class":182},[123,149378,134],{"class":133},[123,149380,186],{"class":129},[123,149382,149383],{"class":238},"\"我叫",[123,149385,1030],{"class":182},[123,149387,79821],{"class":133},[123,149389,1080],{"class":182},[123,149391,149392],{"class":238},"，今年",[123,149394,1030],{"class":182},[123,149396,70232],{"class":133},[123,149398,1080],{"class":182},[123,149400,149401],{"class":238},"岁\"",[123,149403,140],{"class":133},[123,149405,149406],{"class":125,"line":1224},[123,149407,2409],{"emptyLinePlaceholder":50},[123,149409,149410],{"class":125,"line":1230},[123,149411,149412],{"class":133},"introduce(name, age)\n",[14,149414,149415],{},"面向对象：",[114,149417,149419],{"className":30389,"code":149418,"language":30391,"meta":37,"style":37},"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",[120,149420,149421,149429,149437,149466,149470,149474,149484,149493,149502],{"__ignoreMap":37},[123,149422,149423,149425,149427],{"class":125,"line":126},[123,149424,14704],{"class":129},[123,149426,7908],{"class":1972},[123,149428,3748],{"class":133},[123,149430,149431,149433,149435],{"class":125,"line":45},[123,149432,30812],{"class":129},[123,149434,149369],{"class":1972},[123,149436,30818],{"class":133},[123,149438,149439,149441,149443,149445,149447,149450,149452,149454,149456,149458,149460,149462,149464],{"class":125,"line":1189},[123,149440,32462],{"class":182},[123,149442,134],{"class":133},[123,149444,186],{"class":129},[123,149446,149383],{"class":238},[123,149448,149449],{"class":182},"{self",[123,149451,80312],{"class":133},[123,149453,1080],{"class":182},[123,149455,149392],{"class":238},[123,149457,149449],{"class":182},[123,149459,80324],{"class":133},[123,149461,1080],{"class":182},[123,149463,149401],{"class":238},[123,149465,140],{"class":133},[123,149467,149468],{"class":125,"line":1204},[123,149469,2409],{"emptyLinePlaceholder":50},[123,149471,149472],{"class":125,"line":1210},[123,149473,2409],{"emptyLinePlaceholder":50},[123,149475,149476,149479,149481],{"class":125,"line":1224},[123,149477,149478],{"class":133},"student ",[123,149480,179],{"class":129},[123,149482,149483],{"class":133}," Student()\n",[123,149485,149486,149489,149491],{"class":125,"line":1230},[123,149487,149488],{"class":133},"student.name ",[123,149490,179],{"class":129},[123,149492,149350],{"class":238},[123,149494,149495,149498,149500],{"class":125,"line":1321},[123,149496,149497],{"class":133},"student.age ",[123,149499,179],{"class":129},[123,149501,146548],{"class":182},[123,149503,149504],{"class":125,"line":1327},[123,149505,149506],{"class":133},"student.introduce()\n",[14,149508,149509],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[65,149511,149513],{"id":149512},"_112-类和对象","11.2 类和对象",[14,149515,149516],{},"类是模板，对象是根据模板创建出来的具体实例。",[114,149518,149520],{"className":30389,"code":149519,"language":30391,"meta":37,"style":37},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[120,149521,149522,149530,149535,149539,149543,149552],{"__ignoreMap":37},[123,149523,149524,149526,149528],{"class":125,"line":126},[123,149525,14704],{"class":129},[123,149527,7908],{"class":1972},[123,149529,3748],{"class":133},[123,149531,149532],{"class":125,"line":45},[123,149533,149534],{"class":129},"    pass\n",[123,149536,149537],{"class":125,"line":1189},[123,149538,2409],{"emptyLinePlaceholder":50},[123,149540,149541],{"class":125,"line":1204},[123,149542,2409],{"emptyLinePlaceholder":50},[123,149544,149545,149548,149550],{"class":125,"line":1210},[123,149546,149547],{"class":133},"student1 ",[123,149549,179],{"class":129},[123,149551,149483],{"class":133},[123,149553,149554,149557,149559],{"class":125,"line":1224},[123,149555,149556],{"class":133},"student2 ",[123,149558,179],{"class":129},[123,149560,149483],{"class":133},[14,149562,149563,149566,149567,101015,149570,149573],{},[120,149564,149565],{},"Student"," 是类，",[120,149568,149569],{},"student1",[120,149571,149572],{},"student2"," 是对象。",[65,149575,149577],{"id":149576},"_113-属性","11.3 属性",[14,149579,149580],{},"属性是对象保存的数据。",[114,149582,149584],{"className":30389,"code":149583,"language":30391,"meta":37,"style":37},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[120,149585,149586,149594,149598,149602,149606,149614,149622,149630,149634,149641],{"__ignoreMap":37},[123,149587,149588,149590,149592],{"class":125,"line":126},[123,149589,14704],{"class":129},[123,149591,7908],{"class":1972},[123,149593,3748],{"class":133},[123,149595,149596],{"class":125,"line":45},[123,149597,149534],{"class":129},[123,149599,149600],{"class":125,"line":1189},[123,149601,2409],{"emptyLinePlaceholder":50},[123,149603,149604],{"class":125,"line":1204},[123,149605,2409],{"emptyLinePlaceholder":50},[123,149607,149608,149610,149612],{"class":125,"line":1210},[123,149609,149478],{"class":133},[123,149611,179],{"class":129},[123,149613,149483],{"class":133},[123,149615,149616,149618,149620],{"class":125,"line":1224},[123,149617,149488],{"class":133},[123,149619,179],{"class":129},[123,149621,149350],{"class":238},[123,149623,149624,149626,149628],{"class":125,"line":1230},[123,149625,149497],{"class":133},[123,149627,179],{"class":129},[123,149629,146548],{"class":182},[123,149631,149632],{"class":125,"line":1321},[123,149633,2409],{"emptyLinePlaceholder":50},[123,149635,149636,149638],{"class":125,"line":1327},[123,149637,30426],{"class":182},[123,149639,149640],{"class":133},"(student.name)\n",[123,149642,149643,149645],{"class":125,"line":1339},[123,149644,30426],{"class":182},[123,149646,149647],{"class":133},"(student.age)\n",[14,149649,149650],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[65,149652,149654],{"id":149653},"_114-方法","11.4 方法",[14,149656,149657],{},"类中的函数叫方法。",[114,149659,149660],{"className":30389,"code":149418,"language":30391,"meta":37,"style":37},[120,149661,149662,149670,149678,149706,149710,149714,149722,149730,149738],{"__ignoreMap":37},[123,149663,149664,149666,149668],{"class":125,"line":126},[123,149665,14704],{"class":129},[123,149667,7908],{"class":1972},[123,149669,3748],{"class":133},[123,149671,149672,149674,149676],{"class":125,"line":45},[123,149673,30812],{"class":129},[123,149675,149369],{"class":1972},[123,149677,30818],{"class":133},[123,149679,149680,149682,149684,149686,149688,149690,149692,149694,149696,149698,149700,149702,149704],{"class":125,"line":1189},[123,149681,32462],{"class":182},[123,149683,134],{"class":133},[123,149685,186],{"class":129},[123,149687,149383],{"class":238},[123,149689,149449],{"class":182},[123,149691,80312],{"class":133},[123,149693,1080],{"class":182},[123,149695,149392],{"class":238},[123,149697,149449],{"class":182},[123,149699,80324],{"class":133},[123,149701,1080],{"class":182},[123,149703,149401],{"class":238},[123,149705,140],{"class":133},[123,149707,149708],{"class":125,"line":1204},[123,149709,2409],{"emptyLinePlaceholder":50},[123,149711,149712],{"class":125,"line":1210},[123,149713,2409],{"emptyLinePlaceholder":50},[123,149715,149716,149718,149720],{"class":125,"line":1224},[123,149717,149478],{"class":133},[123,149719,179],{"class":129},[123,149721,149483],{"class":133},[123,149723,149724,149726,149728],{"class":125,"line":1230},[123,149725,149488],{"class":133},[123,149727,179],{"class":129},[123,149729,149350],{"class":238},[123,149731,149732,149734,149736],{"class":125,"line":1321},[123,149733,149497],{"class":133},[123,149735,179],{"class":129},[123,149737,146548],{"class":182},[123,149739,149740],{"class":125,"line":1327},[123,149741,149506],{"class":133},[14,149743,149744,149746,149747,149749],{},[120,149745,30834],{}," 表示当前对象。调用方法时不需要手动传入 ",[120,149748,30834],{},"，Python 会自动传。",[65,149751,149753],{"id":149752},"_115-构造方法__init__","11.5 构造方法__init__",[14,149755,149756,149758],{},[120,149757,30840],{}," 在对象创建时自动执行，用于初始化属性。",[114,149760,149762],{"className":30389,"code":149761,"language":30391,"meta":37,"style":37},"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",[120,149763,149764,149772,149781,149793,149805,149816,149820,149828,149866,149870,149874,149896],{"__ignoreMap":37},[123,149765,149766,149768,149770],{"class":125,"line":126},[123,149767,14704],{"class":129},[123,149769,7908],{"class":1972},[123,149771,3748],{"class":133},[123,149773,149774,149776,149778],{"class":125,"line":45},[123,149775,30812],{"class":129},[123,149777,30815],{"class":182},[123,149779,149780],{"class":133},"(self, name, age, score):\n",[123,149782,149783,149785,149788,149790],{"class":125,"line":1189},[123,149784,30856],{"class":182},[123,149786,149787],{"class":133},".name ",[123,149789,179],{"class":129},[123,149791,149792],{"class":133}," name\n",[123,149794,149795,149797,149800,149802],{"class":125,"line":1204},[123,149796,30856],{"class":182},[123,149798,149799],{"class":133},".age ",[123,149801,179],{"class":129},[123,149803,149804],{"class":133}," age\n",[123,149806,149807,149809,149812,149814],{"class":125,"line":1210},[123,149808,30856],{"class":182},[123,149810,149811],{"class":133},".score ",[123,149813,179],{"class":129},[123,149815,1588],{"class":133},[123,149817,149818],{"class":125,"line":1224},[123,149819,2409],{"emptyLinePlaceholder":50},[123,149821,149822,149824,149826],{"class":125,"line":1230},[123,149823,30812],{"class":129},[123,149825,149369],{"class":1972},[123,149827,30818],{"class":133},[123,149829,149830,149832,149834,149836,149838,149840,149842,149844,149846,149848,149850,149852,149855,149857,149860,149862,149864],{"class":125,"line":1321},[123,149831,32462],{"class":182},[123,149833,134],{"class":133},[123,149835,186],{"class":129},[123,149837,149383],{"class":238},[123,149839,149449],{"class":182},[123,149841,80312],{"class":133},[123,149843,1080],{"class":182},[123,149845,149392],{"class":238},[123,149847,149449],{"class":182},[123,149849,80324],{"class":133},[123,149851,1080],{"class":182},[123,149853,149854],{"class":238},"岁，成绩",[123,149856,149449],{"class":182},[123,149858,149859],{"class":133},".score",[123,149861,1080],{"class":182},[123,149863,385],{"class":238},[123,149865,140],{"class":133},[123,149867,149868],{"class":125,"line":1327},[123,149869,2409],{"emptyLinePlaceholder":50},[123,149871,149872],{"class":125,"line":1339},[123,149873,2409],{"emptyLinePlaceholder":50},[123,149875,149876,149878,149880,149883,149886,149888,149890,149892,149894],{"class":125,"line":1621},[123,149877,149478],{"class":133},[123,149879,179],{"class":129},[123,149881,149882],{"class":133}," Student(",[123,149884,149885],{"class":238},"\"小明\"",[123,149887,12445],{"class":133},[123,149889,784],{"class":182},[123,149891,12445],{"class":133},[123,149893,1123],{"class":182},[123,149895,140],{"class":133},[123,149897,149898],{"class":125,"line":1626},[123,149899,149506],{"class":133},[14,149901,149902],{},"构造方法的好处：",[77,149904,149905,149908,149911],{},[80,149906,149907],{},"创建对象时必须提供必要数据。",[80,149909,149910],{},"属性初始化集中，不容易漏。",[80,149912,149913],{},"对象状态更完整。",[65,149915,149917,149918],{"id":149916},"_116-str","11.6 ",[283,149919,1309],{},[14,149921,149922,149923,28396],{},"直接打印对象时，默认输出不直观。可以定义 ",[120,149924,149925],{},"__str__",[114,149927,149929],{"className":30389,"code":149928,"language":30391,"meta":37,"style":37},"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",[120,149930,149931,149939,149948,149958,149968,149972,149981,150009,150013,150017,150033],{"__ignoreMap":37},[123,149932,149933,149935,149937],{"class":125,"line":126},[123,149934,14704],{"class":129},[123,149936,7908],{"class":1972},[123,149938,3748],{"class":133},[123,149940,149941,149943,149945],{"class":125,"line":45},[123,149942,30812],{"class":129},[123,149944,30815],{"class":182},[123,149946,149947],{"class":133},"(self, name, age):\n",[123,149949,149950,149952,149954,149956],{"class":125,"line":1189},[123,149951,30856],{"class":182},[123,149953,149787],{"class":133},[123,149955,179],{"class":129},[123,149957,149792],{"class":133},[123,149959,149960,149962,149964,149966],{"class":125,"line":1204},[123,149961,30856],{"class":182},[123,149963,149799],{"class":133},[123,149965,179],{"class":129},[123,149967,149804],{"class":133},[123,149969,149970],{"class":125,"line":1210},[123,149971,2409],{"emptyLinePlaceholder":50},[123,149973,149974,149976,149979],{"class":125,"line":1224},[123,149975,30812],{"class":129},[123,149977,149978],{"class":182}," __str__",[123,149980,30818],{"class":133},[123,149982,149983,149985,149988,149991,149993,149995,149997,150000,150002,150004,150006],{"class":125,"line":1230},[123,149984,14762],{"class":129},[123,149986,149987],{"class":129}," f",[123,149989,149990],{"class":238},"\"Student(name=",[123,149992,149449],{"class":182},[123,149994,80312],{"class":133},[123,149996,1080],{"class":182},[123,149998,149999],{"class":238},", age=",[123,150001,149449],{"class":182},[123,150003,80324],{"class":133},[123,150005,1080],{"class":182},[123,150007,150008],{"class":238},")\"\n",[123,150010,150011],{"class":125,"line":1321},[123,150012,2409],{"emptyLinePlaceholder":50},[123,150014,150015],{"class":125,"line":1327},[123,150016,2409],{"emptyLinePlaceholder":50},[123,150018,150019,150021,150023,150025,150027,150029,150031],{"class":125,"line":1339},[123,150020,149478],{"class":133},[123,150022,179],{"class":129},[123,150024,149882],{"class":133},[123,150026,149885],{"class":238},[123,150028,12445],{"class":133},[123,150030,784],{"class":182},[123,150032,140],{"class":133},[123,150034,150035,150037],{"class":125,"line":1621},[123,150036,30426],{"class":182},[123,150038,150039],{"class":133},"(student)\n",[65,150041,150043],{"id":150042},"_117-封装","11.7 封装",[14,150045,150046],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150048,150049],{},"Python 中以双下划线开头的属性通常视为私有属性。",[114,150051,150053],{"className":30389,"code":150052,"language":30391,"meta":37,"style":37},"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",[120,150054,150055,150064,150073,150085,150097,150101,150110,150119,150123,150133,150146,150157,150162,150173,150177,150186,150198,150209,150213,150226,150237,150241,150252,150256,150260,150278,150287,150296],{"__ignoreMap":37},[123,150056,150057,150059,150062],{"class":125,"line":126},[123,150058,14704],{"class":129},[123,150060,150061],{"class":1972}," Account",[123,150063,3748],{"class":133},[123,150065,150066,150068,150070],{"class":125,"line":45},[123,150067,30812],{"class":129},[123,150069,30815],{"class":182},[123,150071,150072],{"class":133},"(self, owner, balance):\n",[123,150074,150075,150077,150080,150082],{"class":125,"line":1189},[123,150076,30856],{"class":182},[123,150078,150079],{"class":133},".owner ",[123,150081,179],{"class":129},[123,150083,150084],{"class":133}," owner\n",[123,150086,150087,150089,150092,150094],{"class":125,"line":1204},[123,150088,30856],{"class":182},[123,150090,150091],{"class":133},".__balance ",[123,150093,179],{"class":129},[123,150095,150096],{"class":133}," balance\n",[123,150098,150099],{"class":125,"line":1210},[123,150100,2409],{"emptyLinePlaceholder":50},[123,150102,150103,150105,150108],{"class":125,"line":1224},[123,150104,30812],{"class":129},[123,150106,150107],{"class":1972}," get_balance",[123,150109,30818],{"class":133},[123,150111,150112,150114,150116],{"class":125,"line":1230},[123,150113,14762],{"class":129},[123,150115,38884],{"class":182},[123,150117,150118],{"class":133},".__balance\n",[123,150120,150121],{"class":125,"line":1321},[123,150122,2409],{"emptyLinePlaceholder":50},[123,150124,150125,150127,150130],{"class":125,"line":1327},[123,150126,30812],{"class":129},[123,150128,150129],{"class":1972}," deposit",[123,150131,150132],{"class":133},"(self, money):\n",[123,150134,150135,150137,150140,150142,150144],{"class":125,"line":1339},[123,150136,2506],{"class":129},[123,150138,150139],{"class":133}," money ",[123,150141,1597],{"class":129},[123,150143,4102],{"class":182},[123,150145,3748],{"class":133},[123,150147,150148,150150,150152,150155],{"class":125,"line":1621},[123,150149,34661],{"class":182},[123,150151,134],{"class":133},[123,150153,150154],{"class":238},"\"存款金额必须大于0\"",[123,150156,140],{"class":133},[123,150158,150159],{"class":125,"line":1626},[123,150160,150161],{"class":129},"            return\n",[123,150163,150164,150166,150168,150170],{"class":125,"line":1632},[123,150165,30856],{"class":182},[123,150167,150091],{"class":133},[123,150169,9487],{"class":129},[123,150171,150172],{"class":133}," money\n",[123,150174,150175],{"class":125,"line":1637},[123,150176,2409],{"emptyLinePlaceholder":50},[123,150178,150179,150181,150184],{"class":125,"line":1651},[123,150180,30812],{"class":129},[123,150182,150183],{"class":1972}," withdraw",[123,150185,150132],{"class":133},[123,150187,150188,150190,150192,150194,150196],{"class":125,"line":1656},[123,150189,2506],{"class":129},[123,150191,150139],{"class":133},[123,150193,1597],{"class":129},[123,150195,4102],{"class":182},[123,150197,3748],{"class":133},[123,150199,150200,150202,150204,150207],{"class":125,"line":1662},[123,150201,34661],{"class":182},[123,150203,134],{"class":133},[123,150205,150206],{"class":238},"\"取款金额必须大于0\"",[123,150208,140],{"class":133},[123,150210,150211],{"class":125,"line":1683},[123,150212,150161],{"class":129},[123,150214,150215,150217,150219,150221,150223],{"class":125,"line":1688},[123,150216,2506],{"class":129},[123,150218,150139],{"class":133},[123,150220,1094],{"class":129},[123,150222,38884],{"class":182},[123,150224,150225],{"class":133},".__balance:\n",[123,150227,150228,150230,150232,150235],{"class":125,"line":1702},[123,150229,34661],{"class":182},[123,150231,134],{"class":133},[123,150233,150234],{"class":238},"\"余额不足\"",[123,150236,140],{"class":133},[123,150238,150239],{"class":125,"line":1707},[123,150240,150161],{"class":129},[123,150242,150243,150245,150247,150250],{"class":125,"line":1736},[123,150244,30856],{"class":182},[123,150246,150091],{"class":133},[123,150248,150249],{"class":129},"-=",[123,150251,150172],{"class":133},[123,150253,150254],{"class":125,"line":1741},[123,150255,2409],{"emptyLinePlaceholder":50},[123,150257,150258],{"class":125,"line":1758},[123,150259,2409],{"emptyLinePlaceholder":50},[123,150261,150262,150265,150267,150270,150272,150274,150276],{"class":125,"line":1763},[123,150263,150264],{"class":133},"account ",[123,150266,179],{"class":129},[123,150268,150269],{"class":133}," Account(",[123,150271,149885],{"class":238},[123,150273,12445],{"class":133},[123,150275,6420],{"class":182},[123,150277,140],{"class":133},[123,150279,150280,150283,150285],{"class":125,"line":1768},[123,150281,150282],{"class":133},"account.deposit(",[123,150284,1731],{"class":182},[123,150286,140],{"class":133},[123,150288,150289,150292,150294],{"class":125,"line":1773},[123,150290,150291],{"class":133},"account.withdraw(",[123,150293,445],{"class":182},[123,150295,140],{"class":133},[123,150297,150298,150300],{"class":125,"line":1787},[123,150299,30426],{"class":182},[123,150301,150302],{"class":133},"(account.get_balance())\n",[14,150304,150305],{},"封装的意义是避免外部随意修改内部状态。",[65,150307,150309],{"id":150308},"_118-继承","11.8 继承",[14,150311,150312],{},"继承可以让子类复用父类的属性和方法。",[114,150314,150316],{"className":30389,"code":150315,"language":30391,"meta":37,"style":37},"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",[120,150317,150318,150327,150336,150347,150351,150355,150369,150378,150389,150393,150397,150407,150412],{"__ignoreMap":37},[123,150319,150320,150322,150325],{"class":125,"line":126},[123,150321,14704],{"class":129},[123,150323,150324],{"class":1972}," Animal",[123,150326,3748],{"class":133},[123,150328,150329,150331,150334],{"class":125,"line":45},[123,150330,30812],{"class":129},[123,150332,150333],{"class":1972}," eat",[123,150335,30818],{"class":133},[123,150337,150338,150340,150342,150345],{"class":125,"line":1189},[123,150339,32462],{"class":182},[123,150341,134],{"class":133},[123,150343,150344],{"class":238},"\"吃东西\"",[123,150346,140],{"class":133},[123,150348,150349],{"class":125,"line":1204},[123,150350,2409],{"emptyLinePlaceholder":50},[123,150352,150353],{"class":125,"line":1210},[123,150354,2409],{"emptyLinePlaceholder":50},[123,150356,150357,150359,150362,150364,150367],{"class":125,"line":1224},[123,150358,14704],{"class":129},[123,150360,150361],{"class":1972}," Dog",[123,150363,134],{"class":133},[123,150365,150366],{"class":1972},"Animal",[123,150368,30797],{"class":133},[123,150370,150371,150373,150376],{"class":125,"line":1230},[123,150372,30812],{"class":129},[123,150374,150375],{"class":1972}," bark",[123,150377,30818],{"class":133},[123,150379,150380,150382,150384,150387],{"class":125,"line":1321},[123,150381,32462],{"class":182},[123,150383,134],{"class":133},[123,150385,150386],{"class":238},"\"汪汪\"",[123,150388,140],{"class":133},[123,150390,150391],{"class":125,"line":1327},[123,150392,2409],{"emptyLinePlaceholder":50},[123,150394,150395],{"class":125,"line":1339},[123,150396,2409],{"emptyLinePlaceholder":50},[123,150398,150399,150402,150404],{"class":125,"line":1621},[123,150400,150401],{"class":133},"dog ",[123,150403,179],{"class":129},[123,150405,150406],{"class":133}," Dog()\n",[123,150408,150409],{"class":125,"line":1626},[123,150410,150411],{"class":133},"dog.eat()\n",[123,150413,150414],{"class":125,"line":1632},[123,150415,150416],{"class":133},"dog.bark()\n",[14,150418,150419],{},"子类可以扩展新方法，也可以重写父类方法。",[65,150421,150423],{"id":150422},"_119-方法重写","11.9 方法重写",[114,150425,150427],{"className":30389,"code":150426,"language":30391,"meta":37,"style":37},"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",[120,150428,150429,150437,150446,150457,150461,150465,150477,150485,150495,150499,150503,150516,150524,150535,150539,150543,150551,150561,150565,150570],{"__ignoreMap":37},[123,150430,150431,150433,150435],{"class":125,"line":126},[123,150432,14704],{"class":129},[123,150434,150324],{"class":1972},[123,150436,3748],{"class":133},[123,150438,150439,150441,150444],{"class":125,"line":45},[123,150440,30812],{"class":129},[123,150442,150443],{"class":1972}," speak",[123,150445,30818],{"class":133},[123,150447,150448,150450,150452,150455],{"class":125,"line":1189},[123,150449,32462],{"class":182},[123,150451,134],{"class":133},[123,150453,150454],{"class":238},"\"动物叫\"",[123,150456,140],{"class":133},[123,150458,150459],{"class":125,"line":1204},[123,150460,2409],{"emptyLinePlaceholder":50},[123,150462,150463],{"class":125,"line":1210},[123,150464,2409],{"emptyLinePlaceholder":50},[123,150466,150467,150469,150471,150473,150475],{"class":125,"line":1224},[123,150468,14704],{"class":129},[123,150470,150361],{"class":1972},[123,150472,134],{"class":133},[123,150474,150366],{"class":1972},[123,150476,30797],{"class":133},[123,150478,150479,150481,150483],{"class":125,"line":1230},[123,150480,30812],{"class":129},[123,150482,150443],{"class":1972},[123,150484,30818],{"class":133},[123,150486,150487,150489,150491,150493],{"class":125,"line":1321},[123,150488,32462],{"class":182},[123,150490,134],{"class":133},[123,150492,150386],{"class":238},[123,150494,140],{"class":133},[123,150496,150497],{"class":125,"line":1327},[123,150498,2409],{"emptyLinePlaceholder":50},[123,150500,150501],{"class":125,"line":1339},[123,150502,2409],{"emptyLinePlaceholder":50},[123,150504,150505,150507,150510,150512,150514],{"class":125,"line":1621},[123,150506,14704],{"class":129},[123,150508,150509],{"class":1972}," Cat",[123,150511,134],{"class":133},[123,150513,150366],{"class":1972},[123,150515,30797],{"class":133},[123,150517,150518,150520,150522],{"class":125,"line":1626},[123,150519,30812],{"class":129},[123,150521,150443],{"class":1972},[123,150523,30818],{"class":133},[123,150525,150526,150528,150530,150533],{"class":125,"line":1632},[123,150527,32462],{"class":182},[123,150529,134],{"class":133},[123,150531,150532],{"class":238},"\"喵喵\"",[123,150534,140],{"class":133},[123,150536,150537],{"class":125,"line":1637},[123,150538,2409],{"emptyLinePlaceholder":50},[123,150540,150541],{"class":125,"line":1651},[123,150542,2409],{"emptyLinePlaceholder":50},[123,150544,150545,150547,150549],{"class":125,"line":1656},[123,150546,150401],{"class":133},[123,150548,179],{"class":129},[123,150550,150406],{"class":133},[123,150552,150553,150556,150558],{"class":125,"line":1662},[123,150554,150555],{"class":133},"cat ",[123,150557,179],{"class":129},[123,150559,150560],{"class":133}," Cat()\n",[123,150562,150563],{"class":125,"line":1683},[123,150564,2409],{"emptyLinePlaceholder":50},[123,150566,150567],{"class":125,"line":1688},[123,150568,150569],{"class":133},"dog.speak()\n",[123,150571,150572],{"class":125,"line":1702},[123,150573,150574],{"class":133},"cat.speak()\n",[65,150576,150578],{"id":150577},"_1110-super","11.10 super",[14,150580,150581,150582,150585],{},"子类可以通过 ",[120,150583,150584],{},"super()"," 调用父类方法。",[114,150587,150589],{"className":30389,"code":150588,"language":30391,"meta":37,"style":37},"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",[120,150590,150591,150599,150608,150618,150622,150626,150638,150647,150658,150668,150672,150676,150692],{"__ignoreMap":37},[123,150592,150593,150595,150597],{"class":125,"line":126},[123,150594,14704],{"class":129},[123,150596,15579],{"class":1972},[123,150598,3748],{"class":133},[123,150600,150601,150603,150605],{"class":125,"line":45},[123,150602,30812],{"class":129},[123,150604,30815],{"class":182},[123,150606,150607],{"class":133},"(self, name):\n",[123,150609,150610,150612,150614,150616],{"class":125,"line":1189},[123,150611,30856],{"class":182},[123,150613,149787],{"class":133},[123,150615,179],{"class":129},[123,150617,149792],{"class":133},[123,150619,150620],{"class":125,"line":1204},[123,150621,2409],{"emptyLinePlaceholder":50},[123,150623,150624],{"class":125,"line":1210},[123,150625,2409],{"emptyLinePlaceholder":50},[123,150627,150628,150630,150632,150634,150636],{"class":125,"line":1224},[123,150629,14704],{"class":129},[123,150631,7908],{"class":1972},[123,150633,134],{"class":133},[123,150635,19056],{"class":1972},[123,150637,30797],{"class":133},[123,150639,150640,150642,150644],{"class":125,"line":1230},[123,150641,30812],{"class":129},[123,150643,30815],{"class":182},[123,150645,150646],{"class":133},"(self, name, score):\n",[123,150648,150649,150651,150653,150655],{"class":125,"line":1321},[123,150650,30828],{"class":182},[123,150652,17271],{"class":133},[123,150654,30840],{"class":182},[123,150656,150657],{"class":133},"(name)\n",[123,150659,150660,150662,150664,150666],{"class":125,"line":1327},[123,150661,30856],{"class":182},[123,150663,149811],{"class":133},[123,150665,179],{"class":129},[123,150667,1588],{"class":133},[123,150669,150670],{"class":125,"line":1339},[123,150671,2409],{"emptyLinePlaceholder":50},[123,150673,150674],{"class":125,"line":1621},[123,150675,2409],{"emptyLinePlaceholder":50},[123,150677,150678,150680,150682,150684,150686,150688,150690],{"class":125,"line":1626},[123,150679,149478],{"class":133},[123,150681,179],{"class":129},[123,150683,149882],{"class":133},[123,150685,149885],{"class":238},[123,150687,12445],{"class":133},[123,150689,1123],{"class":182},[123,150691,140],{"class":133},[123,150693,150694,150696],{"class":125,"line":1632},[123,150695,30426],{"class":182},[123,150697,150698],{"class":133},"(student.name, student.score)\n",[65,150700,150702],{"id":150701},"_1111-多态","11.11 多态",[14,150704,150705],{},"多态指不同对象响应同一个方法，表现出不同结果。",[114,150707,150709],{"className":30389,"code":150708,"language":30391,"meta":37,"style":37},"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",[120,150710,150711,150719,150727,150737,150741,150745,150753,150761,150771,150775,150779,150789,150794,150798,150802,150807],{"__ignoreMap":37},[123,150712,150713,150715,150717],{"class":125,"line":126},[123,150714,14704],{"class":129},[123,150716,150361],{"class":1972},[123,150718,3748],{"class":133},[123,150720,150721,150723,150725],{"class":125,"line":45},[123,150722,30812],{"class":129},[123,150724,150443],{"class":1972},[123,150726,30818],{"class":133},[123,150728,150729,150731,150733,150735],{"class":125,"line":1189},[123,150730,32462],{"class":182},[123,150732,134],{"class":133},[123,150734,150386],{"class":238},[123,150736,140],{"class":133},[123,150738,150739],{"class":125,"line":1204},[123,150740,2409],{"emptyLinePlaceholder":50},[123,150742,150743],{"class":125,"line":1210},[123,150744,2409],{"emptyLinePlaceholder":50},[123,150746,150747,150749,150751],{"class":125,"line":1224},[123,150748,14704],{"class":129},[123,150750,150509],{"class":1972},[123,150752,3748],{"class":133},[123,150754,150755,150757,150759],{"class":125,"line":1230},[123,150756,30812],{"class":129},[123,150758,150443],{"class":1972},[123,150760,30818],{"class":133},[123,150762,150763,150765,150767,150769],{"class":125,"line":1321},[123,150764,32462],{"class":182},[123,150766,134],{"class":133},[123,150768,150532],{"class":238},[123,150770,140],{"class":133},[123,150772,150773],{"class":125,"line":1327},[123,150774,2409],{"emptyLinePlaceholder":50},[123,150776,150777],{"class":125,"line":1339},[123,150778,2409],{"emptyLinePlaceholder":50},[123,150780,150781,150783,150786],{"class":125,"line":1621},[123,150782,31958],{"class":129},[123,150784,150785],{"class":1972}," make_sound",[123,150787,150788],{"class":133},"(animal):\n",[123,150790,150791],{"class":125,"line":1626},[123,150792,150793],{"class":133},"    animal.speak()\n",[123,150795,150796],{"class":125,"line":1632},[123,150797,2409],{"emptyLinePlaceholder":50},[123,150799,150800],{"class":125,"line":1637},[123,150801,2409],{"emptyLinePlaceholder":50},[123,150803,150804],{"class":125,"line":1651},[123,150805,150806],{"class":133},"make_sound(Dog())\n",[123,150808,150809],{"class":125,"line":1656},[123,150810,150811],{"class":133},"make_sound(Cat())\n",[14,150813,150814],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[65,150816,150818],{"id":150817},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,150820,150821],{},"实例属性属于对象：",[114,150823,150825],{"className":30389,"code":150824,"language":30391,"meta":37,"style":37},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[120,150826,150827,150835,150843],{"__ignoreMap":37},[123,150828,150829,150831,150833],{"class":125,"line":126},[123,150830,14704],{"class":129},[123,150832,7908],{"class":1972},[123,150834,3748],{"class":133},[123,150836,150837,150839,150841],{"class":125,"line":45},[123,150838,30812],{"class":129},[123,150840,30815],{"class":182},[123,150842,150607],{"class":133},[123,150844,150845,150847,150849,150851],{"class":125,"line":1189},[123,150846,30856],{"class":182},[123,150848,149787],{"class":133},[123,150850,179],{"class":129},[123,150852,149792],{"class":133},[14,150854,150855],{},"类属性属于类，所有对象共享：",[114,150857,150859],{"className":30389,"code":150858,"language":30391,"meta":37,"style":37},"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",[120,150860,150861,150869,150879,150883,150891,150901,150905,150909,150922,150936,150940,150947,150954],{"__ignoreMap":37},[123,150862,150863,150865,150867],{"class":125,"line":126},[123,150864,14704],{"class":129},[123,150866,7908],{"class":1972},[123,150868,3748],{"class":133},[123,150870,150871,150874,150876],{"class":125,"line":45},[123,150872,150873],{"class":133},"    school ",[123,150875,179],{"class":129},[123,150877,150878],{"class":238}," \"黑马学校\"\n",[123,150880,150881],{"class":125,"line":1189},[123,150882,2409],{"emptyLinePlaceholder":50},[123,150884,150885,150887,150889],{"class":125,"line":1204},[123,150886,30812],{"class":129},[123,150888,30815],{"class":182},[123,150890,150607],{"class":133},[123,150892,150893,150895,150897,150899],{"class":125,"line":1210},[123,150894,30856],{"class":182},[123,150896,149787],{"class":133},[123,150898,179],{"class":129},[123,150900,149792],{"class":133},[123,150902,150903],{"class":125,"line":1224},[123,150904,2409],{"emptyLinePlaceholder":50},[123,150906,150907],{"class":125,"line":1230},[123,150908,2409],{"emptyLinePlaceholder":50},[123,150910,150911,150914,150916,150918,150920],{"class":125,"line":1321},[123,150912,150913],{"class":133},"s1 ",[123,150915,179],{"class":129},[123,150917,149882],{"class":133},[123,150919,149885],{"class":238},[123,150921,140],{"class":133},[123,150923,150924,150927,150929,150931,150934],{"class":125,"line":1327},[123,150925,150926],{"class":133},"s2 ",[123,150928,179],{"class":129},[123,150930,149882],{"class":133},[123,150932,150933],{"class":238},"\"小红\"",[123,150935,140],{"class":133},[123,150937,150938],{"class":125,"line":1339},[123,150939,2409],{"emptyLinePlaceholder":50},[123,150941,150942,150944],{"class":125,"line":1621},[123,150943,30426],{"class":182},[123,150945,150946],{"class":133},"(s1.school)\n",[123,150948,150949,150951],{"class":125,"line":1626},[123,150950,30426],{"class":182},[123,150952,150953],{"class":133},"(s2.school)\n",[123,150955,150956,150958],{"class":125,"line":1632},[123,150957,30426],{"class":182},[123,150959,150960],{"class":133},"(Student.school)\n",[14,150962,150963],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[65,150965,150967],{"id":150966},"_1113-类方法和静态方法","11.13 类方法和静态方法",[94,150969,150971],{"id":150970},"_11131-类方法","11.13.1 类方法",[14,150973,150974,150975,150978,150979,28396],{},"类方法使用 ",[120,150976,150977],{},"@classmethod","，第一个参数通常是 ",[120,150980,150981],{},"cls",[114,150983,150985],{"className":30389,"code":150984,"language":30391,"meta":37,"style":37},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[120,150986,150987,150995,151003,151007,151015,151025,151035,151039,151043],{"__ignoreMap":37},[123,150988,150989,150991,150993],{"class":125,"line":126},[123,150990,14704],{"class":129},[123,150992,7908],{"class":1972},[123,150994,3748],{"class":133},[123,150996,150997,150999,151001],{"class":125,"line":45},[123,150998,150873],{"class":133},[123,151000,179],{"class":129},[123,151002,150878],{"class":238},[123,151004,151005],{"class":125,"line":1189},[123,151006,2409],{"emptyLinePlaceholder":50},[123,151008,151009,151012],{"class":125,"line":1204},[123,151010,151011],{"class":1972},"    @",[123,151013,151014],{"class":182},"classmethod\n",[123,151016,151017,151019,151022],{"class":125,"line":1210},[123,151018,30812],{"class":129},[123,151020,151021],{"class":1972}," get_school",[123,151023,151024],{"class":133},"(cls):\n",[123,151026,151027,151029,151032],{"class":125,"line":1224},[123,151028,14762],{"class":129},[123,151030,151031],{"class":182}," cls",[123,151033,151034],{"class":133},".school\n",[123,151036,151037],{"class":125,"line":1230},[123,151038,2409],{"emptyLinePlaceholder":50},[123,151040,151041],{"class":125,"line":1321},[123,151042,2409],{"emptyLinePlaceholder":50},[123,151044,151045,151047],{"class":125,"line":1327},[123,151046,30426],{"class":182},[123,151048,151049],{"class":133},"(Student.get_school())\n",[94,151051,151053],{"id":151052},"_11132-静态方法","11.13.2 静态方法",[14,151055,151056,151057,151060],{},"静态方法使用 ",[120,151058,151059],{},"@staticmethod","，不需要访问实例和类。",[114,151062,151064],{"className":30389,"code":151063,"language":30391,"meta":37,"style":37},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[120,151065,151066,151075,151082,151091,151102,151106,151110],{"__ignoreMap":37},[123,151067,151068,151070,151073],{"class":125,"line":126},[123,151069,14704],{"class":129},[123,151071,151072],{"class":1972}," MathUtils",[123,151074,3748],{"class":133},[123,151076,151077,151079],{"class":125,"line":45},[123,151078,151011],{"class":1972},[123,151080,151081],{"class":182},"staticmethod\n",[123,151083,151084,151086,151088],{"class":125,"line":1189},[123,151085,30812],{"class":129},[123,151087,5219],{"class":1972},[123,151089,151090],{"class":133},"(a, b):\n",[123,151092,151093,151095,151097,151099],{"class":125,"line":1204},[123,151094,14762],{"class":129},[123,151096,10879],{"class":133},[123,151098,615],{"class":129},[123,151100,151101],{"class":133}," b\n",[123,151103,151104],{"class":125,"line":1210},[123,151105,2409],{"emptyLinePlaceholder":50},[123,151107,151108],{"class":125,"line":1224},[123,151109,2409],{"emptyLinePlaceholder":50},[123,151111,151112,151114,151117,151119,151121,151123],{"class":125,"line":1230},[123,151113,30426],{"class":182},[123,151115,151116],{"class":133},"(MathUtils.add(",[123,151118,351],{"class":182},[123,151120,12445],{"class":133},[123,151122,211],{"class":182},[123,151124,30508],{"class":133},[14,151126,151127],{},"静态方法本质上是放在类命名空间里的普通函数。",[65,151129,151131],{"id":151130},"_1114-dataclass","11.14 dataclass",[14,151133,151134,151137],{},[120,151135,151136],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[114,151139,151141],{"className":30389,"code":151140,"language":30391,"meta":37,"style":37},"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",[120,151142,151143,151155,151159,151163,151168,151176,151184,151192,151200,151204,151208,151228],{"__ignoreMap":37},[123,151144,151145,151147,151150,151152],{"class":125,"line":126},[123,151146,30748],{"class":129},[123,151148,151149],{"class":133}," dataclasses ",[123,151151,30403],{"class":129},[123,151153,151154],{"class":133}," dataclass\n",[123,151156,151157],{"class":125,"line":45},[123,151158,2409],{"emptyLinePlaceholder":50},[123,151160,151161],{"class":125,"line":1189},[123,151162,2409],{"emptyLinePlaceholder":50},[123,151164,151165],{"class":125,"line":1204},[123,151166,151167],{"class":1972},"@dataclass\n",[123,151169,151170,151172,151174],{"class":125,"line":1210},[123,151171,14704],{"class":129},[123,151173,7908],{"class":1972},[123,151175,3748],{"class":133},[123,151177,151178,151181],{"class":125,"line":1224},[123,151179,151180],{"class":133},"    name: ",[123,151182,151183],{"class":182},"str\n",[123,151185,151186,151189],{"class":125,"line":1230},[123,151187,151188],{"class":133},"    age: ",[123,151190,151191],{"class":182},"int\n",[123,151193,151194,151197],{"class":125,"line":1321},[123,151195,151196],{"class":133},"    score: ",[123,151198,151199],{"class":182},"float\n",[123,151201,151202],{"class":125,"line":1327},[123,151203,2409],{"emptyLinePlaceholder":50},[123,151205,151206],{"class":125,"line":1339},[123,151207,2409],{"emptyLinePlaceholder":50},[123,151209,151210,151212,151214,151216,151218,151220,151222,151224,151226],{"class":125,"line":1621},[123,151211,149478],{"class":133},[123,151213,179],{"class":129},[123,151215,149882],{"class":133},[123,151217,149885],{"class":238},[123,151219,12445],{"class":133},[123,151221,784],{"class":182},[123,151223,12445],{"class":133},[123,151225,1123],{"class":182},[123,151227,140],{"class":133},[123,151229,151230,151232],{"class":125,"line":1626},[123,151231,30426],{"class":182},[123,151233,150039],{"class":133},[14,151235,151236,151237,346,151239,151242],{},"它会自动生成 ",[120,151238,30840],{},[120,151240,151241],{},"__repr__"," 等方法。适合数据模型类。",[65,151244,151246],{"id":151245},"_1115-小案例学生类","11.15 小案例：学生类",[114,151248,151250],{"className":30389,"code":151249,"language":30391,"meta":37,"style":37},"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",[120,151251,151252,151260,151269,151281,151291,151301,151311,151315,151324,151337,151341,151350,151356,151368,151380,151392,151404,151408,151412,151418,151428,151437,151447,151455,151463,151472,151476,151480,151488,151524,151528,151532,151557,151564],{"__ignoreMap":37},[123,151253,151254,151256,151258],{"class":125,"line":126},[123,151255,14704],{"class":129},[123,151257,7908],{"class":1972},[123,151259,3748],{"class":133},[123,151261,151262,151264,151266],{"class":125,"line":45},[123,151263,30812],{"class":129},[123,151265,30815],{"class":182},[123,151267,151268],{"class":133},"(self, student_id, name, age, score):\n",[123,151270,151271,151273,151276,151278],{"class":125,"line":1189},[123,151272,30856],{"class":182},[123,151274,151275],{"class":133},".student_id ",[123,151277,179],{"class":129},[123,151279,151280],{"class":133}," student_id\n",[123,151282,151283,151285,151287,151289],{"class":125,"line":1204},[123,151284,30856],{"class":182},[123,151286,149787],{"class":133},[123,151288,179],{"class":129},[123,151290,149792],{"class":133},[123,151292,151293,151295,151297,151299],{"class":125,"line":1210},[123,151294,30856],{"class":182},[123,151296,149799],{"class":133},[123,151298,179],{"class":129},[123,151300,149804],{"class":133},[123,151302,151303,151305,151307,151309],{"class":125,"line":1224},[123,151304,30856],{"class":182},[123,151306,149811],{"class":133},[123,151308,179],{"class":129},[123,151310,1588],{"class":133},[123,151312,151313],{"class":125,"line":1230},[123,151314,2409],{"emptyLinePlaceholder":50},[123,151316,151317,151319,151322],{"class":125,"line":1321},[123,151318,30812],{"class":129},[123,151320,151321],{"class":1972}," is_passed",[123,151323,30818],{"class":133},[123,151325,151326,151328,151330,151332,151334],{"class":125,"line":1327},[123,151327,14762],{"class":129},[123,151329,38884],{"class":182},[123,151331,149811],{"class":133},[123,151333,1719],{"class":129},[123,151335,151336],{"class":182}," 60\n",[123,151338,151339],{"class":125,"line":1339},[123,151340,2409],{"emptyLinePlaceholder":50},[123,151342,151343,151345,151348],{"class":125,"line":1621},[123,151344,30812],{"class":129},[123,151346,151347],{"class":1972}," to_dict",[123,151349,30818],{"class":133},[123,151351,151352,151354],{"class":125,"line":1626},[123,151353,14762],{"class":129},[123,151355,15582],{"class":133},[123,151357,151358,151361,151363,151365],{"class":125,"line":1632},[123,151359,151360],{"class":238},"            \"student_id\"",[123,151362,51448],{"class":133},[123,151364,30834],{"class":182},[123,151366,151367],{"class":133},".student_id,\n",[123,151369,151370,151373,151375,151377],{"class":125,"line":1637},[123,151371,151372],{"class":238},"            \"name\"",[123,151374,51448],{"class":133},[123,151376,30834],{"class":182},[123,151378,151379],{"class":133},".name,\n",[123,151381,151382,151385,151387,151389],{"class":125,"line":1651},[123,151383,151384],{"class":238},"            \"age\"",[123,151386,51448],{"class":133},[123,151388,30834],{"class":182},[123,151390,151391],{"class":133},".age,\n",[123,151393,151394,151397,151399,151401],{"class":125,"line":1656},[123,151395,151396],{"class":238},"            \"score\"",[123,151398,51448],{"class":133},[123,151400,30834],{"class":182},[123,151402,151403],{"class":133},".score,\n",[123,151405,151406],{"class":125,"line":1662},[123,151407,2538],{"class":133},[123,151409,151410],{"class":125,"line":1683},[123,151411,2409],{"emptyLinePlaceholder":50},[123,151413,151414,151416],{"class":125,"line":1688},[123,151415,151011],{"class":1972},[123,151417,151014],{"class":182},[123,151419,151420,151422,151425],{"class":125,"line":1702},[123,151421,30812],{"class":129},[123,151423,151424],{"class":1972}," from_dict",[123,151426,151427],{"class":133},"(cls, data):\n",[123,151429,151430,151432,151434],{"class":125,"line":1707},[123,151431,14762],{"class":129},[123,151433,151031],{"class":182},[123,151435,151436],{"class":133},"(\n",[123,151438,151439,151442,151445],{"class":125,"line":1736},[123,151440,151441],{"class":133},"            data[",[123,151443,151444],{"class":238},"\"student_id\"",[123,151446,87847],{"class":133},[123,151448,151449,151451,151453],{"class":125,"line":1741},[123,151450,151441],{"class":133},[123,151452,62690],{"class":238},[123,151454,87847],{"class":133},[123,151456,151457,151459,151461],{"class":125,"line":1758},[123,151458,151441],{"class":133},[123,151460,69135],{"class":238},[123,151462,87847],{"class":133},[123,151464,151465,151467,151470],{"class":125,"line":1763},[123,151466,151441],{"class":133},[123,151468,151469],{"class":238},"\"score\"",[123,151471,87847],{"class":133},[123,151473,151474],{"class":125,"line":1768},[123,151475,38137],{"class":133},[123,151477,151478],{"class":125,"line":1773},[123,151479,2409],{"emptyLinePlaceholder":50},[123,151481,151482,151484,151486],{"class":125,"line":1787},[123,151483,30812],{"class":129},[123,151485,149978],{"class":182},[123,151487,30818],{"class":133},[123,151489,151490,151492,151494,151496,151498,151501,151503,151506,151508,151510,151512,151514,151516,151518,151520,151522],{"class":125,"line":1792},[123,151491,14762],{"class":129},[123,151493,149987],{"class":129},[123,151495,385],{"class":238},[123,151497,149449],{"class":182},[123,151499,151500],{"class":133},".student_id",[123,151502,1080],{"class":182},[123,151504,151505],{"class":182}," {self",[123,151507,80312],{"class":133},[123,151509,1080],{"class":182},[123,151511,151505],{"class":182},[123,151513,80324],{"class":133},[123,151515,1080],{"class":182},[123,151517,151505],{"class":182},[123,151519,149859],{"class":133},[123,151521,1080],{"class":182},[123,151523,25144],{"class":238},[123,151525,151526],{"class":125,"line":2586},[123,151527,2409],{"emptyLinePlaceholder":50},[123,151529,151530],{"class":125,"line":2600},[123,151531,2409],{"emptyLinePlaceholder":50},[123,151533,151534,151536,151538,151540,151543,151545,151547,151549,151551,151553,151555],{"class":125,"line":2608},[123,151535,149478],{"class":133},[123,151537,179],{"class":129},[123,151539,149882],{"class":133},[123,151541,151542],{"class":238},"\"001\"",[123,151544,12445],{"class":133},[123,151546,149885],{"class":238},[123,151548,12445],{"class":133},[123,151550,784],{"class":182},[123,151552,12445],{"class":133},[123,151554,1123],{"class":182},[123,151556,140],{"class":133},[123,151558,151559,151561],{"class":125,"line":2613},[123,151560,30426],{"class":182},[123,151562,151563],{"class":133},"(student.is_passed())\n",[123,151565,151566,151568],{"class":125,"line":2619},[123,151567,30426],{"class":182},[123,151569,151570],{"class":133},"(student.to_dict())\n",[14,151572,151573,101015,151576,151579],{},[120,151574,151575],{},"to_dict()",[120,151577,151578],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[65,151581,151583],{"id":151582},"_1116-易错点","11.16 易错点",[77,151585,151586,151592,151598,151603,151606,151609],{},[80,151587,151588,151589,28396],{},"类名推荐使用大驼峰，如 ",[120,151590,151591],{},"StudentManager",[80,151593,151594,151595,151597],{},"方法第一个参数必须写 ",[120,151596,30834],{},"，调用时不用传。",[80,151599,151600,151602],{},[120,151601,30840],{}," 不是普通方法，它在创建对象时自动执行。",[80,151604,151605],{},"私有属性不是绝对安全，只是约定和名称改写。",[80,151607,151608],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[80,151610,151611],{},"类中方法太多时，说明职责可能过重。",[65,151613,151615],{"id":151614},"_1117-本章练习","11.17 本章练习",[77,151617,151618,151624,151630,151635,151648],{},[80,151619,151620,151621,151623],{},"定义 ",[120,151622,149565],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[80,151625,151620,151626,151629],{},[120,151627,151628],{},"Account"," 类，实现存款、取款、查询余额。",[80,151631,151620,151632,151634],{},[120,151633,17236],{}," 类，计算圆的周长和面积。",[80,151636,151620,151637,346,151640,151643,151644,151647],{},[120,151638,151639],{},"Dog",[120,151641,151642],{},"Cat"," 类，并用同一个函数调用它们的 ",[120,151645,151646],{},"speak()"," 方法。",[80,151649,104363,151650,151652,151653,28396],{},[120,151651,151136],{}," 定义一个商品类 ",[120,151654,151655],{},"Product",[5136,151657,151658],{},"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":37,"searchDepth":45,"depth":45,"links":151660},[151661,151662,151663,151664,151665,151666,151668,151669,151670,151671,151672,151673,151674,151678,151679,151680,151681],{"id":149329,"depth":45,"text":149330},{"id":149512,"depth":45,"text":149513},{"id":149576,"depth":45,"text":149577},{"id":149653,"depth":45,"text":149654},{"id":149752,"depth":45,"text":149753},{"id":149916,"depth":45,"text":151667},"11.6 str",{"id":150042,"depth":45,"text":150043},{"id":150308,"depth":45,"text":150309},{"id":150422,"depth":45,"text":150423},{"id":150577,"depth":45,"text":150578},{"id":150701,"depth":45,"text":150702},{"id":150817,"depth":45,"text":150818},{"id":150966,"depth":45,"text":150967,"children":151675},[151676,151677],{"id":150970,"depth":1189,"text":150971},{"id":151052,"depth":1189,"text":151053},{"id":151130,"depth":45,"text":151131},{"id":151245,"depth":45,"text":151246},{"id":151582,"depth":45,"text":151583},{"id":151614,"depth":45,"text":151615},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149321,"description":47},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151688,"title":151689,"body":151690,"description":47,"extension":48,"meta":155003,"navigation":50,"path":155004,"seo":155005,"stem":155006,"__hash__":155007},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151691,"toc":154979},[151692,151695,151699,151702,151705,151734,151737,151745,151749,151753,151756,151779,151782,151788,151792,153238,153241,153262,153266,153269,153281,153284,153468,153471,153597,153600,153604,153608,153744,153748,153834,153838,153920,153924,153961,153965,154154,154158,154161,154391,154395,154398,154579,154582,154586,154589,154595,154598,154624,154628,154631,154645,154648,154673,154676,154690,154693,154710,154713,154730,154733,154750,154754,154780,154784,154807,154811,154814,154816,154822,154824,154845,154848,154854,154860,154864,154867,154943,154946,154950,154976],[10,151693,151689],{"id":151694},"_12-综合案例与复习路线",[65,151696,151698],{"id":151697},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,151700,151701],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,151703,151704],{},"一个合格的入门综合项目最好覆盖：",[77,151706,151707,151710,151713,151716,151719,151722,151725,151728,151731],{},[80,151708,151709],{},"输入输出。",[80,151711,151712],{},"判断和循环。",[80,151714,151715],{},"函数拆分。",[80,151717,151718],{},"列表、字典等容器。",[80,151720,151721],{},"文件持久化。",[80,151723,151724],{},"异常处理。",[80,151726,151727],{},"模块拆分。",[80,151729,151730],{},"可选：面向对象。",[80,151732,151733],{},"可选：数据可视化。",[14,151735,151736],{},"本章整理两个方向：",[77,151738,151739,151742],{},[80,151740,151741],{},"学生管理系统。",[80,151743,151744],{},"销售数据统计和可视化。",[65,151746,151748],{"id":151747},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[94,151750,151752],{"id":151751},"_1221-需求","12.2.1 需求",[14,151754,151755],{},"实现一个命令行学生管理系统：",[77,151757,151758,151761,151764,151767,151770,151773,151776],{},[80,151759,151760],{},"添加学生。",[80,151762,151763],{},"删除学生。",[80,151765,151766],{},"修改学生。",[80,151768,151769],{},"查询学生。",[80,151771,151772],{},"显示所有学生。",[80,151774,151775],{},"保存到 JSON 文件。",[80,151777,151778],{},"程序启动时自动读取 JSON 文件。",[14,151780,151781],{},"学生字段：",[114,151783,151786],{"className":151784,"code":151785,"language":5197,"meta":37},[5195],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[120,151787,151785],{"__ignoreMap":37},[65,151789,151791],{"id":151790},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[114,151793,151795],{"className":30389,"code":151794,"language":30391,"meta":37,"style":37},"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",[120,151796,151797,151803,151813,151817,151831,151835,151839,151848,151860,151866,151870,151876,151907,151917,151924,151935,151941,151945,151949,151959,151990,152016,152020,152024,152033,152044,152055,152066,152077,152088,152099,152110,152114,152118,152128,152140,152156,152163,152170,152174,152178,152188,152196,152203,152216,152226,152237,152241,152245,152254,152262,152268,152280,152288,152299,152303,152307,152316,152332,152336,152343,152354,152359,152363,152379,152394,152409,152413,152418,152426,152434,152442,152450,152454,152459,152470,152474,152478,152487,152502,152512,152516,152528,152539,152543,152547,152552,152556,152567,152571,152575,152584,152599,152607,152611,152623,152633,152637,152641,152656,152669,152682,152686,152699,152711,152723,152727,152731,152742,152746,152750,152759,152774,152782,152786,152798,152808,152812,152816,152821,152825,152829,152839,152845,152867,152886,152905,152924,152929,152933,152937,152946,152954,152965,152969,152973,152999,153009,153014,153018,153022,153030,153040,153044,153052,153057,153073,153077,153091,153096,153110,153115,153128,153133,153146,153151,153164,153169,153182,153193,153197,153203,153214,153218,153222,153234],{"__ignoreMap":37},[123,151798,151799,151801],{"class":125,"line":126},[123,151800,30403],{"class":129},[123,151802,147088],{"class":133},[123,151804,151805,151807,151809,151811],{"class":125,"line":45},[123,151806,30748],{"class":129},[123,151808,108308],{"class":133},[123,151810,30403],{"class":129},[123,151812,108313],{"class":133},[123,151814,151815],{"class":125,"line":1189},[123,151816,2409],{"emptyLinePlaceholder":50},[123,151818,151819,151822,151824,151826,151829],{"class":125,"line":1204},[123,151820,151821],{"class":182},"DATA_FILE",[123,151823,13574],{"class":129},[123,151825,108542],{"class":133},[123,151827,151828],{"class":238},"\"students.json\"",[123,151830,140],{"class":133},[123,151832,151833],{"class":125,"line":1210},[123,151834,2409],{"emptyLinePlaceholder":50},[123,151836,151837],{"class":125,"line":1224},[123,151838,2409],{"emptyLinePlaceholder":50},[123,151840,151841,151843,151846],{"class":125,"line":1230},[123,151842,31958],{"class":129},[123,151844,151845],{"class":1972}," load_students",[123,151847,31964],{"class":133},[123,151849,151850,151852,151854,151857],{"class":125,"line":1321},[123,151851,3110],{"class":129},[123,151853,38941],{"class":129},[123,151855,151856],{"class":182}," DATA_FILE",[123,151858,151859],{"class":133},".exists():\n",[123,151861,151862,151864],{"class":125,"line":1327},[123,151863,14762],{"class":129},[123,151865,51849],{"class":133},[123,151867,151868],{"class":125,"line":1339},[123,151869,2409],{"emptyLinePlaceholder":50},[123,151871,151872,151874],{"class":125,"line":1621},[123,151873,125781],{"class":129},[123,151875,3748],{"class":133},[123,151877,151878,151881,151883,151885,151887,151889,151891,151893,151895,151897,151899,151901,151903,151905],{"class":125,"line":1626},[123,151879,151880],{"class":129},"        with",[123,151882,146788],{"class":182},[123,151884,134],{"class":133},[123,151886,151821],{"class":182},[123,151888,12445],{"class":133},[123,151890,146798],{"class":238},[123,151892,12445],{"class":133},[123,151894,146803],{"class":5226},[123,151896,179],{"class":129},[123,151898,146808],{"class":238},[123,151900,13724],{"class":133},[123,151902,31394],{"class":129},[123,151904,148150],{"class":5226},[123,151906,3748],{"class":133},[123,151908,151909,151911,151913,151915],{"class":125,"line":1632},[123,151910,15742],{"class":129},[123,151912,148161],{"class":133},[123,151914,45365],{"class":5226},[123,151916,140],{"class":133},[123,151918,151919,151921],{"class":125,"line":1637},[123,151920,125809],{"class":129},[123,151922,151923],{"class":133}," json.JSONDecodeError:\n",[123,151925,151926,151928,151930,151933],{"class":125,"line":1651},[123,151927,32462],{"class":182},[123,151929,134],{"class":133},[123,151931,151932],{"class":238},"\"数据文件格式错误，已使用空数据启动\"",[123,151934,140],{"class":133},[123,151936,151937,151939],{"class":125,"line":1656},[123,151938,14762],{"class":129},[123,151940,51849],{"class":133},[123,151942,151943],{"class":125,"line":1662},[123,151944,2409],{"emptyLinePlaceholder":50},[123,151946,151947],{"class":125,"line":1683},[123,151948,2409],{"emptyLinePlaceholder":50},[123,151950,151951,151953,151956],{"class":125,"line":1688},[123,151952,31958],{"class":129},[123,151954,151955],{"class":1972}," save_students",[123,151957,151958],{"class":133},"(students):\n",[123,151960,151961,151963,151965,151967,151969,151971,151974,151976,151978,151980,151982,151984,151986,151988],{"class":125,"line":1702},[123,151962,34189],{"class":129},[123,151964,146788],{"class":182},[123,151966,134],{"class":133},[123,151968,151821],{"class":182},[123,151970,12445],{"class":133},[123,151972,151973],{"class":238},"\"w\"",[123,151975,12445],{"class":133},[123,151977,146803],{"class":5226},[123,151979,179],{"class":129},[123,151981,146808],{"class":238},[123,151983,13724],{"class":133},[123,151985,31394],{"class":129},[123,151987,148150],{"class":5226},[123,151989,3748],{"class":133},[123,151991,151992,151995,151997,151999,152001,152003,152005,152007,152010,152012,152014],{"class":125,"line":1707},[123,151993,151994],{"class":133},"        json.dump(students, ",[123,151996,45365],{"class":5226},[123,151998,12445],{"class":133},[123,152000,147134],{"class":5226},[123,152002,179],{"class":129},[123,152004,33998],{"class":182},[123,152006,12445],{"class":133},[123,152008,152009],{"class":5226},"indent",[123,152011,179],{"class":129},[123,152013,211],{"class":182},[123,152015,140],{"class":133},[123,152017,152018],{"class":125,"line":1736},[123,152019,2409],{"emptyLinePlaceholder":50},[123,152021,152022],{"class":125,"line":1741},[123,152023,2409],{"emptyLinePlaceholder":50},[123,152025,152026,152028,152031],{"class":125,"line":1758},[123,152027,31958],{"class":129},[123,152029,152030],{"class":1972}," show_menu",[123,152032,31964],{"class":133},[123,152034,152035,152037,152039,152042],{"class":125,"line":1763},[123,152036,31310],{"class":182},[123,152038,134],{"class":133},[123,152040,152041],{"class":238},"\"====== 学生管理系统 ======\"",[123,152043,140],{"class":133},[123,152045,152046,152048,152050,152053],{"class":125,"line":1768},[123,152047,31310],{"class":182},[123,152049,134],{"class":133},[123,152051,152052],{"class":238},"\"1. 添加学生\"",[123,152054,140],{"class":133},[123,152056,152057,152059,152061,152064],{"class":125,"line":1773},[123,152058,31310],{"class":182},[123,152060,134],{"class":133},[123,152062,152063],{"class":238},"\"2. 删除学生\"",[123,152065,140],{"class":133},[123,152067,152068,152070,152072,152075],{"class":125,"line":1787},[123,152069,31310],{"class":182},[123,152071,134],{"class":133},[123,152073,152074],{"class":238},"\"3. 修改学生\"",[123,152076,140],{"class":133},[123,152078,152079,152081,152083,152086],{"class":125,"line":1792},[123,152080,31310],{"class":182},[123,152082,134],{"class":133},[123,152084,152085],{"class":238},"\"4. 查询学生\"",[123,152087,140],{"class":133},[123,152089,152090,152092,152094,152097],{"class":125,"line":2586},[123,152091,31310],{"class":182},[123,152093,134],{"class":133},[123,152095,152096],{"class":238},"\"5. 显示所有学生\"",[123,152098,140],{"class":133},[123,152100,152101,152103,152105,152108],{"class":125,"line":2600},[123,152102,31310],{"class":182},[123,152104,134],{"class":133},[123,152106,152107],{"class":238},"\"0. 退出系统\"",[123,152109,140],{"class":133},[123,152111,152112],{"class":125,"line":2608},[123,152113,2409],{"emptyLinePlaceholder":50},[123,152115,152116],{"class":125,"line":2613},[123,152117,2409],{"emptyLinePlaceholder":50},[123,152119,152120,152122,152125],{"class":125,"line":2619},[123,152121,31958],{"class":129},[123,152123,152124],{"class":1972}," find_student",[123,152126,152127],{"class":133},"(students, student_id):\n",[123,152129,152130,152132,152135,152137],{"class":125,"line":2625},[123,152131,3210],{"class":129},[123,152133,152134],{"class":133}," student ",[123,152136,26054],{"class":129},[123,152138,152139],{"class":133}," students:\n",[123,152141,152142,152144,152147,152149,152151,152153],{"class":125,"line":2630},[123,152143,2506],{"class":129},[123,152145,152146],{"class":133}," student[",[123,152148,151444],{"class":238},[123,152150,4452],{"class":133},[123,152152,2958],{"class":129},[123,152154,152155],{"class":133}," student_id:\n",[123,152157,152158,152160],{"class":125,"line":7958},[123,152159,15742],{"class":129},[123,152161,152162],{"class":133}," student\n",[123,152164,152165,152167],{"class":125,"line":7982},[123,152166,4099],{"class":129},[123,152168,152169],{"class":182}," None\n",[123,152171,152172],{"class":125,"line":7987},[123,152173,2409],{"emptyLinePlaceholder":50},[123,152175,152176],{"class":125,"line":7993},[123,152177,2409],{"emptyLinePlaceholder":50},[123,152179,152180,152182,152185],{"class":125,"line":8020},[123,152181,31958],{"class":129},[123,152183,152184],{"class":1972}," input_int",[123,152186,152187],{"class":133},"(prompt):\n",[123,152189,152190,152192,152194],{"class":125,"line":8025},[123,152191,2260],{"class":129},[123,152193,95289],{"class":182},[123,152195,3748],{"class":133},[123,152197,152198,152201],{"class":125,"line":8031},[123,152199,152200],{"class":129},"        try",[123,152202,3748],{"class":133},[123,152204,152205,152207,152209,152211,152213],{"class":125,"line":8043},[123,152206,15742],{"class":129},[123,152208,2391],{"class":182},[123,152210,134],{"class":133},[123,152212,53832],{"class":182},[123,152214,152215],{"class":133},"(prompt))\n",[123,152217,152218,152221,152224],{"class":125,"line":8055},[123,152219,152220],{"class":129},"        except",[123,152222,152223],{"class":182}," ValueError",[123,152225,3748],{"class":133},[123,152227,152228,152230,152232,152235],{"class":125,"line":8067},[123,152229,34661],{"class":182},[123,152231,134],{"class":133},[123,152233,152234],{"class":238},"\"请输入整数\"",[123,152236,140],{"class":133},[123,152238,152239],{"class":125,"line":9726},[123,152240,2409],{"emptyLinePlaceholder":50},[123,152242,152243],{"class":125,"line":9751},[123,152244,2409],{"emptyLinePlaceholder":50},[123,152246,152247,152249,152252],{"class":125,"line":9774},[123,152248,31958],{"class":129},[123,152250,152251],{"class":1972}," input_float",[123,152253,152187],{"class":133},[123,152255,152256,152258,152260],{"class":125,"line":9798},[123,152257,2260],{"class":129},[123,152259,95289],{"class":182},[123,152261,3748],{"class":133},[123,152263,152264,152266],{"class":125,"line":9803},[123,152265,152200],{"class":129},[123,152267,3748],{"class":133},[123,152269,152270,152272,152274,152276,152278],{"class":125,"line":9808},[123,152271,15742],{"class":129},[123,152273,109794],{"class":182},[123,152275,134],{"class":133},[123,152277,53832],{"class":182},[123,152279,152215],{"class":133},[123,152281,152282,152284,152286],{"class":125,"line":9813},[123,152283,152220],{"class":129},[123,152285,152223],{"class":182},[123,152287,3748],{"class":133},[123,152289,152290,152292,152294,152297],{"class":125,"line":9822},[123,152291,34661],{"class":182},[123,152293,134],{"class":133},[123,152295,152296],{"class":238},"\"请输入数字\"",[123,152298,140],{"class":133},[123,152300,152301],{"class":125,"line":9827},[123,152302,2409],{"emptyLinePlaceholder":50},[123,152304,152305],{"class":125,"line":9833},[123,152306,2409],{"emptyLinePlaceholder":50},[123,152308,152309,152311,152314],{"class":125,"line":9854},[123,152310,31958],{"class":129},[123,152312,152313],{"class":1972}," add_student",[123,152315,151958],{"class":133},[123,152317,152318,152321,152323,152325,152327,152330],{"class":125,"line":9860},[123,152319,152320],{"class":133},"    student_id ",[123,152322,179],{"class":129},[123,152324,60616],{"class":182},[123,152326,134],{"class":133},[123,152328,152329],{"class":238},"\"请输入学号:\"",[123,152331,140],{"class":133},[123,152333,152334],{"class":125,"line":9874},[123,152335,2409],{"emptyLinePlaceholder":50},[123,152337,152338,152340],{"class":125,"line":9880},[123,152339,3110],{"class":129},[123,152341,152342],{"class":133}," find_student(students, student_id):\n",[123,152344,152345,152347,152349,152352],{"class":125,"line":9907},[123,152346,32462],{"class":182},[123,152348,134],{"class":133},[123,152350,152351],{"class":238},"\"学号已存在\"",[123,152353,140],{"class":133},[123,152355,152356],{"class":125,"line":9916},[123,152357,152358],{"class":129},"        return\n",[123,152360,152361],{"class":125,"line":9922},[123,152362,2409],{"emptyLinePlaceholder":50},[123,152364,152365,152368,152370,152372,152374,152377],{"class":125,"line":9930},[123,152366,152367],{"class":133},"    name ",[123,152369,179],{"class":129},[123,152371,60616],{"class":182},[123,152373,134],{"class":133},[123,152375,152376],{"class":238},"\"请输入姓名:\"",[123,152378,140],{"class":133},[123,152380,152381,152384,152386,152389,152392],{"class":125,"line":9935},[123,152382,152383],{"class":133},"    age ",[123,152385,179],{"class":129},[123,152387,152388],{"class":133}," input_int(",[123,152390,152391],{"class":238},"\"请输入年龄:\"",[123,152393,140],{"class":133},[123,152395,152396,152399,152401,152404,152407],{"class":125,"line":16614},[123,152397,152398],{"class":133},"    score ",[123,152400,179],{"class":129},[123,152402,152403],{"class":133}," input_float(",[123,152405,152406],{"class":238},"\"请输入成绩:\"",[123,152408,140],{"class":133},[123,152410,152411],{"class":125,"line":16620},[123,152412,2409],{"emptyLinePlaceholder":50},[123,152414,152415],{"class":125,"line":16643},[123,152416,152417],{"class":133},"    students.append({\n",[123,152419,152420,152423],{"class":125,"line":16649},[123,152421,152422],{"class":238},"        \"student_id\"",[123,152424,152425],{"class":133},": student_id,\n",[123,152427,152428,152431],{"class":125,"line":16672},[123,152429,152430],{"class":238},"        \"name\"",[123,152432,152433],{"class":133},": name,\n",[123,152435,152436,152439],{"class":125,"line":16686},[123,152437,152438],{"class":238},"        \"age\"",[123,152440,152441],{"class":133},": age,\n",[123,152443,152444,152447],{"class":125,"line":16706},[123,152445,152446],{"class":238},"        \"score\"",[123,152448,152449],{"class":133},": score,\n",[123,152451,152452],{"class":125,"line":16712},[123,152453,33472],{"class":133},[123,152455,152456],{"class":125,"line":16723},[123,152457,152458],{"class":133},"    save_students(students)\n",[123,152460,152461,152463,152465,152468],{"class":125,"line":16746},[123,152462,31310],{"class":182},[123,152464,134],{"class":133},[123,152466,152467],{"class":238},"\"添加成功\"",[123,152469,140],{"class":133},[123,152471,152472],{"class":125,"line":16768},[123,152473,2409],{"emptyLinePlaceholder":50},[123,152475,152476],{"class":125,"line":16773},[123,152477,2409],{"emptyLinePlaceholder":50},[123,152479,152480,152482,152485],{"class":125,"line":16779},[123,152481,31958],{"class":129},[123,152483,152484],{"class":1972}," delete_student",[123,152486,151958],{"class":133},[123,152488,152489,152491,152493,152495,152497,152500],{"class":125,"line":16793},[123,152490,152320],{"class":133},[123,152492,179],{"class":129},[123,152494,60616],{"class":182},[123,152496,134],{"class":133},[123,152498,152499],{"class":238},"\"请输入要删除的学号:\"",[123,152501,140],{"class":133},[123,152503,152504,152507,152509],{"class":125,"line":16806},[123,152505,152506],{"class":133},"    student ",[123,152508,179],{"class":129},[123,152510,152511],{"class":133}," find_student(students, student_id)\n",[123,152513,152514],{"class":125,"line":16811},[123,152515,2409],{"emptyLinePlaceholder":50},[123,152517,152518,152520,152522,152524,152526],{"class":125,"line":16825},[123,152519,3110],{"class":129},[123,152521,152134],{"class":133},[123,152523,38938],{"class":129},[123,152525,38944],{"class":182},[123,152527,3748],{"class":133},[123,152529,152530,152532,152534,152537],{"class":125,"line":16830},[123,152531,32462],{"class":182},[123,152533,134],{"class":133},[123,152535,152536],{"class":238},"\"学生不存在\"",[123,152538,140],{"class":133},[123,152540,152541],{"class":125,"line":16836},[123,152542,152358],{"class":129},[123,152544,152545],{"class":125,"line":16841},[123,152546,2409],{"emptyLinePlaceholder":50},[123,152548,152549],{"class":125,"line":16855},[123,152550,152551],{"class":133},"    students.remove(student)\n",[123,152553,152554],{"class":125,"line":16860},[123,152555,152458],{"class":133},[123,152557,152558,152560,152562,152565],{"class":125,"line":16865},[123,152559,31310],{"class":182},[123,152561,134],{"class":133},[123,152563,152564],{"class":238},"\"删除成功\"",[123,152566,140],{"class":133},[123,152568,152569],{"class":125,"line":16879},[123,152570,2409],{"emptyLinePlaceholder":50},[123,152572,152573],{"class":125,"line":16891},[123,152574,2409],{"emptyLinePlaceholder":50},[123,152576,152577,152579,152582],{"class":125,"line":16896},[123,152578,31958],{"class":129},[123,152580,152581],{"class":1972}," update_student",[123,152583,151958],{"class":133},[123,152585,152586,152588,152590,152592,152594,152597],{"class":125,"line":16909},[123,152587,152320],{"class":133},[123,152589,179],{"class":129},[123,152591,60616],{"class":182},[123,152593,134],{"class":133},[123,152595,152596],{"class":238},"\"请输入要修改的学号:\"",[123,152598,140],{"class":133},[123,152600,152601,152603,152605],{"class":125,"line":16914},[123,152602,152506],{"class":133},[123,152604,179],{"class":129},[123,152606,152511],{"class":133},[123,152608,152609],{"class":125,"line":16919},[123,152610,2409],{"emptyLinePlaceholder":50},[123,152612,152613,152615,152617,152619,152621],{"class":125,"line":16924},[123,152614,3110],{"class":129},[123,152616,152134],{"class":133},[123,152618,38938],{"class":129},[123,152620,38944],{"class":182},[123,152622,3748],{"class":133},[123,152624,152625,152627,152629,152631],{"class":125,"line":16937},[123,152626,32462],{"class":182},[123,152628,134],{"class":133},[123,152630,152536],{"class":238},[123,152632,140],{"class":133},[123,152634,152635],{"class":125,"line":16942},[123,152636,152358],{"class":129},[123,152638,152639],{"class":125,"line":32644},[123,152640,2409],{"emptyLinePlaceholder":50},[123,152642,152643,152645,152647,152649,152651,152654],{"class":125,"line":32650},[123,152644,152367],{"class":133},[123,152646,179],{"class":129},[123,152648,60616],{"class":182},[123,152650,134],{"class":133},[123,152652,152653],{"class":238},"\"请输入新姓名:\"",[123,152655,140],{"class":133},[123,152657,152658,152660,152662,152664,152667],{"class":125,"line":32656},[123,152659,152383],{"class":133},[123,152661,179],{"class":129},[123,152663,152388],{"class":133},[123,152665,152666],{"class":238},"\"请输入新年龄:\"",[123,152668,140],{"class":133},[123,152670,152671,152673,152675,152677,152680],{"class":125,"line":32662},[123,152672,152398],{"class":133},[123,152674,179],{"class":129},[123,152676,152403],{"class":133},[123,152678,152679],{"class":238},"\"请输入新成绩:\"",[123,152681,140],{"class":133},[123,152683,152684],{"class":125,"line":32668},[123,152685,2409],{"emptyLinePlaceholder":50},[123,152687,152688,152691,152693,152695,152697],{"class":125,"line":32679},[123,152689,152690],{"class":133},"    student[",[123,152692,62690],{"class":238},[123,152694,4452],{"class":133},[123,152696,179],{"class":129},[123,152698,149792],{"class":133},[123,152700,152701,152703,152705,152707,152709],{"class":125,"line":32685},[123,152702,152690],{"class":133},[123,152704,69135],{"class":238},[123,152706,4452],{"class":133},[123,152708,179],{"class":129},[123,152710,149804],{"class":133},[123,152712,152713,152715,152717,152719,152721],{"class":125,"line":32705},[123,152714,152690],{"class":133},[123,152716,151469],{"class":238},[123,152718,4452],{"class":133},[123,152720,179],{"class":129},[123,152722,1588],{"class":133},[123,152724,152725],{"class":125,"line":32711},[123,152726,2409],{"emptyLinePlaceholder":50},[123,152728,152729],{"class":125,"line":32722},[123,152730,152458],{"class":133},[123,152732,152733,152735,152737,152740],{"class":125,"line":32728},[123,152734,31310],{"class":182},[123,152736,134],{"class":133},[123,152738,152739],{"class":238},"\"修改成功\"",[123,152741,140],{"class":133},[123,152743,152744],{"class":125,"line":32734},[123,152745,2409],{"emptyLinePlaceholder":50},[123,152747,152748],{"class":125,"line":32740},[123,152749,2409],{"emptyLinePlaceholder":50},[123,152751,152752,152754,152757],{"class":125,"line":32746},[123,152753,31958],{"class":129},[123,152755,152756],{"class":1972}," query_student",[123,152758,151958],{"class":133},[123,152760,152761,152763,152765,152767,152769,152772],{"class":125,"line":32752},[123,152762,152320],{"class":133},[123,152764,179],{"class":129},[123,152766,60616],{"class":182},[123,152768,134],{"class":133},[123,152770,152771],{"class":238},"\"请输入要查询的学号:\"",[123,152773,140],{"class":133},[123,152775,152776,152778,152780],{"class":125,"line":32758},[123,152777,152506],{"class":133},[123,152779,179],{"class":129},[123,152781,152511],{"class":133},[123,152783,152784],{"class":125,"line":32764},[123,152785,2409],{"emptyLinePlaceholder":50},[123,152787,152788,152790,152792,152794,152796],{"class":125,"line":32784},[123,152789,3110],{"class":129},[123,152791,152134],{"class":133},[123,152793,38938],{"class":129},[123,152795,38944],{"class":182},[123,152797,3748],{"class":133},[123,152799,152800,152802,152804,152806],{"class":125,"line":32790},[123,152801,32462],{"class":182},[123,152803,134],{"class":133},[123,152805,152536],{"class":238},[123,152807,140],{"class":133},[123,152809,152810],{"class":125,"line":32806},[123,152811,152358],{"class":129},[123,152813,152814],{"class":125,"line":32812},[123,152815,2409],{"emptyLinePlaceholder":50},[123,152817,152818],{"class":125,"line":32826},[123,152819,152820],{"class":133},"    print_student(student)\n",[123,152822,152823],{"class":125,"line":32832},[123,152824,2409],{"emptyLinePlaceholder":50},[123,152826,152827],{"class":125,"line":32847},[123,152828,2409],{"emptyLinePlaceholder":50},[123,152830,152831,152833,152836],{"class":125,"line":32853},[123,152832,31958],{"class":129},[123,152834,152835],{"class":1972}," print_student",[123,152837,152838],{"class":133},"(student):\n",[123,152840,152841,152843],{"class":125,"line":32862},[123,152842,31310],{"class":182},[123,152844,151436],{"class":133},[123,152846,152847,152850,152852,152854,152857,152860,152862,152865],{"class":125,"line":32868},[123,152848,152849],{"class":129},"        f",[123,152851,385],{"class":238},[123,152853,1030],{"class":182},[123,152855,152856],{"class":133},"student[",[123,152858,152859],{"class":238},"'student_id'",[123,152861,1074],{"class":133},[123,152863,152864],{"class":182},"}\\t",[123,152866,25144],{"class":238},[123,152868,152869,152871,152873,152875,152877,152880,152882,152884],{"class":125,"line":32877},[123,152870,152849],{"class":129},[123,152872,385],{"class":238},[123,152874,1030],{"class":182},[123,152876,152856],{"class":133},[123,152878,152879],{"class":238},"'name'",[123,152881,1074],{"class":133},[123,152883,152864],{"class":182},[123,152885,25144],{"class":238},[123,152887,152888,152890,152892,152894,152896,152899,152901,152903],{"class":125,"line":32883},[123,152889,152849],{"class":129},[123,152891,385],{"class":238},[123,152893,1030],{"class":182},[123,152895,152856],{"class":133},[123,152897,152898],{"class":238},"'age'",[123,152900,1074],{"class":133},[123,152902,152864],{"class":182},[123,152904,25144],{"class":238},[123,152906,152907,152909,152911,152913,152915,152918,152920,152922],{"class":125,"line":32889},[123,152908,152849],{"class":129},[123,152910,385],{"class":238},[123,152912,1030],{"class":182},[123,152914,152856],{"class":133},[123,152916,152917],{"class":238},"'score'",[123,152919,1074],{"class":133},[123,152921,1080],{"class":182},[123,152923,25144],{"class":238},[123,152925,152926],{"class":125,"line":32898},[123,152927,152928],{"class":133},"    )\n",[123,152930,152931],{"class":125,"line":32904},[123,152932,2409],{"emptyLinePlaceholder":50},[123,152934,152935],{"class":125,"line":32915},[123,152936,2409],{"emptyLinePlaceholder":50},[123,152938,152939,152941,152944],{"class":125,"line":32921},[123,152940,31958],{"class":129},[123,152942,152943],{"class":1972}," show_all_students",[123,152945,151958],{"class":133},[123,152947,152948,152950,152952],{"class":125,"line":32940},[123,152949,3110],{"class":129},[123,152951,38941],{"class":129},[123,152953,152139],{"class":133},[123,152955,152956,152958,152960,152963],{"class":125,"line":32946},[123,152957,32462],{"class":182},[123,152959,134],{"class":133},[123,152961,152962],{"class":238},"\"暂无学生\"",[123,152964,140],{"class":133},[123,152966,152967],{"class":125,"line":32957},[123,152968,152358],{"class":129},[123,152970,152971],{"class":125,"line":32963},[123,152972,2409],{"emptyLinePlaceholder":50},[123,152974,152975,152977,152979,152982,152984,152987,152989,152992,152994,152997],{"class":125,"line":32983},[123,152976,31310],{"class":182},[123,152978,134],{"class":133},[123,152980,152981],{"class":238},"\"学号",[123,152983,1240],{"class":182},[123,152985,152986],{"class":238},"姓名",[123,152988,1240],{"class":182},[123,152990,152991],{"class":238},"年龄",[123,152993,1240],{"class":182},[123,152995,152996],{"class":238},"成绩\"",[123,152998,140],{"class":133},[123,153000,153001,153003,153005,153007],{"class":125,"line":32999},[123,153002,3210],{"class":129},[123,153004,152134],{"class":133},[123,153006,26054],{"class":129},[123,153008,152139],{"class":133},[123,153010,153011],{"class":125,"line":33005},[123,153012,153013],{"class":133},"        print_student(student)\n",[123,153015,153016],{"class":125,"line":33019},[123,153017,2409],{"emptyLinePlaceholder":50},[123,153019,153020],{"class":125,"line":33025},[123,153021,2409],{"emptyLinePlaceholder":50},[123,153023,153024,153026,153028],{"class":125,"line":33031},[123,153025,31958],{"class":129},[123,153027,1982],{"class":1972},[123,153029,31964],{"class":133},[123,153031,153032,153035,153037],{"class":125,"line":33042},[123,153033,153034],{"class":133},"    students ",[123,153036,179],{"class":129},[123,153038,153039],{"class":133}," load_students()\n",[123,153041,153042],{"class":125,"line":33048},[123,153043,2409],{"emptyLinePlaceholder":50},[123,153045,153046,153048,153050],{"class":125,"line":33054},[123,153047,2260],{"class":129},[123,153049,95289],{"class":182},[123,153051,3748],{"class":133},[123,153053,153054],{"class":125,"line":33064},[123,153055,153056],{"class":133},"        show_menu()\n",[123,153058,153059,153062,153064,153066,153068,153071],{"class":125,"line":33070},[123,153060,153061],{"class":133},"        choice ",[123,153063,179],{"class":129},[123,153065,60616],{"class":182},[123,153067,134],{"class":133},[123,153069,153070],{"class":238},"\"请输入操作:\"",[123,153072,140],{"class":133},[123,153074,153075],{"class":125,"line":33081},[123,153076,2409],{"emptyLinePlaceholder":50},[123,153078,153079,153081,153084,153086,153089],{"class":125,"line":33087},[123,153080,2506],{"class":129},[123,153082,153083],{"class":133}," choice ",[123,153085,2958],{"class":129},[123,153087,153088],{"class":238}," \"1\"",[123,153090,3748],{"class":133},[123,153092,153093],{"class":125,"line":33097},[123,153094,153095],{"class":133},"            add_student(students)\n",[123,153097,153098,153101,153103,153105,153108],{"class":125,"line":33102},[123,153099,153100],{"class":129},"        elif",[123,153102,153083],{"class":133},[123,153104,2958],{"class":129},[123,153106,153107],{"class":238}," \"2\"",[123,153109,3748],{"class":133},[123,153111,153112],{"class":125,"line":33108},[123,153113,153114],{"class":133},"            delete_student(students)\n",[123,153116,153117,153119,153121,153123,153126],{"class":125,"line":33157},[123,153118,153100],{"class":129},[123,153120,153083],{"class":133},[123,153122,2958],{"class":129},[123,153124,153125],{"class":238}," \"3\"",[123,153127,3748],{"class":133},[123,153129,153130],{"class":125,"line":33204},[123,153131,153132],{"class":133},"            update_student(students)\n",[123,153134,153135,153137,153139,153141,153144],{"class":125,"line":33209},[123,153136,153100],{"class":129},[123,153138,153083],{"class":133},[123,153140,2958],{"class":129},[123,153142,153143],{"class":238}," \"4\"",[123,153145,3748],{"class":133},[123,153147,153148],{"class":125,"line":33215},[123,153149,153150],{"class":133},"            query_student(students)\n",[123,153152,153153,153155,153157,153159,153162],{"class":125,"line":33234},[123,153154,153100],{"class":129},[123,153156,153083],{"class":133},[123,153158,2958],{"class":129},[123,153160,153161],{"class":238}," \"5\"",[123,153163,3748],{"class":133},[123,153165,153166],{"class":125,"line":33240},[123,153167,153168],{"class":133},"            show_all_students(students)\n",[123,153170,153171,153173,153175,153177,153180],{"class":125,"line":33260},[123,153172,153100],{"class":129},[123,153174,153083],{"class":133},[123,153176,2958],{"class":129},[123,153178,153179],{"class":238}," \"0\"",[123,153181,3748],{"class":133},[123,153183,153184,153186,153188,153191],{"class":125,"line":33266},[123,153185,34661],{"class":182},[123,153187,134],{"class":133},[123,153189,153190],{"class":238},"\"退出系统\"",[123,153192,140],{"class":133},[123,153194,153195],{"class":125,"line":33272},[123,153196,115095],{"class":129},[123,153198,153199,153201],{"class":125,"line":33282},[123,153200,2543],{"class":129},[123,153202,3748],{"class":133},[123,153204,153205,153207,153209,153212],{"class":125,"line":33287},[123,153206,34661],{"class":182},[123,153208,134],{"class":133},[123,153210,153211],{"class":238},"\"输入错误\"",[123,153213,140],{"class":133},[123,153215,153216],{"class":125,"line":33293},[123,153217,2409],{"emptyLinePlaceholder":50},[123,153219,153220],{"class":125,"line":33309},[123,153221,2409],{"emptyLinePlaceholder":50},[123,153223,153224,153226,153228,153230,153232],{"class":125,"line":33354},[123,153225,1540],{"class":129},[123,153227,31231],{"class":182},[123,153229,101556],{"class":129},[123,153231,101559],{"class":238},[123,153233,3748],{"class":133},[123,153235,153236],{"class":125,"line":33360},[123,153237,101566],{"class":133},[14,153239,153240],{},"这个项目串联了：",[77,153242,153243,153246,153249,153252,153255,153257],{},[80,153244,153245],{},"菜单循环。",[80,153247,153248],{},"函数封装。",[80,153250,153251],{},"列表字典。",[80,153253,153254],{},"JSON 读写。",[80,153256,151724],{},[80,153258,153259,28396],{},[120,153260,153261],{},"if __name__ == \"__main__\"",[65,153263,153265],{"id":153264},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153267,153268],{},"可以进一步拆成两个类：",[77,153270,153271,153276],{},[80,153272,153273,153275],{},[120,153274,149565],{},"：表示单个学生。",[80,153277,153278,153280],{},[120,153279,151591],{},"：负责学生增删改查和文件保存。",[14,153282,153283],{},"示意代码：",[114,153285,153287],{"className":30389,"code":153286,"language":30391,"meta":37,"style":37},"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",[120,153288,153289,153299,153303,153307,153311,153319,153326,153332,153338,153344,153348,153356,153362,153372,153382,153392,153402,153406,153410,153416,153424,153432,153440,153448,153456,153464],{"__ignoreMap":37},[123,153290,153291,153293,153295,153297],{"class":125,"line":126},[123,153292,30748],{"class":129},[123,153294,151149],{"class":133},[123,153296,30403],{"class":129},[123,153298,151154],{"class":133},[123,153300,153301],{"class":125,"line":45},[123,153302,2409],{"emptyLinePlaceholder":50},[123,153304,153305],{"class":125,"line":1189},[123,153306,2409],{"emptyLinePlaceholder":50},[123,153308,153309],{"class":125,"line":1204},[123,153310,151167],{"class":1972},[123,153312,153313,153315,153317],{"class":125,"line":1210},[123,153314,14704],{"class":129},[123,153316,7908],{"class":1972},[123,153318,3748],{"class":133},[123,153320,153321,153324],{"class":125,"line":1224},[123,153322,153323],{"class":133},"    student_id: ",[123,153325,151183],{"class":182},[123,153327,153328,153330],{"class":125,"line":1230},[123,153329,151180],{"class":133},[123,153331,151183],{"class":182},[123,153333,153334,153336],{"class":125,"line":1321},[123,153335,151188],{"class":133},[123,153337,151191],{"class":182},[123,153339,153340,153342],{"class":125,"line":1327},[123,153341,151196],{"class":133},[123,153343,151199],{"class":182},[123,153345,153346],{"class":125,"line":1339},[123,153347,2409],{"emptyLinePlaceholder":50},[123,153349,153350,153352,153354],{"class":125,"line":1621},[123,153351,30812],{"class":129},[123,153353,151347],{"class":1972},[123,153355,30818],{"class":133},[123,153357,153358,153360],{"class":125,"line":1626},[123,153359,14762],{"class":129},[123,153361,15582],{"class":133},[123,153363,153364,153366,153368,153370],{"class":125,"line":1632},[123,153365,151360],{"class":238},[123,153367,51448],{"class":133},[123,153369,30834],{"class":182},[123,153371,151367],{"class":133},[123,153373,153374,153376,153378,153380],{"class":125,"line":1637},[123,153375,151372],{"class":238},[123,153377,51448],{"class":133},[123,153379,30834],{"class":182},[123,153381,151379],{"class":133},[123,153383,153384,153386,153388,153390],{"class":125,"line":1651},[123,153385,151384],{"class":238},[123,153387,51448],{"class":133},[123,153389,30834],{"class":182},[123,153391,151391],{"class":133},[123,153393,153394,153396,153398,153400],{"class":125,"line":1656},[123,153395,151396],{"class":238},[123,153397,51448],{"class":133},[123,153399,30834],{"class":182},[123,153401,151403],{"class":133},[123,153403,153404],{"class":125,"line":1662},[123,153405,2538],{"class":133},[123,153407,153408],{"class":125,"line":1683},[123,153409,2409],{"emptyLinePlaceholder":50},[123,153411,153412,153414],{"class":125,"line":1688},[123,153413,151011],{"class":1972},[123,153415,151014],{"class":182},[123,153417,153418,153420,153422],{"class":125,"line":1702},[123,153419,30812],{"class":129},[123,153421,151424],{"class":1972},[123,153423,151427],{"class":133},[123,153425,153426,153428,153430],{"class":125,"line":1707},[123,153427,14762],{"class":129},[123,153429,151031],{"class":182},[123,153431,151436],{"class":133},[123,153433,153434,153436,153438],{"class":125,"line":1736},[123,153435,151441],{"class":133},[123,153437,151444],{"class":238},[123,153439,87847],{"class":133},[123,153441,153442,153444,153446],{"class":125,"line":1741},[123,153443,151441],{"class":133},[123,153445,62690],{"class":238},[123,153447,87847],{"class":133},[123,153449,153450,153452,153454],{"class":125,"line":1758},[123,153451,151441],{"class":133},[123,153453,69135],{"class":238},[123,153455,87847],{"class":133},[123,153457,153458,153460,153462],{"class":125,"line":1763},[123,153459,151441],{"class":133},[123,153461,151469],{"class":238},[123,153463,87847],{"class":133},[123,153465,153466],{"class":125,"line":1768},[123,153467,38137],{"class":133},[14,153469,153470],{},"管理器示意：",[114,153472,153474],{"className":30389,"code":153473,"language":30391,"meta":37,"style":37},"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",[120,153475,153476,153485,153493,153504,153508,153518,153531,153542,153549,153555,153559,153568,153577,153583,153590],{"__ignoreMap":37},[123,153477,153478,153480,153483],{"class":125,"line":126},[123,153479,14704],{"class":129},[123,153481,153482],{"class":1972}," StudentManager",[123,153484,3748],{"class":133},[123,153486,153487,153489,153491],{"class":125,"line":45},[123,153488,30812],{"class":129},[123,153490,30815],{"class":182},[123,153492,30818],{"class":133},[123,153494,153495,153497,153500,153502],{"class":125,"line":1189},[123,153496,30856],{"class":182},[123,153498,153499],{"class":133},".students ",[123,153501,179],{"class":129},[123,153503,51849],{"class":133},[123,153505,153506],{"class":125,"line":1204},[123,153507,2409],{"emptyLinePlaceholder":50},[123,153509,153510,153512,153515],{"class":125,"line":1210},[123,153511,30812],{"class":129},[123,153513,153514],{"class":1972}," find_by_id",[123,153516,153517],{"class":133},"(self, student_id):\n",[123,153519,153520,153522,153524,153526,153528],{"class":125,"line":1224},[123,153521,3412],{"class":129},[123,153523,152134],{"class":133},[123,153525,26054],{"class":129},[123,153527,38884],{"class":182},[123,153529,153530],{"class":133},".students:\n",[123,153532,153533,153535,153538,153540],{"class":125,"line":1230},[123,153534,4651],{"class":129},[123,153536,153537],{"class":133}," student.student_id ",[123,153539,2958],{"class":129},[123,153541,152155],{"class":133},[123,153543,153544,153547],{"class":125,"line":1321},[123,153545,153546],{"class":129},"                return",[123,153548,152162],{"class":133},[123,153550,153551,153553],{"class":125,"line":1327},[123,153552,14762],{"class":129},[123,153554,152169],{"class":182},[123,153556,153557],{"class":125,"line":1339},[123,153558,2409],{"emptyLinePlaceholder":50},[123,153560,153561,153563,153565],{"class":125,"line":1621},[123,153562,30812],{"class":129},[123,153564,5219],{"class":1972},[123,153566,153567],{"class":133},"(self, student):\n",[123,153569,153570,153572,153574],{"class":125,"line":1626},[123,153571,2506],{"class":129},[123,153573,38884],{"class":182},[123,153575,153576],{"class":133},".find_by_id(student.student_id):\n",[123,153578,153579,153581],{"class":125,"line":1632},[123,153580,15742],{"class":129},[123,153582,125804],{"class":182},[123,153584,153585,153587],{"class":125,"line":1637},[123,153586,30856],{"class":182},[123,153588,153589],{"class":133},".students.append(student)\n",[123,153591,153592,153594],{"class":125,"line":1651},[123,153593,14762],{"class":129},[123,153595,153596],{"class":182}," True\n",[14,153598,153599],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[65,153601,153603],{"id":153602},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[94,153605,153607],{"id":153606},"_1251-数据结构","12.5.1 数据结构",[114,153609,153611],{"className":30389,"code":153610,"language":30391,"meta":37,"style":37},"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",[120,153612,153613,153621,153652,153682,153711,153740],{"__ignoreMap":37},[123,153614,153615,153617,153619],{"class":125,"line":126},[123,153616,148462],{"class":133},[123,153618,179],{"class":129},[123,153620,55458],{"class":133},[123,153622,153623,153625,153627,153629,153631,153633,153636,153638,153641,153643,153645,153647,153650],{"class":125,"line":45},[123,153624,148382],{"class":133},[123,153626,147994],{"class":238},[123,153628,51448],{"class":133},[123,153630,148605],{"class":238},[123,153632,12445],{"class":133},[123,153634,153635],{"class":238},"\"category\"",[123,153637,51448],{"class":133},[123,153639,153640],{"class":238},"\"手机\"",[123,153642,12445],{"class":133},[123,153644,84095],{"class":238},[123,153646,51448],{"class":133},[123,153648,153649],{"class":182},"12000",[123,153651,4939],{"class":133},[123,153653,153654,153656,153658,153660,153662,153664,153666,153668,153671,153673,153675,153677,153680],{"class":125,"line":1189},[123,153655,148382],{"class":133},[123,153657,147994],{"class":238},[123,153659,51448],{"class":133},[123,153661,148605],{"class":238},[123,153663,12445],{"class":133},[123,153665,153635],{"class":238},[123,153667,51448],{"class":133},[123,153669,153670],{"class":238},"\"电脑\"",[123,153672,12445],{"class":133},[123,153674,84095],{"class":238},[123,153676,51448],{"class":133},[123,153678,153679],{"class":182},"18000",[123,153681,4939],{"class":133},[123,153683,153684,153686,153688,153690,153692,153694,153696,153698,153700,153702,153704,153706,153709],{"class":125,"line":1204},[123,153685,148382],{"class":133},[123,153687,147994],{"class":238},[123,153689,51448],{"class":133},[123,153691,148626],{"class":238},[123,153693,12445],{"class":133},[123,153695,153635],{"class":238},[123,153697,51448],{"class":133},[123,153699,153640],{"class":238},[123,153701,12445],{"class":133},[123,153703,84095],{"class":238},[123,153705,51448],{"class":133},[123,153707,153708],{"class":182},"15000",[123,153710,4939],{"class":133},[123,153712,153713,153715,153717,153719,153721,153723,153725,153727,153729,153731,153733,153735,153738],{"class":125,"line":1210},[123,153714,148382],{"class":133},[123,153716,147994],{"class":238},[123,153718,51448],{"class":133},[123,153720,148626],{"class":238},[123,153722,12445],{"class":133},[123,153724,153635],{"class":238},[123,153726,51448],{"class":133},[123,153728,153670],{"class":238},[123,153730,12445],{"class":133},[123,153732,84095],{"class":238},[123,153734,51448],{"class":133},[123,153736,153737],{"class":182},"16000",[123,153739,4939],{"class":133},[123,153741,153742],{"class":125,"line":1224},[123,153743,33257],{"class":133},[94,153745,153747],{"id":153746},"_1252-按日期统计","12.5.2 按日期统计",[114,153749,153751],{"className":30389,"code":153750,"language":30391,"meta":37,"style":37},"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",[120,153752,153753,153762,153766,153777,153791,153804,153823,153827],{"__ignoreMap":37},[123,153754,153755,153758,153760],{"class":125,"line":126},[123,153756,153757],{"class":133},"daily_total ",[123,153759,179],{"class":129},[123,153761,87879],{"class":133},[123,153763,153764],{"class":125,"line":45},[123,153765,2409],{"emptyLinePlaceholder":50},[123,153767,153768,153770,153772,153774],{"class":125,"line":1189},[123,153769,3034],{"class":129},[123,153771,148206],{"class":133},[123,153773,26054],{"class":129},[123,153775,153776],{"class":133}," sales:\n",[123,153778,153779,153782,153784,153787,153789],{"class":125,"line":1204},[123,153780,153781],{"class":133},"    date ",[123,153783,179],{"class":129},[123,153785,153786],{"class":133}," item[",[123,153788,147994],{"class":238},[123,153790,33257],{"class":133},[123,153792,153793,153796,153798,153800,153802],{"class":125,"line":1210},[123,153794,153795],{"class":133},"    amount ",[123,153797,179],{"class":129},[123,153799,153786],{"class":133},[123,153801,84095],{"class":238},[123,153803,33257],{"class":133},[123,153805,153806,153809,153811,153814,153816,153818,153820],{"class":125,"line":1224},[123,153807,153808],{"class":133},"    daily_total[date] ",[123,153810,179],{"class":129},[123,153812,153813],{"class":133}," daily_total.get(date, ",[123,153815,325],{"class":182},[123,153817,13724],{"class":133},[123,153819,615],{"class":129},[123,153821,153822],{"class":133}," amount\n",[123,153824,153825],{"class":125,"line":1230},[123,153826,2409],{"emptyLinePlaceholder":50},[123,153828,153829,153831],{"class":125,"line":1321},[123,153830,30426],{"class":182},[123,153832,153833],{"class":133},"(daily_total)\n",[94,153835,153837],{"id":153836},"_1253-按类别统计","12.5.3 按类别统计",[114,153839,153841],{"className":30389,"code":153840,"language":30391,"meta":37,"style":37},"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",[120,153842,153843,153852,153856,153866,153879,153891,153909,153913],{"__ignoreMap":37},[123,153844,153845,153848,153850],{"class":125,"line":126},[123,153846,153847],{"class":133},"category_total ",[123,153849,179],{"class":129},[123,153851,87879],{"class":133},[123,153853,153854],{"class":125,"line":45},[123,153855,2409],{"emptyLinePlaceholder":50},[123,153857,153858,153860,153862,153864],{"class":125,"line":1189},[123,153859,3034],{"class":129},[123,153861,148206],{"class":133},[123,153863,26054],{"class":129},[123,153865,153776],{"class":133},[123,153867,153868,153871,153873,153875,153877],{"class":125,"line":1204},[123,153869,153870],{"class":133},"    category ",[123,153872,179],{"class":129},[123,153874,153786],{"class":133},[123,153876,153635],{"class":238},[123,153878,33257],{"class":133},[123,153880,153881,153883,153885,153887,153889],{"class":125,"line":1210},[123,153882,153795],{"class":133},[123,153884,179],{"class":129},[123,153886,153786],{"class":133},[123,153888,84095],{"class":238},[123,153890,33257],{"class":133},[123,153892,153893,153896,153898,153901,153903,153905,153907],{"class":125,"line":1224},[123,153894,153895],{"class":133},"    category_total[category] ",[123,153897,179],{"class":129},[123,153899,153900],{"class":133}," category_total.get(category, ",[123,153902,325],{"class":182},[123,153904,13724],{"class":133},[123,153906,615],{"class":129},[123,153908,153822],{"class":133},[123,153910,153911],{"class":125,"line":1230},[123,153912,2409],{"emptyLinePlaceholder":50},[123,153914,153915,153917],{"class":125,"line":1321},[123,153916,30426],{"class":182},[123,153918,153919],{"class":133},"(category_total)\n",[94,153921,153923],{"id":153922},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[114,153925,153927],{"className":30389,"code":153926,"language":30391,"meta":37,"style":37},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[120,153928,153929,153954],{"__ignoreMap":37},[123,153930,153931,153934,153936,153938,153941,153944,153947,153950,153952],{"class":125,"line":126},[123,153932,153933],{"class":133},"top_date, top_amount ",[123,153935,179],{"class":129},[123,153937,5961],{"class":182},[123,153939,153940],{"class":133},"(daily_total.items(), ",[123,153942,153943],{"class":5226},"key",[123,153945,153946],{"class":129},"=lambda",[123,153948,153949],{"class":133}," item: item[",[123,153951,351],{"class":182},[123,153953,4666],{"class":133},[123,153955,153956,153958],{"class":125,"line":45},[123,153957,30426],{"class":182},[123,153959,153960],{"class":133},"(top_date, top_amount)\n",[65,153962,153964],{"id":153963},"_126-绘制柱状图","12.6 绘制柱状图",[114,153966,153968],{"className":30389,"code":153967,"language":30391,"meta":37,"style":37},"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",[120,153969,153970,153984,153995,153999,154007,154019,154031,154042,154046,154050,154060,154071,154085,154090,154107,154124,154140,154144],{"__ignoreMap":37},[123,153971,153972,153974,153976,153978,153980,153982],{"class":125,"line":126},[123,153973,30748],{"class":129},[123,153975,147376],{"class":133},[123,153977,30403],{"class":129},[123,153979,147381],{"class":133},[123,153981,31394],{"class":129},[123,153983,147386],{"class":133},[123,153985,153986,153988,153990,153992],{"class":125,"line":45},[123,153987,30748],{"class":129},[123,153989,147235],{"class":133},[123,153991,30403],{"class":129},[123,153993,153994],{"class":133}," Bar\n",[123,153996,153997],{"class":125,"line":1189},[123,153998,2409],{"emptyLinePlaceholder":50},[123,154000,154001,154003,154005],{"class":125,"line":1204},[123,154002,153847],{"class":133},[123,154004,179],{"class":129},[123,154006,15582],{"class":133},[123,154008,154009,154012,154014,154017],{"class":125,"line":1210},[123,154010,154011],{"class":238},"    \"手机\"",[123,154013,51448],{"class":133},[123,154015,154016],{"class":182},"27000",[123,154018,31477],{"class":133},[123,154020,154021,154024,154026,154029],{"class":125,"line":1224},[123,154022,154023],{"class":238},"    \"电脑\"",[123,154025,51448],{"class":133},[123,154027,154028],{"class":182},"34000",[123,154030,31477],{"class":133},[123,154032,154033,154036,154038,154040],{"class":125,"line":1230},[123,154034,154035],{"class":238},"    \"耳机\"",[123,154037,51448],{"class":133},[123,154039,124396],{"class":182},[123,154041,31477],{"class":133},[123,154043,154044],{"class":125,"line":1321},[123,154045,1574],{"class":133},[123,154047,154048],{"class":125,"line":1327},[123,154049,2409],{"emptyLinePlaceholder":50},[123,154051,154052,154055,154057],{"class":125,"line":1339},[123,154053,154054],{"class":133},"bar ",[123,154056,179],{"class":129},[123,154058,154059],{"class":133}," Bar()\n",[123,154061,154062,154065,154068],{"class":125,"line":1621},[123,154063,154064],{"class":133},"bar.add_xaxis(",[123,154066,154067],{"class":182},"list",[123,154069,154070],{"class":133},"(category_total.keys()))\n",[123,154072,154073,154076,154078,154080,154082],{"class":125,"line":1626},[123,154074,154075],{"class":133},"bar.add_yaxis(",[123,154077,147292],{"class":238},[123,154079,12445],{"class":133},[123,154081,154067],{"class":182},[123,154083,154084],{"class":133},"(category_total.values()))\n",[123,154086,154087],{"class":125,"line":1632},[123,154088,154089],{"class":133},"bar.set_global_opts(\n",[123,154091,154092,154094,154096,154098,154100,154102,154105],{"class":125,"line":1637},[123,154093,147470],{"class":5226},[123,154095,179],{"class":129},[123,154097,147475],{"class":133},[123,154099,51418],{"class":5226},[123,154101,179],{"class":129},[123,154103,154104],{"class":238},"\"品类销售额\"",[123,154106,38058],{"class":133},[123,154108,154109,154111,154113,154115,154117,154119,154122],{"class":125,"line":1651},[123,154110,147489],{"class":5226},[123,154112,179],{"class":129},[123,154114,147494],{"class":133},[123,154116,79821],{"class":5226},[123,154118,179],{"class":129},[123,154120,154121],{"class":238},"\"品类\"",[123,154123,38058],{"class":133},[123,154125,154126,154128,154130,154132,154134,154136,154138],{"class":125,"line":1656},[123,154127,147508],{"class":5226},[123,154129,179],{"class":129},[123,154131,147494],{"class":133},[123,154133,79821],{"class":5226},[123,154135,179],{"class":129},[123,154137,147292],{"class":238},[123,154139,38058],{"class":133},[123,154141,154142],{"class":125,"line":1662},[123,154143,140],{"class":133},[123,154145,154146,154149,154152],{"class":125,"line":1683},[123,154147,154148],{"class":133},"bar.render(",[123,154150,154151],{"class":238},"\"category_sales.html\"",[123,154153,140],{"class":133},[65,154155,154157],{"id":154156},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154159,154160],{},"时间线适合展示不同日期、月份、年份的数据变化。",[114,154162,154164],{"className":30389,"code":154163,"language":30391,"meta":37,"style":37},"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",[120,154165,154166,154180,154191,154195,154203,154227,154250,154275,154279,154283,154293,154297,154308,154317,154327,154341,154372,154377,154381],{"__ignoreMap":37},[123,154167,154168,154170,154172,154174,154176,154178],{"class":125,"line":126},[123,154169,30748],{"class":129},[123,154171,147376],{"class":133},[123,154173,30403],{"class":129},[123,154175,147381],{"class":133},[123,154177,31394],{"class":129},[123,154179,147386],{"class":133},[123,154181,154182,154184,154186,154188],{"class":125,"line":45},[123,154183,30748],{"class":129},[123,154185,147235],{"class":133},[123,154187,30403],{"class":129},[123,154189,154190],{"class":133}," Bar, Timeline\n",[123,154192,154193],{"class":125,"line":1189},[123,154194,2409],{"emptyLinePlaceholder":50},[123,154196,154197,154199,154201],{"class":125,"line":1204},[123,154198,101655],{"class":133},[123,154200,179],{"class":129},[123,154202,15582],{"class":133},[123,154204,154205,154208,154211,154213,154215,154217,154219,154221,154223,154225],{"class":125,"line":1210},[123,154206,154207],{"class":238},"    \"2024-10-01\"",[123,154209,154210],{"class":133},": {",[123,154212,153640],{"class":238},[123,154214,51448],{"class":133},[123,154216,153649],{"class":182},[123,154218,12445],{"class":133},[123,154220,153670],{"class":238},[123,154222,51448],{"class":133},[123,154224,153679],{"class":182},[123,154226,4939],{"class":133},[123,154228,154229,154232,154234,154236,154238,154240,154242,154244,154246,154248],{"class":125,"line":1224},[123,154230,154231],{"class":238},"    \"2024-10-02\"",[123,154233,154210],{"class":133},[123,154235,153640],{"class":238},[123,154237,51448],{"class":133},[123,154239,153708],{"class":182},[123,154241,12445],{"class":133},[123,154243,153670],{"class":238},[123,154245,51448],{"class":133},[123,154247,153737],{"class":182},[123,154249,4939],{"class":133},[123,154251,154252,154255,154257,154259,154261,154264,154266,154268,154270,154273],{"class":125,"line":1230},[123,154253,154254],{"class":238},"    \"2024-10-03\"",[123,154256,154210],{"class":133},[123,154258,153640],{"class":238},[123,154260,51448],{"class":133},[123,154262,154263],{"class":182},"17000",[123,154265,12445],{"class":133},[123,154267,153670],{"class":238},[123,154269,51448],{"class":133},[123,154271,154272],{"class":182},"19000",[123,154274,4939],{"class":133},[123,154276,154277],{"class":125,"line":1321},[123,154278,1574],{"class":133},[123,154280,154281],{"class":125,"line":1327},[123,154282,2409],{"emptyLinePlaceholder":50},[123,154284,154285,154288,154290],{"class":125,"line":1339},[123,154286,154287],{"class":133},"timeline ",[123,154289,179],{"class":129},[123,154291,154292],{"class":133}," Timeline()\n",[123,154294,154295],{"class":125,"line":1621},[123,154296,2409],{"emptyLinePlaceholder":50},[123,154298,154299,154301,154304,154306],{"class":125,"line":1626},[123,154300,3034],{"class":129},[123,154302,154303],{"class":133}," date, category_data ",[123,154305,26054],{"class":129},[123,154307,149145],{"class":133},[123,154309,154310,154313,154315],{"class":125,"line":1632},[123,154311,154312],{"class":133},"    bar ",[123,154314,179],{"class":129},[123,154316,154059],{"class":133},[123,154318,154319,154322,154324],{"class":125,"line":1637},[123,154320,154321],{"class":133},"    bar.add_xaxis(",[123,154323,154067],{"class":182},[123,154325,154326],{"class":133},"(category_data.keys()))\n",[123,154328,154329,154332,154334,154336,154338],{"class":125,"line":1651},[123,154330,154331],{"class":133},"    bar.add_yaxis(",[123,154333,147292],{"class":238},[123,154335,12445],{"class":133},[123,154337,154067],{"class":182},[123,154339,154340],{"class":133},"(category_data.values()))\n",[123,154342,154343,154346,154349,154351,154353,154355,154357,154359,154361,154363,154365,154367,154370],{"class":125,"line":1656},[123,154344,154345],{"class":133},"    bar.set_global_opts(",[123,154347,154348],{"class":5226},"title_opts",[123,154350,179],{"class":129},[123,154352,147475],{"class":133},[123,154354,51418],{"class":5226},[123,154356,179],{"class":129},[123,154358,186],{"class":129},[123,154360,385],{"class":238},[123,154362,1030],{"class":182},[123,154364,73937],{"class":133},[123,154366,1080],{"class":182},[123,154368,154369],{"class":238},"销售额\"",[123,154371,30508],{"class":133},[123,154373,154374],{"class":125,"line":1662},[123,154375,154376],{"class":133},"    timeline.add(bar, date)\n",[123,154378,154379],{"class":125,"line":1683},[123,154380,2409],{"emptyLinePlaceholder":50},[123,154382,154383,154386,154389],{"class":125,"line":1688},[123,154384,154385],{"class":133},"timeline.render(",[123,154387,154388],{"class":238},"\"timeline_sales.html\"",[123,154390,140],{"class":133},[65,154392,154394],{"id":154393},"_128-绘制地图","12.8 绘制地图",[14,154396,154397],{},"地图适合展示地区数据。",[114,154399,154401],{"className":30389,"code":154400,"language":30391,"meta":37,"style":37},"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",[120,154402,154403,154417,154428,154432,154440,154453,154465,154478,154491,154495,154499,154509,154524,154529,154546,154565,154569],{"__ignoreMap":37},[123,154404,154405,154407,154409,154411,154413,154415],{"class":125,"line":126},[123,154406,30748],{"class":129},[123,154408,147376],{"class":133},[123,154410,30403],{"class":129},[123,154412,147381],{"class":133},[123,154414,31394],{"class":129},[123,154416,147386],{"class":133},[123,154418,154419,154421,154423,154425],{"class":125,"line":45},[123,154420,30748],{"class":129},[123,154422,147235],{"class":133},[123,154424,30403],{"class":129},[123,154426,154427],{"class":133}," Map\n",[123,154429,154430],{"class":125,"line":1189},[123,154431,2409],{"emptyLinePlaceholder":50},[123,154433,154434,154436,154438],{"class":125,"line":1204},[123,154435,101655],{"class":133},[123,154437,179],{"class":129},[123,154439,55458],{"class":133},[123,154441,154442,154445,154447,154449,154451],{"class":125,"line":1210},[123,154443,154444],{"class":133},"    (",[123,154446,69280],{"class":238},[123,154448,12445],{"class":133},[123,154450,951],{"class":182},[123,154452,38058],{"class":133},[123,154454,154455,154457,154459,154461,154463],{"class":125,"line":1224},[123,154456,154444],{"class":133},[123,154458,69300],{"class":238},[123,154460,12445],{"class":133},[123,154462,147309],{"class":182},[123,154464,38058],{"class":133},[123,154466,154467,154469,154472,154474,154476],{"class":125,"line":1230},[123,154468,154444],{"class":133},[123,154470,154471],{"class":238},"\"广东\"",[123,154473,12445],{"class":133},[123,154475,1731],{"class":182},[123,154477,38058],{"class":133},[123,154479,154480,154482,154485,154487,154489],{"class":125,"line":1321},[123,154481,154444],{"class":133},[123,154483,154484],{"class":238},"\"浙江\"",[123,154486,12445],{"class":133},[123,154488,147314],{"class":182},[123,154490,38058],{"class":133},[123,154492,154493],{"class":125,"line":1327},[123,154494,33257],{"class":133},[123,154496,154497],{"class":125,"line":1339},[123,154498,2409],{"emptyLinePlaceholder":50},[123,154500,154501,154504,154506],{"class":125,"line":1621},[123,154502,154503],{"class":133},"map_chart ",[123,154505,179],{"class":129},[123,154507,154508],{"class":133}," Map()\n",[123,154510,154511,154514,154516,154519,154522],{"class":125,"line":1626},[123,154512,154513],{"class":133},"map_chart.add(",[123,154515,147292],{"class":238},[123,154517,154518],{"class":133},", data, ",[123,154520,154521],{"class":238},"\"china\"",[123,154523,140],{"class":133},[123,154525,154526],{"class":125,"line":1632},[123,154527,154528],{"class":133},"map_chart.set_global_opts(\n",[123,154530,154531,154533,154535,154537,154539,154541,154544],{"class":125,"line":1637},[123,154532,147470],{"class":5226},[123,154534,179],{"class":129},[123,154536,147475],{"class":133},[123,154538,51418],{"class":5226},[123,154540,179],{"class":129},[123,154542,154543],{"class":238},"\"地区销售额\"",[123,154545,38058],{"class":133},[123,154547,154548,154551,154553,154556,154559,154561,154563],{"class":125,"line":1651},[123,154549,154550],{"class":5226},"    visualmap_opts",[123,154552,179],{"class":129},[123,154554,154555],{"class":133},"opts.VisualMapOpts(",[123,154557,154558],{"class":5226},"max_",[123,154560,179],{"class":129},[123,154562,1731],{"class":182},[123,154564,38058],{"class":133},[123,154566,154567],{"class":125,"line":1656},[123,154568,140],{"class":133},[123,154570,154571,154574,154577],{"class":125,"line":1662},[123,154572,154573],{"class":133},"map_chart.render(",[123,154575,154576],{"class":238},"\"map_sales.html\"",[123,154578,140],{"class":133},[14,154580,154581],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[65,154583,154585],{"id":154584},"_129-项目拆分建议","12.9 项目拆分建议",[14,154587,154588],{},"当代码超过一个文件时，可以这样组织：",[114,154590,154593],{"className":154591,"code":154592,"language":5197,"meta":37},[5195],"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",[120,154594,154592],{"__ignoreMap":37},[14,154596,154597],{},"职责：",[77,154599,154600,154606,154612,154618],{},[80,154601,154602,154605],{},[120,154603,154604],{},"main.py","：程序入口。",[80,154607,154608,154611],{},[120,154609,154610],{},"file_utils.py","：读写 JSON。",[80,154613,154614,154617],{},[120,154615,154616],{},"sales_service.py","：统计销售数据。",[80,154619,154620,154623],{},[120,154621,154622],{},"chart_builder.py","：生成图表。",[65,154625,154627],{"id":154626},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,154629,154630],{},"语法基础：",[77,154632,154633,154636,154639,154642],{},[80,154634,154635],{},"会写变量、注释、输入输出。",[80,154637,154638],{},"会使用 int、float、str、bool。",[80,154640,154641],{},"会做类型转换。",[80,154643,154644],{},"会使用 f-string 格式化输出。",[14,154646,154647],{},"流程控制：",[77,154649,154650,154656,154662,154670],{},[80,154651,154652,154653,28396],{},"会写 ",[120,154654,154655],{},"if elif else",[80,154657,154652,154658,101015,154660,28396],{},[120,154659,108660],{},[120,154661,3034],{},[80,154663,154664,154665,101015,154667,28396],{},"理解 ",[120,154666,2062],{},[120,154668,154669],{},"continue",[80,154671,154672],{},"能写嵌套循环。",[14,154674,154675],{},"函数：",[77,154677,154678,154681,154684,154687],{},[80,154679,154680],{},"会定义和调用函数。",[80,154682,154683],{},"理解参数和返回值。",[80,154685,154686],{},"知道局部变量和全局变量。",[80,154688,154689],{},"会使用默认参数、关键字参数、不定长参数。",[14,154691,154692],{},"容器：",[77,154694,154695,154698,154701,154704,154707],{},[80,154696,154697],{},"会使用列表增删改查。",[80,154699,154700],{},"会遍历列表、字典。",[80,154702,154703],{},"会使用切片。",[80,154705,154706],{},"会用集合去重。",[80,154708,154709],{},"会处理列表嵌套字典。",[14,154711,154712],{},"文件和模块：",[77,154714,154715,154718,154721,154724,154727],{},[80,154716,154717],{},"会读写文本文件。",[80,154719,154720],{},"会读写 JSON。",[80,154722,154723],{},"会捕获常见异常。",[80,154725,154726],{},"会导入模块和第三方包。",[80,154728,154729],{},"会创建简单包结构。",[14,154731,154732],{},"项目能力：",[77,154734,154735,154738,154741,154744,154747],{},[80,154736,154737],{},"能把代码拆成函数。",[80,154739,154740],{},"能把数据保存到文件。",[80,154742,154743],{},"能处理用户输入错误。",[80,154745,154746],{},"能写一个完整菜单程序。",[80,154748,154749],{},"能用 pyecharts 生成图表。",[65,154751,154753],{"id":154752},"_1211-推荐练习顺序","12.11 推荐练习顺序",[77,154755,154756,154759,154762,154765,154768,154771,154774,154777],{},[80,154757,154758],{},"猜数字游戏。",[80,154760,154761],{},"ATM 菜单程序。",[80,154763,154764],{},"学生成绩统计。",[80,154766,154767],{},"学生管理系统函数版。",[80,154769,154770],{},"学生管理系统文件持久化版。",[80,154772,154773],{},"学生管理系统面向对象版。",[80,154775,154776],{},"销售数据统计。",[80,154778,154779],{},"销售数据可视化。",[65,154781,154783],{"id":154782},"_1212-常见学习误区","12.12 常见学习误区",[77,154785,154786,154789,154792,154795,154798,154801,154804],{},[80,154787,154788],{},"只看视频不敲代码。",[80,154790,154791],{},"一报错就复制错误去搜，不先读报错位置。",[80,154793,154794],{},"变量名随便写，后续自己看不懂。",[80,154796,154797],{},"所有代码都写在一个文件一个函数里。",[80,154799,154800],{},"不保存练习代码，复习时没有材料。",[80,154802,154803],{},"还没掌握列表字典就急着学框架。",[80,154805,154806],{},"不会读官方文档，只依赖教程。",[65,154808,154810],{"id":154809},"_1213-如何读报错","12.13 如何读报错",[14,154812,154813],{},"报错通常从下往上看最后几行。",[14,154815,15145],{},[114,154817,154820],{"className":154818,"code":154819,"language":5197,"meta":37},[5195],"ValueError: invalid literal for int() with base 10: 'abc'\n",[120,154821,154819],{"__ignoreMap":37},[14,154823,24610],{},[77,154825,154826,154832,154842],{},[80,154827,154828,154829,28396],{},"异常类型是 ",[120,154830,154831],{},"ValueError",[80,154833,107342,154834,154837,154838,154841],{},[120,154835,154836],{},"int()"," 无法把 ",[120,154839,154840],{},"'abc'"," 转成整数。",[80,154843,154844],{},"应该检查输入内容或增加异常处理。",[14,154846,154847],{},"再看文件名和行号：",[114,154849,154852],{"className":154850,"code":154851,"language":5197,"meta":37},[5195],"File \"main.py\", line 10, in \u003Cmodule>\n",[120,154853,154851],{"__ignoreMap":37},[14,154855,154856,154857,154859],{},"表示错误发生在 ",[120,154858,154604],{}," 第 10 行。",[65,154861,154863],{"id":154862},"_1214-后续学习方向","12.14 后续学习方向",[14,154865,154866],{},"Python 基础完成后，可以按兴趣选择方向：",[77,154868,154869,154881,154890,154902,154913,154922,154932],{},[80,154870,154871,154872,346,154875,346,154878,28396],{},"自动化办公：",[120,154873,154874],{},"openpyxl",[120,154876,154877],{},"python-docx",[120,154879,154880],{},"pdfplumber",[80,154882,154883,154884,346,154886,346,154888,28396],{},"数据分析：",[120,154885,100623],{},[120,154887,146182],{},[120,154889,146190],{},[80,154891,154892,154893,346,154896,346,154899,28396],{},"Web 后端：",[120,154894,154895],{},"Flask",[120,154897,154898],{},"FastAPI",[120,154900,154901],{},"Django",[80,154903,154904,154905,346,154907,346,154910,28396],{},"爬虫：",[120,154906,146167],{},[120,154908,154909],{},"BeautifulSoup",[120,154911,154912],{},"Scrapy",[80,154914,154915,154916,346,154918,154921],{},"测试开发：",[120,154917,146214],{},[120,154919,154920],{},"selenium","、接口测试。",[80,154923,154924,154925,346,154927,346,154929,28396],{},"人工智能：",[120,154926,100623],{},[120,154928,146182],{},[120,154930,154931],{},"pytorch",[80,154933,154934,154935,346,154937,346,154940,28396],{},"运维脚本：",[120,154936,145783],{},[120,154938,154939],{},"subprocess",[120,154941,154942],{},"paramiko",[14,154944,154945],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[65,154947,154949],{"id":154948},"_1215-结课练习","12.15 结课练习",[77,154951,154952,154955,154958,154961,154964,154967,154970,154973],{},[80,154953,154954],{},"完成函数版学生管理系统。",[80,154956,154957],{},"给学生管理系统增加 JSON 持久化。",[80,154959,154960],{},"给学生管理系统增加异常处理。",[80,154962,154963],{},"把学生管理系统改成面向对象版。",[80,154965,154966],{},"使用 pyecharts 绘制学生成绩柱状图。",[80,154968,154969],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[80,154971,154972],{},"按品类统计销售额并绘制柱状图。",[80,154974,154975],{},"写一份自己的 Python 学习路线图。",[5136,154977,154978],{},"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":37,"searchDepth":45,"depth":45,"links":154980},[154981,154982,154985,154986,154987,154993,154994,154995,154996,154997,154998,154999,155000,155001,155002],{"id":151697,"depth":45,"text":151698},{"id":151747,"depth":45,"text":151748,"children":154983},[154984],{"id":151751,"depth":1189,"text":151752},{"id":151790,"depth":45,"text":151791},{"id":153264,"depth":45,"text":153265},{"id":153602,"depth":45,"text":153603,"children":154988},[154989,154990,154991,154992],{"id":153606,"depth":1189,"text":153607},{"id":153746,"depth":1189,"text":153747},{"id":153836,"depth":1189,"text":153837},{"id":153922,"depth":1189,"text":153923},{"id":153963,"depth":45,"text":153964},{"id":154156,"depth":45,"text":154157},{"id":154393,"depth":45,"text":154394},{"id":154584,"depth":45,"text":154585},{"id":154626,"depth":45,"text":154627},{"id":154752,"depth":45,"text":154753},{"id":154782,"depth":45,"text":154783},{"id":154809,"depth":45,"text":154810},{"id":154862,"depth":45,"text":154863},{"id":154948,"depth":45,"text":154949},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151689,"description":47},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":155009,"title":155010,"body":155011,"description":47,"extension":48,"meta":157480,"navigation":50,"path":157481,"seo":157482,"stem":157483,"__hash__":157484},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155012,"toc":157455},[155013,155016,155020,155023,155026,155046,155049,155072,155075,155078,155100,155103,155125,155129,155132,155172,155175,155296,155300,155303,155343,155346,155370,155373,155377,155380,155394,155427,155430,155465,155468,155491,155494,155527,155530,155532,155538,155613,155616,155622,155639,155679,155683,155686,155732,155734,155772,155775,155810,155813,155848,155851,155883,155886,155905,155909,155913,156026,156028,156103,156107,156153,156156,156182,156191,156195,156198,156261,156269,156297,156301,156341,156406,156410,156413,156452,156455,156500,156503,156564,156568,156595,156598,156626,156629,156633,156637,156702,156705,156743,156746,156778,156782,156881,156885,156888,156961,156964,157012,157016,157022,157062,157065,157112,157115,157164,157168,157170,157184,157186,157367,157371,157398,157418,157425,157429,157446,157452],[10,155014,155010],{"id":155015},"_2-基础语法变量与字符串",[65,155017,155019],{"id":155018},"_21-注释","2.1 注释",[14,155021,155022],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155024,155025],{},"单行注释：",[114,155027,155029],{"className":30389,"code":155028,"language":30391,"meta":37,"style":37},"# 这是单行注释\nprint(\"hello\")\n",[120,155030,155031,155036],{"__ignoreMap":37},[123,155032,155033],{"class":125,"line":126},[123,155034,155035],{"class":192},"# 这是单行注释\n",[123,155037,155038,155040,155042,155044],{"class":125,"line":45},[123,155039,30426],{"class":182},[123,155041,134],{"class":133},[123,155043,5854],{"class":238},[123,155045,140],{"class":133},[14,155047,155048],{},"多行说明常用三引号：",[114,155050,155052],{"className":30389,"code":155051,"language":30391,"meta":37,"style":37},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[120,155053,155054,155058,155063,155068],{"__ignoreMap":37},[123,155055,155056],{"class":125,"line":126},[123,155057,95695],{"class":238},[123,155059,155060],{"class":125,"line":45},[123,155061,155062],{"class":238},"这是多行说明。\n",[123,155064,155065],{"class":125,"line":1189},[123,155066,155067],{"class":238},"常用于文件顶部说明、函数说明等。\n",[123,155069,155070],{"class":125,"line":1204},[123,155071,95695],{"class":238},[14,155073,155074],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155076,155077],{},"不好：",[114,155079,155081],{"className":30389,"code":155080,"language":30391,"meta":37,"style":37},"# age 加 1\nage = age + 1\n",[120,155082,155083,155088],{"__ignoreMap":37},[123,155084,155085],{"class":125,"line":126},[123,155086,155087],{"class":192},"# age 加 1\n",[123,155089,155090,155092,155094,155096,155098],{"class":125,"line":45},[123,155091,146543],{"class":133},[123,155093,179],{"class":129},[123,155095,15717],{"class":133},[123,155097,615],{"class":129},[123,155099,55710],{"class":182},[14,155101,155102],{},"较好：",[114,155104,155106],{"className":30389,"code":155105,"language":30391,"meta":37,"style":37},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[120,155107,155108,155113],{"__ignoreMap":37},[123,155109,155110],{"class":125,"line":126},[123,155111,155112],{"class":192},"# 用户过完生日后，年龄增加一岁\n",[123,155114,155115,155117,155119,155121,155123],{"class":125,"line":45},[123,155116,146543],{"class":133},[123,155118,179],{"class":129},[123,155120,15717],{"class":133},[123,155122,615],{"class":129},[123,155124,55710],{"class":182},[65,155126,155128],{"id":155127},"_22-字面量","2.2 字面量",[14,155130,155131],{},"字面量就是代码中直接写出来的数据。",[114,155133,155135],{"className":30389,"code":155134,"language":30391,"meta":37,"style":37},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[120,155136,155137,155144,155151,155158,155165],{"__ignoreMap":37},[123,155138,155139,155141],{"class":125,"line":126},[123,155140,445],{"class":182},[123,155142,155143],{"class":192},"          # 整数\n",[123,155145,155146,155148],{"class":125,"line":45},[123,155147,183],{"class":182},[123,155149,155150],{"class":192},"         # 小数\n",[123,155152,155153,155155],{"class":125,"line":1189},[123,155154,5854],{"class":238},[123,155156,155157],{"class":192},"      # 字符串\n",[123,155159,155160,155162],{"class":125,"line":1204},[123,155161,31487],{"class":182},[123,155163,155164],{"class":192},"         # 布尔值\n",[123,155166,155167,155169],{"class":125,"line":1210},[123,155168,95683],{"class":182},[123,155170,155171],{"class":192},"         # 空值\n",[14,155173,155174],{},"常见字面量类型：",[271,155176,155177,155187],{},[274,155178,155179],{},[277,155180,155181,155183,155185],{},[280,155182,23747],{},[280,155184,27503],{},[280,155186,25880],{},[318,155188,155189,155200,155211,155222,155234,155246,155258,155271,155283],{},[277,155190,155191,155193,155197],{},[323,155192,137],{},[323,155194,155195],{},[120,155196,445],{},[323,155198,155199],{},"整数",[277,155201,155202,155204,155208],{},[323,155203,173],{},[323,155205,155206],{},[120,155207,183],{},[323,155209,155210],{},"浮点数",[277,155212,155213,155215,155219],{},[323,155214,1309],{},[323,155216,155217],{},[120,155218,5854],{},[323,155220,155221],{},"字符串",[277,155223,155224,155226,155232],{},[323,155225,1364],{},[323,155227,155228,346,155230],{},[120,155229,31487],{},[120,155231,33998],{},[323,155233,66026],{},[277,155235,155236,155239,155243],{},[323,155237,155238],{},"NoneType",[323,155240,155241],{},[120,155242,95683],{},[323,155244,155245],{},"空值",[277,155247,155248,155250,155255],{},[323,155249,154067],{},[323,155251,155252],{},[120,155253,155254],{},"[1, 2, 3]",[323,155256,155257],{},"列表",[277,155259,155260,155263,155268],{},[323,155261,155262],{},"tuple",[323,155264,155265],{},[120,155266,155267],{},"(1, 2, 3)",[323,155269,155270],{},"元组",[277,155272,155273,155275,155280],{},[323,155274,114543],{},[323,155276,155277],{},[120,155278,155279],{},"{\"name\": \"张三\"}",[323,155281,155282],{},"字典",[277,155284,155285,155288,155293],{},[323,155286,155287],{},"set",[323,155289,155290],{},[120,155291,155292],{},"{1, 2, 3}",[323,155294,155295],{},"集合",[65,155297,155299],{"id":155298},"_23-变量","2.3 变量",[14,155301,155302],{},"变量是保存数据的名字。",[114,155304,155306],{"className":30389,"code":155305,"language":30391,"meta":37,"style":37},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[120,155307,155308,155316,155324,155334],{"__ignoreMap":37},[123,155309,155310,155312,155314],{"class":125,"line":126},[123,155311,146533],{"class":133},[123,155313,179],{"class":129},[123,155315,149350],{"class":238},[123,155317,155318,155320,155322],{"class":125,"line":45},[123,155319,146543],{"class":133},[123,155321,179],{"class":129},[123,155323,146548],{"class":182},[123,155325,155326,155329,155331],{"class":125,"line":1189},[123,155327,155328],{"class":133},"height ",[123,155330,179],{"class":129},[123,155332,155333],{"class":182}," 1.75\n",[123,155335,155336,155339,155341],{"class":125,"line":1204},[123,155337,155338],{"class":133},"is_student ",[123,155340,179],{"class":129},[123,155342,153596],{"class":182},[14,155344,155345],{},"Python 的变量不需要提前声明类型：",[114,155347,155349],{"className":30389,"code":155348,"language":30391,"meta":37,"style":37},"score = 100\nscore = \"满分\"\n",[120,155350,155351,155361],{"__ignoreMap":37},[123,155352,155353,155356,155358],{"class":125,"line":126},[123,155354,155355],{"class":133},"score ",[123,155357,179],{"class":129},[123,155359,155360],{"class":182}," 100\n",[123,155362,155363,155365,155367],{"class":125,"line":45},[123,155364,155355],{"class":133},[123,155366,179],{"class":129},[123,155368,155369],{"class":238}," \"满分\"\n",[14,155371,155372],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[65,155374,155376],{"id":155375},"_24-变量命名规则","2.4 变量命名规则",[14,155378,155379],{},"硬性规则：",[77,155381,155382,155385,155388,155391],{},[80,155383,155384],{},"只能由字母、数字、下划线组成。",[80,155386,155387],{},"不能以数字开头。",[80,155389,155390],{},"不能使用 Python 关键字。",[80,155392,155393],{},"区分大小写。",[114,155395,155397],{"className":30389,"code":155396,"language":30391,"meta":37,"style":37},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[120,155398,155399,155408,155417],{"__ignoreMap":37},[123,155400,155401,155404,155406],{"class":125,"line":126},[123,155402,155403],{"class":133},"user_name ",[123,155405,179],{"class":129},[123,155407,146538],{"class":238},[123,155409,155410,155413,155415],{"class":125,"line":45},[123,155411,155412],{"class":133},"age2 ",[123,155414,179],{"class":129},[123,155416,146548],{"class":182},[123,155418,155419,155422,155424],{"class":125,"line":1189},[123,155420,155421],{"class":133},"_token ",[123,155423,179],{"class":129},[123,155425,155426],{"class":238}," \"abc\"\n",[14,155428,155429],{},"错误写法：",[114,155431,155433],{"className":30389,"code":155432,"language":30391,"meta":37,"style":37},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[120,155434,155435,155444,155456],{"__ignoreMap":37},[123,155436,155437,155440,155442],{"class":125,"line":126},[123,155438,155439],{"class":77414},"2age",[123,155441,13574],{"class":129},[123,155443,146548],{"class":182},[123,155445,155446,155448,155450,155452,155454],{"class":125,"line":45},[123,155447,131581],{"class":133},[123,155449,666],{"class":129},[123,155451,146533],{"class":133},[123,155453,179],{"class":129},[123,155455,146538],{"class":238},[123,155457,155458,155460,155462],{"class":125,"line":1189},[123,155459,14704],{"class":129},[123,155461,13574],{"class":129},[123,155463,155464],{"class":238}," \"一班\"\n",[14,155466,155467],{},"查看关键字：",[114,155469,155471],{"className":30389,"code":155470,"language":30391,"meta":37,"style":37},"import keyword\n\nprint(keyword.kwlist)\n",[120,155472,155473,155480,155484],{"__ignoreMap":37},[123,155474,155475,155477],{"class":125,"line":126},[123,155476,30403],{"class":129},[123,155478,155479],{"class":133}," keyword\n",[123,155481,155482],{"class":125,"line":45},[123,155483,2409],{"emptyLinePlaceholder":50},[123,155485,155486,155488],{"class":125,"line":1189},[123,155487,30426],{"class":182},[123,155489,155490],{"class":133},"(keyword.kwlist)\n",[14,155492,155493],{},"推荐命名风格：",[114,155495,155497],{"className":30389,"code":155496,"language":30391,"meta":37,"style":37},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[120,155498,155499,155508,155518],{"__ignoreMap":37},[123,155500,155501,155504,155506],{"class":125,"line":126},[123,155502,155503],{"class":133},"student_name ",[123,155505,179],{"class":129},[123,155507,149350],{"class":238},[123,155509,155510,155513,155515],{"class":125,"line":45},[123,155511,155512],{"class":133},"total_price ",[123,155514,179],{"class":129},[123,155516,155517],{"class":182}," 99.8\n",[123,155519,155520,155523,155525],{"class":125,"line":1189},[123,155521,155522],{"class":133},"is_finished ",[123,155524,179],{"class":129},[123,155526,125804],{"class":182},[14,155528,155529],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[65,155531,50743],{"id":50742},[14,155533,104363,155534,155537],{},[120,155535,155536],{},"type()"," 查看数据类型：",[114,155539,155541],{"className":30389,"code":155540,"language":30391,"meta":37,"style":37},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[120,155542,155543,155557,155571,155585,155599],{"__ignoreMap":37},[123,155544,155545,155547,155549,155551,155553,155555],{"class":125,"line":126},[123,155546,30426],{"class":182},[123,155548,134],{"class":133},[123,155550,103104],{"class":182},[123,155552,134],{"class":133},[123,155554,445],{"class":182},[123,155556,30508],{"class":133},[123,155558,155559,155561,155563,155565,155567,155569],{"class":125,"line":45},[123,155560,30426],{"class":182},[123,155562,134],{"class":133},[123,155564,103104],{"class":182},[123,155566,134],{"class":133},[123,155568,183],{"class":182},[123,155570,30508],{"class":133},[123,155572,155573,155575,155577,155579,155581,155583],{"class":125,"line":1189},[123,155574,30426],{"class":182},[123,155576,134],{"class":133},[123,155578,103104],{"class":182},[123,155580,134],{"class":133},[123,155582,5854],{"class":238},[123,155584,30508],{"class":133},[123,155586,155587,155589,155591,155593,155595,155597],{"class":125,"line":1204},[123,155588,30426],{"class":182},[123,155590,134],{"class":133},[123,155592,103104],{"class":182},[123,155594,134],{"class":133},[123,155596,31487],{"class":182},[123,155598,30508],{"class":133},[123,155600,155601,155603,155605,155607,155609,155611],{"class":125,"line":1210},[123,155602,30426],{"class":182},[123,155604,134],{"class":133},[123,155606,103104],{"class":182},[123,155608,134],{"class":133},[123,155610,95683],{"class":182},[123,155612,30508],{"class":133},[14,155614,155615],{},"输出类似：",[114,155617,155620],{"className":155618,"code":155619,"language":5197,"meta":37},[5195],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[120,155621,155619],{"__ignoreMap":37},[14,155623,9035,155624,107280,155626,155628,155629,155631,155632,21510,155634,155631,155636,155638],{},[120,155625,1364],{},[120,155627,137],{}," 的子类，",[120,155630,31487],{}," 可以当作 ",[120,155633,351],{},[120,155635,33998],{},[120,155637,325],{},"，但业务代码中不要滥用。",[114,155640,155642],{"className":30389,"code":155641,"language":30391,"meta":37,"style":37},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[120,155643,155644,155662],{"__ignoreMap":37},[123,155645,155646,155648,155650,155652,155654,155656,155659],{"class":125,"line":126},[123,155647,30426],{"class":182},[123,155649,134],{"class":133},[123,155651,31487],{"class":182},[123,155653,45577],{"class":129},[123,155655,25129],{"class":182},[123,155657,155658],{"class":133},")   ",[123,155660,155661],{"class":192},"# 2\n",[123,155663,155664,155666,155668,155670,155672,155674,155676],{"class":125,"line":45},[123,155665,30426],{"class":182},[123,155667,134],{"class":133},[123,155669,33998],{"class":182},[123,155671,45577],{"class":129},[123,155673,25129],{"class":182},[123,155675,45819],{"class":133},[123,155677,155678],{"class":192},"# 1\n",[65,155680,155682],{"id":155681},"_26-类型转换","2.6 类型转换",[14,155684,155685],{},"常用转换函数：",[114,155687,155689],{"className":30389,"code":155688,"language":30391,"meta":37,"style":37},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[120,155690,155691,155701,155712,155722],{"__ignoreMap":37},[123,155692,155693,155695,155697,155699],{"class":125,"line":126},[123,155694,137],{"class":182},[123,155696,134],{"class":133},[123,155698,54327],{"class":238},[123,155700,140],{"class":133},[123,155702,155703,155705,155707,155710],{"class":125,"line":45},[123,155704,173],{"class":182},[123,155706,134],{"class":133},[123,155708,155709],{"class":238},"\"3.14\"",[123,155711,140],{"class":133},[123,155713,155714,155716,155718,155720],{"class":125,"line":1189},[123,155715,1309],{"class":182},[123,155717,134],{"class":133},[123,155719,445],{"class":182},[123,155721,140],{"class":133},[123,155723,155724,155726,155728,155730],{"class":125,"line":1204},[123,155725,1364],{"class":182},[123,155727,134],{"class":133},[123,155729,351],{"class":182},[123,155731,140],{"class":133},[14,155733,15145],{},[114,155735,155737],{"className":30389,"code":155736,"language":30391,"meta":37,"style":37},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[120,155738,155739,155748,155759],{"__ignoreMap":37},[123,155740,155741,155743,155745],{"class":125,"line":126},[123,155742,146543],{"class":133},[123,155744,179],{"class":129},[123,155746,155747],{"class":238}," \"18\"\n",[123,155749,155750,155752,155754,155756],{"class":125,"line":45},[123,155751,146543],{"class":133},[123,155753,179],{"class":129},[123,155755,2391],{"class":182},[123,155757,155758],{"class":133},"(age)\n",[123,155760,155761,155763,155766,155768,155770],{"class":125,"line":1189},[123,155762,30426],{"class":182},[123,155764,155765],{"class":133},"(age ",[123,155767,615],{"class":129},[123,155769,25129],{"class":182},[123,155771,140],{"class":133},[14,155773,155774],{},"输入得到的内容永远是字符串：",[114,155776,155778],{"className":30389,"code":155777,"language":30391,"meta":37,"style":37},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[120,155779,155780,155796],{"__ignoreMap":37},[123,155781,155782,155785,155787,155789,155791,155794],{"class":125,"line":126},[123,155783,155784],{"class":133},"num ",[123,155786,179],{"class":129},[123,155788,60616],{"class":182},[123,155790,134],{"class":133},[123,155792,155793],{"class":238},"\"请输入数字:\"",[123,155795,140],{"class":133},[123,155797,155798,155800,155802,155804,155807],{"class":125,"line":45},[123,155799,30426],{"class":182},[123,155801,134],{"class":133},[123,155803,103104],{"class":182},[123,155805,155806],{"class":133},"(num))  ",[123,155808,155809],{"class":192},"# str\n",[14,155811,155812],{},"如果要做数学运算，必须转换：",[114,155814,155816],{"className":30389,"code":155815,"language":30391,"meta":37,"style":37},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[120,155817,155818,155836],{"__ignoreMap":37},[123,155819,155820,155822,155824,155826,155828,155830,155832,155834],{"class":125,"line":126},[123,155821,155784],{"class":133},[123,155823,179],{"class":129},[123,155825,2391],{"class":182},[123,155827,134],{"class":133},[123,155829,53832],{"class":182},[123,155831,134],{"class":133},[123,155833,155793],{"class":238},[123,155835,30508],{"class":133},[123,155837,155838,155840,155842,155844,155846],{"class":125,"line":45},[123,155839,30426],{"class":182},[123,155841,45630],{"class":133},[123,155843,615],{"class":129},[123,155845,2047],{"class":182},[123,155847,140],{"class":133},[14,155849,155850],{},"常见错误：",[114,155852,155854],{"className":30389,"code":155853,"language":30391,"meta":37,"style":37},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[120,155855,155856,155869],{"__ignoreMap":37},[123,155857,155858,155860,155862,155864,155866],{"class":125,"line":126},[123,155859,137],{"class":182},[123,155861,134],{"class":133},[123,155863,155709],{"class":238},[123,155865,155658],{"class":133},[123,155867,155868],{"class":192},"# 错误\n",[123,155870,155871,155873,155875,155878,155881],{"class":125,"line":45},[123,155872,137],{"class":182},[123,155874,134],{"class":133},[123,155876,155877],{"class":238},"\"abc\"",[123,155879,155880],{"class":133},")    ",[123,155882,155868],{"class":192},[14,155884,155885],{},"正确写法：",[114,155887,155889],{"className":30389,"code":155888,"language":30391,"meta":37,"style":37},"num = float(\"3.14\")\n",[120,155890,155891],{"__ignoreMap":37},[123,155892,155893,155895,155897,155899,155901,155903],{"class":125,"line":126},[123,155894,155784],{"class":133},[123,155896,179],{"class":129},[123,155898,109794],{"class":182},[123,155900,134],{"class":133},[123,155902,155709],{"class":238},[123,155904,140],{"class":133},[65,155906,155908],{"id":155907},"_27-运算符","2.7 运算符",[94,155910,155912],{"id":155911},"_271-算术运算符","2.7.1 算术运算符",[271,155914,155915,155926],{},[274,155916,155917],{},[277,155918,155919,155922,155924],{},[280,155920,155921],{},"运算符",[280,155923,25880],{},[280,155925,27503],{},[318,155927,155928,155942,155956,155970,155984,155998,156012],{},[277,155929,155930,155934,155937],{},[323,155931,155932],{},[120,155933,615],{},[323,155935,155936],{},"加法",[323,155938,155939],{},[120,155940,155941],{},"1 + 2",[277,155943,155944,155948,155951],{},[323,155945,155946],{},[120,155947,666],{},[323,155949,155950],{},"减法",[323,155952,155953],{},[120,155954,155955],{},"5 - 3",[277,155957,155958,155962,155965],{},[323,155959,155960],{},[120,155961,589],{},[323,155963,155964],{},"乘法",[323,155966,155967],{},[120,155968,155969],{},"2 * 3",[277,155971,155972,155976,155979],{},[323,155973,155974],{},[120,155975,718],{},[323,155977,155978],{},"除法，结果是浮点数",[323,155980,155981],{},[120,155982,155983],{},"5 \u002F 2",[277,155985,155986,155990,155993],{},[323,155987,155988],{},[120,155989,33340],{},[323,155991,155992],{},"整除",[323,155994,155995],{},[120,155996,155997],{},"5 \u002F\u002F 2",[277,155999,156000,156004,156007],{},[323,156001,156002],{},[120,156003,462],{},[323,156005,156006],{},"取余",[323,156008,156009],{},[120,156010,156011],{},"5 % 2",[277,156013,156014,156018,156021],{},[323,156015,156016],{},[120,156017,10671],{},[323,156019,156020],{},"幂运算",[323,156022,156023],{},[120,156024,156025],{},"2 ** 3",[14,156027,15145],{},[114,156029,156031],{"className":30389,"code":156030,"language":30391,"meta":37,"style":37},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[120,156032,156033,156051,156068,156085],{"__ignoreMap":37},[123,156034,156035,156037,156039,156041,156044,156046,156048],{"class":125,"line":126},[123,156036,30426],{"class":182},[123,156038,134],{"class":133},[123,156040,453],{"class":182},[123,156042,156043],{"class":129}," \u002F",[123,156045,14765],{"class":182},[123,156047,155658],{"class":133},[123,156049,156050],{"class":192},"# 2.5\n",[123,156052,156053,156055,156057,156059,156062,156064,156066],{"class":125,"line":45},[123,156054,30426],{"class":182},[123,156056,134],{"class":133},[123,156058,453],{"class":182},[123,156060,156061],{"class":129}," \u002F\u002F",[123,156063,14765],{"class":182},[123,156065,45819],{"class":133},[123,156067,155661],{"class":192},[123,156069,156070,156072,156074,156076,156079,156081,156083],{"class":125,"line":1189},[123,156071,30426],{"class":182},[123,156073,134],{"class":133},[123,156075,453],{"class":182},[123,156077,156078],{"class":129}," %",[123,156080,14765],{"class":182},[123,156082,155658],{"class":133},[123,156084,155678],{"class":192},[123,156086,156087,156089,156091,156093,156096,156098,156100],{"class":125,"line":1204},[123,156088,30426],{"class":182},[123,156090,134],{"class":133},[123,156092,211],{"class":182},[123,156094,156095],{"class":129}," **",[123,156097,78081],{"class":182},[123,156099,45819],{"class":133},[123,156101,156102],{"class":192},"# 8\n",[94,156104,156106],{"id":156105},"_272-赋值运算符","2.7.2 赋值运算符",[114,156108,156110],{"className":30389,"code":156109,"language":30391,"meta":37,"style":37},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[120,156111,156112,156120,156128,156136,156144],{"__ignoreMap":37},[123,156113,156114,156116,156118],{"class":125,"line":126},[123,156115,155784],{"class":133},[123,156117,179],{"class":129},[123,156119,58439],{"class":182},[123,156121,156122,156124,156126],{"class":125,"line":45},[123,156123,155784],{"class":133},[123,156125,9487],{"class":129},[123,156127,54438],{"class":182},[123,156129,156130,156132,156134],{"class":125,"line":1189},[123,156131,155784],{"class":133},[123,156133,150249],{"class":129},[123,156135,47734],{"class":182},[123,156137,156138,156140,156142],{"class":125,"line":1204},[123,156139,155784],{"class":133},[123,156141,137145],{"class":129},[123,156143,120033],{"class":182},[123,156145,156146,156148,156151],{"class":125,"line":1210},[123,156147,155784],{"class":133},[123,156149,156150],{"class":129},"\u002F=",[123,156152,47734],{"class":182},[14,156154,156155],{},"等价关系：",[114,156157,156159],{"className":30389,"code":156158,"language":30391,"meta":37,"style":37},"num += 1\nnum = num + 1\n",[120,156160,156161,156169],{"__ignoreMap":37},[123,156162,156163,156165,156167],{"class":125,"line":126},[123,156164,155784],{"class":133},[123,156166,9487],{"class":129},[123,156168,55710],{"class":182},[123,156170,156171,156173,156175,156178,156180],{"class":125,"line":45},[123,156172,155784],{"class":133},[123,156174,179],{"class":129},[123,156176,156177],{"class":133}," num ",[123,156179,615],{"class":129},[123,156181,55710],{"class":182},[14,156183,156184,156185,101015,156188,28396],{},"Python 没有 ",[120,156186,156187],{},"num++",[120,156189,156190],{},"num--",[94,156192,156194],{"id":156193},"_273-比较运算符","2.7.3 比较运算符",[14,156196,156197],{},"比较运算结果是布尔值。",[114,156199,156201],{"className":30389,"code":156200,"language":30391,"meta":37,"style":37},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[120,156202,156203,156217,156232,156246],{"__ignoreMap":37},[123,156204,156205,156207,156209,156211,156213,156215],{"class":125,"line":126},[123,156206,30426],{"class":182},[123,156208,134],{"class":133},[123,156210,580],{"class":182},[123,156212,26233],{"class":129},[123,156214,2157],{"class":182},[123,156216,140],{"class":133},[123,156218,156219,156221,156223,156225,156228,156230],{"class":125,"line":45},[123,156220,30426],{"class":182},[123,156222,134],{"class":133},[123,156224,580],{"class":182},[123,156226,156227],{"class":129}," >=",[123,156229,2047],{"class":182},[123,156231,140],{"class":133},[123,156233,156234,156236,156238,156240,156242,156244],{"class":125,"line":1189},[123,156235,30426],{"class":182},[123,156237,134],{"class":133},[123,156239,580],{"class":182},[123,156241,101556],{"class":129},[123,156243,2092],{"class":182},[123,156245,140],{"class":133},[123,156247,156248,156250,156252,156254,156257,156259],{"class":125,"line":1204},[123,156249,30426],{"class":182},[123,156251,134],{"class":133},[123,156253,580],{"class":182},[123,156255,156256],{"class":129}," !=",[123,156258,2092],{"class":182},[123,156260,140],{"class":133},[14,156262,156263,156264,156266,156267,28396],{},"注意：判断相等用 ",[120,156265,2958],{},"，赋值用 ",[120,156268,179],{},[114,156270,156272],{"className":30389,"code":156271,"language":30391,"meta":37,"style":37},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[120,156273,156274,156286],{"__ignoreMap":37},[123,156275,156276,156278,156280,156283],{"class":125,"line":126},[123,156277,146543],{"class":133},[123,156279,179],{"class":129},[123,156281,156282],{"class":182}," 18",[123,156284,156285],{"class":192},"       # 赋值\n",[123,156287,156288,156290,156292,156294],{"class":125,"line":45},[123,156289,146543],{"class":133},[123,156291,2958],{"class":129},[123,156293,156282],{"class":182},[123,156295,156296],{"class":192},"      # 判断是否相等\n",[94,156298,156300],{"id":156299},"_274-逻辑运算符","2.7.4 逻辑运算符",[271,156302,156303,156311],{},[274,156304,156305],{},[277,156306,156307,156309],{},[280,156308,155921],{},[280,156310,25880],{},[318,156312,156313,156322,156331],{},[277,156314,156315,156319],{},[323,156316,156317],{},[120,156318,30473],{},[323,156320,156321],{},"并且",[277,156323,156324,156328],{},[323,156325,156326],{},[120,156327,115087],{},[323,156329,156330],{},"或者",[277,156332,156333,156338],{},[323,156334,156335],{},[120,156336,156337],{},"not",[323,156339,156340],{},"取反",[114,156342,156344],{"className":30389,"code":156343,"language":30391,"meta":37,"style":37},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[120,156345,156346,156354,156363,156367,156382,156396],{"__ignoreMap":37},[123,156347,156348,156350,156352],{"class":125,"line":126},[123,156349,146543],{"class":133},[123,156351,179],{"class":129},[123,156353,88076],{"class":182},[123,156355,156356,156359,156361],{"class":125,"line":45},[123,156357,156358],{"class":133},"has_ticket ",[123,156360,179],{"class":129},[123,156362,153596],{"class":182},[123,156364,156365],{"class":125,"line":1189},[123,156366,2409],{"emptyLinePlaceholder":50},[123,156368,156369,156371,156373,156375,156377,156379],{"class":125,"line":1204},[123,156370,30426],{"class":182},[123,156372,155765],{"class":133},[123,156374,1719],{"class":129},[123,156376,156282],{"class":182},[123,156378,120426],{"class":129},[123,156380,156381],{"class":133}," has_ticket)\n",[123,156383,156384,156386,156388,156390,156392,156394],{"class":125,"line":1210},[123,156385,30426],{"class":182},[123,156387,155765],{"class":133},[123,156389,1044],{"class":129},[123,156391,156282],{"class":182},[123,156393,114198],{"class":129},[123,156395,156381],{"class":133},[123,156397,156398,156400,156402,156404],{"class":125,"line":1224},[123,156399,30426],{"class":182},[123,156401,134],{"class":133},[123,156403,156337],{"class":129},[123,156405,156381],{"class":133},[65,156407,156409],{"id":156408},"_28-字符串定义","2.8 字符串定义",[14,156411,156412],{},"三种常见写法：",[114,156414,156416],{"className":30389,"code":156415,"language":30391,"meta":37,"style":37},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[120,156417,156418,156428,156437,156447],{"__ignoreMap":37},[123,156419,156420,156423,156425],{"class":125,"line":126},[123,156421,156422],{"class":133},"name1 ",[123,156424,179],{"class":129},[123,156426,156427],{"class":238}," '小明'\n",[123,156429,156430,156433,156435],{"class":125,"line":45},[123,156431,156432],{"class":133},"name2 ",[123,156434,179],{"class":129},[123,156436,149350],{"class":238},[123,156438,156439,156442,156444],{"class":125,"line":1189},[123,156440,156441],{"class":133},"text ",[123,156443,179],{"class":129},[123,156445,156446],{"class":238}," \"\"\"这是多行字符串\n",[123,156448,156449],{"class":125,"line":1204},[123,156450,156451],{"class":238},"可以换行\"\"\"\n",[14,156453,156454],{},"字符串中包含引号：",[114,156456,156458],{"className":30389,"code":156457,"language":30391,"meta":37,"style":37},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[120,156459,156460,156470,156480],{"__ignoreMap":37},[123,156461,156462,156465,156467],{"class":125,"line":126},[123,156463,156464],{"class":133},"msg ",[123,156466,179],{"class":129},[123,156468,156469],{"class":238}," \"他说:'你好'\"\n",[123,156471,156472,156475,156477],{"class":125,"line":45},[123,156473,156474],{"class":133},"msg2 ",[123,156476,179],{"class":129},[123,156478,156479],{"class":238}," '他说:\"你好\"'\n",[123,156481,156482,156485,156487,156490,156493,156496,156498],{"class":125,"line":1189},[123,156483,156484],{"class":133},"msg3 ",[123,156486,179],{"class":129},[123,156488,156489],{"class":238}," \"他说:",[123,156491,156492],{"class":182},"\\\"",[123,156494,156495],{"class":238},"你好",[123,156497,156492],{"class":182},[123,156499,25144],{"class":238},[14,156501,156502],{},"常见转义字符：",[271,156504,156505,156514],{},[274,156506,156507],{},[277,156508,156509,156512],{},[280,156510,156511],{},"写法",[280,156513,100697],{},[318,156515,156516,156526,156535,156545,156554],{},[277,156517,156518,156523],{},[323,156519,156520],{},[120,156521,156522],{},"\\n",[323,156524,156525],{},"换行",[277,156527,156528,156532],{},[323,156529,156530],{},[120,156531,1240],{},[323,156533,156534],{},"制表符",[277,156536,156537,156542],{},[323,156538,156539],{},[120,156540,156541],{},"\\\\",[323,156543,156544],{},"反斜杠",[277,156546,156547,156551],{},[323,156548,156549],{},[120,156550,156492],{},[323,156552,156553],{},"双引号",[277,156555,156556,156561],{},[323,156557,156558],{},[120,156559,156560],{},"\\'",[323,156562,156563],{},"单引号",[65,156565,156567],{"id":156566},"_29-字符串拼接","2.9 字符串拼接",[114,156569,156571],{"className":30389,"code":156570,"language":30391,"meta":37,"style":37},"name = \"小明\"\nprint(\"你好，\" + name)\n",[120,156572,156573,156581],{"__ignoreMap":37},[123,156574,156575,156577,156579],{"class":125,"line":126},[123,156576,146533],{"class":133},[123,156578,179],{"class":129},[123,156580,149350],{"class":238},[123,156582,156583,156585,156587,156590,156592],{"class":125,"line":45},[123,156584,30426],{"class":182},[123,156586,134],{"class":133},[123,156588,156589],{"class":238},"\"你好，\"",[123,156591,45577],{"class":129},[123,156593,156594],{"class":133}," name)\n",[14,156596,156597],{},"字符串只能和字符串拼接：",[114,156599,156601],{"className":30389,"code":156600,"language":30391,"meta":37,"style":37},"age = 18\nprint(\"年龄:\" + str(age))\n",[120,156602,156603,156611],{"__ignoreMap":37},[123,156604,156605,156607,156609],{"class":125,"line":126},[123,156606,146543],{"class":133},[123,156608,179],{"class":129},[123,156610,146548],{"class":182},[123,156612,156613,156615,156617,156619,156621,156623],{"class":125,"line":45},[123,156614,30426],{"class":182},[123,156616,134],{"class":133},[123,156618,146514],{"class":238},[123,156620,45577],{"class":129},[123,156622,73930],{"class":182},[123,156624,156625],{"class":133},"(age))\n",[14,156627,156628],{},"更推荐使用格式化字符串。",[65,156630,156632],{"id":156631},"_210-字符串格式化","2.10 字符串格式化",[94,156634,156636],{"id":156635},"_2101-百分号格式化","2.10.1 百分号格式化",[114,156638,156640],{"className":30389,"code":156639,"language":30391,"meta":37,"style":37},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[120,156641,156642,156650,156658,156667,156671],{"__ignoreMap":37},[123,156643,156644,156646,156648],{"class":125,"line":126},[123,156645,146533],{"class":133},[123,156647,179],{"class":129},[123,156649,149350],{"class":238},[123,156651,156652,156654,156656],{"class":125,"line":45},[123,156653,146543],{"class":133},[123,156655,179],{"class":129},[123,156657,146548],{"class":182},[123,156659,156660,156662,156664],{"class":125,"line":1189},[123,156661,155355],{"class":133},[123,156663,179],{"class":129},[123,156665,156666],{"class":182}," 95.5\n",[123,156668,156669],{"class":125,"line":1204},[123,156670,2409],{"emptyLinePlaceholder":50},[123,156672,156673,156675,156677,156680,156683,156686,156689,156692,156695,156697,156699],{"class":125,"line":1210},[123,156674,30426],{"class":182},[123,156676,134],{"class":133},[123,156678,156679],{"class":238},"\"姓名:",[123,156681,156682],{"class":182},"%s",[123,156684,156685],{"class":238}," 年龄:",[123,156687,156688],{"class":182},"%d",[123,156690,156691],{"class":238}," 分数:",[123,156693,156694],{"class":182},"%.1f",[123,156696,385],{"class":238},[123,156698,156078],{"class":129},[123,156700,156701],{"class":133}," (name, age, score))\n",[14,156703,156704],{},"常用占位符：",[271,156706,156707,156716],{},[274,156708,156709],{},[277,156710,156711,156714],{},[280,156712,156713],{},"占位符",[280,156715,25880],{},[318,156717,156718,156726,156734],{},[277,156719,156720,156724],{},[323,156721,156722],{},[120,156723,156682],{},[323,156725,155221],{},[277,156727,156728,156732],{},[323,156729,156730],{},[120,156731,156688],{},[323,156733,155199],{},[277,156735,156736,156741],{},[323,156737,156738],{},[120,156739,156740],{},"%f",[323,156742,155210],{},[14,156744,156745],{},"精度控制：",[114,156747,156749],{"className":30389,"code":156748,"language":30391,"meta":37,"style":37},"price = 12.3456\nprint(\"%.2f\" % price)\n",[120,156750,156751,156760],{"__ignoreMap":37},[123,156752,156753,156755,156757],{"class":125,"line":126},[123,156754,146678],{"class":133},[123,156756,179],{"class":129},[123,156758,156759],{"class":182}," 12.3456\n",[123,156761,156762,156764,156766,156768,156771,156773,156775],{"class":125,"line":45},[123,156763,30426],{"class":182},[123,156765,134],{"class":133},[123,156767,385],{"class":238},[123,156769,156770],{"class":182},"%.2f",[123,156772,385],{"class":238},[123,156774,156078],{"class":129},[123,156776,156777],{"class":133}," price)\n",[94,156779,156781],{"id":156780},"_2102-format方法","2.10.2 format方法",[114,156783,156785],{"className":30389,"code":156784,"language":30391,"meta":37,"style":37},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[120,156786,156787,156795,156803,156807,156826,156846],{"__ignoreMap":37},[123,156788,156789,156791,156793],{"class":125,"line":126},[123,156790,146533],{"class":133},[123,156792,179],{"class":129},[123,156794,149350],{"class":238},[123,156796,156797,156799,156801],{"class":125,"line":45},[123,156798,146543],{"class":133},[123,156800,179],{"class":129},[123,156802,146548],{"class":182},[123,156804,156805],{"class":125,"line":1189},[123,156806,2409],{"emptyLinePlaceholder":50},[123,156808,156809,156811,156813,156815,156817,156819,156821,156823],{"class":125,"line":1204},[123,156810,30426],{"class":182},[123,156812,134],{"class":133},[123,156814,156679],{"class":238},[123,156816,32470],{"class":182},[123,156818,156685],{"class":238},[123,156820,32470],{"class":182},[123,156822,385],{"class":238},[123,156824,156825],{"class":133},".format(name, age))\n",[123,156827,156828,156830,156832,156834,156837,156839,156842,156844],{"class":125,"line":1210},[123,156829,30426],{"class":182},[123,156831,134],{"class":133},[123,156833,156679],{"class":238},[123,156835,156836],{"class":182},"{0}",[123,156838,156685],{"class":238},[123,156840,156841],{"class":182},"{1}",[123,156843,385],{"class":238},[123,156845,156825],{"class":133},[123,156847,156848,156850,156852,156854,156857,156859,156862,156864,156867,156869,156871,156874,156876,156878],{"class":125,"line":1224},[123,156849,30426],{"class":182},[123,156851,134],{"class":133},[123,156853,156679],{"class":238},[123,156855,156856],{"class":182},"{name}",[123,156858,156685],{"class":238},[123,156860,156861],{"class":182},"{age}",[123,156863,385],{"class":238},[123,156865,156866],{"class":133},".format(",[123,156868,79821],{"class":5226},[123,156870,179],{"class":129},[123,156872,156873],{"class":133},"name, ",[123,156875,70232],{"class":5226},[123,156877,179],{"class":129},[123,156879,156880],{"class":133},"age))\n",[94,156882,156884],{"id":156883},"_2103-f-string","2.10.3 f-string",[14,156886,156887],{},"推荐写法：",[114,156889,156891],{"className":30389,"code":156890,"language":30391,"meta":37,"style":37},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[120,156892,156893,156901,156909,156917,156921],{"__ignoreMap":37},[123,156894,156895,156897,156899],{"class":125,"line":126},[123,156896,146533],{"class":133},[123,156898,179],{"class":129},[123,156900,149350],{"class":238},[123,156902,156903,156905,156907],{"class":125,"line":45},[123,156904,146543],{"class":133},[123,156906,179],{"class":129},[123,156908,146548],{"class":182},[123,156910,156911,156913,156915],{"class":125,"line":1189},[123,156912,155355],{"class":133},[123,156914,179],{"class":129},[123,156916,156666],{"class":182},[123,156918,156919],{"class":125,"line":1204},[123,156920,2409],{"emptyLinePlaceholder":50},[123,156922,156923,156925,156927,156929,156931,156933,156935,156937,156939,156941,156943,156945,156947,156949,156952,156955,156957,156959],{"class":125,"line":1210},[123,156924,30426],{"class":182},[123,156926,134],{"class":133},[123,156928,186],{"class":129},[123,156930,156679],{"class":238},[123,156932,1030],{"class":182},[123,156934,79821],{"class":133},[123,156936,1080],{"class":182},[123,156938,156685],{"class":238},[123,156940,1030],{"class":182},[123,156942,70232],{"class":133},[123,156944,1080],{"class":182},[123,156946,156691],{"class":238},[123,156948,1030],{"class":182},[123,156950,156951],{"class":133},"score",[123,156953,156954],{"class":129},":.1f",[123,156956,1080],{"class":182},[123,156958,385],{"class":238},[123,156960,140],{"class":133},[14,156962,156963],{},"表达式也可以放进去：",[114,156965,156967],{"className":30389,"code":156966,"language":30391,"meta":37,"style":37},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[120,156968,156969,156977,156985],{"__ignoreMap":37},[123,156970,156971,156973,156975],{"class":125,"line":126},[123,156972,146678],{"class":133},[123,156974,179],{"class":129},[123,156976,146683],{"class":182},[123,156978,156979,156981,156983],{"class":125,"line":45},[123,156980,146688],{"class":133},[123,156982,179],{"class":129},[123,156984,54438],{"class":182},[123,156986,156987,156989,156991,156993,156996,156998,157000,157002,157005,157007,157010],{"class":125,"line":1189},[123,156988,30426],{"class":182},[123,156990,134],{"class":133},[123,156992,186],{"class":129},[123,156994,156995],{"class":238},"\"总价:",[123,156997,1030],{"class":182},[123,156999,146678],{"class":133},[123,157001,589],{"class":129},[123,157003,157004],{"class":133}," count",[123,157006,1080],{"class":182},[123,157008,157009],{"class":238},"元\"",[123,157011,140],{"class":133},[65,157013,157015],{"id":157014},"_211-input输入","2.11 input输入",[14,157017,157018,157021],{},[120,157019,157020],{},"input()"," 会暂停程序，等待用户输入。",[114,157023,157025],{"className":30389,"code":157024,"language":30391,"meta":37,"style":37},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[120,157026,157027,157041],{"__ignoreMap":37},[123,157028,157029,157031,157033,157035,157037,157039],{"class":125,"line":126},[123,157030,146533],{"class":133},[123,157032,179],{"class":129},[123,157034,60616],{"class":182},[123,157036,134],{"class":133},[123,157038,152376],{"class":238},[123,157040,140],{"class":133},[123,157042,157043,157045,157047,157049,157052,157054,157056,157058,157060],{"class":125,"line":45},[123,157044,30426],{"class":182},[123,157046,134],{"class":133},[123,157048,186],{"class":129},[123,157050,157051],{"class":238},"\"你好，",[123,157053,1030],{"class":182},[123,157055,79821],{"class":133},[123,157057,1080],{"class":182},[123,157059,385],{"class":238},[123,157061,140],{"class":133},[14,157063,157064],{},"输入整数：",[114,157066,157068],{"className":30389,"code":157067,"language":30391,"meta":37,"style":37},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[120,157069,157070,157088],{"__ignoreMap":37},[123,157071,157072,157074,157076,157078,157080,157082,157084,157086],{"class":125,"line":126},[123,157073,146543],{"class":133},[123,157075,179],{"class":129},[123,157077,2391],{"class":182},[123,157079,134],{"class":133},[123,157081,53832],{"class":182},[123,157083,134],{"class":133},[123,157085,152391],{"class":238},[123,157087,30508],{"class":133},[123,157089,157090,157092,157094,157096,157099,157101,157103,157105,157108,157110],{"class":125,"line":45},[123,157091,30426],{"class":182},[123,157093,134],{"class":133},[123,157095,186],{"class":129},[123,157097,157098],{"class":238},"\"明年你",[123,157100,1030],{"class":182},[123,157102,146543],{"class":133},[123,157104,615],{"class":129},[123,157106,157107],{"class":182}," 1}",[123,157109,149401],{"class":238},[123,157111,140],{"class":133},[14,157113,157114],{},"输入小数：",[114,157116,157118],{"className":30389,"code":157117,"language":30391,"meta":37,"style":37},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[120,157119,157120,157139],{"__ignoreMap":37},[123,157121,157122,157124,157126,157128,157130,157132,157134,157137],{"class":125,"line":126},[123,157123,155328],{"class":133},[123,157125,179],{"class":129},[123,157127,109794],{"class":182},[123,157129,134],{"class":133},[123,157131,53832],{"class":182},[123,157133,134],{"class":133},[123,157135,157136],{"class":238},"\"请输入身高:\"",[123,157138,30508],{"class":133},[123,157140,157141,157143,157145,157147,157150,157152,157154,157157,157159,157162],{"class":125,"line":45},[123,157142,30426],{"class":182},[123,157144,134],{"class":133},[123,157146,186],{"class":129},[123,157148,157149],{"class":238},"\"身高:",[123,157151,1030],{"class":182},[123,157153,24992],{"class":133},[123,157155,157156],{"class":129},":.2f",[123,157158,1080],{"class":182},[123,157160,157161],{"class":238},"米\"",[123,157163,140],{"class":133},[65,157165,157167],{"id":157166},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157169,123289],{},[77,157171,157172,157175,157178,157181],{},[80,157173,157174],{},"输入商品单价。",[80,157176,157177],{},"输入购买数量。",[80,157179,157180],{},"输入折扣，例如 0.8 表示八折。",[80,157182,157183],{},"输出最终金额，保留两位小数。",[14,157185,10045],{},[114,157187,157189],{"className":30389,"code":157188,"language":30391,"meta":37,"style":37},"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",[120,157190,157191,157210,157229,157249,157253,157273,157277,157300,157321,157343],{"__ignoreMap":37},[123,157192,157193,157195,157197,157199,157201,157203,157205,157208],{"class":125,"line":126},[123,157194,146678],{"class":133},[123,157196,179],{"class":129},[123,157198,109794],{"class":182},[123,157200,134],{"class":133},[123,157202,53832],{"class":182},[123,157204,134],{"class":133},[123,157206,157207],{"class":238},"\"请输入商品单价:\"",[123,157209,30508],{"class":133},[123,157211,157212,157214,157216,157218,157220,157222,157224,157227],{"class":125,"line":45},[123,157213,146688],{"class":133},[123,157215,179],{"class":129},[123,157217,2391],{"class":182},[123,157219,134],{"class":133},[123,157221,53832],{"class":182},[123,157223,134],{"class":133},[123,157225,157226],{"class":238},"\"请输入购买数量:\"",[123,157228,30508],{"class":133},[123,157230,157231,157234,157236,157238,157240,157242,157244,157247],{"class":125,"line":1189},[123,157232,157233],{"class":133},"discount ",[123,157235,179],{"class":129},[123,157237,109794],{"class":182},[123,157239,134],{"class":133},[123,157241,53832],{"class":182},[123,157243,134],{"class":133},[123,157245,157246],{"class":238},"\"请输入折扣:\"",[123,157248,30508],{"class":133},[123,157250,157251],{"class":125,"line":1204},[123,157252,2409],{"emptyLinePlaceholder":50},[123,157254,157255,157258,157260,157263,157265,157268,157270],{"class":125,"line":1210},[123,157256,157257],{"class":133},"total ",[123,157259,179],{"class":129},[123,157261,157262],{"class":133}," price ",[123,157264,589],{"class":129},[123,157266,157267],{"class":133}," count ",[123,157269,589],{"class":129},[123,157271,157272],{"class":133}," discount\n",[123,157274,157275],{"class":125,"line":1224},[123,157276,2409],{"emptyLinePlaceholder":50},[123,157278,157279,157281,157283,157285,157288,157290,157292,157294,157296,157298],{"class":125,"line":1230},[123,157280,30426],{"class":182},[123,157282,134],{"class":133},[123,157284,186],{"class":129},[123,157286,157287],{"class":238},"\"商品单价:",[123,157289,1030],{"class":182},[123,157291,79826],{"class":133},[123,157293,157156],{"class":129},[123,157295,1080],{"class":182},[123,157297,385],{"class":238},[123,157299,140],{"class":133},[123,157301,157302,157304,157306,157308,157311,157313,157315,157317,157319],{"class":125,"line":1321},[123,157303,30426],{"class":182},[123,157305,134],{"class":133},[123,157307,186],{"class":129},[123,157309,157310],{"class":238},"\"购买数量:",[123,157312,1030],{"class":182},[123,157314,84445],{"class":133},[123,157316,1080],{"class":182},[123,157318,385],{"class":238},[123,157320,140],{"class":133},[123,157322,157323,157325,157327,157329,157332,157334,157337,157339,157341],{"class":125,"line":1327},[123,157324,30426],{"class":182},[123,157326,134],{"class":133},[123,157328,186],{"class":129},[123,157330,157331],{"class":238},"\"折扣:",[123,157333,1030],{"class":182},[123,157335,157336],{"class":133},"discount",[123,157338,1080],{"class":182},[123,157340,385],{"class":238},[123,157342,140],{"class":133},[123,157344,157345,157347,157349,157351,157354,157356,157359,157361,157363,157365],{"class":125,"line":1339},[123,157346,30426],{"class":182},[123,157348,134],{"class":133},[123,157350,186],{"class":129},[123,157352,157353],{"class":238},"\"应付金额:",[123,157355,1030],{"class":182},[123,157357,157358],{"class":133},"total",[123,157360,157156],{"class":129},[123,157362,1080],{"class":182},[123,157364,157009],{"class":238},[123,157366,140],{"class":133},[65,157368,157370],{"id":157369},"_213-易错点","2.13 易错点",[77,157372,157373,157378,157384,157392,157395],{},[80,157374,157375,157377],{},[120,157376,157020],{}," 的结果是字符串，做运算前要转换。",[80,157379,157380,157381,28396],{},"字符串拼接时，数字要先 ",[120,157382,157383],{},"str()",[80,157385,157386,157388,157389,157391],{},[120,157387,179],{}," 是赋值，",[120,157390,2958],{}," 是比较。",[80,157393,157394],{},"Python 没有自增自减运算符。",[80,157396,157397],{},"浮点数计算可能有精度误差：",[114,157399,157401],{"className":30389,"code":157400,"language":30391,"meta":37,"style":37},"print(0.1 + 0.2)\n",[120,157402,157403],{"__ignoreMap":37},[123,157404,157405,157407,157409,157411,157413,157416],{"class":125,"line":126},[123,157406,30426],{"class":182},[123,157408,134],{"class":133},[123,157410,86221],{"class":182},[123,157412,45577],{"class":129},[123,157414,157415],{"class":182}," 0.2",[123,157417,140],{"class":133},[14,157419,157420,157421,157424],{},"金额计算如果要求严格，可以后续学习 ",[120,157422,157423],{},"decimal"," 模块。",[65,157426,157428],{"id":157427},"_214-本章练习","2.14 本章练习",[77,157430,157431,157434,157437,157440,157443],{},[80,157432,157433],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[80,157435,157436],{},"输入圆的半径，计算面积，保留两位小数。",[80,157438,157439],{},"输入工资和奖金，计算总收入。",[80,157441,157442],{},"输入摄氏温度，转换为华氏温度。",[80,157444,157445],{},"写一个 BMI 计算程序：",[114,157447,157450],{"className":157448,"code":157449,"language":5197,"meta":37},[5195],"BMI = 体重kg \u002F 身高m ** 2\n",[120,157451,157449],{"__ignoreMap":37},[5136,157453,157454],{},"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":37,"searchDepth":45,"depth":45,"links":157456},[157457,157458,157459,157460,157461,157462,157463,157469,157470,157471,157476,157477,157478,157479],{"id":155018,"depth":45,"text":155019},{"id":155127,"depth":45,"text":155128},{"id":155298,"depth":45,"text":155299},{"id":155375,"depth":45,"text":155376},{"id":50742,"depth":45,"text":50743},{"id":155681,"depth":45,"text":155682},{"id":155907,"depth":45,"text":155908,"children":157464},[157465,157466,157467,157468],{"id":155911,"depth":1189,"text":155912},{"id":156105,"depth":1189,"text":156106},{"id":156193,"depth":1189,"text":156194},{"id":156299,"depth":1189,"text":156300},{"id":156408,"depth":45,"text":156409},{"id":156566,"depth":45,"text":156567},{"id":156631,"depth":45,"text":156632,"children":157472},[157473,157474,157475],{"id":156635,"depth":1189,"text":156636},{"id":156780,"depth":1189,"text":156781},{"id":156883,"depth":1189,"text":156884},{"id":157014,"depth":45,"text":157015},{"id":157166,"depth":45,"text":157167},{"id":157369,"depth":45,"text":157370},{"id":157427,"depth":45,"text":157428},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":155010,"description":47},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157486,"title":157487,"body":157488,"description":47,"extension":48,"meta":159124,"navigation":50,"path":159125,"seo":159126,"stem":159127,"__hash__":159128},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157489,"toc":159105},[157490,157493,157497,157500,157515,157518,157546,157550,157600,157602,157618,157621,157647,157650,157654,157721,157724,157740,157744,157747,157865,157868,157875,157924,157930,157934,157937,158050,158053,158057,158061,158064,158114,158118,158121,158171,158175,158178,158216,158220,158223,158269,158272,158307,158311,158316,158319,158365,158367,158434,158438,158444,158555,158564,158568,158570,158581,158583,158749,158753,158755,158769,158771,158985,158989,159008,159025,159028,159074,159078,159102],[10,157491,157487],{"id":157492},"_3-判断语句",[65,157494,157496],{"id":157495},"_31-布尔值","3.1 布尔值",[14,157498,157499],{},"判断语句依赖布尔值：",[114,157501,157503],{"className":30389,"code":157502,"language":30391,"meta":37,"style":37},"True\nFalse\n",[120,157504,157505,157510],{"__ignoreMap":37},[123,157506,157507],{"class":125,"line":126},[123,157508,157509],{"class":182},"True\n",[123,157511,157512],{"class":125,"line":45},[123,157513,157514],{"class":182},"False\n",[14,157516,157517],{},"比较表达式会产生布尔值：",[114,157519,157521],{"className":30389,"code":157520,"language":30391,"meta":37,"style":37},"age = 18\nprint(age >= 18)  # True\n",[120,157522,157523,157531],{"__ignoreMap":37},[123,157524,157525,157527,157529],{"class":125,"line":126},[123,157526,146543],{"class":133},[123,157528,179],{"class":129},[123,157530,146548],{"class":182},[123,157532,157533,157535,157537,157539,157541,157543],{"class":125,"line":45},[123,157534,30426],{"class":182},[123,157536,155765],{"class":133},[123,157538,1719],{"class":129},[123,157540,156282],{"class":182},[123,157542,45819],{"class":133},[123,157544,157545],{"class":192},"# True\n",[65,157547,157549],{"id":157548},"_32-if基础语法","3.2 if基础语法",[114,157551,157553],{"className":30389,"code":157552,"language":30391,"meta":37,"style":37},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[120,157554,157555,157573,157577,157589],{"__ignoreMap":37},[123,157556,157557,157559,157561,157563,157565,157567,157569,157571],{"class":125,"line":126},[123,157558,146543],{"class":133},[123,157560,179],{"class":129},[123,157562,2391],{"class":182},[123,157564,134],{"class":133},[123,157566,53832],{"class":182},[123,157568,134],{"class":133},[123,157570,152391],{"class":238},[123,157572,30508],{"class":133},[123,157574,157575],{"class":125,"line":45},[123,157576,2409],{"emptyLinePlaceholder":50},[123,157578,157579,157581,157583,157585,157587],{"class":125,"line":1189},[123,157580,1540],{"class":129},[123,157582,15717],{"class":133},[123,157584,1719],{"class":129},[123,157586,156282],{"class":182},[123,157588,3748],{"class":133},[123,157590,157591,157593,157595,157598],{"class":125,"line":1204},[123,157592,31310],{"class":182},[123,157594,134],{"class":133},[123,157596,157597],{"class":238},"\"可以进入网吧\"",[123,157599,140],{"class":133},[14,157601,9035],{},[77,157603,157604,157609,157612,157615],{},[80,157605,157606,157608],{},[120,157607,1540],{}," 后面是条件表达式。",[80,157610,157611],{},"条件后面必须写冒号。",[80,157613,157614],{},"条件成立时执行缩进代码块。",[80,157616,157617],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,157619,157620],{},"错误示例：",[114,157622,157624],{"className":30389,"code":157623,"language":30391,"meta":37,"style":37},"if age >= 18\n    print(\"可以进入\")\n",[120,157625,157626,157636],{"__ignoreMap":37},[123,157627,157628,157630,157632,157634],{"class":125,"line":126},[123,157629,1540],{"class":129},[123,157631,15717],{"class":133},[123,157633,1719],{"class":129},[123,157635,146548],{"class":182},[123,157637,157638,157640,157642,157645],{"class":125,"line":45},[123,157639,31310],{"class":182},[123,157641,134],{"class":133},[123,157643,157644],{"class":238},"\"可以进入\"",[123,157646,140],{"class":133},[14,157648,157649],{},"缺少冒号。",[65,157651,157653],{"id":157652},"_33-if-else","3.3 if else",[114,157655,157657],{"className":30389,"code":157656,"language":30391,"meta":37,"style":37},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[120,157658,157659,157677,157681,157693,157704,157710],{"__ignoreMap":37},[123,157660,157661,157663,157665,157667,157669,157671,157673,157675],{"class":125,"line":126},[123,157662,146543],{"class":133},[123,157664,179],{"class":129},[123,157666,2391],{"class":182},[123,157668,134],{"class":133},[123,157670,53832],{"class":182},[123,157672,134],{"class":133},[123,157674,152391],{"class":238},[123,157676,30508],{"class":133},[123,157678,157679],{"class":125,"line":45},[123,157680,2409],{"emptyLinePlaceholder":50},[123,157682,157683,157685,157687,157689,157691],{"class":125,"line":1189},[123,157684,1540],{"class":129},[123,157686,15717],{"class":133},[123,157688,1719],{"class":129},[123,157690,156282],{"class":182},[123,157692,3748],{"class":133},[123,157694,157695,157697,157699,157702],{"class":125,"line":1204},[123,157696,31310],{"class":182},[123,157698,134],{"class":133},[123,157700,157701],{"class":238},"\"成年人\"",[123,157703,140],{"class":133},[123,157705,157706,157708],{"class":125,"line":1210},[123,157707,1710],{"class":129},[123,157709,3748],{"class":133},[123,157711,157712,157714,157716,157719],{"class":125,"line":1224},[123,157713,31310],{"class":182},[123,157715,134],{"class":133},[123,157717,157718],{"class":238},"\"未成年人\"",[123,157720,140],{"class":133},[14,157722,157723],{},"执行逻辑：",[77,157725,157726,157732,157737],{},[80,157727,157728,157729,157731],{},"条件成立，执行 ",[120,157730,1540],{}," 代码块。",[80,157733,157734,157735,157731],{},"条件不成立，执行 ",[120,157736,1710],{},[80,157738,157739],{},"两个代码块只会执行其中一个。",[65,157741,157743],{"id":157742},"_34-if-elif-else","3.4 if elif else",[14,157745,157746],{},"多条件判断：",[114,157748,157750],{"className":30389,"code":157749,"language":30391,"meta":37,"style":37},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[120,157751,157752,157770,157774,157788,157799,157813,157824,157837,157848,157854],{"__ignoreMap":37},[123,157753,157754,157756,157758,157760,157762,157764,157766,157768],{"class":125,"line":126},[123,157755,155355],{"class":133},[123,157757,179],{"class":129},[123,157759,2391],{"class":182},[123,157761,134],{"class":133},[123,157763,53832],{"class":182},[123,157765,134],{"class":133},[123,157767,152406],{"class":238},[123,157769,30508],{"class":133},[123,157771,157772],{"class":125,"line":45},[123,157773,2409],{"emptyLinePlaceholder":50},[123,157775,157776,157778,157781,157783,157786],{"class":125,"line":1189},[123,157777,1540],{"class":129},[123,157779,157780],{"class":133}," score ",[123,157782,1719],{"class":129},[123,157784,157785],{"class":182}," 90",[123,157787,3748],{"class":133},[123,157789,157790,157792,157794,157797],{"class":125,"line":1204},[123,157791,31310],{"class":182},[123,157793,134],{"class":133},[123,157795,157796],{"class":238},"\"优秀\"",[123,157798,140],{"class":133},[123,157800,157801,157804,157806,157808,157811],{"class":125,"line":1210},[123,157802,157803],{"class":129},"elif",[123,157805,157780],{"class":133},[123,157807,1719],{"class":129},[123,157809,157810],{"class":182}," 80",[123,157812,3748],{"class":133},[123,157814,157815,157817,157819,157822],{"class":125,"line":1224},[123,157816,31310],{"class":182},[123,157818,134],{"class":133},[123,157820,157821],{"class":238},"\"良好\"",[123,157823,140],{"class":133},[123,157825,157826,157828,157830,157832,157835],{"class":125,"line":1230},[123,157827,157803],{"class":129},[123,157829,157780],{"class":133},[123,157831,1719],{"class":129},[123,157833,157834],{"class":182}," 60",[123,157836,3748],{"class":133},[123,157838,157839,157841,157843,157846],{"class":125,"line":1321},[123,157840,31310],{"class":182},[123,157842,134],{"class":133},[123,157844,157845],{"class":238},"\"及格\"",[123,157847,140],{"class":133},[123,157849,157850,157852],{"class":125,"line":1327},[123,157851,1710],{"class":129},[123,157853,3748],{"class":133},[123,157855,157856,157858,157860,157863],{"class":125,"line":1339},[123,157857,31310],{"class":182},[123,157859,134],{"class":133},[123,157861,157862],{"class":238},"\"不及格\"",[123,157864,140],{"class":133},[14,157866,157867],{},"注意判断顺序很重要。",[14,157869,157870,157871,157874],{},"如果把 ",[120,157872,157873],{},"score >= 60"," 放在最前面：",[114,157876,157878],{"className":30389,"code":157877,"language":30391,"meta":37,"style":37},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[120,157879,157880,157892,157902,157914],{"__ignoreMap":37},[123,157881,157882,157884,157886,157888,157890],{"class":125,"line":126},[123,157883,1540],{"class":129},[123,157885,157780],{"class":133},[123,157887,1719],{"class":129},[123,157889,157834],{"class":182},[123,157891,3748],{"class":133},[123,157893,157894,157896,157898,157900],{"class":125,"line":45},[123,157895,31310],{"class":182},[123,157897,134],{"class":133},[123,157899,157845],{"class":238},[123,157901,140],{"class":133},[123,157903,157904,157906,157908,157910,157912],{"class":125,"line":1189},[123,157905,157803],{"class":129},[123,157907,157780],{"class":133},[123,157909,1719],{"class":129},[123,157911,157785],{"class":182},[123,157913,3748],{"class":133},[123,157915,157916,157918,157920,157922],{"class":125,"line":1204},[123,157917,31310],{"class":182},[123,157919,134],{"class":133},[123,157921,157796],{"class":238},[123,157923,140],{"class":133},[14,157925,157926,157927,157929],{},"成绩 95 会先满足 ",[120,157928,157873],{},"，后面的优秀分支就不会执行。",[65,157931,157933],{"id":157932},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,157935,157936],{},"嵌套判断就是在一个判断内部再写判断。",[114,157938,157940],{"className":30389,"code":157939,"language":30391,"meta":37,"style":37},"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",[120,157941,157942,157960,157975,157979,157991,158005,158015,158022,158033,158039],{"__ignoreMap":37},[123,157943,157944,157946,157948,157950,157952,157954,157956,157958],{"class":125,"line":126},[123,157945,146543],{"class":133},[123,157947,179],{"class":129},[123,157949,2391],{"class":182},[123,157951,134],{"class":133},[123,157953,53832],{"class":182},[123,157955,134],{"class":133},[123,157957,152391],{"class":238},[123,157959,30508],{"class":133},[123,157961,157962,157964,157966,157968,157970,157973],{"class":125,"line":45},[123,157963,156358],{"class":133},[123,157965,179],{"class":129},[123,157967,60616],{"class":182},[123,157969,134],{"class":133},[123,157971,157972],{"class":238},"\"是否有票(y\u002Fn):\"",[123,157974,140],{"class":133},[123,157976,157977],{"class":125,"line":1189},[123,157978,2409],{"emptyLinePlaceholder":50},[123,157980,157981,157983,157985,157987,157989],{"class":125,"line":1204},[123,157982,1540],{"class":129},[123,157984,15717],{"class":133},[123,157986,1719],{"class":129},[123,157988,156282],{"class":182},[123,157990,3748],{"class":133},[123,157992,157993,157995,157998,158000,158003],{"class":125,"line":1210},[123,157994,3110],{"class":129},[123,157996,157997],{"class":133}," has_ticket ",[123,157999,2958],{"class":129},[123,158001,158002],{"class":238}," \"y\"",[123,158004,3748],{"class":133},[123,158006,158007,158009,158011,158013],{"class":125,"line":1224},[123,158008,32462],{"class":182},[123,158010,134],{"class":133},[123,158012,157644],{"class":238},[123,158014,140],{"class":133},[123,158016,158017,158020],{"class":125,"line":1230},[123,158018,158019],{"class":129},"    else",[123,158021,3748],{"class":133},[123,158023,158024,158026,158028,158031],{"class":125,"line":1321},[123,158025,32462],{"class":182},[123,158027,134],{"class":133},[123,158029,158030],{"class":238},"\"请先买票\"",[123,158032,140],{"class":133},[123,158034,158035,158037],{"class":125,"line":1327},[123,158036,1710],{"class":129},[123,158038,3748],{"class":133},[123,158040,158041,158043,158045,158048],{"class":125,"line":1339},[123,158042,31310],{"class":182},[123,158044,134],{"class":133},[123,158046,158047],{"class":238},"\"未成年人禁止进入\"",[123,158049,140],{"class":133},[14,158051,158052],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[65,158054,158056],{"id":158055},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[94,158058,158060],{"id":158059},"_361-and","3.6.1 and",[14,158062,158063],{},"两个条件都成立才成立。",[114,158065,158067],{"className":30389,"code":158066,"language":30391,"meta":37,"style":37},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[120,158068,158069,158077,158085,158089,158104],{"__ignoreMap":37},[123,158070,158071,158073,158075],{"class":125,"line":126},[123,158072,146543],{"class":133},[123,158074,179],{"class":129},[123,158076,88076],{"class":182},[123,158078,158079,158081,158083],{"class":125,"line":45},[123,158080,156358],{"class":133},[123,158082,179],{"class":129},[123,158084,153596],{"class":182},[123,158086,158087],{"class":125,"line":1189},[123,158088,2409],{"emptyLinePlaceholder":50},[123,158090,158091,158093,158095,158097,158099,158101],{"class":125,"line":1204},[123,158092,1540],{"class":129},[123,158094,15717],{"class":133},[123,158096,1719],{"class":129},[123,158098,156282],{"class":182},[123,158100,120426],{"class":129},[123,158102,158103],{"class":133}," has_ticket:\n",[123,158105,158106,158108,158110,158112],{"class":125,"line":1210},[123,158107,31310],{"class":182},[123,158109,134],{"class":133},[123,158111,157644],{"class":238},[123,158113,140],{"class":133},[94,158115,158117],{"id":158116},"_362-or","3.6.2 or",[14,158119,158120],{},"只要一个条件成立就成立。",[114,158122,158124],{"className":30389,"code":158123,"language":30391,"meta":37,"style":37},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[120,158125,158126,158135,158144,158148,158160],{"__ignoreMap":37},[123,158127,158128,158131,158133],{"class":125,"line":126},[123,158129,158130],{"class":133},"is_vip ",[123,158132,179],{"class":129},[123,158134,125804],{"class":182},[123,158136,158137,158140,158142],{"class":125,"line":45},[123,158138,158139],{"class":133},"coupon ",[123,158141,179],{"class":129},[123,158143,153596],{"class":182},[123,158145,158146],{"class":125,"line":1189},[123,158147,2409],{"emptyLinePlaceholder":50},[123,158149,158150,158152,158155,158157],{"class":125,"line":1204},[123,158151,1540],{"class":129},[123,158153,158154],{"class":133}," is_vip ",[123,158156,115087],{"class":129},[123,158158,158159],{"class":133}," coupon:\n",[123,158161,158162,158164,158166,158169],{"class":125,"line":1210},[123,158163,31310],{"class":182},[123,158165,134],{"class":133},[123,158167,158168],{"class":238},"\"可以享受优惠\"",[123,158170,140],{"class":133},[94,158172,158174],{"id":158173},"_363-not","3.6.3 not",[14,158176,158177],{},"取反。",[114,158179,158181],{"className":30389,"code":158180,"language":30391,"meta":37,"style":37},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[120,158182,158183,158192,158196,158205],{"__ignoreMap":37},[123,158184,158185,158188,158190],{"class":125,"line":126},[123,158186,158187],{"class":133},"is_closed ",[123,158189,179],{"class":129},[123,158191,125804],{"class":182},[123,158193,158194],{"class":125,"line":45},[123,158195,2409],{"emptyLinePlaceholder":50},[123,158197,158198,158200,158202],{"class":125,"line":1189},[123,158199,1540],{"class":129},[123,158201,38941],{"class":129},[123,158203,158204],{"class":133}," is_closed:\n",[123,158206,158207,158209,158211,158214],{"class":125,"line":1204},[123,158208,31310],{"class":182},[123,158210,134],{"class":133},[123,158212,158213],{"class":238},"\"店铺营业中\"",[123,158215,140],{"class":133},[65,158217,158219],{"id":158218},"_37-链式比较","3.7 链式比较",[14,158221,158222],{},"Python 支持链式比较：",[114,158224,158226],{"className":30389,"code":158225,"language":30391,"meta":37,"style":37},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[120,158227,158228,158237,158241,158258],{"__ignoreMap":37},[123,158229,158230,158232,158234],{"class":125,"line":126},[123,158231,155355],{"class":133},[123,158233,179],{"class":129},[123,158235,158236],{"class":182}," 85\n",[123,158238,158239],{"class":125,"line":45},[123,158240,2409],{"emptyLinePlaceholder":50},[123,158242,158243,158245,158247,158250,158252,158254,158256],{"class":125,"line":1189},[123,158244,1540],{"class":129},[123,158246,4102],{"class":182},[123,158248,158249],{"class":129}," \u003C=",[123,158251,157780],{"class":133},[123,158253,1597],{"class":129},[123,158255,5764],{"class":182},[123,158257,3748],{"class":133},[123,158259,158260,158262,158264,158267],{"class":125,"line":1204},[123,158261,31310],{"class":182},[123,158263,134],{"class":133},[123,158265,158266],{"class":238},"\"成绩合法\"",[123,158268,140],{"class":133},[14,158270,158271],{},"等价于：",[114,158273,158275],{"className":30389,"code":158274,"language":30391,"meta":37,"style":37},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[120,158276,158277,158297],{"__ignoreMap":37},[123,158278,158279,158281,158283,158285,158287,158289,158291,158293,158295],{"class":125,"line":126},[123,158280,1540],{"class":129},[123,158282,157780],{"class":133},[123,158284,1719],{"class":129},[123,158286,4102],{"class":182},[123,158288,120426],{"class":129},[123,158290,157780],{"class":133},[123,158292,1597],{"class":129},[123,158294,5764],{"class":182},[123,158296,3748],{"class":133},[123,158298,158299,158301,158303,158305],{"class":125,"line":45},[123,158300,31310],{"class":182},[123,158302,134],{"class":133},[123,158304,158266],{"class":238},[123,158306,140],{"class":133},[65,158308,158310],{"id":158309},"_38-真值和假值","3.8 真值和假值",[14,158312,116464,158313,158315],{},[120,158314,1540],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158317,158318],{},"假值：",[114,158320,158322],{"className":30389,"code":158321,"language":30391,"meta":37,"style":37},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[120,158323,158324,158328,158333,158337,158341,158346,158350,158354,158359],{"__ignoreMap":37},[123,158325,158326],{"class":125,"line":126},[123,158327,157514],{"class":182},[123,158329,158330],{"class":125,"line":45},[123,158331,158332],{"class":182},"None\n",[123,158334,158335],{"class":125,"line":1189},[123,158336,3094],{"class":182},[123,158338,158339],{"class":125,"line":1204},[123,158340,32353],{"class":182},[123,158342,158343],{"class":125,"line":1210},[123,158344,158345],{"class":238},"\"\"\n",[123,158347,158348],{"class":125,"line":1224},[123,158349,32368],{"class":133},[123,158351,158352],{"class":125,"line":1230},[123,158353,1985],{"class":133},[123,158355,158356],{"class":125,"line":1321},[123,158357,158358],{"class":133},"{}\n",[123,158360,158361,158363],{"class":125,"line":1327},[123,158362,155287],{"class":182},[123,158364,1985],{"class":133},[14,158366,15145],{},[114,158368,158370],{"className":30389,"code":158369,"language":30391,"meta":37,"style":37},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[120,158371,158372,158386,158390,158397,158417,158423],{"__ignoreMap":37},[123,158373,158374,158376,158378,158380,158382,158384],{"class":125,"line":126},[123,158375,146533],{"class":133},[123,158377,179],{"class":129},[123,158379,60616],{"class":182},[123,158381,134],{"class":133},[123,158383,152376],{"class":238},[123,158385,140],{"class":133},[123,158387,158388],{"class":125,"line":45},[123,158389,2409],{"emptyLinePlaceholder":50},[123,158391,158392,158394],{"class":125,"line":1189},[123,158393,1540],{"class":129},[123,158395,158396],{"class":133}," name:\n",[123,158398,158399,158401,158403,158405,158407,158409,158411,158413,158415],{"class":125,"line":1204},[123,158400,31310],{"class":182},[123,158402,134],{"class":133},[123,158404,186],{"class":129},[123,158406,157051],{"class":238},[123,158408,1030],{"class":182},[123,158410,79821],{"class":133},[123,158412,1080],{"class":182},[123,158414,385],{"class":238},[123,158416,140],{"class":133},[123,158418,158419,158421],{"class":125,"line":1210},[123,158420,1710],{"class":129},[123,158422,3748],{"class":133},[123,158424,158425,158427,158429,158432],{"class":125,"line":1224},[123,158426,31310],{"class":182},[123,158428,134],{"class":133},[123,158430,158431],{"class":238},"\"姓名不能为空\"",[123,158433,140],{"class":133},[65,158435,158437],{"id":158436},"_39-match语句","3.9 match语句",[14,158439,158440,158441,158443],{},"Python 3.10 开始支持 ",[120,158442,71276],{},"。它适合处理固定选项。",[114,158445,158447],{"className":30389,"code":158446,"language":30391,"meta":37,"style":37},"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",[120,158448,158449,158465,158469,158476,158486,158497,158506,158517,158526,158537,158544],{"__ignoreMap":37},[123,158450,158451,158454,158456,158458,158460,158463],{"class":125,"line":126},[123,158452,158453],{"class":133},"command ",[123,158455,179],{"class":129},[123,158457,60616],{"class":182},[123,158459,134],{"class":133},[123,158461,158462],{"class":238},"\"请输入命令:\"",[123,158464,140],{"class":133},[123,158466,158467],{"class":125,"line":45},[123,158468,2409],{"emptyLinePlaceholder":50},[123,158470,158471,158473],{"class":125,"line":1189},[123,158472,71276],{"class":129},[123,158474,158475],{"class":133}," command:\n",[123,158477,158478,158481,158484],{"class":125,"line":1204},[123,158479,158480],{"class":129},"    case",[123,158482,158483],{"class":238}," \"start\"",[123,158485,3748],{"class":133},[123,158487,158488,158490,158492,158495],{"class":125,"line":1210},[123,158489,32462],{"class":182},[123,158491,134],{"class":133},[123,158493,158494],{"class":238},"\"启动\"",[123,158496,140],{"class":133},[123,158498,158499,158501,158504],{"class":125,"line":1224},[123,158500,158480],{"class":129},[123,158502,158503],{"class":238}," \"stop\"",[123,158505,3748],{"class":133},[123,158507,158508,158510,158512,158515],{"class":125,"line":1230},[123,158509,32462],{"class":182},[123,158511,134],{"class":133},[123,158513,158514],{"class":238},"\"停止\"",[123,158516,140],{"class":133},[123,158518,158519,158521,158524],{"class":125,"line":1321},[123,158520,158480],{"class":129},[123,158522,158523],{"class":238}," \"restart\"",[123,158525,3748],{"class":133},[123,158527,158528,158530,158532,158535],{"class":125,"line":1327},[123,158529,32462],{"class":182},[123,158531,134],{"class":133},[123,158533,158534],{"class":238},"\"重启\"",[123,158536,140],{"class":133},[123,158538,158539,158541],{"class":125,"line":1339},[123,158540,158480],{"class":129},[123,158542,158543],{"class":133}," _:\n",[123,158545,158546,158548,158550,158553],{"class":125,"line":1621},[123,158547,32462],{"class":182},[123,158549,134],{"class":133},[123,158551,158552],{"class":238},"\"未知命令\"",[123,158554,140],{"class":133},[14,158556,158557,158558,158560,158561,158563],{},"入门阶段掌握 ",[120,158559,154655],{}," 更重要，",[120,158562,71276],{}," 可以作为补充。",[65,158565,158567],{"id":158566},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158569,123289],{},[77,158571,158572,158575,158578],{},[80,158573,158574],{},"输入成绩。",[80,158576,158577],{},"判断成绩是否合法。",[80,158579,158580],{},"输出等级。",[14,158582,10045],{},[114,158584,158586],{"className":30389,"code":158585,"language":30391,"meta":37,"style":37},"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",[120,158587,158588,158606,158610,158628,158639,158651,158662,158674,158685,158698,158709,158721,158732,158738],{"__ignoreMap":37},[123,158589,158590,158592,158594,158596,158598,158600,158602,158604],{"class":125,"line":126},[123,158591,155355],{"class":133},[123,158593,179],{"class":129},[123,158595,109794],{"class":182},[123,158597,134],{"class":133},[123,158599,53832],{"class":182},[123,158601,134],{"class":133},[123,158603,152406],{"class":238},[123,158605,30508],{"class":133},[123,158607,158608],{"class":125,"line":45},[123,158609,2409],{"emptyLinePlaceholder":50},[123,158611,158612,158614,158616,158618,158620,158622,158624,158626],{"class":125,"line":1189},[123,158613,1540],{"class":129},[123,158615,38941],{"class":129},[123,158617,4102],{"class":182},[123,158619,158249],{"class":129},[123,158621,157780],{"class":133},[123,158623,1597],{"class":129},[123,158625,5764],{"class":182},[123,158627,3748],{"class":133},[123,158629,158630,158632,158634,158637],{"class":125,"line":1204},[123,158631,31310],{"class":182},[123,158633,134],{"class":133},[123,158635,158636],{"class":238},"\"成绩不合法\"",[123,158638,140],{"class":133},[123,158640,158641,158643,158645,158647,158649],{"class":125,"line":1210},[123,158642,157803],{"class":129},[123,158644,157780],{"class":133},[123,158646,1719],{"class":129},[123,158648,157785],{"class":182},[123,158650,3748],{"class":133},[123,158652,158653,158655,158657,158660],{"class":125,"line":1224},[123,158654,31310],{"class":182},[123,158656,134],{"class":133},[123,158658,158659],{"class":238},"\"等级:A\"",[123,158661,140],{"class":133},[123,158663,158664,158666,158668,158670,158672],{"class":125,"line":1230},[123,158665,157803],{"class":129},[123,158667,157780],{"class":133},[123,158669,1719],{"class":129},[123,158671,157810],{"class":182},[123,158673,3748],{"class":133},[123,158675,158676,158678,158680,158683],{"class":125,"line":1321},[123,158677,31310],{"class":182},[123,158679,134],{"class":133},[123,158681,158682],{"class":238},"\"等级:B\"",[123,158684,140],{"class":133},[123,158686,158687,158689,158691,158693,158696],{"class":125,"line":1327},[123,158688,157803],{"class":129},[123,158690,157780],{"class":133},[123,158692,1719],{"class":129},[123,158694,158695],{"class":182}," 70",[123,158697,3748],{"class":133},[123,158699,158700,158702,158704,158707],{"class":125,"line":1339},[123,158701,31310],{"class":182},[123,158703,134],{"class":133},[123,158705,158706],{"class":238},"\"等级:C\"",[123,158708,140],{"class":133},[123,158710,158711,158713,158715,158717,158719],{"class":125,"line":1621},[123,158712,157803],{"class":129},[123,158714,157780],{"class":133},[123,158716,1719],{"class":129},[123,158718,157834],{"class":182},[123,158720,3748],{"class":133},[123,158722,158723,158725,158727,158730],{"class":125,"line":1626},[123,158724,31310],{"class":182},[123,158726,134],{"class":133},[123,158728,158729],{"class":238},"\"等级:D\"",[123,158731,140],{"class":133},[123,158733,158734,158736],{"class":125,"line":1632},[123,158735,1710],{"class":129},[123,158737,3748],{"class":133},[123,158739,158740,158742,158744,158747],{"class":125,"line":1637},[123,158741,31310],{"class":182},[123,158743,134],{"class":133},[123,158745,158746],{"class":238},"\"等级:E\"",[123,158748,140],{"class":133},[65,158750,158752],{"id":158751},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,158754,123289],{},[77,158756,158757,158760,158763,158766],{},[80,158758,158759],{},"输入消费金额。",[80,158761,158762],{},"输入会员等级，普通、银卡、金卡。",[80,158764,158765],{},"普通不打折，银卡 9 折，金卡 8 折。",[80,158767,158768],{},"满 500 再减 50。",[14,158770,10045],{},[114,158772,158774],{"className":30389,"code":158773,"language":30391,"meta":37,"style":37},"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",[120,158775,158776,158796,158812,158816,158824,158828,158842,158852,158865,158874,158887,158895,158901,158912,158916,158930,158934,158948,158958,158962],{"__ignoreMap":37},[123,158777,158778,158781,158783,158785,158787,158789,158791,158794],{"class":125,"line":126},[123,158779,158780],{"class":133},"amount ",[123,158782,179],{"class":129},[123,158784,109794],{"class":182},[123,158786,134],{"class":133},[123,158788,53832],{"class":182},[123,158790,134],{"class":133},[123,158792,158793],{"class":238},"\"请输入消费金额:\"",[123,158795,30508],{"class":133},[123,158797,158798,158801,158803,158805,158807,158810],{"class":125,"line":45},[123,158799,158800],{"class":133},"level ",[123,158802,179],{"class":129},[123,158804,60616],{"class":182},[123,158806,134],{"class":133},[123,158808,158809],{"class":238},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[123,158811,140],{"class":133},[123,158813,158814],{"class":125,"line":1189},[123,158815,2409],{"emptyLinePlaceholder":50},[123,158817,158818,158820,158822],{"class":125,"line":1204},[123,158819,157233],{"class":133},[123,158821,179],{"class":129},[123,158823,55710],{"class":182},[123,158825,158826],{"class":125,"line":1210},[123,158827,2409],{"emptyLinePlaceholder":50},[123,158829,158830,158832,158835,158837,158840],{"class":125,"line":1224},[123,158831,1540],{"class":129},[123,158833,158834],{"class":133}," level ",[123,158836,2958],{"class":129},[123,158838,158839],{"class":238}," \"银卡\"",[123,158841,3748],{"class":133},[123,158843,158844,158847,158849],{"class":125,"line":1230},[123,158845,158846],{"class":133},"    discount ",[123,158848,179],{"class":129},[123,158850,158851],{"class":182}," 0.9\n",[123,158853,158854,158856,158858,158860,158863],{"class":125,"line":1321},[123,158855,157803],{"class":129},[123,158857,158834],{"class":133},[123,158859,2958],{"class":129},[123,158861,158862],{"class":238}," \"金卡\"",[123,158864,3748],{"class":133},[123,158866,158867,158869,158871],{"class":125,"line":1327},[123,158868,158846],{"class":133},[123,158870,179],{"class":129},[123,158872,158873],{"class":182}," 0.8\n",[123,158875,158876,158878,158880,158882,158885],{"class":125,"line":1339},[123,158877,157803],{"class":129},[123,158879,158834],{"class":133},[123,158881,2958],{"class":129},[123,158883,158884],{"class":238}," \"普通\"",[123,158886,3748],{"class":133},[123,158888,158889,158891,158893],{"class":125,"line":1621},[123,158890,158846],{"class":133},[123,158892,179],{"class":129},[123,158894,55710],{"class":182},[123,158896,158897,158899],{"class":125,"line":1626},[123,158898,1710],{"class":129},[123,158900,3748],{"class":133},[123,158902,158903,158905,158907,158910],{"class":125,"line":1632},[123,158904,31310],{"class":182},[123,158906,134],{"class":133},[123,158908,158909],{"class":238},"\"会员等级输入错误，按普通会员计算\"",[123,158911,140],{"class":133},[123,158913,158914],{"class":125,"line":1637},[123,158915,2409],{"emptyLinePlaceholder":50},[123,158917,158918,158921,158923,158926,158928],{"class":125,"line":1651},[123,158919,158920],{"class":133},"pay ",[123,158922,179],{"class":129},[123,158924,158925],{"class":133}," amount ",[123,158927,589],{"class":129},[123,158929,157272],{"class":133},[123,158931,158932],{"class":125,"line":1656},[123,158933,2409],{"emptyLinePlaceholder":50},[123,158935,158936,158938,158941,158943,158946],{"class":125,"line":1662},[123,158937,1540],{"class":129},[123,158939,158940],{"class":133}," pay ",[123,158942,1719],{"class":129},[123,158944,158945],{"class":182}," 500",[123,158947,3748],{"class":133},[123,158949,158950,158953,158955],{"class":125,"line":1683},[123,158951,158952],{"class":133},"    pay ",[123,158954,150249],{"class":129},[123,158956,158957],{"class":182}," 50\n",[123,158959,158960],{"class":125,"line":1688},[123,158961,2409],{"emptyLinePlaceholder":50},[123,158963,158964,158966,158968,158970,158972,158974,158977,158979,158981,158983],{"class":125,"line":1702},[123,158965,30426],{"class":182},[123,158967,134],{"class":133},[123,158969,186],{"class":129},[123,158971,157353],{"class":238},[123,158973,1030],{"class":182},[123,158975,158976],{"class":133},"pay",[123,158978,157156],{"class":129},[123,158980,1080],{"class":182},[123,158982,157009],{"class":238},[123,158984,140],{"class":133},[65,158986,158988],{"id":158987},"_312-易错点","3.12 易错点",[77,158990,158991,158994,158997,159000,159005],{},[80,158992,158993],{},"冒号不能漏。",[80,158995,158996],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[80,158998,158999],{},"多分支判断要注意顺序。",[80,159001,159002,159003,28396],{},"判断相等用 ",[120,159004,2958],{},[80,159006,159007],{},"字符串比较区分大小写：",[114,159009,159011],{"className":30389,"code":159010,"language":30391,"meta":37,"style":37},"\"Y\" == \"y\"  # False\n",[120,159012,159013],{"__ignoreMap":37},[123,159014,159015,159018,159020,159022],{"class":125,"line":126},[123,159016,159017],{"class":238},"\"Y\"",[123,159019,101556],{"class":129},[123,159021,158002],{"class":238},[123,159023,159024],{"class":192},"  # False\n",[14,159026,159027],{},"可转换后再判断：",[114,159029,159031],{"className":30389,"code":159030,"language":30391,"meta":37,"style":37},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[120,159032,159033,159050,159063],{"__ignoreMap":37},[123,159034,159035,159038,159040,159042,159044,159047],{"class":125,"line":126},[123,159036,159037],{"class":133},"answer ",[123,159039,179],{"class":129},[123,159041,60616],{"class":182},[123,159043,134],{"class":133},[123,159045,159046],{"class":238},"\"是否继续(y\u002Fn):\"",[123,159048,159049],{"class":133},").lower()\n",[123,159051,159052,159054,159057,159059,159061],{"class":125,"line":45},[123,159053,1540],{"class":129},[123,159055,159056],{"class":133}," answer ",[123,159058,2958],{"class":129},[123,159060,158002],{"class":238},[123,159062,3748],{"class":133},[123,159064,159065,159067,159069,159072],{"class":125,"line":1189},[123,159066,31310],{"class":182},[123,159068,134],{"class":133},[123,159070,159071],{"class":238},"\"继续\"",[123,159073,140],{"class":133},[65,159075,159077],{"id":159076},"_313-本章练习","3.13 本章练习",[77,159079,159080,159083,159086,159089,159099],{},[80,159081,159082],{},"输入年龄，判断是否成年。",[80,159084,159085],{},"输入年份，判断是否为闰年。",[80,159087,159088],{},"输入三个数字，输出最大值。",[80,159090,159091,159092,159095,159096,159098],{},"写登录判断：用户名是 ",[120,159093,159094],{},"admin"," 且密码是 ",[120,159097,15094],{}," 才登录成功。",[80,159100,159101],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5136,159103,159104],{},"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":37,"searchDepth":45,"depth":45,"links":159106},[159107,159108,159109,159110,159111,159112,159117,159118,159119,159120,159121,159122,159123],{"id":157495,"depth":45,"text":157496},{"id":157548,"depth":45,"text":157549},{"id":157652,"depth":45,"text":157653},{"id":157742,"depth":45,"text":157743},{"id":157932,"depth":45,"text":157933},{"id":158055,"depth":45,"text":158056,"children":159113},[159114,159115,159116],{"id":158059,"depth":1189,"text":158060},{"id":158116,"depth":1189,"text":158117},{"id":158173,"depth":1189,"text":158174},{"id":158218,"depth":45,"text":158219},{"id":158309,"depth":45,"text":158310},{"id":158436,"depth":45,"text":158437},{"id":158566,"depth":45,"text":158567},{"id":158751,"depth":45,"text":158752},{"id":158987,"depth":45,"text":158988},{"id":159076,"depth":45,"text":159077},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157487,"description":47},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159130,"title":159131,"body":159132,"description":47,"extension":48,"meta":160901,"navigation":50,"path":160902,"seo":160903,"stem":160904,"__hash__":160905},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159133,"toc":160881},[159134,159137,159141,159147,159150,159167,159171,159173,159190,159192,159237,159239,159256,159260,159263,159329,159332,159350,159354,159515,159524,159528,159532,159537,159584,159586,159592,159596,159601,159648,159650,159656,159660,159665,159701,159704,159751,159755,159761,159819,159824,159855,159860,159864,159919,159922,159994,159997,160056,160060,160063,160138,160141,160145,160251,160254,160280,160284,160296,160365,160368,160460,160464,160466,160477,160479,160609,160613,160815,160823,160827,160857,160861,160878],[10,159135,159131],{"id":159136},"_4-循环语句",[65,159138,159140],{"id":159139},"_41-为什么需要循环","4.1 为什么需要循环",[14,159142,159143,159144,159146],{},"如果要输出 1 到 100，不应该写 100 行 ",[120,159145,146469],{},"，而应该用循环。",[14,159148,159149],{},"循环适合处理重复任务：",[77,159151,159152,159155,159158,159161,159164],{},[80,159153,159154],{},"重复输出。",[80,159156,159157],{},"重复输入。",[80,159159,159160],{},"遍历数据。",[80,159162,159163],{},"持续执行菜单。",[80,159165,159166],{},"批量处理文件或数据。",[65,159168,159170],{"id":159169},"_42-while循环","4.2 while循环",[14,159172,5191],{},[114,159174,159176],{"className":30389,"code":159175,"language":30391,"meta":37,"style":37},"while 条件:\n    循环体\n",[120,159177,159178,159185],{"__ignoreMap":37},[123,159179,159180,159182],{"class":125,"line":126},[123,159181,108660],{"class":129},[123,159183,159184],{"class":133}," 条件:\n",[123,159186,159187],{"class":125,"line":45},[123,159188,159189],{"class":133},"    循环体\n",[14,159191,15145],{},[114,159193,159195],{"className":30389,"code":159194,"language":30391,"meta":37,"style":37},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[120,159196,159197,159205,159209,159221,159228],{"__ignoreMap":37},[123,159198,159199,159201,159203],{"class":125,"line":126},[123,159200,100145],{"class":133},[123,159202,179],{"class":129},[123,159204,55710],{"class":182},[123,159206,159207],{"class":125,"line":45},[123,159208,2409],{"emptyLinePlaceholder":50},[123,159210,159211,159213,159215,159217,159219],{"class":125,"line":1189},[123,159212,108660],{"class":129},[123,159214,9448],{"class":133},[123,159216,1597],{"class":129},[123,159218,2157],{"class":182},[123,159220,3748],{"class":133},[123,159222,159223,159225],{"class":125,"line":1204},[123,159224,31310],{"class":182},[123,159226,159227],{"class":133},"(i)\n",[123,159229,159230,159233,159235],{"class":125,"line":1210},[123,159231,159232],{"class":133},"    i ",[123,159234,9487],{"class":129},[123,159236,55710],{"class":182},[14,159238,80940],{},[77,159240,159241,159247,159250,159253],{},[80,159242,159243,159244,28396],{},"判断条件 ",[120,159245,159246],{},"i \u003C= 5",[80,159248,159249],{},"条件成立，执行循环体。",[80,159251,159252],{},"执行完后回到条件判断。",[80,159254,159255],{},"条件不成立，退出循环。",[65,159257,159259],{"id":159258},"_43-while累加","4.3 while累加",[14,159261,159262],{},"计算 1 到 100 的和：",[114,159264,159266],{"className":30389,"code":159265,"language":30391,"meta":37,"style":37},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[120,159267,159268,159276,159284,159288,159300,159310,159318,159322],{"__ignoreMap":37},[123,159269,159270,159272,159274],{"class":125,"line":126},[123,159271,100145],{"class":133},[123,159273,179],{"class":129},[123,159275,55710],{"class":182},[123,159277,159278,159280,159282],{"class":125,"line":45},[123,159279,157257],{"class":133},[123,159281,179],{"class":129},[123,159283,47344],{"class":182},[123,159285,159286],{"class":125,"line":1189},[123,159287,2409],{"emptyLinePlaceholder":50},[123,159289,159290,159292,159294,159296,159298],{"class":125,"line":1204},[123,159291,108660],{"class":129},[123,159293,9448],{"class":133},[123,159295,1597],{"class":129},[123,159297,5764],{"class":182},[123,159299,3748],{"class":133},[123,159301,159302,159305,159307],{"class":125,"line":1210},[123,159303,159304],{"class":133},"    total ",[123,159306,9487],{"class":129},[123,159308,159309],{"class":133}," i\n",[123,159311,159312,159314,159316],{"class":125,"line":1224},[123,159313,159232],{"class":133},[123,159315,9487],{"class":129},[123,159317,55710],{"class":182},[123,159319,159320],{"class":125,"line":1230},[123,159321,2409],{"emptyLinePlaceholder":50},[123,159323,159324,159326],{"class":125,"line":1321},[123,159325,30426],{"class":182},[123,159327,159328],{"class":133},"(total)\n",[14,159330,159331],{},"核心思想：",[77,159333,159334,159339,159344],{},[80,159335,159336,159338],{},[120,159337,575],{}," 控制循环次数。",[80,159340,159341,159343],{},[120,159342,157358],{}," 保存累加结果。",[80,159345,159346,159347,159349],{},"每轮循环都要更新 ",[120,159348,575],{},"，否则可能死循环。",[65,159351,159353],{"id":159352},"_44-while猜数字","4.4 while猜数字",[114,159355,159357],{"className":30389,"code":159356,"language":30391,"meta":37,"style":37},"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",[120,159358,159359,159365,159369,159386,159394,159398,159406,159426,159435,159439,159451,159462,159472,159483,159489,159511],{"__ignoreMap":37},[123,159360,159361,159363],{"class":125,"line":126},[123,159362,30403],{"class":129},[123,159364,45339],{"class":133},[123,159366,159367],{"class":125,"line":45},[123,159368,2409],{"emptyLinePlaceholder":50},[123,159370,159371,159373,159375,159378,159380,159382,159384],{"class":125,"line":1189},[123,159372,159037],{"class":133},[123,159374,179],{"class":129},[123,159376,159377],{"class":133}," random.randint(",[123,159379,351],{"class":182},[123,159381,12445],{"class":133},[123,159383,445],{"class":182},[123,159385,140],{"class":133},[123,159387,159388,159390,159392],{"class":125,"line":1204},[123,159389,146688],{"class":133},[123,159391,179],{"class":129},[123,159393,47344],{"class":182},[123,159395,159396],{"class":125,"line":1210},[123,159397,2409],{"emptyLinePlaceholder":50},[123,159399,159400,159402,159404],{"class":125,"line":1224},[123,159401,108660],{"class":129},[123,159403,95289],{"class":182},[123,159405,3748],{"class":133},[123,159407,159408,159411,159413,159415,159417,159419,159421,159424],{"class":125,"line":1230},[123,159409,159410],{"class":133},"    guess ",[123,159412,179],{"class":129},[123,159414,2391],{"class":182},[123,159416,134],{"class":133},[123,159418,53832],{"class":182},[123,159420,134],{"class":133},[123,159422,159423],{"class":238},"\"请输入1到100之间的数字:\"",[123,159425,30508],{"class":133},[123,159427,159428,159431,159433],{"class":125,"line":1321},[123,159429,159430],{"class":133},"    count ",[123,159432,9487],{"class":129},[123,159434,55710],{"class":182},[123,159436,159437],{"class":125,"line":1327},[123,159438,2409],{"emptyLinePlaceholder":50},[123,159440,159441,159443,159446,159448],{"class":125,"line":1339},[123,159442,3110],{"class":129},[123,159444,159445],{"class":133}," guess ",[123,159447,1094],{"class":129},[123,159449,159450],{"class":133}," answer:\n",[123,159452,159453,159455,159457,159460],{"class":125,"line":1621},[123,159454,32462],{"class":182},[123,159456,134],{"class":133},[123,159458,159459],{"class":238},"\"猜大了\"",[123,159461,140],{"class":133},[123,159463,159464,159466,159468,159470],{"class":125,"line":1626},[123,159465,39304],{"class":129},[123,159467,159445],{"class":133},[123,159469,1044],{"class":129},[123,159471,159450],{"class":133},[123,159473,159474,159476,159478,159481],{"class":125,"line":1632},[123,159475,32462],{"class":182},[123,159477,134],{"class":133},[123,159479,159480],{"class":238},"\"猜小了\"",[123,159482,140],{"class":133},[123,159484,159485,159487],{"class":125,"line":1637},[123,159486,158019],{"class":129},[123,159488,3748],{"class":133},[123,159490,159491,159493,159495,159497,159500,159502,159504,159506,159509],{"class":125,"line":1651},[123,159492,32462],{"class":182},[123,159494,134],{"class":133},[123,159496,186],{"class":129},[123,159498,159499],{"class":238},"\"猜对了，一共猜了",[123,159501,1030],{"class":182},[123,159503,84445],{"class":133},[123,159505,1080],{"class":182},[123,159507,159508],{"class":238},"次\"",[123,159510,140],{"class":133},[123,159512,159513],{"class":125,"line":1656},[123,159514,31638],{"class":129},[14,159516,159517,159520,159521,159523],{},[120,159518,159519],{},"while True"," 表示无限循环，通常配合 ",[120,159522,2062],{}," 使用。",[65,159525,159527],{"id":159526},"_45-break和continue","4.5 break和continue",[94,159529,159531],{"id":159530},"_451-break","4.5.1 break",[14,159533,159534,159536],{},[120,159535,2062],{}," 直接结束整个循环。",[114,159538,159540],{"className":30389,"code":159539,"language":30391,"meta":37,"style":37},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[120,159541,159542,159562,159574,159578],{"__ignoreMap":37},[123,159543,159544,159546,159548,159550,159552,159554,159556,159558,159560],{"class":125,"line":126},[123,159545,3034],{"class":129},[123,159547,9448],{"class":133},[123,159549,26054],{"class":129},[123,159551,32454],{"class":182},[123,159553,134],{"class":133},[123,159555,351],{"class":182},[123,159557,12445],{"class":133},[123,159559,478],{"class":182},[123,159561,30797],{"class":133},[123,159563,159564,159566,159568,159570,159572],{"class":125,"line":45},[123,159565,3110],{"class":129},[123,159567,9448],{"class":133},[123,159569,2958],{"class":129},[123,159571,78081],{"class":182},[123,159573,3748],{"class":133},[123,159575,159576],{"class":125,"line":1189},[123,159577,31638],{"class":129},[123,159579,159580,159582],{"class":125,"line":1204},[123,159581,31310],{"class":182},[123,159583,159227],{"class":133},[14,159585,146454],{},[114,159587,159590],{"className":159588,"code":159589,"language":5197,"meta":37},[5195],"1\n2\n",[120,159591,159589],{"__ignoreMap":37},[94,159593,159595],{"id":159594},"_452-continue","4.5.2 continue",[14,159597,159598,159600],{},[120,159599,154669],{}," 跳过本轮剩余代码，进入下一轮循环。",[114,159602,159604],{"className":30389,"code":159603,"language":30391,"meta":37,"style":37},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[120,159605,159606,159626,159638,159642],{"__ignoreMap":37},[123,159607,159608,159610,159612,159614,159616,159618,159620,159622,159624],{"class":125,"line":126},[123,159609,3034],{"class":129},[123,159611,9448],{"class":133},[123,159613,26054],{"class":129},[123,159615,32454],{"class":182},[123,159617,134],{"class":133},[123,159619,351],{"class":182},[123,159621,12445],{"class":133},[123,159623,478],{"class":182},[123,159625,30797],{"class":133},[123,159627,159628,159630,159632,159634,159636],{"class":125,"line":45},[123,159629,3110],{"class":129},[123,159631,9448],{"class":133},[123,159633,2958],{"class":129},[123,159635,78081],{"class":182},[123,159637,3748],{"class":133},[123,159639,159640],{"class":125,"line":1189},[123,159641,148509],{"class":129},[123,159643,159644,159646],{"class":125,"line":1204},[123,159645,31310],{"class":182},[123,159647,159227],{"class":133},[14,159649,146454],{},[114,159651,159654],{"className":159652,"code":159653,"language":5197,"meta":37},[5195],"1\n2\n4\n5\n",[120,159655,159653],{"__ignoreMap":37},[65,159657,159659],{"id":159658},"_46-for循环","4.6 for循环",[14,159661,159662,159664],{},[120,159663,3034],{}," 常用于遍历序列。",[114,159666,159668],{"className":30389,"code":159667,"language":30391,"meta":37,"style":37},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[120,159669,159670,159679,159683,159694],{"__ignoreMap":37},[123,159671,159672,159674,159676],{"class":125,"line":126},[123,159673,146533],{"class":133},[123,159675,179],{"class":129},[123,159677,159678],{"class":238}," \"python\"\n",[123,159680,159681],{"class":125,"line":45},[123,159682,2409],{"emptyLinePlaceholder":50},[123,159684,159685,159687,159690,159692],{"class":125,"line":1189},[123,159686,3034],{"class":129},[123,159688,159689],{"class":133}," ch ",[123,159691,26054],{"class":129},[123,159693,158396],{"class":133},[123,159695,159696,159698],{"class":125,"line":1204},[123,159697,31310],{"class":182},[123,159699,159700],{"class":133},"(ch)\n",[14,159702,159703],{},"遍历列表：",[114,159705,159707],{"className":30389,"code":159706,"language":30391,"meta":37,"style":37},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[120,159708,159709,159731,159735,159745],{"__ignoreMap":37},[123,159710,159711,159714,159716,159718,159720,159722,159724,159726,159729],{"class":125,"line":126},[123,159712,159713],{"class":133},"students ",[123,159715,179],{"class":129},[123,159717,52237],{"class":133},[123,159719,149885],{"class":238},[123,159721,12445],{"class":133},[123,159723,150933],{"class":238},[123,159725,12445],{"class":133},[123,159727,159728],{"class":238},"\"小刚\"",[123,159730,33257],{"class":133},[123,159732,159733],{"class":125,"line":45},[123,159734,2409],{"emptyLinePlaceholder":50},[123,159736,159737,159739,159741,159743],{"class":125,"line":1189},[123,159738,3034],{"class":129},[123,159740,152134],{"class":133},[123,159742,26054],{"class":129},[123,159744,152139],{"class":133},[123,159746,159747,159749],{"class":125,"line":1204},[123,159748,31310],{"class":182},[123,159750,150039],{"class":133},[65,159752,159754],{"id":159753},"_47-range函数","4.7 range函数",[14,159756,159757,159760],{},[120,159758,159759],{},"range()"," 用于生成整数序列。",[114,159762,159764],{"className":30389,"code":159763,"language":30391,"meta":37,"style":37},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[120,159765,159766,159780,159798],{"__ignoreMap":37},[123,159767,159768,159770,159772,159774,159777],{"class":125,"line":126},[123,159769,33427],{"class":182},[123,159771,134],{"class":133},[123,159773,453],{"class":182},[123,159775,159776],{"class":133},")          ",[123,159778,159779],{"class":192},"# 0,1,2,3,4\n",[123,159781,159782,159784,159786,159788,159790,159792,159795],{"class":125,"line":45},[123,159783,33427],{"class":182},[123,159785,134],{"class":133},[123,159787,351],{"class":182},[123,159789,12445],{"class":133},[123,159791,453],{"class":182},[123,159793,159794],{"class":133},")       ",[123,159796,159797],{"class":192},"# 1,2,3,4\n",[123,159799,159800,159802,159804,159806,159808,159810,159812,159814,159816],{"class":125,"line":1189},[123,159801,33427],{"class":182},[123,159803,134],{"class":133},[123,159805,351],{"class":182},[123,159807,12445],{"class":133},[123,159809,580],{"class":182},[123,159811,12445],{"class":133},[123,159813,211],{"class":182},[123,159815,155658],{"class":133},[123,159817,159818],{"class":192},"# 1,3,5,7,9\n",[14,159820,159821,159822,24629],{},"配合 ",[120,159823,3034],{},[114,159825,159827],{"className":30389,"code":159826,"language":30391,"meta":37,"style":37},"for i in range(1, 6):\n    print(i)\n",[120,159828,159829,159849],{"__ignoreMap":37},[123,159830,159831,159833,159835,159837,159839,159841,159843,159845,159847],{"class":125,"line":126},[123,159832,3034],{"class":129},[123,159834,9448],{"class":133},[123,159836,26054],{"class":129},[123,159838,32454],{"class":182},[123,159840,134],{"class":133},[123,159842,351],{"class":182},[123,159844,12445],{"class":133},[123,159846,478],{"class":182},[123,159848,30797],{"class":133},[123,159850,159851,159853],{"class":125,"line":45},[123,159852,31310],{"class":182},[123,159854,159227],{"class":133},[14,159856,9035,159857,159859],{},[120,159858,33427],{}," 的结束值不包含在内。",[65,159861,159863],{"id":159862},"_48-for循环求和","4.8 for循环求和",[114,159865,159867],{"className":30389,"code":159866,"language":30391,"meta":37,"style":37},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[120,159868,159869,159877,159881,159901,159909,159913],{"__ignoreMap":37},[123,159870,159871,159873,159875],{"class":125,"line":126},[123,159872,157257],{"class":133},[123,159874,179],{"class":129},[123,159876,47344],{"class":182},[123,159878,159879],{"class":125,"line":45},[123,159880,2409],{"emptyLinePlaceholder":50},[123,159882,159883,159885,159887,159889,159891,159893,159895,159897,159899],{"class":125,"line":1189},[123,159884,3034],{"class":129},[123,159886,9448],{"class":133},[123,159888,26054],{"class":129},[123,159890,32454],{"class":182},[123,159892,134],{"class":133},[123,159894,351],{"class":182},[123,159896,12445],{"class":133},[123,159898,471],{"class":182},[123,159900,30797],{"class":133},[123,159902,159903,159905,159907],{"class":125,"line":1204},[123,159904,159304],{"class":133},[123,159906,9487],{"class":129},[123,159908,159309],{"class":133},[123,159910,159911],{"class":125,"line":1210},[123,159912,2409],{"emptyLinePlaceholder":50},[123,159914,159915,159917],{"class":125,"line":1224},[123,159916,30426],{"class":182},[123,159918,159328],{"class":133},[14,159920,159921],{},"求偶数和：",[114,159923,159925],{"className":30389,"code":159924,"language":30391,"meta":37,"style":37},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[120,159926,159927,159935,159939,159959,159975,159984,159988],{"__ignoreMap":37},[123,159928,159929,159931,159933],{"class":125,"line":126},[123,159930,157257],{"class":133},[123,159932,179],{"class":129},[123,159934,47344],{"class":182},[123,159936,159937],{"class":125,"line":45},[123,159938,2409],{"emptyLinePlaceholder":50},[123,159940,159941,159943,159945,159947,159949,159951,159953,159955,159957],{"class":125,"line":1189},[123,159942,3034],{"class":129},[123,159944,9448],{"class":133},[123,159946,26054],{"class":129},[123,159948,32454],{"class":182},[123,159950,134],{"class":133},[123,159952,351],{"class":182},[123,159954,12445],{"class":133},[123,159956,471],{"class":182},[123,159958,30797],{"class":133},[123,159960,159961,159963,159965,159967,159969,159971,159973],{"class":125,"line":1204},[123,159962,3110],{"class":129},[123,159964,9448],{"class":133},[123,159966,462],{"class":129},[123,159968,14765],{"class":182},[123,159970,101556],{"class":129},[123,159972,4102],{"class":182},[123,159974,3748],{"class":133},[123,159976,159977,159980,159982],{"class":125,"line":1210},[123,159978,159979],{"class":133},"        total ",[123,159981,9487],{"class":129},[123,159983,159309],{"class":133},[123,159985,159986],{"class":125,"line":1224},[123,159987,2409],{"emptyLinePlaceholder":50},[123,159989,159990,159992],{"class":125,"line":1230},[123,159991,30426],{"class":182},[123,159993,159328],{"class":133},[14,159995,159996],{},"也可以：",[114,159998,160000],{"className":30389,"code":159999,"language":30391,"meta":37,"style":37},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[120,160001,160002,160010,160014,160038,160046,160050],{"__ignoreMap":37},[123,160003,160004,160006,160008],{"class":125,"line":126},[123,160005,157257],{"class":133},[123,160007,179],{"class":129},[123,160009,47344],{"class":182},[123,160011,160012],{"class":125,"line":45},[123,160013,2409],{"emptyLinePlaceholder":50},[123,160015,160016,160018,160020,160022,160024,160026,160028,160030,160032,160034,160036],{"class":125,"line":1189},[123,160017,3034],{"class":129},[123,160019,9448],{"class":133},[123,160021,26054],{"class":129},[123,160023,32454],{"class":182},[123,160025,134],{"class":133},[123,160027,211],{"class":182},[123,160029,12445],{"class":133},[123,160031,471],{"class":182},[123,160033,12445],{"class":133},[123,160035,211],{"class":182},[123,160037,30797],{"class":133},[123,160039,160040,160042,160044],{"class":125,"line":1204},[123,160041,159304],{"class":133},[123,160043,9487],{"class":129},[123,160045,159309],{"class":133},[123,160047,160048],{"class":125,"line":1210},[123,160049,2409],{"emptyLinePlaceholder":50},[123,160051,160052,160054],{"class":125,"line":1224},[123,160053,30426],{"class":182},[123,160055,159328],{"class":133},[65,160057,160059],{"id":160058},"_49-循环嵌套","4.9 循环嵌套",[14,160061,160062],{},"嵌套循环就是循环里面再写循环。",[114,160064,160066],{"className":30389,"code":160065,"language":30391,"meta":37,"style":37},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[120,160067,160068,160088,160108],{"__ignoreMap":37},[123,160069,160070,160072,160074,160076,160078,160080,160082,160084,160086],{"class":125,"line":126},[123,160071,3034],{"class":129},[123,160073,9448],{"class":133},[123,160075,26054],{"class":129},[123,160077,32454],{"class":182},[123,160079,134],{"class":133},[123,160081,351],{"class":182},[123,160083,12445],{"class":133},[123,160085,427],{"class":182},[123,160087,30797],{"class":133},[123,160089,160090,160092,160094,160096,160098,160100,160102,160104,160106],{"class":125,"line":45},[123,160091,3210],{"class":129},[123,160093,9510],{"class":133},[123,160095,26054],{"class":129},[123,160097,32454],{"class":182},[123,160099,134],{"class":133},[123,160101,351],{"class":182},[123,160103,12445],{"class":133},[123,160105,427],{"class":182},[123,160107,30797],{"class":133},[123,160109,160110,160112,160114,160116,160119,160121,160123,160125,160128,160130,160132,160134,160136],{"class":125,"line":1189},[123,160111,32462],{"class":182},[123,160113,134],{"class":133},[123,160115,186],{"class":129},[123,160117,160118],{"class":238},"\"i=",[123,160120,1030],{"class":182},[123,160122,575],{"class":133},[123,160124,1080],{"class":182},[123,160126,160127],{"class":238},", j=",[123,160129,1030],{"class":182},[123,160131,601],{"class":133},[123,160133,1080],{"class":182},[123,160135,385],{"class":238},[123,160137,140],{"class":133},[14,160139,160140],{},"外层循环执行一次，内层循环执行完整一轮。",[65,160142,160144],{"id":160143},"_410-九九乘法表","4.10 九九乘法表",[114,160146,160148],{"className":30389,"code":160147,"language":30391,"meta":37,"style":37},"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",[120,160149,160150,160170,160193,160245],{"__ignoreMap":37},[123,160151,160152,160154,160156,160158,160160,160162,160164,160166,160168],{"class":125,"line":126},[123,160153,3034],{"class":129},[123,160155,9448],{"class":133},[123,160157,26054],{"class":129},[123,160159,32454],{"class":182},[123,160161,134],{"class":133},[123,160163,351],{"class":182},[123,160165,12445],{"class":133},[123,160167,580],{"class":182},[123,160169,30797],{"class":133},[123,160171,160172,160174,160176,160178,160180,160182,160184,160187,160189,160191],{"class":125,"line":45},[123,160173,3210],{"class":129},[123,160175,9510],{"class":133},[123,160177,26054],{"class":129},[123,160179,32454],{"class":182},[123,160181,134],{"class":133},[123,160183,351],{"class":182},[123,160185,160186],{"class":133},", i ",[123,160188,615],{"class":129},[123,160190,25129],{"class":182},[123,160192,30797],{"class":133},[123,160194,160195,160197,160199,160201,160203,160205,160207,160209,160211,160213,160215,160217,160219,160221,160223,160225,160227,160229,160231,160233,160235,160237,160239,160241,160243],{"class":125,"line":1189},[123,160196,32462],{"class":182},[123,160198,134],{"class":133},[123,160200,186],{"class":129},[123,160202,385],{"class":238},[123,160204,1030],{"class":182},[123,160206,601],{"class":133},[123,160208,1080],{"class":182},[123,160210,589],{"class":238},[123,160212,1030],{"class":182},[123,160214,575],{"class":133},[123,160216,1080],{"class":182},[123,160218,179],{"class":238},[123,160220,1030],{"class":182},[123,160222,100145],{"class":133},[123,160224,589],{"class":129},[123,160226,3419],{"class":133},[123,160228,1080],{"class":182},[123,160230,385],{"class":238},[123,160232,12445],{"class":133},[123,160234,45812],{"class":5226},[123,160236,179],{"class":129},[123,160238,385],{"class":238},[123,160240,1240],{"class":182},[123,160242,385],{"class":238},[123,160244,140],{"class":133},[123,160246,160247,160249],{"class":125,"line":1204},[123,160248,31310],{"class":182},[123,160250,1985],{"class":133},[14,160252,160253],{},"关键点：",[77,160255,160256,160262,160268,160274],{},[80,160257,160258,160259,160261],{},"外层 ",[120,160260,575],{}," 控制行。",[80,160263,160264,160265,160267],{},"内层 ",[120,160266,601],{}," 控制列。",[80,160269,160270,160271,160273],{},"每行结束后用 ",[120,160272,146469],{}," 换行。",[80,160275,160276,160279],{},[120,160277,160278],{},"end=\"\\t\""," 让同一行的内容横向排列。",[65,160281,160283],{"id":160282},"_411-循环else","4.11 循环else",[14,160285,160286,160287,160289,160290,160292,160293,160295],{},"Python 的循环可以带 ",[120,160288,1710],{},"。当循环正常结束时执行 ",[120,160291,1710],{},"，如果被 ",[120,160294,2062],{}," 打断，则不执行。",[114,160297,160299],{"className":30389,"code":160298,"language":30391,"meta":37,"style":37},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[120,160300,160301,160321,160333,160344,160348,160354],{"__ignoreMap":37},[123,160302,160303,160305,160307,160309,160311,160313,160315,160317,160319],{"class":125,"line":126},[123,160304,3034],{"class":129},[123,160306,9448],{"class":133},[123,160308,26054],{"class":129},[123,160310,32454],{"class":182},[123,160312,134],{"class":133},[123,160314,351],{"class":182},[123,160316,12445],{"class":133},[123,160318,478],{"class":182},[123,160320,30797],{"class":133},[123,160322,160323,160325,160327,160329,160331],{"class":125,"line":45},[123,160324,3110],{"class":129},[123,160326,9448],{"class":133},[123,160328,2958],{"class":129},[123,160330,2047],{"class":182},[123,160332,3748],{"class":133},[123,160334,160335,160337,160339,160342],{"class":125,"line":1189},[123,160336,32462],{"class":182},[123,160338,134],{"class":133},[123,160340,160341],{"class":238},"\"找到了\"",[123,160343,140],{"class":133},[123,160345,160346],{"class":125,"line":1204},[123,160347,31638],{"class":129},[123,160349,160350,160352],{"class":125,"line":1210},[123,160351,1710],{"class":129},[123,160353,3748],{"class":133},[123,160355,160356,160358,160360,160363],{"class":125,"line":1224},[123,160357,31310],{"class":182},[123,160359,134],{"class":133},[123,160361,160362],{"class":238},"\"没找到\"",[123,160364,140],{"class":133},[14,160366,160367],{},"常用于搜索。",[114,160369,160371],{"className":30389,"code":160370,"language":30391,"meta":37,"style":37},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[120,160372,160373,160394,160403,160407,160419,160430,160440,160444,160450],{"__ignoreMap":37},[123,160374,160375,160378,160380,160382,160384,160386,160388,160390,160392],{"class":125,"line":126},[123,160376,160377],{"class":133},"names ",[123,160379,179],{"class":129},[123,160381,52237],{"class":133},[123,160383,149885],{"class":238},[123,160385,12445],{"class":133},[123,160387,150933],{"class":238},[123,160389,12445],{"class":133},[123,160391,159728],{"class":238},[123,160393,33257],{"class":133},[123,160395,160396,160398,160400],{"class":125,"line":45},[123,160397,111575],{"class":133},[123,160399,179],{"class":129},[123,160401,160402],{"class":238}," \"小李\"\n",[123,160404,160405],{"class":125,"line":1189},[123,160406,2409],{"emptyLinePlaceholder":50},[123,160408,160409,160411,160414,160416],{"class":125,"line":1204},[123,160410,3034],{"class":129},[123,160412,160413],{"class":133}," name ",[123,160415,26054],{"class":129},[123,160417,160418],{"class":133}," names:\n",[123,160420,160421,160423,160425,160427],{"class":125,"line":1210},[123,160422,3110],{"class":129},[123,160424,160413],{"class":133},[123,160426,2958],{"class":129},[123,160428,160429],{"class":133}," target:\n",[123,160431,160432,160434,160436,160438],{"class":125,"line":1224},[123,160433,32462],{"class":182},[123,160435,134],{"class":133},[123,160437,160341],{"class":238},[123,160439,140],{"class":133},[123,160441,160442],{"class":125,"line":1230},[123,160443,31638],{"class":129},[123,160445,160446,160448],{"class":125,"line":1321},[123,160447,1710],{"class":129},[123,160449,3748],{"class":133},[123,160451,160452,160454,160456,160458],{"class":125,"line":1327},[123,160453,31310],{"class":182},[123,160455,134],{"class":133},[123,160457,160362],{"class":238},[123,160459,140],{"class":133},[65,160461,160463],{"id":160462},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160465,123289],{},[77,160467,160468,160471,160474],{},[80,160469,160470],{},"用户最多输入 3 次密码。",[80,160472,160473],{},"密码正确则登录成功。",[80,160475,160476],{},"3 次都错误则锁定账号。",[14,160478,10045],{},[114,160480,160482],{"className":30389,"code":160481,"language":30391,"meta":37,"style":37},"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",[120,160483,160484,160494,160498,160514,160530,160534,160546,160557,160561,160567,160592,160598],{"__ignoreMap":37},[123,160485,160486,160489,160491],{"class":125,"line":126},[123,160487,160488],{"class":133},"password ",[123,160490,179],{"class":129},[123,160492,160493],{"class":238}," \"123456\"\n",[123,160495,160496],{"class":125,"line":45},[123,160497,2409],{"emptyLinePlaceholder":50},[123,160499,160500,160502,160504,160506,160508,160510,160512],{"class":125,"line":1189},[123,160501,3034],{"class":129},[123,160503,9448],{"class":133},[123,160505,26054],{"class":129},[123,160507,32454],{"class":182},[123,160509,134],{"class":133},[123,160511,205],{"class":182},[123,160513,30797],{"class":133},[123,160515,160516,160519,160521,160523,160525,160528],{"class":125,"line":1204},[123,160517,160518],{"class":133},"    user_password ",[123,160520,179],{"class":129},[123,160522,60616],{"class":182},[123,160524,134],{"class":133},[123,160526,160527],{"class":238},"\"请输入密码:\"",[123,160529,140],{"class":133},[123,160531,160532],{"class":125,"line":1210},[123,160533,2409],{"emptyLinePlaceholder":50},[123,160535,160536,160538,160541,160543],{"class":125,"line":1224},[123,160537,3110],{"class":129},[123,160539,160540],{"class":133}," user_password ",[123,160542,2958],{"class":129},[123,160544,160545],{"class":133}," password:\n",[123,160547,160548,160550,160552,160555],{"class":125,"line":1230},[123,160549,32462],{"class":182},[123,160551,134],{"class":133},[123,160553,160554],{"class":238},"\"登录成功\"",[123,160556,140],{"class":133},[123,160558,160559],{"class":125,"line":1321},[123,160560,31638],{"class":129},[123,160562,160563,160565],{"class":125,"line":1327},[123,160564,158019],{"class":129},[123,160566,3748],{"class":133},[123,160568,160569,160571,160573,160575,160578,160581,160583,160585,160587,160590],{"class":125,"line":1339},[123,160570,32462],{"class":182},[123,160572,134],{"class":133},[123,160574,186],{"class":129},[123,160576,160577],{"class":238},"\"密码错误，还剩",[123,160579,160580],{"class":182},"{2",[123,160582,52282],{"class":129},[123,160584,3041],{"class":133},[123,160586,1080],{"class":182},[123,160588,160589],{"class":238},"次机会\"",[123,160591,140],{"class":133},[123,160593,160594,160596],{"class":125,"line":1621},[123,160595,1710],{"class":129},[123,160597,3748],{"class":133},[123,160599,160600,160602,160604,160607],{"class":125,"line":1626},[123,160601,31310],{"class":182},[123,160603,134],{"class":133},[123,160605,160606],{"class":238},"\"账号已锁定\"",[123,160608,140],{"class":133},[65,160610,160612],{"id":160611},"_413-小案例菜单程序","4.13 小案例：菜单程序",[114,160614,160616],{"className":30389,"code":160615,"language":30391,"meta":37,"style":37},"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",[120,160617,160618,160626,160637,160648,160659,160670,160681,160685,160700,160704,160716,160727,160739,160750,160762,160773,160785,160795,160799,160805],{"__ignoreMap":37},[123,160619,160620,160622,160624],{"class":125,"line":126},[123,160621,108660],{"class":129},[123,160623,95289],{"class":182},[123,160625,3748],{"class":133},[123,160627,160628,160630,160632,160635],{"class":125,"line":45},[123,160629,31310],{"class":182},[123,160631,134],{"class":133},[123,160633,160634],{"class":238},"\"====== 菜单 ======\"",[123,160636,140],{"class":133},[123,160638,160639,160641,160643,160646],{"class":125,"line":1189},[123,160640,31310],{"class":182},[123,160642,134],{"class":133},[123,160644,160645],{"class":238},"\"1. 查询余额\"",[123,160647,140],{"class":133},[123,160649,160650,160652,160654,160657],{"class":125,"line":1204},[123,160651,31310],{"class":182},[123,160653,134],{"class":133},[123,160655,160656],{"class":238},"\"2. 存款\"",[123,160658,140],{"class":133},[123,160660,160661,160663,160665,160668],{"class":125,"line":1210},[123,160662,31310],{"class":182},[123,160664,134],{"class":133},[123,160666,160667],{"class":238},"\"3. 取款\"",[123,160669,140],{"class":133},[123,160671,160672,160674,160676,160679],{"class":125,"line":1224},[123,160673,31310],{"class":182},[123,160675,134],{"class":133},[123,160677,160678],{"class":238},"\"0. 退出\"",[123,160680,140],{"class":133},[123,160682,160683],{"class":125,"line":1230},[123,160684,2409],{"emptyLinePlaceholder":50},[123,160686,160687,160690,160692,160694,160696,160698],{"class":125,"line":1321},[123,160688,160689],{"class":133},"    choice ",[123,160691,179],{"class":129},[123,160693,60616],{"class":182},[123,160695,134],{"class":133},[123,160697,153070],{"class":238},[123,160699,140],{"class":133},[123,160701,160702],{"class":125,"line":1327},[123,160703,2409],{"emptyLinePlaceholder":50},[123,160705,160706,160708,160710,160712,160714],{"class":125,"line":1339},[123,160707,3110],{"class":129},[123,160709,153083],{"class":133},[123,160711,2958],{"class":129},[123,160713,153088],{"class":238},[123,160715,3748],{"class":133},[123,160717,160718,160720,160722,160725],{"class":125,"line":1621},[123,160719,32462],{"class":182},[123,160721,134],{"class":133},[123,160723,160724],{"class":238},"\"余额为1000元\"",[123,160726,140],{"class":133},[123,160728,160729,160731,160733,160735,160737],{"class":125,"line":1626},[123,160730,39304],{"class":129},[123,160732,153083],{"class":133},[123,160734,2958],{"class":129},[123,160736,153107],{"class":238},[123,160738,3748],{"class":133},[123,160740,160741,160743,160745,160748],{"class":125,"line":1632},[123,160742,32462],{"class":182},[123,160744,134],{"class":133},[123,160746,160747],{"class":238},"\"存款功能\"",[123,160749,140],{"class":133},[123,160751,160752,160754,160756,160758,160760],{"class":125,"line":1637},[123,160753,39304],{"class":129},[123,160755,153083],{"class":133},[123,160757,2958],{"class":129},[123,160759,153125],{"class":238},[123,160761,3748],{"class":133},[123,160763,160764,160766,160768,160771],{"class":125,"line":1651},[123,160765,32462],{"class":182},[123,160767,134],{"class":133},[123,160769,160770],{"class":238},"\"取款功能\"",[123,160772,140],{"class":133},[123,160774,160775,160777,160779,160781,160783],{"class":125,"line":1656},[123,160776,39304],{"class":129},[123,160778,153083],{"class":133},[123,160780,2958],{"class":129},[123,160782,153179],{"class":238},[123,160784,3748],{"class":133},[123,160786,160787,160789,160791,160793],{"class":125,"line":1662},[123,160788,32462],{"class":182},[123,160790,134],{"class":133},[123,160792,153190],{"class":238},[123,160794,140],{"class":133},[123,160796,160797],{"class":125,"line":1683},[123,160798,31638],{"class":129},[123,160800,160801,160803],{"class":125,"line":1688},[123,160802,158019],{"class":129},[123,160804,3748],{"class":133},[123,160806,160807,160809,160811,160813],{"class":125,"line":1702},[123,160808,32462],{"class":182},[123,160810,134],{"class":133},[123,160812,153211],{"class":238},[123,160814,140],{"class":133},[14,160816,160817,160818,160820,160821,28396],{},"菜单类程序通常使用 ",[120,160819,159519],{},"，用户选择退出时 ",[120,160822,2062],{},[65,160824,160826],{"id":160825},"_414-易错点","4.14 易错点",[77,160828,160829,160834,160840,160848,160854],{},[80,160830,160831,160833],{},[120,160832,108660],{}," 循环必须更新控制变量。",[80,160835,160836,160839],{},[120,160837,160838],{},"range(1, 10)"," 不包含 10。",[80,160841,160842,160844,160845,160847],{},[120,160843,2062],{}," 结束整个循环，",[120,160846,154669],{}," 只跳过本轮。",[80,160849,160850,160851,160853],{},"嵌套循环中，",[120,160852,2062],{}," 只跳出当前所在的一层循环。",[80,160855,160856],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[65,160858,160860],{"id":160859},"_415-本章练习","4.15 本章练习",[77,160862,160863,160866,160869,160872,160875],{},[80,160864,160865],{},"输出 1 到 100。",[80,160867,160868],{},"计算 1 到 100 的偶数和。",[80,160870,160871],{},"输出 100 以内能被 3 和 5 同时整除的数。",[80,160873,160874],{},"编写猜数字游戏，限制最多猜 7 次。",[80,160876,160877],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5136,160879,160880],{},"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":37,"searchDepth":45,"depth":45,"links":160882},[160883,160884,160885,160886,160887,160891,160892,160893,160894,160895,160896,160897,160898,160899,160900],{"id":159139,"depth":45,"text":159140},{"id":159169,"depth":45,"text":159170},{"id":159258,"depth":45,"text":159259},{"id":159352,"depth":45,"text":159353},{"id":159526,"depth":45,"text":159527,"children":160888},[160889,160890],{"id":159530,"depth":1189,"text":159531},{"id":159594,"depth":1189,"text":159595},{"id":159658,"depth":45,"text":159659},{"id":159753,"depth":45,"text":159754},{"id":159862,"depth":45,"text":159863},{"id":160058,"depth":45,"text":160059},{"id":160143,"depth":45,"text":160144},{"id":160282,"depth":45,"text":160283},{"id":160462,"depth":45,"text":160463},{"id":160611,"depth":45,"text":160612},{"id":160825,"depth":45,"text":160826},{"id":160859,"depth":45,"text":160860},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159131,"description":47},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160907,"title":160908,"body":160909,"description":47,"extension":48,"meta":162914,"navigation":50,"path":162915,"seo":162916,"stem":162917,"__hash__":162918},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160910,"toc":162894},[160911,160914,160918,160921,160924,160938,160941,160955,160959,160961,160980,160982,161029,161031,161045,161049,161123,161126,161130,161133,161192,161200,161203,161256,161259,161263,161268,161323,161331,161381,161385,161390,161398,161497,161503,161507,161512,161515,161526,161567,161580,161584,161587,161623,161626,161639,161642,161702,161706,161710,161713,161764,161768,161771,161818,161824,161890,161893,161897,161900,162016,162019,162023,162026,162132,162136,162139,162177,162180,162222,162225,162285,162288,162292,162756,162759,162763,162790,162796,162857,162861,162891],[10,160912,160908],{"id":160913},"_5-函数基础",[65,160915,160917],{"id":160916},"_51-为什么需要函数","5.1 为什么需要函数",[14,160919,160920],{},"函数用于封装一段可以重复使用的代码。",[14,160922,160923],{},"不使用函数的问题：",[77,160925,160926,160929,160932,160935],{},[80,160927,160928],{},"重复代码多。",[80,160930,160931],{},"修改逻辑时容易漏改。",[80,160933,160934],{},"主流程不清晰。",[80,160936,160937],{},"程序越写越长，难以维护。",[14,160939,160940],{},"使用函数后的好处：",[77,160942,160943,160946,160949,160952],{},[80,160944,160945],{},"提高复用性。",[80,160947,160948],{},"提高可读性。",[80,160950,160951],{},"便于调试。",[80,160953,160954],{},"便于分工。",[65,160956,160958],{"id":160957},"_52-函数定义","5.2 函数定义",[14,160960,5191],{},[114,160962,160964],{"className":30389,"code":160963,"language":30391,"meta":37,"style":37},"def 函数名():\n    函数体\n",[120,160965,160966,160975],{"__ignoreMap":37},[123,160967,160968,160970,160973],{"class":125,"line":126},[123,160969,31958],{"class":129},[123,160971,160972],{"class":1972}," 函数名",[123,160974,31964],{"class":133},[123,160976,160977],{"class":125,"line":45},[123,160978,160979],{"class":133},"    函数体\n",[14,160981,15145],{},[114,160983,160985],{"className":30389,"code":160984,"language":30391,"meta":37,"style":37},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[120,160986,160987,160996,161006,161016,161020,161024],{"__ignoreMap":37},[123,160988,160989,160991,160994],{"class":125,"line":126},[123,160990,31958],{"class":129},[123,160992,160993],{"class":1972}," say_hello",[123,160995,31964],{"class":133},[123,160997,160998,161000,161002,161004],{"class":125,"line":45},[123,160999,31310],{"class":182},[123,161001,134],{"class":133},[123,161003,5854],{"class":238},[123,161005,140],{"class":133},[123,161007,161008,161010,161012,161014],{"class":125,"line":1189},[123,161009,31310],{"class":182},[123,161011,134],{"class":133},[123,161013,146636],{"class":238},[123,161015,140],{"class":133},[123,161017,161018],{"class":125,"line":1204},[123,161019,2409],{"emptyLinePlaceholder":50},[123,161021,161022],{"class":125,"line":1210},[123,161023,2409],{"emptyLinePlaceholder":50},[123,161025,161026],{"class":125,"line":1224},[123,161027,161028],{"class":133},"say_hello()\n",[14,161030,9035],{},[77,161032,161033,161036,161039,161042],{},[80,161034,161035],{},"函数必须先定义，再调用。",[80,161037,161038],{},"函数名遵循变量命名规则。",[80,161040,161041],{},"函数体需要缩进。",[80,161043,161044],{},"函数不调用就不会执行。",[65,161046,161048],{"id":161047},"_53-函数调用","5.3 函数调用",[114,161050,161052],{"className":30389,"code":161051,"language":30391,"meta":37,"style":37},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[120,161053,161054,161063,161074,161085,161096,161106,161110,161114,161119],{"__ignoreMap":37},[123,161055,161056,161058,161061],{"class":125,"line":126},[123,161057,31958],{"class":129},[123,161059,161060],{"class":1972}," print_menu",[123,161062,31964],{"class":133},[123,161064,161065,161067,161069,161072],{"class":125,"line":45},[123,161066,31310],{"class":182},[123,161068,134],{"class":133},[123,161070,161071],{"class":238},"\"1. 查询\"",[123,161073,140],{"class":133},[123,161075,161076,161078,161080,161083],{"class":125,"line":1189},[123,161077,31310],{"class":182},[123,161079,134],{"class":133},[123,161081,161082],{"class":238},"\"2. 添加\"",[123,161084,140],{"class":133},[123,161086,161087,161089,161091,161094],{"class":125,"line":1204},[123,161088,31310],{"class":182},[123,161090,134],{"class":133},[123,161092,161093],{"class":238},"\"3. 删除\"",[123,161095,140],{"class":133},[123,161097,161098,161100,161102,161104],{"class":125,"line":1210},[123,161099,31310],{"class":182},[123,161101,134],{"class":133},[123,161103,160678],{"class":238},[123,161105,140],{"class":133},[123,161107,161108],{"class":125,"line":1224},[123,161109,2409],{"emptyLinePlaceholder":50},[123,161111,161112],{"class":125,"line":1230},[123,161113,2409],{"emptyLinePlaceholder":50},[123,161115,161116],{"class":125,"line":1321},[123,161117,161118],{"class":133},"print_menu()\n",[123,161120,161121],{"class":125,"line":1327},[123,161122,161118],{"class":133},[14,161124,161125],{},"函数可以多次调用，每次调用都会执行函数体。",[65,161127,161129],{"id":161128},"_54-参数","5.4 参数",[14,161131,161132],{},"参数用于向函数传递数据。",[114,161134,161136],{"className":30389,"code":161135,"language":30391,"meta":37,"style":37},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[120,161137,161138,161147,161167,161171,161175,161184],{"__ignoreMap":37},[123,161139,161140,161142,161144],{"class":125,"line":126},[123,161141,31958],{"class":129},[123,161143,160993],{"class":1972},[123,161145,161146],{"class":133},"(name):\n",[123,161148,161149,161151,161153,161155,161157,161159,161161,161163,161165],{"class":125,"line":45},[123,161150,31310],{"class":182},[123,161152,134],{"class":133},[123,161154,186],{"class":129},[123,161156,157051],{"class":238},[123,161158,1030],{"class":182},[123,161160,79821],{"class":133},[123,161162,1080],{"class":182},[123,161164,385],{"class":238},[123,161166,140],{"class":133},[123,161168,161169],{"class":125,"line":1189},[123,161170,2409],{"emptyLinePlaceholder":50},[123,161172,161173],{"class":125,"line":1204},[123,161174,2409],{"emptyLinePlaceholder":50},[123,161176,161177,161180,161182],{"class":125,"line":1210},[123,161178,161179],{"class":133},"say_hello(",[123,161181,149885],{"class":238},[123,161183,140],{"class":133},[123,161185,161186,161188,161190],{"class":125,"line":1224},[123,161187,161179],{"class":133},[123,161189,150933],{"class":238},[123,161191,140],{"class":133},[14,161193,161194,161196,161197,161199],{},[120,161195,79821],{}," 是形参，",[120,161198,149885],{}," 是实参。",[14,161201,161202],{},"多个参数：",[114,161204,161206],{"className":30389,"code":161205,"language":30391,"meta":37,"style":37},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[120,161207,161208,161216,161229,161235,161239,161243],{"__ignoreMap":37},[123,161209,161210,161212,161214],{"class":125,"line":126},[123,161211,31958],{"class":129},[123,161213,5219],{"class":1972},[123,161215,151090],{"class":133},[123,161217,161218,161221,161223,161225,161227],{"class":125,"line":45},[123,161219,161220],{"class":133},"    result ",[123,161222,179],{"class":129},[123,161224,10879],{"class":133},[123,161226,615],{"class":129},[123,161228,151101],{"class":133},[123,161230,161231,161233],{"class":125,"line":1189},[123,161232,31310],{"class":182},[123,161234,76596],{"class":133},[123,161236,161237],{"class":125,"line":1204},[123,161238,2409],{"emptyLinePlaceholder":50},[123,161240,161241],{"class":125,"line":1210},[123,161242,2409],{"emptyLinePlaceholder":50},[123,161244,161245,161248,161250,161252,161254],{"class":125,"line":1224},[123,161246,161247],{"class":133},"add(",[123,161249,580],{"class":182},[123,161251,12445],{"class":133},[123,161253,834],{"class":182},[123,161255,140],{"class":133},[14,161257,161258],{},"调用时参数数量必须匹配。",[65,161260,161262],{"id":161261},"_55-返回值","5.5 返回值",[14,161264,161265,161267],{},[120,161266,17056],{}," 用于把函数内部的结果返回给调用者。",[114,161269,161271],{"className":30389,"code":161270,"language":30391,"meta":37,"style":37},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[120,161272,161273,161281,161291,161295,161299,161317],{"__ignoreMap":37},[123,161274,161275,161277,161279],{"class":125,"line":126},[123,161276,31958],{"class":129},[123,161278,5219],{"class":1972},[123,161280,151090],{"class":133},[123,161282,161283,161285,161287,161289],{"class":125,"line":45},[123,161284,4099],{"class":129},[123,161286,10879],{"class":133},[123,161288,615],{"class":129},[123,161290,151101],{"class":133},[123,161292,161293],{"class":125,"line":1189},[123,161294,2409],{"emptyLinePlaceholder":50},[123,161296,161297],{"class":125,"line":1204},[123,161298,2409],{"emptyLinePlaceholder":50},[123,161300,161301,161304,161306,161309,161311,161313,161315],{"class":125,"line":1210},[123,161302,161303],{"class":133},"result ",[123,161305,179],{"class":129},[123,161307,161308],{"class":133}," add(",[123,161310,580],{"class":182},[123,161312,12445],{"class":133},[123,161314,834],{"class":182},[123,161316,140],{"class":133},[123,161318,161319,161321],{"class":125,"line":1224},[123,161320,30426],{"class":182},[123,161322,76596],{"class":133},[14,161324,161325,161326,161328,161329,28396],{},"如果函数没有写 ",[120,161327,17056],{},"，默认返回 ",[120,161330,95683],{},[114,161332,161334],{"className":30389,"code":161333,"language":30391,"meta":37,"style":37},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[120,161335,161336,161344,161354,161358,161362,161371],{"__ignoreMap":37},[123,161337,161338,161340,161342],{"class":125,"line":126},[123,161339,31958],{"class":129},[123,161341,160993],{"class":1972},[123,161343,31964],{"class":133},[123,161345,161346,161348,161350,161352],{"class":125,"line":45},[123,161347,31310],{"class":182},[123,161349,134],{"class":133},[123,161351,5854],{"class":238},[123,161353,140],{"class":133},[123,161355,161356],{"class":125,"line":1189},[123,161357,2409],{"emptyLinePlaceholder":50},[123,161359,161360],{"class":125,"line":1204},[123,161361,2409],{"emptyLinePlaceholder":50},[123,161363,161364,161366,161368],{"class":125,"line":1210},[123,161365,161303],{"class":133},[123,161367,179],{"class":129},[123,161369,161370],{"class":133}," say_hello()\n",[123,161372,161373,161375,161378],{"class":125,"line":1224},[123,161374,30426],{"class":182},[123,161376,161377],{"class":133},"(result)  ",[123,161379,161380],{"class":192},"# None\n",[65,161382,161384],{"id":161383},"_56-return的作用","5.6 return的作用",[14,161386,161387,161389],{},[120,161388,17056],{}," 有两个作用：",[77,161391,161392,161395],{},[80,161393,161394],{},"返回结果。",[80,161396,161397],{},"结束函数。",[114,161399,161401],{"className":30389,"code":161400,"language":30391,"meta":37,"style":37},"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",[120,161402,161403,161413,161425,161432,161436,161448,161455,161459,161466,161470,161474,161485],{"__ignoreMap":37},[123,161404,161405,161407,161410],{"class":125,"line":126},[123,161406,31958],{"class":129},[123,161408,161409],{"class":1972}," check_age",[123,161411,161412],{"class":133},"(age):\n",[123,161414,161415,161417,161419,161421,161423],{"class":125,"line":45},[123,161416,3110],{"class":129},[123,161418,15717],{"class":133},[123,161420,1044],{"class":129},[123,161422,4102],{"class":182},[123,161424,3748],{"class":133},[123,161426,161427,161429],{"class":125,"line":1189},[123,161428,14762],{"class":129},[123,161430,161431],{"class":238}," \"年龄不合法\"\n",[123,161433,161434],{"class":125,"line":1204},[123,161435,2409],{"emptyLinePlaceholder":50},[123,161437,161438,161440,161442,161444,161446],{"class":125,"line":1210},[123,161439,3110],{"class":129},[123,161441,15717],{"class":133},[123,161443,1719],{"class":129},[123,161445,156282],{"class":182},[123,161447,3748],{"class":133},[123,161449,161450,161452],{"class":125,"line":1224},[123,161451,14762],{"class":129},[123,161453,161454],{"class":238}," \"成年人\"\n",[123,161456,161457],{"class":125,"line":1230},[123,161458,2409],{"emptyLinePlaceholder":50},[123,161460,161461,161463],{"class":125,"line":1321},[123,161462,4099],{"class":129},[123,161464,161465],{"class":238}," \"未成年人\"\n",[123,161467,161468],{"class":125,"line":1327},[123,161469,2409],{"emptyLinePlaceholder":50},[123,161471,161472],{"class":125,"line":1339},[123,161473,2409],{"emptyLinePlaceholder":50},[123,161475,161476,161478,161481,161483],{"class":125,"line":1621},[123,161477,30426],{"class":182},[123,161479,161480],{"class":133},"(check_age(",[123,161482,834],{"class":182},[123,161484,30508],{"class":133},[123,161486,161487,161489,161491,161493,161495],{"class":125,"line":1626},[123,161488,30426],{"class":182},[123,161490,161480],{"class":133},[123,161492,666],{"class":129},[123,161494,351],{"class":182},[123,161496,30508],{"class":133},[14,161498,161499,161500,161502],{},"函数执行到 ",[120,161501,17056],{}," 后，后面的代码不会继续执行。",[65,161504,161506],{"id":161505},"_57-none","5.7 None",[14,161508,161509,161511],{},[120,161510,95683],{}," 表示空值或没有结果。",[14,161513,161514],{},"常见使用场景：",[77,161516,161517,161520,161523],{},[80,161518,161519],{},"函数没有返回值。",[80,161521,161522],{},"变量暂时没有具体值。",[80,161524,161525],{},"表示查询不到结果。",[114,161527,161529],{"className":30389,"code":161528,"language":30391,"meta":37,"style":37},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[120,161530,161531,161539,161543,161556],{"__ignoreMap":37},[123,161532,161533,161535,161537],{"class":125,"line":126},[123,161534,161303],{"class":133},[123,161536,179],{"class":129},[123,161538,152169],{"class":182},[123,161540,161541],{"class":125,"line":45},[123,161542,2409],{"emptyLinePlaceholder":50},[123,161544,161545,161547,161550,161552,161554],{"class":125,"line":1189},[123,161546,1540],{"class":129},[123,161548,161549],{"class":133}," result ",[123,161551,38938],{"class":129},[123,161553,38944],{"class":182},[123,161555,3748],{"class":133},[123,161557,161558,161560,161562,161565],{"class":125,"line":1204},[123,161559,31310],{"class":182},[123,161561,134],{"class":133},[123,161563,161564],{"class":238},"\"没有数据\"",[123,161566,140],{"class":133},[14,161568,161569,161570,161572,161573,161576,161577,28396],{},"判断 ",[120,161571,95683],{}," 推荐使用 ",[120,161574,161575],{},"is None","，不要写成 ",[120,161578,161579],{},"== None",[65,161581,161583],{"id":161582},"_58-函数文档字符串","5.8 函数文档字符串",[14,161585,161586],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[114,161588,161590],{"className":30389,"code":161589,"language":30391,"meta":37,"style":37},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[120,161591,161592,161602,161607],{"__ignoreMap":37},[123,161593,161594,161596,161599],{"class":125,"line":126},[123,161595,31958],{"class":129},[123,161597,161598],{"class":1972}," calculate_bmi",[123,161600,161601],{"class":133},"(weight, height):\n",[123,161603,161604],{"class":125,"line":45},[123,161605,161606],{"class":238},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[123,161608,161609,161611,161614,161616,161619,161621],{"class":125,"line":1189},[123,161610,4099],{"class":129},[123,161612,161613],{"class":133}," weight ",[123,161615,718],{"class":129},[123,161617,161618],{"class":133}," height ",[123,161620,10671],{"class":129},[123,161622,47734],{"class":182},[14,161624,161625],{},"查看说明：",[114,161627,161629],{"className":30389,"code":161628,"language":30391,"meta":37,"style":37},"help(calculate_bmi)\n",[120,161630,161631],{"__ignoreMap":37},[123,161632,161633,161636],{"class":125,"line":126},[123,161634,161635],{"class":182},"help",[123,161637,161638],{"class":133},"(calculate_bmi)\n",[14,161640,161641],{},"较完整的写法：",[114,161643,161645],{"className":30389,"code":161644,"language":30391,"meta":37,"style":37},"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",[120,161646,161647,161655,161660,161665,161669,161674,161679,161684,161688],{"__ignoreMap":37},[123,161648,161649,161651,161653],{"class":125,"line":126},[123,161650,31958],{"class":129},[123,161652,161598],{"class":1972},[123,161654,161601],{"class":133},[123,161656,161657],{"class":125,"line":45},[123,161658,161659],{"class":238},"    \"\"\"\n",[123,161661,161662],{"class":125,"line":1189},[123,161663,161664],{"class":238},"    计算BMI。\n",[123,161666,161667],{"class":125,"line":1204},[123,161668,2409],{"emptyLinePlaceholder":50},[123,161670,161671],{"class":125,"line":1210},[123,161672,161673],{"class":238},"    :param weight: 体重，单位kg\n",[123,161675,161676],{"class":125,"line":1224},[123,161677,161678],{"class":238},"    :param height: 身高，单位m\n",[123,161680,161681],{"class":125,"line":1230},[123,161682,161683],{"class":238},"    :return: BMI数值\n",[123,161685,161686],{"class":125,"line":1321},[123,161687,161659],{"class":238},[123,161689,161690,161692,161694,161696,161698,161700],{"class":125,"line":1327},[123,161691,4099],{"class":129},[123,161693,161613],{"class":133},[123,161695,718],{"class":129},[123,161697,161618],{"class":133},[123,161699,10671],{"class":129},[123,161701,47734],{"class":182},[65,161703,161705],{"id":161704},"_59-变量作用域","5.9 变量作用域",[94,161707,161709],{"id":161708},"_591-局部变量","5.9.1 局部变量",[14,161711,161712],{},"在函数内部定义的变量，只能在函数内部使用。",[114,161714,161716],{"className":30389,"code":161715,"language":30391,"meta":37,"style":37},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[120,161717,161718,161727,161735,161741,161745,161749,161754],{"__ignoreMap":37},[123,161719,161720,161722,161725],{"class":125,"line":126},[123,161721,31958],{"class":129},[123,161723,161724],{"class":1972}," test",[123,161726,31964],{"class":133},[123,161728,161729,161731,161733],{"class":125,"line":45},[123,161730,45604],{"class":133},[123,161732,179],{"class":129},[123,161734,58439],{"class":182},[123,161736,161737,161739],{"class":125,"line":1189},[123,161738,31310],{"class":182},[123,161740,147],{"class":133},[123,161742,161743],{"class":125,"line":1204},[123,161744,2409],{"emptyLinePlaceholder":50},[123,161746,161747],{"class":125,"line":1210},[123,161748,2409],{"emptyLinePlaceholder":50},[123,161750,161751],{"class":125,"line":1224},[123,161752,161753],{"class":133},"test()\n",[123,161755,161756,161758,161761],{"class":125,"line":1230},[123,161757,30426],{"class":182},[123,161759,161760],{"class":133},"(num)  ",[123,161762,161763],{"class":192},"# 报错\n",[94,161765,161767],{"id":161766},"_592-全局变量","5.9.2 全局变量",[14,161769,161770],{},"在函数外部定义的变量，可以在函数内部读取。",[114,161772,161774],{"className":30389,"code":161773,"language":30391,"meta":37,"style":37},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[120,161775,161776,161784,161788,161792,161800,161806,161810,161814],{"__ignoreMap":37},[123,161777,161778,161780,161782],{"class":125,"line":126},[123,161779,146533],{"class":133},[123,161781,179],{"class":129},[123,161783,149350],{"class":238},[123,161785,161786],{"class":125,"line":45},[123,161787,2409],{"emptyLinePlaceholder":50},[123,161789,161790],{"class":125,"line":1189},[123,161791,2409],{"emptyLinePlaceholder":50},[123,161793,161794,161796,161798],{"class":125,"line":1204},[123,161795,31958],{"class":129},[123,161797,160993],{"class":1972},[123,161799,31964],{"class":133},[123,161801,161802,161804],{"class":125,"line":1210},[123,161803,31310],{"class":182},[123,161805,150657],{"class":133},[123,161807,161808],{"class":125,"line":1224},[123,161809,2409],{"emptyLinePlaceholder":50},[123,161811,161812],{"class":125,"line":1230},[123,161813,2409],{"emptyLinePlaceholder":50},[123,161815,161816],{"class":125,"line":1321},[123,161817,161028],{"class":133},[14,161819,161820,161821,28396],{},"如果要在函数内部修改全局变量，需要 ",[120,161822,161823],{},"global",[114,161825,161827],{"className":30389,"code":161826,"language":30391,"meta":37,"style":37},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[120,161828,161829,161837,161841,161845,161854,161862,161870,161874,161878,161883],{"__ignoreMap":37},[123,161830,161831,161833,161835],{"class":125,"line":126},[123,161832,146688],{"class":133},[123,161834,179],{"class":129},[123,161836,47344],{"class":182},[123,161838,161839],{"class":125,"line":45},[123,161840,2409],{"emptyLinePlaceholder":50},[123,161842,161843],{"class":125,"line":1189},[123,161844,2409],{"emptyLinePlaceholder":50},[123,161846,161847,161849,161852],{"class":125,"line":1204},[123,161848,31958],{"class":129},[123,161850,161851],{"class":1972}," add_count",[123,161853,31964],{"class":133},[123,161855,161856,161859],{"class":125,"line":1210},[123,161857,161858],{"class":129},"    global",[123,161860,161861],{"class":133}," count\n",[123,161863,161864,161866,161868],{"class":125,"line":1224},[123,161865,159430],{"class":133},[123,161867,9487],{"class":129},[123,161869,55710],{"class":182},[123,161871,161872],{"class":125,"line":1230},[123,161873,2409],{"emptyLinePlaceholder":50},[123,161875,161876],{"class":125,"line":1321},[123,161877,2409],{"emptyLinePlaceholder":50},[123,161879,161880],{"class":125,"line":1327},[123,161881,161882],{"class":133},"add_count()\n",[123,161884,161885,161887],{"class":125,"line":1339},[123,161886,30426],{"class":182},[123,161888,161889],{"class":133},"(count)\n",[14,161891,161892],{},"不建议大量使用全局变量，项目变大后很难维护。",[65,161894,161896],{"id":161895},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,161898,161899],{},"一个函数中可以调用另一个函数。",[114,161901,161903],{"className":30389,"code":161902,"language":30391,"meta":37,"style":37},"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",[120,161904,161905,161914,161928,161932,161936,161945,161950,161970,161991,161995,161999,162003],{"__ignoreMap":37},[123,161906,161907,161909,161912],{"class":125,"line":126},[123,161908,31958],{"class":129},[123,161910,161911],{"class":1972}," print_line",[123,161913,31964],{"class":133},[123,161915,161916,161918,161920,161922,161924,161926],{"class":125,"line":45},[123,161917,31310],{"class":182},[123,161919,134],{"class":133},[123,161921,32494],{"class":238},[123,161923,6528],{"class":129},[123,161925,78676],{"class":182},[123,161927,140],{"class":133},[123,161929,161930],{"class":125,"line":1189},[123,161931,2409],{"emptyLinePlaceholder":50},[123,161933,161934],{"class":125,"line":1204},[123,161935,2409],{"emptyLinePlaceholder":50},[123,161937,161938,161940,161943],{"class":125,"line":1210},[123,161939,31958],{"class":129},[123,161941,161942],{"class":1972}," print_info",[123,161944,149372],{"class":133},[123,161946,161947],{"class":125,"line":1224},[123,161948,161949],{"class":133},"    print_line()\n",[123,161951,161952,161954,161956,161958,161960,161962,161964,161966,161968],{"class":125,"line":1230},[123,161953,31310],{"class":182},[123,161955,134],{"class":133},[123,161957,186],{"class":129},[123,161959,156679],{"class":238},[123,161961,1030],{"class":182},[123,161963,79821],{"class":133},[123,161965,1080],{"class":182},[123,161967,385],{"class":238},[123,161969,140],{"class":133},[123,161971,161972,161974,161976,161978,161981,161983,161985,161987,161989],{"class":125,"line":1321},[123,161973,31310],{"class":182},[123,161975,134],{"class":133},[123,161977,186],{"class":129},[123,161979,161980],{"class":238},"\"年龄:",[123,161982,1030],{"class":182},[123,161984,70232],{"class":133},[123,161986,1080],{"class":182},[123,161988,385],{"class":238},[123,161990,140],{"class":133},[123,161992,161993],{"class":125,"line":1327},[123,161994,161949],{"class":133},[123,161996,161997],{"class":125,"line":1339},[123,161998,2409],{"emptyLinePlaceholder":50},[123,162000,162001],{"class":125,"line":1621},[123,162002,2409],{"emptyLinePlaceholder":50},[123,162004,162005,162008,162010,162012,162014],{"class":125,"line":1626},[123,162006,162007],{"class":133},"print_info(",[123,162009,149885],{"class":238},[123,162011,12445],{"class":133},[123,162013,784],{"class":182},[123,162015,140],{"class":133},[14,162017,162018],{},"这种方式可以把小功能组合成大功能。",[65,162020,162022],{"id":162021},"_511-参数检查","5.11 参数检查",[14,162024,162025],{},"函数内部可以检查参数是否合法。",[114,162027,162029],{"className":30389,"code":162028,"language":30391,"meta":37,"style":37},"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",[120,162030,162031,162040,162052,162058,162068,162072,162076,162093,162097,162109,162120,162126],{"__ignoreMap":37},[123,162032,162033,162035,162038],{"class":125,"line":126},[123,162034,31958],{"class":129},[123,162036,162037],{"class":1972}," divide",[123,162039,151090],{"class":133},[123,162041,162042,162044,162046,162048,162050],{"class":125,"line":45},[123,162043,3110],{"class":129},[123,162045,10892],{"class":133},[123,162047,2958],{"class":129},[123,162049,4102],{"class":182},[123,162051,3748],{"class":133},[123,162053,162054,162056],{"class":125,"line":1189},[123,162055,14762],{"class":129},[123,162057,152169],{"class":182},[123,162059,162060,162062,162064,162066],{"class":125,"line":1204},[123,162061,4099],{"class":129},[123,162063,10879],{"class":133},[123,162065,718],{"class":129},[123,162067,151101],{"class":133},[123,162069,162070],{"class":125,"line":1210},[123,162071,2409],{"emptyLinePlaceholder":50},[123,162073,162074],{"class":125,"line":1224},[123,162075,2409],{"emptyLinePlaceholder":50},[123,162077,162078,162080,162082,162085,162087,162089,162091],{"class":125,"line":1230},[123,162079,161303],{"class":133},[123,162081,179],{"class":129},[123,162083,162084],{"class":133}," divide(",[123,162086,580],{"class":182},[123,162088,12445],{"class":133},[123,162090,325],{"class":182},[123,162092,140],{"class":133},[123,162094,162095],{"class":125,"line":1321},[123,162096,2409],{"emptyLinePlaceholder":50},[123,162098,162099,162101,162103,162105,162107],{"class":125,"line":1327},[123,162100,1540],{"class":129},[123,162102,161549],{"class":133},[123,162104,38938],{"class":129},[123,162106,38944],{"class":182},[123,162108,3748],{"class":133},[123,162110,162111,162113,162115,162118],{"class":125,"line":1339},[123,162112,31310],{"class":182},[123,162114,134],{"class":133},[123,162116,162117],{"class":238},"\"除数不能为0\"",[123,162119,140],{"class":133},[123,162121,162122,162124],{"class":125,"line":1621},[123,162123,1710],{"class":129},[123,162125,3748],{"class":133},[123,162127,162128,162130],{"class":125,"line":1626},[123,162129,31310],{"class":182},[123,162131,76596],{"class":133},[65,162133,162135],{"id":162134},"_512-类型提示","5.12 类型提示",[14,162137,162138],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[114,162140,162142],{"className":30389,"code":162141,"language":30391,"meta":37,"style":37},"def add(a: int, b: int) -> int:\n    return a + b\n",[120,162143,162144,162167],{"__ignoreMap":37},[123,162145,162146,162148,162150,162153,162155,162158,162160,162163,162165],{"class":125,"line":126},[123,162147,31958],{"class":129},[123,162149,5219],{"class":1972},[123,162151,162152],{"class":133},"(a: ",[123,162154,137],{"class":182},[123,162156,162157],{"class":133},", b: ",[123,162159,137],{"class":182},[123,162161,162162],{"class":133},") -> ",[123,162164,137],{"class":182},[123,162166,3748],{"class":133},[123,162168,162169,162171,162173,162175],{"class":125,"line":45},[123,162170,4099],{"class":129},[123,162172,10879],{"class":133},[123,162174,615],{"class":129},[123,162176,151101],{"class":133},[14,162178,162179],{},"字符串参数：",[114,162181,162183],{"className":30389,"code":162182,"language":30391,"meta":37,"style":37},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[120,162184,162185,162202],{"__ignoreMap":37},[123,162186,162187,162189,162191,162194,162196,162198,162200],{"class":125,"line":126},[123,162188,31958],{"class":129},[123,162190,160993],{"class":1972},[123,162192,162193],{"class":133},"(name: ",[123,162195,1309],{"class":182},[123,162197,162162],{"class":133},[123,162199,95683],{"class":182},[123,162201,3748],{"class":133},[123,162203,162204,162206,162208,162210,162212,162214,162216,162218,162220],{"class":125,"line":45},[123,162205,31310],{"class":182},[123,162207,134],{"class":133},[123,162209,186],{"class":129},[123,162211,157051],{"class":238},[123,162213,1030],{"class":182},[123,162215,79821],{"class":133},[123,162217,1080],{"class":182},[123,162219,385],{"class":238},[123,162221,140],{"class":133},[14,162223,162224],{},"列表参数：",[114,162226,162228],{"className":30389,"code":162227,"language":30391,"meta":37,"style":37},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[120,162229,162230,162249,162257,162269,162278],{"__ignoreMap":37},[123,162231,162232,162234,162237,162240,162242,162245,162247],{"class":125,"line":126},[123,162233,31958],{"class":129},[123,162235,162236],{"class":1972}," get_total",[123,162238,162239],{"class":133},"(numbers: list[",[123,162241,137],{"class":182},[123,162243,162244],{"class":133},"]) -> ",[123,162246,137],{"class":182},[123,162248,3748],{"class":133},[123,162250,162251,162253,162255],{"class":125,"line":45},[123,162252,159304],{"class":133},[123,162254,179],{"class":129},[123,162256,47344],{"class":182},[123,162258,162259,162261,162264,162266],{"class":125,"line":1189},[123,162260,3210],{"class":129},[123,162262,162263],{"class":133}," number ",[123,162265,26054],{"class":129},[123,162267,162268],{"class":133}," numbers:\n",[123,162270,162271,162273,162275],{"class":125,"line":1204},[123,162272,159979],{"class":133},[123,162274,9487],{"class":129},[123,162276,162277],{"class":133}," number\n",[123,162279,162280,162282],{"class":125,"line":1210},[123,162281,4099],{"class":129},[123,162283,162284],{"class":133}," total\n",[14,162286,162287],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[65,162289,162291],{"id":162290},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[114,162293,162295],{"className":30389,"code":162294,"language":30391,"meta":37,"style":37},"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",[120,162296,162297,162307,162311,162315,162323,162334,162344,162354,162364,162374,162378,162382,162391,162413,162417,162421,162430,162436,162456,162468,162479,162483,162492,162503,162508,162512,162516,162525,162531,162550,162562,162572,162576,162587,162597,162601,162609,162620,162624,162628,162632,162640,162645,162659,162663,162675,162680,162692,162697,162709,162714,162726,162736,162740,162746],{"__ignoreMap":37},[123,162298,162299,162302,162304],{"class":125,"line":126},[123,162300,162301],{"class":133},"balance ",[123,162303,179],{"class":129},[123,162305,162306],{"class":182}," 1000\n",[123,162308,162309],{"class":125,"line":45},[123,162310,2409],{"emptyLinePlaceholder":50},[123,162312,162313],{"class":125,"line":1189},[123,162314,2409],{"emptyLinePlaceholder":50},[123,162316,162317,162319,162321],{"class":125,"line":1204},[123,162318,31958],{"class":129},[123,162320,152030],{"class":1972},[123,162322,31964],{"class":133},[123,162324,162325,162327,162329,162332],{"class":125,"line":1210},[123,162326,31310],{"class":182},[123,162328,134],{"class":133},[123,162330,162331],{"class":238},"\"====== ATM ======\"",[123,162333,140],{"class":133},[123,162335,162336,162338,162340,162342],{"class":125,"line":1224},[123,162337,31310],{"class":182},[123,162339,134],{"class":133},[123,162341,160645],{"class":238},[123,162343,140],{"class":133},[123,162345,162346,162348,162350,162352],{"class":125,"line":1230},[123,162347,31310],{"class":182},[123,162349,134],{"class":133},[123,162351,160656],{"class":238},[123,162353,140],{"class":133},[123,162355,162356,162358,162360,162362],{"class":125,"line":1321},[123,162357,31310],{"class":182},[123,162359,134],{"class":133},[123,162361,160667],{"class":238},[123,162363,140],{"class":133},[123,162365,162366,162368,162370,162372],{"class":125,"line":1327},[123,162367,31310],{"class":182},[123,162369,134],{"class":133},[123,162371,160678],{"class":238},[123,162373,140],{"class":133},[123,162375,162376],{"class":125,"line":1339},[123,162377,2409],{"emptyLinePlaceholder":50},[123,162379,162380],{"class":125,"line":1621},[123,162381,2409],{"emptyLinePlaceholder":50},[123,162383,162384,162386,162389],{"class":125,"line":1626},[123,162385,31958],{"class":129},[123,162387,162388],{"class":1972}," show_balance",[123,162390,31964],{"class":133},[123,162392,162393,162395,162397,162399,162402,162404,162407,162409,162411],{"class":125,"line":1632},[123,162394,31310],{"class":182},[123,162396,134],{"class":133},[123,162398,186],{"class":129},[123,162400,162401],{"class":238},"\"当前余额:",[123,162403,1030],{"class":182},[123,162405,162406],{"class":133},"balance",[123,162408,1080],{"class":182},[123,162410,157009],{"class":238},[123,162412,140],{"class":133},[123,162414,162415],{"class":125,"line":1637},[123,162416,2409],{"emptyLinePlaceholder":50},[123,162418,162419],{"class":125,"line":1651},[123,162420,2409],{"emptyLinePlaceholder":50},[123,162422,162423,162425,162428],{"class":125,"line":1656},[123,162424,31958],{"class":129},[123,162426,162427],{"class":1972}," save_money",[123,162429,31964],{"class":133},[123,162431,162432,162434],{"class":125,"line":1662},[123,162433,161858],{"class":129},[123,162435,150096],{"class":133},[123,162437,162438,162441,162443,162445,162447,162449,162451,162454],{"class":125,"line":1683},[123,162439,162440],{"class":133},"    money ",[123,162442,179],{"class":129},[123,162444,109794],{"class":182},[123,162446,134],{"class":133},[123,162448,53832],{"class":182},[123,162450,134],{"class":133},[123,162452,162453],{"class":238},"\"请输入存款金额:\"",[123,162455,30508],{"class":133},[123,162457,162458,162460,162462,162464,162466],{"class":125,"line":1688},[123,162459,3110],{"class":129},[123,162461,150139],{"class":133},[123,162463,1597],{"class":129},[123,162465,4102],{"class":182},[123,162467,3748],{"class":133},[123,162469,162470,162472,162474,162477],{"class":125,"line":1702},[123,162471,32462],{"class":182},[123,162473,134],{"class":133},[123,162475,162476],{"class":238},"\"金额必须大于0\"",[123,162478,140],{"class":133},[123,162480,162481],{"class":125,"line":1707},[123,162482,152358],{"class":129},[123,162484,162485,162488,162490],{"class":125,"line":1736},[123,162486,162487],{"class":133},"    balance ",[123,162489,9487],{"class":129},[123,162491,150172],{"class":133},[123,162493,162494,162496,162498,162501],{"class":125,"line":1741},[123,162495,31310],{"class":182},[123,162497,134],{"class":133},[123,162499,162500],{"class":238},"\"存款成功\"",[123,162502,140],{"class":133},[123,162504,162505],{"class":125,"line":1758},[123,162506,162507],{"class":133},"    show_balance()\n",[123,162509,162510],{"class":125,"line":1763},[123,162511,2409],{"emptyLinePlaceholder":50},[123,162513,162514],{"class":125,"line":1768},[123,162515,2409],{"emptyLinePlaceholder":50},[123,162517,162518,162520,162523],{"class":125,"line":1773},[123,162519,31958],{"class":129},[123,162521,162522],{"class":1972}," withdraw_money",[123,162524,31964],{"class":133},[123,162526,162527,162529],{"class":125,"line":1787},[123,162528,161858],{"class":129},[123,162530,150096],{"class":133},[123,162532,162533,162535,162537,162539,162541,162543,162545,162548],{"class":125,"line":1792},[123,162534,162440],{"class":133},[123,162536,179],{"class":129},[123,162538,109794],{"class":182},[123,162540,134],{"class":133},[123,162542,53832],{"class":182},[123,162544,134],{"class":133},[123,162546,162547],{"class":238},"\"请输入取款金额:\"",[123,162549,30508],{"class":133},[123,162551,162552,162554,162556,162558,162560],{"class":125,"line":2586},[123,162553,3110],{"class":129},[123,162555,150139],{"class":133},[123,162557,1597],{"class":129},[123,162559,4102],{"class":182},[123,162561,3748],{"class":133},[123,162563,162564,162566,162568,162570],{"class":125,"line":2600},[123,162565,32462],{"class":182},[123,162567,134],{"class":133},[123,162569,162476],{"class":238},[123,162571,140],{"class":133},[123,162573,162574],{"class":125,"line":2608},[123,162575,152358],{"class":129},[123,162577,162578,162580,162582,162584],{"class":125,"line":2613},[123,162579,3110],{"class":129},[123,162581,150139],{"class":133},[123,162583,1094],{"class":129},[123,162585,162586],{"class":133}," balance:\n",[123,162588,162589,162591,162593,162595],{"class":125,"line":2619},[123,162590,32462],{"class":182},[123,162592,134],{"class":133},[123,162594,150234],{"class":238},[123,162596,140],{"class":133},[123,162598,162599],{"class":125,"line":2625},[123,162600,152358],{"class":129},[123,162602,162603,162605,162607],{"class":125,"line":2630},[123,162604,162487],{"class":133},[123,162606,150249],{"class":129},[123,162608,150172],{"class":133},[123,162610,162611,162613,162615,162618],{"class":125,"line":7958},[123,162612,31310],{"class":182},[123,162614,134],{"class":133},[123,162616,162617],{"class":238},"\"取款成功\"",[123,162619,140],{"class":133},[123,162621,162622],{"class":125,"line":7982},[123,162623,162507],{"class":133},[123,162625,162626],{"class":125,"line":7987},[123,162627,2409],{"emptyLinePlaceholder":50},[123,162629,162630],{"class":125,"line":7993},[123,162631,2409],{"emptyLinePlaceholder":50},[123,162633,162634,162636,162638],{"class":125,"line":8020},[123,162635,108660],{"class":129},[123,162637,95289],{"class":182},[123,162639,3748],{"class":133},[123,162641,162642],{"class":125,"line":8025},[123,162643,162644],{"class":133},"    show_menu()\n",[123,162646,162647,162649,162651,162653,162655,162657],{"class":125,"line":8031},[123,162648,160689],{"class":133},[123,162650,179],{"class":129},[123,162652,60616],{"class":182},[123,162654,134],{"class":133},[123,162656,153070],{"class":238},[123,162658,140],{"class":133},[123,162660,162661],{"class":125,"line":8043},[123,162662,2409],{"emptyLinePlaceholder":50},[123,162664,162665,162667,162669,162671,162673],{"class":125,"line":8055},[123,162666,3110],{"class":129},[123,162668,153083],{"class":133},[123,162670,2958],{"class":129},[123,162672,153088],{"class":238},[123,162674,3748],{"class":133},[123,162676,162677],{"class":125,"line":8067},[123,162678,162679],{"class":133},"        show_balance()\n",[123,162681,162682,162684,162686,162688,162690],{"class":125,"line":9726},[123,162683,39304],{"class":129},[123,162685,153083],{"class":133},[123,162687,2958],{"class":129},[123,162689,153107],{"class":238},[123,162691,3748],{"class":133},[123,162693,162694],{"class":125,"line":9751},[123,162695,162696],{"class":133},"        save_money()\n",[123,162698,162699,162701,162703,162705,162707],{"class":125,"line":9774},[123,162700,39304],{"class":129},[123,162702,153083],{"class":133},[123,162704,2958],{"class":129},[123,162706,153125],{"class":238},[123,162708,3748],{"class":133},[123,162710,162711],{"class":125,"line":9798},[123,162712,162713],{"class":133},"        withdraw_money()\n",[123,162715,162716,162718,162720,162722,162724],{"class":125,"line":9803},[123,162717,39304],{"class":129},[123,162719,153083],{"class":133},[123,162721,2958],{"class":129},[123,162723,153179],{"class":238},[123,162725,3748],{"class":133},[123,162727,162728,162730,162732,162734],{"class":125,"line":9808},[123,162729,32462],{"class":182},[123,162731,134],{"class":133},[123,162733,153190],{"class":238},[123,162735,140],{"class":133},[123,162737,162738],{"class":125,"line":9813},[123,162739,31638],{"class":129},[123,162741,162742,162744],{"class":125,"line":9822},[123,162743,158019],{"class":129},[123,162745,3748],{"class":133},[123,162747,162748,162750,162752,162754],{"class":125,"line":9827},[123,162749,32462],{"class":182},[123,162751,134],{"class":133},[123,162753,153211],{"class":238},[123,162755,140],{"class":133},[14,162757,162758],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[65,162760,162762],{"id":162761},"_514-易错点","5.14 易错点",[77,162764,162765,162768,162771,162776,162781,162784],{},[80,162766,162767],{},"函数定义后必须调用才会执行。",[80,162769,162770],{},"函数名后面有括号才是调用。",[80,162772,162773,162775],{},[120,162774,17056],{}," 后面的代码不会执行。",[80,162777,162778,162779,28396],{},"没有返回值的函数默认返回 ",[120,162780,95683],{},[80,162782,162783],{},"局部变量不能在函数外部访问。",[80,162785,162786,162787,162789],{},"不要滥用 ",[120,162788,161823],{},"，更好的方式是让函数返回新值。",[14,162791,162792,162793,162795],{},"例如不用 ",[120,162794,161823],{}," 改写存款：",[114,162797,162799],{"className":30389,"code":162798,"language":30391,"meta":37,"style":37},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[120,162800,162801,162810,162821,162825,162829,162837,162850],{"__ignoreMap":37},[123,162802,162803,162805,162807],{"class":125,"line":126},[123,162804,31958],{"class":129},[123,162806,162427],{"class":1972},[123,162808,162809],{"class":133},"(balance, money):\n",[123,162811,162812,162814,162817,162819],{"class":125,"line":45},[123,162813,4099],{"class":129},[123,162815,162816],{"class":133}," balance ",[123,162818,615],{"class":129},[123,162820,150172],{"class":133},[123,162822,162823],{"class":125,"line":1189},[123,162824,2409],{"emptyLinePlaceholder":50},[123,162826,162827],{"class":125,"line":1204},[123,162828,2409],{"emptyLinePlaceholder":50},[123,162830,162831,162833,162835],{"class":125,"line":1210},[123,162832,162301],{"class":133},[123,162834,179],{"class":129},[123,162836,162306],{"class":182},[123,162838,162839,162841,162843,162846,162848],{"class":125,"line":1224},[123,162840,162301],{"class":133},[123,162842,179],{"class":129},[123,162844,162845],{"class":133}," save_money(balance, ",[123,162847,1731],{"class":182},[123,162849,140],{"class":133},[123,162851,162852,162854],{"class":125,"line":1230},[123,162853,30426],{"class":182},[123,162855,162856],{"class":133},"(balance)\n",[65,162858,162860],{"id":162859},"_515-本章练习","5.15 本章练习",[77,162862,162863,162870,162876,162882,162888],{},[80,162864,162865,162866,162869],{},"定义函数 ",[120,162867,162868],{},"print_student(name, age)","，输出学生信息。",[80,162871,162865,162872,162875],{},[120,162873,162874],{},"get_max(a, b, c)","，返回三个数中的最大值。",[80,162877,162865,162878,162881],{},[120,162879,162880],{},"is_even(num)","，判断一个数是否为偶数。",[80,162883,162865,162884,162887],{},[120,162885,162886],{},"calculate_bmi(weight, height)","，返回 BMI。",[80,162889,162890],{},"把第 4 章的菜单程序拆分成多个函数。",[5136,162892,162893],{},"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":37,"searchDepth":45,"depth":45,"links":162895},[162896,162897,162898,162899,162900,162901,162902,162903,162904,162908,162909,162910,162911,162912,162913],{"id":160916,"depth":45,"text":160917},{"id":160957,"depth":45,"text":160958},{"id":161047,"depth":45,"text":161048},{"id":161128,"depth":45,"text":161129},{"id":161261,"depth":45,"text":161262},{"id":161383,"depth":45,"text":161384},{"id":161505,"depth":45,"text":161506},{"id":161582,"depth":45,"text":161583},{"id":161704,"depth":45,"text":161705,"children":162905},[162906,162907],{"id":161708,"depth":1189,"text":161709},{"id":161766,"depth":1189,"text":161767},{"id":161895,"depth":45,"text":161896},{"id":162021,"depth":45,"text":162022},{"id":162134,"depth":45,"text":162135},{"id":162290,"depth":45,"text":162291},{"id":162761,"depth":45,"text":162762},{"id":162859,"depth":45,"text":162860},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160908,"description":47},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162920,"title":162921,"body":162922,"description":47,"extension":48,"meta":165966,"navigation":50,"path":165967,"seo":165968,"stem":165969,"__hash__":165970},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162923,"toc":165947},[162924,162927,162931,162934,162937,163041,163044,163048,163051,163131,163134,163138,163141,163201,163204,163240,163243,163258,163262,163335,163338,163393,163396,163466,163469,163553,163563,163621,163625,163670,163673,163699,163702,163808,163812,163815,163857,163860,163924,163927,163931,163934,163995,163998,164028,164031,164069,164073,164076,164085,164088,164212,164215,164256,164260,164263,164274,164314,164317,164332,164337,164340,164407,164410,164500,164504,164507,164555,164558,164585,164587,164617,164620,164640,164643,164674,164677,164710,164714,164717,164741,164744,164768,164771,164795,164799,164802,164932,164935,165015,165018,165093,165097,165100,165150,165153,165195,165198,165222,165224,165248,165251,165306,165309,165375,165379,165382,165385,165423,165426,165479,165482,165528,165531,165564,165567,165571,165890,165894,165923,165927,165944],[10,162925,162921],{"id":162926},"_6-数据容器",[65,162928,162930],{"id":162929},"_61-什么是数据容器","6.1 什么是数据容器",[14,162932,162933],{},"数据容器用于一次保存多个数据。",[14,162935,162936],{},"常见容器：",[271,162938,162939,162956],{},[274,162940,162941],{},[277,162942,162943,162945,162948,162951,162954],{},[280,162944,25782],{},[280,162946,162947],{},"是否有序",[280,162949,162950],{},"是否可变",[280,162952,162953],{},"是否允许重复",[280,162955,27503],{},[318,162957,162958,162976,162992,163007,163024],{},[277,162959,162960,162963,162966,162969,162972],{},[323,162961,162962],{},"list列表",[323,162964,162965],{},"有序",[323,162967,162968],{},"可变",[323,162970,162971],{},"允许",[323,162973,162974],{},[120,162975,155254],{},[277,162977,162978,162981,162983,162986,162988],{},[323,162979,162980],{},"tuple元组",[323,162982,162965],{},[323,162984,162985],{},"不可变",[323,162987,162971],{},[323,162989,162990],{},[120,162991,155267],{},[277,162993,162994,162997,162999,163001,163003],{},[323,162995,162996],{},"str字符串",[323,162998,162965],{},[323,163000,162985],{},[323,163002,162971],{},[323,163004,163005],{},[120,163006,155877],{},[277,163008,163009,163012,163015,163017,163020],{},[323,163010,163011],{},"set集合",[323,163013,163014],{},"无序",[323,163016,162968],{},[323,163018,163019],{},"不允许",[323,163021,163022],{},[120,163023,155292],{},[277,163025,163026,163029,163031,163033,163036],{},[323,163027,163028],{},"dict字典",[323,163030,162965],{},[323,163032,162968],{},[323,163034,163035],{},"key不允许重复",[323,163037,163038],{},[120,163039,163040],{},"{\"name\": \"小明\"}",[14,163042,163043],{},"Python 3.7 之后，字典保持插入顺序。",[65,163045,163047],{"id":163046},"_62-列表list","6.2 列表list",[14,163049,163050],{},"列表用于保存一组有顺序的数据。",[114,163052,163054],{"className":30389,"code":163053,"language":30391,"meta":37,"style":37},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[120,163055,163056,163076,163101,163122],{"__ignoreMap":37},[123,163057,163058,163060,163062,163064,163066,163068,163070,163072,163074],{"class":125,"line":126},[123,163059,160377],{"class":133},[123,163061,179],{"class":129},[123,163063,52237],{"class":133},[123,163065,149885],{"class":238},[123,163067,12445],{"class":133},[123,163069,150933],{"class":238},[123,163071,12445],{"class":133},[123,163073,159728],{"class":238},[123,163075,33257],{"class":133},[123,163077,163078,163081,163083,163085,163087,163089,163091,163093,163095,163097,163099],{"class":125,"line":45},[123,163079,163080],{"class":133},"numbers ",[123,163082,179],{"class":129},[123,163084,52237],{"class":133},[123,163086,351],{"class":182},[123,163088,12445],{"class":133},[123,163090,211],{"class":182},[123,163092,12445],{"class":133},[123,163094,205],{"class":182},[123,163096,12445],{"class":133},[123,163098,427],{"class":182},[123,163100,33257],{"class":133},[123,163102,163103,163106,163108,163110,163112,163114,163116,163118,163120],{"class":125,"line":1189},[123,163104,163105],{"class":133},"mixed ",[123,163107,179],{"class":129},[123,163109,52237],{"class":133},[123,163111,149885],{"class":238},[123,163113,12445],{"class":133},[123,163115,784],{"class":182},[123,163117,12445],{"class":133},[123,163119,31487],{"class":182},[123,163121,33257],{"class":133},[123,163123,163124,163127,163129],{"class":125,"line":1204},[123,163125,163126],{"class":133},"empty ",[123,163128,179],{"class":129},[123,163130,51849],{"class":133},[14,163132,163133],{},"推荐一个列表中保存同类数据，代码更清晰。",[65,163135,163137],{"id":163136},"_63-列表索引","6.3 列表索引",[14,163139,163140],{},"正向索引从 0 开始：",[114,163142,163144],{"className":30389,"code":163143,"language":30391,"meta":37,"style":37},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[120,163145,163146,163166,163170,163181,163191],{"__ignoreMap":37},[123,163147,163148,163150,163152,163154,163156,163158,163160,163162,163164],{"class":125,"line":126},[123,163149,160377],{"class":133},[123,163151,179],{"class":129},[123,163153,52237],{"class":133},[123,163155,149885],{"class":238},[123,163157,12445],{"class":133},[123,163159,150933],{"class":238},[123,163161,12445],{"class":133},[123,163163,159728],{"class":238},[123,163165,33257],{"class":133},[123,163167,163168],{"class":125,"line":45},[123,163169,2409],{"emptyLinePlaceholder":50},[123,163171,163172,163174,163177,163179],{"class":125,"line":1189},[123,163173,30426],{"class":182},[123,163175,163176],{"class":133},"(names[",[123,163178,325],{"class":182},[123,163180,4666],{"class":133},[123,163182,163183,163185,163187,163189],{"class":125,"line":1204},[123,163184,30426],{"class":182},[123,163186,163176],{"class":133},[123,163188,351],{"class":182},[123,163190,4666],{"class":133},[123,163192,163193,163195,163197,163199],{"class":125,"line":1210},[123,163194,30426],{"class":182},[123,163196,163176],{"class":133},[123,163198,211],{"class":182},[123,163200,4666],{"class":133},[14,163202,163203],{},"反向索引从 -1 开始：",[114,163205,163207],{"className":30389,"code":163206,"language":30391,"meta":37,"style":37},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[120,163208,163209,163225],{"__ignoreMap":37},[123,163210,163211,163213,163215,163217,163219,163222],{"class":125,"line":126},[123,163212,30426],{"class":182},[123,163214,163176],{"class":133},[123,163216,666],{"class":129},[123,163218,351],{"class":182},[123,163220,163221],{"class":133},"])  ",[123,163223,163224],{"class":192},"# 小刚\n",[123,163226,163227,163229,163231,163233,163235,163237],{"class":125,"line":45},[123,163228,30426],{"class":182},[123,163230,163176],{"class":133},[123,163232,666],{"class":129},[123,163234,211],{"class":182},[123,163236,163221],{"class":133},[123,163238,163239],{"class":192},"# 小红\n",[14,163241,163242],{},"索引越界会报错：",[114,163244,163246],{"className":30389,"code":163245,"language":30391,"meta":37,"style":37},"print(names[3])\n",[120,163247,163248],{"__ignoreMap":37},[123,163249,163250,163252,163254,163256],{"class":125,"line":126},[123,163251,30426],{"class":182},[123,163253,163176],{"class":133},[123,163255,205],{"class":182},[123,163257,4666],{"class":133},[65,163259,163261],{"id":163260},"_64-列表常用方法","6.4 列表常用方法",[114,163263,163265],{"className":30389,"code":163264,"language":30391,"meta":37,"style":37},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[120,163266,163267,163283,163287,163296,163310,163324,163328],{"__ignoreMap":37},[123,163268,163269,163271,163273,163275,163277,163279,163281],{"class":125,"line":126},[123,163270,160377],{"class":133},[123,163272,179],{"class":129},[123,163274,52237],{"class":133},[123,163276,149885],{"class":238},[123,163278,12445],{"class":133},[123,163280,150933],{"class":238},[123,163282,33257],{"class":133},[123,163284,163285],{"class":125,"line":45},[123,163286,2409],{"emptyLinePlaceholder":50},[123,163288,163289,163292,163294],{"class":125,"line":1189},[123,163290,163291],{"class":133},"names.append(",[123,163293,159728],{"class":238},[123,163295,140],{"class":133},[123,163297,163298,163301,163303,163305,163308],{"class":125,"line":1204},[123,163299,163300],{"class":133},"names.insert(",[123,163302,351],{"class":182},[123,163304,12445],{"class":133},[123,163306,163307],{"class":238},"\"小李\"",[123,163309,140],{"class":133},[123,163311,163312,163315,163317,163319,163322],{"class":125,"line":1210},[123,163313,163314],{"class":133},"names.extend([",[123,163316,8693],{"class":238},[123,163318,12445],{"class":133},[123,163320,163321],{"class":238},"\"小赵\"",[123,163323,4666],{"class":133},[123,163325,163326],{"class":125,"line":1224},[123,163327,2409],{"emptyLinePlaceholder":50},[123,163329,163330,163332],{"class":125,"line":1230},[123,163331,30426],{"class":182},[123,163333,163334],{"class":133},"(names)\n",[14,163336,163337],{},"删除元素：",[114,163339,163341],{"className":30389,"code":163340,"language":30391,"meta":37,"style":37},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[120,163342,163343,163352,163362,163376,163388],{"__ignoreMap":37},[123,163344,163345,163348,163350],{"class":125,"line":126},[123,163346,163347],{"class":133},"names.remove(",[123,163349,150933],{"class":238},[123,163351,140],{"class":133},[123,163353,163354,163357,163359],{"class":125,"line":45},[123,163355,163356],{"class":133},"last ",[123,163358,179],{"class":129},[123,163360,163361],{"class":133}," names.pop()\n",[123,163363,163364,163367,163369,163372,163374],{"class":125,"line":1189},[123,163365,163366],{"class":133},"first ",[123,163368,179],{"class":129},[123,163370,163371],{"class":133}," names.pop(",[123,163373,325],{"class":182},[123,163375,140],{"class":133},[123,163377,163378,163381,163384,163386],{"class":125,"line":1204},[123,163379,163380],{"class":129},"del",[123,163382,163383],{"class":133}," names[",[123,163385,325],{"class":182},[123,163387,33257],{"class":133},[123,163389,163390],{"class":125,"line":1210},[123,163391,163392],{"class":133},"names.clear()\n",[14,163394,163395],{},"查询和统计：",[114,163397,163399],{"className":30389,"code":163398,"language":30391,"meta":37,"style":37},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[120,163400,163401,163429,163433,163444,163455],{"__ignoreMap":37},[123,163402,163403,163405,163407,163409,163411,163413,163415,163417,163419,163421,163423,163425,163427],{"class":125,"line":126},[123,163404,163080],{"class":133},[123,163406,179],{"class":129},[123,163408,52237],{"class":133},[123,163410,351],{"class":182},[123,163412,12445],{"class":133},[123,163414,211],{"class":182},[123,163416,12445],{"class":133},[123,163418,205],{"class":182},[123,163420,12445],{"class":133},[123,163422,211],{"class":182},[123,163424,12445],{"class":133},[123,163426,427],{"class":182},[123,163428,33257],{"class":133},[123,163430,163431],{"class":125,"line":45},[123,163432,2409],{"emptyLinePlaceholder":50},[123,163434,163435,163437,163440,163442],{"class":125,"line":1189},[123,163436,30426],{"class":182},[123,163438,163439],{"class":133},"(numbers.index(",[123,163441,205],{"class":182},[123,163443,30508],{"class":133},[123,163445,163446,163448,163451,163453],{"class":125,"line":1204},[123,163447,30426],{"class":182},[123,163449,163450],{"class":133},"(numbers.count(",[123,163452,211],{"class":182},[123,163454,30508],{"class":133},[123,163456,163457,163459,163461,163463],{"class":125,"line":1210},[123,163458,30426],{"class":182},[123,163460,134],{"class":133},[123,163462,7368],{"class":182},[123,163464,163465],{"class":133},"(numbers))\n",[14,163467,163468],{},"排序：",[114,163470,163472],{"className":30389,"code":163471,"language":30391,"meta":37,"style":37},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[120,163473,163474,163498,163502,163507,163514,163518,163532,163538,163542,163547],{"__ignoreMap":37},[123,163475,163476,163478,163480,163482,163484,163486,163488,163490,163492,163494,163496],{"class":125,"line":126},[123,163477,163080],{"class":133},[123,163479,179],{"class":129},[123,163481,52237],{"class":133},[123,163483,205],{"class":182},[123,163485,12445],{"class":133},[123,163487,351],{"class":182},[123,163489,12445],{"class":133},[123,163491,453],{"class":182},[123,163493,12445],{"class":133},[123,163495,211],{"class":182},[123,163497,33257],{"class":133},[123,163499,163500],{"class":125,"line":45},[123,163501,2409],{"emptyLinePlaceholder":50},[123,163503,163504],{"class":125,"line":1189},[123,163505,163506],{"class":133},"numbers.sort()\n",[123,163508,163509,163511],{"class":125,"line":1204},[123,163510,30426],{"class":182},[123,163512,163513],{"class":133},"(numbers)\n",[123,163515,163516],{"class":125,"line":1210},[123,163517,2409],{"emptyLinePlaceholder":50},[123,163519,163520,163523,163526,163528,163530],{"class":125,"line":1224},[123,163521,163522],{"class":133},"numbers.sort(",[123,163524,163525],{"class":5226},"reverse",[123,163527,179],{"class":129},[123,163529,31487],{"class":182},[123,163531,140],{"class":133},[123,163533,163534,163536],{"class":125,"line":1230},[123,163535,30426],{"class":182},[123,163537,163513],{"class":133},[123,163539,163540],{"class":125,"line":1321},[123,163541,2409],{"emptyLinePlaceholder":50},[123,163543,163544],{"class":125,"line":1327},[123,163545,163546],{"class":133},"numbers.reverse()\n",[123,163548,163549,163551],{"class":125,"line":1339},[123,163550,30426],{"class":182},[123,163552,163513],{"class":133},[14,163554,163555,163558,163559,163562],{},[120,163556,163557],{},"sort()"," 会修改原列表，",[120,163560,163561],{},"sorted()"," 返回新列表。",[114,163564,163566],{"className":30389,"code":163565,"language":30391,"meta":37,"style":37},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[120,163567,163568,163592,163604,163608,163614],{"__ignoreMap":37},[123,163569,163570,163572,163574,163576,163578,163580,163582,163584,163586,163588,163590],{"class":125,"line":126},[123,163571,163080],{"class":133},[123,163573,179],{"class":129},[123,163575,52237],{"class":133},[123,163577,205],{"class":182},[123,163579,12445],{"class":133},[123,163581,351],{"class":182},[123,163583,12445],{"class":133},[123,163585,453],{"class":182},[123,163587,12445],{"class":133},[123,163589,211],{"class":182},[123,163591,33257],{"class":133},[123,163593,163594,163597,163599,163602],{"class":125,"line":45},[123,163595,163596],{"class":133},"new_numbers ",[123,163598,179],{"class":129},[123,163600,163601],{"class":182}," sorted",[123,163603,163513],{"class":133},[123,163605,163606],{"class":125,"line":1189},[123,163607,2409],{"emptyLinePlaceholder":50},[123,163609,163610,163612],{"class":125,"line":1204},[123,163611,30426],{"class":182},[123,163613,163513],{"class":133},[123,163615,163616,163618],{"class":125,"line":1210},[123,163617,30426],{"class":182},[123,163619,163620],{"class":133},"(new_numbers)\n",[65,163622,163624],{"id":163623},"_65-列表遍历","6.5 列表遍历",[114,163626,163628],{"className":30389,"code":163627,"language":30391,"meta":37,"style":37},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[120,163629,163630,163650,163654,163664],{"__ignoreMap":37},[123,163631,163632,163634,163636,163638,163640,163642,163644,163646,163648],{"class":125,"line":126},[123,163633,160377],{"class":133},[123,163635,179],{"class":129},[123,163637,52237],{"class":133},[123,163639,149885],{"class":238},[123,163641,12445],{"class":133},[123,163643,150933],{"class":238},[123,163645,12445],{"class":133},[123,163647,159728],{"class":238},[123,163649,33257],{"class":133},[123,163651,163652],{"class":125,"line":45},[123,163653,2409],{"emptyLinePlaceholder":50},[123,163655,163656,163658,163660,163662],{"class":125,"line":1189},[123,163657,3034],{"class":129},[123,163659,160413],{"class":133},[123,163661,26054],{"class":129},[123,163663,160418],{"class":133},[123,163665,163666,163668],{"class":125,"line":1204},[123,163667,31310],{"class":182},[123,163669,150657],{"class":133},[14,163671,163672],{},"需要索引时：",[114,163674,163676],{"className":30389,"code":163675,"language":30391,"meta":37,"style":37},"for index, name in enumerate(names):\n    print(index, name)\n",[120,163677,163678,163692],{"__ignoreMap":37},[123,163679,163680,163682,163685,163687,163689],{"class":125,"line":126},[123,163681,3034],{"class":129},[123,163683,163684],{"class":133}," index, name ",[123,163686,26054],{"class":129},[123,163688,31617],{"class":182},[123,163690,163691],{"class":133},"(names):\n",[123,163693,163694,163696],{"class":125,"line":45},[123,163695,31310],{"class":182},[123,163697,163698],{"class":133},"(index, name)\n",[14,163700,163701],{},"统计总分：",[114,163703,163705],{"className":30389,"code":163704,"language":30391,"meta":37,"style":37},"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",[120,163706,163707,163732,163740,163744,163755,163763,163767,163784],{"__ignoreMap":37},[123,163708,163709,163712,163714,163716,163718,163720,163722,163724,163726,163728,163730],{"class":125,"line":126},[123,163710,163711],{"class":133},"scores ",[123,163713,179],{"class":129},[123,163715,52237],{"class":133},[123,163717,996],{"class":182},[123,163719,12445],{"class":133},[123,163721,870],{"class":182},[123,163723,12445],{"class":133},[123,163725,388],{"class":182},[123,163727,12445],{"class":133},[123,163729,695],{"class":182},[123,163731,33257],{"class":133},[123,163733,163734,163736,163738],{"class":125,"line":45},[123,163735,157257],{"class":133},[123,163737,179],{"class":129},[123,163739,47344],{"class":182},[123,163741,163742],{"class":125,"line":1189},[123,163743,2409],{"emptyLinePlaceholder":50},[123,163745,163746,163748,163750,163752],{"class":125,"line":1204},[123,163747,3034],{"class":129},[123,163749,157780],{"class":133},[123,163751,26054],{"class":129},[123,163753,163754],{"class":133}," scores:\n",[123,163756,163757,163759,163761],{"class":125,"line":1210},[123,163758,159304],{"class":133},[123,163760,9487],{"class":129},[123,163762,1588],{"class":133},[123,163764,163765],{"class":125,"line":1224},[123,163766,2409],{"emptyLinePlaceholder":50},[123,163768,163769,163772,163774,163777,163779,163781],{"class":125,"line":1230},[123,163770,163771],{"class":133},"avg ",[123,163773,179],{"class":129},[123,163775,163776],{"class":133}," total ",[123,163778,718],{"class":129},[123,163780,7341],{"class":182},[123,163782,163783],{"class":133},"(scores)\n",[123,163785,163786,163788,163790,163792,163795,163797,163800,163802,163804,163806],{"class":125,"line":1321},[123,163787,30426],{"class":182},[123,163789,134],{"class":133},[123,163791,186],{"class":129},[123,163793,163794],{"class":238},"\"平均分:",[123,163796,1030],{"class":182},[123,163798,163799],{"class":133},"avg",[123,163801,157156],{"class":129},[123,163803,1080],{"class":182},[123,163805,385],{"class":238},[123,163807,140],{"class":133},[65,163809,163811],{"id":163810},"_66-元组tuple","6.6 元组tuple",[14,163813,163814],{},"元组和列表类似，但不可修改。",[114,163816,163818],{"className":30389,"code":163817,"language":30391,"meta":37,"style":37},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[120,163819,163820,163837],{"__ignoreMap":37},[123,163821,163822,163825,163827,163829,163831,163833,163835],{"class":125,"line":126},[123,163823,163824],{"class":133},"point ",[123,163826,179],{"class":129},[123,163828,1667],{"class":133},[123,163830,580],{"class":182},[123,163832,12445],{"class":133},[123,163834,834],{"class":182},[123,163836,140],{"class":133},[123,163838,163839,163841,163843,163845,163847,163849,163851,163853,163855],{"class":125,"line":45},[123,163840,116311],{"class":133},[123,163842,179],{"class":129},[123,163844,1667],{"class":133},[123,163846,149885],{"class":238},[123,163848,12445],{"class":133},[123,163850,784],{"class":182},[123,163852,12445],{"class":133},[123,163854,69280],{"class":238},[123,163856,140],{"class":133},[14,163858,163859],{},"单元素元组必须加逗号：",[114,163861,163863],{"className":30389,"code":163862,"language":30391,"meta":37,"style":37},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[120,163864,163865,163879,163892,163896,163910],{"__ignoreMap":37},[123,163866,163867,163870,163872,163874,163876],{"class":125,"line":126},[123,163868,163869],{"class":133},"t1 ",[123,163871,179],{"class":129},[123,163873,1667],{"class":133},[123,163875,580],{"class":182},[123,163877,163878],{"class":133},",)\n",[123,163880,163881,163884,163886,163888,163890],{"class":125,"line":45},[123,163882,163883],{"class":133},"t2 ",[123,163885,179],{"class":129},[123,163887,1667],{"class":133},[123,163889,580],{"class":182},[123,163891,140],{"class":133},[123,163893,163894],{"class":125,"line":1189},[123,163895,2409],{"emptyLinePlaceholder":50},[123,163897,163898,163900,163902,163904,163907],{"class":125,"line":1204},[123,163899,30426],{"class":182},[123,163901,134],{"class":133},[123,163903,103104],{"class":182},[123,163905,163906],{"class":133},"(t1))  ",[123,163908,163909],{"class":192},"# tuple\n",[123,163911,163912,163914,163916,163918,163921],{"class":125,"line":1210},[123,163913,30426],{"class":182},[123,163915,134],{"class":133},[123,163917,103104],{"class":182},[123,163919,163920],{"class":133},"(t2))  ",[123,163922,163923],{"class":192},"# int\n",[14,163925,163926],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[65,163928,163930],{"id":163929},"_67-字符串str","6.7 字符串str",[14,163932,163933],{},"字符串也是序列，可以索引、切片和遍历。",[114,163935,163937],{"className":30389,"code":163936,"language":30391,"meta":37,"style":37},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[120,163938,163939,163947,163951,163962,163974,163978,163989],{"__ignoreMap":37},[123,163940,163941,163943,163945],{"class":125,"line":126},[123,163942,156441],{"class":133},[123,163944,179],{"class":129},[123,163946,159678],{"class":238},[123,163948,163949],{"class":125,"line":45},[123,163950,2409],{"emptyLinePlaceholder":50},[123,163952,163953,163955,163958,163960],{"class":125,"line":1189},[123,163954,30426],{"class":182},[123,163956,163957],{"class":133},"(text[",[123,163959,325],{"class":182},[123,163961,4666],{"class":133},[123,163963,163964,163966,163968,163970,163972],{"class":125,"line":1204},[123,163965,30426],{"class":182},[123,163967,163957],{"class":133},[123,163969,666],{"class":129},[123,163971,351],{"class":182},[123,163973,4666],{"class":133},[123,163975,163976],{"class":125,"line":1210},[123,163977,2409],{"emptyLinePlaceholder":50},[123,163979,163980,163982,163984,163986],{"class":125,"line":1224},[123,163981,3034],{"class":129},[123,163983,159689],{"class":133},[123,163985,26054],{"class":129},[123,163987,163988],{"class":133}," text:\n",[123,163990,163991,163993],{"class":125,"line":1230},[123,163992,31310],{"class":182},[123,163994,159700],{"class":133},[14,163996,163997],{},"字符串不可变：",[114,163999,164001],{"className":30389,"code":164000,"language":30391,"meta":37,"style":37},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[120,164002,164003,164011],{"__ignoreMap":37},[123,164004,164005,164007,164009],{"class":125,"line":126},[123,164006,156441],{"class":133},[123,164008,179],{"class":129},[123,164010,159678],{"class":238},[123,164012,164013,164016,164018,164020,164022,164025],{"class":125,"line":45},[123,164014,164015],{"class":133},"text[",[123,164017,325],{"class":182},[123,164019,4452],{"class":133},[123,164021,179],{"class":129},[123,164023,164024],{"class":238}," \"P\"",[123,164026,164027],{"class":192},"  # 报错\n",[14,164029,164030],{},"如果要得到新字符串：",[114,164032,164034],{"className":30389,"code":164033,"language":30391,"meta":37,"style":37},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[120,164035,164036,164044,164062],{"__ignoreMap":37},[123,164037,164038,164040,164042],{"class":125,"line":126},[123,164039,156441],{"class":133},[123,164041,179],{"class":129},[123,164043,159678],{"class":238},[123,164045,164046,164048,164050,164052,164054,164057,164059],{"class":125,"line":45},[123,164047,156441],{"class":133},[123,164049,179],{"class":129},[123,164051,164024],{"class":238},[123,164053,45577],{"class":129},[123,164055,164056],{"class":133}," text[",[123,164058,351],{"class":182},[123,164060,164061],{"class":133},":]\n",[123,164063,164064,164066],{"class":125,"line":1189},[123,164065,30426],{"class":182},[123,164067,164068],{"class":133},"(text)\n",[65,164070,164072],{"id":164071},"_68-切片","6.8 切片",[14,164074,164075],{},"切片用于从序列中取一部分。",[114,164077,164079],{"className":30389,"code":164078,"language":30391,"meta":37,"style":37},"序列[开始:结束:步长]\n",[120,164080,164081],{"__ignoreMap":37},[123,164082,164083],{"class":125,"line":126},[123,164084,164078],{"class":133},[14,164086,164087],{},"结束位置不包含。",[114,164089,164091],{"className":30389,"code":164090,"language":30391,"meta":37,"style":37},"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",[120,164092,164093,164130,164134,164153,164168,164182,164196],{"__ignoreMap":37},[123,164094,164095,164098,164100,164102,164104,164106,164108,164110,164112,164114,164116,164118,164120,164122,164124,164126,164128],{"class":125,"line":126},[123,164096,164097],{"class":133},"nums ",[123,164099,179],{"class":129},[123,164101,52237],{"class":133},[123,164103,325],{"class":182},[123,164105,12445],{"class":133},[123,164107,351],{"class":182},[123,164109,12445],{"class":133},[123,164111,211],{"class":182},[123,164113,12445],{"class":133},[123,164115,205],{"class":182},[123,164117,12445],{"class":133},[123,164119,427],{"class":182},[123,164121,12445],{"class":133},[123,164123,453],{"class":182},[123,164125,12445],{"class":133},[123,164127,478],{"class":182},[123,164129,33257],{"class":133},[123,164131,164132],{"class":125,"line":45},[123,164133,2409],{"emptyLinePlaceholder":50},[123,164135,164136,164138,164141,164143,164145,164147,164150],{"class":125,"line":1189},[123,164137,30426],{"class":182},[123,164139,164140],{"class":133},"(nums[",[123,164142,351],{"class":182},[123,164144,993],{"class":133},[123,164146,427],{"class":182},[123,164148,164149],{"class":133},"])    ",[123,164151,164152],{"class":192},"# [1, 2, 3]\n",[123,164154,164155,164157,164160,164162,164165],{"class":125,"line":1204},[123,164156,30426],{"class":182},[123,164158,164159],{"class":133},"(nums[:",[123,164161,205],{"class":182},[123,164163,164164],{"class":133},"])     ",[123,164166,164167],{"class":192},"# [0, 1, 2]\n",[123,164169,164170,164172,164174,164176,164179],{"class":125,"line":1210},[123,164171,30426],{"class":182},[123,164173,164140],{"class":133},[123,164175,205],{"class":182},[123,164177,164178],{"class":133},":])     ",[123,164180,164181],{"class":192},"# [3, 4, 5, 6]\n",[123,164183,164184,164186,164189,164191,164193],{"class":125,"line":1224},[123,164185,30426],{"class":182},[123,164187,164188],{"class":133},"(nums[::",[123,164190,211],{"class":182},[123,164192,164149],{"class":133},[123,164194,164195],{"class":192},"# [0, 2, 4, 6]\n",[123,164197,164198,164200,164202,164204,164206,164209],{"class":125,"line":1230},[123,164199,30426],{"class":182},[123,164201,164188],{"class":133},[123,164203,666],{"class":129},[123,164205,351],{"class":182},[123,164207,164208],{"class":133},"])   ",[123,164210,164211],{"class":192},"# 反转\n",[14,164213,164214],{},"字符串切片：",[114,164216,164218],{"className":30389,"code":164217,"language":30391,"meta":37,"style":37},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[120,164219,164220,164229,164243],{"__ignoreMap":37},[123,164221,164222,164224,164226],{"class":125,"line":126},[123,164223,156441],{"class":133},[123,164225,179],{"class":129},[123,164227,164228],{"class":238}," \"abcdef\"\n",[123,164230,164231,164233,164235,164237,164239,164241],{"class":125,"line":45},[123,164232,30426],{"class":182},[123,164234,163957],{"class":133},[123,164236,351],{"class":182},[123,164238,993],{"class":133},[123,164240,427],{"class":182},[123,164242,4666],{"class":133},[123,164244,164245,164247,164250,164252,164254],{"class":125,"line":1189},[123,164246,30426],{"class":182},[123,164248,164249],{"class":133},"(text[::",[123,164251,666],{"class":129},[123,164253,351],{"class":182},[123,164255,4666],{"class":133},[65,164257,164259],{"id":164258},"_69-集合set","6.9 集合set",[14,164261,164262],{},"集合特点：",[77,164264,164265,164268,164271],{},[80,164266,164267],{},"无序。",[80,164269,164270],{},"元素不重复。",[80,164272,164273],{},"可以做交集、并集、差集。",[114,164275,164277],{"className":30389,"code":164276,"language":30391,"meta":37,"style":37},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[120,164278,164279,164307],{"__ignoreMap":37},[123,164280,164281,164283,164285,164287,164289,164291,164293,164295,164297,164299,164301,164303,164305],{"class":125,"line":126},[123,164282,164097],{"class":133},[123,164284,179],{"class":129},[123,164286,4457],{"class":133},[123,164288,351],{"class":182},[123,164290,12445],{"class":133},[123,164292,211],{"class":182},[123,164294,12445],{"class":133},[123,164296,205],{"class":182},[123,164298,12445],{"class":133},[123,164300,205],{"class":182},[123,164302,12445],{"class":133},[123,164304,427],{"class":182},[123,164306,1574],{"class":133},[123,164308,164309,164311],{"class":125,"line":45},[123,164310,30426],{"class":182},[123,164312,164313],{"class":133},"(nums)\n",[14,164315,164316],{},"创建空集合：",[114,164318,164320],{"className":30389,"code":164319,"language":30391,"meta":37,"style":37},"s = set()\n",[120,164321,164322],{"__ignoreMap":37},[123,164323,164324,164326,164328,164330],{"class":125,"line":126},[123,164325,10589],{"class":133},[123,164327,179],{"class":129},[123,164329,119719],{"class":182},[123,164331,1985],{"class":133},[14,164333,9035,164334,164336],{},[120,164335,32470],{}," 是空字典，不是空集合。",[14,164338,164339],{},"集合常用操作：",[114,164341,164343],{"className":30389,"code":164342,"language":30391,"meta":37,"style":37},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[120,164344,164345,164365,164369,164378,164387,164396],{"__ignoreMap":37},[123,164346,164347,164349,164351,164353,164355,164357,164359,164361,164363],{"class":125,"line":126},[123,164348,10589],{"class":133},[123,164350,179],{"class":129},[123,164352,4457],{"class":133},[123,164354,351],{"class":182},[123,164356,12445],{"class":133},[123,164358,211],{"class":182},[123,164360,12445],{"class":133},[123,164362,205],{"class":182},[123,164364,1574],{"class":133},[123,164366,164367],{"class":125,"line":45},[123,164368,2409],{"emptyLinePlaceholder":50},[123,164370,164371,164374,164376],{"class":125,"line":1189},[123,164372,164373],{"class":133},"s.add(",[123,164375,427],{"class":182},[123,164377,140],{"class":133},[123,164379,164380,164383,164385],{"class":125,"line":1204},[123,164381,164382],{"class":133},"s.remove(",[123,164384,211],{"class":182},[123,164386,140],{"class":133},[123,164388,164389,164392,164394],{"class":125,"line":1210},[123,164390,164391],{"class":133},"s.discard(",[123,164393,580],{"class":182},[123,164395,140],{"class":133},[123,164397,164398,164400,164402,164404],{"class":125,"line":1224},[123,164399,30426],{"class":182},[123,164401,134],{"class":133},[123,164403,7368],{"class":182},[123,164405,164406],{"class":133},"(s))\n",[14,164408,164409],{},"交并差：",[114,164411,164413],{"className":30389,"code":164412,"language":30391,"meta":37,"style":37},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[120,164414,164415,164435,164455,164459,164474,164487],{"__ignoreMap":37},[123,164416,164417,164419,164421,164423,164425,164427,164429,164431,164433],{"class":125,"line":126},[123,164418,10929],{"class":133},[123,164420,179],{"class":129},[123,164422,4457],{"class":133},[123,164424,351],{"class":182},[123,164426,12445],{"class":133},[123,164428,211],{"class":182},[123,164430,12445],{"class":133},[123,164432,205],{"class":182},[123,164434,1574],{"class":133},[123,164436,164437,164439,164441,164443,164445,164447,164449,164451,164453],{"class":125,"line":45},[123,164438,10955],{"class":133},[123,164440,179],{"class":129},[123,164442,4457],{"class":133},[123,164444,205],{"class":182},[123,164446,12445],{"class":133},[123,164448,427],{"class":182},[123,164450,12445],{"class":133},[123,164452,453],{"class":182},[123,164454,1574],{"class":133},[123,164456,164457],{"class":125,"line":1189},[123,164458,2409],{"emptyLinePlaceholder":50},[123,164460,164461,164463,164466,164468,164471],{"class":125,"line":1204},[123,164462,30426],{"class":182},[123,164464,164465],{"class":133},"(a ",[123,164467,487],{"class":129},[123,164469,164470],{"class":133}," b)  ",[123,164472,164473],{"class":192},"# 交集\n",[123,164475,164476,164478,164480,164482,164484],{"class":125,"line":1210},[123,164477,30426],{"class":182},[123,164479,164465],{"class":133},[123,164481,1055],{"class":129},[123,164483,164470],{"class":133},[123,164485,164486],{"class":192},"# 并集\n",[123,164488,164489,164491,164493,164495,164497],{"class":125,"line":1224},[123,164490,30426],{"class":182},[123,164492,164465],{"class":133},[123,164494,666],{"class":129},[123,164496,164470],{"class":133},[123,164498,164499],{"class":192},"# 差集\n",[65,164501,164503],{"id":164502},"_610-字典dict","6.10 字典dict",[14,164505,164506],{},"字典通过 key-value 保存数据。",[114,164508,164510],{"className":30389,"code":164509,"language":30391,"meta":37,"style":37},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[120,164511,164512,164520,164530,164541,164551],{"__ignoreMap":37},[123,164513,164514,164516,164518],{"class":125,"line":126},[123,164515,149478],{"class":133},[123,164517,179],{"class":129},[123,164519,15582],{"class":133},[123,164521,164522,164524,164526,164528],{"class":125,"line":45},[123,164523,147017],{"class":238},[123,164525,51448],{"class":133},[123,164527,149885],{"class":238},[123,164529,31477],{"class":133},[123,164531,164532,164535,164537,164539],{"class":125,"line":1189},[123,164533,164534],{"class":238},"    \"age\"",[123,164536,51448],{"class":133},[123,164538,784],{"class":182},[123,164540,31477],{"class":133},[123,164542,164543,164546,164548],{"class":125,"line":1204},[123,164544,164545],{"class":238},"    \"score\"",[123,164547,51448],{"class":133},[123,164549,164550],{"class":182},"95\n",[123,164552,164553],{"class":125,"line":1210},[123,164554,1574],{"class":133},[14,164556,164557],{},"获取值：",[114,164559,164561],{"className":30389,"code":164560,"language":30391,"meta":37,"style":37},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[120,164562,164563,164574],{"__ignoreMap":37},[123,164564,164565,164567,164570,164572],{"class":125,"line":126},[123,164566,30426],{"class":182},[123,164568,164569],{"class":133},"(student[",[123,164571,62690],{"class":238},[123,164573,4666],{"class":133},[123,164575,164576,164578,164581,164583],{"class":125,"line":45},[123,164577,30426],{"class":182},[123,164579,164580],{"class":133},"(student.get(",[123,164582,62690],{"class":238},[123,164584,30508],{"class":133},[14,164586,15398],{},[114,164588,164590],{"className":30389,"code":164589,"language":30391,"meta":37,"style":37},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[120,164591,164592,164605],{"__ignoreMap":37},[123,164593,164594,164596,164599,164602],{"class":125,"line":126},[123,164595,152856],{"class":133},[123,164597,164598],{"class":238},"\"address\"",[123,164600,164601],{"class":133},"]     ",[123,164603,164604],{"class":192},"# key不存在会报错\n",[123,164606,164607,164610,164612,164614],{"class":125,"line":45},[123,164608,164609],{"class":133},"student.get(",[123,164611,164598],{"class":238},[123,164613,13724],{"class":133},[123,164615,164616],{"class":192},"# key不存在返回None\n",[14,164618,164619],{},"设置默认值：",[114,164621,164623],{"className":30389,"code":164622,"language":30391,"meta":37,"style":37},"print(student.get(\"address\", \"未知\"))\n",[120,164624,164625],{"__ignoreMap":37},[123,164626,164627,164629,164631,164633,164635,164638],{"class":125,"line":126},[123,164628,30426],{"class":182},[123,164630,164580],{"class":133},[123,164632,164598],{"class":238},[123,164634,12445],{"class":133},[123,164636,164637],{"class":238},"\"未知\"",[123,164639,30508],{"class":133},[14,164641,164642],{},"新增和修改：",[114,164644,164646],{"className":30389,"code":164645,"language":30391,"meta":37,"style":37},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[120,164647,164648,164661],{"__ignoreMap":37},[123,164649,164650,164652,164654,164656,164658],{"class":125,"line":126},[123,164651,152856],{"class":133},[123,164653,69135],{"class":238},[123,164655,4452],{"class":133},[123,164657,179],{"class":129},[123,164659,164660],{"class":182}," 19\n",[123,164662,164663,164665,164667,164669,164671],{"class":125,"line":45},[123,164664,152856],{"class":133},[123,164666,164598],{"class":238},[123,164668,4452],{"class":133},[123,164670,179],{"class":129},[123,164672,164673],{"class":238}," \"北京\"\n",[14,164675,164676],{},"删除：",[114,164678,164680],{"className":30389,"code":164679,"language":30391,"meta":37,"style":37},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[120,164681,164682,164695,164705],{"__ignoreMap":37},[123,164683,164684,164686,164688,164691,164693],{"class":125,"line":126},[123,164685,155355],{"class":133},[123,164687,179],{"class":129},[123,164689,164690],{"class":133}," student.pop(",[123,164692,151469],{"class":238},[123,164694,140],{"class":133},[123,164696,164697,164699,164701,164703],{"class":125,"line":45},[123,164698,163380],{"class":129},[123,164700,152146],{"class":133},[123,164702,69135],{"class":238},[123,164704,33257],{"class":133},[123,164706,164707],{"class":125,"line":1189},[123,164708,164709],{"class":133},"student.clear()\n",[65,164711,164713],{"id":164712},"_611-字典遍历","6.11 字典遍历",[14,164715,164716],{},"遍历 key：",[114,164718,164720],{"className":30389,"code":164719,"language":30391,"meta":37,"style":37},"for key in student:\n    print(key, student[key])\n",[120,164721,164722,164734],{"__ignoreMap":37},[123,164723,164724,164726,164729,164731],{"class":125,"line":126},[123,164725,3034],{"class":129},[123,164727,164728],{"class":133}," key ",[123,164730,26054],{"class":129},[123,164732,164733],{"class":133}," student:\n",[123,164735,164736,164738],{"class":125,"line":45},[123,164737,31310],{"class":182},[123,164739,164740],{"class":133},"(key, student[key])\n",[14,164742,164743],{},"遍历 value：",[114,164745,164747],{"className":30389,"code":164746,"language":30391,"meta":37,"style":37},"for value in student.values():\n    print(value)\n",[120,164748,164749,164761],{"__ignoreMap":37},[123,164750,164751,164753,164756,164758],{"class":125,"line":126},[123,164752,3034],{"class":129},[123,164754,164755],{"class":133}," value ",[123,164757,26054],{"class":129},[123,164759,164760],{"class":133}," student.values():\n",[123,164762,164763,164765],{"class":125,"line":45},[123,164764,31310],{"class":182},[123,164766,164767],{"class":133},"(value)\n",[14,164769,164770],{},"遍历 key 和 value：",[114,164772,164774],{"className":30389,"code":164773,"language":30391,"meta":37,"style":37},"for key, value in student.items():\n    print(key, value)\n",[120,164775,164776,164788],{"__ignoreMap":37},[123,164777,164778,164780,164783,164785],{"class":125,"line":126},[123,164779,3034],{"class":129},[123,164781,164782],{"class":133}," key, value ",[123,164784,26054],{"class":129},[123,164786,164787],{"class":133}," student.items():\n",[123,164789,164790,164792],{"class":125,"line":45},[123,164791,31310],{"class":182},[123,164793,164794],{"class":133},"(key, value)\n",[65,164796,164798],{"id":164797},"_612-嵌套容器","6.12 嵌套容器",[14,164800,164801],{},"列表中保存字典，是项目中最常见的结构之一。",[114,164803,164805],{"className":30389,"code":164804,"language":30391,"meta":37,"style":37},"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",[120,164806,164807,164815,164843,164871,164899,164903,164907,164917],{"__ignoreMap":37},[123,164808,164809,164811,164813],{"class":125,"line":126},[123,164810,159713],{"class":133},[123,164812,179],{"class":129},[123,164814,55458],{"class":133},[123,164816,164817,164819,164821,164823,164825,164827,164829,164831,164833,164835,164837,164839,164841],{"class":125,"line":45},[123,164818,148382],{"class":133},[123,164820,62690],{"class":238},[123,164822,51448],{"class":133},[123,164824,149885],{"class":238},[123,164826,12445],{"class":133},[123,164828,69135],{"class":238},[123,164830,51448],{"class":133},[123,164832,784],{"class":182},[123,164834,12445],{"class":133},[123,164836,151469],{"class":238},[123,164838,51448],{"class":133},[123,164840,1123],{"class":182},[123,164842,4939],{"class":133},[123,164844,164845,164847,164849,164851,164853,164855,164857,164859,164861,164863,164865,164867,164869],{"class":125,"line":1189},[123,164846,148382],{"class":133},[123,164848,62690],{"class":238},[123,164850,51448],{"class":133},[123,164852,150933],{"class":238},[123,164854,12445],{"class":133},[123,164856,69135],{"class":238},[123,164858,51448],{"class":133},[123,164860,759],{"class":182},[123,164862,12445],{"class":133},[123,164864,151469],{"class":238},[123,164866,51448],{"class":133},[123,164868,945],{"class":182},[123,164870,4939],{"class":133},[123,164872,164873,164875,164877,164879,164881,164883,164885,164887,164889,164891,164893,164895,164897],{"class":125,"line":1204},[123,164874,148382],{"class":133},[123,164876,62690],{"class":238},[123,164878,51448],{"class":133},[123,164880,159728],{"class":238},[123,164882,12445],{"class":133},[123,164884,69135],{"class":238},[123,164886,51448],{"class":133},[123,164888,809],{"class":182},[123,164890,12445],{"class":133},[123,164892,151469],{"class":238},[123,164894,51448],{"class":133},[123,164896,540],{"class":182},[123,164898,4939],{"class":133},[123,164900,164901],{"class":125,"line":1210},[123,164902,33257],{"class":133},[123,164904,164905],{"class":125,"line":1224},[123,164906,2409],{"emptyLinePlaceholder":50},[123,164908,164909,164911,164913,164915],{"class":125,"line":1230},[123,164910,3034],{"class":129},[123,164912,152134],{"class":133},[123,164914,26054],{"class":129},[123,164916,152139],{"class":133},[123,164918,164919,164921,164923,164925,164928,164930],{"class":125,"line":1321},[123,164920,31310],{"class":182},[123,164922,164569],{"class":133},[123,164924,62690],{"class":238},[123,164926,164927],{"class":133},"], student[",[123,164929,151469],{"class":238},[123,164931,4666],{"class":133},[14,164933,164934],{},"统计平均分：",[114,164936,164938],{"className":30389,"code":164937,"language":30391,"meta":37,"style":37},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[120,164939,164940,164948,164952,164962,164974,164978,164993],{"__ignoreMap":37},[123,164941,164942,164944,164946],{"class":125,"line":126},[123,164943,157257],{"class":133},[123,164945,179],{"class":129},[123,164947,47344],{"class":182},[123,164949,164950],{"class":125,"line":45},[123,164951,2409],{"emptyLinePlaceholder":50},[123,164953,164954,164956,164958,164960],{"class":125,"line":1189},[123,164955,3034],{"class":129},[123,164957,152134],{"class":133},[123,164959,26054],{"class":129},[123,164961,152139],{"class":133},[123,164963,164964,164966,164968,164970,164972],{"class":125,"line":1204},[123,164965,159304],{"class":133},[123,164967,9487],{"class":129},[123,164969,152146],{"class":133},[123,164971,151469],{"class":238},[123,164973,33257],{"class":133},[123,164975,164976],{"class":125,"line":1210},[123,164977,2409],{"emptyLinePlaceholder":50},[123,164979,164980,164982,164984,164986,164988,164990],{"class":125,"line":1224},[123,164981,163771],{"class":133},[123,164983,179],{"class":129},[123,164985,163776],{"class":133},[123,164987,718],{"class":129},[123,164989,7341],{"class":182},[123,164991,164992],{"class":133},"(students)\n",[123,164994,164995,164997,164999,165001,165003,165005,165007,165009,165011,165013],{"class":125,"line":1230},[123,164996,30426],{"class":182},[123,164998,134],{"class":133},[123,165000,186],{"class":129},[123,165002,163794],{"class":238},[123,165004,1030],{"class":182},[123,165006,163799],{"class":133},[123,165008,157156],{"class":129},[123,165010,1080],{"class":182},[123,165012,385],{"class":238},[123,165014,140],{"class":133},[14,165016,165017],{},"查找学生：",[114,165019,165021],{"className":30389,"code":165020,"language":30391,"meta":37,"style":37},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[120,165022,165023,165038,165042,165052,165066,165072,165076,165082],{"__ignoreMap":37},[123,165024,165025,165027,165029,165031,165033,165036],{"class":125,"line":126},[123,165026,111575],{"class":133},[123,165028,179],{"class":129},[123,165030,60616],{"class":182},[123,165032,134],{"class":133},[123,165034,165035],{"class":238},"\"请输入学生姓名:\"",[123,165037,140],{"class":133},[123,165039,165040],{"class":125,"line":45},[123,165041,2409],{"emptyLinePlaceholder":50},[123,165043,165044,165046,165048,165050],{"class":125,"line":1189},[123,165045,3034],{"class":129},[123,165047,152134],{"class":133},[123,165049,26054],{"class":129},[123,165051,152139],{"class":133},[123,165053,165054,165056,165058,165060,165062,165064],{"class":125,"line":1204},[123,165055,3110],{"class":129},[123,165057,152146],{"class":133},[123,165059,62690],{"class":238},[123,165061,4452],{"class":133},[123,165063,2958],{"class":129},[123,165065,160429],{"class":133},[123,165067,165068,165070],{"class":125,"line":1210},[123,165069,32462],{"class":182},[123,165071,150039],{"class":133},[123,165073,165074],{"class":125,"line":1224},[123,165075,31638],{"class":129},[123,165077,165078,165080],{"class":125,"line":1230},[123,165079,1710],{"class":129},[123,165081,3748],{"class":133},[123,165083,165084,165086,165088,165091],{"class":125,"line":1321},[123,165085,31310],{"class":182},[123,165087,134],{"class":133},[123,165089,165090],{"class":238},"\"没有找到\"",[123,165092,140],{"class":133},[65,165094,165096],{"id":165095},"_613-容器通用操作","6.13 容器通用操作",[14,165098,165099],{},"长度：",[114,165101,165103],{"className":30389,"code":165102,"language":30391,"meta":37,"style":37},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[120,165104,165105,165124,165134],{"__ignoreMap":37},[123,165106,165107,165109,165112,165114,165116,165118,165120,165122],{"class":125,"line":126},[123,165108,7368],{"class":182},[123,165110,165111],{"class":133},"([",[123,165113,351],{"class":182},[123,165115,12445],{"class":133},[123,165117,211],{"class":182},[123,165119,12445],{"class":133},[123,165121,205],{"class":182},[123,165123,4666],{"class":133},[123,165125,165126,165128,165130,165132],{"class":125,"line":45},[123,165127,7368],{"class":182},[123,165129,134],{"class":133},[123,165131,155877],{"class":238},[123,165133,140],{"class":133},[123,165135,165136,165138,165141,165143,165145,165147],{"class":125,"line":1189},[123,165137,7368],{"class":182},[123,165139,165140],{"class":133},"({",[123,165142,62690],{"class":238},[123,165144,51448],{"class":133},[123,165146,149885],{"class":238},[123,165148,165149],{"class":133},"})\n",[14,165151,165152],{},"最大最小：",[114,165154,165156],{"className":30389,"code":165155,"language":30391,"meta":37,"style":37},"max([1, 2, 3])\nmin([1, 2, 3])\n",[120,165157,165158,165176],{"__ignoreMap":37},[123,165159,165160,165162,165164,165166,165168,165170,165172,165174],{"class":125,"line":126},[123,165161,6025],{"class":182},[123,165163,165111],{"class":133},[123,165165,351],{"class":182},[123,165167,12445],{"class":133},[123,165169,211],{"class":182},[123,165171,12445],{"class":133},[123,165173,205],{"class":182},[123,165175,4666],{"class":133},[123,165177,165178,165181,165183,165185,165187,165189,165191,165193],{"class":125,"line":45},[123,165179,165180],{"class":182},"min",[123,165182,165111],{"class":133},[123,165184,351],{"class":182},[123,165186,12445],{"class":133},[123,165188,211],{"class":182},[123,165190,12445],{"class":133},[123,165192,205],{"class":182},[123,165194,4666],{"class":133},[14,165196,165197],{},"求和：",[114,165199,165201],{"className":30389,"code":165200,"language":30391,"meta":37,"style":37},"sum([1, 2, 3])\n",[120,165202,165203],{"__ignoreMap":37},[123,165204,165205,165208,165210,165212,165214,165216,165218,165220],{"class":125,"line":126},[123,165206,165207],{"class":182},"sum",[123,165209,165111],{"class":133},[123,165211,351],{"class":182},[123,165213,12445],{"class":133},[123,165215,211],{"class":182},[123,165217,12445],{"class":133},[123,165219,205],{"class":182},[123,165221,4666],{"class":133},[14,165223,163468],{},[114,165225,165227],{"className":30389,"code":165226,"language":30391,"meta":37,"style":37},"sorted([3, 1, 2])\n",[120,165228,165229],{"__ignoreMap":37},[123,165230,165231,165234,165236,165238,165240,165242,165244,165246],{"class":125,"line":126},[123,165232,165233],{"class":182},"sorted",[123,165235,165111],{"class":133},[123,165237,205],{"class":182},[123,165239,12445],{"class":133},[123,165241,351],{"class":182},[123,165243,12445],{"class":133},[123,165245,211],{"class":182},[123,165247,4666],{"class":133},[14,165249,165250],{},"类型转换：",[114,165252,165254],{"className":30389,"code":165253,"language":30391,"meta":37,"style":37},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[120,165255,165256,165266,165284],{"__ignoreMap":37},[123,165257,165258,165260,165262,165264],{"class":125,"line":126},[123,165259,154067],{"class":182},[123,165261,134],{"class":133},[123,165263,155877],{"class":238},[123,165265,140],{"class":133},[123,165267,165268,165270,165272,165274,165276,165278,165280,165282],{"class":125,"line":45},[123,165269,155262],{"class":182},[123,165271,165111],{"class":133},[123,165273,351],{"class":182},[123,165275,12445],{"class":133},[123,165277,211],{"class":182},[123,165279,12445],{"class":133},[123,165281,205],{"class":182},[123,165283,4666],{"class":133},[123,165285,165286,165288,165290,165292,165294,165296,165298,165300,165302,165304],{"class":125,"line":1189},[123,165287,155287],{"class":182},[123,165289,165111],{"class":133},[123,165291,351],{"class":182},[123,165293,12445],{"class":133},[123,165295,351],{"class":182},[123,165297,12445],{"class":133},[123,165299,211],{"class":182},[123,165301,12445],{"class":133},[123,165303,205],{"class":182},[123,165305,4666],{"class":133},[14,165307,165308],{},"成员判断：",[114,165310,165312],{"className":30389,"code":165311,"language":30391,"meta":37,"style":37},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[120,165313,165314,165331,165355],{"__ignoreMap":37},[123,165315,165316,165318,165320,165323,165326,165329],{"class":125,"line":126},[123,165317,30426],{"class":182},[123,165319,134],{"class":133},[123,165321,165322],{"class":238},"\"a\"",[123,165324,165325],{"class":129}," in",[123,165327,165328],{"class":238}," \"abc\"",[123,165330,140],{"class":133},[123,165332,165333,165335,165337,165339,165341,165343,165345,165347,165349,165351,165353],{"class":125,"line":45},[123,165334,30426],{"class":182},[123,165336,134],{"class":133},[123,165338,351],{"class":182},[123,165340,165325],{"class":129},[123,165342,52237],{"class":133},[123,165344,351],{"class":182},[123,165346,12445],{"class":133},[123,165348,211],{"class":182},[123,165350,12445],{"class":133},[123,165352,205],{"class":182},[123,165354,4666],{"class":133},[123,165356,165357,165359,165361,165363,165365,165367,165369,165371,165373],{"class":125,"line":1189},[123,165358,30426],{"class":182},[123,165360,134],{"class":133},[123,165362,62690],{"class":238},[123,165364,165325],{"class":129},[123,165366,4457],{"class":133},[123,165368,62690],{"class":238},[123,165370,51448],{"class":133},[123,165372,149885],{"class":238},[123,165374,165149],{"class":133},[65,165376,165378],{"id":165377},"_614-推导式","6.14 推导式",[14,165380,165381],{},"推导式用于快速生成容器。",[14,165383,165384],{},"列表推导式：",[114,165386,165388],{"className":30389,"code":165387,"language":30391,"meta":37,"style":37},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[120,165389,165390,165417],{"__ignoreMap":37},[123,165391,165392,165394,165396,165399,165401,165403,165405,165407,165409,165411,165413,165415],{"class":125,"line":126},[123,165393,164097],{"class":133},[123,165395,179],{"class":129},[123,165397,165398],{"class":133}," [i ",[123,165400,3034],{"class":129},[123,165402,9448],{"class":133},[123,165404,26054],{"class":129},[123,165406,32454],{"class":182},[123,165408,134],{"class":133},[123,165410,351],{"class":182},[123,165412,12445],{"class":133},[123,165414,478],{"class":182},[123,165416,97297],{"class":133},[123,165418,165419,165421],{"class":125,"line":45},[123,165420,30426],{"class":182},[123,165422,164313],{"class":133},[14,165424,165425],{},"带条件：",[114,165427,165429],{"className":30389,"code":165428,"language":30391,"meta":37,"style":37},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[120,165430,165431,165472],{"__ignoreMap":37},[123,165432,165433,165436,165438,165440,165442,165444,165446,165448,165450,165452,165454,165456,165458,165460,165462,165464,165466,165468,165470],{"class":125,"line":126},[123,165434,165435],{"class":133},"even_nums ",[123,165437,179],{"class":129},[123,165439,165398],{"class":133},[123,165441,3034],{"class":129},[123,165443,9448],{"class":133},[123,165445,26054],{"class":129},[123,165447,32454],{"class":182},[123,165449,134],{"class":133},[123,165451,351],{"class":182},[123,165453,12445],{"class":133},[123,165455,471],{"class":182},[123,165457,13724],{"class":133},[123,165459,1540],{"class":129},[123,165461,9448],{"class":133},[123,165463,462],{"class":129},[123,165465,14765],{"class":182},[123,165467,101556],{"class":129},[123,165469,4102],{"class":182},[123,165471,33257],{"class":133},[123,165473,165474,165476],{"class":125,"line":45},[123,165475,30426],{"class":182},[123,165477,165478],{"class":133},"(even_nums)\n",[14,165480,165481],{},"字典推导式：",[114,165483,165485],{"className":30389,"code":165484,"language":30391,"meta":37,"style":37},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[120,165486,165487,165521],{"__ignoreMap":37},[123,165488,165489,165492,165494,165497,165499,165501,165504,165506,165508,165510,165512,165514,165516,165518],{"class":125,"line":126},[123,165490,165491],{"class":133},"squares ",[123,165493,179],{"class":129},[123,165495,165496],{"class":133}," {i: i ",[123,165498,10671],{"class":129},[123,165500,14765],{"class":182},[123,165502,165503],{"class":129}," for",[123,165505,9448],{"class":133},[123,165507,26054],{"class":129},[123,165509,32454],{"class":182},[123,165511,134],{"class":133},[123,165513,351],{"class":182},[123,165515,12445],{"class":133},[123,165517,478],{"class":182},[123,165519,165520],{"class":133},")}\n",[123,165522,165523,165525],{"class":125,"line":45},[123,165524,30426],{"class":182},[123,165526,165527],{"class":133},"(squares)\n",[14,165529,165530],{},"集合推导式：",[114,165532,165534],{"className":30389,"code":165533,"language":30391,"meta":37,"style":37},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[120,165535,165536,165557],{"__ignoreMap":37},[123,165537,165538,165541,165543,165546,165548,165550,165552,165555],{"class":125,"line":126},[123,165539,165540],{"class":133},"chars ",[123,165542,179],{"class":129},[123,165544,165545],{"class":133}," {ch ",[123,165547,3034],{"class":129},[123,165549,159689],{"class":133},[123,165551,26054],{"class":129},[123,165553,165554],{"class":238}," \"hello\"",[123,165556,1574],{"class":133},[123,165558,165559,165561],{"class":125,"line":45},[123,165560,30426],{"class":182},[123,165562,165563],{"class":133},"(chars)\n",[14,165565,165566],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[65,165568,165570],{"id":165569},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[114,165572,165574],{"className":30389,"code":165573,"language":30391,"meta":37,"style":37},"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",[120,165575,165576,165584,165604,165624,165644,165664,165668,165672,165680,165694,165703,165707,165717,165729,165733,165753,165762,165766,165782,165787,165791,165805,165809,165831,165867],{"__ignoreMap":37},[123,165577,165578,165580,165582],{"class":125,"line":126},[123,165579,159713],{"class":133},[123,165581,179],{"class":129},[123,165583,55458],{"class":133},[123,165585,165586,165588,165590,165592,165594,165596,165598,165600,165602],{"class":125,"line":45},[123,165587,148382],{"class":133},[123,165589,62690],{"class":238},[123,165591,51448],{"class":133},[123,165593,149885],{"class":238},[123,165595,12445],{"class":133},[123,165597,151469],{"class":238},[123,165599,51448],{"class":133},[123,165601,1123],{"class":182},[123,165603,4939],{"class":133},[123,165605,165606,165608,165610,165612,165614,165616,165618,165620,165622],{"class":125,"line":1189},[123,165607,148382],{"class":133},[123,165609,62690],{"class":238},[123,165611,51448],{"class":133},[123,165613,150933],{"class":238},[123,165615,12445],{"class":133},[123,165617,151469],{"class":238},[123,165619,51448],{"class":133},[123,165621,945],{"class":182},[123,165623,4939],{"class":133},[123,165625,165626,165628,165630,165632,165634,165636,165638,165640,165642],{"class":125,"line":1204},[123,165627,148382],{"class":133},[123,165629,62690],{"class":238},[123,165631,51448],{"class":133},[123,165633,159728],{"class":238},[123,165635,12445],{"class":133},[123,165637,151469],{"class":238},[123,165639,51448],{"class":133},[123,165641,540],{"class":182},[123,165643,4939],{"class":133},[123,165645,165646,165648,165650,165652,165654,165656,165658,165660,165662],{"class":125,"line":1210},[123,165647,148382],{"class":133},[123,165649,62690],{"class":238},[123,165651,51448],{"class":133},[123,165653,163307],{"class":238},[123,165655,12445],{"class":133},[123,165657,151469],{"class":238},[123,165659,51448],{"class":133},[123,165661,1016],{"class":182},[123,165663,4939],{"class":133},[123,165665,165666],{"class":125,"line":1224},[123,165667,33257],{"class":133},[123,165669,165670],{"class":125,"line":1230},[123,165671,2409],{"emptyLinePlaceholder":50},[123,165673,165674,165676,165678],{"class":125,"line":1321},[123,165675,157257],{"class":133},[123,165677,179],{"class":129},[123,165679,47344],{"class":182},[123,165681,165682,165685,165687,165690,165692],{"class":125,"line":1327},[123,165683,165684],{"class":133},"max_student ",[123,165686,179],{"class":129},[123,165688,165689],{"class":133}," students[",[123,165691,325],{"class":182},[123,165693,33257],{"class":133},[123,165695,165696,165699,165701],{"class":125,"line":1339},[123,165697,165698],{"class":133},"passed ",[123,165700,179],{"class":129},[123,165702,51849],{"class":133},[123,165704,165705],{"class":125,"line":1621},[123,165706,2409],{"emptyLinePlaceholder":50},[123,165708,165709,165711,165713,165715],{"class":125,"line":1626},[123,165710,3034],{"class":129},[123,165712,152134],{"class":133},[123,165714,26054],{"class":129},[123,165716,152139],{"class":133},[123,165718,165719,165721,165723,165725,165727],{"class":125,"line":1632},[123,165720,159304],{"class":133},[123,165722,9487],{"class":129},[123,165724,152146],{"class":133},[123,165726,151469],{"class":238},[123,165728,33257],{"class":133},[123,165730,165731],{"class":125,"line":1637},[123,165732,2409],{"emptyLinePlaceholder":50},[123,165734,165735,165737,165739,165741,165743,165745,165748,165750],{"class":125,"line":1651},[123,165736,3110],{"class":129},[123,165738,152146],{"class":133},[123,165740,151469],{"class":238},[123,165742,4452],{"class":133},[123,165744,1094],{"class":129},[123,165746,165747],{"class":133}," max_student[",[123,165749,151469],{"class":238},[123,165751,165752],{"class":133},"]:\n",[123,165754,165755,165758,165760],{"class":125,"line":1656},[123,165756,165757],{"class":133},"        max_student ",[123,165759,179],{"class":129},[123,165761,152162],{"class":133},[123,165763,165764],{"class":125,"line":1662},[123,165765,2409],{"emptyLinePlaceholder":50},[123,165767,165768,165770,165772,165774,165776,165778,165780],{"class":125,"line":1683},[123,165769,3110],{"class":129},[123,165771,152146],{"class":133},[123,165773,151469],{"class":238},[123,165775,4452],{"class":133},[123,165777,1719],{"class":129},[123,165779,157834],{"class":182},[123,165781,3748],{"class":133},[123,165783,165784],{"class":125,"line":1688},[123,165785,165786],{"class":133},"        passed.append(student)\n",[123,165788,165789],{"class":125,"line":1702},[123,165790,2409],{"emptyLinePlaceholder":50},[123,165792,165793,165795,165797,165799,165801,165803],{"class":125,"line":1707},[123,165794,163771],{"class":133},[123,165796,179],{"class":129},[123,165798,163776],{"class":133},[123,165800,718],{"class":129},[123,165802,7341],{"class":182},[123,165804,164992],{"class":133},[123,165806,165807],{"class":125,"line":1736},[123,165808,2409],{"emptyLinePlaceholder":50},[123,165810,165811,165813,165815,165817,165819,165821,165823,165825,165827,165829],{"class":125,"line":1741},[123,165812,30426],{"class":182},[123,165814,134],{"class":133},[123,165816,186],{"class":129},[123,165818,163794],{"class":238},[123,165820,1030],{"class":182},[123,165822,163799],{"class":133},[123,165824,157156],{"class":129},[123,165826,1080],{"class":182},[123,165828,385],{"class":238},[123,165830,140],{"class":133},[123,165832,165833,165835,165837,165839,165842,165844,165847,165849,165851,165853,165855,165857,165859,165861,165863,165865],{"class":125,"line":1758},[123,165834,30426],{"class":182},[123,165836,134],{"class":133},[123,165838,186],{"class":129},[123,165840,165841],{"class":238},"\"最高分学生:",[123,165843,1030],{"class":182},[123,165845,165846],{"class":133},"max_student[",[123,165848,152879],{"class":238},[123,165850,1074],{"class":133},[123,165852,1080],{"class":182},[123,165854,4457],{"class":182},[123,165856,165846],{"class":133},[123,165858,152917],{"class":238},[123,165860,1074],{"class":133},[123,165862,1080],{"class":182},[123,165864,385],{"class":238},[123,165866,140],{"class":133},[123,165868,165869,165871,165873,165875,165878,165881,165884,165886,165888],{"class":125,"line":1763},[123,165870,30426],{"class":182},[123,165872,134],{"class":133},[123,165874,186],{"class":129},[123,165876,165877],{"class":238},"\"及格人数:",[123,165879,165880],{"class":182},"{len",[123,165882,165883],{"class":133},"(passed)",[123,165885,1080],{"class":182},[123,165887,385],{"class":238},[123,165889,140],{"class":133},[65,165891,165893],{"id":165892},"_616-易错点","6.16 易错点",[77,165895,165896,165899,165902,165905,165911,165920],{},[80,165897,165898],{},"列表可变，元组和字符串不可变。",[80,165900,165901],{},"切片结束位置不包含。",[80,165903,165904],{},"字典通过 key 取值，不是通过索引。",[80,165906,165907,165908,28396],{},"空集合要用 ",[120,165909,165910],{},"set()",[80,165912,104363,165913,165916,165917,28396],{},[120,165914,165915],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[120,165918,165919],{},"get()",[80,165921,165922],{},"嵌套容器要先看清楚每一层是什么类型。",[65,165924,165926],{"id":165925},"_617-本章练习","6.17 本章练习",[77,165928,165929,165932,165935,165938,165941],{},[80,165930,165931],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[80,165933,165934],{},"输入一句话，统计每个字符出现次数。",[80,165936,165937],{},"使用集合去除列表中的重复元素。",[80,165939,165940],{},"使用字典保存一个学生的信息，并实现修改成绩。",[80,165942,165943],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5136,165945,165946],{},"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":37,"searchDepth":45,"depth":45,"links":165948},[165949,165950,165951,165952,165953,165954,165955,165956,165957,165958,165959,165960,165961,165962,165963,165964,165965],{"id":162929,"depth":45,"text":162930},{"id":163046,"depth":45,"text":163047},{"id":163136,"depth":45,"text":163137},{"id":163260,"depth":45,"text":163261},{"id":163623,"depth":45,"text":163624},{"id":163810,"depth":45,"text":163811},{"id":163929,"depth":45,"text":163930},{"id":164071,"depth":45,"text":164072},{"id":164258,"depth":45,"text":164259},{"id":164502,"depth":45,"text":164503},{"id":164712,"depth":45,"text":164713},{"id":164797,"depth":45,"text":164798},{"id":165095,"depth":45,"text":165096},{"id":165377,"depth":45,"text":165378},{"id":165569,"depth":45,"text":165570},{"id":165892,"depth":45,"text":165893},{"id":165925,"depth":45,"text":165926},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162921,"description":47},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":165972,"title":165973,"body":165974,"description":47,"extension":48,"meta":168146,"navigation":50,"path":168147,"seo":168148,"stem":168149,"__hash__":168150},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":165975,"toc":168121},[165976,165979,165983,165986,166066,166069,166090,166093,166097,166100,166162,166165,166182,166186,166189,166234,166236,166244,166248,166251,166333,166336,166339,166364,166367,166390,166394,166397,166399,166461,166464,166466,166517,166521,166525,166531,166636,166640,166646,166717,166721,166724,166792,166795,166875,166879,166885,166921,166924,166927,167037,167043,167047,167050,167122,167125,167129,167133,167138,167200,167204,167209,167277,167281,167286,167402,167406,167409,167489,167492,167496,167499,167603,167605,167620,167623,167627,167765,167773,167777,167779,167790,167792,168050,168054,168086,168090,168118],[10,165977,165973],{"id":165978},"_7-函数进阶",[65,165980,165982],{"id":165981},"_71-多返回值","7.1 多返回值",[14,165984,165985],{},"Python 函数可以返回多个值，本质上返回的是元组。",[114,165987,165989],{"className":30389,"code":165988,"language":30391,"meta":37,"style":37},"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",[120,165990,165991,166000,166008,166016,166025,166032,166036,166040,166049,166055],{"__ignoreMap":37},[123,165992,165993,165995,165998],{"class":125,"line":126},[123,165994,31958],{"class":129},[123,165996,165997],{"class":1972}," get_info",[123,165999,31964],{"class":133},[123,166001,166002,166004,166006],{"class":125,"line":45},[123,166003,152367],{"class":133},[123,166005,179],{"class":129},[123,166007,149350],{"class":238},[123,166009,166010,166012,166014],{"class":125,"line":1189},[123,166011,152383],{"class":133},[123,166013,179],{"class":129},[123,166015,146548],{"class":182},[123,166017,166018,166020,166022],{"class":125,"line":1204},[123,166019,152398],{"class":133},[123,166021,179],{"class":129},[123,166023,166024],{"class":182}," 95\n",[123,166026,166027,166029],{"class":125,"line":1210},[123,166028,4099],{"class":129},[123,166030,166031],{"class":133}," name, age, score\n",[123,166033,166034],{"class":125,"line":1224},[123,166035,2409],{"emptyLinePlaceholder":50},[123,166037,166038],{"class":125,"line":1230},[123,166039,2409],{"emptyLinePlaceholder":50},[123,166041,166042,166044,166046],{"class":125,"line":1321},[123,166043,161303],{"class":133},[123,166045,179],{"class":129},[123,166047,166048],{"class":133}," get_info()\n",[123,166050,166051,166053],{"class":125,"line":1327},[123,166052,30426],{"class":182},[123,166054,76596],{"class":133},[123,166056,166057,166059,166061,166063],{"class":125,"line":1339},[123,166058,30426],{"class":182},[123,166060,134],{"class":133},[123,166062,103104],{"class":182},[123,166064,166065],{"class":133},"(result))\n",[14,166067,166068],{},"可以直接解包：",[114,166070,166072],{"className":30389,"code":166071,"language":30391,"meta":37,"style":37},"name, age, score = get_info()\nprint(name, age, score)\n",[120,166073,166074,166083],{"__ignoreMap":37},[123,166075,166076,166079,166081],{"class":125,"line":126},[123,166077,166078],{"class":133},"name, age, score ",[123,166080,179],{"class":129},[123,166082,166048],{"class":133},[123,166084,166085,166087],{"class":125,"line":45},[123,166086,30426],{"class":182},[123,166088,166089],{"class":133},"(name, age, score)\n",[14,166091,166092],{},"返回多个值适合函数需要同时给出多个结果时使用。",[65,166094,166096],{"id":166095},"_72-位置参数","7.2 位置参数",[14,166098,166099],{},"位置参数按顺序传递。",[114,166101,166103],{"className":30389,"code":166102,"language":30391,"meta":37,"style":37},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[120,166104,166105,166113,166141,166145,166149],{"__ignoreMap":37},[123,166106,166107,166109,166111],{"class":125,"line":126},[123,166108,31958],{"class":129},[123,166110,149369],{"class":1972},[123,166112,149372],{"class":133},[123,166114,166115,166117,166119,166121,166123,166125,166127,166129,166131,166133,166135,166137,166139],{"class":125,"line":45},[123,166116,31310],{"class":182},[123,166118,134],{"class":133},[123,166120,186],{"class":129},[123,166122,149383],{"class":238},[123,166124,1030],{"class":182},[123,166126,79821],{"class":133},[123,166128,1080],{"class":182},[123,166130,149392],{"class":238},[123,166132,1030],{"class":182},[123,166134,70232],{"class":133},[123,166136,1080],{"class":182},[123,166138,149401],{"class":238},[123,166140,140],{"class":133},[123,166142,166143],{"class":125,"line":1189},[123,166144,2409],{"emptyLinePlaceholder":50},[123,166146,166147],{"class":125,"line":1204},[123,166148,2409],{"emptyLinePlaceholder":50},[123,166150,166151,166154,166156,166158,166160],{"class":125,"line":1210},[123,166152,166153],{"class":133},"introduce(",[123,166155,149885],{"class":238},[123,166157,12445],{"class":133},[123,166159,784],{"class":182},[123,166161,140],{"class":133},[14,166163,166164],{},"顺序错了就会得到错误含义：",[114,166166,166168],{"className":30389,"code":166167,"language":30391,"meta":37,"style":37},"introduce(18, \"小明\")\n",[120,166169,166170],{"__ignoreMap":37},[123,166171,166172,166174,166176,166178,166180],{"class":125,"line":126},[123,166173,166153],{"class":133},[123,166175,784],{"class":182},[123,166177,12445],{"class":133},[123,166179,149885],{"class":238},[123,166181,140],{"class":133},[65,166183,166185],{"id":166184},"_73-关键字参数","7.3 关键字参数",[14,166187,166188],{},"关键字参数按参数名传递。",[114,166190,166192],{"className":30389,"code":166191,"language":30391,"meta":37,"style":37},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[120,166193,166194,166214],{"__ignoreMap":37},[123,166195,166196,166198,166200,166202,166204,166206,166208,166210,166212],{"class":125,"line":126},[123,166197,166153],{"class":133},[123,166199,79821],{"class":5226},[123,166201,179],{"class":129},[123,166203,149885],{"class":238},[123,166205,12445],{"class":133},[123,166207,70232],{"class":5226},[123,166209,179],{"class":129},[123,166211,784],{"class":182},[123,166213,140],{"class":133},[123,166215,166216,166218,166220,166222,166224,166226,166228,166230,166232],{"class":125,"line":45},[123,166217,166153],{"class":133},[123,166219,70232],{"class":5226},[123,166221,179],{"class":129},[123,166223,784],{"class":182},[123,166225,12445],{"class":133},[123,166227,79821],{"class":5226},[123,166229,179],{"class":129},[123,166231,149885],{"class":238},[123,166233,140],{"class":133},[14,166235,117931],{},[77,166237,166238,166241],{},[80,166239,166240],{},"顺序不容易错。",[80,166242,166243],{},"调用时可读性更强。",[65,166245,166247],{"id":166246},"_74-默认参数","7.4 默认参数",[14,166249,166250],{},"默认参数给参数设置默认值。",[114,166252,166254],{"className":30389,"code":166253,"language":30391,"meta":37,"style":37},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[120,166255,166256,166272,166302,166306,166310,166320],{"__ignoreMap":37},[123,166257,166258,166260,166262,166265,166267,166270],{"class":125,"line":126},[123,166259,31958],{"class":129},[123,166261,122090],{"class":1972},[123,166263,166264],{"class":133},"(host, port",[123,166266,179],{"class":129},[123,166268,166269],{"class":182},"3306",[123,166271,30797],{"class":133},[123,166273,166274,166276,166278,166280,166283,166285,166287,166289,166291,166293,166296,166298,166300],{"class":125,"line":45},[123,166275,31310],{"class":182},[123,166277,134],{"class":133},[123,166279,186],{"class":129},[123,166281,166282],{"class":238},"\"连接",[123,166284,1030],{"class":182},[123,166286,27406],{"class":133},[123,166288,1080],{"class":182},[123,166290,993],{"class":238},[123,166292,1030],{"class":182},[123,166294,166295],{"class":133},"port",[123,166297,1080],{"class":182},[123,166299,385],{"class":238},[123,166301,140],{"class":133},[123,166303,166304],{"class":125,"line":1189},[123,166305,2409],{"emptyLinePlaceholder":50},[123,166307,166308],{"class":125,"line":1204},[123,166309,2409],{"emptyLinePlaceholder":50},[123,166311,166312,166315,166318],{"class":125,"line":1210},[123,166313,166314],{"class":133},"connect(",[123,166316,166317],{"class":238},"\"localhost\"",[123,166319,140],{"class":133},[123,166321,166322,166324,166326,166328,166331],{"class":125,"line":1224},[123,166323,166314],{"class":133},[123,166325,166317],{"class":238},[123,166327,12445],{"class":133},[123,166329,166330],{"class":182},"6379",[123,166332,140],{"class":133},[14,166334,166335],{},"注意：默认参数必须放在非默认参数后面。",[14,166337,166338],{},"错误：",[114,166340,166342],{"className":30389,"code":166341,"language":30391,"meta":37,"style":37},"def connect(port=3306, host):\n    pass\n",[120,166343,166344,166360],{"__ignoreMap":37},[123,166345,166346,166348,166350,166353,166355,166357],{"class":125,"line":126},[123,166347,31958],{"class":129},[123,166349,122090],{"class":1972},[123,166351,166352],{"class":133},"(port",[123,166354,179],{"class":129},[123,166356,166269],{"class":182},[123,166358,166359],{"class":133},", host):\n",[123,166361,166362],{"class":125,"line":45},[123,166363,149534],{"class":129},[14,166365,166366],{},"正确：",[114,166368,166370],{"className":30389,"code":166369,"language":30391,"meta":37,"style":37},"def connect(host, port=3306):\n    pass\n",[120,166371,166372,166386],{"__ignoreMap":37},[123,166373,166374,166376,166378,166380,166382,166384],{"class":125,"line":126},[123,166375,31958],{"class":129},[123,166377,122090],{"class":1972},[123,166379,166264],{"class":133},[123,166381,179],{"class":129},[123,166383,166269],{"class":182},[123,166385,30797],{"class":133},[123,166387,166388],{"class":125,"line":45},[123,166389,149534],{"class":129},[65,166391,166393],{"id":166392},"_75-默认参数的坑","7.5 默认参数的坑",[14,166395,166396],{},"不要使用可变对象作为默认参数。",[14,166398,157620],{},[114,166400,166402],{"className":30389,"code":166401,"language":30391,"meta":37,"style":37},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[120,166403,166404,166419,166424,166431,166435,166439,166450],{"__ignoreMap":37},[123,166405,166406,166408,166411,166414,166416],{"class":125,"line":126},[123,166407,31958],{"class":129},[123,166409,166410],{"class":1972}," add_item",[123,166412,166413],{"class":133},"(item, items",[123,166415,179],{"class":129},[123,166417,166418],{"class":133},"[]):\n",[123,166420,166421],{"class":125,"line":45},[123,166422,166423],{"class":133},"    items.append(item)\n",[123,166425,166426,166428],{"class":125,"line":1189},[123,166427,4099],{"class":129},[123,166429,166430],{"class":133}," items\n",[123,166432,166433],{"class":125,"line":1204},[123,166434,2409],{"emptyLinePlaceholder":50},[123,166436,166437],{"class":125,"line":1210},[123,166438,2409],{"emptyLinePlaceholder":50},[123,166440,166441,166443,166446,166448],{"class":125,"line":1224},[123,166442,30426],{"class":182},[123,166444,166445],{"class":133},"(add_item(",[123,166447,165322],{"class":238},[123,166449,30508],{"class":133},[123,166451,166452,166454,166456,166459],{"class":125,"line":1230},[123,166453,30426],{"class":182},[123,166455,166445],{"class":133},[123,166457,166458],{"class":238},"\"b\"",[123,166460,30508],{"class":133},[14,166462,166463],{},"第二次调用会复用第一次的列表。",[14,166465,155885],{},[114,166467,166469],{"className":30389,"code":166468,"language":30391,"meta":37,"style":37},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[120,166470,166471,166485,166498,166507,166511],{"__ignoreMap":37},[123,166472,166473,166475,166477,166479,166481,166483],{"class":125,"line":126},[123,166474,31958],{"class":129},[123,166476,166410],{"class":1972},[123,166478,166413],{"class":133},[123,166480,179],{"class":129},[123,166482,95683],{"class":182},[123,166484,30797],{"class":133},[123,166486,166487,166489,166492,166494,166496],{"class":125,"line":45},[123,166488,3110],{"class":129},[123,166490,166491],{"class":133}," items ",[123,166493,38938],{"class":129},[123,166495,38944],{"class":182},[123,166497,3748],{"class":133},[123,166499,166500,166503,166505],{"class":125,"line":1189},[123,166501,166502],{"class":133},"        items ",[123,166504,179],{"class":129},[123,166506,51849],{"class":133},[123,166508,166509],{"class":125,"line":1204},[123,166510,166423],{"class":133},[123,166512,166513,166515],{"class":125,"line":1210},[123,166514,4099],{"class":129},[123,166516,166430],{"class":133},[65,166518,166520],{"id":166519},"_76-不定长参数","7.6 不定长参数",[94,166522,166524],{"id":166523},"_761-args","7.6.1 *args",[14,166526,166527,166530],{},[120,166528,166529],{},"*args"," 接收任意数量的位置参数，得到元组。",[114,166532,166534],{"className":30389,"code":166533,"language":30391,"meta":37,"style":37},"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",[120,166535,166536,166549,166557,166568,166577,166583,166587,166591,166610],{"__ignoreMap":37},[123,166537,166538,166540,166542,166544,166546],{"class":125,"line":126},[123,166539,31958],{"class":129},[123,166541,5219],{"class":1972},[123,166543,134],{"class":133},[123,166545,589],{"class":129},[123,166547,166548],{"class":133},"args):\n",[123,166550,166551,166553,166555],{"class":125,"line":45},[123,166552,159304],{"class":133},[123,166554,179],{"class":129},[123,166556,47344],{"class":182},[123,166558,166559,166561,166563,166565],{"class":125,"line":1189},[123,166560,3210],{"class":129},[123,166562,156177],{"class":133},[123,166564,26054],{"class":129},[123,166566,166567],{"class":133}," args:\n",[123,166569,166570,166572,166574],{"class":125,"line":1204},[123,166571,159979],{"class":133},[123,166573,9487],{"class":129},[123,166575,166576],{"class":133}," num\n",[123,166578,166579,166581],{"class":125,"line":1210},[123,166580,4099],{"class":129},[123,166582,162284],{"class":133},[123,166584,166585],{"class":125,"line":1224},[123,166586,2409],{"emptyLinePlaceholder":50},[123,166588,166589],{"class":125,"line":1230},[123,166590,2409],{"emptyLinePlaceholder":50},[123,166592,166593,166595,166598,166600,166602,166604,166606,166608],{"class":125,"line":1321},[123,166594,30426],{"class":182},[123,166596,166597],{"class":133},"(add(",[123,166599,351],{"class":182},[123,166601,12445],{"class":133},[123,166603,211],{"class":182},[123,166605,12445],{"class":133},[123,166607,205],{"class":182},[123,166609,30508],{"class":133},[123,166611,166612,166614,166616,166618,166620,166622,166624,166626,166628,166630,166632,166634],{"class":125,"line":1327},[123,166613,30426],{"class":182},[123,166615,166597],{"class":133},[123,166617,351],{"class":182},[123,166619,12445],{"class":133},[123,166621,211],{"class":182},[123,166623,12445],{"class":133},[123,166625,205],{"class":182},[123,166627,12445],{"class":133},[123,166629,427],{"class":182},[123,166631,12445],{"class":133},[123,166633,453],{"class":182},[123,166635,30508],{"class":133},[94,166637,166639],{"id":166638},"_762-kwargs","7.6.2 **kwargs",[14,166641,166642,166645],{},[120,166643,166644],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[114,166647,166649],{"className":30389,"code":166648,"language":30391,"meta":37,"style":37},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[120,166650,166651,166664,166675,166681,166685,166689],{"__ignoreMap":37},[123,166652,166653,166655,166657,166659,166661],{"class":125,"line":126},[123,166654,31958],{"class":129},[123,166656,161942],{"class":1972},[123,166658,134],{"class":133},[123,166660,10671],{"class":129},[123,166662,166663],{"class":133},"kwargs):\n",[123,166665,166666,166668,166670,166672],{"class":125,"line":45},[123,166667,3210],{"class":129},[123,166669,164782],{"class":133},[123,166671,26054],{"class":129},[123,166673,166674],{"class":133}," kwargs.items():\n",[123,166676,166677,166679],{"class":125,"line":1189},[123,166678,32462],{"class":182},[123,166680,164794],{"class":133},[123,166682,166683],{"class":125,"line":1204},[123,166684,2409],{"emptyLinePlaceholder":50},[123,166686,166687],{"class":125,"line":1210},[123,166688,2409],{"emptyLinePlaceholder":50},[123,166690,166691,166693,166695,166697,166699,166701,166703,166705,166707,166709,166711,166713,166715],{"class":125,"line":1224},[123,166692,162007],{"class":133},[123,166694,79821],{"class":5226},[123,166696,179],{"class":129},[123,166698,149885],{"class":238},[123,166700,12445],{"class":133},[123,166702,70232],{"class":5226},[123,166704,179],{"class":129},[123,166706,784],{"class":182},[123,166708,12445],{"class":133},[123,166710,70283],{"class":5226},[123,166712,179],{"class":129},[123,166714,69280],{"class":238},[123,166716,140],{"class":133},[65,166718,166720],{"id":166719},"_77-参数解包","7.7 参数解包",[14,166722,166723],{},"列表或元组解包为位置参数：",[114,166725,166727],{"className":30389,"code":166726,"language":30391,"meta":37,"style":37},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[120,166728,166729,166738,166753,166757,166761,166781],{"__ignoreMap":37},[123,166730,166731,166733,166735],{"class":125,"line":126},[123,166732,31958],{"class":129},[123,166734,5219],{"class":1972},[123,166736,166737],{"class":133},"(a, b, c):\n",[123,166739,166740,166742,166744,166746,166748,166750],{"class":125,"line":45},[123,166741,4099],{"class":129},[123,166743,10879],{"class":133},[123,166745,615],{"class":129},[123,166747,10892],{"class":133},[123,166749,615],{"class":129},[123,166751,166752],{"class":133}," c\n",[123,166754,166755],{"class":125,"line":1189},[123,166756,2409],{"emptyLinePlaceholder":50},[123,166758,166759],{"class":125,"line":1204},[123,166760,2409],{"emptyLinePlaceholder":50},[123,166762,166763,166765,166767,166769,166771,166773,166775,166777,166779],{"class":125,"line":1210},[123,166764,164097],{"class":133},[123,166766,179],{"class":129},[123,166768,52237],{"class":133},[123,166770,351],{"class":182},[123,166772,12445],{"class":133},[123,166774,211],{"class":182},[123,166776,12445],{"class":133},[123,166778,205],{"class":182},[123,166780,33257],{"class":133},[123,166782,166783,166785,166787,166789],{"class":125,"line":1224},[123,166784,30426],{"class":182},[123,166786,166597],{"class":133},[123,166788,589],{"class":129},[123,166790,166791],{"class":133},"nums))\n",[14,166793,166794],{},"字典解包为关键字参数：",[114,166796,166798],{"className":30389,"code":166797,"language":30391,"meta":37,"style":37},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[120,166799,166800,166808,166834,166838,166842,166866],{"__ignoreMap":37},[123,166801,166802,166804,166806],{"class":125,"line":126},[123,166803,31958],{"class":129},[123,166805,149369],{"class":1972},[123,166807,149372],{"class":133},[123,166809,166810,166812,166814,166816,166818,166820,166822,166824,166826,166828,166830,166832],{"class":125,"line":45},[123,166811,31310],{"class":182},[123,166813,134],{"class":133},[123,166815,186],{"class":129},[123,166817,385],{"class":238},[123,166819,1030],{"class":182},[123,166821,79821],{"class":133},[123,166823,1080],{"class":182},[123,166825,4457],{"class":182},[123,166827,70232],{"class":133},[123,166829,1080],{"class":182},[123,166831,385],{"class":238},[123,166833,140],{"class":133},[123,166835,166836],{"class":125,"line":1189},[123,166837,2409],{"emptyLinePlaceholder":50},[123,166839,166840],{"class":125,"line":1204},[123,166841,2409],{"emptyLinePlaceholder":50},[123,166843,166844,166846,166848,166850,166852,166854,166856,166858,166860,166862,166864],{"class":125,"line":1210},[123,166845,116311],{"class":133},[123,166847,179],{"class":129},[123,166849,4457],{"class":133},[123,166851,62690],{"class":238},[123,166853,51448],{"class":133},[123,166855,149885],{"class":238},[123,166857,12445],{"class":133},[123,166859,69135],{"class":238},[123,166861,51448],{"class":133},[123,166863,784],{"class":182},[123,166865,1574],{"class":133},[123,166867,166868,166870,166872],{"class":125,"line":1224},[123,166869,166153],{"class":133},[123,166871,10671],{"class":129},[123,166873,166874],{"class":133},"info)\n",[65,166876,166878],{"id":166877},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,166880,166881,166884],{},[120,166882,166883],{},"lambda"," 用于定义简单匿名函数。",[114,166886,166888],{"className":30389,"code":166887,"language":30391,"meta":37,"style":37},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[120,166889,166890,166907],{"__ignoreMap":37},[123,166891,166892,166895,166897,166900,166903,166905],{"class":125,"line":126},[123,166893,166894],{"class":133},"add ",[123,166896,179],{"class":129},[123,166898,166899],{"class":129}," lambda",[123,166901,166902],{"class":133}," a, b: a ",[123,166904,615],{"class":129},[123,166906,151101],{"class":133},[123,166908,166909,166911,166913,166915,166917,166919],{"class":125,"line":45},[123,166910,30426],{"class":182},[123,166912,166597],{"class":133},[123,166914,351],{"class":182},[123,166916,12445],{"class":133},[123,166918,211],{"class":182},[123,166920,30508],{"class":133},[14,166922,166923],{},"常和排序、过滤等函数一起使用。",[14,166925,166926],{},"按分数排序：",[114,166928,166930],{"className":30389,"code":166929,"language":30391,"meta":37,"style":37},"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",[120,166931,166932,166940,166960,166980,167000,167004,167008,167031],{"__ignoreMap":37},[123,166933,166934,166936,166938],{"class":125,"line":126},[123,166935,159713],{"class":133},[123,166937,179],{"class":129},[123,166939,55458],{"class":133},[123,166941,166942,166944,166946,166948,166950,166952,166954,166956,166958],{"class":125,"line":45},[123,166943,148382],{"class":133},[123,166945,62690],{"class":238},[123,166947,51448],{"class":133},[123,166949,149885],{"class":238},[123,166951,12445],{"class":133},[123,166953,151469],{"class":238},[123,166955,51448],{"class":133},[123,166957,1123],{"class":182},[123,166959,4939],{"class":133},[123,166961,166962,166964,166966,166968,166970,166972,166974,166976,166978],{"class":125,"line":1189},[123,166963,148382],{"class":133},[123,166965,62690],{"class":238},[123,166967,51448],{"class":133},[123,166969,150933],{"class":238},[123,166971,12445],{"class":133},[123,166973,151469],{"class":238},[123,166975,51448],{"class":133},[123,166977,945],{"class":182},[123,166979,4939],{"class":133},[123,166981,166982,166984,166986,166988,166990,166992,166994,166996,166998],{"class":125,"line":1204},[123,166983,148382],{"class":133},[123,166985,62690],{"class":238},[123,166987,51448],{"class":133},[123,166989,159728],{"class":238},[123,166991,12445],{"class":133},[123,166993,151469],{"class":238},[123,166995,51448],{"class":133},[123,166997,540],{"class":182},[123,166999,4939],{"class":133},[123,167001,167002],{"class":125,"line":1210},[123,167003,33257],{"class":133},[123,167005,167006],{"class":125,"line":1224},[123,167007,2409],{"emptyLinePlaceholder":50},[123,167009,167010,167013,167015,167017,167019,167021,167023,167025,167027,167029],{"class":125,"line":1230},[123,167011,167012],{"class":133},"students.sort(",[123,167014,153943],{"class":5226},[123,167016,153946],{"class":129},[123,167018,153949],{"class":133},[123,167020,151469],{"class":238},[123,167022,112199],{"class":133},[123,167024,163525],{"class":5226},[123,167026,179],{"class":129},[123,167028,31487],{"class":182},[123,167030,140],{"class":133},[123,167032,167033,167035],{"class":125,"line":1321},[123,167034,30426],{"class":182},[123,167036,164992],{"class":133},[14,167038,167039,167040,167042],{},"如果逻辑复杂，不要硬写 ",[120,167041,166883],{},"，定义普通函数更清晰。",[65,167044,167046],{"id":167045},"_79-函数作为参数","7.9 函数作为参数",[14,167048,167049],{},"函数可以作为参数传给另一个函数。",[114,167051,167053],{"className":30389,"code":167052,"language":30391,"meta":37,"style":37},"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",[120,167054,167055,167063,167073,167077,167081,167091,167098,167102,167106],{"__ignoreMap":37},[123,167056,167057,167059,167061],{"class":125,"line":126},[123,167058,31958],{"class":129},[123,167060,5219],{"class":1972},[123,167062,151090],{"class":133},[123,167064,167065,167067,167069,167071],{"class":125,"line":45},[123,167066,4099],{"class":129},[123,167068,10879],{"class":133},[123,167070,615],{"class":129},[123,167072,151101],{"class":133},[123,167074,167075],{"class":125,"line":1189},[123,167076,2409],{"emptyLinePlaceholder":50},[123,167078,167079],{"class":125,"line":1204},[123,167080,2409],{"emptyLinePlaceholder":50},[123,167082,167083,167085,167088],{"class":125,"line":1210},[123,167084,31958],{"class":129},[123,167086,167087],{"class":1972}," calculate",[123,167089,167090],{"class":133},"(a, b, func):\n",[123,167092,167093,167095],{"class":125,"line":1224},[123,167094,4099],{"class":129},[123,167096,167097],{"class":133}," func(a, b)\n",[123,167099,167100],{"class":125,"line":1230},[123,167101,2409],{"emptyLinePlaceholder":50},[123,167103,167104],{"class":125,"line":1321},[123,167105,2409],{"emptyLinePlaceholder":50},[123,167107,167108,167110,167113,167115,167117,167119],{"class":125,"line":1327},[123,167109,30426],{"class":182},[123,167111,167112],{"class":133},"(calculate(",[123,167114,580],{"class":182},[123,167116,12445],{"class":133},[123,167118,834],{"class":182},[123,167120,167121],{"class":133},", add))\n",[14,167123,167124],{},"这种思想在排序、回调、框架中经常出现。",[65,167126,167128],{"id":167127},"_710-mapfiltersorted","7.10 map、filter、sorted",[94,167130,167132],{"id":167131},"_7101-map","7.10.1 map",[14,167134,167135,167137],{},[120,167136,74055],{}," 对每个元素执行函数。",[114,167139,167141],{"className":30389,"code":167140,"language":30391,"meta":37,"style":37},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[120,167142,167143,167167,167190],{"__ignoreMap":37},[123,167144,167145,167147,167149,167151,167153,167155,167157,167159,167161,167163,167165],{"class":125,"line":126},[123,167146,164097],{"class":133},[123,167148,179],{"class":129},[123,167150,52237],{"class":133},[123,167152,351],{"class":182},[123,167154,12445],{"class":133},[123,167156,211],{"class":182},[123,167158,12445],{"class":133},[123,167160,205],{"class":182},[123,167162,12445],{"class":133},[123,167164,427],{"class":182},[123,167166,33257],{"class":133},[123,167168,167169,167171,167173,167176,167178,167180,167183,167185,167187],{"class":125,"line":45},[123,167170,161303],{"class":133},[123,167172,179],{"class":129},[123,167174,167175],{"class":182}," map",[123,167177,134],{"class":133},[123,167179,166883],{"class":129},[123,167181,167182],{"class":133}," x: x ",[123,167184,589],{"class":129},[123,167186,14765],{"class":182},[123,167188,167189],{"class":133},", nums)\n",[123,167191,167192,167194,167196,167198],{"class":125,"line":1189},[123,167193,30426],{"class":182},[123,167195,134],{"class":133},[123,167197,154067],{"class":182},[123,167199,166065],{"class":133},[94,167201,167203],{"id":167202},"_7102-filter","7.10.2 filter",[14,167205,167206,167208],{},[120,167207,80062],{}," 保留满足条件的元素。",[114,167210,167212],{"className":30389,"code":167211,"language":30391,"meta":37,"style":37},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[120,167213,167214,167242,167267],{"__ignoreMap":37},[123,167215,167216,167218,167220,167222,167224,167226,167228,167230,167232,167234,167236,167238,167240],{"class":125,"line":126},[123,167217,164097],{"class":133},[123,167219,179],{"class":129},[123,167221,52237],{"class":133},[123,167223,351],{"class":182},[123,167225,12445],{"class":133},[123,167227,211],{"class":182},[123,167229,12445],{"class":133},[123,167231,205],{"class":182},[123,167233,12445],{"class":133},[123,167235,427],{"class":182},[123,167237,12445],{"class":133},[123,167239,453],{"class":182},[123,167241,33257],{"class":133},[123,167243,167244,167246,167248,167251,167253,167255,167257,167259,167261,167263,167265],{"class":125,"line":45},[123,167245,161303],{"class":133},[123,167247,179],{"class":129},[123,167249,167250],{"class":182}," filter",[123,167252,134],{"class":133},[123,167254,166883],{"class":129},[123,167256,167182],{"class":133},[123,167258,462],{"class":129},[123,167260,14765],{"class":182},[123,167262,101556],{"class":129},[123,167264,4102],{"class":182},[123,167266,167189],{"class":133},[123,167268,167269,167271,167273,167275],{"class":125,"line":1189},[123,167270,30426],{"class":182},[123,167272,134],{"class":133},[123,167274,154067],{"class":182},[123,167276,166065],{"class":133},[94,167278,167280],{"id":167279},"_7103-sorted","7.10.3 sorted",[14,167282,167283,167285],{},[120,167284,165233],{}," 返回排序后的新列表。",[114,167287,167289],{"className":30389,"code":167288,"language":30391,"meta":37,"style":37},"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",[120,167290,167291,167299,167319,167339,167359,167363,167367,167396],{"__ignoreMap":37},[123,167292,167293,167295,167297],{"class":125,"line":126},[123,167294,159713],{"class":133},[123,167296,179],{"class":129},[123,167298,55458],{"class":133},[123,167300,167301,167303,167305,167307,167309,167311,167313,167315,167317],{"class":125,"line":45},[123,167302,148382],{"class":133},[123,167304,62690],{"class":238},[123,167306,51448],{"class":133},[123,167308,149885],{"class":238},[123,167310,12445],{"class":133},[123,167312,151469],{"class":238},[123,167314,51448],{"class":133},[123,167316,1123],{"class":182},[123,167318,4939],{"class":133},[123,167320,167321,167323,167325,167327,167329,167331,167333,167335,167337],{"class":125,"line":1189},[123,167322,148382],{"class":133},[123,167324,62690],{"class":238},[123,167326,51448],{"class":133},[123,167328,150933],{"class":238},[123,167330,12445],{"class":133},[123,167332,151469],{"class":238},[123,167334,51448],{"class":133},[123,167336,945],{"class":182},[123,167338,4939],{"class":133},[123,167340,167341,167343,167345,167347,167349,167351,167353,167355,167357],{"class":125,"line":1204},[123,167342,148382],{"class":133},[123,167344,62690],{"class":238},[123,167346,51448],{"class":133},[123,167348,159728],{"class":238},[123,167350,12445],{"class":133},[123,167352,151469],{"class":238},[123,167354,51448],{"class":133},[123,167356,540],{"class":182},[123,167358,4939],{"class":133},[123,167360,167361],{"class":125,"line":1210},[123,167362,33257],{"class":133},[123,167364,167365],{"class":125,"line":1224},[123,167366,2409],{"emptyLinePlaceholder":50},[123,167368,167369,167371,167373,167375,167378,167380,167382,167384,167386,167388,167390,167392,167394],{"class":125,"line":1230},[123,167370,161303],{"class":133},[123,167372,179],{"class":129},[123,167374,163601],{"class":182},[123,167376,167377],{"class":133},"(students, ",[123,167379,153943],{"class":5226},[123,167381,153946],{"class":129},[123,167383,153949],{"class":133},[123,167385,151469],{"class":238},[123,167387,112199],{"class":133},[123,167389,163525],{"class":5226},[123,167391,179],{"class":129},[123,167393,31487],{"class":182},[123,167395,140],{"class":133},[123,167397,167398,167400],{"class":125,"line":1321},[123,167399,30426],{"class":182},[123,167401,76596],{"class":133},[65,167403,167405],{"id":167404},"_711-闭包入门","7.11 闭包入门",[14,167407,167408],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[114,167410,167412],{"className":30389,"code":167411,"language":30391,"meta":37,"style":37},"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",[120,167413,167414,167424,167434,167445,167449,167456,167460,167464,167478],{"__ignoreMap":37},[123,167415,167416,167418,167421],{"class":125,"line":126},[123,167417,31958],{"class":129},[123,167419,167420],{"class":1972}," outer",[123,167422,167423],{"class":133},"(base):\n",[123,167425,167426,167428,167431],{"class":125,"line":45},[123,167427,30812],{"class":129},[123,167429,167430],{"class":1972}," inner",[123,167432,167433],{"class":133},"(num):\n",[123,167435,167436,167438,167441,167443],{"class":125,"line":1189},[123,167437,14762],{"class":129},[123,167439,167440],{"class":133}," base ",[123,167442,615],{"class":129},[123,167444,166576],{"class":133},[123,167446,167447],{"class":125,"line":1204},[123,167448,2409],{"emptyLinePlaceholder":50},[123,167450,167451,167453],{"class":125,"line":1210},[123,167452,4099],{"class":129},[123,167454,167455],{"class":133}," inner\n",[123,167457,167458],{"class":125,"line":1224},[123,167459,2409],{"emptyLinePlaceholder":50},[123,167461,167462],{"class":125,"line":1230},[123,167463,2409],{"emptyLinePlaceholder":50},[123,167465,167466,167469,167471,167474,167476],{"class":125,"line":1321},[123,167467,167468],{"class":133},"add_10 ",[123,167470,179],{"class":129},[123,167472,167473],{"class":133}," outer(",[123,167475,580],{"class":182},[123,167477,140],{"class":133},[123,167479,167480,167482,167485,167487],{"class":125,"line":1327},[123,167481,30426],{"class":182},[123,167483,167484],{"class":133},"(add_10(",[123,167486,453],{"class":182},[123,167488,30508],{"class":133},[14,167490,167491],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[65,167493,167495],{"id":167494},"_712-装饰器入门","7.12 装饰器入门",[14,167497,167498],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[114,167500,167502],{"className":30389,"code":167501,"language":30391,"meta":37,"style":37},"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",[120,167503,167504,167513,167522,167533,167538,167549,167553,167560,167564,167568,167573,167581,167591,167595,167599],{"__ignoreMap":37},[123,167505,167506,167508,167510],{"class":125,"line":126},[123,167507,31958],{"class":129},[123,167509,87202],{"class":1972},[123,167511,167512],{"class":133},"(func):\n",[123,167514,167515,167517,167520],{"class":125,"line":45},[123,167516,30812],{"class":129},[123,167518,167519],{"class":1972}," wrapper",[123,167521,31964],{"class":133},[123,167523,167524,167526,167528,167531],{"class":125,"line":1189},[123,167525,32462],{"class":182},[123,167527,134],{"class":133},[123,167529,167530],{"class":238},"\"函数开始执行\"",[123,167532,140],{"class":133},[123,167534,167535],{"class":125,"line":1204},[123,167536,167537],{"class":133},"        func()\n",[123,167539,167540,167542,167544,167547],{"class":125,"line":1210},[123,167541,32462],{"class":182},[123,167543,134],{"class":133},[123,167545,167546],{"class":238},"\"函数执行结束\"",[123,167548,140],{"class":133},[123,167550,167551],{"class":125,"line":1224},[123,167552,2409],{"emptyLinePlaceholder":50},[123,167554,167555,167557],{"class":125,"line":1230},[123,167556,4099],{"class":129},[123,167558,167559],{"class":133}," wrapper\n",[123,167561,167562],{"class":125,"line":1321},[123,167563,2409],{"emptyLinePlaceholder":50},[123,167565,167566],{"class":125,"line":1327},[123,167567,2409],{"emptyLinePlaceholder":50},[123,167569,167570],{"class":125,"line":1339},[123,167571,167572],{"class":1972},"@log\n",[123,167574,167575,167577,167579],{"class":125,"line":1621},[123,167576,31958],{"class":129},[123,167578,160993],{"class":1972},[123,167580,31964],{"class":133},[123,167582,167583,167585,167587,167589],{"class":125,"line":1626},[123,167584,31310],{"class":182},[123,167586,134],{"class":133},[123,167588,5854],{"class":238},[123,167590,140],{"class":133},[123,167592,167593],{"class":125,"line":1632},[123,167594,2409],{"emptyLinePlaceholder":50},[123,167596,167597],{"class":125,"line":1637},[123,167598,2409],{"emptyLinePlaceholder":50},[123,167600,167601],{"class":125,"line":1651},[123,167602,161028],{"class":133},[14,167604,158271],{},[114,167606,167608],{"className":30389,"code":167607,"language":30391,"meta":37,"style":37},"say_hello = log(say_hello)\n",[120,167609,167610],{"__ignoreMap":37},[123,167611,167612,167615,167617],{"class":125,"line":126},[123,167613,167614],{"class":133},"say_hello ",[123,167616,179],{"class":129},[123,167618,167619],{"class":133}," log(say_hello)\n",[14,167621,167622],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[65,167624,167626],{"id":167625},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[114,167628,167630],{"className":30389,"code":167629,"language":30391,"meta":37,"style":37},"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",[120,167631,167632,167640,167657,167667,167686,167696,167703,167707,167713,167717,167721,167725,167733,167743,167747,167751],{"__ignoreMap":37},[123,167633,167634,167636,167638],{"class":125,"line":126},[123,167635,31958],{"class":129},[123,167637,87202],{"class":1972},[123,167639,167512],{"class":133},[123,167641,167642,167644,167646,167648,167650,167653,167655],{"class":125,"line":45},[123,167643,30812],{"class":129},[123,167645,167519],{"class":1972},[123,167647,134],{"class":133},[123,167649,589],{"class":129},[123,167651,167652],{"class":133},"args, ",[123,167654,10671],{"class":129},[123,167656,166663],{"class":133},[123,167658,167659,167661,167663,167665],{"class":125,"line":1189},[123,167660,32462],{"class":182},[123,167662,134],{"class":133},[123,167664,167530],{"class":238},[123,167666,140],{"class":133},[123,167668,167669,167672,167674,167677,167679,167681,167683],{"class":125,"line":1204},[123,167670,167671],{"class":133},"        result ",[123,167673,179],{"class":129},[123,167675,167676],{"class":133}," func(",[123,167678,589],{"class":129},[123,167680,167652],{"class":133},[123,167682,10671],{"class":129},[123,167684,167685],{"class":133},"kwargs)\n",[123,167687,167688,167690,167692,167694],{"class":125,"line":1210},[123,167689,32462],{"class":182},[123,167691,134],{"class":133},[123,167693,167546],{"class":238},[123,167695,140],{"class":133},[123,167697,167698,167700],{"class":125,"line":1224},[123,167699,14762],{"class":129},[123,167701,167702],{"class":133}," result\n",[123,167704,167705],{"class":125,"line":1230},[123,167706,2409],{"emptyLinePlaceholder":50},[123,167708,167709,167711],{"class":125,"line":1321},[123,167710,4099],{"class":129},[123,167712,167559],{"class":133},[123,167714,167715],{"class":125,"line":1327},[123,167716,2409],{"emptyLinePlaceholder":50},[123,167718,167719],{"class":125,"line":1339},[123,167720,2409],{"emptyLinePlaceholder":50},[123,167722,167723],{"class":125,"line":1621},[123,167724,167572],{"class":1972},[123,167726,167727,167729,167731],{"class":125,"line":1626},[123,167728,31958],{"class":129},[123,167730,5219],{"class":1972},[123,167732,151090],{"class":133},[123,167734,167735,167737,167739,167741],{"class":125,"line":1632},[123,167736,4099],{"class":129},[123,167738,10879],{"class":133},[123,167740,615],{"class":129},[123,167742,151101],{"class":133},[123,167744,167745],{"class":125,"line":1637},[123,167746,2409],{"emptyLinePlaceholder":50},[123,167748,167749],{"class":125,"line":1651},[123,167750,2409],{"emptyLinePlaceholder":50},[123,167752,167753,167755,167757,167759,167761,167763],{"class":125,"line":1656},[123,167754,30426],{"class":182},[123,167756,166597],{"class":133},[123,167758,580],{"class":182},[123,167760,12445],{"class":133},[123,167762,834],{"class":182},[123,167764,30508],{"class":133},[14,167766,167767,167768,101015,167770,167772],{},"这个写法使用 ",[120,167769,166529],{},[120,167771,166644],{}," 接收原函数的所有参数。",[65,167774,167776],{"id":167775},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,167778,123289],{},[77,167780,167781,167784,167787],{},[80,167782,167783],{},"给定一组学生数据。",[80,167785,167786],{},"封装函数，根据传入规则筛选学生。",[80,167788,167789],{},"筛选及格、优秀、未成年学生。",[14,167791,10045],{},[114,167793,167795],{"className":30389,"code":167794,"language":30391,"meta":37,"style":37},"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",[120,167796,167797,167805,167833,167861,167889,167893,167897,167901,167911,167919,167929,167936,167941,167947,167951,167955,167979,168002,168025,168029,168036,168043],{"__ignoreMap":37},[123,167798,167799,167801,167803],{"class":125,"line":126},[123,167800,159713],{"class":133},[123,167802,179],{"class":129},[123,167804,55458],{"class":133},[123,167806,167807,167809,167811,167813,167815,167817,167819,167821,167823,167825,167827,167829,167831],{"class":125,"line":45},[123,167808,148382],{"class":133},[123,167810,62690],{"class":238},[123,167812,51448],{"class":133},[123,167814,149885],{"class":238},[123,167816,12445],{"class":133},[123,167818,69135],{"class":238},[123,167820,51448],{"class":133},[123,167822,784],{"class":182},[123,167824,12445],{"class":133},[123,167826,151469],{"class":238},[123,167828,51448],{"class":133},[123,167830,1123],{"class":182},[123,167832,4939],{"class":133},[123,167834,167835,167837,167839,167841,167843,167845,167847,167849,167851,167853,167855,167857,167859],{"class":125,"line":1189},[123,167836,148382],{"class":133},[123,167838,62690],{"class":238},[123,167840,51448],{"class":133},[123,167842,150933],{"class":238},[123,167844,12445],{"class":133},[123,167846,69135],{"class":238},[123,167848,51448],{"class":133},[123,167850,759],{"class":182},[123,167852,12445],{"class":133},[123,167854,151469],{"class":238},[123,167856,51448],{"class":133},[123,167858,945],{"class":182},[123,167860,4939],{"class":133},[123,167862,167863,167865,167867,167869,167871,167873,167875,167877,167879,167881,167883,167885,167887],{"class":125,"line":1204},[123,167864,148382],{"class":133},[123,167866,62690],{"class":238},[123,167868,51448],{"class":133},[123,167870,159728],{"class":238},[123,167872,12445],{"class":133},[123,167874,69135],{"class":238},[123,167876,51448],{"class":133},[123,167878,809],{"class":182},[123,167880,12445],{"class":133},[123,167882,151469],{"class":238},[123,167884,51448],{"class":133},[123,167886,1016],{"class":182},[123,167888,4939],{"class":133},[123,167890,167891],{"class":125,"line":1210},[123,167892,33257],{"class":133},[123,167894,167895],{"class":125,"line":1224},[123,167896,2409],{"emptyLinePlaceholder":50},[123,167898,167899],{"class":125,"line":1230},[123,167900,2409],{"emptyLinePlaceholder":50},[123,167902,167903,167905,167908],{"class":125,"line":1321},[123,167904,31958],{"class":129},[123,167906,167907],{"class":1972}," filter_students",[123,167909,167910],{"class":133},"(students, condition):\n",[123,167912,167913,167915,167917],{"class":125,"line":1327},[123,167914,161220],{"class":133},[123,167916,179],{"class":129},[123,167918,51849],{"class":133},[123,167920,167921,167923,167925,167927],{"class":125,"line":1339},[123,167922,3210],{"class":129},[123,167924,152134],{"class":133},[123,167926,26054],{"class":129},[123,167928,152139],{"class":133},[123,167930,167931,167933],{"class":125,"line":1621},[123,167932,2506],{"class":129},[123,167934,167935],{"class":133}," condition(student):\n",[123,167937,167938],{"class":125,"line":1626},[123,167939,167940],{"class":133},"            result.append(student)\n",[123,167942,167943,167945],{"class":125,"line":1632},[123,167944,4099],{"class":129},[123,167946,167702],{"class":133},[123,167948,167949],{"class":125,"line":1637},[123,167950,2409],{"emptyLinePlaceholder":50},[123,167952,167953],{"class":125,"line":1651},[123,167954,2409],{"emptyLinePlaceholder":50},[123,167956,167957,167959,167961,167964,167966,167969,167971,167973,167975,167977],{"class":125,"line":1656},[123,167958,165698],{"class":133},[123,167960,179],{"class":129},[123,167962,167963],{"class":133}," filter_students(students, ",[123,167965,166883],{"class":129},[123,167967,167968],{"class":133}," s: s[",[123,167970,151469],{"class":238},[123,167972,4452],{"class":133},[123,167974,1719],{"class":129},[123,167976,157834],{"class":182},[123,167978,140],{"class":133},[123,167980,167981,167984,167986,167988,167990,167992,167994,167996,167998,168000],{"class":125,"line":1662},[123,167982,167983],{"class":133},"excellent ",[123,167985,179],{"class":129},[123,167987,167963],{"class":133},[123,167989,166883],{"class":129},[123,167991,167968],{"class":133},[123,167993,151469],{"class":238},[123,167995,4452],{"class":133},[123,167997,1719],{"class":129},[123,167999,157785],{"class":182},[123,168001,140],{"class":133},[123,168003,168004,168007,168009,168011,168013,168015,168017,168019,168021,168023],{"class":125,"line":1683},[123,168005,168006],{"class":133},"under_age ",[123,168008,179],{"class":129},[123,168010,167963],{"class":133},[123,168012,166883],{"class":129},[123,168014,167968],{"class":133},[123,168016,69135],{"class":238},[123,168018,4452],{"class":133},[123,168020,1044],{"class":129},[123,168022,156282],{"class":182},[123,168024,140],{"class":133},[123,168026,168027],{"class":125,"line":1688},[123,168028,2409],{"emptyLinePlaceholder":50},[123,168030,168031,168033],{"class":125,"line":1702},[123,168032,30426],{"class":182},[123,168034,168035],{"class":133},"(passed)\n",[123,168037,168038,168040],{"class":125,"line":1707},[123,168039,30426],{"class":182},[123,168041,168042],{"class":133},"(excellent)\n",[123,168044,168045,168047],{"class":125,"line":1736},[123,168046,30426],{"class":182},[123,168048,168049],{"class":133},"(under_age)\n",[65,168051,168053],{"id":168052},"_715-易错点","7.15 易错点",[77,168055,168056,168059,168067,168072,168083],{},[80,168057,168058],{},"默认参数不要写可变对象。",[80,168060,168061,168063,168064,168066],{},[120,168062,166529],{}," 是元组，",[120,168065,166644],{}," 是字典。",[80,168068,168069,168071],{},[120,168070,166883],{}," 只适合简单表达式。",[80,168073,168074,101015,168076,168078,168079,168082],{},[120,168075,74055],{},[120,168077,80062],{}," 的结果是迭代器，常用 ",[120,168080,168081],{},"list()"," 转换查看。",[80,168084,168085],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[65,168087,168089],{"id":168088},"_716-本章练习","7.16 本章练习",[77,168091,168092,168099,168105,168110,168115],{},[80,168093,168094,168095,168098],{},"写函数 ",[120,168096,168097],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[80,168100,168094,168101,168104],{},[120,168102,168103],{},"print_user(**kwargs)","，输出用户所有字段。",[80,168106,104363,168107,168109],{},[120,168108,166883],{}," 对学生列表按年龄排序。",[80,168111,104363,168112,168114],{},[120,168113,80062],{}," 找出成绩不及格的学生。",[80,168116,168117],{},"写一个装饰器，统计函数执行前后的提示信息。",[5136,168119,168120],{},"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":37,"searchDepth":45,"depth":45,"links":168122},[168123,168124,168125,168126,168127,168128,168132,168133,168134,168135,168140,168141,168142,168143,168144,168145],{"id":165981,"depth":45,"text":165982},{"id":166095,"depth":45,"text":166096},{"id":166184,"depth":45,"text":166185},{"id":166246,"depth":45,"text":166247},{"id":166392,"depth":45,"text":166393},{"id":166519,"depth":45,"text":166520,"children":168129},[168130,168131],{"id":166523,"depth":1189,"text":166524},{"id":166638,"depth":1189,"text":166639},{"id":166719,"depth":45,"text":166720},{"id":166877,"depth":45,"text":166878},{"id":167045,"depth":45,"text":167046},{"id":167127,"depth":45,"text":167128,"children":168136},[168137,168138,168139],{"id":167131,"depth":1189,"text":167132},{"id":167202,"depth":1189,"text":167203},{"id":167279,"depth":1189,"text":167280},{"id":167404,"depth":45,"text":167405},{"id":167494,"depth":45,"text":167495},{"id":167625,"depth":45,"text":167626},{"id":167775,"depth":45,"text":167776},{"id":168052,"depth":45,"text":168053},{"id":168088,"depth":45,"text":168089},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":165973,"description":47},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168152,"title":168153,"body":168154,"description":47,"extension":48,"meta":170673,"navigation":50,"path":170674,"seo":170675,"stem":170676,"__hash__":170677},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168155,"toc":170648},[168156,168159,168163,168166,168169,168200,168204,168208,168211,168238,168242,168245,168296,168299,168314,168317,168352,168356,168358,168382,168385,168445,168449,168453,168456,168513,168516,168536,168540,168543,168606,168610,168613,168669,168676,168700,168704,168707,168770,168774,168779,168830,168833,168837,168842,168909,168912,168994,168998,169003,169054,169057,169061,169064,169067,169075,169078,169124,169127,169173,169177,169183,169227,169230,169276,169279,169319,169322,169383,169387,169390,169480,169483,169625,169628,169695,169699,169702,169705,169846,169849,169927,169930,170106,170110,170112,170123,170125,170324,170328,170572,170576,170610,170614,170645],[10,168157,168153],{"id":168158},"_8-文件操作",[65,168160,168162],{"id":168161},"_81-文件操作的意义","8.1 文件操作的意义",[14,168164,168165],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168167,168168],{},"常见文件类型：",[77,168170,168171,168177,168183,168189,168195],{},[80,168172,168173,168176],{},[120,168174,168175],{},".txt","：普通文本。",[80,168178,168179,168182],{},[120,168180,168181],{},".csv","：表格文本。",[80,168184,168185,168188],{},[120,168186,168187],{},".json","：结构化数据。",[80,168190,168191,168194],{},[120,168192,168193],{},".log","：日志文件。",[80,168196,168197,168199],{},[120,168198,146349],{},"：Python 源代码。",[65,168201,168203],{"id":168202},"_82-路径","8.2 路径",[94,168205,168207],{"id":168206},"_821-相对路径","8.2.1 相对路径",[14,168209,168210],{},"相对当前运行目录：",[114,168212,168214],{"className":30389,"code":168213,"language":30391,"meta":37,"style":37},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[120,168215,168216],{"__ignoreMap":37},[123,168217,168218,168220,168222,168224,168226,168228,168230,168232,168234,168236],{"class":125,"line":126},[123,168219,86926],{"class":182},[123,168221,134],{"class":133},[123,168223,146793],{"class":238},[123,168225,12445],{"class":133},[123,168227,146798],{"class":238},[123,168229,12445],{"class":133},[123,168231,146803],{"class":5226},[123,168233,179],{"class":129},[123,168235,146808],{"class":238},[123,168237,140],{"class":133},[94,168239,168241],{"id":168240},"_822-绝对路径","8.2.2 绝对路径",[14,168243,168244],{},"从根目录或盘符开始：",[114,168246,168248],{"className":30389,"code":168247,"language":30391,"meta":37,"style":37},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[120,168249,168250,168273],{"__ignoreMap":37},[123,168251,168252,168254,168256,168259,168261,168263,168265,168267,168269,168271],{"class":125,"line":126},[123,168253,86926],{"class":182},[123,168255,134],{"class":133},[123,168257,168258],{"class":238},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[123,168260,12445],{"class":133},[123,168262,146798],{"class":238},[123,168264,12445],{"class":133},[123,168266,146803],{"class":5226},[123,168268,179],{"class":129},[123,168270,146808],{"class":238},[123,168272,140],{"class":133},[123,168274,168275,168277,168279,168282,168284,168286,168288,168290,168292,168294],{"class":125,"line":45},[123,168276,86926],{"class":182},[123,168278,134],{"class":133},[123,168280,168281],{"class":238},"\"D:\u002Fdata\u002Fdata.txt\"",[123,168283,12445],{"class":133},[123,168285,146798],{"class":238},[123,168287,12445],{"class":133},[123,168289,146803],{"class":5226},[123,168291,179],{"class":129},[123,168293,146808],{"class":238},[123,168295,140],{"class":133},[14,168297,168298],{},"Windows 路径建议写成：",[114,168300,168302],{"className":30389,"code":168301,"language":30391,"meta":37,"style":37},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[120,168303,168304],{"__ignoreMap":37},[123,168305,168306,168309,168311],{"class":125,"line":126},[123,168307,168308],{"class":133},"path ",[123,168310,179],{"class":129},[123,168312,168313],{"class":238}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168315,168316],{},"或原始字符串：",[114,168318,168320],{"className":30389,"code":168319,"language":30391,"meta":37,"style":37},"path = r\"D:\\data\\data.txt\"\n",[120,168321,168322],{"__ignoreMap":37},[123,168323,168324,168326,168328,168330,168332,168335,168338,168341,168343,168345,168347,168350],{"class":125,"line":126},[123,168325,168308],{"class":133},[123,168327,179],{"class":129},[123,168329,17131],{"class":129},[123,168331,385],{"class":238},[123,168333,168334],{"class":47988},"D:",[123,168336,168337],{"class":182},"\\d",[123,168339,168340],{"class":47988},"ata",[123,168342,168337],{"class":182},[123,168344,168340],{"class":47988},[123,168346,692],{"class":182},[123,168348,168349],{"class":47988},"txt",[123,168351,25144],{"class":238},[65,168353,168355],{"id":168354},"_83-open函数","8.3 open函数",[14,168357,5191],{},[114,168359,168361],{"className":30389,"code":168360,"language":30391,"meta":37,"style":37},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[120,168362,168363],{"__ignoreMap":37},[123,168364,168365,168367,168369,168371,168374,168376,168378,168380],{"class":125,"line":126},[123,168366,45365],{"class":5226},[123,168368,13574],{"class":129},[123,168370,146788],{"class":182},[123,168372,168373],{"class":133},"(文件路径, 打开模式, ",[123,168375,146803],{"class":5226},[123,168377,179],{"class":129},[123,168379,146808],{"class":238},[123,168381,140],{"class":133},[14,168383,168384],{},"常见模式：",[271,168386,168387,168396],{},[274,168388,168389],{},[277,168390,168391,168394],{},[280,168392,168393],{},"模式",[280,168395,25880],{},[318,168397,168398,168407,168416,168425,168435],{},[277,168399,168400,168404],{},[323,168401,168402],{},[120,168403,804],{},[323,168405,168406],{},"只读，文件不存在会报错",[277,168408,168409,168413],{},[323,168410,168411],{},[120,168412,929],{},[323,168414,168415],{},"只写，文件不存在会创建，存在会清空",[277,168417,168418,168422],{},[323,168419,168420],{},[120,168421,372],{},[323,168423,168424],{},"追加，文件不存在会创建",[277,168426,168427,168432],{},[323,168428,168429],{},[120,168430,168431],{},"rb",[323,168433,168434],{},"二进制只读",[277,168436,168437,168442],{},[323,168438,168439],{},[120,168440,168441],{},"wb",[323,168443,168444],{},"二进制只写",[65,168446,168448],{"id":168447},"_84-读取文件","8.4 读取文件",[94,168450,168452],{"id":168451},"_841-read","8.4.1 read",[14,168454,168455],{},"一次读取全部内容：",[114,168457,168459],{"className":30389,"code":168458,"language":30391,"meta":37,"style":37},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[120,168460,168461,168487,168499,168506],{"__ignoreMap":37},[123,168462,168463,168465,168467,168469,168471,168473,168475,168477,168479,168481,168483,168485],{"class":125,"line":126},[123,168464,45365],{"class":5226},[123,168466,13574],{"class":129},[123,168468,146788],{"class":182},[123,168470,134],{"class":133},[123,168472,146793],{"class":238},[123,168474,12445],{"class":133},[123,168476,146798],{"class":238},[123,168478,12445],{"class":133},[123,168480,146803],{"class":5226},[123,168482,179],{"class":129},[123,168484,146808],{"class":238},[123,168486,140],{"class":133},[123,168488,168489,168492,168494,168496],{"class":125,"line":45},[123,168490,168491],{"class":133},"content ",[123,168493,179],{"class":129},[123,168495,148150],{"class":5226},[123,168497,168498],{"class":133},".read()\n",[123,168500,168501,168503],{"class":125,"line":1189},[123,168502,30426],{"class":182},[123,168504,168505],{"class":133},"(content)\n",[123,168507,168508,168510],{"class":125,"line":1204},[123,168509,45365],{"class":5226},[123,168511,168512],{"class":133},".close()\n",[14,168514,168515],{},"可以指定读取字符数：",[114,168517,168519],{"className":30389,"code":168518,"language":30391,"meta":37,"style":37},"content = file.read(10)\n",[120,168520,168521],{"__ignoreMap":37},[123,168522,168523,168525,168527,168529,168532,168534],{"class":125,"line":126},[123,168524,168491],{"class":133},[123,168526,179],{"class":129},[123,168528,148150],{"class":5226},[123,168530,168531],{"class":133},".read(",[123,168533,580],{"class":182},[123,168535,140],{"class":133},[94,168537,168539],{"id":168538},"_842-readline","8.4.2 readline",[14,168541,168542],{},"一次读取一行：",[114,168544,168546],{"className":30389,"code":168545,"language":30391,"meta":37,"style":37},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[120,168547,168548,168574,168578,168589,168596,168600],{"__ignoreMap":37},[123,168549,168550,168552,168554,168556,168558,168560,168562,168564,168566,168568,168570,168572],{"class":125,"line":126},[123,168551,45365],{"class":5226},[123,168553,13574],{"class":129},[123,168555,146788],{"class":182},[123,168557,134],{"class":133},[123,168559,146793],{"class":238},[123,168561,12445],{"class":133},[123,168563,146798],{"class":238},[123,168565,12445],{"class":133},[123,168567,146803],{"class":5226},[123,168569,179],{"class":129},[123,168571,146808],{"class":238},[123,168573,140],{"class":133},[123,168575,168576],{"class":125,"line":45},[123,168577,2409],{"emptyLinePlaceholder":50},[123,168579,168580,168582,168584,168586],{"class":125,"line":1189},[123,168581,147249],{"class":133},[123,168583,179],{"class":129},[123,168585,148150],{"class":5226},[123,168587,168588],{"class":133},".readline()\n",[123,168590,168591,168593],{"class":125,"line":1204},[123,168592,30426],{"class":182},[123,168594,168595],{"class":133},"(line)\n",[123,168597,168598],{"class":125,"line":1210},[123,168599,2409],{"emptyLinePlaceholder":50},[123,168601,168602,168604],{"class":125,"line":1224},[123,168603,45365],{"class":5226},[123,168605,168512],{"class":133},[94,168607,168609],{"id":168608},"_843-readlines","8.4.3 readlines",[14,168611,168612],{},"读取所有行，返回列表：",[114,168614,168616],{"className":30389,"code":168615,"language":30391,"meta":37,"style":37},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[120,168617,168618,168644,168656,168663],{"__ignoreMap":37},[123,168619,168620,168622,168624,168626,168628,168630,168632,168634,168636,168638,168640,168642],{"class":125,"line":126},[123,168621,45365],{"class":5226},[123,168623,13574],{"class":129},[123,168625,146788],{"class":182},[123,168627,134],{"class":133},[123,168629,146793],{"class":238},[123,168631,12445],{"class":133},[123,168633,146798],{"class":238},[123,168635,12445],{"class":133},[123,168637,146803],{"class":5226},[123,168639,179],{"class":129},[123,168641,146808],{"class":238},[123,168643,140],{"class":133},[123,168645,168646,168649,168651,168653],{"class":125,"line":45},[123,168647,168648],{"class":133},"lines ",[123,168650,179],{"class":129},[123,168652,148150],{"class":5226},[123,168654,168655],{"class":133},".readlines()\n",[123,168657,168658,168660],{"class":125,"line":1189},[123,168659,30426],{"class":182},[123,168661,168662],{"class":133},"(lines)\n",[123,168664,168665,168667],{"class":125,"line":1204},[123,168666,45365],{"class":5226},[123,168668,168512],{"class":133},[14,168670,168671,168672,168675],{},"每一行通常带有换行符，可以用 ",[120,168673,168674],{},"strip()"," 去掉：",[114,168677,168679],{"className":30389,"code":168678,"language":30391,"meta":37,"style":37},"for line in lines:\n    print(line.strip())\n",[120,168680,168681,168693],{"__ignoreMap":37},[123,168682,168683,168685,168688,168690],{"class":125,"line":126},[123,168684,3034],{"class":129},[123,168686,168687],{"class":133}," line ",[123,168689,26054],{"class":129},[123,168691,168692],{"class":133}," lines:\n",[123,168694,168695,168697],{"class":125,"line":45},[123,168696,31310],{"class":182},[123,168698,168699],{"class":133},"(line.strip())\n",[94,168701,168703],{"id":168702},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,168705,168706],{},"推荐读取大文件时使用：",[114,168708,168710],{"className":30389,"code":168709,"language":30391,"meta":37,"style":37},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[120,168711,168712,168738,168742,168754,168760,168764],{"__ignoreMap":37},[123,168713,168714,168716,168718,168720,168722,168724,168726,168728,168730,168732,168734,168736],{"class":125,"line":126},[123,168715,45365],{"class":5226},[123,168717,13574],{"class":129},[123,168719,146788],{"class":182},[123,168721,134],{"class":133},[123,168723,146793],{"class":238},[123,168725,12445],{"class":133},[123,168727,146798],{"class":238},[123,168729,12445],{"class":133},[123,168731,146803],{"class":5226},[123,168733,179],{"class":129},[123,168735,146808],{"class":238},[123,168737,140],{"class":133},[123,168739,168740],{"class":125,"line":45},[123,168741,2409],{"emptyLinePlaceholder":50},[123,168743,168744,168746,168748,168750,168752],{"class":125,"line":1189},[123,168745,3034],{"class":129},[123,168747,168687],{"class":133},[123,168749,26054],{"class":129},[123,168751,148150],{"class":5226},[123,168753,3748],{"class":133},[123,168755,168756,168758],{"class":125,"line":1204},[123,168757,31310],{"class":182},[123,168759,168699],{"class":133},[123,168761,168762],{"class":125,"line":1210},[123,168763,2409],{"emptyLinePlaceholder":50},[123,168765,168766,168768],{"class":125,"line":1224},[123,168767,45365],{"class":5226},[123,168769,168512],{"class":133},[65,168771,168773],{"id":168772},"_85-with语句","8.5 with语句",[14,168775,168776,168778],{},[120,168777,107830],{}," 会自动关闭文件，推荐使用。",[114,168780,168782],{"className":30389,"code":168781,"language":30391,"meta":37,"style":37},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[120,168783,168784,168814,168824],{"__ignoreMap":37},[123,168785,168786,168788,168790,168792,168794,168796,168798,168800,168802,168804,168806,168808,168810,168812],{"class":125,"line":126},[123,168787,107830],{"class":129},[123,168789,146788],{"class":182},[123,168791,134],{"class":133},[123,168793,146793],{"class":238},[123,168795,12445],{"class":133},[123,168797,146798],{"class":238},[123,168799,12445],{"class":133},[123,168801,146803],{"class":5226},[123,168803,179],{"class":129},[123,168805,146808],{"class":238},[123,168807,13724],{"class":133},[123,168809,31394],{"class":129},[123,168811,148150],{"class":5226},[123,168813,3748],{"class":133},[123,168815,168816,168818,168820,168822],{"class":125,"line":45},[123,168817,146820],{"class":133},[123,168819,179],{"class":129},[123,168821,148150],{"class":5226},[123,168823,168498],{"class":133},[123,168825,168826,168828],{"class":125,"line":1189},[123,168827,31310],{"class":182},[123,168829,168505],{"class":133},[14,168831,168832],{},"等价于打开文件、读取、最后关闭，但更安全。",[65,168834,168836],{"id":168835},"_86-写入文件","8.6 写入文件",[14,168838,168839,168841],{},[120,168840,929],{}," 模式会清空原文件。",[114,168843,168845],{"className":30389,"code":168844,"language":30391,"meta":37,"style":37},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[120,168846,168847,168877,168894],{"__ignoreMap":37},[123,168848,168849,168851,168853,168855,168857,168859,168861,168863,168865,168867,168869,168871,168873,168875],{"class":125,"line":126},[123,168850,107830],{"class":129},[123,168852,146788],{"class":182},[123,168854,134],{"class":133},[123,168856,146793],{"class":238},[123,168858,12445],{"class":133},[123,168860,151973],{"class":238},[123,168862,12445],{"class":133},[123,168864,146803],{"class":5226},[123,168866,179],{"class":129},[123,168868,146808],{"class":238},[123,168870,13724],{"class":133},[123,168872,31394],{"class":129},[123,168874,148150],{"class":5226},[123,168876,3748],{"class":133},[123,168878,168879,168882,168885,168888,168890,168892],{"class":125,"line":45},[123,168880,168881],{"class":5226},"    file",[123,168883,168884],{"class":133},".write(",[123,168886,168887],{"class":238},"\"hello",[123,168889,156522],{"class":182},[123,168891,385],{"class":238},[123,168893,140],{"class":133},[123,168895,168896,168898,168900,168903,168905,168907],{"class":125,"line":1189},[123,168897,168881],{"class":5226},[123,168899,168884],{"class":133},[123,168901,168902],{"class":238},"\"python",[123,168904,156522],{"class":182},[123,168906,385],{"class":238},[123,168908,140],{"class":133},[14,168910,168911],{},"写入多行：",[114,168913,168915],{"className":30389,"code":168914,"language":30391,"meta":37,"style":37},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[120,168916,168917,168952,168956,168987],{"__ignoreMap":37},[123,168918,168919,168921,168923,168925,168928,168930,168932,168934,168937,168939,168941,168943,168946,168948,168950],{"class":125,"line":126},[123,168920,168648],{"class":133},[123,168922,179],{"class":129},[123,168924,52237],{"class":133},[123,168926,168927],{"class":238},"\"小明,18",[123,168929,156522],{"class":182},[123,168931,385],{"class":238},[123,168933,12445],{"class":133},[123,168935,168936],{"class":238},"\"小红,17",[123,168938,156522],{"class":182},[123,168940,385],{"class":238},[123,168942,12445],{"class":133},[123,168944,168945],{"class":238},"\"小刚,19",[123,168947,156522],{"class":182},[123,168949,385],{"class":238},[123,168951,33257],{"class":133},[123,168953,168954],{"class":125,"line":45},[123,168955,2409],{"emptyLinePlaceholder":50},[123,168957,168958,168960,168962,168964,168967,168969,168971,168973,168975,168977,168979,168981,168983,168985],{"class":125,"line":1189},[123,168959,107830],{"class":129},[123,168961,146788],{"class":182},[123,168963,134],{"class":133},[123,168965,168966],{"class":238},"\"students.txt\"",[123,168968,12445],{"class":133},[123,168970,151973],{"class":238},[123,168972,12445],{"class":133},[123,168974,146803],{"class":5226},[123,168976,179],{"class":129},[123,168978,146808],{"class":238},[123,168980,13724],{"class":133},[123,168982,31394],{"class":129},[123,168984,148150],{"class":5226},[123,168986,3748],{"class":133},[123,168988,168989,168991],{"class":125,"line":1204},[123,168990,168881],{"class":5226},[123,168992,168993],{"class":133},".writelines(lines)\n",[65,168995,168997],{"id":168996},"_87-追加文件","8.7 追加文件",[14,168999,169000,169002],{},[120,169001,372],{}," 模式不会清空原内容，而是在末尾追加。",[114,169004,169006],{"className":30389,"code":169005,"language":30391,"meta":37,"style":37},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[120,169007,169008,169039],{"__ignoreMap":37},[123,169009,169010,169012,169014,169016,169019,169021,169023,169025,169027,169029,169031,169033,169035,169037],{"class":125,"line":126},[123,169011,107830],{"class":129},[123,169013,146788],{"class":182},[123,169015,134],{"class":133},[123,169017,169018],{"class":238},"\"log.txt\"",[123,169020,12445],{"class":133},[123,169022,165322],{"class":238},[123,169024,12445],{"class":133},[123,169026,146803],{"class":5226},[123,169028,179],{"class":129},[123,169030,146808],{"class":238},[123,169032,13724],{"class":133},[123,169034,31394],{"class":129},[123,169036,148150],{"class":5226},[123,169038,3748],{"class":133},[123,169040,169041,169043,169045,169048,169050,169052],{"class":125,"line":45},[123,169042,168881],{"class":5226},[123,169044,168884],{"class":133},[123,169046,169047],{"class":238},"\"程序启动",[123,169049,156522],{"class":182},[123,169051,385],{"class":238},[123,169053,140],{"class":133},[14,169055,169056],{},"日志类文件常用追加模式。",[65,169058,169060],{"id":169059},"_88-文件编码","8.8 文件编码",[14,169062,169063],{},"编码决定文字如何保存为字节。",[14,169065,169066],{},"常见编码：",[77,169068,169069,169072],{},[80,169070,169071],{},"UTF-8：推荐。",[80,169073,169074],{},"GBK：部分 Windows 中文文件常见。",[14,169076,169077],{},"读取文件乱码时，可以尝试：",[114,169079,169081],{"className":30389,"code":169080,"language":30391,"meta":37,"style":37},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[120,169082,169083,169114],{"__ignoreMap":37},[123,169084,169085,169087,169089,169091,169093,169095,169097,169099,169101,169103,169106,169108,169110,169112],{"class":125,"line":126},[123,169086,107830],{"class":129},[123,169088,146788],{"class":182},[123,169090,134],{"class":133},[123,169092,146793],{"class":238},[123,169094,12445],{"class":133},[123,169096,146798],{"class":238},[123,169098,12445],{"class":133},[123,169100,146803],{"class":5226},[123,169102,179],{"class":129},[123,169104,169105],{"class":238},"\"gbk\"",[123,169107,13724],{"class":133},[123,169109,31394],{"class":129},[123,169111,148150],{"class":5226},[123,169113,3748],{"class":133},[123,169115,169116,169118,169120,169122],{"class":125,"line":45},[123,169117,146820],{"class":133},[123,169119,179],{"class":129},[123,169121,148150],{"class":5226},[123,169123,168498],{"class":133},[14,169125,169126],{},"写文件时建议统一 UTF-8：",[114,169128,169130],{"className":30389,"code":169129,"language":30391,"meta":37,"style":37},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[120,169131,169132,169162],{"__ignoreMap":37},[123,169133,169134,169136,169138,169140,169142,169144,169146,169148,169150,169152,169154,169156,169158,169160],{"class":125,"line":126},[123,169135,107830],{"class":129},[123,169137,146788],{"class":182},[123,169139,134],{"class":133},[123,169141,146793],{"class":238},[123,169143,12445],{"class":133},[123,169145,151973],{"class":238},[123,169147,12445],{"class":133},[123,169149,146803],{"class":5226},[123,169151,179],{"class":129},[123,169153,146808],{"class":238},[123,169155,13724],{"class":133},[123,169157,31394],{"class":129},[123,169159,148150],{"class":5226},[123,169161,3748],{"class":133},[123,169163,169164,169166,169168,169171],{"class":125,"line":45},[123,169165,168881],{"class":5226},[123,169167,168884],{"class":133},[123,169169,169170],{"class":238},"\"中文内容\"",[123,169172,140],{"class":133},[65,169174,169176],{"id":169175},"_89-pathlib","8.9 pathlib",[14,169178,169179,169182],{},[120,169180,169181],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[114,169184,169186],{"className":30389,"code":169185,"language":30391,"meta":37,"style":37},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[120,169187,169188,169198,169202,169220],{"__ignoreMap":37},[123,169189,169190,169192,169194,169196],{"class":125,"line":126},[123,169191,30748],{"class":129},[123,169193,108308],{"class":133},[123,169195,30403],{"class":129},[123,169197,108313],{"class":133},[123,169199,169200],{"class":125,"line":45},[123,169201,2409],{"emptyLinePlaceholder":50},[123,169203,169204,169206,169208,169210,169213,169215,169217],{"class":125,"line":1189},[123,169205,168308],{"class":133},[123,169207,179],{"class":129},[123,169209,108542],{"class":133},[123,169211,169212],{"class":238},"\"data\"",[123,169214,13724],{"class":133},[123,169216,718],{"class":129},[123,169218,169219],{"class":238}," \"students.txt\"\n",[123,169221,169222,169224],{"class":125,"line":1204},[123,169223,30426],{"class":182},[123,169225,169226],{"class":133},"(path)\n",[14,169228,169229],{},"创建目录：",[114,169231,169233],{"className":30389,"code":169232,"language":30391,"meta":37,"style":37},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[120,169234,169235,169245,169249,169262],{"__ignoreMap":37},[123,169236,169237,169239,169241,169243],{"class":125,"line":126},[123,169238,30748],{"class":129},[123,169240,108308],{"class":133},[123,169242,30403],{"class":129},[123,169244,108313],{"class":133},[123,169246,169247],{"class":125,"line":45},[123,169248,2409],{"emptyLinePlaceholder":50},[123,169250,169251,169254,169256,169258,169260],{"class":125,"line":1189},[123,169252,169253],{"class":133},"data_dir ",[123,169255,179],{"class":129},[123,169257,108542],{"class":133},[123,169259,169212],{"class":238},[123,169261,140],{"class":133},[123,169263,169264,169267,169270,169272,169274],{"class":125,"line":1204},[123,169265,169266],{"class":133},"data_dir.mkdir(",[123,169268,169269],{"class":5226},"exist_ok",[123,169271,179],{"class":129},[123,169273,31487],{"class":182},[123,169275,140],{"class":133},[14,169277,169278],{},"判断文件是否存在：",[114,169280,169282],{"className":30389,"code":169281,"language":30391,"meta":37,"style":37},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[120,169283,169284,169297,169301,169308],{"__ignoreMap":37},[123,169285,169286,169288,169290,169292,169295],{"class":125,"line":126},[123,169287,168308],{"class":133},[123,169289,179],{"class":129},[123,169291,108542],{"class":133},[123,169293,169294],{"class":238},"\"data\u002Fstudents.txt\"",[123,169296,140],{"class":133},[123,169298,169299],{"class":125,"line":45},[123,169300,2409],{"emptyLinePlaceholder":50},[123,169302,169303,169305],{"class":125,"line":1189},[123,169304,1540],{"class":129},[123,169306,169307],{"class":133}," path.exists():\n",[123,169309,169310,169312,169314,169317],{"class":125,"line":1204},[123,169311,31310],{"class":182},[123,169313,134],{"class":133},[123,169315,169316],{"class":238},"\"文件存在\"",[123,169318,140],{"class":133},[14,169320,169321],{},"读写文本：",[114,169323,169325],{"className":30389,"code":169324,"language":30391,"meta":37,"style":37},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[120,169326,169327,169339,169343,169360,169377],{"__ignoreMap":37},[123,169328,169329,169331,169333,169335,169337],{"class":125,"line":126},[123,169330,168308],{"class":133},[123,169332,179],{"class":129},[123,169334,108542],{"class":133},[123,169336,146793],{"class":238},[123,169338,140],{"class":133},[123,169340,169341],{"class":125,"line":45},[123,169342,2409],{"emptyLinePlaceholder":50},[123,169344,169345,169348,169350,169352,169354,169356,169358],{"class":125,"line":1189},[123,169346,169347],{"class":133},"path.write_text(",[123,169349,145873],{"class":238},[123,169351,12445],{"class":133},[123,169353,146803],{"class":5226},[123,169355,179],{"class":129},[123,169357,146808],{"class":238},[123,169359,140],{"class":133},[123,169361,169362,169364,169366,169369,169371,169373,169375],{"class":125,"line":1204},[123,169363,168491],{"class":133},[123,169365,179],{"class":129},[123,169367,169368],{"class":133}," path.read_text(",[123,169370,146803],{"class":5226},[123,169372,179],{"class":129},[123,169374,146808],{"class":238},[123,169376,140],{"class":133},[123,169378,169379,169381],{"class":125,"line":1210},[123,169380,30426],{"class":182},[123,169382,168505],{"class":133},[65,169384,169386],{"id":169385},"_810-json文件","8.10 JSON文件",[14,169388,169389],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[114,169391,169393],{"className":30389,"code":169392,"language":30391,"meta":37,"style":37},"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",[120,169394,169395,169401,169405,169413,169423,169433,169441,169445,169449,169474],{"__ignoreMap":37},[123,169396,169397,169399],{"class":125,"line":126},[123,169398,30403],{"class":129},[123,169400,147088],{"class":133},[123,169402,169403],{"class":125,"line":45},[123,169404,2409],{"emptyLinePlaceholder":50},[123,169406,169407,169409,169411],{"class":125,"line":1189},[123,169408,149478],{"class":133},[123,169410,179],{"class":129},[123,169412,15582],{"class":133},[123,169414,169415,169417,169419,169421],{"class":125,"line":1204},[123,169416,147017],{"class":238},[123,169418,51448],{"class":133},[123,169420,149885],{"class":238},[123,169422,31477],{"class":133},[123,169424,169425,169427,169429,169431],{"class":125,"line":1210},[123,169426,164534],{"class":238},[123,169428,51448],{"class":133},[123,169430,784],{"class":182},[123,169432,31477],{"class":133},[123,169434,169435,169437,169439],{"class":125,"line":1224},[123,169436,164545],{"class":238},[123,169438,51448],{"class":133},[123,169440,164550],{"class":182},[123,169442,169443],{"class":125,"line":1230},[123,169444,1574],{"class":133},[123,169446,169447],{"class":125,"line":1321},[123,169448,2409],{"emptyLinePlaceholder":50},[123,169450,169451,169453,169455,169458,169460,169462,169464,169466,169468,169470,169472],{"class":125,"line":1327},[123,169452,156441],{"class":133},[123,169454,179],{"class":129},[123,169456,169457],{"class":133}," json.dumps(student, ",[123,169459,147134],{"class":5226},[123,169461,179],{"class":129},[123,169463,33998],{"class":182},[123,169465,12445],{"class":133},[123,169467,152009],{"class":5226},[123,169469,179],{"class":129},[123,169471,211],{"class":182},[123,169473,140],{"class":133},[123,169475,169476,169478],{"class":125,"line":1339},[123,169477,30426],{"class":182},[123,169479,164068],{"class":133},[14,169481,169482],{},"写入 JSON 文件：",[114,169484,169486],{"className":30389,"code":169485,"language":30391,"meta":37,"style":37},"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",[120,169487,169488,169494,169498,169506,169534,169562,169566,169570,169600],{"__ignoreMap":37},[123,169489,169490,169492],{"class":125,"line":126},[123,169491,30403],{"class":129},[123,169493,147088],{"class":133},[123,169495,169496],{"class":125,"line":45},[123,169497,2409],{"emptyLinePlaceholder":50},[123,169499,169500,169502,169504],{"class":125,"line":1189},[123,169501,159713],{"class":133},[123,169503,179],{"class":129},[123,169505,55458],{"class":133},[123,169507,169508,169510,169512,169514,169516,169518,169520,169522,169524,169526,169528,169530,169532],{"class":125,"line":1204},[123,169509,148382],{"class":133},[123,169511,62690],{"class":238},[123,169513,51448],{"class":133},[123,169515,149885],{"class":238},[123,169517,12445],{"class":133},[123,169519,69135],{"class":238},[123,169521,51448],{"class":133},[123,169523,784],{"class":182},[123,169525,12445],{"class":133},[123,169527,151469],{"class":238},[123,169529,51448],{"class":133},[123,169531,1123],{"class":182},[123,169533,4939],{"class":133},[123,169535,169536,169538,169540,169542,169544,169546,169548,169550,169552,169554,169556,169558,169560],{"class":125,"line":1210},[123,169537,148382],{"class":133},[123,169539,62690],{"class":238},[123,169541,51448],{"class":133},[123,169543,150933],{"class":238},[123,169545,12445],{"class":133},[123,169547,69135],{"class":238},[123,169549,51448],{"class":133},[123,169551,759],{"class":182},[123,169553,12445],{"class":133},[123,169555,151469],{"class":238},[123,169557,51448],{"class":133},[123,169559,945],{"class":182},[123,169561,4939],{"class":133},[123,169563,169564],{"class":125,"line":1224},[123,169565,33257],{"class":133},[123,169567,169568],{"class":125,"line":1230},[123,169569,2409],{"emptyLinePlaceholder":50},[123,169571,169572,169574,169576,169578,169580,169582,169584,169586,169588,169590,169592,169594,169596,169598],{"class":125,"line":1321},[123,169573,107830],{"class":129},[123,169575,146788],{"class":182},[123,169577,134],{"class":133},[123,169579,151828],{"class":238},[123,169581,12445],{"class":133},[123,169583,151973],{"class":238},[123,169585,12445],{"class":133},[123,169587,146803],{"class":5226},[123,169589,179],{"class":129},[123,169591,146808],{"class":238},[123,169593,13724],{"class":133},[123,169595,31394],{"class":129},[123,169597,148150],{"class":5226},[123,169599,3748],{"class":133},[123,169601,169602,169605,169607,169609,169611,169613,169615,169617,169619,169621,169623],{"class":125,"line":1327},[123,169603,169604],{"class":133},"    json.dump(students, ",[123,169606,45365],{"class":5226},[123,169608,12445],{"class":133},[123,169610,147134],{"class":5226},[123,169612,179],{"class":129},[123,169614,33998],{"class":182},[123,169616,12445],{"class":133},[123,169618,152009],{"class":5226},[123,169620,179],{"class":129},[123,169622,211],{"class":182},[123,169624,140],{"class":133},[14,169626,169627],{},"读取 JSON 文件：",[114,169629,169631],{"className":30389,"code":169630,"language":30391,"meta":37,"style":37},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[120,169632,169633,169639,169643,169673,169685,169689],{"__ignoreMap":37},[123,169634,169635,169637],{"class":125,"line":126},[123,169636,30403],{"class":129},[123,169638,147088],{"class":133},[123,169640,169641],{"class":125,"line":45},[123,169642,2409],{"emptyLinePlaceholder":50},[123,169644,169645,169647,169649,169651,169653,169655,169657,169659,169661,169663,169665,169667,169669,169671],{"class":125,"line":1189},[123,169646,107830],{"class":129},[123,169648,146788],{"class":182},[123,169650,134],{"class":133},[123,169652,151828],{"class":238},[123,169654,12445],{"class":133},[123,169656,146798],{"class":238},[123,169658,12445],{"class":133},[123,169660,146803],{"class":5226},[123,169662,179],{"class":129},[123,169664,146808],{"class":238},[123,169666,13724],{"class":133},[123,169668,31394],{"class":129},[123,169670,148150],{"class":5226},[123,169672,3748],{"class":133},[123,169674,169675,169677,169679,169681,169683],{"class":125,"line":1204},[123,169676,153034],{"class":133},[123,169678,179],{"class":129},[123,169680,148161],{"class":133},[123,169682,45365],{"class":5226},[123,169684,140],{"class":133},[123,169686,169687],{"class":125,"line":1210},[123,169688,2409],{"emptyLinePlaceholder":50},[123,169690,169691,169693],{"class":125,"line":1224},[123,169692,30426],{"class":182},[123,169694,164992],{"class":133},[65,169696,169698],{"id":169697},"_811-csv文件","8.11 CSV文件",[14,169700,169701],{},"CSV 是逗号分隔值，常用于表格数据。",[14,169703,169704],{},"写入 CSV：",[114,169706,169708],{"className":30389,"code":169707,"language":30391,"meta":37,"style":37},"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",[120,169709,169710,169717,169721,169729,169747,169763,169779,169783,169787,169827,169841],{"__ignoreMap":37},[123,169711,169712,169714],{"class":125,"line":126},[123,169713,30403],{"class":129},[123,169715,169716],{"class":133}," csv\n",[123,169718,169719],{"class":125,"line":45},[123,169720,2409],{"emptyLinePlaceholder":50},[123,169722,169723,169725,169727],{"class":125,"line":1189},[123,169724,159713],{"class":133},[123,169726,179],{"class":129},[123,169728,55458],{"class":133},[123,169730,169731,169734,169736,169738,169740,169742,169745],{"class":125,"line":1204},[123,169732,169733],{"class":133},"    [",[123,169735,73110],{"class":238},[123,169737,12445],{"class":133},[123,169739,73143],{"class":238},[123,169741,12445],{"class":133},[123,169743,169744],{"class":238},"\"成绩\"",[123,169746,87847],{"class":133},[123,169748,169749,169751,169753,169755,169757,169759,169761],{"class":125,"line":1210},[123,169750,169733],{"class":133},[123,169752,149885],{"class":238},[123,169754,12445],{"class":133},[123,169756,784],{"class":182},[123,169758,12445],{"class":133},[123,169760,1123],{"class":182},[123,169762,87847],{"class":133},[123,169764,169765,169767,169769,169771,169773,169775,169777],{"class":125,"line":1224},[123,169766,169733],{"class":133},[123,169768,150933],{"class":238},[123,169770,12445],{"class":133},[123,169772,759],{"class":182},[123,169774,12445],{"class":133},[123,169776,945],{"class":182},[123,169778,87847],{"class":133},[123,169780,169781],{"class":125,"line":1230},[123,169782,33257],{"class":133},[123,169784,169785],{"class":125,"line":1321},[123,169786,2409],{"emptyLinePlaceholder":50},[123,169788,169789,169791,169793,169795,169798,169800,169802,169804,169806,169808,169810,169812,169815,169817,169819,169821,169823,169825],{"class":125,"line":1327},[123,169790,107830],{"class":129},[123,169792,146788],{"class":182},[123,169794,134],{"class":133},[123,169796,169797],{"class":238},"\"students.csv\"",[123,169799,12445],{"class":133},[123,169801,151973],{"class":238},[123,169803,12445],{"class":133},[123,169805,146803],{"class":5226},[123,169807,179],{"class":129},[123,169809,146808],{"class":238},[123,169811,12445],{"class":133},[123,169813,169814],{"class":5226},"newline",[123,169816,179],{"class":129},[123,169818,7662],{"class":238},[123,169820,13724],{"class":133},[123,169822,31394],{"class":129},[123,169824,148150],{"class":5226},[123,169826,3748],{"class":133},[123,169828,169829,169832,169834,169837,169839],{"class":125,"line":1339},[123,169830,169831],{"class":133},"    writer ",[123,169833,179],{"class":129},[123,169835,169836],{"class":133}," csv.writer(",[123,169838,45365],{"class":5226},[123,169840,140],{"class":133},[123,169842,169843],{"class":125,"line":1621},[123,169844,169845],{"class":133},"    writer.writerows(students)\n",[14,169847,169848],{},"读取 CSV：",[114,169850,169852],{"className":30389,"code":169851,"language":30391,"meta":37,"style":37},"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",[120,169853,169854,169860,169864,169894,169908,169920],{"__ignoreMap":37},[123,169855,169856,169858],{"class":125,"line":126},[123,169857,30403],{"class":129},[123,169859,169716],{"class":133},[123,169861,169862],{"class":125,"line":45},[123,169863,2409],{"emptyLinePlaceholder":50},[123,169865,169866,169868,169870,169872,169874,169876,169878,169880,169882,169884,169886,169888,169890,169892],{"class":125,"line":1189},[123,169867,107830],{"class":129},[123,169869,146788],{"class":182},[123,169871,134],{"class":133},[123,169873,169797],{"class":238},[123,169875,12445],{"class":133},[123,169877,146798],{"class":238},[123,169879,12445],{"class":133},[123,169881,146803],{"class":5226},[123,169883,179],{"class":129},[123,169885,146808],{"class":238},[123,169887,13724],{"class":133},[123,169889,31394],{"class":129},[123,169891,148150],{"class":5226},[123,169893,3748],{"class":133},[123,169895,169896,169899,169901,169904,169906],{"class":125,"line":1204},[123,169897,169898],{"class":133},"    reader ",[123,169900,179],{"class":129},[123,169902,169903],{"class":133}," csv.reader(",[123,169905,45365],{"class":5226},[123,169907,140],{"class":133},[123,169909,169910,169912,169915,169917],{"class":125,"line":1210},[123,169911,3210],{"class":129},[123,169913,169914],{"class":133}," row ",[123,169916,26054],{"class":129},[123,169918,169919],{"class":133}," reader:\n",[123,169921,169922,169924],{"class":125,"line":1224},[123,169923,32462],{"class":182},[123,169925,169926],{"class":133},"(row)\n",[14,169928,169929],{},"使用字典写入：",[114,169931,169933],{"className":30389,"code":169932,"language":30391,"meta":37,"style":37},"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",[120,169934,169935,169941,169945,169953,169981,170009,170013,170017,170055,170076,170097,170102],{"__ignoreMap":37},[123,169936,169937,169939],{"class":125,"line":126},[123,169938,30403],{"class":129},[123,169940,169716],{"class":133},[123,169942,169943],{"class":125,"line":45},[123,169944,2409],{"emptyLinePlaceholder":50},[123,169946,169947,169949,169951],{"class":125,"line":1189},[123,169948,159713],{"class":133},[123,169950,179],{"class":129},[123,169952,55458],{"class":133},[123,169954,169955,169957,169959,169961,169963,169965,169967,169969,169971,169973,169975,169977,169979],{"class":125,"line":1204},[123,169956,148382],{"class":133},[123,169958,62690],{"class":238},[123,169960,51448],{"class":133},[123,169962,149885],{"class":238},[123,169964,12445],{"class":133},[123,169966,69135],{"class":238},[123,169968,51448],{"class":133},[123,169970,784],{"class":182},[123,169972,12445],{"class":133},[123,169974,151469],{"class":238},[123,169976,51448],{"class":133},[123,169978,1123],{"class":182},[123,169980,4939],{"class":133},[123,169982,169983,169985,169987,169989,169991,169993,169995,169997,169999,170001,170003,170005,170007],{"class":125,"line":1210},[123,169984,148382],{"class":133},[123,169986,62690],{"class":238},[123,169988,51448],{"class":133},[123,169990,150933],{"class":238},[123,169992,12445],{"class":133},[123,169994,69135],{"class":238},[123,169996,51448],{"class":133},[123,169998,759],{"class":182},[123,170000,12445],{"class":133},[123,170002,151469],{"class":238},[123,170004,51448],{"class":133},[123,170006,945],{"class":182},[123,170008,4939],{"class":133},[123,170010,170011],{"class":125,"line":1224},[123,170012,33257],{"class":133},[123,170014,170015],{"class":125,"line":1230},[123,170016,2409],{"emptyLinePlaceholder":50},[123,170018,170019,170021,170023,170025,170027,170029,170031,170033,170035,170037,170039,170041,170043,170045,170047,170049,170051,170053],{"class":125,"line":1321},[123,170020,107830],{"class":129},[123,170022,146788],{"class":182},[123,170024,134],{"class":133},[123,170026,169797],{"class":238},[123,170028,12445],{"class":133},[123,170030,151973],{"class":238},[123,170032,12445],{"class":133},[123,170034,146803],{"class":5226},[123,170036,179],{"class":129},[123,170038,146808],{"class":238},[123,170040,12445],{"class":133},[123,170042,169814],{"class":5226},[123,170044,179],{"class":129},[123,170046,7662],{"class":238},[123,170048,13724],{"class":133},[123,170050,31394],{"class":129},[123,170052,148150],{"class":5226},[123,170054,3748],{"class":133},[123,170056,170057,170060,170062,170064,170066,170068,170070,170072,170074],{"class":125,"line":1327},[123,170058,170059],{"class":133},"    fieldnames ",[123,170061,179],{"class":129},[123,170063,52237],{"class":133},[123,170065,62690],{"class":238},[123,170067,12445],{"class":133},[123,170069,69135],{"class":238},[123,170071,12445],{"class":133},[123,170073,151469],{"class":238},[123,170075,33257],{"class":133},[123,170077,170078,170080,170082,170085,170087,170089,170092,170094],{"class":125,"line":1339},[123,170079,169831],{"class":133},[123,170081,179],{"class":129},[123,170083,170084],{"class":133}," csv.DictWriter(",[123,170086,45365],{"class":5226},[123,170088,12445],{"class":133},[123,170090,170091],{"class":5226},"fieldnames",[123,170093,179],{"class":129},[123,170095,170096],{"class":133},"fieldnames)\n",[123,170098,170099],{"class":125,"line":1621},[123,170100,170101],{"class":133},"    writer.writeheader()\n",[123,170103,170104],{"class":125,"line":1626},[123,170105,169845],{"class":133},[65,170107,170109],{"id":170108},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170111,123289],{},[77,170113,170114,170117,170120],{},[80,170115,170116],{},"读取文本文件。",[80,170118,170119],{},"统计每个单词出现次数。",[80,170121,170122],{},"输出出现次数最多的前 10 个单词。",[14,170124,10045],{},[114,170126,170128],{"className":30389,"code":170127,"language":30391,"meta":37,"style":37},"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",[120,170129,170130,170140,170144,170157,170173,170177,170187,170196,170200,170212,170232,170241,170245,170263,170267,170297,170301,170317],{"__ignoreMap":37},[123,170131,170132,170134,170136,170138],{"class":125,"line":126},[123,170133,30748],{"class":129},[123,170135,108308],{"class":133},[123,170137,30403],{"class":129},[123,170139,108313],{"class":133},[123,170141,170142],{"class":125,"line":45},[123,170143,2409],{"emptyLinePlaceholder":50},[123,170145,170146,170148,170150,170152,170155],{"class":125,"line":1189},[123,170147,168308],{"class":133},[123,170149,179],{"class":129},[123,170151,108542],{"class":133},[123,170153,170154],{"class":238},"\"article.txt\"",[123,170156,140],{"class":133},[123,170158,170159,170161,170163,170165,170167,170169,170171],{"class":125,"line":1204},[123,170160,168491],{"class":133},[123,170162,179],{"class":129},[123,170164,169368],{"class":133},[123,170166,146803],{"class":5226},[123,170168,179],{"class":129},[123,170170,146808],{"class":238},[123,170172,140],{"class":133},[123,170174,170175],{"class":125,"line":1210},[123,170176,2409],{"emptyLinePlaceholder":50},[123,170178,170179,170182,170184],{"class":125,"line":1224},[123,170180,170181],{"class":133},"words ",[123,170183,179],{"class":129},[123,170185,170186],{"class":133}," content.lower().split()\n",[123,170188,170189,170192,170194],{"class":125,"line":1230},[123,170190,170191],{"class":133},"counter ",[123,170193,179],{"class":129},[123,170195,87879],{"class":133},[123,170197,170198],{"class":125,"line":1321},[123,170199,2409],{"emptyLinePlaceholder":50},[123,170201,170202,170204,170207,170209],{"class":125,"line":1327},[123,170203,3034],{"class":129},[123,170205,170206],{"class":133}," word ",[123,170208,26054],{"class":129},[123,170210,170211],{"class":133}," words:\n",[123,170213,170214,170217,170219,170222,170225,170227,170230],{"class":125,"line":1339},[123,170215,170216],{"class":133},"    word ",[123,170218,179],{"class":129},[123,170220,170221],{"class":133}," word.strip(",[123,170223,170224],{"class":238},"\".,!?;:",[123,170226,156492],{"class":182},[123,170228,170229],{"class":238},"'()[]\"",[123,170231,140],{"class":133},[123,170233,170234,170236,170238],{"class":125,"line":1621},[123,170235,3110],{"class":129},[123,170237,38941],{"class":129},[123,170239,170240],{"class":133}," word:\n",[123,170242,170243],{"class":125,"line":1626},[123,170244,148509],{"class":129},[123,170246,170247,170250,170252,170255,170257,170259,170261],{"class":125,"line":1632},[123,170248,170249],{"class":133},"    counter[word] ",[123,170251,179],{"class":129},[123,170253,170254],{"class":133}," counter.get(word, ",[123,170256,325],{"class":182},[123,170258,13724],{"class":133},[123,170260,615],{"class":129},[123,170262,55710],{"class":182},[123,170264,170265],{"class":125,"line":1637},[123,170266,2409],{"emptyLinePlaceholder":50},[123,170268,170269,170272,170274,170276,170279,170281,170283,170285,170287,170289,170291,170293,170295],{"class":125,"line":1651},[123,170270,170271],{"class":133},"items ",[123,170273,179],{"class":129},[123,170275,163601],{"class":182},[123,170277,170278],{"class":133},"(counter.items(), ",[123,170280,153943],{"class":5226},[123,170282,153946],{"class":129},[123,170284,153949],{"class":133},[123,170286,351],{"class":182},[123,170288,112199],{"class":133},[123,170290,163525],{"class":5226},[123,170292,179],{"class":129},[123,170294,31487],{"class":182},[123,170296,140],{"class":133},[123,170298,170299],{"class":125,"line":1656},[123,170300,2409],{"emptyLinePlaceholder":50},[123,170302,170303,170305,170308,170310,170313,170315],{"class":125,"line":1662},[123,170304,3034],{"class":129},[123,170306,170307],{"class":133}," word, count ",[123,170309,26054],{"class":129},[123,170311,170312],{"class":133}," items[:",[123,170314,580],{"class":182},[123,170316,165752],{"class":133},[123,170318,170319,170321],{"class":125,"line":1683},[123,170320,31310],{"class":182},[123,170322,170323],{"class":133},"(word, count)\n",[65,170325,170327],{"id":170326},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[114,170329,170331],{"className":30389,"code":170330,"language":30391,"meta":37,"style":37},"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",[120,170332,170333,170339,170349,170353,170365,170369,170373,170381,170391,170397,170401,170431,170441,170445,170449,170457,170487,170511,170515,170519,170527,170556,170561],{"__ignoreMap":37},[123,170334,170335,170337],{"class":125,"line":126},[123,170336,30403],{"class":129},[123,170338,147088],{"class":133},[123,170340,170341,170343,170345,170347],{"class":125,"line":45},[123,170342,30748],{"class":129},[123,170344,108308],{"class":133},[123,170346,30403],{"class":129},[123,170348,108313],{"class":133},[123,170350,170351],{"class":125,"line":1189},[123,170352,2409],{"emptyLinePlaceholder":50},[123,170354,170355,170357,170359,170361,170363],{"class":125,"line":1204},[123,170356,151821],{"class":182},[123,170358,13574],{"class":129},[123,170360,108542],{"class":133},[123,170362,151828],{"class":238},[123,170364,140],{"class":133},[123,170366,170367],{"class":125,"line":1210},[123,170368,2409],{"emptyLinePlaceholder":50},[123,170370,170371],{"class":125,"line":1224},[123,170372,2409],{"emptyLinePlaceholder":50},[123,170374,170375,170377,170379],{"class":125,"line":1230},[123,170376,31958],{"class":129},[123,170378,151845],{"class":1972},[123,170380,31964],{"class":133},[123,170382,170383,170385,170387,170389],{"class":125,"line":1321},[123,170384,3110],{"class":129},[123,170386,38941],{"class":129},[123,170388,151856],{"class":182},[123,170390,151859],{"class":133},[123,170392,170393,170395],{"class":125,"line":1327},[123,170394,14762],{"class":129},[123,170396,51849],{"class":133},[123,170398,170399],{"class":125,"line":1339},[123,170400,2409],{"emptyLinePlaceholder":50},[123,170402,170403,170405,170407,170409,170411,170413,170415,170417,170419,170421,170423,170425,170427,170429],{"class":125,"line":1621},[123,170404,34189],{"class":129},[123,170406,146788],{"class":182},[123,170408,134],{"class":133},[123,170410,151821],{"class":182},[123,170412,12445],{"class":133},[123,170414,146798],{"class":238},[123,170416,12445],{"class":133},[123,170418,146803],{"class":5226},[123,170420,179],{"class":129},[123,170422,146808],{"class":238},[123,170424,13724],{"class":133},[123,170426,31394],{"class":129},[123,170428,148150],{"class":5226},[123,170430,3748],{"class":133},[123,170432,170433,170435,170437,170439],{"class":125,"line":1626},[123,170434,14762],{"class":129},[123,170436,148161],{"class":133},[123,170438,45365],{"class":5226},[123,170440,140],{"class":133},[123,170442,170443],{"class":125,"line":1632},[123,170444,2409],{"emptyLinePlaceholder":50},[123,170446,170447],{"class":125,"line":1637},[123,170448,2409],{"emptyLinePlaceholder":50},[123,170450,170451,170453,170455],{"class":125,"line":1651},[123,170452,31958],{"class":129},[123,170454,151955],{"class":1972},[123,170456,151958],{"class":133},[123,170458,170459,170461,170463,170465,170467,170469,170471,170473,170475,170477,170479,170481,170483,170485],{"class":125,"line":1656},[123,170460,34189],{"class":129},[123,170462,146788],{"class":182},[123,170464,134],{"class":133},[123,170466,151821],{"class":182},[123,170468,12445],{"class":133},[123,170470,151973],{"class":238},[123,170472,12445],{"class":133},[123,170474,146803],{"class":5226},[123,170476,179],{"class":129},[123,170478,146808],{"class":238},[123,170480,13724],{"class":133},[123,170482,31394],{"class":129},[123,170484,148150],{"class":5226},[123,170486,3748],{"class":133},[123,170488,170489,170491,170493,170495,170497,170499,170501,170503,170505,170507,170509],{"class":125,"line":1662},[123,170490,151994],{"class":133},[123,170492,45365],{"class":5226},[123,170494,12445],{"class":133},[123,170496,147134],{"class":5226},[123,170498,179],{"class":129},[123,170500,33998],{"class":182},[123,170502,12445],{"class":133},[123,170504,152009],{"class":5226},[123,170506,179],{"class":129},[123,170508,211],{"class":182},[123,170510,140],{"class":133},[123,170512,170513],{"class":125,"line":1683},[123,170514,2409],{"emptyLinePlaceholder":50},[123,170516,170517],{"class":125,"line":1688},[123,170518,2409],{"emptyLinePlaceholder":50},[123,170520,170521,170523,170525],{"class":125,"line":1702},[123,170522,159713],{"class":133},[123,170524,179],{"class":129},[123,170526,153039],{"class":133},[123,170528,170529,170532,170534,170536,170538,170540,170542,170544,170546,170548,170550,170552,170554],{"class":125,"line":1707},[123,170530,170531],{"class":133},"students.append({",[123,170533,62690],{"class":238},[123,170535,51448],{"class":133},[123,170537,149885],{"class":238},[123,170539,12445],{"class":133},[123,170541,69135],{"class":238},[123,170543,51448],{"class":133},[123,170545,784],{"class":182},[123,170547,12445],{"class":133},[123,170549,151469],{"class":238},[123,170551,51448],{"class":133},[123,170553,1123],{"class":182},[123,170555,165149],{"class":133},[123,170557,170558],{"class":125,"line":1736},[123,170559,170560],{"class":133},"save_students(students)\n",[123,170562,170563,170565,170567,170570],{"class":125,"line":1741},[123,170564,30426],{"class":182},[123,170566,134],{"class":133},[123,170568,170569],{"class":238},"\"保存成功\"",[123,170571,140],{"class":133},[65,170573,170575],{"id":170574},"_814-易错点","8.14 易错点",[77,170577,170578,170582,170588,170593,170600,170607],{},[80,170579,170580,168841],{},[120,170581,929],{},[80,170583,170584,170585,28396],{},"读写中文要指定 ",[120,170586,170587],{},"encoding=\"utf-8\"",[80,170589,170590,170591,28396],{},"打开文件后要关闭，推荐使用 ",[120,170592,107830],{},[80,170594,170595,170596,170599],{},"读取大文件不要直接 ",[120,170597,170598],{},"read()"," 全部内容。",[80,170601,170602,170603,170606],{},"Windows 写 CSV 时建议加 ",[120,170604,170605],{},"newline=\"\"","，避免空行。",[80,170608,170609],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[65,170611,170613],{"id":170612},"_815-本章练习","8.15 本章练习",[77,170615,170616,170623,170628,170631,170634],{},[80,170617,170618,170619,170622],{},"写入一个 ",[120,170620,170621],{},"students.txt","，每行保存一个学生姓名。",[80,170624,104352,170625,170627],{},[120,170626,170621],{}," 并输出所有学生。",[80,170629,170630],{},"把学生列表保存为 JSON 文件。",[80,170632,170633],{},"从 JSON 文件读取学生数据，计算平均分。",[80,170635,170636,170637,170640,170641,170644],{},"写一个日志函数 ",[120,170638,170639],{},"write_log(message)","，每次调用向 ",[120,170642,170643],{},"app.log"," 追加一行。",[5136,170646,170647],{},"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":37,"searchDepth":45,"depth":45,"links":170649},[170650,170651,170655,170656,170662,170663,170664,170665,170666,170667,170668,170669,170670,170671,170672],{"id":168161,"depth":45,"text":168162},{"id":168202,"depth":45,"text":168203,"children":170652},[170653,170654],{"id":168206,"depth":1189,"text":168207},{"id":168240,"depth":1189,"text":168241},{"id":168354,"depth":45,"text":168355},{"id":168447,"depth":45,"text":168448,"children":170657},[170658,170659,170660,170661],{"id":168451,"depth":1189,"text":168452},{"id":168538,"depth":1189,"text":168539},{"id":168608,"depth":1189,"text":168609},{"id":168702,"depth":1189,"text":168703},{"id":168772,"depth":45,"text":168773},{"id":168835,"depth":45,"text":168836},{"id":168996,"depth":45,"text":168997},{"id":169059,"depth":45,"text":169060},{"id":169175,"depth":45,"text":169176},{"id":169385,"depth":45,"text":169386},{"id":169697,"depth":45,"text":169698},{"id":170108,"depth":45,"text":170109},{"id":170326,"depth":45,"text":170327},{"id":170574,"depth":45,"text":170575},{"id":170612,"depth":45,"text":170613},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168153,"description":47},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170679,"title":170680,"body":170681,"description":47,"extension":48,"meta":172867,"navigation":50,"path":172868,"seo":172869,"stem":172870,"__hash__":172871},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170682,"toc":172834},[170683,170686,170690,170693,170696,170788,170790,170809,170814,170818,170821,170824,170853,170860,170863,170867,170870,170899,170901,170953,170959,171012,171016,171114,171117,171184,171188,171245,171247,171253,171257,171262,171268,171359,171364,171368,171371,171449,171452,171490,171494,171612,171615,171619,171622,171667,171670,171674,171679,171685,171735,171738,171769,171773,171777,171807,171811,171846,171850,171885,171925,171929,171945,171948,171952,171956,172035,172039,172080,172084,172139,172143,172177,172181,172211,172220,172227,172233,172290,172293,172301,172304,172308,172315,172318,172324,172327,172344,172349,172353,172359,172372,172375,172412,172415,172426,172429,172443,172446,172460,172464,172471,172504,172507,172509,172515,172518,172522,172524,172530,172535,172708,172712,172775,172779,172803,172807,172831],[10,170684,170680],{"id":170685},"_9-异常模块与包",[65,170687,170689],{"id":170688},"_91-什么是异常","9.1 什么是异常",[14,170691,170692],{},"异常是程序运行过程中出现的错误。",[14,170694,170695],{},"常见异常：",[271,170697,170698,170707],{},[274,170699,170700],{},[277,170701,170702,170705],{},[280,170703,170704],{},"异常",[280,170706,25880],{},[318,170708,170709,170719,170729,170738,170748,170758,170768,170778],{},[277,170710,170711,170716],{},[323,170712,170713],{},[120,170714,170715],{},"NameError",[323,170717,170718],{},"使用了未定义变量",[277,170720,170721,170726],{},[323,170722,170723],{},[120,170724,170725],{},"TypeError",[323,170727,170728],{},"类型不匹配",[277,170730,170731,170735],{},[323,170732,170733],{},[120,170734,154831],{},[323,170736,170737],{},"值不合法",[277,170739,170740,170745],{},[323,170741,170742],{},[120,170743,170744],{},"IndexError",[323,170746,170747],{},"列表索引越界",[277,170749,170750,170755],{},[323,170751,170752],{},[120,170753,170754],{},"KeyError",[323,170756,170757],{},"字典 key 不存在",[277,170759,170760,170765],{},[323,170761,170762],{},[120,170763,170764],{},"FileNotFoundError",[323,170766,170767],{},"文件不存在",[277,170769,170770,170775],{},[323,170771,170772],{},[120,170773,170774],{},"ZeroDivisionError",[323,170776,170777],{},"除数为 0",[277,170779,170780,170785],{},[323,170781,170782],{},[120,170783,170784],{},"ImportError",[323,170786,170787],{},"导入失败",[14,170789,15145],{},[114,170791,170793],{"className":30389,"code":170792,"language":30391,"meta":37,"style":37},"num = int(\"abc\")\n",[120,170794,170795],{"__ignoreMap":37},[123,170796,170797,170799,170801,170803,170805,170807],{"class":125,"line":126},[123,170798,155784],{"class":133},[123,170800,179],{"class":129},[123,170802,2391],{"class":182},[123,170804,134],{"class":133},[123,170806,155877],{"class":238},[123,170808,140],{"class":133},[14,170810,170811,170812,28396],{},"会触发 ",[120,170813,154831],{},[65,170815,170817],{"id":170816},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,170819,170820],{},"如果不处理异常，程序会直接终止。",[14,170822,170823],{},"例如用户输入年龄：",[114,170825,170827],{"className":30389,"code":170826,"language":30391,"meta":37,"style":37},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[120,170828,170829,170847],{"__ignoreMap":37},[123,170830,170831,170833,170835,170837,170839,170841,170843,170845],{"class":125,"line":126},[123,170832,146543],{"class":133},[123,170834,179],{"class":129},[123,170836,2391],{"class":182},[123,170838,134],{"class":133},[123,170840,53832],{"class":182},[123,170842,134],{"class":133},[123,170844,152391],{"class":238},[123,170846,30508],{"class":133},[123,170848,170849,170851],{"class":125,"line":45},[123,170850,30426],{"class":182},[123,170852,155758],{"class":133},[14,170854,170855,170856,170859],{},"用户输入 ",[120,170857,170858],{},"abc","，程序就会报错退出。",[14,170861,170862],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[65,170864,170866],{"id":170865},"_93-try-except","9.3 try except",[14,170868,170869],{},"基础语法：",[114,170871,170873],{"className":30389,"code":170872,"language":30391,"meta":37,"style":37},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[120,170874,170875,170882,170887,170894],{"__ignoreMap":37},[123,170876,170877,170880],{"class":125,"line":126},[123,170878,170879],{"class":129},"try",[123,170881,3748],{"class":133},[123,170883,170884],{"class":125,"line":45},[123,170885,170886],{"class":133},"    可能出错的代码\n",[123,170888,170889,170892],{"class":125,"line":1189},[123,170890,170891],{"class":129},"except",[123,170893,3748],{"class":133},[123,170895,170896],{"class":125,"line":1204},[123,170897,170898],{"class":133},"    出错后的处理代码\n",[14,170900,15145],{},[114,170902,170904],{"className":30389,"code":170903,"language":30391,"meta":37,"style":37},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[120,170905,170906,170912,170930,170936,170942],{"__ignoreMap":37},[123,170907,170908,170910],{"class":125,"line":126},[123,170909,170879],{"class":129},[123,170911,3748],{"class":133},[123,170913,170914,170916,170918,170920,170922,170924,170926,170928],{"class":125,"line":45},[123,170915,152383],{"class":133},[123,170917,179],{"class":129},[123,170919,2391],{"class":182},[123,170921,134],{"class":133},[123,170923,53832],{"class":182},[123,170925,134],{"class":133},[123,170927,152391],{"class":238},[123,170929,30508],{"class":133},[123,170931,170932,170934],{"class":125,"line":1189},[123,170933,31310],{"class":182},[123,170935,155758],{"class":133},[123,170937,170938,170940],{"class":125,"line":1204},[123,170939,170891],{"class":129},[123,170941,3748],{"class":133},[123,170943,170944,170946,170948,170951],{"class":125,"line":1210},[123,170945,31310],{"class":182},[123,170947,134],{"class":133},[123,170949,170950],{"class":238},"\"年龄必须是数字\"",[123,170952,140],{"class":133},[14,170954,170955,170956,170958],{},"不建议裸写 ",[120,170957,170891],{},"，最好指定异常类型。",[114,170960,170962],{"className":30389,"code":170961,"language":30391,"meta":37,"style":37},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[120,170963,170964,170970,170988,170994,171002],{"__ignoreMap":37},[123,170965,170966,170968],{"class":125,"line":126},[123,170967,170879],{"class":129},[123,170969,3748],{"class":133},[123,170971,170972,170974,170976,170978,170980,170982,170984,170986],{"class":125,"line":45},[123,170973,152383],{"class":133},[123,170975,179],{"class":129},[123,170977,2391],{"class":182},[123,170979,134],{"class":133},[123,170981,53832],{"class":182},[123,170983,134],{"class":133},[123,170985,152391],{"class":238},[123,170987,30508],{"class":133},[123,170989,170990,170992],{"class":125,"line":1189},[123,170991,31310],{"class":182},[123,170993,155758],{"class":133},[123,170995,170996,170998,171000],{"class":125,"line":1204},[123,170997,170891],{"class":129},[123,170999,152223],{"class":182},[123,171001,3748],{"class":133},[123,171003,171004,171006,171008,171010],{"class":125,"line":1210},[123,171005,31310],{"class":182},[123,171007,134],{"class":133},[123,171009,170950],{"class":238},[123,171011,140],{"class":133},[65,171013,171015],{"id":171014},"_94-捕获多个异常","9.4 捕获多个异常",[114,171017,171019],{"className":30389,"code":171018,"language":30391,"meta":37,"style":37},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[120,171020,171021,171027,171048,171068,171075,171083,171094,171103],{"__ignoreMap":37},[123,171022,171023,171025],{"class":125,"line":126},[123,171024,170879],{"class":129},[123,171026,3748],{"class":133},[123,171028,171029,171032,171034,171036,171038,171040,171042,171044,171046],{"class":125,"line":45},[123,171030,171031],{"class":133},"    nums ",[123,171033,179],{"class":129},[123,171035,52237],{"class":133},[123,171037,351],{"class":182},[123,171039,12445],{"class":133},[123,171041,211],{"class":182},[123,171043,12445],{"class":133},[123,171045,205],{"class":182},[123,171047,33257],{"class":133},[123,171049,171050,171053,171055,171057,171059,171061,171063,171066],{"class":125,"line":1189},[123,171051,171052],{"class":133},"    index ",[123,171054,179],{"class":129},[123,171056,2391],{"class":182},[123,171058,134],{"class":133},[123,171060,53832],{"class":182},[123,171062,134],{"class":133},[123,171064,171065],{"class":238},"\"请输入索引:\"",[123,171067,30508],{"class":133},[123,171069,171070,171072],{"class":125,"line":1204},[123,171071,31310],{"class":182},[123,171073,171074],{"class":133},"(nums[index])\n",[123,171076,171077,171079,171081],{"class":125,"line":1210},[123,171078,170891],{"class":129},[123,171080,152223],{"class":182},[123,171082,3748],{"class":133},[123,171084,171085,171087,171089,171092],{"class":125,"line":1224},[123,171086,31310],{"class":182},[123,171088,134],{"class":133},[123,171090,171091],{"class":238},"\"索引必须是整数\"",[123,171093,140],{"class":133},[123,171095,171096,171098,171101],{"class":125,"line":1230},[123,171097,170891],{"class":129},[123,171099,171100],{"class":182}," IndexError",[123,171102,3748],{"class":133},[123,171104,171105,171107,171109,171112],{"class":125,"line":1321},[123,171106,31310],{"class":182},[123,171108,134],{"class":133},[123,171110,171111],{"class":238},"\"索引越界\"",[123,171113,140],{"class":133},[14,171115,171116],{},"多个异常使用相同处理逻辑：",[114,171118,171120],{"className":30389,"code":171119,"language":30391,"meta":37,"style":37},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[120,171121,171122,171128,171146,171159,171173],{"__ignoreMap":37},[123,171123,171124,171126],{"class":125,"line":126},[123,171125,170879],{"class":129},[123,171127,3748],{"class":133},[123,171129,171130,171132,171134,171136,171138,171140,171142,171144],{"class":125,"line":45},[123,171131,45604],{"class":133},[123,171133,179],{"class":129},[123,171135,2391],{"class":182},[123,171137,134],{"class":133},[123,171139,53832],{"class":182},[123,171141,134],{"class":133},[123,171143,155793],{"class":238},[123,171145,30508],{"class":133},[123,171147,171148,171150,171152,171154,171156],{"class":125,"line":1189},[123,171149,31310],{"class":182},[123,171151,134],{"class":133},[123,171153,580],{"class":182},[123,171155,156043],{"class":129},[123,171157,171158],{"class":133}," num)\n",[123,171160,171161,171163,171165,171167,171169,171171],{"class":125,"line":1204},[123,171162,170891],{"class":129},[123,171164,1667],{"class":133},[123,171166,154831],{"class":182},[123,171168,12445],{"class":133},[123,171170,170774],{"class":182},[123,171172,30797],{"class":133},[123,171174,171175,171177,171179,171182],{"class":125,"line":1210},[123,171176,31310],{"class":182},[123,171178,134],{"class":133},[123,171180,171181],{"class":238},"\"输入不合法\"",[123,171183,140],{"class":133},[65,171185,171187],{"id":171186},"_95-获取异常信息","9.5 获取异常信息",[114,171189,171191],{"className":30389,"code":171190,"language":30391,"meta":37,"style":37},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[120,171192,171193,171199,171213,171224],{"__ignoreMap":37},[123,171194,171195,171197],{"class":125,"line":126},[123,171196,170879],{"class":129},[123,171198,3748],{"class":133},[123,171200,171201,171203,171205,171207,171209,171211],{"class":125,"line":45},[123,171202,45604],{"class":133},[123,171204,179],{"class":129},[123,171206,2391],{"class":182},[123,171208,134],{"class":133},[123,171210,155877],{"class":238},[123,171212,140],{"class":133},[123,171214,171215,171217,171219,171221],{"class":125,"line":1189},[123,171216,170891],{"class":129},[123,171218,152223],{"class":182},[123,171220,64615],{"class":129},[123,171222,171223],{"class":133}," e:\n",[123,171225,171226,171228,171230,171232,171235,171237,171239,171241,171243],{"class":125,"line":1204},[123,171227,31310],{"class":182},[123,171229,134],{"class":133},[123,171231,186],{"class":129},[123,171233,171234],{"class":238},"\"出错了:",[123,171236,1030],{"class":182},[123,171238,208],{"class":133},[123,171240,1080],{"class":182},[123,171242,385],{"class":238},[123,171244,140],{"class":133},[14,171246,146454],{},[114,171248,171251],{"className":171249,"code":171250,"language":5197,"meta":37},[5195],"出错了:invalid literal for int() with base 10: 'abc'\n",[120,171252,171250],{"__ignoreMap":37},[65,171254,171256],{"id":171255},"_96-else和finally","9.6 else和finally",[14,171258,171259,171261],{},[120,171260,1710],{},"：没有异常时执行。",[14,171263,171264,171267],{},[120,171265,171266],{},"finally","：无论是否异常都会执行。",[114,171269,171271],{"className":30389,"code":171270,"language":30391,"meta":37,"style":37},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[120,171272,171273,171279,171297,171305,171315,171321,171342,171348],{"__ignoreMap":37},[123,171274,171275,171277],{"class":125,"line":126},[123,171276,170879],{"class":129},[123,171278,3748],{"class":133},[123,171280,171281,171283,171285,171287,171289,171291,171293,171295],{"class":125,"line":45},[123,171282,45604],{"class":133},[123,171284,179],{"class":129},[123,171286,2391],{"class":182},[123,171288,134],{"class":133},[123,171290,53832],{"class":182},[123,171292,134],{"class":133},[123,171294,155793],{"class":238},[123,171296,30508],{"class":133},[123,171298,171299,171301,171303],{"class":125,"line":1189},[123,171300,170891],{"class":129},[123,171302,152223],{"class":182},[123,171304,3748],{"class":133},[123,171306,171307,171309,171311,171313],{"class":125,"line":1204},[123,171308,31310],{"class":182},[123,171310,134],{"class":133},[123,171312,153211],{"class":238},[123,171314,140],{"class":133},[123,171316,171317,171319],{"class":125,"line":1210},[123,171318,1710],{"class":129},[123,171320,3748],{"class":133},[123,171322,171323,171325,171327,171329,171332,171334,171336,171338,171340],{"class":125,"line":1224},[123,171324,31310],{"class":182},[123,171326,134],{"class":133},[123,171328,186],{"class":129},[123,171330,171331],{"class":238},"\"输入正确:",[123,171333,1030],{"class":182},[123,171335,1674],{"class":133},[123,171337,1080],{"class":182},[123,171339,385],{"class":238},[123,171341,140],{"class":133},[123,171343,171344,171346],{"class":125,"line":1230},[123,171345,171266],{"class":129},[123,171347,3748],{"class":133},[123,171349,171350,171352,171354,171357],{"class":125,"line":1321},[123,171351,31310],{"class":182},[123,171353,134],{"class":133},[123,171355,171356],{"class":238},"\"程序结束\"",[123,171358,140],{"class":133},[14,171360,171361,171363],{},[120,171362,171266],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[65,171365,171367],{"id":171366},"_97-抛出异常","9.7 抛出异常",[14,171369,171370],{},"程序可以主动抛出异常。",[114,171372,171374],{"className":30389,"code":171373,"language":30391,"meta":37,"style":37},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[120,171375,171376,171385,171397,171410,171430,171434,171438],{"__ignoreMap":37},[123,171377,171378,171380,171383],{"class":125,"line":126},[123,171379,31958],{"class":129},[123,171381,171382],{"class":1972}," set_age",[123,171384,161412],{"class":133},[123,171386,171387,171389,171391,171393,171395],{"class":125,"line":45},[123,171388,3110],{"class":129},[123,171390,15717],{"class":133},[123,171392,1044],{"class":129},[123,171394,4102],{"class":182},[123,171396,3748],{"class":133},[123,171398,171399,171401,171403,171405,171408],{"class":125,"line":1189},[123,171400,103429],{"class":129},[123,171402,152223],{"class":182},[123,171404,134],{"class":133},[123,171406,171407],{"class":238},"\"年龄不能为负数\"",[123,171409,140],{"class":133},[123,171411,171412,171414,171416,171418,171420,171422,171424,171426,171428],{"class":125,"line":1204},[123,171413,31310],{"class":182},[123,171415,134],{"class":133},[123,171417,186],{"class":129},[123,171419,161980],{"class":238},[123,171421,1030],{"class":182},[123,171423,70232],{"class":133},[123,171425,1080],{"class":182},[123,171427,385],{"class":238},[123,171429,140],{"class":133},[123,171431,171432],{"class":125,"line":1210},[123,171433,2409],{"emptyLinePlaceholder":50},[123,171435,171436],{"class":125,"line":1224},[123,171437,2409],{"emptyLinePlaceholder":50},[123,171439,171440,171443,171445,171447],{"class":125,"line":1230},[123,171441,171442],{"class":133},"set_age(",[123,171444,666],{"class":129},[123,171446,351],{"class":182},[123,171448,140],{"class":133},[14,171450,171451],{},"调用者可以捕获：",[114,171453,171455],{"className":30389,"code":171454,"language":30391,"meta":37,"style":37},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[120,171456,171457,171463,171474,171484],{"__ignoreMap":37},[123,171458,171459,171461],{"class":125,"line":126},[123,171460,170879],{"class":129},[123,171462,3748],{"class":133},[123,171464,171465,171468,171470,171472],{"class":125,"line":45},[123,171466,171467],{"class":133},"    set_age(",[123,171469,666],{"class":129},[123,171471,351],{"class":182},[123,171473,140],{"class":133},[123,171475,171476,171478,171480,171482],{"class":125,"line":1189},[123,171477,170891],{"class":129},[123,171479,152223],{"class":182},[123,171481,64615],{"class":129},[123,171483,171223],{"class":133},[123,171485,171486,171488],{"class":125,"line":1204},[123,171487,31310],{"class":182},[123,171489,67010],{"class":133},[65,171491,171493],{"id":171492},"_98-自定义异常","9.8 自定义异常",[114,171495,171497],{"className":30389,"code":171496,"language":30391,"meta":37,"style":37},"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",[120,171498,171499,171513,171517,171521,171525,171533,171543,171554,171564,171568,171572,171578,171595,171606],{"__ignoreMap":37},[123,171500,171501,171503,171506,171508,171511],{"class":125,"line":126},[123,171502,14704],{"class":129},[123,171504,171505],{"class":1972}," BalanceNotEnoughError",[123,171507,134],{"class":133},[123,171509,171510],{"class":182},"Exception",[123,171512,30797],{"class":133},[123,171514,171515],{"class":125,"line":45},[123,171516,149534],{"class":129},[123,171518,171519],{"class":125,"line":1189},[123,171520,2409],{"emptyLinePlaceholder":50},[123,171522,171523],{"class":125,"line":1204},[123,171524,2409],{"emptyLinePlaceholder":50},[123,171526,171527,171529,171531],{"class":125,"line":1210},[123,171528,31958],{"class":129},[123,171530,150183],{"class":1972},[123,171532,162809],{"class":133},[123,171534,171535,171537,171539,171541],{"class":125,"line":1224},[123,171536,3110],{"class":129},[123,171538,150139],{"class":133},[123,171540,1094],{"class":129},[123,171542,162586],{"class":133},[123,171544,171545,171547,171550,171552],{"class":125,"line":1230},[123,171546,103429],{"class":129},[123,171548,171549],{"class":133}," BalanceNotEnoughError(",[123,171551,150234],{"class":238},[123,171553,140],{"class":133},[123,171555,171556,171558,171560,171562],{"class":125,"line":1321},[123,171557,4099],{"class":129},[123,171559,162816],{"class":133},[123,171561,666],{"class":129},[123,171563,150172],{"class":133},[123,171565,171566],{"class":125,"line":1327},[123,171567,2409],{"emptyLinePlaceholder":50},[123,171569,171570],{"class":125,"line":1339},[123,171571,2409],{"emptyLinePlaceholder":50},[123,171573,171574,171576],{"class":125,"line":1621},[123,171575,170879],{"class":129},[123,171577,3748],{"class":133},[123,171579,171580,171582,171584,171587,171589,171591,171593],{"class":125,"line":1626},[123,171581,162487],{"class":133},[123,171583,179],{"class":129},[123,171585,171586],{"class":133}," withdraw(",[123,171588,445],{"class":182},[123,171590,12445],{"class":133},[123,171592,1731],{"class":182},[123,171594,140],{"class":133},[123,171596,171597,171599,171602,171604],{"class":125,"line":1632},[123,171598,170891],{"class":129},[123,171600,171601],{"class":133}," BalanceNotEnoughError ",[123,171603,31394],{"class":129},[123,171605,171223],{"class":133},[123,171607,171608,171610],{"class":125,"line":1637},[123,171609,31310],{"class":182},[123,171611,67010],{"class":133},[14,171613,171614],{},"入门阶段大多数情况使用内置异常即可。",[65,171616,171618],{"id":171617},"_99-traceback","9.9 traceback",[14,171620,171621],{},"调试时可以输出完整异常堆栈。",[114,171623,171625],{"className":30389,"code":171624,"language":30391,"meta":37,"style":37},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[120,171626,171627,171634,171638,171644,171654,171662],{"__ignoreMap":37},[123,171628,171629,171631],{"class":125,"line":126},[123,171630,30403],{"class":129},[123,171632,171633],{"class":133}," traceback\n",[123,171635,171636],{"class":125,"line":45},[123,171637,2409],{"emptyLinePlaceholder":50},[123,171639,171640,171642],{"class":125,"line":1189},[123,171641,170879],{"class":129},[123,171643,3748],{"class":133},[123,171645,171646,171648,171650,171652],{"class":125,"line":1204},[123,171647,1994],{"class":182},[123,171649,134],{"class":133},[123,171651,155877],{"class":238},[123,171653,140],{"class":133},[123,171655,171656,171658,171660],{"class":125,"line":1210},[123,171657,170891],{"class":129},[123,171659,152223],{"class":182},[123,171661,3748],{"class":133},[123,171663,171664],{"class":125,"line":1224},[123,171665,171666],{"class":133},"    traceback.print_exc()\n",[14,171668,171669],{},"日志系统中常把异常堆栈记录到文件。",[65,171671,171673],{"id":171672},"_910-什么是模块","9.10 什么是模块",[14,171675,171676,171677,125980],{},"模块就是一个 ",[120,171678,146349],{},[14,171680,171681,171682,24629],{},"例如创建 ",[120,171683,171684],{},"my_math.py",[114,171686,171688],{"className":30389,"code":171687,"language":30391,"meta":37,"style":37},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[120,171689,171690,171698,171708,171712,171716,171725],{"__ignoreMap":37},[123,171691,171692,171694,171696],{"class":125,"line":126},[123,171693,31958],{"class":129},[123,171695,5219],{"class":1972},[123,171697,151090],{"class":133},[123,171699,171700,171702,171704,171706],{"class":125,"line":45},[123,171701,4099],{"class":129},[123,171703,10879],{"class":133},[123,171705,615],{"class":129},[123,171707,151101],{"class":133},[123,171709,171710],{"class":125,"line":1189},[123,171711,2409],{"emptyLinePlaceholder":50},[123,171713,171714],{"class":125,"line":1204},[123,171715,2409],{"emptyLinePlaceholder":50},[123,171717,171718,171720,171723],{"class":125,"line":1210},[123,171719,31958],{"class":129},[123,171721,171722],{"class":1972}," sub",[123,171724,151090],{"class":133},[123,171726,171727,171729,171731,171733],{"class":125,"line":1224},[123,171728,4099],{"class":129},[123,171730,10879],{"class":133},[123,171732,666],{"class":129},[123,171734,151101],{"class":133},[14,171736,171737],{},"在另一个文件中导入：",[114,171739,171741],{"className":30389,"code":171740,"language":30391,"meta":37,"style":37},"import my_math\n\nprint(my_math.add(1, 2))\n",[120,171742,171743,171750,171754],{"__ignoreMap":37},[123,171744,171745,171747],{"class":125,"line":126},[123,171746,30403],{"class":129},[123,171748,171749],{"class":133}," my_math\n",[123,171751,171752],{"class":125,"line":45},[123,171753,2409],{"emptyLinePlaceholder":50},[123,171755,171756,171758,171761,171763,171765,171767],{"class":125,"line":1189},[123,171757,30426],{"class":182},[123,171759,171760],{"class":133},"(my_math.add(",[123,171762,351],{"class":182},[123,171764,12445],{"class":133},[123,171766,211],{"class":182},[123,171768,30508],{"class":133},[65,171770,171772],{"id":171771},"_911-import导入","9.11 import导入",[94,171774,171776],{"id":171775},"_9111-导入模块","9.11.1 导入模块",[114,171778,171780],{"className":30389,"code":171779,"language":30391,"meta":37,"style":37},"import random\n\nprint(random.randint(1, 10))\n",[120,171781,171782,171788,171792],{"__ignoreMap":37},[123,171783,171784,171786],{"class":125,"line":126},[123,171785,30403],{"class":129},[123,171787,45339],{"class":133},[123,171789,171790],{"class":125,"line":45},[123,171791,2409],{"emptyLinePlaceholder":50},[123,171793,171794,171796,171799,171801,171803,171805],{"class":125,"line":1189},[123,171795,30426],{"class":182},[123,171797,171798],{"class":133},"(random.randint(",[123,171800,351],{"class":182},[123,171802,12445],{"class":133},[123,171804,580],{"class":182},[123,171806,30508],{"class":133},[94,171808,171810],{"id":171809},"_9112-导入指定内容","9.11.2 导入指定内容",[114,171812,171814],{"className":30389,"code":171813,"language":30391,"meta":37,"style":37},"from random import randint\n\nprint(randint(1, 10))\n",[120,171815,171816,171827,171831],{"__ignoreMap":37},[123,171817,171818,171820,171822,171824],{"class":125,"line":126},[123,171819,30748],{"class":129},[123,171821,57807],{"class":133},[123,171823,30403],{"class":129},[123,171825,171826],{"class":133}," randint\n",[123,171828,171829],{"class":125,"line":45},[123,171830,2409],{"emptyLinePlaceholder":50},[123,171832,171833,171835,171838,171840,171842,171844],{"class":125,"line":1189},[123,171834,30426],{"class":182},[123,171836,171837],{"class":133},"(randint(",[123,171839,351],{"class":182},[123,171841,12445],{"class":133},[123,171843,580],{"class":182},[123,171845,30508],{"class":133},[94,171847,171849],{"id":171848},"_9113-起别名","9.11.3 起别名",[114,171851,171853],{"className":30389,"code":171852,"language":30391,"meta":37,"style":37},"import random as rd\n\nprint(rd.randint(1, 10))\n",[120,171854,171855,171866,171870],{"__ignoreMap":37},[123,171856,171857,171859,171861,171863],{"class":125,"line":126},[123,171858,30403],{"class":129},[123,171860,57807],{"class":133},[123,171862,31394],{"class":129},[123,171864,171865],{"class":133}," rd\n",[123,171867,171868],{"class":125,"line":45},[123,171869,2409],{"emptyLinePlaceholder":50},[123,171871,171872,171874,171877,171879,171881,171883],{"class":125,"line":1189},[123,171873,30426],{"class":182},[123,171875,171876],{"class":133},"(rd.randint(",[123,171878,351],{"class":182},[123,171880,12445],{"class":133},[123,171882,580],{"class":182},[123,171884,30508],{"class":133},[114,171886,171888],{"className":30389,"code":171887,"language":30391,"meta":37,"style":37},"from random import randint as rint\n\nprint(rint(1, 10))\n",[120,171889,171890,171906,171910],{"__ignoreMap":37},[123,171891,171892,171894,171896,171898,171901,171903],{"class":125,"line":126},[123,171893,30748],{"class":129},[123,171895,57807],{"class":133},[123,171897,30403],{"class":129},[123,171899,171900],{"class":133}," randint ",[123,171902,31394],{"class":129},[123,171904,171905],{"class":133}," rint\n",[123,171907,171908],{"class":125,"line":45},[123,171909,2409],{"emptyLinePlaceholder":50},[123,171911,171912,171914,171917,171919,171921,171923],{"class":125,"line":1189},[123,171913,30426],{"class":182},[123,171915,171916],{"class":133},"(rint(",[123,171918,351],{"class":182},[123,171920,12445],{"class":133},[123,171922,580],{"class":182},[123,171924,30508],{"class":133},[94,171926,171928],{"id":171927},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[114,171930,171932],{"className":30389,"code":171931,"language":30391,"meta":37,"style":37},"from random import *\n",[120,171933,171934],{"__ignoreMap":37},[123,171935,171936,171938,171940,171942],{"class":125,"line":126},[123,171937,30748],{"class":129},[123,171939,57807],{"class":133},[123,171941,30403],{"class":129},[123,171943,171944],{"class":129}," *\n",[14,171946,171947],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[65,171949,171951],{"id":171950},"_912-常用内置模块","9.12 常用内置模块",[94,171953,171955],{"id":171954},"_9121-random","9.12.1 random",[114,171957,171959],{"className":30389,"code":171958,"language":30391,"meta":37,"style":37},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[120,171960,171961,171967,171971,171985,172004],{"__ignoreMap":37},[123,171962,171963,171965],{"class":125,"line":126},[123,171964,30403],{"class":129},[123,171966,45339],{"class":133},[123,171968,171969],{"class":125,"line":45},[123,171970,2409],{"emptyLinePlaceholder":50},[123,171972,171973,171975,171977,171979,171981,171983],{"class":125,"line":1189},[123,171974,30426],{"class":182},[123,171976,171798],{"class":133},[123,171978,351],{"class":182},[123,171980,12445],{"class":133},[123,171982,580],{"class":182},[123,171984,30508],{"class":133},[123,171986,171987,171989,171992,171994,171996,171998,172000,172002],{"class":125,"line":1204},[123,171988,30426],{"class":182},[123,171990,171991],{"class":133},"(random.choice([",[123,171993,149885],{"class":238},[123,171995,12445],{"class":133},[123,171997,150933],{"class":238},[123,171999,12445],{"class":133},[123,172001,159728],{"class":238},[123,172003,33154],{"class":133},[123,172005,172006,172008,172011,172013,172015,172017,172019,172021,172023,172025,172027,172029,172031,172033],{"class":125,"line":1210},[123,172007,30426],{"class":182},[123,172009,172010],{"class":133},"(random.sample([",[123,172012,351],{"class":182},[123,172014,12445],{"class":133},[123,172016,211],{"class":182},[123,172018,12445],{"class":133},[123,172020,205],{"class":182},[123,172022,12445],{"class":133},[123,172024,427],{"class":182},[123,172026,12445],{"class":133},[123,172028,453],{"class":182},[123,172030,112199],{"class":133},[123,172032,211],{"class":182},[123,172034,30508],{"class":133},[94,172036,172038],{"id":172037},"_9122-time","9.12.2 time",[114,172040,172042],{"className":30389,"code":172041,"language":30391,"meta":37,"style":37},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[120,172043,172044,172050,172054,172061,172069],{"__ignoreMap":37},[123,172045,172046,172048],{"class":125,"line":126},[123,172047,30403],{"class":129},[123,172049,31840],{"class":133},[123,172051,172052],{"class":125,"line":45},[123,172053,2409],{"emptyLinePlaceholder":50},[123,172055,172056,172058],{"class":125,"line":1189},[123,172057,30426],{"class":182},[123,172059,172060],{"class":133},"(time.time())\n",[123,172062,172063,172065,172067],{"class":125,"line":1204},[123,172064,95082],{"class":133},[123,172066,351],{"class":182},[123,172068,140],{"class":133},[123,172070,172071,172073,172075,172078],{"class":125,"line":1210},[123,172072,30426],{"class":182},[123,172074,134],{"class":133},[123,172076,172077],{"class":238},"\"1秒后执行\"",[123,172079,140],{"class":133},[94,172081,172083],{"id":172082},"_9123-datetime","9.12.3 datetime",[114,172085,172087],{"className":30389,"code":172086,"language":30391,"meta":37,"style":37},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[120,172088,172089,172101,172105,172115,172122],{"__ignoreMap":37},[123,172090,172091,172093,172096,172098],{"class":125,"line":126},[123,172092,30748],{"class":129},[123,172094,172095],{"class":133}," datetime ",[123,172097,30403],{"class":129},[123,172099,172100],{"class":133}," datetime\n",[123,172102,172103],{"class":125,"line":45},[123,172104,2409],{"emptyLinePlaceholder":50},[123,172106,172107,172110,172112],{"class":125,"line":1189},[123,172108,172109],{"class":133},"now ",[123,172111,179],{"class":129},[123,172113,172114],{"class":133}," datetime.now()\n",[123,172116,172117,172119],{"class":125,"line":1204},[123,172118,30426],{"class":182},[123,172120,172121],{"class":133},"(now)\n",[123,172123,172124,172126,172129,172132,172134,172137],{"class":125,"line":1210},[123,172125,30426],{"class":182},[123,172127,172128],{"class":133},"(now.strftime(",[123,172130,172131],{"class":238},"\"%Y-%m-",[123,172133,156688],{"class":182},[123,172135,172136],{"class":238}," %H:%M:%S\"",[123,172138,30508],{"class":133},[94,172140,172142],{"id":172141},"_9124-os","9.12.4 os",[114,172144,172146],{"className":30389,"code":172145,"language":30391,"meta":37,"style":37},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[120,172147,172148,172154,172158,172165],{"__ignoreMap":37},[123,172149,172150,172152],{"class":125,"line":126},[123,172151,30403],{"class":129},[123,172153,45316],{"class":133},[123,172155,172156],{"class":125,"line":45},[123,172157,2409],{"emptyLinePlaceholder":50},[123,172159,172160,172162],{"class":125,"line":1189},[123,172161,30426],{"class":182},[123,172163,172164],{"class":133},"(os.getcwd())\n",[123,172166,172167,172169,172172,172175],{"class":125,"line":1204},[123,172168,30426],{"class":182},[123,172170,172171],{"class":133},"(os.listdir(",[123,172173,172174],{"class":238},"\".\"",[123,172176,30508],{"class":133},[94,172178,172180],{"id":172179},"_9125-sys","9.12.5 sys",[114,172182,172184],{"className":30389,"code":172183,"language":30391,"meta":37,"style":37},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[120,172185,172186,172193,172197,172204],{"__ignoreMap":37},[123,172187,172188,172190],{"class":125,"line":126},[123,172189,30403],{"class":129},[123,172191,172192],{"class":133}," sys\n",[123,172194,172195],{"class":125,"line":45},[123,172196,2409],{"emptyLinePlaceholder":50},[123,172198,172199,172201],{"class":125,"line":1189},[123,172200,30426],{"class":182},[123,172202,172203],{"class":133},"(sys.version)\n",[123,172205,172206,172208],{"class":125,"line":1204},[123,172207,30426],{"class":182},[123,172209,172210],{"class":133},"(sys.path)\n",[65,172212,172214,172215,172217,172218,385],{"id":172213},"_913-if-name-main","9.13 if ",[283,172216,79821],{}," == \"",[283,172219,102055],{},[14,172221,172222,172223,172226],{},"模块被直接运行和被导入时，",[120,172224,172225],{},"__name__"," 的值不同。",[14,172228,172229,172230,24629],{},"创建 ",[120,172231,172232],{},"my_module.py",[114,172234,172236],{"className":30389,"code":172235,"language":30391,"meta":37,"style":37},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[120,172237,172238,172246,172256,172260,172264,172276],{"__ignoreMap":37},[123,172239,172240,172242,172244],{"class":125,"line":126},[123,172241,31958],{"class":129},[123,172243,5219],{"class":1972},[123,172245,151090],{"class":133},[123,172247,172248,172250,172252,172254],{"class":125,"line":45},[123,172249,4099],{"class":129},[123,172251,10879],{"class":133},[123,172253,615],{"class":129},[123,172255,151101],{"class":133},[123,172257,172258],{"class":125,"line":1189},[123,172259,2409],{"emptyLinePlaceholder":50},[123,172261,172262],{"class":125,"line":1204},[123,172263,2409],{"emptyLinePlaceholder":50},[123,172265,172266,172268,172270,172272,172274],{"class":125,"line":1210},[123,172267,1540],{"class":129},[123,172269,31231],{"class":182},[123,172271,101556],{"class":129},[123,172273,101559],{"class":238},[123,172275,3748],{"class":133},[123,172277,172278,172280,172282,172284,172286,172288],{"class":125,"line":1224},[123,172279,31310],{"class":182},[123,172281,166597],{"class":133},[123,172283,351],{"class":182},[123,172285,12445],{"class":133},[123,172287,211],{"class":182},[123,172289,30508],{"class":133},[14,172291,172292],{},"作用：",[77,172294,172295,172298],{},[80,172296,172297],{},"直接运行该文件时，执行测试代码。",[80,172299,172300],{},"被其他文件导入时，不执行测试代码。",[14,172302,172303],{},"这是写模块时很常用的习惯。",[65,172305,172307],{"id":172306},"_914-包","9.14 包",[14,172309,172310,172311,172314],{},"包是包含 ",[120,172312,172313],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172316,172317],{},"目录结构：",[114,172319,172322],{"className":172320,"code":172321,"language":5197,"meta":37},[5195],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[120,172323,172321],{"__ignoreMap":37},[14,172325,172326],{},"导入：",[114,172328,172330],{"className":30389,"code":172329,"language":30391,"meta":37,"style":37},"from utils.file_utils import read_file\n",[120,172331,172332],{"__ignoreMap":37},[123,172333,172334,172336,172339,172341],{"class":125,"line":126},[123,172335,30748],{"class":129},[123,172337,172338],{"class":133}," utils.file_utils ",[123,172340,30403],{"class":129},[123,172342,172343],{"class":133}," read_file\n",[14,172345,172346,172348],{},[120,172347,172313],{}," 可以为空，也可以写包初始化逻辑。",[65,172350,172352],{"id":172351},"_915-第三方包","9.15 第三方包",[14,172354,172355,172356,172358],{},"第三方包通过 ",[120,172357,23841],{}," 安装。",[114,172360,172362],{"className":23832,"code":172361,"language":23834,"meta":37,"style":37},"pip install requests\n",[120,172363,172364],{"__ignoreMap":37},[123,172365,172366,172368,172370],{"class":125,"line":126},[123,172367,23841],{"class":1972},[123,172369,23844],{"class":238},[123,172371,146095],{"class":238},[14,172373,172374],{},"使用：",[114,172376,172378],{"className":30389,"code":172377,"language":30391,"meta":37,"style":37},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[120,172379,172380,172386,172390,172405],{"__ignoreMap":37},[123,172381,172382,172384],{"class":125,"line":126},[123,172383,30403],{"class":129},[123,172385,146095],{"class":133},[123,172387,172388],{"class":125,"line":45},[123,172389,2409],{"emptyLinePlaceholder":50},[123,172391,172392,172395,172397,172400,172403],{"class":125,"line":1189},[123,172393,172394],{"class":133},"response ",[123,172396,179],{"class":129},[123,172398,172399],{"class":133}," requests.get(",[123,172401,172402],{"class":238},"\"https:\u002F\u002Fwww.example.com\"",[123,172404,140],{"class":133},[123,172406,172407,172409],{"class":125,"line":1204},[123,172408,30426],{"class":182},[123,172410,172411],{"class":133},"(response.status_code)\n",[14,172413,172414],{},"查看已安装包：",[114,172416,172418],{"className":23832,"code":172417,"language":23834,"meta":37,"style":37},"pip list\n",[120,172419,172420],{"__ignoreMap":37},[123,172421,172422,172424],{"class":125,"line":126},[123,172423,23841],{"class":1972},[123,172425,118952],{"class":238},[14,172427,172428],{},"导出项目依赖：",[114,172430,172431],{"className":23832,"code":146290,"language":23834,"meta":37,"style":37},[120,172432,172433],{"__ignoreMap":37},[123,172434,172435,172437,172439,172441],{"class":125,"line":126},[123,172436,23841],{"class":1972},[123,172438,146299],{"class":238},[123,172440,26233],{"class":129},[123,172442,146304],{"class":238},[14,172444,172445],{},"安装项目依赖：",[114,172447,172448],{"className":23832,"code":146310,"language":23834,"meta":37,"style":37},[120,172449,172450],{"__ignoreMap":37},[123,172451,172452,172454,172456,172458],{"class":125,"line":126},[123,172453,23841],{"class":1972},[123,172455,23844],{"class":238},[123,172457,119636],{"class":182},[123,172459,146304],{"class":238},[65,172461,172463],{"id":172462},"_916-模块搜索路径","9.16 模块搜索路径",[14,172465,172466,172467,172470],{},"Python 导入模块时会在 ",[120,172468,172469],{},"sys.path"," 中查找。",[114,172472,172474],{"className":30389,"code":172473,"language":30391,"meta":37,"style":37},"import sys\n\nfor path in sys.path:\n    print(path)\n",[120,172475,172476,172482,172486,172498],{"__ignoreMap":37},[123,172477,172478,172480],{"class":125,"line":126},[123,172479,30403],{"class":129},[123,172481,172192],{"class":133},[123,172483,172484],{"class":125,"line":45},[123,172485,2409],{"emptyLinePlaceholder":50},[123,172487,172488,172490,172493,172495],{"class":125,"line":1189},[123,172489,3034],{"class":129},[123,172491,172492],{"class":133}," path ",[123,172494,26054],{"class":129},[123,172496,172497],{"class":133}," sys.path:\n",[123,172499,172500,172502],{"class":125,"line":1204},[123,172501,31310],{"class":182},[123,172503,169226],{"class":133},[14,172505,172506],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172508,157620],{},[114,172510,172513],{"className":172511,"code":172512,"language":5197,"meta":37},[5195],"random.py\njson.py\ntime.py\n",[120,172514,172512],{"__ignoreMap":37},[14,172516,172517],{},"这些文件名可能导致导入异常。",[65,172519,172521],{"id":172520},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172523,172317],{},[114,172525,172528],{"className":172526,"code":172527,"language":5197,"meta":37},[5195],"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",[120,172529,172527],{"__ignoreMap":37},[14,172531,172532,24629],{},[120,172533,172534],{},"utils\u002Ffile_utils.py",[114,172536,172538],{"className":30389,"code":172537,"language":30391,"meta":37,"style":37},"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",[120,172539,172540,172546,172556,172560,172564,172574,172584,172592,172598,172602,172629,172639,172643,172647,172657,172683],{"__ignoreMap":37},[123,172541,172542,172544],{"class":125,"line":126},[123,172543,30403],{"class":129},[123,172545,147088],{"class":133},[123,172547,172548,172550,172552,172554],{"class":125,"line":45},[123,172549,30748],{"class":129},[123,172551,108308],{"class":133},[123,172553,30403],{"class":129},[123,172555,108313],{"class":133},[123,172557,172558],{"class":125,"line":1189},[123,172559,2409],{"emptyLinePlaceholder":50},[123,172561,172562],{"class":125,"line":1204},[123,172563,2409],{"emptyLinePlaceholder":50},[123,172565,172566,172568,172571],{"class":125,"line":1210},[123,172567,31958],{"class":129},[123,172569,172570],{"class":1972}," read_json",[123,172572,172573],{"class":133},"(path):\n",[123,172575,172576,172579,172581],{"class":125,"line":1224},[123,172577,172578],{"class":133},"    path ",[123,172580,179],{"class":129},[123,172582,172583],{"class":133}," Path(path)\n",[123,172585,172586,172588,172590],{"class":125,"line":1230},[123,172587,3110],{"class":129},[123,172589,38941],{"class":129},[123,172591,169307],{"class":133},[123,172593,172594,172596],{"class":125,"line":1321},[123,172595,14762],{"class":129},[123,172597,51849],{"class":133},[123,172599,172600],{"class":125,"line":1327},[123,172601,2409],{"emptyLinePlaceholder":50},[123,172603,172604,172606,172608,172611,172613,172615,172617,172619,172621,172623,172625,172627],{"class":125,"line":1339},[123,172605,34189],{"class":129},[123,172607,146788],{"class":182},[123,172609,172610],{"class":133},"(path, ",[123,172612,146798],{"class":238},[123,172614,12445],{"class":133},[123,172616,146803],{"class":5226},[123,172618,179],{"class":129},[123,172620,146808],{"class":238},[123,172622,13724],{"class":133},[123,172624,31394],{"class":129},[123,172626,148150],{"class":5226},[123,172628,3748],{"class":133},[123,172630,172631,172633,172635,172637],{"class":125,"line":1621},[123,172632,14762],{"class":129},[123,172634,148161],{"class":133},[123,172636,45365],{"class":5226},[123,172638,140],{"class":133},[123,172640,172641],{"class":125,"line":1626},[123,172642,2409],{"emptyLinePlaceholder":50},[123,172644,172645],{"class":125,"line":1632},[123,172646,2409],{"emptyLinePlaceholder":50},[123,172648,172649,172651,172654],{"class":125,"line":1637},[123,172650,31958],{"class":129},[123,172652,172653],{"class":1972}," write_json",[123,172655,172656],{"class":133},"(path, data):\n",[123,172658,172659,172661,172663,172665,172667,172669,172671,172673,172675,172677,172679,172681],{"class":125,"line":1651},[123,172660,34189],{"class":129},[123,172662,146788],{"class":182},[123,172664,172610],{"class":133},[123,172666,151973],{"class":238},[123,172668,12445],{"class":133},[123,172670,146803],{"class":5226},[123,172672,179],{"class":129},[123,172674,146808],{"class":238},[123,172676,13724],{"class":133},[123,172678,31394],{"class":129},[123,172680,148150],{"class":5226},[123,172682,3748],{"class":133},[123,172684,172685,172688,172690,172692,172694,172696,172698,172700,172702,172704,172706],{"class":125,"line":1656},[123,172686,172687],{"class":133},"        json.dump(data, ",[123,172689,45365],{"class":5226},[123,172691,12445],{"class":133},[123,172693,147134],{"class":5226},[123,172695,179],{"class":129},[123,172697,33998],{"class":182},[123,172699,12445],{"class":133},[123,172701,152009],{"class":5226},[123,172703,179],{"class":129},[123,172705,211],{"class":182},[123,172707,140],{"class":133},[14,172709,172710,24629],{},[120,172711,154604],{},[114,172713,172715],{"className":30389,"code":172714,"language":30391,"meta":37,"style":37},"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",[120,172716,172717,172728,172732,172745,172765],{"__ignoreMap":37},[123,172718,172719,172721,172723,172725],{"class":125,"line":126},[123,172720,30748],{"class":129},[123,172722,172338],{"class":133},[123,172724,30403],{"class":129},[123,172726,172727],{"class":133}," read_json, write_json\n",[123,172729,172730],{"class":125,"line":45},[123,172731,2409],{"emptyLinePlaceholder":50},[123,172733,172734,172736,172738,172741,172743],{"class":125,"line":1189},[123,172735,159713],{"class":133},[123,172737,179],{"class":129},[123,172739,172740],{"class":133}," read_json(",[123,172742,151828],{"class":238},[123,172744,140],{"class":133},[123,172746,172747,172749,172751,172753,172755,172757,172759,172761,172763],{"class":125,"line":1204},[123,172748,170531],{"class":133},[123,172750,62690],{"class":238},[123,172752,51448],{"class":133},[123,172754,149885],{"class":238},[123,172756,12445],{"class":133},[123,172758,151469],{"class":238},[123,172760,51448],{"class":133},[123,172762,1123],{"class":182},[123,172764,165149],{"class":133},[123,172766,172767,172770,172772],{"class":125,"line":1210},[123,172768,172769],{"class":133},"write_json(",[123,172771,151828],{"class":238},[123,172773,172774],{"class":133},", students)\n",[65,172776,172778],{"id":172777},"_918-易错点","9.18 易错点",[77,172780,172781,172784,172789,172794,172797,172800],{},[80,172782,172783],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[80,172785,172786,172787,28396],{},"能指定异常类型就不要裸写 ",[120,172788,170891],{},[80,172790,172791,172793],{},[120,172792,171266],{}," 无论是否出错都会执行。",[80,172795,172796],{},"模块文件名不要和标准库重名。",[80,172798,172799],{},"导入自己写的模块时，要注意运行目录。",[80,172801,172802],{},"第三方包要安装到当前解释器或虚拟环境中。",[65,172804,172806],{"id":172805},"_919-本章练习","9.19 本章练习",[77,172808,172809,172812,172815,172821,172828],{},[80,172810,172811],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[80,172813,172814],{},"写函数读取文件，如果文件不存在则返回空字符串。",[80,172816,172229,172817,172820],{},[120,172818,172819],{},"math_utils.py","，实现加减乘除函数并导入使用。",[80,172822,172823,172824,172827],{},"创建一个 ",[120,172825,172826],{},"utils"," 包，把 JSON 读写函数放进去。",[80,172829,172830],{},"写一个程序，捕获除零异常和输入格式异常。",[5136,172832,172833],{},"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":37,"searchDepth":45,"depth":45,"links":172835},[172836,172837,172838,172839,172840,172841,172842,172843,172844,172845,172846,172852,172859,172861,172862,172863,172864,172865,172866],{"id":170688,"depth":45,"text":170689},{"id":170816,"depth":45,"text":170817},{"id":170865,"depth":45,"text":170866},{"id":171014,"depth":45,"text":171015},{"id":171186,"depth":45,"text":171187},{"id":171255,"depth":45,"text":171256},{"id":171366,"depth":45,"text":171367},{"id":171492,"depth":45,"text":171493},{"id":171617,"depth":45,"text":171618},{"id":171672,"depth":45,"text":171673},{"id":171771,"depth":45,"text":171772,"children":172847},[172848,172849,172850,172851],{"id":171775,"depth":1189,"text":171776},{"id":171809,"depth":1189,"text":171810},{"id":171848,"depth":1189,"text":171849},{"id":171927,"depth":1189,"text":171928},{"id":171950,"depth":45,"text":171951,"children":172853},[172854,172855,172856,172857,172858],{"id":171954,"depth":1189,"text":171955},{"id":172037,"depth":1189,"text":172038},{"id":172082,"depth":1189,"text":172083},{"id":172141,"depth":1189,"text":172142},{"id":172179,"depth":1189,"text":172180},{"id":172213,"depth":45,"text":172860},"9.13 if name == \"main\"",{"id":172306,"depth":45,"text":172307},{"id":172351,"depth":45,"text":172352},{"id":172462,"depth":45,"text":172463},{"id":172520,"depth":45,"text":172521},{"id":172777,"depth":45,"text":172778},{"id":172805,"depth":45,"text":172806},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170680,"description":47},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172873,"title":172874,"body":172875,"description":173038,"extension":48,"meta":173039,"navigation":50,"path":173040,"seo":173041,"stem":173042,"__hash__":173043},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172876,"toc":173033},[172877,172880,172883,172886,172897,172899,172973,172976,172979,172982,172985,172988,172991,172994,172997,173000,173003],[10,172878,172874],{"id":172879},"python教程",[14,172881,172882],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,172884,172885],{},"建议学习环境：",[77,172887,172888,172891,172894],{},[80,172889,172890],{},"Python 版本：Python 3.10 及以上。",[80,172892,172893],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[80,172895,172896],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[65,172898,117075],{"id":117075},[77,172900,172901,172907,172913,172919,172925,172931,172937,172943,172949,172955,172961,172967],{},[80,172902,172903],{},[372,172904,172906],{"href":172905},".\u002Fch1-Python","Python环境与第一个程序",[80,172908,172909],{},[372,172910,172912],{"href":172911},".\u002Fch2","基础语法、变量与字符串",[80,172914,172915],{},[372,172916,172918],{"href":172917},".\u002Fch3","判断语句",[80,172920,172921],{},[372,172922,172924],{"href":172923},".\u002Fch4","循环语句",[80,172926,172927],{},[372,172928,172930],{"href":172929},".\u002Fch5","函数基础",[80,172932,172933],{},[372,172934,172936],{"href":172935},".\u002Fch6","数据容器",[80,172938,172939],{},[372,172940,172942],{"href":172941},".\u002Fch7","函数进阶",[80,172944,172945],{},[372,172946,172948],{"href":172947},".\u002Fch8","文件操作",[80,172950,172951],{},[372,172952,172954],{"href":172953},".\u002Fch9","异常、模块与包",[80,172956,172957],{},[372,172958,172960],{"href":172959},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[80,172962,172963],{},[372,172964,172966],{"href":172965},".\u002Fch11","面向对象基础",[80,172968,172969],{},[372,172970,172972],{"href":172971},".\u002Fch12","综合案例与复习路线",[65,172974,172975],{"id":172975},"学习路线",[14,172977,172978],{},"第一阶段：能运行程序。",[14,172980,172981],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,172983,172984],{},"第二阶段：能组织数据。",[14,172986,172987],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,172989,172990],{},"第三阶段：能封装逻辑。",[14,172992,172993],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,172995,172996],{},"第四阶段：能做小项目。",[14,172998,172999],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[65,173001,173002],{"id":173002},"参考资料",[77,173004,173005,173012,173019,173026],{},[80,173006,173007,173008],{},"黑马程序员 Python 入门教程推荐：",[372,173009,173010],{"href":173010,"rel":173011},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23875],[80,173013,173014,173015],{},"Python 官方中文教程：",[372,173016,173017],{"href":173017,"rel":173018},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23875],[80,173020,173021,173022],{},"Python 标准库文档：",[372,173023,173024],{"href":173024,"rel":173025},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23875],[80,173027,173028,173029],{},"pyecharts 文档：",[372,173030,173031],{"href":173031,"rel":173032},"https:\u002F\u002Fpyecharts.org\u002F",[23875],{"title":37,"searchDepth":45,"depth":45,"links":173034},[173035,173036,173037],{"id":117075,"depth":45,"text":117075},{"id":172975,"depth":45,"text":172975},{"id":173002,"depth":45,"text":173002},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23388},"\u002Fwiki\u002F2024-10-10-python",{"title":172874,"description":173038},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331457056]