[{"data":1,"prerenderedAt":173032},["ShallowReactive",2],{"wiki-\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-mo-fa-ming-ling-writefile-he-run":3,"wiki-doc-nav":38},{"id":4,"title":5,"body":6,"description":30,"extension":31,"meta":32,"navigation":33,"path":34,"seo":35,"stem":36,"__hash__":37},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run.md","18.魔法命令writefile和run",{"type":7,"value":8,"toc":27},"minimark",[9,13,17,20],[10,11,5],"h1",{"id":12},"_18魔法命令writefile和run",[14,15,16],"p",{},"writefile将单元格内容写入到文件中。如果文件不存在则创建，如果文件存在，则覆盖文件。如果指定-a参数，则追加内容，不覆盖",[14,18,19],{},"run运行外部python文件，运行结束后，外部文件中定义的变量得到保留",[14,21,22],{},[23,24],"img",{"alt":25,"src":26},"","\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-042.png",{"title":25,"searchDepth":28,"depth":28,"links":29},2,[],null,"md",{},true,"\u002Fwiki\u002F2025-08-14-numpy\u002Fch18-writefilerun",{"title":5,"description":30},"wiki\u002F2025-08-14-numpy\u002Fch18-魔法命令writefile和run","d1MzkGQ-Ew6zFK9h2luqGJC1C8knZuKt2r-JshvcU5w",[39,5155,6263,7683,10672,12023,13512,14601,23364,23376,23975,24001,24125,24366,24431,24449,24462,24509,24633,24802,25001,25181,25386,25522,25617,25654,25667,25977,26718,27426,27447,28467,30098,30249,30262,30274,30575,50387,50402,50419,50452,53324,76672,92817,92838,92951,93072,93842,94505,94866,94904,95010,95110,95153,95170,95231,96885,96986,97011,97502,98002,99082,99365,100107,100609,100621,102637,104301,105804,107502,109419,111338,113360,116830,117262,117725,118474,121418,121766,121788,122144,125451,125463,125866,125889,126036,126203,126408,126709,127266,127923,129854,131452,132101,133595,135026,136261,137955,139707,142117,142233,143168,143379,144264,145499,145727,145740,146895,149307,151675,154996,157473,159117,160894,162907,165959,168139,170666,172860],{"id":40,"title":41,"body":42,"description":25,"extension":31,"meta":5150,"navigation":33,"path":5151,"seo":5152,"stem":5153,"__hash__":5154},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch1-基本认识.md","1.基础入门",{"type":7,"value":43,"toc":5122},[44,47,52,55,59,72,76,81,84,87,90,93,96,131,135,138,141,144,147,200,204,223,225,239,242,250,253,1116,1123,1140,1144,1235,1239,1245,1334,1338,1376,1380,1444,1448,1452,1458,1469,1473,1478,1482,1487,1491,1496,1500,1504,1509,1779,1784,1922,1927,2184,2187,2195,2199,2204,2307,2310,2616,2625,2726,2729,2732,2735,2738,2998,3003,3143,3146,3325,3328,3456,3459,3611,3615,3620,3623,3634,3642,3645,3752,3756,3760,3765,3815,3820,3825,3849,3854,3907,3910,3915,4092,4097,4382,4387,4784,4788,4793,4850,4855,4863,4866,5006,5009,5118],[10,45,41],{"id":46},"_1基础入门",[48,49,51],"h2",{"id":50},"_11注释","1.1注释",[14,53,54],{},"\u002F\u002F或者\u002F* *\u002F",[48,56,58],{"id":57},"_12命名","1.2命名",[60,61,62,66,69],"ol",{},[63,64,65],"li",{},"字母数字下划线",[63,67,68],{},"开头必须是字母或_",[63,70,71],{},"不能使用关键词",[48,73,75],{"id":74},"_13数据类型","1.3数据类型",[77,78,80],"h3",{"id":79},"_131整形","1.3.1整形",[14,82,83],{},"short 短整形 2",[14,85,86],{},"int 整形 4",[14,88,89],{},"long 长整形 win4 linux32位4 linux64位8",[14,91,92],{},"long long 长长整形 8",[14,94,95],{},"利用sizeof可以求数据类型占用的内存空间大小",[97,98,102],"pre",{"className":99,"code":100,"language":101,"meta":25,"style":25},"language-c++ shiki shiki-themes github-light github-dark","sizeof(int)\nsizeof(num)\n","c++",[103,104,105,124],"code",{"__ignoreMap":25},[106,107,110,114,118,121],"span",{"class":108,"line":109},"line",1,[106,111,113],{"class":112},"szBVR","sizeof",[106,115,117],{"class":116},"sVt8B","(",[106,119,120],{"class":112},"int",[106,122,123],{"class":116},")\n",[106,125,126,128],{"class":108,"line":28},[106,127,113],{"class":112},[106,129,130],{"class":116},"(num)\n",[77,132,134],{"id":133},"_132浮点型","1.3.2浮点型",[14,136,137],{},"float 单精度 4节 7位有效数字",[14,139,140],{},"double 双精度 8节 15-16有效数字",[14,142,143],{},"默认情况下，输出一个小数，会显示6位有效数字",[14,145,146],{},"注意点：",[97,148,150],{"className":99,"code":149,"language":101,"meta":25,"style":25},"float f1=3.14f; \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\nfloat f2=3e2; \u002F\u002F科学记数法\n",[103,151,152,177],{"__ignoreMap":25},[106,153,154,157,160,163,167,170,173],{"class":108,"line":109},[106,155,156],{"class":112},"float",[106,158,159],{"class":116}," f1",[106,161,162],{"class":112},"=",[106,164,166],{"class":165},"sj4cs","3.14",[106,168,169],{"class":112},"f",[106,171,172],{"class":116},";",[106,174,176],{"class":175},"sJ8bj"," \u002F\u002F要写上f,编辑器默认是双精度，鼠标放上去也是双精度，用float的变量去接受这个数字时会多做一步从双精度到单精度的转换，写上f就直接是单精度\n",[106,178,179,181,184,186,189,192,195,197],{"class":108,"line":28},[106,180,156],{"class":112},[106,182,183],{"class":116}," f2",[106,185,162],{"class":112},[106,187,188],{"class":165},"3",[106,190,191],{"class":112},"e",[106,193,194],{"class":165},"2",[106,196,172],{"class":116},[106,198,199],{"class":175}," \u002F\u002F科学记数法\n",[77,201,203],{"id":202},"_133字符型","1.3.3字符型",[97,205,207],{"className":99,"code":206,"language":101,"meta":25,"style":25},"char ch='a'\n",[103,208,209],{"__ignoreMap":25},[106,210,211,214,217,219],{"class":108,"line":109},[106,212,213],{"class":112},"char",[106,215,216],{"class":116}," ch",[106,218,162],{"class":112},[106,220,222],{"class":221},"sZZnC","'a'\n",[14,224,146],{},[60,226,227,230,233,236],{},[63,228,229],{},"在显示字符型变量时，只能单引号，双引号x",[63,231,232],{},"单引号内只能一个字符，不能字符串",[63,234,235],{},"c和c++字符型变量只占用一个字符",[63,237,238],{},"字符型变量并不是把字符本身放到内存中存储，而是将对应的ASCII编码放入到存储单元",[14,240,241],{},"ASCII码大致由以下两部分组成：",[60,243,244,247],{},[63,245,246],{},"ASCII非打印控制字符：ASCII表上的数字0-31分配给了控制字符，用于控制像打印机等一些外围设备",[63,248,249],{},"ASCII打印字符：数字32-126分配给了能在键盘上找到的字符，当查看或打印文档时就会出现（65A；97a）",[14,251,252],{},"ASCII码表格：",[254,255,256,300],"table",{},[257,258,259],"thead",{},[260,261,262,270,275,279,284,288,292,296],"tr",{},[263,264,265,269],"th",{},[266,267,268],"strong",{},"ASCII","值",[263,271,272],{},[266,273,274],{},"控制字符",[263,276,277,269],{},[266,278,268],{},[263,280,281],{},[266,282,283],{},"字符",[263,285,286,269],{},[266,287,268],{},[263,289,290],{},[266,291,283],{},[263,293,294,269],{},[266,295,268],{},[263,297,298],{},[266,299,283],{},[301,302,303,330,356,381,406,432,457,482,508,533,559,585,611,636,662,688,714,738,763,788,813,838,863,888,913,938,963,989,1014,1039,1064,1090],"tbody",{},[260,304,305,309,312,315,318,321,324,327],{},[306,307,308],"td",{},"0",[306,310,311],{},"NUT",[306,313,314],{},"32",[306,316,317],{},"(space)",[306,319,320],{},"64",[306,322,323],{},"@",[306,325,326],{},"96",[306,328,329],{},"、",[260,331,332,335,338,341,344,347,350,353],{},[306,333,334],{},"1",[306,336,337],{},"SOH",[306,339,340],{},"33",[306,342,343],{},"!",[306,345,346],{},"65",[306,348,349],{},"A",[306,351,352],{},"97",[306,354,355],{},"a",[260,357,358,360,363,366,369,372,375,378],{},[306,359,194],{},[306,361,362],{},"STX",[306,364,365],{},"34",[306,367,368],{},"\"",[306,370,371],{},"66",[306,373,374],{},"B",[306,376,377],{},"98",[306,379,380],{},"b",[260,382,383,385,388,391,394,397,400,403],{},[306,384,188],{},[306,386,387],{},"ETX",[306,389,390],{},"35",[306,392,393],{},"#",[306,395,396],{},"67",[306,398,399],{},"C",[306,401,402],{},"99",[306,404,405],{},"c",[260,407,408,411,414,417,420,423,426,429],{},[306,409,410],{},"4",[306,412,413],{},"EOT",[306,415,416],{},"36",[306,418,419],{},"$",[306,421,422],{},"68",[306,424,425],{},"D",[306,427,428],{},"100",[306,430,431],{},"d",[260,433,434,437,440,443,446,449,452,455],{},[306,435,436],{},"5",[306,438,439],{},"ENQ",[306,441,442],{},"37",[306,444,445],{},"%",[306,447,448],{},"69",[306,450,451],{},"E",[306,453,454],{},"101",[306,456,191],{},[260,458,459,462,465,468,471,474,477,480],{},[306,460,461],{},"6",[306,463,464],{},"ACK",[306,466,467],{},"38",[306,469,470],{},"&",[306,472,473],{},"70",[306,475,476],{},"F",[306,478,479],{},"102",[306,481,169],{},[260,483,484,487,490,493,496,499,502,505],{},[306,485,486],{},"7",[306,488,489],{},"BEL",[306,491,492],{},"39",[306,494,495],{},",",[306,497,498],{},"71",[306,500,501],{},"G",[306,503,504],{},"103",[306,506,507],{},"g",[260,509,510,513,516,519,521,524,527,530],{},[306,511,512],{},"8",[306,514,515],{},"BS",[306,517,518],{},"40",[306,520,117],{},[306,522,523],{},"72",[306,525,526],{},"H",[306,528,529],{},"104",[306,531,532],{},"h",[260,534,535,538,541,544,547,550,553,556],{},[306,536,537],{},"9",[306,539,540],{},"HT",[306,542,543],{},"41",[306,545,546],{},")",[306,548,549],{},"73",[306,551,552],{},"I",[306,554,555],{},"105",[306,557,558],{},"i",[260,560,561,564,567,570,573,576,579,582],{},[306,562,563],{},"10",[306,565,566],{},"LF",[306,568,569],{},"42",[306,571,572],{},"*",[306,574,575],{},"74",[306,577,578],{},"J",[306,580,581],{},"106",[306,583,584],{},"j",[260,586,587,590,593,596,599,602,605,608],{},[306,588,589],{},"11",[306,591,592],{},"VT",[306,594,595],{},"43",[306,597,598],{},"+",[306,600,601],{},"75",[306,603,604],{},"K",[306,606,607],{},"107",[306,609,610],{},"k",[260,612,613,616,619,622,624,627,630,633],{},[306,614,615],{},"12",[306,617,618],{},"FF",[306,620,621],{},"44",[306,623,495],{},[306,625,626],{},"76",[306,628,629],{},"L",[306,631,632],{},"108",[306,634,635],{},"l",[260,637,638,641,644,647,650,653,656,659],{},[306,639,640],{},"13",[306,642,643],{},"CR",[306,645,646],{},"45",[306,648,649],{},"-",[306,651,652],{},"77",[306,654,655],{},"M",[306,657,658],{},"109",[306,660,661],{},"m",[260,663,664,667,670,673,676,679,682,685],{},[306,665,666],{},"14",[306,668,669],{},"SO",[306,671,672],{},"46",[306,674,675],{},".",[306,677,678],{},"78",[306,680,681],{},"N",[306,683,684],{},"110",[306,686,687],{},"n",[260,689,690,693,696,699,702,705,708,711],{},[306,691,692],{},"15",[306,694,695],{},"SI",[306,697,698],{},"47",[306,700,701],{},"\u002F",[306,703,704],{},"79",[306,706,707],{},"O",[306,709,710],{},"111",[306,712,713],{},"o",[260,715,716,719,722,725,727,730,733,736],{},[306,717,718],{},"16",[306,720,721],{},"DLE",[306,723,724],{},"48",[306,726,308],{},[306,728,729],{},"80",[306,731,732],{},"P",[306,734,735],{},"112",[306,737,14],{},[260,739,740,743,746,749,751,754,757,760],{},[306,741,742],{},"17",[306,744,745],{},"DCI",[306,747,748],{},"49",[306,750,334],{},[306,752,753],{},"81",[306,755,756],{},"Q",[306,758,759],{},"113",[306,761,762],{},"q",[260,764,765,768,771,774,776,779,782,785],{},[306,766,767],{},"18",[306,769,770],{},"DC2",[306,772,773],{},"50",[306,775,194],{},[306,777,778],{},"82",[306,780,781],{},"R",[306,783,784],{},"114",[306,786,787],{},"r",[260,789,790,793,796,799,801,804,807,810],{},[306,791,792],{},"19",[306,794,795],{},"DC3",[306,797,798],{},"51",[306,800,188],{},[306,802,803],{},"83",[306,805,806],{},"S",[306,808,809],{},"115",[306,811,812],{},"s",[260,814,815,818,821,824,826,829,832,835],{},[306,816,817],{},"20",[306,819,820],{},"DC4",[306,822,823],{},"52",[306,825,410],{},[306,827,828],{},"84",[306,830,831],{},"T",[306,833,834],{},"116",[306,836,837],{},"t",[260,839,840,843,846,849,851,854,857,860],{},[306,841,842],{},"21",[306,844,845],{},"NAK",[306,847,848],{},"53",[306,850,436],{},[306,852,853],{},"85",[306,855,856],{},"U",[306,858,859],{},"117",[306,861,862],{},"u",[260,864,865,868,871,874,876,879,882,885],{},[306,866,867],{},"22",[306,869,870],{},"SYN",[306,872,873],{},"54",[306,875,461],{},[306,877,878],{},"86",[306,880,881],{},"V",[306,883,884],{},"118",[306,886,887],{},"v",[260,889,890,893,896,899,901,904,907,910],{},[306,891,892],{},"23",[306,894,895],{},"TB",[306,897,898],{},"55",[306,900,486],{},[306,902,903],{},"87",[306,905,906],{},"W",[306,908,909],{},"119",[306,911,912],{},"w",[260,914,915,918,921,924,926,929,932,935],{},[306,916,917],{},"24",[306,919,920],{},"CAN",[306,922,923],{},"56",[306,925,512],{},[306,927,928],{},"88",[306,930,931],{},"X",[306,933,934],{},"120",[306,936,937],{},"x",[260,939,940,943,946,949,951,954,957,960],{},[306,941,942],{},"25",[306,944,945],{},"EM",[306,947,948],{},"57",[306,950,537],{},[306,952,953],{},"89",[306,955,956],{},"Y",[306,958,959],{},"121",[306,961,962],{},"y",[260,964,965,968,971,974,977,980,983,986],{},[306,966,967],{},"26",[306,969,970],{},"SUB",[306,972,973],{},"58",[306,975,976],{},":",[306,978,979],{},"90",[306,981,982],{},"Z",[306,984,985],{},"122",[306,987,988],{},"z",[260,990,991,994,997,1000,1002,1005,1008,1011],{},[306,992,993],{},"27",[306,995,996],{},"ESC",[306,998,999],{},"59",[306,1001,172],{},[306,1003,1004],{},"91",[306,1006,1007],{},"[",[306,1009,1010],{},"123",[306,1012,1013],{},"{",[260,1015,1016,1019,1022,1025,1028,1031,1033,1036],{},[306,1017,1018],{},"28",[306,1020,1021],{},"FS",[306,1023,1024],{},"60",[306,1026,1027],{},"\u003C",[306,1029,1030],{},"92",[306,1032,701],{},[306,1034,1035],{},"124",[306,1037,1038],{},"|",[260,1040,1041,1044,1047,1050,1052,1055,1058,1061],{},[306,1042,1043],{},"29",[306,1045,1046],{},"GS",[306,1048,1049],{},"61",[306,1051,162],{},[306,1053,1054],{},"93",[306,1056,1057],{},"]",[306,1059,1060],{},"125",[306,1062,1063],{},"}",[260,1065,1066,1069,1072,1075,1078,1081,1084,1087],{},[306,1067,1068],{},"30",[306,1070,1071],{},"RS",[306,1073,1074],{},"62",[306,1076,1077],{},">",[306,1079,1080],{},"94",[306,1082,1083],{},"^",[306,1085,1086],{},"126",[306,1088,1089],{},"`",[260,1091,1092,1095,1098,1101,1104,1107,1110,1113],{},[306,1093,1094],{},"31",[306,1096,1097],{},"US",[306,1099,1100],{},"63",[306,1102,1103],{},"?",[306,1105,1106],{},"95",[306,1108,1109],{},"_",[306,1111,1112],{},"127",[306,1114,1115],{},"DEL",[14,1117,1118,1119,1122],{},"ASCII 码大致由以下",[266,1120,1121],{},"两部分组","成：",[1124,1125,1126,1133],"ul",{},[63,1127,1128,1129,1132],{},"ASCII 非打印控制字符： ASCII 表上的数字 ",[266,1130,1131],{},"0-31"," 分配给了控制字符，用于控制像打印机等一些外围设备。",[63,1134,1135,1136,1139],{},"ASCII 打印字符：数字 ",[266,1137,1138],{},"32-126"," 分配给了能在键盘上找到的字符，当查看或打印文档时就会出现。",[77,1141,1143],{"id":1142},"_134转义字符","1.3.4转义字符",[97,1145,1147],{"className":99,"code":1146,"language":101,"meta":25,"style":25},"\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",[103,1148,1149,1154,1170,1185,1191,1205,1211],{"__ignoreMap":25},[106,1150,1151],{"class":108,"line":109},[106,1152,1153],{"class":175},"\u002F\u002F换行符\n",[106,1155,1156,1159,1162,1165,1167],{"class":108,"line":28},[106,1157,1158],{"class":116},"cout ",[106,1160,1161],{"class":112},"\u003C\u003C",[106,1163,1164],{"class":221},"\"hello world\u002Fn\"",[106,1166,172],{"class":116},[106,1168,1169],{"class":175}," \u002F\u002F就等同于如下：\n",[106,1171,1173,1175,1177,1180,1182],{"class":108,"line":1172},3,[106,1174,1158],{"class":116},[106,1176,1161],{"class":112},[106,1178,1179],{"class":221},"\"hello world\"",[106,1181,1161],{"class":112},[106,1183,1184],{"class":116},"endl;\n",[106,1186,1188],{"class":108,"line":1187},4,[106,1189,1190],{"class":175},"\u002F\u002F反斜杠\n",[106,1192,1194,1196,1198,1201,1203],{"class":108,"line":1193},5,[106,1195,1158],{"class":116},[106,1197,1161],{"class":112},[106,1199,1200],{"class":221},"\"\u002F\u002F\"",[106,1202,1161],{"class":112},[106,1204,1184],{"class":116},[106,1206,1208],{"class":108,"line":1207},6,[106,1209,1210],{"class":175},"\u002F\u002F水平制表符\n",[106,1212,1214,1216,1218,1221,1224,1227,1229,1232],{"class":108,"line":1213},7,[106,1215,1158],{"class":116},[106,1217,1161],{"class":112},[106,1219,1220],{"class":221},"\"aaaa",[106,1222,1223],{"class":165},"\\t",[106,1225,1226],{"class":221},"helloworld\"",[106,1228,1161],{"class":112},[106,1230,1231],{"class":116},"endl;",[106,1233,1234],{"class":175}," \u002F\u002F输出窗口时有对齐效果\n",[77,1236,1238],{"id":1237},"_135字符串型","1.3.5字符串型",[14,1240,1241,1242,1244],{},"char 变量名",[106,1243],{},"=\"字符串值\"",[97,1246,1248],{"className":99,"code":1247,"language":101,"meta":25,"style":25},"\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",[103,1249,1250,1255,1260,1265,1270,1284,1297,1302,1308,1320],{"__ignoreMap":25},[106,1251,1252],{"class":108,"line":109},[106,1253,1254],{"class":175},"\u002F\u002Fc风格字符串\n",[106,1256,1257],{"class":108,"line":28},[106,1258,1259],{"class":175},"\u002F\u002F注意事项：\n",[106,1261,1262],{"class":108,"line":1172},[106,1263,1264],{"class":175},"\u002F\u002F1.char字符串名[]\n",[106,1266,1267],{"class":108,"line":1187},[106,1268,1269],{"class":175},"\u002F\u002F2.等号后面要用双引号，包含起来字符串\n",[106,1271,1272,1274,1277,1279,1281],{"class":108,"line":1193},[106,1273,213],{"class":112},[106,1275,1276],{"class":116}," str[]",[106,1278,162],{"class":112},[106,1280,1179],{"class":221},[106,1282,1283],{"class":116},";\n",[106,1285,1286,1288,1290,1293,1295],{"class":108,"line":1207},[106,1287,1158],{"class":116},[106,1289,1161],{"class":112},[106,1291,1292],{"class":116},"str",[106,1294,1161],{"class":112},[106,1296,1184],{"class":116},[106,1298,1299],{"class":108,"line":1213},[106,1300,1301],{"class":175},"\u002F\u002Fc++风格字符串\n",[106,1303,1305],{"class":108,"line":1304},8,[106,1306,1307],{"class":175},"\u002F\u002F需要先引用一个头文件 #include\u003Cstring>\n",[106,1309,1311,1314,1316,1318],{"class":108,"line":1310},9,[106,1312,1313],{"class":116},"string str2",[106,1315,162],{"class":112},[106,1317,1179],{"class":221},[106,1319,1283],{"class":116},[106,1321,1323,1325,1327,1330,1332],{"class":108,"line":1322},10,[106,1324,1158],{"class":116},[106,1326,1161],{"class":112},[106,1328,1329],{"class":116},"str2",[106,1331,1161],{"class":112},[106,1333,1184],{"class":116},[77,1335,1337],{"id":1336},"_136布尔类型bool","1.3.6布尔类型bool",[97,1339,1341],{"className":99,"code":1340,"language":101,"meta":25,"style":25},"bool flag=true;\ncout\u003C\u003Csizeof(flag)\u003C\u003Cendl; \u002F\u002F查看布尔占内存空间\n",[103,1342,1343,1358],{"__ignoreMap":25},[106,1344,1345,1348,1351,1353,1356],{"class":108,"line":109},[106,1346,1347],{"class":112},"bool",[106,1349,1350],{"class":116}," flag",[106,1352,162],{"class":112},[106,1354,1355],{"class":165},"true",[106,1357,1283],{"class":116},[106,1359,1360,1363,1366,1369,1371,1373],{"class":108,"line":28},[106,1361,1362],{"class":116},"cout",[106,1364,1365],{"class":112},"\u003C\u003Csizeof",[106,1367,1368],{"class":116},"(flag)",[106,1370,1161],{"class":112},[106,1372,1231],{"class":116},[106,1374,1375],{"class":175}," \u002F\u002F查看布尔占内存空间\n",[48,1377,1379],{"id":1378},"_14键盘输入cin","1.4键盘输入cin",[97,1381,1383],{"className":99,"code":1382,"language":101,"meta":25,"style":25},"int a=0;\ncout\u003C\u003C\"请给整型变量a赋值\"\u003C\u003Ca\u003C\u003Cendl;\ncin >> a;\ncout \u003C\u003C \"整型变量a=\" \u003C\u003Ca\u003C\u003Cendl; \n",[103,1384,1385,1398,1415,1426],{"__ignoreMap":25},[106,1386,1387,1389,1392,1394,1396],{"class":108,"line":109},[106,1388,120],{"class":112},[106,1390,1391],{"class":116}," a",[106,1393,162],{"class":112},[106,1395,308],{"class":165},[106,1397,1283],{"class":116},[106,1399,1400,1402,1404,1407,1409,1411,1413],{"class":108,"line":28},[106,1401,1362],{"class":116},[106,1403,1161],{"class":112},[106,1405,1406],{"class":221},"\"请给整型变量a赋值\"",[106,1408,1161],{"class":112},[106,1410,355],{"class":116},[106,1412,1161],{"class":112},[106,1414,1184],{"class":116},[106,1416,1417,1420,1423],{"class":108,"line":1172},[106,1418,1419],{"class":116},"cin ",[106,1421,1422],{"class":112},">>",[106,1424,1425],{"class":116}," a;\n",[106,1427,1428,1430,1432,1435,1438,1440,1442],{"class":108,"line":1187},[106,1429,1158],{"class":116},[106,1431,1161],{"class":112},[106,1433,1434],{"class":221}," \"整型变量a=\"",[106,1436,1437],{"class":112}," \u003C\u003C",[106,1439,355],{"class":116},[106,1441,1161],{"class":112},[106,1443,1184],{"class":116},[48,1445,1447],{"id":1446},"_15运算符","1.5运算符",[77,1449,1451],{"id":1450},"_151算术运算符","1.5.1算术运算符",[14,1453,1454,1457],{},[23,1455],{"alt":25,"src":1456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-001.png","\n注意：",[60,1459,1460,1463,1466],{},[63,1461,1462],{},"两个整数相除，结果依然是整数，小数部分被去除掉了",[63,1464,1465],{},"两个小数不可以做取模运算",[63,1467,1468],{},"前置递增++a;后置递增a++，两者区别：前置递增先让变量+1,再进行表达式计算；后置递增是先让表达式运算，再让变量+1",[77,1470,1472],{"id":1471},"_152赋值运算符","1.5.2赋值运算符",[14,1474,1475],{},[23,1476],{"alt":25,"src":1477},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-002.png",[77,1479,1481],{"id":1480},"_153比较运算符","1.5.3比较运算符",[14,1483,1484],{},[23,1485],{"alt":25,"src":1486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-003.png",[77,1488,1490],{"id":1489},"_154逻辑运算符","1.5.4逻辑运算符",[14,1492,1493],{},[23,1494],{"alt":25,"src":1495},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-004.png",[48,1497,1499],{"id":1498},"_16程序流程结构","1.6程序流程结构",[77,1501,1503],{"id":1502},"_161选择结构","1.6.1选择结构",[60,1505,1506],{},[63,1507,1508],{},"if语句\n单行、多行、多条件if语句",[97,1510,1512],{"className":99,"code":1511,"language":101,"meta":25,"style":25},"\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",[103,1513,1514,1519,1534,1539,1553,1558,1563,1572,1585,1589,1602,1607,1613,1618,1632,1637,1643,1664,1669,1683,1688,1717,1722,1739,1744,1749,1754,1768,1773],{"__ignoreMap":25},[106,1515,1516],{"class":108,"line":109},[106,1517,1518],{"class":175},"\u002F\u002F单行格式if语句：if (条件){条件满足执行的语句}\n",[106,1520,1521,1524,1527,1529,1532],{"class":108,"line":28},[106,1522,1523],{"class":112},"if",[106,1525,1526],{"class":116},"(score",[106,1528,1077],{"class":112},[106,1530,1531],{"class":165},"600",[106,1533,123],{"class":116},[106,1535,1536],{"class":108,"line":1172},[106,1537,1538],{"class":116},"{\n",[106,1540,1541,1544,1546,1549,1551],{"class":108,"line":1187},[106,1542,1543],{"class":116},"    cout",[106,1545,1161],{"class":112},[106,1547,1548],{"class":221},"'这是单行if语句'",[106,1550,1161],{"class":112},[106,1552,1184],{"class":116},[106,1554,1555],{"class":108,"line":1193},[106,1556,1557],{"class":116},"}\n",[106,1559,1560],{"class":108,"line":1207},[106,1561,1562],{"class":175},"\u002F\u002F多行格式if语句：if (条件){条件满足执行的语句}else{条件不满足执行的语句}\n",[106,1564,1565,1567,1569],{"class":108,"line":1213},[106,1566,1419],{"class":116},[106,1568,1422],{"class":112},[106,1570,1571],{"class":116}," score\n",[106,1573,1574,1576,1578,1581,1583],{"class":108,"line":1304},[106,1575,1523],{"class":112},[106,1577,1526],{"class":116},[106,1579,1580],{"class":112},"\u003C=",[106,1582,1531],{"class":165},[106,1584,123],{"class":116},[106,1586,1587],{"class":108,"line":1310},[106,1588,1538],{"class":116},[106,1590,1591,1593,1595,1598,1600],{"class":108,"line":1322},[106,1592,1543],{"class":116},[106,1594,1422],{"class":112},[106,1596,1597],{"class":221},"\"小于等于600\"",[106,1599,1161],{"class":112},[106,1601,1184],{"class":116},[106,1603,1605],{"class":108,"line":1604},11,[106,1606,1557],{"class":116},[106,1608,1610],{"class":108,"line":1609},12,[106,1611,1612],{"class":112},"else\n",[106,1614,1616],{"class":108,"line":1615},13,[106,1617,1538],{"class":116},[106,1619,1621,1623,1625,1628,1630],{"class":108,"line":1620},14,[106,1622,1543],{"class":116},[106,1624,1422],{"class":112},[106,1626,1627],{"class":221},"\"大于600\"",[106,1629,1422],{"class":112},[106,1631,1184],{"class":116},[106,1633,1635],{"class":108,"line":1634},15,[106,1636,1557],{"class":116},[106,1638,1640],{"class":108,"line":1639},16,[106,1641,1642],{"class":175},"\u002F\u002F多条件格式if语句：if (条件){条件1满足执行的语句}else if{条件2满足执行的语句}····else{条件不满足执行的语句}\n",[106,1644,1646,1648,1651,1653,1655,1658,1660,1662],{"class":108,"line":1645},17,[106,1647,1523],{"class":112},[106,1649,1650],{"class":116}," (",[106,1652,308],{"class":165},[106,1654,1027],{"class":112},[106,1656,1657],{"class":116},"num",[106,1659,1027],{"class":112},[106,1661,428],{"class":165},[106,1663,123],{"class":116},[106,1665,1667],{"class":108,"line":1666},18,[106,1668,1538],{"class":116},[106,1670,1672,1674,1676,1679,1681],{"class":108,"line":1671},19,[106,1673,1543],{"class":116},[106,1675,1161],{"class":112},[106,1677,1678],{"class":221},"\"小于100\"",[106,1680,1161],{"class":112},[106,1682,1184],{"class":116},[106,1684,1686],{"class":108,"line":1685},20,[106,1687,1557],{"class":116},[106,1689,1691,1694,1697,1700,1703,1705,1708,1710,1712,1715],{"class":108,"line":1690},21,[106,1692,1693],{"class":112},"else",[106,1695,1696],{"class":112}," if",[106,1698,1699],{"class":116}," (nmu",[106,1701,1702],{"class":112},">=",[106,1704,428],{"class":165},[106,1706,1707],{"class":112},"&&",[106,1709,1657],{"class":116},[106,1711,1027],{"class":112},[106,1713,1714],{"class":165},"200",[106,1716,123],{"class":116},[106,1718,1720],{"class":108,"line":1719},22,[106,1721,1538],{"class":116},[106,1723,1725,1727,1729,1732,1734,1736],{"class":108,"line":1724},23,[106,1726,1543],{"class":116},[106,1728,1161],{"class":112},[106,1730,1731],{"class":221},"\"不小于100且小于200\"",[106,1733,1161],{"class":112},[106,1735,1231],{"class":116},[106,1737,1738],{"class":175}," \u002F\u002F可以无限else if,python中是elif：\n",[106,1740,1742],{"class":108,"line":1741},24,[106,1743,1557],{"class":116},[106,1745,1747],{"class":108,"line":1746},25,[106,1748,1612],{"class":112},[106,1750,1752],{"class":108,"line":1751},26,[106,1753,1538],{"class":116},[106,1755,1757,1759,1761,1764,1766],{"class":108,"line":1756},27,[106,1758,1543],{"class":116},[106,1760,1161],{"class":112},[106,1762,1763],{"class":221},"\"不小于200\"",[106,1765,1161],{"class":112},[106,1767,1184],{"class":116},[106,1769,1771],{"class":108,"line":1770},28,[106,1772,1557],{"class":116},[106,1774,1776],{"class":108,"line":1775},29,[106,1777,1778],{"class":175},"\u002F\u002F 嵌套if语句(if套if,注意条件即可)\n",[60,1780,1781],{"start":28},[63,1782,1783],{},"三目运算符",[97,1785,1787],{"className":99,"code":1786,"language":101,"meta":25,"style":25},"\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",[103,1788,1789,1794,1799,1825,1847,1864,1869,1892,1907],{"__ignoreMap":25},[106,1790,1791],{"class":108,"line":109},[106,1792,1793],{"class":175},"\u002F\u002F创建三个变量a,b,c\n",[106,1795,1796],{"class":108,"line":28},[106,1797,1798],{"class":175},"\u002F\u002F将a和b做比较，将变量大的值赋值给变量c\n",[106,1800,1801,1803,1805,1807,1809,1812,1814,1816,1819,1821,1823],{"class":108,"line":1172},[106,1802,120],{"class":112},[106,1804,1391],{"class":116},[106,1806,162],{"class":112},[106,1808,817],{"class":165},[106,1810,1811],{"class":116},",b",[106,1813,162],{"class":112},[106,1815,563],{"class":165},[106,1817,1818],{"class":116},",c",[106,1820,162],{"class":112},[106,1822,308],{"class":165},[106,1824,1283],{"class":116},[106,1826,1827,1829,1831,1834,1836,1838,1840,1842,1844],{"class":108,"line":1187},[106,1828,405],{"class":116},[106,1830,162],{"class":112},[106,1832,1833],{"class":116},"(a",[106,1835,1077],{"class":112},[106,1837,380],{"class":116},[106,1839,1103],{"class":112},[106,1841,355],{"class":116},[106,1843,976],{"class":112},[106,1845,1846],{"class":116},"b)\n",[106,1848,1849,1851,1853,1856,1858,1860,1862],{"class":108,"line":1193},[106,1850,1362],{"class":116},[106,1852,1161],{"class":112},[106,1854,1855],{"class":221},"\"c=\"",[106,1857,1161],{"class":112},[106,1859,405],{"class":116},[106,1861,1161],{"class":112},[106,1863,1184],{"class":116},[106,1865,1866],{"class":108,"line":1207},[106,1867,1868],{"class":175},"\u002F\u002F在c++中三目运算符返回的是变量，可以继续赋值\n",[106,1870,1871,1873,1875,1877,1879,1881,1883,1886,1888,1890],{"class":108,"line":1213},[106,1872,1833],{"class":116},[106,1874,1077],{"class":112},[106,1876,380],{"class":116},[106,1878,1103],{"class":112},[106,1880,355],{"class":116},[106,1882,976],{"class":112},[106,1884,1885],{"class":116},"b)",[106,1887,162],{"class":112},[106,1889,428],{"class":165},[106,1891,1283],{"class":116},[106,1893,1894,1896,1898,1900,1902,1904],{"class":108,"line":1304},[106,1895,1362],{"class":116},[106,1897,1161],{"class":112},[106,1899,355],{"class":116},[106,1901,1161],{"class":112},[106,1903,1231],{"class":116},[106,1905,1906],{"class":175}," \u002F\u002F100  a是大于b的，将100赋值给了a\n",[106,1908,1909,1911,1913,1915,1917,1919],{"class":108,"line":1310},[106,1910,1362],{"class":116},[106,1912,1161],{"class":112},[106,1914,380],{"class":116},[106,1916,1161],{"class":112},[106,1918,1231],{"class":116},[106,1920,1921],{"class":175}," \u002F\u002F10   a>b,b还是原值\n",[60,1923,1924],{"start":1172},[63,1925,1926],{},"switch语句\n执行多条件分支语句\n注意：python没有switch语句\nswitch(表达式)\n{\ncase 结果1:执行语句;break;\ncase 结果2:执行语句;break;\ncase 结果3:执行语句;break;\n···\ndefault:执行语句;break;\n}\n不写break就会一直往下执行",[97,1928,1930],{"className":99,"code":1929,"language":101,"meta":25,"style":25},"\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",[103,1931,1932,1937,1945,1959,1969,1973,1987,2000,2010,2018,2023,2048,2069,2091,2112,2134,2155,2175,2180],{"__ignoreMap":25},[106,1933,1934],{"class":108,"line":109},[106,1935,1936],{"class":175},"\u002F\u002F案例-电影打分\n",[106,1938,1939,1942],{"class":108,"line":28},[106,1940,1941],{"class":112},"#include",[106,1943,1944],{"class":221},"\u003Ciostream>\n",[106,1946,1947,1950,1953,1957],{"class":108,"line":1172},[106,1948,1949],{"class":112},"using",[106,1951,1952],{"class":112}," namespace",[106,1954,1956],{"class":1955},"sScJk"," std",[106,1958,1283],{"class":116},[106,1960,1961,1963,1966],{"class":108,"line":1187},[106,1962,120],{"class":112},[106,1964,1965],{"class":1955}," main",[106,1967,1968],{"class":116},"()\n",[106,1970,1971],{"class":108,"line":1193},[106,1972,1538],{"class":116},[106,1974,1975,1978,1981,1983,1985],{"class":108,"line":1207},[106,1976,1977],{"class":112},"    int",[106,1979,1980],{"class":116}," score",[106,1982,162],{"class":112},[106,1984,308],{"class":165},[106,1986,1283],{"class":116},[106,1988,1989,1991,1993,1996,1998],{"class":108,"line":1213},[106,1990,1543],{"class":116},[106,1992,1161],{"class":112},[106,1994,1995],{"class":221},"\"电影打分：\"",[106,1997,1161],{"class":112},[106,1999,1184],{"class":116},[106,2001,2002,2005,2007],{"class":108,"line":1304},[106,2003,2004],{"class":116},"    cin",[106,2006,1422],{"class":112},[106,2008,2009],{"class":116},"score;\n",[106,2011,2012,2015],{"class":108,"line":1310},[106,2013,2014],{"class":112},"    switch",[106,2016,2017],{"class":116},"(score)\n",[106,2019,2020],{"class":108,"line":1322},[106,2021,2022],{"class":116},"    {\n",[106,2024,2025,2028,2031,2034,2036,2039,2041,2043,2046],{"class":108,"line":1604},[106,2026,2027],{"class":112},"        case",[106,2029,2030],{"class":165}," 10",[106,2032,2033],{"class":116},":cout",[106,2035,1161],{"class":112},[106,2037,2038],{"class":221},"\"经典\"",[106,2040,1161],{"class":112},[106,2042,1231],{"class":116},[106,2044,2045],{"class":112},"break",[106,2047,1283],{"class":116},[106,2049,2050,2052,2055,2057,2059,2061,2063,2065,2067],{"class":108,"line":1609},[106,2051,2027],{"class":112},[106,2053,2054],{"class":165}," 9",[106,2056,2033],{"class":116},[106,2058,1161],{"class":112},[106,2060,2038],{"class":221},[106,2062,1161],{"class":112},[106,2064,1231],{"class":116},[106,2066,2045],{"class":112},[106,2068,1283],{"class":116},[106,2070,2071,2073,2076,2078,2080,2083,2085,2087,2089],{"class":108,"line":1615},[106,2072,2027],{"class":112},[106,2074,2075],{"class":165}," 8",[106,2077,2033],{"class":116},[106,2079,1161],{"class":112},[106,2081,2082],{"class":221},"\"非常好\"",[106,2084,1161],{"class":112},[106,2086,1231],{"class":116},[106,2088,2045],{"class":112},[106,2090,1283],{"class":116},[106,2092,2093,2095,2098,2100,2102,2104,2106,2108,2110],{"class":108,"line":1620},[106,2094,2027],{"class":112},[106,2096,2097],{"class":165}," 7",[106,2099,2033],{"class":116},[106,2101,1161],{"class":112},[106,2103,2082],{"class":221},[106,2105,1161],{"class":112},[106,2107,1231],{"class":116},[106,2109,2045],{"class":112},[106,2111,1283],{"class":116},[106,2113,2114,2116,2119,2121,2123,2126,2128,2130,2132],{"class":108,"line":1634},[106,2115,2027],{"class":112},[106,2117,2118],{"class":165}," 6",[106,2120,2033],{"class":116},[106,2122,1161],{"class":112},[106,2124,2125],{"class":221},"\"一般\"",[106,2127,1161],{"class":112},[106,2129,1231],{"class":116},[106,2131,2045],{"class":112},[106,2133,1283],{"class":116},[106,2135,2136,2138,2141,2143,2145,2147,2149,2151,2153],{"class":108,"line":1639},[106,2137,2027],{"class":112},[106,2139,2140],{"class":165}," 5",[106,2142,2033],{"class":116},[106,2144,1161],{"class":112},[106,2146,2125],{"class":221},[106,2148,1161],{"class":112},[106,2150,1231],{"class":116},[106,2152,2045],{"class":112},[106,2154,1283],{"class":116},[106,2156,2157,2160,2162,2164,2167,2169,2171,2173],{"class":108,"line":1645},[106,2158,2159],{"class":112},"        default",[106,2161,2033],{"class":116},[106,2163,1161],{"class":112},[106,2165,2166],{"class":221},"\"烂片\"",[106,2168,1161],{"class":112},[106,2170,1231],{"class":116},[106,2172,2045],{"class":112},[106,2174,1283],{"class":116},[106,2176,2177],{"class":108,"line":1666},[106,2178,2179],{"class":116},"    }\n",[106,2181,2182],{"class":108,"line":1671},[106,2183,1557],{"class":116},[14,2185,2186],{},"if和switch区别：",[1124,2188,2189,2192],{},[63,2190,2191],{},"switch缺点：判断时候只能是整行或者字符型，不可以是一个区间",[63,2193,2194],{},"switch优点：结构清晰，执行效率高",[77,2196,2198],{"id":2197},"_162循环结构","1.6.2循环结构",[60,2200,2201],{},[63,2202,2203],{},"while循环结构\n满足循环条件，执行循环语句\n语法：while(循环条件){循环语句}",[97,2205,2207],{"className":99,"code":2206,"language":101,"meta":25,"style":25},"\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",[103,2208,2209,2214,2222,2226,2239,2253,2257,2277,2287,2291,2303],{"__ignoreMap":25},[106,2210,2211],{"class":108,"line":109},[106,2212,2213],{"class":175},"\u002F\u002F打印0-9数字\n",[106,2215,2216,2218,2220],{"class":108,"line":28},[106,2217,120],{"class":112},[106,2219,1965],{"class":1955},[106,2221,1968],{"class":116},[106,2223,2224],{"class":108,"line":1172},[106,2225,1538],{"class":116},[106,2227,2228,2230,2233,2235,2237],{"class":108,"line":1187},[106,2229,1977],{"class":112},[106,2231,2232],{"class":116}," num",[106,2234,162],{"class":112},[106,2236,308],{"class":165},[106,2238,1283],{"class":116},[106,2240,2241,2244,2247,2249,2251],{"class":108,"line":1193},[106,2242,2243],{"class":112},"    while",[106,2245,2246],{"class":116},"(num",[106,2248,1027],{"class":112},[106,2250,563],{"class":165},[106,2252,123],{"class":116},[106,2254,2255],{"class":108,"line":1207},[106,2256,2022],{"class":116},[106,2258,2259,2262,2265,2267,2269,2271,2274],{"class":108,"line":1213},[106,2260,2261],{"class":1955},"       std",[106,2263,2264],{"class":116},"::cout",[106,2266,1161],{"class":112},[106,2268,1657],{"class":116},[106,2270,1161],{"class":112},[106,2272,2273],{"class":1955},"std",[106,2275,2276],{"class":116},"::endl;\n",[106,2278,2279,2282,2285],{"class":108,"line":1304},[106,2280,2281],{"class":116},"        num",[106,2283,2284],{"class":112},"++",[106,2286,1283],{"class":116},[106,2288,2289],{"class":108,"line":1310},[106,2290,2179],{"class":116},[106,2292,2293,2296,2298,2301],{"class":108,"line":1322},[106,2294,2295],{"class":1955},"    system",[106,2297,117],{"class":116},[106,2299,2300],{"class":221},"\"pause\"",[106,2302,123],{"class":116},[106,2304,2305],{"class":108,"line":1604},[106,2306,1557],{"class":116},[14,2308,2309],{},"注意：写好循环条件，避免死循环情况",[97,2311,2313],{"className":99,"code":2312,"language":101,"meta":25,"style":25},"\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",[103,2314,2315,2320,2327,2334,2344,2352,2356,2361,2388,2393,2398,2406,2433,2438,2443,2456,2466,2470,2480,2485,2498,2503,2517,2522,2537,2541,2554,2558,2563,2567,2581,2589,2594,2600,2606,2611],{"__ignoreMap":25},[106,2316,2317],{"class":108,"line":109},[106,2318,2319],{"class":175},"\u002F\u002F循环结构-猜数字\n",[106,2321,2322,2324],{"class":108,"line":28},[106,2323,1941],{"class":112},[106,2325,2326],{"class":221}," \u003Ciostream>\n",[106,2328,2329,2331],{"class":108,"line":1172},[106,2330,1941],{"class":112},[106,2332,2333],{"class":221}," \u003Cctime>\n",[106,2335,2336,2338,2340,2342],{"class":108,"line":1187},[106,2337,1949],{"class":112},[106,2339,1952],{"class":112},[106,2341,1956],{"class":1955},[106,2343,1283],{"class":116},[106,2345,2346,2348,2350],{"class":108,"line":1193},[106,2347,120],{"class":112},[106,2349,1965],{"class":1955},[106,2351,1968],{"class":116},[106,2353,2354],{"class":108,"line":1207},[106,2355,1538],{"class":116},[106,2357,2358],{"class":108,"line":1213},[106,2359,2360],{"class":175},"    \u002F\u002F添加随机数种子，利用当前系统时间生成随机数，防止每次随机数相同\n",[106,2362,2363,2366,2369,2372,2375,2377,2380,2382,2385],{"class":108,"line":1304},[106,2364,2365],{"class":1955},"    srand",[106,2367,2368],{"class":116},"((",[106,2370,2371],{"class":112},"unsigned",[106,2373,2374],{"class":112}," int",[106,2376,546],{"class":116},[106,2378,2379],{"class":1955},"time",[106,2381,117],{"class":116},[106,2383,2384],{"class":165},"NULL",[106,2386,2387],{"class":116},"));\n",[106,2389,2390],{"class":108,"line":1310},[106,2391,2392],{"emptyLinePlaceholder":33},"\n",[106,2394,2395],{"class":108,"line":1322},[106,2396,2397],{"class":175},"    \u002F\u002F1.系统生成随机数\n",[106,2399,2400,2403],{"class":108,"line":1604},[106,2401,2402],{"class":175},"    \u002F\u002Frand()%100",[106,2404,2405],{"class":175}," \u002F\u002F生成0-99的随机数\n",[106,2407,2408,2410,2412,2414,2417,2420,2422,2424,2426,2428,2430],{"class":108,"line":1609},[106,2409,1977],{"class":112},[106,2411,2232],{"class":116},[106,2413,162],{"class":112},[106,2415,2416],{"class":1955},"rand",[106,2418,2419],{"class":116},"()",[106,2421,445],{"class":112},[106,2423,428],{"class":165},[106,2425,598],{"class":112},[106,2427,334],{"class":165},[106,2429,172],{"class":116},[106,2431,2432],{"class":175}," \u002F\u002F这是个伪随机数，每次都不同，要想每次不同就添加随机数种子\n",[106,2434,2435],{"class":108,"line":1615},[106,2436,2437],{"class":175},"    \u002F\u002Fcout\u003C\u003C\"系统生成了一个1-100之间的随机数，请你来猜：\"\u003C\u003Cendl;\n",[106,2439,2440],{"class":108,"line":1620},[106,2441,2442],{"class":175},"    \u002F\u002F2.玩家猜测\n",[106,2444,2445,2447,2450,2452,2454],{"class":108,"line":1634},[106,2446,1977],{"class":112},[106,2448,2449],{"class":116}," val",[106,2451,162],{"class":112},[106,2453,308],{"class":165},[106,2455,1283],{"class":116},[106,2457,2458,2460,2462,2464],{"class":108,"line":1639},[106,2459,2243],{"class":112},[106,2461,1650],{"class":116},[106,2463,334],{"class":165},[106,2465,123],{"class":116},[106,2467,2468],{"class":108,"line":1645},[106,2469,2022],{"class":116},[106,2471,2472,2475,2477],{"class":108,"line":1666},[106,2473,2474],{"class":116},"        cin",[106,2476,1422],{"class":112},[106,2478,2479],{"class":116},"val;\n",[106,2481,2482],{"class":108,"line":1671},[106,2483,2484],{"class":175},"        \u002F\u002F3.判断玩家猜测\n",[106,2486,2487,2490,2493,2495],{"class":108,"line":1685},[106,2488,2489],{"class":112},"        if",[106,2491,2492],{"class":116},"(val",[106,2494,1027],{"class":112},[106,2496,2497],{"class":116},"num) \n",[106,2499,2500],{"class":108,"line":1690},[106,2501,2502],{"class":116},"        {\n",[106,2504,2505,2508,2510,2513,2515],{"class":108,"line":1719},[106,2506,2507],{"class":116},"            cout",[106,2509,1161],{"class":112},[106,2511,2512],{"class":221},"\"猜小了！\"",[106,2514,1161],{"class":112},[106,2516,1184],{"class":116},[106,2518,2519],{"class":108,"line":1724},[106,2520,2521],{"class":116},"        }\n",[106,2523,2524,2527,2529,2532,2534],{"class":108,"line":1741},[106,2525,2526],{"class":112},"        else",[106,2528,1696],{"class":112},[106,2530,2531],{"class":116}," (val",[106,2533,1077],{"class":112},[106,2535,2536],{"class":116},"num)\n",[106,2538,2539],{"class":108,"line":1746},[106,2540,2502],{"class":116},[106,2542,2543,2545,2547,2550,2552],{"class":108,"line":1751},[106,2544,2507],{"class":116},[106,2546,1161],{"class":112},[106,2548,2549],{"class":221},"\"猜大了！\"",[106,2551,1161],{"class":112},[106,2553,1184],{"class":116},[106,2555,2556],{"class":108,"line":1756},[106,2557,2521],{"class":116},[106,2559,2560],{"class":108,"line":1770},[106,2561,2562],{"class":112},"        else\n",[106,2564,2565],{"class":108,"line":1775},[106,2566,2502],{"class":116},[106,2568,2570,2572,2574,2577,2579],{"class":108,"line":2569},30,[106,2571,2507],{"class":116},[106,2573,1161],{"class":112},[106,2575,2576],{"class":221},"\"猜对了！\"",[106,2578,1161],{"class":112},[106,2580,1184],{"class":116},[106,2582,2584,2587],{"class":108,"line":2583},31,[106,2585,2586],{"class":112},"            break",[106,2588,1283],{"class":116},[106,2590,2592],{"class":108,"line":2591},32,[106,2593,2521],{"class":116},[106,2595,2597],{"class":108,"line":2596},33,[106,2598,2599],{"class":175},"        \u002F\u002F猜对 退出游戏\n",[106,2601,2603],{"class":108,"line":2602},34,[106,2604,2605],{"class":175},"        \u002F\u002F猜错 提示猜的结果 过大或者过小 重新返回第二步\n",[106,2607,2609],{"class":108,"line":2608},35,[106,2610,2179],{"class":116},[106,2612,2614],{"class":108,"line":2613},36,[106,2615,1557],{"class":116},[60,2617,2618],{"start":28},[63,2619,2620,2621,2624],{},"do...while循环结构\n语法： do{循环语句}while(循环条件)；\n与while的区别在于",[266,2622,2623],{},"do...while会先执行一次循环语句","，在判断循环语句",[97,2626,2628],{"className":99,"code":2627,"language":101,"meta":25,"style":25},"\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",[103,2629,2630,2635,2643,2647,2659,2667,2671,2688,2695,2699,2712,2722],{"__ignoreMap":25},[106,2631,2632],{"class":108,"line":109},[106,2633,2634],{"class":175},"\u002F\u002F在屏幕中输出0-9这10个数字\n",[106,2636,2637,2639,2641],{"class":108,"line":28},[106,2638,120],{"class":112},[106,2640,1965],{"class":1955},[106,2642,1968],{"class":116},[106,2644,2645],{"class":108,"line":1172},[106,2646,1538],{"class":116},[106,2648,2649,2651,2653,2655,2657],{"class":108,"line":1187},[106,2650,1977],{"class":112},[106,2652,2232],{"class":116},[106,2654,162],{"class":112},[106,2656,308],{"class":165},[106,2658,1283],{"class":116},[106,2660,2661,2664],{"class":108,"line":1193},[106,2662,2663],{"class":112},"    do",[106,2665,2666],{"class":116}," \n",[106,2668,2669],{"class":108,"line":1207},[106,2670,2022],{"class":116},[106,2672,2673,2676,2678,2680,2682,2684,2686],{"class":108,"line":1213},[106,2674,2675],{"class":1955},"        std",[106,2677,2264],{"class":116},[106,2679,1161],{"class":112},[106,2681,1657],{"class":116},[106,2683,1161],{"class":112},[106,2685,2273],{"class":1955},[106,2687,2276],{"class":116},[106,2689,2690,2692],{"class":108,"line":1304},[106,2691,2281],{"class":116},[106,2693,2694],{"class":112},"++\n",[106,2696,2697],{"class":108,"line":1310},[106,2698,2179],{"class":116},[106,2700,2701,2703,2705,2707,2709],{"class":108,"line":1322},[106,2702,2243],{"class":112},[106,2704,2246],{"class":116},[106,2706,1027],{"class":112},[106,2708,563],{"class":165},[106,2710,2711],{"class":116},");\n",[106,2713,2714,2716,2718,2720],{"class":108,"line":1604},[106,2715,2295],{"class":1955},[106,2717,117],{"class":116},[106,2719,2300],{"class":221},[106,2721,2711],{"class":116},[106,2723,2724],{"class":108,"line":1609},[106,2725,1557],{"class":116},[14,2727,2728],{},"案例-水仙花数",[14,2730,2731],{},"描述：水仙花数是指一个3位数，它的每个位上的数字的3次幂之和等于它本身",[14,2733,2734],{},"例如：1^3+5^3+3^3=153",[14,2736,2737],{},"请用do...while语句，求出所有3位数的水仙花数",[97,2739,2741],{"className":99,"code":2740,"language":101,"meta":25,"style":25},"#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",[103,2742,2743,2749,2759,2767,2771,2776,2788,2794,2798,2803,2819,2835,2851,2866,2885,2900,2948,2952,2964,2968,2976,2980,2994],{"__ignoreMap":25},[106,2744,2745,2747],{"class":108,"line":109},[106,2746,1941],{"class":112},[106,2748,2326],{"class":221},[106,2750,2751,2753,2755,2757],{"class":108,"line":28},[106,2752,1949],{"class":112},[106,2754,1952],{"class":112},[106,2756,1956],{"class":1955},[106,2758,1283],{"class":116},[106,2760,2761,2763,2765],{"class":108,"line":1172},[106,2762,120],{"class":112},[106,2764,1965],{"class":1955},[106,2766,1968],{"class":116},[106,2768,2769],{"class":108,"line":1187},[106,2770,1538],{"class":116},[106,2772,2773],{"class":108,"line":1193},[106,2774,2775],{"class":175},"    \u002F\u002F1.先打印所有三位数字\n",[106,2777,2778,2780,2782,2784,2786],{"class":108,"line":1207},[106,2779,1977],{"class":112},[106,2781,2232],{"class":116},[106,2783,162],{"class":112},[106,2785,428],{"class":165},[106,2787,1283],{"class":116},[106,2789,2790,2792],{"class":108,"line":1213},[106,2791,2663],{"class":112},[106,2793,2666],{"class":116},[106,2795,2796],{"class":108,"line":1304},[106,2797,2022],{"class":116},[106,2799,2800],{"class":108,"line":1310},[106,2801,2802],{"class":175},"        \u002F\u002F2.从所有三位数字中找到水仙花数\n",[106,2804,2805,2808,2810,2812,2814,2816],{"class":108,"line":1322},[106,2806,2807],{"class":112},"        int",[106,2809,1391],{"class":116},[106,2811,162],{"class":112},[106,2813,308],{"class":165},[106,2815,172],{"class":116},[106,2817,2818],{"class":175}," \u002F\u002F个位\n",[106,2820,2821,2823,2826,2828,2830,2832],{"class":108,"line":1604},[106,2822,2807],{"class":112},[106,2824,2825],{"class":116}," b",[106,2827,162],{"class":112},[106,2829,308],{"class":165},[106,2831,172],{"class":116},[106,2833,2834],{"class":175}," \u002F\u002F十位\n",[106,2836,2837,2839,2842,2844,2846,2848],{"class":108,"line":1609},[106,2838,2807],{"class":112},[106,2840,2841],{"class":116}," c",[106,2843,162],{"class":112},[106,2845,308],{"class":165},[106,2847,172],{"class":116},[106,2849,2850],{"class":175}," \u002F\u002F百位\n",[106,2852,2853,2856,2858,2860,2862,2864],{"class":108,"line":1615},[106,2854,2855],{"class":116},"        a",[106,2857,162],{"class":112},[106,2859,1657],{"class":116},[106,2861,445],{"class":112},[106,2863,563],{"class":165},[106,2865,1283],{"class":116},[106,2867,2868,2871,2873,2875,2877,2879,2881,2883],{"class":108,"line":1620},[106,2869,2870],{"class":116},"        b",[106,2872,162],{"class":112},[106,2874,1657],{"class":116},[106,2876,701],{"class":112},[106,2878,563],{"class":165},[106,2880,445],{"class":112},[106,2882,563],{"class":165},[106,2884,1283],{"class":116},[106,2886,2887,2890,2892,2894,2896,2898],{"class":108,"line":1634},[106,2888,2889],{"class":116},"        c",[106,2891,162],{"class":112},[106,2893,1657],{"class":116},[106,2895,701],{"class":112},[106,2897,428],{"class":165},[106,2899,1283],{"class":116},[106,2901,2902,2904,2906,2908,2910,2912,2914,2916,2918,2920,2922,2924,2926,2928,2930,2932,2934,2936,2939,2942,2945],{"class":108,"line":1639},[106,2903,2489],{"class":112},[106,2905,1833],{"class":116},[106,2907,572],{"class":112},[106,2909,355],{"class":116},[106,2911,572],{"class":112},[106,2913,355],{"class":116},[106,2915,598],{"class":112},[106,2917,380],{"class":116},[106,2919,572],{"class":112},[106,2921,380],{"class":116},[106,2923,572],{"class":112},[106,2925,380],{"class":116},[106,2927,598],{"class":112},[106,2929,405],{"class":116},[106,2931,572],{"class":112},[106,2933,405],{"class":116},[106,2935,572],{"class":112},[106,2937,2938],{"class":116},"c ",[106,2940,2941],{"class":112},"==",[106,2943,2944],{"class":116}," num)",[106,2946,2947],{"class":175}," \u002F\u002F如果是水仙花数，才打印\n",[106,2949,2950],{"class":108,"line":1645},[106,2951,2502],{"class":116},[106,2953,2954,2956,2958,2960,2962],{"class":108,"line":1666},[106,2955,2507],{"class":116},[106,2957,1161],{"class":112},[106,2959,1657],{"class":116},[106,2961,1161],{"class":112},[106,2963,1184],{"class":116},[106,2965,2966],{"class":108,"line":1671},[106,2967,2521],{"class":116},[106,2969,2970,2972,2974],{"class":108,"line":1685},[106,2971,2281],{"class":116},[106,2973,2284],{"class":112},[106,2975,1283],{"class":116},[106,2977,2978],{"class":108,"line":1690},[106,2979,2179],{"class":116},[106,2981,2982,2984,2987,2989,2992],{"class":108,"line":1719},[106,2983,2243],{"class":112},[106,2985,2986],{"class":116}," (num ",[106,2988,1027],{"class":112},[106,2990,2991],{"class":165}," 1000",[106,2993,2711],{"class":116},[106,2995,2996],{"class":108,"line":1724},[106,2997,1557],{"class":116},[60,2999,3000],{"start":1172},[63,3001,3002],{},"for循环语句\n语法：for(起始表达式；条件表达式；末尾循环体){循环语句;}",[97,3004,3006],{"className":99,"code":3005,"language":101,"meta":25,"style":25},"\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",[103,3007,3008,3013,3042,3046,3058,3062,3067,3078,3085,3089,3103,3107,3114,3118,3130,3139],{"__ignoreMap":25},[106,3009,3010],{"class":108,"line":109},[106,3011,3012],{"class":175},"\u002F\u002F从数字0-9打印\n",[106,3014,3015,3018,3020,3022,3025,3027,3029,3032,3034,3036,3038,3040],{"class":108,"line":28},[106,3016,3017],{"class":112},"for",[106,3019,117],{"class":116},[106,3021,120],{"class":112},[106,3023,3024],{"class":116}," i",[106,3026,162],{"class":112},[106,3028,308],{"class":165},[106,3030,3031],{"class":116},";i",[106,3033,1027],{"class":112},[106,3035,563],{"class":165},[106,3037,3031],{"class":116},[106,3039,2284],{"class":112},[106,3041,123],{"class":116},[106,3043,3044],{"class":108,"line":1172},[106,3045,1538],{"class":116},[106,3047,3048,3050,3052,3054,3056],{"class":108,"line":1187},[106,3049,1543],{"class":116},[106,3051,1161],{"class":112},[106,3053,558],{"class":116},[106,3055,1161],{"class":112},[106,3057,1184],{"class":116},[106,3059,3060],{"class":108,"line":1193},[106,3061,1557],{"class":116},[106,3063,3064],{"class":108,"line":1207},[106,3065,3066],{"class":175},"\u002F\u002F上式可以进行拆分\n",[106,3068,3069,3071,3073,3075],{"class":108,"line":1213},[106,3070,120],{"class":112},[106,3072,3024],{"class":116},[106,3074,162],{"class":112},[106,3076,3077],{"class":165},"0\n",[106,3079,3080,3082],{"class":108,"line":1304},[106,3081,3017],{"class":112},[106,3083,3084],{"class":116},"(;;;)\n",[106,3086,3087],{"class":108,"line":1310},[106,3088,1538],{"class":116},[106,3090,3091,3094,3097,3099,3101],{"class":108,"line":1322},[106,3092,3093],{"class":112},"    if",[106,3095,3096],{"class":116},"(i",[106,3098,1702],{"class":112},[106,3100,563],{"class":165},[106,3102,123],{"class":116},[106,3104,3105],{"class":108,"line":1604},[106,3106,2022],{"class":116},[106,3108,3109,3112],{"class":108,"line":1609},[106,3110,3111],{"class":112},"        break",[106,3113,1283],{"class":116},[106,3115,3116],{"class":108,"line":1615},[106,3117,2179],{"class":116},[106,3119,3120,3122,3124,3126,3128],{"class":108,"line":1620},[106,3121,1543],{"class":116},[106,3123,1161],{"class":112},[106,3125,558],{"class":116},[106,3127,1161],{"class":112},[106,3129,1184],{"class":116},[106,3131,3132,3135,3137],{"class":108,"line":1634},[106,3133,3134],{"class":116},"    i",[106,3136,2284],{"class":112},[106,3138,1283],{"class":116},[106,3140,3141],{"class":108,"line":1639},[106,3142,1557],{"class":116},[14,3144,3145],{},"小练习",[97,3147,3149],{"className":99,"code":3148,"language":101,"meta":25,"style":25},"#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",[103,3150,3151,3157,3167,3175,3179,3184,3189,3217,3221,3226,3231,3272,3276,3289,3293,3297,3301,3313,3317,3321],{"__ignoreMap":25},[106,3152,3153,3155],{"class":108,"line":109},[106,3154,1941],{"class":112},[106,3156,1944],{"class":221},[106,3158,3159,3161,3163,3165],{"class":108,"line":28},[106,3160,1949],{"class":112},[106,3162,1952],{"class":112},[106,3164,1956],{"class":1955},[106,3166,1283],{"class":116},[106,3168,3169,3171,3173],{"class":108,"line":1172},[106,3170,120],{"class":112},[106,3172,1965],{"class":1955},[106,3174,1968],{"class":116},[106,3176,3177],{"class":108,"line":1187},[106,3178,1538],{"class":116},[106,3180,3181],{"class":108,"line":1193},[106,3182,3183],{"class":175},"    \u002F\u002F敲桌子案例\n",[106,3185,3186],{"class":108,"line":1207},[106,3187,3188],{"class":175},"    \u002F\u002F1.先输出1-100的数字\n",[106,3190,3191,3194,3196,3198,3200,3202,3204,3207,3209,3211,3213,3215],{"class":108,"line":1213},[106,3192,3193],{"class":112},"    for",[106,3195,117],{"class":116},[106,3197,120],{"class":112},[106,3199,3024],{"class":116},[106,3201,162],{"class":112},[106,3203,334],{"class":165},[106,3205,3206],{"class":116},"; i",[106,3208,1580],{"class":112},[106,3210,428],{"class":165},[106,3212,3206],{"class":116},[106,3214,2284],{"class":112},[106,3216,123],{"class":116},[106,3218,3219],{"class":108,"line":1304},[106,3220,2022],{"class":116},[106,3222,3223],{"class":108,"line":1310},[106,3224,3225],{"class":175},"        \u002F\u002F2.从100个数字中找到特殊数字，打印敲桌子\n",[106,3227,3228],{"class":108,"line":1322},[106,3229,3230],{"class":175},"        \u002F\u002F如果是7的倍数、个为有7、或者十位有7,打印敲桌子\n",[106,3232,3233,3235,3237,3239,3241,3243,3245,3248,3250,3252,3254,3256,3258,3260,3262,3264,3266,3268,3270],{"class":108,"line":1604},[106,3234,2489],{"class":112},[106,3236,3096],{"class":116},[106,3238,445],{"class":112},[106,3240,486],{"class":165},[106,3242,2941],{"class":112},[106,3244,308],{"class":165},[106,3246,3247],{"class":112}," ||",[106,3249,3024],{"class":116},[106,3251,445],{"class":112},[106,3253,563],{"class":165},[106,3255,2941],{"class":112},[106,3257,486],{"class":165},[106,3259,3247],{"class":112},[106,3261,3024],{"class":116},[106,3263,701],{"class":112},[106,3265,563],{"class":165},[106,3267,2941],{"class":112},[106,3269,486],{"class":165},[106,3271,123],{"class":116},[106,3273,3274],{"class":108,"line":1609},[106,3275,2502],{"class":116},[106,3277,3278,3280,3282,3285,3287],{"class":108,"line":1615},[106,3279,2507],{"class":116},[106,3281,1161],{"class":112},[106,3283,3284],{"class":221},"\"敲桌子\"",[106,3286,1161],{"class":112},[106,3288,1184],{"class":116},[106,3290,3291],{"class":108,"line":1620},[106,3292,2521],{"class":116},[106,3294,3295],{"class":108,"line":1634},[106,3296,2562],{"class":112},[106,3298,3299],{"class":108,"line":1639},[106,3300,2502],{"class":116},[106,3302,3303,3305,3307,3309,3311],{"class":108,"line":1645},[106,3304,2507],{"class":116},[106,3306,1161],{"class":112},[106,3308,558],{"class":116},[106,3310,1161],{"class":112},[106,3312,1184],{"class":116},[106,3314,3315],{"class":108,"line":1666},[106,3316,2521],{"class":116},[106,3318,3319],{"class":108,"line":1671},[106,3320,2179],{"class":116},[106,3322,3323],{"class":108,"line":1685},[106,3324,1557],{"class":116},[14,3326,3327],{},"嵌套实现星图",[97,3329,3331],{"className":99,"code":3330,"language":101,"meta":25,"style":25},"#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",[103,3332,3333,3339,3349,3357,3361,3387,3391,3420,3424,3435,3439,3448,3452],{"__ignoreMap":25},[106,3334,3335,3337],{"class":108,"line":109},[106,3336,1941],{"class":112},[106,3338,1944],{"class":221},[106,3340,3341,3343,3345,3347],{"class":108,"line":28},[106,3342,1949],{"class":112},[106,3344,1952],{"class":112},[106,3346,1956],{"class":1955},[106,3348,1283],{"class":116},[106,3350,3351,3353,3355],{"class":108,"line":1172},[106,3352,120],{"class":112},[106,3354,1965],{"class":1955},[106,3356,1968],{"class":116},[106,3358,3359],{"class":108,"line":1187},[106,3360,1538],{"class":116},[106,3362,3363,3365,3367,3369,3371,3373,3375,3377,3379,3381,3383,3385],{"class":108,"line":1193},[106,3364,3193],{"class":112},[106,3366,1650],{"class":116},[106,3368,120],{"class":112},[106,3370,3024],{"class":116},[106,3372,162],{"class":112},[106,3374,308],{"class":165},[106,3376,3031],{"class":116},[106,3378,1027],{"class":112},[106,3380,563],{"class":165},[106,3382,3031],{"class":116},[106,3384,2284],{"class":112},[106,3386,123],{"class":116},[106,3388,3389],{"class":108,"line":1207},[106,3390,2022],{"class":116},[106,3392,3393,3396,3398,3400,3403,3405,3407,3410,3412,3414,3416,3418],{"class":108,"line":1213},[106,3394,3395],{"class":112},"        for",[106,3397,1650],{"class":116},[106,3399,120],{"class":112},[106,3401,3402],{"class":116}," j",[106,3404,162],{"class":112},[106,3406,308],{"class":165},[106,3408,3409],{"class":116},";j",[106,3411,1027],{"class":112},[106,3413,563],{"class":165},[106,3415,3409],{"class":116},[106,3417,2284],{"class":112},[106,3419,123],{"class":116},[106,3421,3422],{"class":108,"line":1304},[106,3423,2502],{"class":116},[106,3425,3426,3428,3430,3433],{"class":108,"line":1310},[106,3427,2507],{"class":116},[106,3429,1161],{"class":112},[106,3431,3432],{"class":221},"\"*\"",[106,3434,1283],{"class":116},[106,3436,3437],{"class":108,"line":1322},[106,3438,2521],{"class":116},[106,3440,3441,3444,3446],{"class":108,"line":1604},[106,3442,3443],{"class":116},"        cout",[106,3445,1161],{"class":112},[106,3447,1184],{"class":116},[106,3449,3450],{"class":108,"line":1609},[106,3451,2179],{"class":116},[106,3453,3454],{"class":108,"line":1615},[106,3455,1557],{"class":116},[14,3457,3458],{},"乘法口诀表",[97,3460,3462],{"className":99,"code":3461,"language":101,"meta":25,"style":25},"#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",[103,3463,3464,3470,3480,3488,3492,3518,3522,3547,3551,3591,3595,3603,3607],{"__ignoreMap":25},[106,3465,3466,3468],{"class":108,"line":109},[106,3467,1941],{"class":112},[106,3469,2326],{"class":221},[106,3471,3472,3474,3476,3478],{"class":108,"line":28},[106,3473,1949],{"class":112},[106,3475,1952],{"class":112},[106,3477,1956],{"class":1955},[106,3479,1283],{"class":116},[106,3481,3482,3484,3486],{"class":108,"line":1172},[106,3483,120],{"class":112},[106,3485,1965],{"class":1955},[106,3487,1968],{"class":116},[106,3489,3490],{"class":108,"line":1187},[106,3491,1538],{"class":116},[106,3493,3494,3496,3498,3500,3502,3504,3506,3508,3510,3512,3514,3516],{"class":108,"line":1193},[106,3495,3193],{"class":112},[106,3497,117],{"class":116},[106,3499,120],{"class":112},[106,3501,3024],{"class":116},[106,3503,162],{"class":112},[106,3505,334],{"class":165},[106,3507,3031],{"class":116},[106,3509,1027],{"class":112},[106,3511,563],{"class":165},[106,3513,3031],{"class":116},[106,3515,2284],{"class":112},[106,3517,123],{"class":116},[106,3519,3520],{"class":108,"line":1207},[106,3521,2022],{"class":116},[106,3523,3524,3526,3528,3530,3532,3534,3536,3538,3540,3543,3545],{"class":108,"line":1213},[106,3525,3395],{"class":112},[106,3527,117],{"class":116},[106,3529,120],{"class":112},[106,3531,3402],{"class":116},[106,3533,162],{"class":112},[106,3535,334],{"class":165},[106,3537,3409],{"class":116},[106,3539,1580],{"class":112},[106,3541,3542],{"class":116},"i;j",[106,3544,2284],{"class":112},[106,3546,123],{"class":116},[106,3548,3549],{"class":108,"line":1304},[106,3550,2502],{"class":116},[106,3552,3553,3555,3557,3559,3561,3563,3565,3567,3569,3572,3574,3576,3578,3580,3582,3585,3587,3589],{"class":108,"line":1310},[106,3554,2507],{"class":116},[106,3556,1161],{"class":112},[106,3558,584],{"class":116},[106,3560,1161],{"class":112},[106,3562,3432],{"class":221},[106,3564,1161],{"class":112},[106,3566,558],{"class":116},[106,3568,1161],{"class":112},[106,3570,3571],{"class":221},"\"=\"",[106,3573,1161],{"class":112},[106,3575,558],{"class":116},[106,3577,572],{"class":112},[106,3579,584],{"class":116},[106,3581,1161],{"class":112},[106,3583,3584],{"class":221},"'",[106,3586,1223],{"class":165},[106,3588,3584],{"class":221},[106,3590,1283],{"class":116},[106,3592,3593],{"class":108,"line":1322},[106,3594,2521],{"class":116},[106,3596,3597,3599,3601],{"class":108,"line":1604},[106,3598,3443],{"class":116},[106,3600,1161],{"class":112},[106,3602,1184],{"class":116},[106,3604,3605],{"class":108,"line":1609},[106,3606,2179],{"class":116},[106,3608,3609],{"class":108,"line":1615},[106,3610,1557],{"class":116},[77,3612,3614],{"id":3613},"_163跳出语句","1.6.3跳出语句",[60,3616,3617],{},[63,3618,3619],{},"break语句\n作用：用于跳出选择结构或者循环结构",[14,3621,3622],{},"break使用时机：",[1124,3624,3625,3628,3631],{},[63,3626,3627],{},"出现在switch条件语句中，作用是终止case并跳出switch",[63,3629,3630],{},"出现在循环结构中，作用是跳出当前的循环结构",[63,3632,3633],{},"出现在嵌套循环中，跳出最近的内层循环语句",[60,3635,3636,3639],{"start":28},[63,3637,3638],{},"continue语句\n作用：在循环语句中，跳过本次循环中余下尚未执行的语句，继续执行下一次循环",[63,3640,3641],{},"goto语句\n语法：goto 标记;",[14,3643,3644],{},"解释：如果标记的名称存在，执行到goto语句时，会跳转到标记的位置（类似于html中的a标签）",[97,3646,3648],{"className":99,"code":3647,"language":101,"meta":25,"style":25},"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",[103,3649,3650,3658,3662,3675,3685,3698,3711,3724,3732,3748],{"__ignoreMap":25},[106,3651,3652,3654,3656],{"class":108,"line":109},[106,3653,120],{"class":112},[106,3655,1965],{"class":1955},[106,3657,1968],{"class":116},[106,3659,3660],{"class":108,"line":28},[106,3661,1538],{"class":116},[106,3663,3664,3666,3668,3671,3673],{"class":108,"line":1172},[106,3665,1543],{"class":116},[106,3667,1161],{"class":112},[106,3669,3670],{"class":221},"\"1\"",[106,3672,1161],{"class":112},[106,3674,1184],{"class":116},[106,3676,3677,3680,3683],{"class":108,"line":1187},[106,3678,3679],{"class":112},"    goto",[106,3681,3682],{"class":1955}," FLAG",[106,3684,1283],{"class":116},[106,3686,3687,3689,3691,3694,3696],{"class":108,"line":1193},[106,3688,1543],{"class":116},[106,3690,1161],{"class":112},[106,3692,3693],{"class":221},"\"2\"",[106,3695,1161],{"class":112},[106,3697,1184],{"class":116},[106,3699,3700,3702,3704,3707,3709],{"class":108,"line":1207},[106,3701,1543],{"class":116},[106,3703,1161],{"class":112},[106,3705,3706],{"class":221},"\"3\"",[106,3708,1161],{"class":112},[106,3710,1184],{"class":116},[106,3712,3713,3715,3717,3720,3722],{"class":108,"line":1213},[106,3714,1543],{"class":116},[106,3716,1161],{"class":112},[106,3718,3719],{"class":221},"\"4\"",[106,3721,1161],{"class":112},[106,3723,1184],{"class":116},[106,3725,3726,3729],{"class":108,"line":1304},[106,3727,3728],{"class":1955},"    FLAG",[106,3730,3731],{"class":116},":\n",[106,3733,3734,3736,3738,3741,3743,3745],{"class":108,"line":1310},[106,3735,1543],{"class":116},[106,3737,1161],{"class":112},[106,3739,3740],{"class":221},"\"5\"",[106,3742,1161],{"class":112},[106,3744,1231],{"class":116},[106,3746,3747],{"class":175},"\u002F\u002F跳过了2,3,4,直接到5\n",[106,3749,3750],{"class":108,"line":1322},[106,3751,1557],{"class":116},[48,3753,3755],{"id":3754},"_17数组","1.7数组",[77,3757,3759],{"id":3758},"_171一维数组","1.7.1一维数组",[60,3761,3762],{},[63,3763,3764],{},"一维数组定义方式",[254,3766,3767,3777],{},[257,3768,3769],{},[260,3770,3771,3774],{},[263,3772,3773],{},"方式",[263,3775,3776],{},"注意事项",[301,3778,3779,3793,3803],{},[260,3780,3781,3787],{},[306,3782,3783,3784,172],{},"数据类型 数组名",[106,3785,3786],{},"数组长度",[306,3788,3789,3790,3792],{},"这种方式是先定义再arr",[106,3791,558],{},"赋值",[260,3794,3795,3800],{},[306,3796,3783,3797,3799],{},[106,3798,3786],{},"={值1,值2....};",[306,3801,3802],{},"如果在初始化数据时，没有全部填写完，会用0来填补剩余数据",[260,3804,3805,3809],{},[306,3806,3783,3807,3799],{},[106,3808],{},[306,3810,3811,3812,3814],{},"int arr",[106,3813],{},";这是不正确的，按照这样的方式定义必须有初始长度",[60,3816,3817],{"start":28},[63,3818,3819],{},"一维数组数组名\n用途：",[1124,3821,3822],{},[63,3823,3824],{},"1.可以统计整个数组在内存中的长度：",[97,3826,3828],{"className":99,"code":3827,"language":101,"meta":25,"style":25},"sizeof(arr);\nsizeof(arr[0]);\n",[103,3829,3830,3837],{"__ignoreMap":25},[106,3831,3832,3834],{"class":108,"line":109},[106,3833,113],{"class":112},[106,3835,3836],{"class":116},"(arr);\n",[106,3838,3839,3841,3844,3846],{"class":108,"line":28},[106,3840,113],{"class":112},[106,3842,3843],{"class":116},"(arr[",[106,3845,308],{"class":165},[106,3847,3848],{"class":116},"]);\n",[1124,3850,3851],{},[63,3852,3853],{},"2.可以获取数组在内存中的首地址:",[97,3855,3857],{"className":99,"code":3856,"language":101,"meta":25,"style":25},"\u002F\u002F查看16进制的首地址\ncout\u003C\u003Carr\u003C\u003Cendl;\n\u002F\u002F看10进制数\ncout\u003C\u003C(int)&arr[0]\u003C\u003Cendl;\n",[103,3858,3859,3864,3877,3882],{"__ignoreMap":25},[106,3860,3861],{"class":108,"line":109},[106,3862,3863],{"class":175},"\u002F\u002F查看16进制的首地址\n",[106,3865,3866,3868,3870,3873,3875],{"class":108,"line":28},[106,3867,1362],{"class":116},[106,3869,1161],{"class":112},[106,3871,3872],{"class":116},"arr",[106,3874,1161],{"class":112},[106,3876,1184],{"class":116},[106,3878,3879],{"class":108,"line":1172},[106,3880,3881],{"class":175},"\u002F\u002F看10进制数\n",[106,3883,3884,3886,3888,3890,3892,3894,3896,3899,3901,3903,3905],{"class":108,"line":1187},[106,3885,1362],{"class":116},[106,3887,1161],{"class":112},[106,3889,117],{"class":116},[106,3891,120],{"class":112},[106,3893,546],{"class":116},[106,3895,470],{"class":112},[106,3897,3898],{"class":116},"arr[",[106,3900,308],{"class":165},[106,3902,1057],{"class":116},[106,3904,1161],{"class":112},[106,3906,1184],{"class":116},[14,3908,3909],{},"数组名是常量，不可以进行赋值操作\n3. 小案例",[1124,3911,3912],{},[63,3913,3914],{},"1️⃣五只小猪称体重",[97,3916,3918],{"className":99,"code":3917,"language":101,"meta":25,"style":25},"#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",[103,3919,3920,3926,3936,3944,3948,3988,4001,4027,4031,4043,4047,4057,4061,4065,4078,4088],{"__ignoreMap":25},[106,3921,3922,3924],{"class":108,"line":109},[106,3923,1941],{"class":112},[106,3925,1944],{"class":221},[106,3927,3928,3930,3932,3934],{"class":108,"line":28},[106,3929,1949],{"class":112},[106,3931,1952],{"class":112},[106,3933,1956],{"class":1955},[106,3935,1283],{"class":116},[106,3937,3938,3940,3942],{"class":108,"line":1172},[106,3939,120],{"class":112},[106,3941,1965],{"class":1955},[106,3943,1968],{"class":116},[106,3945,3946],{"class":108,"line":1187},[106,3947,1538],{"class":116},[106,3949,3950,3952,3955,3957,3959,3961,3963,3966,3968,3971,3973,3975,3977,3980,3982,3985],{"class":108,"line":1193},[106,3951,1977],{"class":112},[106,3953,3954],{"class":116}," arr[",[106,3956,436],{"class":165},[106,3958,1057],{"class":116},[106,3960,162],{"class":112},[106,3962,1013],{"class":116},[106,3964,3965],{"class":165},"300",[106,3967,495],{"class":116},[106,3969,3970],{"class":165},"350",[106,3972,495],{"class":116},[106,3974,1714],{"class":165},[106,3976,495],{"class":116},[106,3978,3979],{"class":165},"400",[106,3981,495],{"class":116},[106,3983,3984],{"class":165},"250",[106,3986,3987],{"class":116},"};\n",[106,3989,3990,3992,3995,3997,3999],{"class":108,"line":1207},[106,3991,1977],{"class":112},[106,3993,3994],{"class":116}," tmp",[106,3996,162],{"class":112},[106,3998,308],{"class":165},[106,4000,1283],{"class":116},[106,4002,4003,4005,4007,4009,4011,4013,4015,4017,4019,4021,4023,4025],{"class":108,"line":1213},[106,4004,3193],{"class":112},[106,4006,1650],{"class":116},[106,4008,120],{"class":112},[106,4010,3024],{"class":116},[106,4012,162],{"class":112},[106,4014,308],{"class":165},[106,4016,3031],{"class":116},[106,4018,1027],{"class":112},[106,4020,436],{"class":165},[106,4022,3031],{"class":116},[106,4024,2284],{"class":112},[106,4026,123],{"class":116},[106,4028,4029],{"class":108,"line":1304},[106,4030,2022],{"class":116},[106,4032,4033,4035,4038,4040],{"class":108,"line":1310},[106,4034,2489],{"class":112},[106,4036,4037],{"class":116},"(tmp",[106,4039,1027],{"class":112},[106,4041,4042],{"class":116},"arr[i])\n",[106,4044,4045],{"class":108,"line":1322},[106,4046,2502],{"class":116},[106,4048,4049,4052,4054],{"class":108,"line":1604},[106,4050,4051],{"class":116},"            tmp",[106,4053,162],{"class":112},[106,4055,4056],{"class":116},"arr[i];\n",[106,4058,4059],{"class":108,"line":1609},[106,4060,2521],{"class":116},[106,4062,4063],{"class":108,"line":1615},[106,4064,2179],{"class":116},[106,4066,4067,4069,4071,4074,4076],{"class":108,"line":1620},[106,4068,1543],{"class":116},[106,4070,1161],{"class":112},[106,4072,4073],{"class":116},"tmp",[106,4075,1161],{"class":112},[106,4077,1184],{"class":116},[106,4079,4080,4083,4086],{"class":108,"line":1634},[106,4081,4082],{"class":112},"    return",[106,4084,4085],{"class":165}," 0",[106,4087,1283],{"class":116},[106,4089,4090],{"class":108,"line":1639},[106,4091,1557],{"class":116},[1124,4093,4094],{},[63,4095,4096],{},"2️⃣数组元素逆置",[97,4098,4100],{"className":99,"code":4099,"language":101,"meta":25,"style":25},"\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",[103,4101,4102,4107,4113,4123,4131,4135,4170,4186,4218,4231,4236,4241,4253,4263,4273,4278,4287,4297,4302,4307,4334,4338,4354,4358,4369,4378],{"__ignoreMap":25},[106,4103,4104],{"class":108,"line":109},[106,4105,4106],{"class":175},"\u002F\u002F元素逆置\n",[106,4108,4109,4111],{"class":108,"line":28},[106,4110,1941],{"class":112},[106,4112,1944],{"class":221},[106,4114,4115,4117,4119,4121],{"class":108,"line":1172},[106,4116,1949],{"class":112},[106,4118,1952],{"class":112},[106,4120,1956],{"class":1955},[106,4122,1283],{"class":116},[106,4124,4125,4127,4129],{"class":108,"line":1187},[106,4126,120],{"class":112},[106,4128,1965],{"class":1955},[106,4130,1968],{"class":116},[106,4132,4133],{"class":108,"line":1193},[106,4134,1538],{"class":116},[106,4136,4137,4140,4142,4144,4146,4148,4150,4152,4154,4156,4158,4160,4162,4164,4166,4168],{"class":108,"line":1207},[106,4138,4139],{"class":112},"   int",[106,4141,3954],{"class":116},[106,4143,436],{"class":165},[106,4145,1057],{"class":116},[106,4147,162],{"class":112},[106,4149,1013],{"class":116},[106,4151,334],{"class":165},[106,4153,495],{"class":116},[106,4155,194],{"class":165},[106,4157,495],{"class":116},[106,4159,188],{"class":165},[106,4161,495],{"class":116},[106,4163,410],{"class":165},[106,4165,495],{"class":116},[106,4167,436],{"class":165},[106,4169,3987],{"class":116},[106,4171,4172,4174,4177,4179,4181,4183],{"class":108,"line":1213},[106,4173,4139],{"class":112},[106,4175,4176],{"class":116}," start",[106,4178,162],{"class":112},[106,4180,308],{"class":165},[106,4182,172],{"class":116},[106,4184,4185],{"class":175},"\u002F\u002F起始下标\n",[106,4187,4188,4190,4193,4196,4199,4202,4204,4206,4209,4211,4213,4215],{"class":108,"line":1304},[106,4189,4139],{"class":112},[106,4191,4192],{"class":116}," end",[106,4194,4195],{"class":112},"=sizeof",[106,4197,4198],{"class":116},"(arr)",[106,4200,4201],{"class":112},"\u002Fsizeof",[106,4203,3843],{"class":116},[106,4205,308],{"class":165},[106,4207,4208],{"class":116},"])",[106,4210,649],{"class":112},[106,4212,334],{"class":165},[106,4214,172],{"class":116},[106,4216,4217],{"class":175},"\u002F\u002F结束下标\n",[106,4219,4220,4223,4226,4228],{"class":108,"line":1310},[106,4221,4222],{"class":112},"   while",[106,4224,4225],{"class":116}," (start",[106,4227,1027],{"class":112},[106,4229,4230],{"class":116},"end)\n",[106,4232,4233],{"class":108,"line":1322},[106,4234,4235],{"class":116},"   {\n",[106,4237,4238],{"class":108,"line":1604},[106,4239,4240],{"class":175},"    \u002F\u002F实现元素互换代码\n",[106,4242,4243,4245,4248,4250],{"class":108,"line":1609},[106,4244,1977],{"class":112},[106,4246,4247],{"class":116}," temp",[106,4249,162],{"class":112},[106,4251,4252],{"class":116},"arr[start];\n",[106,4254,4255,4258,4260],{"class":108,"line":1615},[106,4256,4257],{"class":116},"    arr[start]",[106,4259,162],{"class":112},[106,4261,4262],{"class":116},"arr[end];\n",[106,4264,4265,4268,4270],{"class":108,"line":1620},[106,4266,4267],{"class":116},"    arr[end]",[106,4269,162],{"class":112},[106,4271,4272],{"class":116},"temp;\n",[106,4274,4275],{"class":108,"line":1634},[106,4276,4277],{"class":175},"    \u002F\u002F下标更新\n",[106,4279,4280,4283,4285],{"class":108,"line":1639},[106,4281,4282],{"class":116},"    start",[106,4284,2284],{"class":112},[106,4286,1283],{"class":116},[106,4288,4289,4292,4295],{"class":108,"line":1645},[106,4290,4291],{"class":116},"    end",[106,4293,4294],{"class":112},"--",[106,4296,1283],{"class":116},[106,4298,4299],{"class":108,"line":1666},[106,4300,4301],{"class":116},"   }\n",[106,4303,4304],{"class":108,"line":1671},[106,4305,4306],{"class":175},"   \u002F\u002F输出逆置后的数组\n",[106,4308,4309,4312,4314,4316,4318,4320,4322,4324,4326,4328,4330,4332],{"class":108,"line":1685},[106,4310,4311],{"class":112},"   for",[106,4313,1650],{"class":116},[106,4315,120],{"class":112},[106,4317,3024],{"class":116},[106,4319,162],{"class":112},[106,4321,308],{"class":165},[106,4323,3031],{"class":116},[106,4325,1027],{"class":112},[106,4327,436],{"class":165},[106,4329,3031],{"class":116},[106,4331,2284],{"class":112},[106,4333,123],{"class":116},[106,4335,4336],{"class":108,"line":1690},[106,4337,4235],{"class":116},[106,4339,4340,4342,4344,4347,4349,4352],{"class":108,"line":1719},[106,4341,1543],{"class":116},[106,4343,1161],{"class":112},[106,4345,4346],{"class":116},"arr[i]",[106,4348,1161],{"class":112},[106,4350,4351],{"class":221},"\" \"",[106,4353,1283],{"class":116},[106,4355,4356],{"class":108,"line":1724},[106,4357,4301],{"class":116},[106,4359,4360,4363,4365,4367],{"class":108,"line":1741},[106,4361,4362],{"class":1955},"   system",[106,4364,117],{"class":116},[106,4366,2300],{"class":221},[106,4368,2711],{"class":116},[106,4370,4371,4374,4376],{"class":108,"line":1746},[106,4372,4373],{"class":112},"   return",[106,4375,4085],{"class":165},[106,4377,1283],{"class":116},[106,4379,4380],{"class":108,"line":1751},[106,4381,1557],{"class":116},[1124,4383,4384],{},[63,4385,4386],{},"3️⃣冒泡排序\n对数组元素进行排序，做法：\n比较相邻的元素，如果第一个比第二个大，就交换他们；对每一对相邻元素做同样的工作，执行完毕后，找到第一个最大值；重复以上的步骤，每次比较次数-1,直到不需要比较",[97,4388,4390],{"className":99,"code":4389,"language":101,"meta":25,"style":25},"\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",[103,4391,4392,4397,4403,4413,4421,4425,4477,4490,4516,4520,4534,4538,4543,4548,4578,4582,4587,4621,4625,4630,4650,4655,4667,4683,4698,4703,4707,4711,4724,4750,4754,4768,4772,4780],{"__ignoreMap":25},[106,4393,4394],{"class":108,"line":109},[106,4395,4396],{"class":175},"\u002F\u002F冒泡排序,升序\n",[106,4398,4399,4401],{"class":108,"line":28},[106,4400,1941],{"class":112},[106,4402,1944],{"class":221},[106,4404,4405,4407,4409,4411],{"class":108,"line":1172},[106,4406,1949],{"class":112},[106,4408,1952],{"class":112},[106,4410,1956],{"class":1955},[106,4412,1283],{"class":116},[106,4414,4415,4417,4419],{"class":108,"line":1187},[106,4416,120],{"class":112},[106,4418,1965],{"class":1955},[106,4420,1968],{"class":116},[106,4422,4423],{"class":108,"line":1193},[106,4424,1538],{"class":116},[106,4426,4427,4429,4431,4433,4436,4438,4441,4443,4445,4447,4449,4451,4453,4455,4457,4459,4461,4463,4465,4467,4469,4471,4473,4475],{"class":108,"line":1207},[106,4428,1977],{"class":112},[106,4430,3954],{"class":116},[106,4432,537],{"class":165},[106,4434,4435],{"class":116},"] ",[106,4437,162],{"class":112},[106,4439,4440],{"class":116}," {",[106,4442,410],{"class":165},[106,4444,495],{"class":116},[106,4446,194],{"class":165},[106,4448,495],{"class":116},[106,4450,512],{"class":165},[106,4452,495],{"class":116},[106,4454,308],{"class":165},[106,4456,495],{"class":116},[106,4458,436],{"class":165},[106,4460,495],{"class":116},[106,4462,486],{"class":165},[106,4464,495],{"class":116},[106,4466,334],{"class":165},[106,4468,495],{"class":116},[106,4470,188],{"class":165},[106,4472,495],{"class":116},[106,4474,537],{"class":165},[106,4476,3987],{"class":116},[106,4478,4479,4481,4483,4486,4488],{"class":108,"line":1213},[106,4480,1543],{"class":116},[106,4482,1161],{"class":112},[106,4484,4485],{"class":221},"\"排序前：\"",[106,4487,1161],{"class":112},[106,4489,1184],{"class":116},[106,4491,4492,4494,4496,4498,4500,4502,4504,4506,4508,4510,4512,4514],{"class":108,"line":1304},[106,4493,3193],{"class":112},[106,4495,1650],{"class":116},[106,4497,120],{"class":112},[106,4499,3024],{"class":116},[106,4501,162],{"class":112},[106,4503,308],{"class":165},[106,4505,3031],{"class":116},[106,4507,1027],{"class":112},[106,4509,537],{"class":165},[106,4511,3031],{"class":116},[106,4513,2284],{"class":112},[106,4515,123],{"class":116},[106,4517,4518],{"class":108,"line":1310},[106,4519,2022],{"class":116},[106,4521,4522,4524,4526,4528,4530,4532],{"class":108,"line":1322},[106,4523,3443],{"class":116},[106,4525,1161],{"class":112},[106,4527,4346],{"class":116},[106,4529,1161],{"class":112},[106,4531,4351],{"class":221},[106,4533,1283],{"class":116},[106,4535,4536],{"class":108,"line":1604},[106,4537,2179],{"class":116},[106,4539,4540],{"class":108,"line":1609},[106,4541,4542],{"class":175},"    \u002F\u002F开始冒泡排序\n",[106,4544,4545],{"class":108,"line":1615},[106,4546,4547],{"class":175},"    \u002F\u002F总共排序轮数为 元素个数-1\n",[106,4549,4550,4552,4554,4556,4558,4560,4562,4564,4566,4568,4570,4572,4574,4576],{"class":108,"line":1620},[106,4551,3193],{"class":112},[106,4553,1650],{"class":116},[106,4555,120],{"class":112},[106,4557,3024],{"class":116},[106,4559,162],{"class":112},[106,4561,308],{"class":165},[106,4563,3031],{"class":116},[106,4565,1027],{"class":112},[106,4567,537],{"class":165},[106,4569,649],{"class":112},[106,4571,334],{"class":165},[106,4573,3031],{"class":116},[106,4575,2284],{"class":112},[106,4577,123],{"class":116},[106,4579,4580],{"class":108,"line":1634},[106,4581,2022],{"class":116},[106,4583,4584],{"class":108,"line":1639},[106,4585,4586],{"class":175},"        \u002F\u002F内层循环对比 次数=元素个数-1-当前轮数\n",[106,4588,4589,4591,4593,4595,4597,4599,4601,4603,4605,4607,4609,4611,4613,4615,4617,4619],{"class":108,"line":1645},[106,4590,3395],{"class":112},[106,4592,1650],{"class":116},[106,4594,120],{"class":112},[106,4596,3402],{"class":116},[106,4598,162],{"class":112},[106,4600,308],{"class":165},[106,4602,3409],{"class":116},[106,4604,1027],{"class":112},[106,4606,537],{"class":165},[106,4608,649],{"class":112},[106,4610,558],{"class":116},[106,4612,649],{"class":112},[106,4614,334],{"class":165},[106,4616,3409],{"class":116},[106,4618,2284],{"class":112},[106,4620,123],{"class":116},[106,4622,4623],{"class":108,"line":1666},[106,4624,2502],{"class":116},[106,4626,4627],{"class":108,"line":1671},[106,4628,4629],{"class":175},"            \u002F\u002F如果前一个元素大于后一个元素，则交换它们\n",[106,4631,4632,4635,4638,4640,4643,4645,4647],{"class":108,"line":1685},[106,4633,4634],{"class":112},"            if",[106,4636,4637],{"class":116},"(arr[j]",[106,4639,1077],{"class":112},[106,4641,4642],{"class":116},"arr[j",[106,4644,598],{"class":112},[106,4646,334],{"class":165},[106,4648,4649],{"class":116},"])\n",[106,4651,4652],{"class":108,"line":1690},[106,4653,4654],{"class":116},"            {\n",[106,4656,4657,4660,4662,4664],{"class":108,"line":1719},[106,4658,4659],{"class":112},"                int",[106,4661,4247],{"class":116},[106,4663,162],{"class":112},[106,4665,4666],{"class":116},"arr[j];\n",[106,4668,4669,4672,4674,4676,4678,4680],{"class":108,"line":1724},[106,4670,4671],{"class":116},"                arr[j]",[106,4673,162],{"class":112},[106,4675,4642],{"class":116},[106,4677,598],{"class":112},[106,4679,334],{"class":165},[106,4681,4682],{"class":116},"];\n",[106,4684,4685,4688,4690,4692,4694,4696],{"class":108,"line":1741},[106,4686,4687],{"class":116},"                arr[j",[106,4689,598],{"class":112},[106,4691,334],{"class":165},[106,4693,1057],{"class":116},[106,4695,162],{"class":112},[106,4697,4272],{"class":116},[106,4699,4700],{"class":108,"line":1746},[106,4701,4702],{"class":116},"            }\n",[106,4704,4705],{"class":108,"line":1751},[106,4706,2521],{"class":116},[106,4708,4709],{"class":108,"line":1756},[106,4710,2179],{"class":116},[106,4712,4713,4715,4717,4720,4722],{"class":108,"line":1770},[106,4714,1543],{"class":116},[106,4716,1161],{"class":112},[106,4718,4719],{"class":221},"\"排序后：\"",[106,4721,1161],{"class":112},[106,4723,1184],{"class":116},[106,4725,4726,4728,4730,4732,4734,4736,4738,4740,4742,4744,4746,4748],{"class":108,"line":1775},[106,4727,3193],{"class":112},[106,4729,1650],{"class":116},[106,4731,120],{"class":112},[106,4733,3024],{"class":116},[106,4735,162],{"class":112},[106,4737,308],{"class":165},[106,4739,3031],{"class":116},[106,4741,1027],{"class":112},[106,4743,537],{"class":165},[106,4745,3031],{"class":116},[106,4747,2284],{"class":112},[106,4749,123],{"class":116},[106,4751,4752],{"class":108,"line":2569},[106,4753,2022],{"class":116},[106,4755,4756,4758,4760,4762,4764,4766],{"class":108,"line":2583},[106,4757,3443],{"class":116},[106,4759,1161],{"class":112},[106,4761,4346],{"class":116},[106,4763,1161],{"class":112},[106,4765,4351],{"class":221},[106,4767,1283],{"class":116},[106,4769,4770],{"class":108,"line":2591},[106,4771,2179],{"class":116},[106,4773,4774,4776,4778],{"class":108,"line":2596},[106,4775,4082],{"class":112},[106,4777,4085],{"class":165},[106,4779,1283],{"class":116},[106,4781,4782],{"class":108,"line":2602},[106,4783,1557],{"class":116},[77,4785,4787],{"id":4786},"_172二维数组","1.7.2二维数组",[60,4789,4790],{},[63,4791,4792],{},"二维数组的四种定义方式",[254,4794,4795,4804],{},[257,4796,4797],{},[260,4798,4799,4802],{},[263,4800,4801],{},"序号",[263,4803,3773],{},[301,4805,4806,4816,4825,4834,4843],{},[260,4807,4808,4810],{},[306,4809,334],{},[306,4811,4812,4813,172],{},"数据类型 数组名[行数]",[106,4814,4815],{},"列数",[260,4817,4818,4820],{},[306,4819,194],{},[306,4821,4812,4822,4824],{},[106,4823,4815],{},"={ {数据1,数据2}，{数据3，数据4}... }",[260,4826,4827,4829],{},[306,4828,188],{},[306,4830,4812,4831,4833],{},[106,4832,4815],{},"={数据1,数据2,数据3...}",[260,4835,4836,4838],{},[306,4837,410],{},[306,4839,4840,4841,4833],{},"数据类型 数组名[]",[106,4842,4815],{},[260,4844,4845,4848],{},[306,4846,4847],{},"注意：不能只省略列数",[306,4849],{},[60,4851,4852],{"start":28},[63,4853,4854],{},"二维数组数组名",[1124,4856,4857,4860],{},[63,4858,4859],{},"1.查看二维数组所占内存空间",[63,4861,4862],{},"2.获取二维数组首地址",[14,4864,4865],{},"已知二维数组，求二维数组的行数与列数",[97,4867,4869],{"className":99,"code":4868,"language":101,"meta":25,"style":25},"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",[103,4870,4871,4879,4883,4901,4905,4923,4939,4944,4969,5002],{"__ignoreMap":25},[106,4872,4873,4875,4877],{"class":108,"line":109},[106,4874,120],{"class":112},[106,4876,1965],{"class":1955},[106,4878,1968],{"class":116},[106,4880,4881],{"class":108,"line":28},[106,4882,1538],{"class":116},[106,4884,4885,4887,4889,4891,4894,4896,4898],{"class":108,"line":1172},[106,4886,1977],{"class":112},[106,4888,3954],{"class":116},[106,4890,194],{"class":165},[106,4892,4893],{"class":116},"][",[106,4895,188],{"class":165},[106,4897,1057],{"class":116},[106,4899,4900],{"class":112},"=\n",[106,4902,4903],{"class":108,"line":1187},[106,4904,2022],{"class":116},[106,4906,4907,4910,4912,4914,4916,4918,4920],{"class":108,"line":1193},[106,4908,4909],{"class":116},"        {",[106,4911,334],{"class":165},[106,4913,495],{"class":116},[106,4915,194],{"class":165},[106,4917,495],{"class":116},[106,4919,188],{"class":165},[106,4921,4922],{"class":116},"},\n",[106,4924,4925,4927,4929,4931,4933,4935,4937],{"class":108,"line":1207},[106,4926,4909],{"class":116},[106,4928,410],{"class":165},[106,4930,495],{"class":116},[106,4932,436],{"class":165},[106,4934,495],{"class":116},[106,4936,461],{"class":165},[106,4938,1557],{"class":116},[106,4940,4941],{"class":108,"line":1213},[106,4942,4943],{"class":116},"    };\n",[106,4945,4946,4948,4950,4953,4955,4957,4959,4961,4963,4965,4967],{"class":108,"line":1304},[106,4947,1543],{"class":116},[106,4949,1161],{"class":112},[106,4951,4952],{"class":221},"\"二维数组的行数\"",[106,4954,1365],{"class":112},[106,4956,4198],{"class":116},[106,4958,4201],{"class":112},[106,4960,3843],{"class":116},[106,4962,308],{"class":165},[106,4964,4208],{"class":116},[106,4966,1161],{"class":112},[106,4968,1184],{"class":116},[106,4970,4971,4973,4975,4978,4980,4982,4984,4986,4988,4990,4992,4994,4996,4998,5000],{"class":108,"line":1310},[106,4972,1543],{"class":116},[106,4974,1161],{"class":112},[106,4976,4977],{"class":221},"\"二维数组的列数\"",[106,4979,1365],{"class":112},[106,4981,3843],{"class":116},[106,4983,308],{"class":165},[106,4985,4208],{"class":116},[106,4987,4201],{"class":112},[106,4989,3843],{"class":116},[106,4991,308],{"class":165},[106,4993,4893],{"class":116},[106,4995,308],{"class":165},[106,4997,4208],{"class":116},[106,4999,1161],{"class":112},[106,5001,1184],{"class":116},[106,5003,5004],{"class":108,"line":1322},[106,5005,1557],{"class":116},[14,5007,5008],{},"查看二维数组首地址",[97,5010,5012],{"className":99,"code":5011,"language":101,"meta":25,"style":25},"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",[103,5013,5014,5031,5057,5082],{"__ignoreMap":25},[106,5015,5016,5018,5020,5023,5025,5027,5029],{"class":108,"line":109},[106,5017,1362],{"class":116},[106,5019,1161],{"class":112},[106,5021,5022],{"class":221},"\"二维数组首地址：\"",[106,5024,1161],{"class":112},[106,5026,3872],{"class":116},[106,5028,1161],{"class":112},[106,5030,1184],{"class":116},[106,5032,5033,5035,5037,5040,5042,5044,5046,5049,5051,5053,5055],{"class":108,"line":28},[106,5034,1362],{"class":116},[106,5036,1161],{"class":112},[106,5038,5039],{"class":221},"\"二维数组第一行的首地址：\"",[106,5041,1161],{"class":112},[106,5043,117],{"class":116},[106,5045,120],{"class":112},[106,5047,5048],{"class":116},")arr[",[106,5050,308],{"class":165},[106,5052,1057],{"class":116},[106,5054,1161],{"class":112},[106,5056,1184],{"class":116},[106,5058,5059,5061,5063,5066,5068,5070,5072,5074,5076,5078,5080],{"class":108,"line":1172},[106,5060,1362],{"class":116},[106,5062,1161],{"class":112},[106,5064,5065],{"class":221},"\"二维数组第二行的首地址：\"",[106,5067,1161],{"class":112},[106,5069,117],{"class":116},[106,5071,120],{"class":112},[106,5073,5048],{"class":116},[106,5075,334],{"class":165},[106,5077,1057],{"class":116},[106,5079,1161],{"class":112},[106,5081,1184],{"class":116},[106,5083,5084,5086,5088,5091,5093,5095,5097,5099,5101,5103,5105,5107,5109,5111,5113,5115],{"class":108,"line":1187},[106,5085,1362],{"class":116},[106,5087,1161],{"class":112},[106,5089,5090],{"class":221},"\"二维数组第一个元素的首地址:\"",[106,5092,1161],{"class":112},[106,5094,117],{"class":116},[106,5096,120],{"class":112},[106,5098,546],{"class":116},[106,5100,470],{"class":112},[106,5102,3898],{"class":116},[106,5104,308],{"class":165},[106,5106,4893],{"class":116},[106,5108,308],{"class":165},[106,5110,1057],{"class":116},[106,5112,1161],{"class":112},[106,5114,1231],{"class":116},[106,5116,5117],{"class":175},"\u002F\u002F对于数，要加取址符\n",[5119,5120,5121],"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":25,"searchDepth":28,"depth":28,"links":5123},[5124,5125,5126,5134,5135,5141,5146],{"id":50,"depth":28,"text":51},{"id":57,"depth":28,"text":58},{"id":74,"depth":28,"text":75,"children":5127},[5128,5129,5130,5131,5132,5133],{"id":79,"depth":1172,"text":80},{"id":133,"depth":1172,"text":134},{"id":202,"depth":1172,"text":203},{"id":1142,"depth":1172,"text":1143},{"id":1237,"depth":1172,"text":1238},{"id":1336,"depth":1172,"text":1337},{"id":1378,"depth":28,"text":1379},{"id":1446,"depth":28,"text":1447,"children":5136},[5137,5138,5139,5140],{"id":1450,"depth":1172,"text":1451},{"id":1471,"depth":1172,"text":1472},{"id":1480,"depth":1172,"text":1481},{"id":1489,"depth":1172,"text":1490},{"id":1498,"depth":28,"text":1499,"children":5142},[5143,5144,5145],{"id":1502,"depth":1172,"text":1503},{"id":2197,"depth":1172,"text":2198},{"id":3613,"depth":1172,"text":3614},{"id":3754,"depth":28,"text":3755,"children":5147},[5148,5149],{"id":3758,"depth":1172,"text":3759},{"id":4786,"depth":1172,"text":4787},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch1",{"title":41,"description":25},"wiki\u002F2026-05-24-c++学习\u002Fch1-基本认识","1r5xXbZS-drkqvsSKedLALMb9rI8Aqwv0jRzCBXrWss",{"id":5156,"title":5157,"body":5158,"description":25,"extension":31,"meta":6258,"navigation":33,"path":6259,"seo":6260,"stem":6261,"__hash__":6262},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch2-函数.md","2.函数",{"type":7,"value":5159,"toc":6250},[5160,5163,5167,5175,5183,5186,5252,5256,5259,5335,5339,5342,5345,5348,5561,5565,5570,5634,5639,5706,5711,5802,5805,5910,5914,5917,5923,6067,6071,6074,6088,6091,6136,6139,6247],[10,5161,5157],{"id":5162},"_2函数",[48,5164,5166],{"id":5165},"_21函数概述","2.1函数概述",[60,5168,5169,5172],{},[63,5170,5171],{},"函数的定义一般主要有5个步骤：返回值类型、函数名、参数表列、函数体语句、return表达式",[63,5173,5174],{},"语法：",[97,5176,5181],{"className":5177,"code":5179,"language":5180,"meta":25},[5178],"language-text","返回值类型 函数名 （参数列表）\n{\n    函数体语句\n    return 表达式\n}\n","text",[103,5182,5179],{"__ignoreMap":25},[14,5184,5185],{},"小案例",[97,5187,5189],{"className":99,"code":5188,"language":101,"meta":25,"style":25},"\u002F\u002Fnum1,num2形参\nint add(int num1,int num2)\n{\n    int sum=num1+num2;\n    return sum;\n}\n",[103,5190,5191,5196,5220,5224,5241,5248],{"__ignoreMap":25},[106,5192,5193],{"class":108,"line":109},[106,5194,5195],{"class":175},"\u002F\u002Fnum1,num2形参\n",[106,5197,5198,5200,5203,5205,5207,5211,5213,5215,5218],{"class":108,"line":28},[106,5199,120],{"class":112},[106,5201,5202],{"class":1955}," add",[106,5204,117],{"class":116},[106,5206,120],{"class":112},[106,5208,5210],{"class":5209},"s4XuR"," num1",[106,5212,495],{"class":116},[106,5214,120],{"class":112},[106,5216,5217],{"class":5209}," num2",[106,5219,123],{"class":116},[106,5221,5222],{"class":108,"line":1172},[106,5223,1538],{"class":116},[106,5225,5226,5228,5231,5233,5236,5238],{"class":108,"line":1187},[106,5227,1977],{"class":112},[106,5229,5230],{"class":116}," sum",[106,5232,162],{"class":112},[106,5234,5235],{"class":116},"num1",[106,5237,598],{"class":112},[106,5239,5240],{"class":116},"num2;\n",[106,5242,5243,5245],{"class":108,"line":1193},[106,5244,4082],{"class":112},[106,5246,5247],{"class":116}," sum;\n",[106,5249,5250],{"class":108,"line":1207},[106,5251,1557],{"class":116},[48,5253,5255],{"id":5254},"_22函数调用","2.2函数调用",[14,5257,5258],{},"调用刚刚写的求和函数",[97,5260,5262],{"className":99,"code":5261,"language":101,"meta":25,"style":25},"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",[103,5263,5264,5272,5276,5281,5293,5305,5314,5319,5331],{"__ignoreMap":25},[106,5265,5266,5268,5270],{"class":108,"line":109},[106,5267,120],{"class":112},[106,5269,1965],{"class":1955},[106,5271,1968],{"class":116},[106,5273,5274],{"class":108,"line":28},[106,5275,1538],{"class":116},[106,5277,5278],{"class":108,"line":1172},[106,5279,5280],{"class":175},"    \u002F\u002Fa,b实参\n",[106,5282,5283,5285,5287,5289,5291],{"class":108,"line":1187},[106,5284,1977],{"class":112},[106,5286,1391],{"class":116},[106,5288,162],{"class":112},[106,5290,308],{"class":165},[106,5292,1283],{"class":116},[106,5294,5295,5297,5299,5301,5303],{"class":108,"line":1193},[106,5296,1977],{"class":112},[106,5298,2825],{"class":116},[106,5300,162],{"class":112},[106,5302,308],{"class":165},[106,5304,1283],{"class":116},[106,5306,5307,5309,5311],{"class":108,"line":1207},[106,5308,2004],{"class":116},[106,5310,1422],{"class":112},[106,5312,5313],{"class":116},"a,b;\n",[106,5315,5316],{"class":108,"line":1213},[106,5317,5318],{"class":175},"    \u002F\u002F调用函数时，实参值传给了形参\n",[106,5320,5321,5323,5325,5328],{"class":108,"line":1304},[106,5322,1543],{"class":116},[106,5324,1161],{"class":112},[106,5326,5327],{"class":1955},"add",[106,5329,5330],{"class":116},"(a,b);\n",[106,5332,5333],{"class":108,"line":1310},[106,5334,1557],{"class":116},[48,5336,5338],{"id":5337},"_23值传递","2.3值传递",[14,5340,5341],{},"值传递就是函数调用时实参将数值传给形参",[14,5343,5344],{},"值传递时，如果形参发生任何改变，不会影响实参",[14,5346,5347],{},"如果函数不需要返回值，声明的时候可以写void,此时函数返回值可以写return；或者直接不写",[97,5349,5351],{"className":99,"code":5350,"language":101,"meta":25,"style":25},"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",[103,5352,5353,5375,5379,5392,5409,5427,5438,5447,5456,5469,5485,5501,5510,5514,5522,5526,5538,5550,5557],{"__ignoreMap":25},[106,5354,5355,5358,5361,5363,5365,5367,5369,5371,5373],{"class":108,"line":109},[106,5356,5357],{"class":112},"void",[106,5359,5360],{"class":1955}," swap",[106,5362,117],{"class":116},[106,5364,120],{"class":112},[106,5366,5210],{"class":5209},[106,5368,495],{"class":116},[106,5370,120],{"class":112},[106,5372,5217],{"class":5209},[106,5374,123],{"class":116},[106,5376,5377],{"class":108,"line":28},[106,5378,1538],{"class":116},[106,5380,5381,5383,5385,5388,5390],{"class":108,"line":1172},[106,5382,1543],{"class":116},[106,5384,1161],{"class":112},[106,5386,5387],{"class":221},"\"交换前：\"",[106,5389,1161],{"class":112},[106,5391,1184],{"class":116},[106,5393,5394,5396,5398,5401,5403,5405,5407],{"class":108,"line":1187},[106,5395,1543],{"class":116},[106,5397,1161],{"class":112},[106,5399,5400],{"class":221},"\"num1=\"",[106,5402,1161],{"class":112},[106,5404,5235],{"class":116},[106,5406,1161],{"class":112},[106,5408,1184],{"class":116},[106,5410,5411,5413,5415,5418,5420,5423,5425],{"class":108,"line":1193},[106,5412,1543],{"class":116},[106,5414,1161],{"class":112},[106,5416,5417],{"class":221},"\"num2=\"",[106,5419,1161],{"class":112},[106,5421,5422],{"class":116},"num2",[106,5424,1161],{"class":112},[106,5426,1184],{"class":116},[106,5428,5429,5431,5433,5435],{"class":108,"line":1207},[106,5430,1977],{"class":112},[106,5432,4247],{"class":116},[106,5434,162],{"class":112},[106,5436,5437],{"class":116},"num1;\n",[106,5439,5440,5443,5445],{"class":108,"line":1213},[106,5441,5442],{"class":116},"    num1",[106,5444,162],{"class":112},[106,5446,5240],{"class":116},[106,5448,5449,5452,5454],{"class":108,"line":1304},[106,5450,5451],{"class":116},"    num2",[106,5453,162],{"class":112},[106,5455,4272],{"class":116},[106,5457,5458,5460,5462,5465,5467],{"class":108,"line":1310},[106,5459,1543],{"class":116},[106,5461,1161],{"class":112},[106,5463,5464],{"class":221},"\"交换后：\"",[106,5466,1161],{"class":112},[106,5468,1184],{"class":116},[106,5470,5471,5473,5475,5477,5479,5481,5483],{"class":108,"line":1322},[106,5472,1543],{"class":116},[106,5474,1161],{"class":112},[106,5476,5400],{"class":221},[106,5478,1161],{"class":112},[106,5480,5235],{"class":116},[106,5482,1161],{"class":112},[106,5484,1184],{"class":116},[106,5486,5487,5489,5491,5493,5495,5497,5499],{"class":108,"line":1604},[106,5488,1543],{"class":116},[106,5490,1161],{"class":112},[106,5492,5417],{"class":221},[106,5494,1161],{"class":112},[106,5496,5422],{"class":116},[106,5498,1161],{"class":112},[106,5500,1184],{"class":116},[106,5502,5503,5505,5507],{"class":108,"line":1609},[106,5504,4082],{"class":112},[106,5506,172],{"class":116},[106,5508,5509],{"class":175},"\u002F\u002F或者不写\n",[106,5511,5512],{"class":108,"line":1615},[106,5513,1557],{"class":116},[106,5515,5516,5518,5520],{"class":108,"line":1620},[106,5517,120],{"class":112},[106,5519,1965],{"class":1955},[106,5521,1968],{"class":116},[106,5523,5524],{"class":108,"line":1634},[106,5525,1538],{"class":116},[106,5527,5528,5530,5532,5534,5536],{"class":108,"line":1639},[106,5529,1977],{"class":112},[106,5531,1391],{"class":116},[106,5533,162],{"class":112},[106,5535,563],{"class":165},[106,5537,1283],{"class":116},[106,5539,5540,5542,5544,5546,5548],{"class":108,"line":1645},[106,5541,1977],{"class":112},[106,5543,2825],{"class":116},[106,5545,162],{"class":112},[106,5547,817],{"class":165},[106,5549,1283],{"class":116},[106,5551,5552,5555],{"class":108,"line":1666},[106,5553,5554],{"class":1955},"    swap",[106,5556,5330],{"class":116},[106,5558,5559],{"class":108,"line":1671},[106,5560,1557],{"class":116},[48,5562,5564],{"id":5563},"_24函数的常见形式","2.4函数的常见形式",[60,5566,5567],{},[63,5568,5569],{},"无参无返",[97,5571,5573],{"className":99,"code":5572,"language":101,"meta":25,"style":25},"void test01()\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    \u002F\u002F函数调用\n    test01();\n}\n",[103,5574,5575,5584,5588,5601,5605,5613,5617,5622,5630],{"__ignoreMap":25},[106,5576,5577,5579,5582],{"class":108,"line":109},[106,5578,5357],{"class":112},[106,5580,5581],{"class":1955}," test01",[106,5583,1968],{"class":116},[106,5585,5586],{"class":108,"line":28},[106,5587,1538],{"class":116},[106,5589,5590,5592,5594,5597,5599],{"class":108,"line":1172},[106,5591,1543],{"class":116},[106,5593,1161],{"class":112},[106,5595,5596],{"class":221},"\"你好\"",[106,5598,1161],{"class":112},[106,5600,1184],{"class":116},[106,5602,5603],{"class":108,"line":1187},[106,5604,1557],{"class":116},[106,5606,5607,5609,5611],{"class":108,"line":1193},[106,5608,120],{"class":112},[106,5610,1965],{"class":1955},[106,5612,1968],{"class":116},[106,5614,5615],{"class":108,"line":1207},[106,5616,1538],{"class":116},[106,5618,5619],{"class":108,"line":1213},[106,5620,5621],{"class":175},"    \u002F\u002F函数调用\n",[106,5623,5624,5627],{"class":108,"line":1304},[106,5625,5626],{"class":1955},"    test01",[106,5628,5629],{"class":116},"();\n",[106,5631,5632],{"class":108,"line":1310},[106,5633,1557],{"class":116},[60,5635,5636],{"start":28},[63,5637,5638],{},"有参无返",[97,5640,5642],{"className":99,"code":5641,"language":101,"meta":25,"style":25},"void test02(int a)\n{\n    cout\u003C\u003C\"你好\"\u003C\u003Cendl;\n}\nint main()\n{\n    test02(100);\n}\n",[103,5643,5644,5659,5663,5675,5679,5687,5691,5702],{"__ignoreMap":25},[106,5645,5646,5648,5651,5653,5655,5657],{"class":108,"line":109},[106,5647,5357],{"class":112},[106,5649,5650],{"class":1955}," test02",[106,5652,117],{"class":116},[106,5654,120],{"class":112},[106,5656,1391],{"class":5209},[106,5658,123],{"class":116},[106,5660,5661],{"class":108,"line":28},[106,5662,1538],{"class":116},[106,5664,5665,5667,5669,5671,5673],{"class":108,"line":1172},[106,5666,1543],{"class":116},[106,5668,1161],{"class":112},[106,5670,5596],{"class":221},[106,5672,1161],{"class":112},[106,5674,1184],{"class":116},[106,5676,5677],{"class":108,"line":1187},[106,5678,1557],{"class":116},[106,5680,5681,5683,5685],{"class":108,"line":1193},[106,5682,120],{"class":112},[106,5684,1965],{"class":1955},[106,5686,1968],{"class":116},[106,5688,5689],{"class":108,"line":1207},[106,5690,1538],{"class":116},[106,5692,5693,5696,5698,5700],{"class":108,"line":1213},[106,5694,5695],{"class":1955},"    test02",[106,5697,117],{"class":116},[106,5699,428],{"class":165},[106,5701,2711],{"class":116},[106,5703,5704],{"class":108,"line":1304},[106,5705,1557],{"class":116},[60,5707,5708],{"start":1172},[63,5709,5710],{},"无参有返",[97,5712,5714],{"className":99,"code":5713,"language":101,"meta":25,"style":25},"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",[103,5715,5716,5725,5729,5741,5750,5754,5762,5766,5779,5798],{"__ignoreMap":25},[106,5717,5718,5720,5723],{"class":108,"line":109},[106,5719,120],{"class":112},[106,5721,5722],{"class":1955}," test03",[106,5724,1968],{"class":116},[106,5726,5727],{"class":108,"line":28},[106,5728,1538],{"class":116},[106,5730,5731,5733,5735,5737,5739],{"class":108,"line":1172},[106,5732,1543],{"class":116},[106,5734,1161],{"class":112},[106,5736,5596],{"class":221},[106,5738,1161],{"class":112},[106,5740,1184],{"class":116},[106,5742,5743,5745,5748],{"class":108,"line":1187},[106,5744,4082],{"class":112},[106,5746,5747],{"class":165}," 100",[106,5749,1283],{"class":116},[106,5751,5752],{"class":108,"line":1193},[106,5753,1557],{"class":116},[106,5755,5756,5758,5760],{"class":108,"line":1207},[106,5757,120],{"class":112},[106,5759,1965],{"class":1955},[106,5761,1968],{"class":116},[106,5763,5764],{"class":108,"line":1213},[106,5765,1538],{"class":116},[106,5767,5768,5770,5772,5774,5777],{"class":108,"line":1304},[106,5769,1977],{"class":112},[106,5771,5210],{"class":116},[106,5773,162],{"class":112},[106,5775,5776],{"class":1955},"test03",[106,5778,5629],{"class":116},[106,5780,5781,5783,5785,5787,5789,5791,5793,5795],{"class":108,"line":1310},[106,5782,1543],{"class":116},[106,5784,1161],{"class":112},[106,5786,5400],{"class":221},[106,5788,1161],{"class":112},[106,5790,5235],{"class":116},[106,5792,1161],{"class":112},[106,5794,1231],{"class":116},[106,5796,5797],{"class":175}," \u002F\u002F100\n",[106,5799,5800],{"class":108,"line":1322},[106,5801,1557],{"class":116},[14,5803,5804],{},"4.有参有返",[97,5806,5808],{"className":99,"code":5807,"language":101,"meta":25,"style":25},"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",[103,5809,5810,5825,5829,5842,5848,5852,5861,5865,5877,5891,5906],{"__ignoreMap":25},[106,5811,5812,5814,5817,5819,5821,5823],{"class":108,"line":109},[106,5813,120],{"class":112},[106,5815,5816],{"class":1955}," test04",[106,5818,117],{"class":116},[106,5820,120],{"class":112},[106,5822,1391],{"class":5209},[106,5824,123],{"class":116},[106,5826,5827],{"class":108,"line":28},[106,5828,1538],{"class":116},[106,5830,5831,5833,5835,5838,5840],{"class":108,"line":1172},[106,5832,1543],{"class":116},[106,5834,1161],{"class":112},[106,5836,5837],{"class":221},"\"hello\"",[106,5839,1161],{"class":112},[106,5841,1184],{"class":116},[106,5843,5844,5846],{"class":108,"line":1187},[106,5845,4082],{"class":112},[106,5847,1425],{"class":116},[106,5849,5850],{"class":108,"line":1193},[106,5851,1557],{"class":116},[106,5853,5854,5856,5859],{"class":108,"line":1207},[106,5855,120],{"class":112},[106,5857,5858],{"class":1955}," mian",[106,5860,1968],{"class":116},[106,5862,5863],{"class":108,"line":1213},[106,5864,1538],{"class":116},[106,5866,5867,5869,5871,5873,5875],{"class":108,"line":1304},[106,5868,1977],{"class":112},[106,5870,2825],{"class":116},[106,5872,162],{"class":112},[106,5874,334],{"class":165},[106,5876,1283],{"class":116},[106,5878,5879,5881,5883,5885,5888],{"class":108,"line":1310},[106,5880,1977],{"class":112},[106,5882,2841],{"class":116},[106,5884,162],{"class":112},[106,5886,5887],{"class":1955},"test04",[106,5889,5890],{"class":116},"(b);\n",[106,5892,5893,5895,5897,5899,5901,5903],{"class":108,"line":1322},[106,5894,1543],{"class":116},[106,5896,1161],{"class":112},[106,5898,405],{"class":116},[106,5900,1161],{"class":112},[106,5902,1231],{"class":116},[106,5904,5905],{"class":175}," \u002F\u002F1\n",[106,5907,5908],{"class":108,"line":1604},[106,5909,1557],{"class":116},[48,5911,5913],{"id":5912},"_25函数的声明","2.5函数的声明",[14,5915,5916],{},"作用：告诉编译器函数名称以及如何调用函数，函数的实际主体可以单独定义",[14,5918,5919,5920],{},"函数的",[266,5921,5922],{},"声明可以多次，但是函数的定义只能有一次",[97,5924,5926],{"className":99,"code":5925,"language":101,"meta":25,"style":25},"\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",[103,5927,5928,5933,5938,5963,5972,5976,5988,6000,6016,6020,6040,6044,6063],{"__ignoreMap":25},[106,5929,5930],{"class":108,"line":109},[106,5931,5932],{"class":175},"\u002F\u002F函数声明\n",[106,5934,5935],{"class":108,"line":28},[106,5936,5937],{"class":175},"\u002F\u002F比较函数，实现两个整型数字进行比较，返回较大的值\n",[106,5939,5940,5942,5945,5947,5949,5951,5953,5955,5957,5960],{"class":108,"line":1172},[106,5941,120],{"class":112},[106,5943,5944],{"class":1955}," max",[106,5946,117],{"class":116},[106,5948,120],{"class":112},[106,5950,1391],{"class":5209},[106,5952,495],{"class":116},[106,5954,120],{"class":112},[106,5956,2825],{"class":5209},[106,5958,5959],{"class":116},");",[106,5961,5962],{"class":175},"\u002F\u002F这样函数就可以写在后面，不报错了\n",[106,5964,5965,5967,5969],{"class":108,"line":1187},[106,5966,120],{"class":112},[106,5968,1965],{"class":1955},[106,5970,5971],{"class":116},"() \n",[106,5973,5974],{"class":108,"line":1193},[106,5975,1538],{"class":116},[106,5977,5978,5980,5982,5984,5986],{"class":108,"line":1207},[106,5979,1977],{"class":112},[106,5981,1391],{"class":116},[106,5983,162],{"class":112},[106,5985,563],{"class":165},[106,5987,1283],{"class":116},[106,5989,5990,5992,5994,5996,5998],{"class":108,"line":1213},[106,5991,1977],{"class":112},[106,5993,2825],{"class":116},[106,5995,162],{"class":112},[106,5997,817],{"class":165},[106,5999,1283],{"class":116},[106,6001,6002,6004,6006,6009,6012,6014],{"class":108,"line":1304},[106,6003,1543],{"class":116},[106,6005,1161],{"class":112},[106,6007,6008],{"class":1955},"max",[106,6010,6011],{"class":116},"(a,b)",[106,6013,1161],{"class":112},[106,6015,1184],{"class":116},[106,6017,6018],{"class":108,"line":1310},[106,6019,1557],{"class":116},[106,6021,6022,6024,6026,6028,6030,6032,6034,6036,6038],{"class":108,"line":1322},[106,6023,120],{"class":112},[106,6025,5944],{"class":1955},[106,6027,117],{"class":116},[106,6029,120],{"class":112},[106,6031,1391],{"class":5209},[106,6033,495],{"class":116},[106,6035,120],{"class":112},[106,6037,2825],{"class":5209},[106,6039,123],{"class":116},[106,6041,6042],{"class":108,"line":1604},[106,6043,1538],{"class":116},[106,6045,6046,6048,6050,6052,6054,6056,6058,6060],{"class":108,"line":1609},[106,6047,4082],{"class":112},[106,6049,1391],{"class":116},[106,6051,1077],{"class":112},[106,6053,380],{"class":116},[106,6055,1103],{"class":112},[106,6057,355],{"class":116},[106,6059,976],{"class":112},[106,6061,6062],{"class":116},"b;\n",[106,6064,6065],{"class":108,"line":1615},[106,6066,1557],{"class":116},[48,6068,6070],{"id":6069},"_26函数的分文件编写","2.6函数的分文件编写",[14,6072,6073],{},"4个步骤：",[1124,6075,6076,6079,6082,6085],{},[63,6077,6078],{},"1.创建后缀名为.h的头文件",[63,6080,6081],{},"2.创建后缀名为.cpp的源文件",[63,6083,6084],{},"3.在头文件中写函数的定义",[63,6086,6087],{},"4.在源文件中写函数的定义\n示例：",[14,6089,6090],{},"头文件：swap.h",[97,6092,6094],{"className":99,"code":6093,"language":101,"meta":25,"style":25},"#include\u003Ciostream>\nusing namespace std;\n\u002F\u002F函数声明\nvoid swap(int a,int b);\n",[103,6095,6096,6102,6112,6116],{"__ignoreMap":25},[106,6097,6098,6100],{"class":108,"line":109},[106,6099,1941],{"class":112},[106,6101,1944],{"class":221},[106,6103,6104,6106,6108,6110],{"class":108,"line":28},[106,6105,1949],{"class":112},[106,6107,1952],{"class":112},[106,6109,1956],{"class":1955},[106,6111,1283],{"class":116},[106,6113,6114],{"class":108,"line":1172},[106,6115,5932],{"class":175},[106,6117,6118,6120,6122,6124,6126,6128,6130,6132,6134],{"class":108,"line":1187},[106,6119,5357],{"class":112},[106,6121,5360],{"class":1955},[106,6123,117],{"class":116},[106,6125,120],{"class":112},[106,6127,1391],{"class":5209},[106,6129,495],{"class":116},[106,6131,120],{"class":112},[106,6133,2825],{"class":5209},[106,6135,2711],{"class":116},[14,6137,6138],{},"源文件：swap.cpp",[97,6140,6142],{"className":99,"code":6141,"language":101,"meta":25,"style":25},"#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",[103,6143,6144,6151,6156,6176,6180,6191,6200,6209,6226,6243],{"__ignoreMap":25},[106,6145,6146,6148],{"class":108,"line":109},[106,6147,1941],{"class":112},[106,6149,6150],{"class":221}," \"swap.h\"\n",[106,6152,6153],{"class":108,"line":28},[106,6154,6155],{"class":175},"\u002F\u002F函数的定义\n",[106,6157,6158,6160,6162,6164,6166,6168,6170,6172,6174],{"class":108,"line":1172},[106,6159,5357],{"class":112},[106,6161,5360],{"class":1955},[106,6163,117],{"class":116},[106,6165,120],{"class":112},[106,6167,1391],{"class":5209},[106,6169,495],{"class":116},[106,6171,120],{"class":112},[106,6173,2825],{"class":5209},[106,6175,123],{"class":116},[106,6177,6178],{"class":108,"line":1187},[106,6179,1538],{"class":116},[106,6181,6182,6184,6186,6188],{"class":108,"line":1193},[106,6183,1977],{"class":112},[106,6185,4247],{"class":116},[106,6187,162],{"class":112},[106,6189,6190],{"class":116},"a;\n",[106,6192,6193,6196,6198],{"class":108,"line":1207},[106,6194,6195],{"class":116},"    a",[106,6197,162],{"class":112},[106,6199,6062],{"class":116},[106,6201,6202,6205,6207],{"class":108,"line":1213},[106,6203,6204],{"class":116},"    b",[106,6206,162],{"class":112},[106,6208,4272],{"class":116},[106,6210,6211,6213,6215,6218,6220,6222,6224],{"class":108,"line":1304},[106,6212,1543],{"class":116},[106,6214,1161],{"class":112},[106,6216,6217],{"class":221},"\"a=\"",[106,6219,1161],{"class":112},[106,6221,355],{"class":116},[106,6223,1161],{"class":112},[106,6225,1184],{"class":116},[106,6227,6228,6230,6232,6235,6237,6239,6241],{"class":108,"line":1310},[106,6229,1543],{"class":116},[106,6231,1161],{"class":112},[106,6233,6234],{"class":221},"\"b=\"",[106,6236,1161],{"class":112},[106,6238,380],{"class":116},[106,6240,1161],{"class":112},[106,6242,1184],{"class":116},[106,6244,6245],{"class":108,"line":1322},[106,6246,1557],{"class":116},[5119,6248,6249],{},"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":25,"searchDepth":28,"depth":28,"links":6251},[6252,6253,6254,6255,6256,6257],{"id":5165,"depth":28,"text":5166},{"id":5254,"depth":28,"text":5255},{"id":5337,"depth":28,"text":5338},{"id":5563,"depth":28,"text":5564},{"id":5912,"depth":28,"text":5913},{"id":6069,"depth":28,"text":6070},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch2",{"title":5157,"description":25},"wiki\u002F2026-05-24-c++学习\u002Fch2-函数","u7fvjnBVwC9MwO8e-TA4xJeO-qzH_msHECf1fhCEVWc",{"id":6264,"title":6265,"body":6266,"description":6273,"extension":31,"meta":7678,"navigation":33,"path":7679,"seo":7680,"stem":7681,"__hash__":7682},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch3-指针.md","3.指针",{"type":7,"value":6267,"toc":7668},[6268,6271,6274,6278,6440,6444,6447,6450,6453,6456,6596,6600,6603,6606,6609,6674,6678,6683,6750,6753,6757,6760,6771,6776,6796,6799,6804,6823,6826,6830,6849,6852,6856,7091,7095,7098,7101,7104,7266,7269,7273,7276,7282,7665],[10,6269,6265],{"id":6270},"_3指针",[14,6272,6273],{},"通过指针保存一个地址，指针就是个地址",[48,6275,6277],{"id":6276},"_31定义指针","3.1定义指针",[97,6279,6281],{"className":99,"code":6280,"language":101,"meta":25,"style":25},"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",[103,6282,6283,6291,6295,6300,6312,6317,6325,6335,6353,6373,6377,6382,6387,6392,6406,6422,6436],{"__ignoreMap":25},[106,6284,6285,6287,6289],{"class":108,"line":109},[106,6286,120],{"class":112},[106,6288,1965],{"class":1955},[106,6290,1968],{"class":116},[106,6292,6293],{"class":108,"line":28},[106,6294,1538],{"class":116},[106,6296,6297],{"class":108,"line":1172},[106,6298,6299],{"class":175},"    \u002F\u002F1.定义指针\n",[106,6301,6302,6304,6306,6308,6310],{"class":108,"line":1187},[106,6303,1977],{"class":112},[106,6305,1391],{"class":116},[106,6307,162],{"class":112},[106,6309,563],{"class":165},[106,6311,1283],{"class":116},[106,6313,6314],{"class":108,"line":1193},[106,6315,6316],{"class":175},"    \u002F\u002F指针定义语法：数据类型*指针变量名;\n",[106,6318,6319,6322],{"class":108,"line":1207},[106,6320,6321],{"class":112},"    int*",[106,6323,6324],{"class":116},"p;\n",[106,6326,6327,6330,6333],{"class":108,"line":1213},[106,6328,6329],{"class":116},"    p",[106,6331,6332],{"class":112},"=&",[106,6334,6190],{"class":116},[106,6336,6337,6339,6341,6344,6347,6349,6351],{"class":108,"line":1304},[106,6338,1543],{"class":116},[106,6340,1161],{"class":112},[106,6342,6343],{"class":221},"\"a的地址为：\"",[106,6345,6346],{"class":112},"\u003C\u003C&",[106,6348,355],{"class":116},[106,6350,1161],{"class":112},[106,6352,1184],{"class":116},[106,6354,6355,6357,6359,6362,6364,6366,6368,6370],{"class":108,"line":1310},[106,6356,1543],{"class":116},[106,6358,1161],{"class":112},[106,6360,6361],{"class":221},"\"指针p为：\"",[106,6363,1161],{"class":112},[106,6365,14],{"class":116},[106,6367,1161],{"class":112},[106,6369,1231],{"class":116},[106,6371,6372],{"class":175},"\u002F\u002F指针p表示的就是a的地址\n",[106,6374,6375],{"class":108,"line":1322},[106,6376,2392],{"emptyLinePlaceholder":33},[106,6378,6379],{"class":108,"line":1604},[106,6380,6381],{"class":175},"    \u002F\u002F2.使用指针\n",[106,6383,6384],{"class":108,"line":1609},[106,6385,6386],{"class":175},"    \u002F\u002F可以通过解引用的方式来找到指针指向的内存\n",[106,6388,6389],{"class":108,"line":1615},[106,6390,6391],{"class":175},"    \u002F\u002F指针前加*代表解引用，找到指针指向的内存中的数据\n",[106,6393,6394,6397,6399,6401,6404],{"class":108,"line":1620},[106,6395,6396],{"class":112},"    *",[106,6398,14],{"class":116},[106,6400,162],{"class":112},[106,6402,6403],{"class":165},"1000",[106,6405,1283],{"class":116},[106,6407,6408,6410,6413,6415,6417,6419],{"class":108,"line":1634},[106,6409,1543],{"class":116},[106,6411,6412],{"class":112},"\u003C\u003C*",[106,6414,14],{"class":116},[106,6416,1161],{"class":112},[106,6418,1231],{"class":116},[106,6420,6421],{"class":175},"\u002F\u002F1000\n",[106,6423,6424,6426,6428,6430,6432,6434],{"class":108,"line":1639},[106,6425,1543],{"class":116},[106,6427,1161],{"class":112},[106,6429,355],{"class":116},[106,6431,1161],{"class":112},[106,6433,1231],{"class":116},[106,6435,6421],{"class":175},[106,6437,6438],{"class":108,"line":1645},[106,6439,1557],{"class":116},[48,6441,6443],{"id":6442},"_32指针所占的内存空间","3.2指针所占的内存空间",[14,6445,6446],{},"要注意：指针也是一种数据类型，也是要占内存空间的",[14,6448,6449],{},"在32位操作系统下：占用4个字节空间",[14,6451,6452],{},"在64位操作系统下：占用8个字节空间",[14,6454,6455],{},"上方是不管啥数据类型的",[97,6457,6459],{"className":99,"code":6458,"language":101,"meta":25,"style":25},"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",[103,6460,6461,6469,6473,6478,6490,6495,6500,6505,6518,6540,6566,6592],{"__ignoreMap":25},[106,6462,6463,6465,6467],{"class":108,"line":109},[106,6464,120],{"class":112},[106,6466,1965],{"class":1955},[106,6468,1968],{"class":116},[106,6470,6471],{"class":108,"line":28},[106,6472,1538],{"class":116},[106,6474,6475],{"class":108,"line":1172},[106,6476,6477],{"class":175},"    \u002F\u002F指针所占内存空间\n",[106,6479,6480,6482,6484,6486,6488],{"class":108,"line":1187},[106,6481,1977],{"class":112},[106,6483,1391],{"class":116},[106,6485,162],{"class":112},[106,6487,563],{"class":165},[106,6489,1283],{"class":116},[106,6491,6492],{"class":108,"line":1193},[106,6493,6494],{"class":175},"    \u002F\u002Fint *p;\n",[106,6496,6497],{"class":108,"line":1207},[106,6498,6499],{"class":175},"    \u002F\u002Fp=&a;\n",[106,6501,6502],{"class":108,"line":1213},[106,6503,6504],{"class":175},"    \u002F\u002F上述可以写为以下：\n",[106,6506,6507,6509,6512,6514,6516],{"class":108,"line":1304},[106,6508,1977],{"class":112},[106,6510,6511],{"class":112}," *",[106,6513,14],{"class":116},[106,6515,6332],{"class":112},[106,6517,6190],{"class":116},[106,6519,6520,6523,6525,6528,6530,6533,6535,6537],{"class":108,"line":1310},[106,6521,6522],{"class":116},"    cout ",[106,6524,1161],{"class":112},[106,6526,6527],{"class":221},"\"sizeof(int *)\"",[106,6529,1365],{"class":112},[106,6531,6532],{"class":116},"(p)",[106,6534,1161],{"class":112},[106,6536,1231],{"class":116},[106,6538,6539],{"class":175},"\u002F\u002F因为是看数据类型，写int *也可以，因为是int *类型   4字节(32位的话)\n",[106,6541,6542,6544,6546,6548,6550,6552,6554,6556,6558,6560,6563],{"class":108,"line":1322},[106,6543,6522],{"class":116},[106,6545,1161],{"class":112},[106,6547,6527],{"class":221},[106,6549,1365],{"class":112},[106,6551,117],{"class":116},[106,6553,120],{"class":112},[106,6555,6511],{"class":112},[106,6557,546],{"class":116},[106,6559,1161],{"class":112},[106,6561,6562],{"class":116},"endl",[106,6564,6565],{"class":175},"  \u002F\u002F4字节(32位的话)\n",[106,6567,6568,6570,6572,6575,6577,6579,6581,6583,6585,6587,6589],{"class":108,"line":1604},[106,6569,6522],{"class":116},[106,6571,1161],{"class":112},[106,6573,6574],{"class":221},"\"sizeof(char *)\"",[106,6576,1365],{"class":112},[106,6578,117],{"class":116},[106,6580,213],{"class":112},[106,6582,6511],{"class":112},[106,6584,546],{"class":116},[106,6586,1161],{"class":112},[106,6588,1231],{"class":116},[106,6590,6591],{"class":175}," \u002F\u002F4字节(32位的话)\n",[106,6593,6594],{"class":108,"line":1609},[106,6595,1557],{"class":116},[48,6597,6599],{"id":6598},"_33空指针","3.3空指针",[14,6601,6602],{},"空指针：指针变量指向内存中编号为0的空间",[14,6604,6605],{},"用途：初始化指针变量",[14,6607,6608],{},"注意：空指针指向的内存是不可以访问的",[97,6610,6612],{"className":99,"code":6611,"language":101,"meta":25,"style":25},"int main()\n{\n    \u002F\u002F1.空指针用于给指针变量进行初始化\n    int *p=NULL;\n    \u002F\u002F2.空指针不能进行访问\n    *p=100;\u002F\u002F直接报错，压根不能访问\n    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n}\n",[103,6613,6614,6622,6626,6631,6645,6650,6665,6670],{"__ignoreMap":25},[106,6615,6616,6618,6620],{"class":108,"line":109},[106,6617,120],{"class":112},[106,6619,1965],{"class":1955},[106,6621,1968],{"class":116},[106,6623,6624],{"class":108,"line":28},[106,6625,1538],{"class":116},[106,6627,6628],{"class":108,"line":1172},[106,6629,6630],{"class":175},"    \u002F\u002F1.空指针用于给指针变量进行初始化\n",[106,6632,6633,6635,6637,6639,6641,6643],{"class":108,"line":1187},[106,6634,1977],{"class":112},[106,6636,6511],{"class":112},[106,6638,14],{"class":116},[106,6640,162],{"class":112},[106,6642,2384],{"class":165},[106,6644,1283],{"class":116},[106,6646,6647],{"class":108,"line":1193},[106,6648,6649],{"class":175},"    \u002F\u002F2.空指针不能进行访问\n",[106,6651,6652,6654,6656,6658,6660,6662],{"class":108,"line":1207},[106,6653,6396],{"class":112},[106,6655,14],{"class":116},[106,6657,162],{"class":112},[106,6659,428],{"class":165},[106,6661,172],{"class":116},[106,6663,6664],{"class":175},"\u002F\u002F直接报错，压根不能访问\n",[106,6666,6667],{"class":108,"line":1213},[106,6668,6669],{"class":175},"    \u002F\u002F0～255之间的内存编号是系统占用的，因此不可以访问\n",[106,6671,6672],{"class":108,"line":1304},[106,6673,1557],{"class":116},[48,6675,6677],{"id":6676},"_34野指针","3.4野指针",[14,6679,6680],{},[266,6681,6682],{},"指针变量指向非法的内存空间",[97,6684,6686],{"className":99,"code":6685,"language":101,"meta":25,"style":25},"int main()\n{\n    int *p=(int *)0x1100; \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n    \u002F\u002F访问野指针报错\n    cout\u003C\u003C*p\u003C\u003Cendl;\n}\n",[103,6687,6688,6696,6700,6729,6734,6746],{"__ignoreMap":25},[106,6689,6690,6692,6694],{"class":108,"line":109},[106,6691,120],{"class":112},[106,6693,1965],{"class":1955},[106,6695,1968],{"class":116},[106,6697,6698],{"class":108,"line":28},[106,6699,1538],{"class":116},[106,6701,6702,6704,6706,6708,6710,6712,6714,6716,6718,6721,6724,6726],{"class":108,"line":1172},[106,6703,1977],{"class":112},[106,6705,6511],{"class":112},[106,6707,14],{"class":116},[106,6709,162],{"class":112},[106,6711,117],{"class":116},[106,6713,120],{"class":112},[106,6715,6511],{"class":112},[106,6717,546],{"class":116},[106,6719,6720],{"class":112},"0x",[106,6722,6723],{"class":165},"1100",[106,6725,172],{"class":116},[106,6727,6728],{"class":175}," \u002F\u002F定义了一个指针，直接去指向随便指定的地址-->野指针，是没有访问权限的\n",[106,6730,6731],{"class":108,"line":1187},[106,6732,6733],{"class":175},"    \u002F\u002F访问野指针报错\n",[106,6735,6736,6738,6740,6742,6744],{"class":108,"line":1193},[106,6737,1543],{"class":116},[106,6739,6412],{"class":112},[106,6741,14],{"class":116},[106,6743,1161],{"class":112},[106,6745,1184],{"class":116},[106,6747,6748],{"class":108,"line":1207},[106,6749,1557],{"class":116},[14,6751,6752],{},"空指针和野指针都不是我们申请的空间，因此不要访问",[48,6754,6756],{"id":6755},"_35const修饰指针","3.5const修饰指针",[14,6758,6759],{},"三种情况：",[1124,6761,6762,6765,6768],{},[63,6763,6764],{},"const修饰指针 常量指针",[63,6766,6767],{},"const修饰常量 指针常量",[63,6769,6770],{},"const即修饰指针，又修饰常量",[60,6772,6773],{},[63,6774,6775],{},"常量指针",[97,6777,6779],{"className":99,"code":6778,"language":101,"meta":25,"style":25},"const int *p=&a;\n",[103,6780,6781],{"__ignoreMap":25},[106,6782,6783,6786,6788,6790,6792,6794],{"class":108,"line":109},[106,6784,6785],{"class":112},"const",[106,6787,2374],{"class":112},[106,6789,6511],{"class":112},[106,6791,14],{"class":116},[106,6793,6332],{"class":112},[106,6795,6190],{"class":116},[14,6797,6798],{},"指针的指向可以修改，但是指针指向的值不可以修改，改为指向地址后，这个地址存的值还是这个值",[60,6800,6801],{"start":28},[63,6802,6803],{},"指针常量",[97,6805,6807],{"className":99,"code":6806,"language":101,"meta":25,"style":25},"int *const p=&a;\n",[103,6808,6809],{"__ignoreMap":25},[106,6810,6811,6813,6816,6819,6821],{"class":108,"line":109},[106,6812,120],{"class":112},[106,6814,6815],{"class":112}," *const",[106,6817,6818],{"class":116}," p",[106,6820,6332],{"class":112},[106,6822,6190],{"class":116},[14,6824,6825],{},"指针的指向不可以改，指针指向的值可以改",[60,6827,6828],{"start":1172},[63,6829,6770],{},[97,6831,6833],{"className":99,"code":6832,"language":101,"meta":25,"style":25},"const int *const p=&a;\n",[103,6834,6835],{"__ignoreMap":25},[106,6836,6837,6839,6841,6843,6845,6847],{"class":108,"line":109},[106,6838,6785],{"class":112},[106,6840,2374],{"class":112},[106,6842,6815],{"class":112},[106,6844,6818],{"class":116},[106,6846,6332],{"class":112},[106,6848,6190],{"class":116},[14,6850,6851],{},"指针的指向和指针指向的值都不可以改变",[48,6853,6855],{"id":6854},"_36指针和数组","3.6指针和数组",[97,6857,6859],{"className":99,"code":6858,"language":101,"meta":25,"style":25},"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",[103,6860,6861,6869,6873,6878,6932,6953,6969,6985,6996,7013,7018,7032,7058,7062,7074,7083,7087],{"__ignoreMap":25},[106,6862,6863,6865,6867],{"class":108,"line":109},[106,6864,120],{"class":112},[106,6866,1965],{"class":1955},[106,6868,1968],{"class":116},[106,6870,6871],{"class":108,"line":28},[106,6872,1538],{"class":116},[106,6874,6875],{"class":108,"line":1172},[106,6876,6877],{"class":175},"    \u002F\u002F利用指针访问数组中的元素\n",[106,6879,6880,6882,6884,6886,6888,6890,6892,6894,6896,6898,6900,6902,6904,6906,6908,6910,6912,6914,6916,6918,6920,6922,6924,6926,6928,6930],{"class":108,"line":1187},[106,6881,1977],{"class":112},[106,6883,3954],{"class":116},[106,6885,563],{"class":165},[106,6887,1057],{"class":116},[106,6889,162],{"class":112},[106,6891,1013],{"class":116},[106,6893,334],{"class":165},[106,6895,495],{"class":116},[106,6897,194],{"class":165},[106,6899,495],{"class":116},[106,6901,188],{"class":165},[106,6903,495],{"class":116},[106,6905,410],{"class":165},[106,6907,495],{"class":116},[106,6909,436],{"class":165},[106,6911,495],{"class":116},[106,6913,461],{"class":165},[106,6915,495],{"class":116},[106,6917,486],{"class":165},[106,6919,495],{"class":116},[106,6921,512],{"class":165},[106,6923,495],{"class":116},[106,6925,537],{"class":165},[106,6927,495],{"class":116},[106,6929,563],{"class":165},[106,6931,3987],{"class":116},[106,6933,6934,6936,6938,6941,6943,6945,6947,6949,6951],{"class":108,"line":1193},[106,6935,1543],{"class":116},[106,6937,1161],{"class":112},[106,6939,6940],{"class":221},"\"数组的第一个元素为：\"",[106,6942,1161],{"class":112},[106,6944,3898],{"class":116},[106,6946,308],{"class":165},[106,6948,1057],{"class":116},[106,6950,1161],{"class":112},[106,6952,1184],{"class":116},[106,6954,6955,6957,6959,6961,6963,6966],{"class":108,"line":1207},[106,6956,1977],{"class":112},[106,6958,6511],{"class":112},[106,6960,14],{"class":116},[106,6962,162],{"class":112},[106,6964,6965],{"class":116},"arr;",[106,6967,6968],{"class":175},"\u002F\u002F注意数才要加取地址符号&\n",[106,6970,6971,6973,6975,6977,6979,6981,6983],{"class":108,"line":1213},[106,6972,1543],{"class":116},[106,6974,1161],{"class":112},[106,6976,6940],{"class":221},[106,6978,6412],{"class":112},[106,6980,14],{"class":116},[106,6982,1161],{"class":112},[106,6984,1184],{"class":116},[106,6986,6987,6989,6991,6993],{"class":108,"line":1304},[106,6988,6329],{"class":116},[106,6990,2284],{"class":112},[106,6992,172],{"class":116},[106,6994,6995],{"class":175}," \u002F\u002F让指针向后偏移4个字节\n",[106,6997,6998,7000,7002,7005,7007,7009,7011],{"class":108,"line":1310},[106,6999,1543],{"class":116},[106,7001,1161],{"class":112},[106,7003,7004],{"class":221},"\"数组的第二个元素为：\"",[106,7006,6412],{"class":112},[106,7008,14],{"class":116},[106,7010,1161],{"class":112},[106,7012,1184],{"class":116},[106,7014,7015],{"class":108,"line":1322},[106,7016,7017],{"class":175},"    \u002F\u002F利用指针遍历数组\n",[106,7019,7020,7022,7024,7027,7029],{"class":108,"line":1604},[106,7021,1977],{"class":112},[106,7023,6511],{"class":112},[106,7025,7026],{"class":116},"p2",[106,7028,162],{"class":112},[106,7030,7031],{"class":116},"arr;\n",[106,7033,7034,7036,7038,7040,7042,7044,7046,7048,7050,7052,7054,7056],{"class":108,"line":1609},[106,7035,3193],{"class":112},[106,7037,1650],{"class":116},[106,7039,120],{"class":112},[106,7041,3024],{"class":116},[106,7043,162],{"class":112},[106,7045,308],{"class":165},[106,7047,3031],{"class":116},[106,7049,1027],{"class":112},[106,7051,563],{"class":165},[106,7053,3031],{"class":116},[106,7055,2284],{"class":112},[106,7057,123],{"class":116},[106,7059,7060],{"class":108,"line":1615},[106,7061,2022],{"class":116},[106,7063,7064,7066,7068,7070,7072],{"class":108,"line":1620},[106,7065,3443],{"class":116},[106,7067,6412],{"class":112},[106,7069,7026],{"class":116},[106,7071,1161],{"class":112},[106,7073,1184],{"class":116},[106,7075,7076,7079,7081],{"class":108,"line":1634},[106,7077,7078],{"class":116},"        p2",[106,7080,2284],{"class":112},[106,7082,1283],{"class":116},[106,7084,7085],{"class":108,"line":1639},[106,7086,2179],{"class":116},[106,7088,7089],{"class":108,"line":1645},[106,7090,1557],{"class":116},[48,7092,7094],{"id":7093},"_37指针和函数","3.7指针和函数",[14,7096,7097],{},"利用指针做函数参数，可以修改实参的值",[14,7099,7100],{},"值传递：只改变形参，不改变实参",[14,7102,7103],{},"地址传递：",[97,7105,7107],{"className":99,"code":7106,"language":101,"meta":25,"style":25},"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",[103,7108,7109,7134,7138,7150,7161,7171,7175,7183,7187,7199,7211,7216,7232,7247,7262],{"__ignoreMap":25},[106,7110,7111,7113,7115,7117,7119,7121,7124,7126,7128,7130,7132],{"class":108,"line":109},[106,7112,5357],{"class":112},[106,7114,5360],{"class":1955},[106,7116,117],{"class":116},[106,7118,120],{"class":112},[106,7120,6511],{"class":112},[106,7122,7123],{"class":5209},"p1",[106,7125,495],{"class":116},[106,7127,120],{"class":112},[106,7129,6511],{"class":112},[106,7131,7026],{"class":5209},[106,7133,123],{"class":116},[106,7135,7136],{"class":108,"line":28},[106,7137,1538],{"class":116},[106,7139,7140,7142,7144,7147],{"class":108,"line":1172},[106,7141,1977],{"class":112},[106,7143,4247],{"class":116},[106,7145,7146],{"class":112},"=*",[106,7148,7149],{"class":116},"p1;\n",[106,7151,7152,7154,7156,7158],{"class":108,"line":1187},[106,7153,6396],{"class":112},[106,7155,7123],{"class":116},[106,7157,7146],{"class":112},[106,7159,7160],{"class":116},"p2;\n",[106,7162,7163,7165,7167,7169],{"class":108,"line":1193},[106,7164,6396],{"class":112},[106,7166,7026],{"class":116},[106,7168,162],{"class":112},[106,7170,4272],{"class":116},[106,7172,7173],{"class":108,"line":1207},[106,7174,1557],{"class":116},[106,7176,7177,7179,7181],{"class":108,"line":1213},[106,7178,120],{"class":112},[106,7180,1965],{"class":1955},[106,7182,1968],{"class":116},[106,7184,7185],{"class":108,"line":1304},[106,7186,1538],{"class":116},[106,7188,7189,7191,7193,7195,7197],{"class":108,"line":1310},[106,7190,1977],{"class":112},[106,7192,1391],{"class":116},[106,7194,162],{"class":112},[106,7196,563],{"class":165},[106,7198,1283],{"class":116},[106,7200,7201,7203,7205,7207,7209],{"class":108,"line":1322},[106,7202,1977],{"class":112},[106,7204,2825],{"class":116},[106,7206,162],{"class":112},[106,7208,817],{"class":165},[106,7210,1283],{"class":116},[106,7212,7213],{"class":108,"line":1604},[106,7214,7215],{"class":175},"    \u002F\u002F地址传递\n",[106,7217,7218,7220,7222,7224,7227,7229],{"class":108,"line":1609},[106,7219,5554],{"class":1955},[106,7221,117],{"class":116},[106,7223,470],{"class":112},[106,7225,7226],{"class":116},"a,",[106,7228,470],{"class":112},[106,7230,7231],{"class":116},"b);\n",[106,7233,7234,7236,7238,7240,7242,7244],{"class":108,"line":1615},[106,7235,1543],{"class":116},[106,7237,1161],{"class":112},[106,7239,355],{"class":116},[106,7241,1161],{"class":112},[106,7243,1231],{"class":116},[106,7245,7246],{"class":175},"\u002F\u002F20\n",[106,7248,7249,7251,7253,7255,7257,7259],{"class":108,"line":1620},[106,7250,1543],{"class":116},[106,7252,1161],{"class":112},[106,7254,380],{"class":116},[106,7256,1161],{"class":112},[106,7258,1231],{"class":116},[106,7260,7261],{"class":175},"\u002F\u002F10\n",[106,7263,7264],{"class":108,"line":1634},[106,7265,1557],{"class":116},[14,7267,7268],{},"总结：不想修改实参，就用值传递；想修改实参，就用值传递",[48,7270,7272],{"id":7271},"_38指针数组函数组合案例","3.8指针，数组，函数组合案例",[14,7274,7275],{},"案例描述：封装一个函数，利用冒泡排序，实现对整数数组的升序排序",[14,7277,7278,7279,7281],{},"例如数组：int arr",[106,7280,563],{},"={4,3,6,9,1,2,10,8,7,5}",[97,7283,7285],{"className":99,"code":7284,"language":101,"meta":25,"style":25},"#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",[103,7286,7287,7293,7303,7327,7331,7362,7366,7400,7404,7422,7426,7437,7452,7467,7471,7475,7479,7483,7487,7495,7499,7504,7558,7570,7582,7587,7595,7599,7604,7629,7633,7648,7657,7661],{"__ignoreMap":25},[106,7288,7289,7291],{"class":108,"line":109},[106,7290,1941],{"class":112},[106,7292,1944],{"class":221},[106,7294,7295,7297,7299,7301],{"class":108,"line":28},[106,7296,1949],{"class":112},[106,7298,1952],{"class":112},[106,7300,1956],{"class":1955},[106,7302,1283],{"class":116},[106,7304,7305,7307,7310,7312,7314,7316,7318,7320,7322,7325],{"class":108,"line":1172},[106,7306,5357],{"class":112},[106,7308,7309],{"class":1955}," bubbleSort",[106,7311,117],{"class":116},[106,7313,120],{"class":112},[106,7315,6511],{"class":112},[106,7317,14],{"class":5209},[106,7319,495],{"class":116},[106,7321,120],{"class":112},[106,7323,7324],{"class":5209}," len",[106,7326,123],{"class":116},[106,7328,7329],{"class":108,"line":1187},[106,7330,1538],{"class":116},[106,7332,7333,7335,7337,7339,7341,7343,7345,7347,7349,7352,7354,7356,7358,7360],{"class":108,"line":1193},[106,7334,3193],{"class":112},[106,7336,117],{"class":116},[106,7338,120],{"class":112},[106,7340,3024],{"class":116},[106,7342,162],{"class":112},[106,7344,308],{"class":165},[106,7346,3031],{"class":116},[106,7348,1027],{"class":112},[106,7350,7351],{"class":116},"len",[106,7353,649],{"class":112},[106,7355,334],{"class":165},[106,7357,3031],{"class":116},[106,7359,2284],{"class":112},[106,7361,123],{"class":116},[106,7363,7364],{"class":108,"line":1207},[106,7365,2022],{"class":116},[106,7367,7368,7370,7372,7374,7376,7378,7380,7382,7384,7386,7388,7390,7392,7394,7396,7398],{"class":108,"line":1213},[106,7369,3395],{"class":112},[106,7371,117],{"class":116},[106,7373,120],{"class":112},[106,7375,3402],{"class":116},[106,7377,162],{"class":112},[106,7379,308],{"class":165},[106,7381,3409],{"class":116},[106,7383,1027],{"class":112},[106,7385,7351],{"class":116},[106,7387,649],{"class":112},[106,7389,558],{"class":116},[106,7391,649],{"class":112},[106,7393,334],{"class":165},[106,7395,3409],{"class":116},[106,7397,2284],{"class":112},[106,7399,123],{"class":116},[106,7401,7402],{"class":108,"line":1304},[106,7403,2502],{"class":116},[106,7405,7406,7408,7411,7413,7416,7418,7420],{"class":108,"line":1310},[106,7407,4634],{"class":112},[106,7409,7410],{"class":116},"(p[j]",[106,7412,1077],{"class":112},[106,7414,7415],{"class":116},"p[j",[106,7417,598],{"class":112},[106,7419,334],{"class":165},[106,7421,4649],{"class":116},[106,7423,7424],{"class":108,"line":1322},[106,7425,4654],{"class":116},[106,7427,7428,7430,7432,7434],{"class":108,"line":1604},[106,7429,4659],{"class":112},[106,7431,4247],{"class":116},[106,7433,162],{"class":112},[106,7435,7436],{"class":116},"p[j];\n",[106,7438,7439,7442,7444,7446,7448,7450],{"class":108,"line":1609},[106,7440,7441],{"class":116},"                p[j]",[106,7443,162],{"class":112},[106,7445,7415],{"class":116},[106,7447,598],{"class":112},[106,7449,334],{"class":165},[106,7451,4682],{"class":116},[106,7453,7454,7457,7459,7461,7463,7465],{"class":108,"line":1615},[106,7455,7456],{"class":116},"                p[j",[106,7458,598],{"class":112},[106,7460,334],{"class":165},[106,7462,1057],{"class":116},[106,7464,162],{"class":112},[106,7466,4272],{"class":116},[106,7468,7469],{"class":108,"line":1620},[106,7470,4702],{"class":116},[106,7472,7473],{"class":108,"line":1634},[106,7474,2521],{"class":116},[106,7476,7477],{"class":108,"line":1639},[106,7478,2179],{"class":116},[106,7480,7481],{"class":108,"line":1645},[106,7482,1557],{"class":116},[106,7484,7485],{"class":108,"line":1666},[106,7486,2392],{"emptyLinePlaceholder":33},[106,7488,7489,7491,7493],{"class":108,"line":1671},[106,7490,120],{"class":112},[106,7492,1965],{"class":1955},[106,7494,1968],{"class":116},[106,7496,7497],{"class":108,"line":1685},[106,7498,1538],{"class":116},[106,7500,7501],{"class":108,"line":1690},[106,7502,7503],{"class":175},"    \u002F\u002F 1.创建数组\n",[106,7505,7506,7508,7510,7512,7514,7516,7518,7520,7522,7524,7526,7528,7530,7532,7534,7536,7538,7540,7542,7544,7546,7548,7550,7552,7554,7556],{"class":108,"line":1719},[106,7507,1977],{"class":112},[106,7509,3954],{"class":116},[106,7511,563],{"class":165},[106,7513,1057],{"class":116},[106,7515,162],{"class":112},[106,7517,1013],{"class":116},[106,7519,410],{"class":165},[106,7521,495],{"class":116},[106,7523,188],{"class":165},[106,7525,495],{"class":116},[106,7527,461],{"class":165},[106,7529,495],{"class":116},[106,7531,537],{"class":165},[106,7533,495],{"class":116},[106,7535,334],{"class":165},[106,7537,495],{"class":116},[106,7539,194],{"class":165},[106,7541,495],{"class":116},[106,7543,563],{"class":165},[106,7545,495],{"class":116},[106,7547,512],{"class":165},[106,7549,495],{"class":116},[106,7551,486],{"class":165},[106,7553,495],{"class":116},[106,7555,436],{"class":165},[106,7557,3987],{"class":116},[106,7559,7560,7562,7564,7566,7568],{"class":108,"line":1724},[106,7561,1977],{"class":112},[106,7563,7324],{"class":116},[106,7565,162],{"class":112},[106,7567,563],{"class":165},[106,7569,1283],{"class":116},[106,7571,7572,7574,7576,7578,7580],{"class":108,"line":1741},[106,7573,1977],{"class":112},[106,7575,6511],{"class":112},[106,7577,14],{"class":116},[106,7579,162],{"class":112},[106,7581,7031],{"class":116},[106,7583,7584],{"class":108,"line":1746},[106,7585,7586],{"class":175},"    \u002F\u002F 2.创建函数，实现冒泡排序\n",[106,7588,7589,7592],{"class":108,"line":1751},[106,7590,7591],{"class":1955},"    bubbleSort",[106,7593,7594],{"class":116},"(p,len);\n",[106,7596,7597],{"class":108,"line":1756},[106,7598,2392],{"emptyLinePlaceholder":33},[106,7600,7601],{"class":108,"line":1770},[106,7602,7603],{"class":175},"    \u002F\u002F 3.打印排序后的数组\n",[106,7605,7606,7608,7610,7612,7614,7616,7618,7620,7622,7625,7627],{"class":108,"line":1775},[106,7607,3193],{"class":112},[106,7609,1650],{"class":116},[106,7611,120],{"class":112},[106,7613,3024],{"class":116},[106,7615,162],{"class":112},[106,7617,308],{"class":165},[106,7619,3206],{"class":116},[106,7621,1027],{"class":112},[106,7623,7624],{"class":116},"len; i",[106,7626,2284],{"class":112},[106,7628,123],{"class":116},[106,7630,7631],{"class":108,"line":2569},[106,7632,2022],{"class":116},[106,7634,7635,7637,7639,7641,7643,7646],{"class":108,"line":2583},[106,7636,3443],{"class":116},[106,7638,6412],{"class":112},[106,7640,14],{"class":116},[106,7642,1161],{"class":112},[106,7644,7645],{"class":221},"\"\"",[106,7647,1283],{"class":116},[106,7649,7650,7653,7655],{"class":108,"line":2591},[106,7651,7652],{"class":116},"        p",[106,7654,2284],{"class":112},[106,7656,1283],{"class":116},[106,7658,7659],{"class":108,"line":2596},[106,7660,2179],{"class":116},[106,7662,7663],{"class":108,"line":2602},[106,7664,1557],{"class":116},[5119,7666,7667],{},"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":25,"searchDepth":28,"depth":28,"links":7669},[7670,7671,7672,7673,7674,7675,7676,7677],{"id":6276,"depth":28,"text":6277},{"id":6442,"depth":28,"text":6443},{"id":6598,"depth":28,"text":6599},{"id":6676,"depth":28,"text":6677},{"id":6755,"depth":28,"text":6756},{"id":6854,"depth":28,"text":6855},{"id":7093,"depth":28,"text":7094},{"id":7271,"depth":28,"text":7272},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch3",{"title":6265,"description":6273},"wiki\u002F2026-05-24-c++学习\u002Fch3-指针","LotROpzxgkxZVFDdc0uLdT7FhfhATX3FzlZsglMj7hQ",{"id":7684,"title":7685,"body":7686,"description":7693,"extension":31,"meta":10667,"navigation":33,"path":10668,"seo":10669,"stem":10670,"__hash__":10671},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch4-结构体.md","4.结构体",{"type":7,"value":7687,"toc":10658},[7688,7691,7694,7698,7701,7704,7715,8053,8056,8060,8063,8070,8325,8329,8332,8335,8490,8494,8497,8500,8706,8710,8713,9016,9019,9027,9031,9034,9185,9187,9198,9255,9259,9264,9921,9929,9932,10026,10029,10649,10655],[10,7689,7685],{"id":7690},"_4结构体",[14,7692,7693],{},"结构体属于用户自定义的数据类型，允许用户存储不同的数据类型",[48,7695,7697],{"id":7696},"_41结构体定义与使用","4.1结构体定义与使用",[14,7699,7700],{},"语法：struct 结构体名 {结构体成员列表}；",[14,7702,7703],{},"通过结构体创建变量的方式：",[1124,7705,7706,7709,7712],{},[63,7707,7708],{},"struct 结构体名 变量名",[63,7710,7711],{},"struct 结构体名 变量名={成员1值，成员2值...}",[63,7713,7714],{},"定义结构体时顺便创建变量",[97,7716,7718],{"className":99,"code":7717,"language":101,"meta":25,"style":25},"#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",[103,7719,7720,7726,7736,7743,7748,7756,7760,7765,7769,7774,7779,7784,7791,7796,7803,7807,7814,7818,7822,7826,7830,7834,7838,7844,7848,7854,7862,7870,7874,7879,7884,7895,7900,7912,7923,7934,7939,7963,7968,7974,8001,8006,8012,8024,8036,8048],{"__ignoreMap":25},[106,7721,7722,7724],{"class":108,"line":109},[106,7723,1941],{"class":112},[106,7725,1944],{"class":221},[106,7727,7728,7730,7732,7734],{"class":108,"line":28},[106,7729,1949],{"class":112},[106,7731,1952],{"class":112},[106,7733,1956],{"class":1955},[106,7735,1283],{"class":116},[106,7737,7738,7740],{"class":108,"line":1172},[106,7739,1941],{"class":112},[106,7741,7742],{"class":221},"\u003Cstring>\n",[106,7744,7745],{"class":108,"line":1187},[106,7746,7747],{"class":175},"\u002F\u002F1.创建学生数据类型：学生包括：（姓名，年龄，分数）\n",[106,7749,7750,7753],{"class":108,"line":1193},[106,7751,7752],{"class":112},"struct",[106,7754,7755],{"class":1955}," Student\n",[106,7757,7758],{"class":108,"line":1207},[106,7759,1538],{"class":116},[106,7761,7762],{"class":108,"line":1213},[106,7763,7764],{"class":175},"    \u002F\u002F成员列表\n",[106,7766,7767],{"class":108,"line":1304},[106,7768,2392],{"emptyLinePlaceholder":33},[106,7770,7771],{"class":108,"line":1310},[106,7772,7773],{"class":175},"    \u002F\u002F姓名\n",[106,7775,7776],{"class":108,"line":1322},[106,7777,7778],{"class":116},"    string name;\n",[106,7780,7781],{"class":108,"line":1604},[106,7782,7783],{"class":175},"    \u002F\u002F年龄\n",[106,7785,7786,7788],{"class":108,"line":1609},[106,7787,1977],{"class":112},[106,7789,7790],{"class":116}," age;\n",[106,7792,7793],{"class":108,"line":1615},[106,7794,7795],{"class":175},"    \u002F\u002F分数\n",[106,7797,7798,7800],{"class":108,"line":1620},[106,7799,1977],{"class":112},[106,7801,7802],{"class":116}," score;\n",[106,7804,7805],{"class":108,"line":1634},[106,7806,3987],{"class":116},[106,7808,7809,7811],{"class":108,"line":1639},[106,7810,7752],{"class":112},[106,7812,7813],{"class":1955}," School\n",[106,7815,7816],{"class":108,"line":1645},[106,7817,1538],{"class":116},[106,7819,7820],{"class":108,"line":1666},[106,7821,7764],{"class":175},[106,7823,7824],{"class":108,"line":1671},[106,7825,2392],{"emptyLinePlaceholder":33},[106,7827,7828],{"class":108,"line":1685},[106,7829,7773],{"class":175},[106,7831,7832],{"class":108,"line":1690},[106,7833,7778],{"class":116},[106,7835,7836],{"class":108,"line":1719},[106,7837,7783],{"class":175},[106,7839,7840,7842],{"class":108,"line":1724},[106,7841,1977],{"class":112},[106,7843,7790],{"class":116},[106,7845,7846],{"class":108,"line":1741},[106,7847,7795],{"class":175},[106,7849,7850,7852],{"class":108,"line":1746},[106,7851,1977],{"class":112},[106,7853,7802],{"class":116},[106,7855,7856,7859],{"class":108,"line":1751},[106,7857,7858],{"class":116},"} s3;",[106,7860,7861],{"class":175}," \u002F\u002F创建结构体时就创建了变量\n",[106,7863,7864,7866,7868],{"class":108,"line":1756},[106,7865,120],{"class":112},[106,7867,1965],{"class":1955},[106,7869,1968],{"class":116},[106,7871,7872],{"class":108,"line":1770},[106,7873,1538],{"class":116},[106,7875,7876],{"class":108,"line":1775},[106,7877,7878],{"class":175},"    \u002F\u002F2.通过学生类型创建具体学生\n",[106,7880,7881],{"class":108,"line":2569},[106,7882,7883],{"class":175},"    \u002F\u002F2.1 struct Student s1;\n",[106,7885,7886,7889,7892],{"class":108,"line":2583},[106,7887,7888],{"class":112},"    struct",[106,7890,7891],{"class":1955}," Student",[106,7893,7894],{"class":116}," s1;\n",[106,7896,7897],{"class":108,"line":2591},[106,7898,7899],{"class":175},"    \u002F\u002F给s1属性赋值，通过访问结构体变量中的属性\n",[106,7901,7902,7905,7907,7910],{"class":108,"line":2596},[106,7903,7904],{"class":116},"    s1.name",[106,7906,162],{"class":112},[106,7908,7909],{"class":221},"\"张三\"",[106,7911,1283],{"class":116},[106,7913,7914,7917,7919,7921],{"class":108,"line":2602},[106,7915,7916],{"class":116},"    s1.age",[106,7918,162],{"class":112},[106,7920,767],{"class":165},[106,7922,1283],{"class":116},[106,7924,7925,7928,7930,7932],{"class":108,"line":2608},[106,7926,7927],{"class":116},"    s1.score",[106,7929,162],{"class":112},[106,7931,371],{"class":165},[106,7933,1283],{"class":116},[106,7935,7936],{"class":108,"line":2613},[106,7937,7938],{"class":175},"    \u002F\u002F输出结果\n",[106,7940,7942,7944,7946,7949,7951,7954,7956,7959,7961],{"class":108,"line":7941},37,[106,7943,1543],{"class":116},[106,7945,1161],{"class":112},[106,7947,7948],{"class":116},"s1.name",[106,7950,1161],{"class":112},[106,7952,7953],{"class":116},"s1.age",[106,7955,1161],{"class":112},[106,7957,7958],{"class":116},"s1.score",[106,7960,1161],{"class":112},[106,7962,1184],{"class":116},[106,7964,7966],{"class":108,"line":7965},38,[106,7967,2392],{"emptyLinePlaceholder":33},[106,7969,7971],{"class":108,"line":7970},39,[106,7972,7973],{"class":175},"    \u002F\u002F2.2 struct Student s2={...}\n",[106,7975,7977,7979,7981,7984,7986,7988,7991,7993,7995,7997,7999],{"class":108,"line":7976},40,[106,7978,7888],{"class":112},[106,7980,7891],{"class":1955},[106,7982,7983],{"class":116}," s2",[106,7985,162],{"class":112},[106,7987,1013],{"class":116},[106,7989,7990],{"class":221},"\"王五\"",[106,7992,495],{"class":116},[106,7994,767],{"class":165},[106,7996,495],{"class":116},[106,7998,371],{"class":165},[106,8000,3987],{"class":116},[106,8002,8004],{"class":108,"line":8003},41,[106,8005,2392],{"emptyLinePlaceholder":33},[106,8007,8009],{"class":108,"line":8008},42,[106,8010,8011],{"class":175},"    \u002F\u002F2.3在定义结构体时顺便创建结构体变量\n",[106,8013,8015,8018,8020,8022],{"class":108,"line":8014},43,[106,8016,8017],{"class":116},"    s3.name",[106,8019,162],{"class":112},[106,8021,3670],{"class":221},[106,8023,1283],{"class":116},[106,8025,8027,8030,8032,8034],{"class":108,"line":8026},44,[106,8028,8029],{"class":116},"    s3.age",[106,8031,162],{"class":112},[106,8033,767],{"class":165},[106,8035,1283],{"class":116},[106,8037,8039,8042,8044,8046],{"class":108,"line":8038},45,[106,8040,8041],{"class":116},"    s3.score",[106,8043,162],{"class":112},[106,8045,817],{"class":165},[106,8047,1283],{"class":116},[106,8049,8051],{"class":108,"line":8050},46,[106,8052,1557],{"class":116},[14,8054,8055],{},"注意：结构体定义时关键词struct不可以省略，但是创建是可以省略",[48,8057,8059],{"id":8058},"_42结构体数组","4.2结构体数组",[14,8061,8062],{},"将自定义的结构体放入到数组中方便维护",[14,8064,8065,8066,8069],{},"语法：struct 结构体名 数组名",[106,8067,8068],{},"元素个数","={ {}，{},...{} };",[97,8071,8073],{"className":99,"code":8072,"language":101,"meta":25,"style":25},"#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",[103,8074,8075,8081,8091,8097,8102,8108,8112,8116,8122,8128,8132,8136,8144,8148,8153,8168,8172,8188,8204,8208,8213,8229,8244,8259,8264,8290,8294,8317,8321],{"__ignoreMap":25},[106,8076,8077,8079],{"class":108,"line":109},[106,8078,1941],{"class":112},[106,8080,1944],{"class":221},[106,8082,8083,8085,8087,8089],{"class":108,"line":28},[106,8084,1949],{"class":112},[106,8086,1952],{"class":112},[106,8088,1956],{"class":1955},[106,8090,1283],{"class":116},[106,8092,8093,8095],{"class":108,"line":1172},[106,8094,1941],{"class":112},[106,8096,7742],{"class":221},[106,8098,8099],{"class":108,"line":1187},[106,8100,8101],{"class":175},"\u002F\u002F1.定义结构体\n",[106,8103,8104,8106],{"class":108,"line":1193},[106,8105,7752],{"class":112},[106,8107,7755],{"class":1955},[106,8109,8110],{"class":108,"line":1207},[106,8111,1538],{"class":116},[106,8113,8114],{"class":108,"line":1213},[106,8115,7778],{"class":116},[106,8117,8118,8120],{"class":108,"line":1304},[106,8119,1977],{"class":112},[106,8121,7790],{"class":116},[106,8123,8124,8126],{"class":108,"line":1310},[106,8125,1977],{"class":112},[106,8127,7802],{"class":116},[106,8129,8130],{"class":108,"line":1322},[106,8131,2392],{"emptyLinePlaceholder":33},[106,8133,8134],{"class":108,"line":1604},[106,8135,3987],{"class":116},[106,8137,8138,8140,8142],{"class":108,"line":1609},[106,8139,120],{"class":112},[106,8141,1965],{"class":1955},[106,8143,1968],{"class":116},[106,8145,8146],{"class":108,"line":1615},[106,8147,1538],{"class":116},[106,8149,8150],{"class":108,"line":1620},[106,8151,8152],{"class":175},"    \u002F\u002F2.创建结构体数组\n",[106,8154,8155,8157,8159,8162,8164,8166],{"class":108,"line":1634},[106,8156,7888],{"class":112},[106,8158,7891],{"class":1955},[106,8160,8161],{"class":116}," stuArray[",[106,8163,194],{"class":165},[106,8165,1057],{"class":116},[106,8167,4900],{"class":112},[106,8169,8170],{"class":108,"line":1639},[106,8171,2022],{"class":116},[106,8173,8174,8176,8178,8180,8182,8184,8186],{"class":108,"line":1645},[106,8175,4909],{"class":116},[106,8177,7909],{"class":221},[106,8179,495],{"class":116},[106,8181,767],{"class":165},[106,8183,495],{"class":116},[106,8185,428],{"class":165},[106,8187,4922],{"class":116},[106,8189,8190,8192,8194,8196,8198,8200,8202],{"class":108,"line":1666},[106,8191,4909],{"class":116},[106,8193,3670],{"class":221},[106,8195,495],{"class":116},[106,8197,692],{"class":165},[106,8199,495],{"class":116},[106,8201,692],{"class":165},[106,8203,1557],{"class":116},[106,8205,8206],{"class":108,"line":1671},[106,8207,2179],{"class":116},[106,8209,8210],{"class":108,"line":1685},[106,8211,8212],{"class":175},"    \u002F\u002F3.给结构体数组中的元素赋值\n",[106,8214,8215,8218,8220,8223,8225,8227],{"class":108,"line":1690},[106,8216,8217],{"class":116},"    stuArray[",[106,8219,334],{"class":165},[106,8221,8222],{"class":116},"].name",[106,8224,162],{"class":112},[106,8226,3693],{"class":221},[106,8228,1283],{"class":116},[106,8230,8231,8233,8235,8238,8240,8242],{"class":108,"line":1719},[106,8232,8217],{"class":116},[106,8234,334],{"class":165},[106,8236,8237],{"class":116},"].age",[106,8239,162],{"class":112},[106,8241,194],{"class":165},[106,8243,1283],{"class":116},[106,8245,8246,8248,8250,8253,8255,8257],{"class":108,"line":1724},[106,8247,8217],{"class":116},[106,8249,334],{"class":165},[106,8251,8252],{"class":116},"].score",[106,8254,162],{"class":112},[106,8256,194],{"class":165},[106,8258,1283],{"class":116},[106,8260,8261],{"class":108,"line":1741},[106,8262,8263],{"class":175},"    \u002F\u002F4.遍历结构体数组\n",[106,8265,8266,8268,8270,8272,8274,8276,8278,8280,8282,8284,8286,8288],{"class":108,"line":1746},[106,8267,3193],{"class":112},[106,8269,1650],{"class":116},[106,8271,120],{"class":112},[106,8273,3024],{"class":116},[106,8275,162],{"class":112},[106,8277,308],{"class":165},[106,8279,3031],{"class":116},[106,8281,1027],{"class":112},[106,8283,194],{"class":165},[106,8285,3031],{"class":116},[106,8287,2284],{"class":112},[106,8289,123],{"class":116},[106,8291,8292],{"class":108,"line":1751},[106,8293,2022],{"class":116},[106,8295,8296,8298,8300,8303,8305,8308,8310,8313,8315],{"class":108,"line":1756},[106,8297,3443],{"class":116},[106,8299,1161],{"class":112},[106,8301,8302],{"class":116},"stuArray[i].name",[106,8304,1161],{"class":112},[106,8306,8307],{"class":116},"stuArray[i].age",[106,8309,1161],{"class":112},[106,8311,8312],{"class":116},"stuArray[i].score",[106,8314,1161],{"class":112},[106,8316,1184],{"class":116},[106,8318,8319],{"class":108,"line":1770},[106,8320,2179],{"class":116},[106,8322,8323],{"class":108,"line":1775},[106,8324,1557],{"class":116},[48,8326,8328],{"id":8327},"_43结构体指针","4.3结构体指针",[14,8330,8331],{},"作用：通过指针访问结构体中的成员",[14,8333,8334],{},"利用操作符->可以通过结构体指针访问结构体属性",[97,8336,8338],{"className":99,"code":8337,"language":101,"meta":25,"style":25},"#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",[103,8339,8340,8346,8356,8362,8366,8372,8376,8380,8386,8392,8396,8404,8408,8413,8438,8443,8458,8463,8486],{"__ignoreMap":25},[106,8341,8342,8344],{"class":108,"line":109},[106,8343,1941],{"class":112},[106,8345,1944],{"class":221},[106,8347,8348,8350,8352,8354],{"class":108,"line":28},[106,8349,1949],{"class":112},[106,8351,1952],{"class":112},[106,8353,1956],{"class":1955},[106,8355,1283],{"class":116},[106,8357,8358,8360],{"class":108,"line":1172},[106,8359,1941],{"class":112},[106,8361,7742],{"class":221},[106,8363,8364],{"class":108,"line":1187},[106,8365,8101],{"class":175},[106,8367,8368,8370],{"class":108,"line":1193},[106,8369,7752],{"class":112},[106,8371,7755],{"class":1955},[106,8373,8374],{"class":108,"line":1207},[106,8375,1538],{"class":116},[106,8377,8378],{"class":108,"line":1213},[106,8379,7778],{"class":116},[106,8381,8382,8384],{"class":108,"line":1304},[106,8383,1977],{"class":112},[106,8385,7790],{"class":116},[106,8387,8388,8390],{"class":108,"line":1310},[106,8389,1977],{"class":112},[106,8391,7802],{"class":116},[106,8393,8394],{"class":108,"line":1322},[106,8395,3987],{"class":116},[106,8397,8398,8400,8402],{"class":108,"line":1604},[106,8399,120],{"class":112},[106,8401,1965],{"class":1955},[106,8403,1968],{"class":116},[106,8405,8406],{"class":108,"line":1609},[106,8407,1538],{"class":116},[106,8409,8410],{"class":108,"line":1615},[106,8411,8412],{"class":175},"    \u002F\u002F创建学生结构体变量\n",[106,8414,8415,8417,8419,8422,8424,8426,8428,8430,8432,8434,8436],{"class":108,"line":1620},[106,8416,7888],{"class":112},[106,8418,7891],{"class":1955},[106,8420,8421],{"class":116}," s",[106,8423,162],{"class":112},[106,8425,1013],{"class":116},[106,8427,7909],{"class":221},[106,8429,495],{"class":116},[106,8431,767],{"class":165},[106,8433,495],{"class":116},[106,8435,1714],{"class":165},[106,8437,3987],{"class":116},[106,8439,8440],{"class":108,"line":1634},[106,8441,8442],{"class":175},"    \u002F\u002F通过指针指向结构体变量\n",[106,8444,8445,8447,8449,8451,8453,8455],{"class":108,"line":1639},[106,8446,7888],{"class":112},[106,8448,7891],{"class":1955},[106,8450,6511],{"class":112},[106,8452,14],{"class":116},[106,8454,6332],{"class":112},[106,8456,8457],{"class":116},"s\n",[106,8459,8460],{"class":108,"line":1645},[106,8461,8462],{"class":175},"    \u002F\u002F通过指针访问结构体变量中的数据\n",[106,8464,8465,8467,8469,8472,8474,8477,8479,8482,8484],{"class":108,"line":1666},[106,8466,1543],{"class":116},[106,8468,1161],{"class":112},[106,8470,8471],{"class":116},"p->name",[106,8473,1161],{"class":112},[106,8475,8476],{"class":116},"p->age",[106,8478,1161],{"class":112},[106,8480,8481],{"class":116},"p->score",[106,8483,1161],{"class":112},[106,8485,1184],{"class":116},[106,8487,8488],{"class":108,"line":1671},[106,8489,1557],{"class":116},[48,8491,8493],{"id":8492},"_44结构体嵌套结构体","4.4结构体嵌套结构体",[14,8495,8496],{},"作用：结构体中的成员可以是另一个结构体",[14,8498,8499],{},"例如：每个老师辅导一个学员，一个老师的结构体中，记录一个学生的结构体",[97,8501,8503],{"className":99,"code":8502,"language":101,"meta":25,"style":25},"#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",[103,8504,8505,8511,8521,8527,8532,8540,8544,8548,8554,8560,8564,8569,8576,8580,8587,8591,8597,8602,8606,8614,8618,8623,8628,8633,8644,8656,8667,8680,8691,8702],{"__ignoreMap":25},[106,8506,8507,8509],{"class":108,"line":109},[106,8508,1941],{"class":112},[106,8510,1944],{"class":221},[106,8512,8513,8515,8517,8519],{"class":108,"line":28},[106,8514,1949],{"class":112},[106,8516,1952],{"class":112},[106,8518,1956],{"class":1955},[106,8520,1283],{"class":116},[106,8522,8523,8525],{"class":108,"line":1172},[106,8524,1941],{"class":112},[106,8526,7742],{"class":221},[106,8528,8529],{"class":108,"line":1187},[106,8530,8531],{"class":175},"\u002F\u002F定义学生结构体\n",[106,8533,8534,8536,8538],{"class":108,"line":1193},[106,8535,7752],{"class":112},[106,8537,7891],{"class":1955},[106,8539,2666],{"class":116},[106,8541,8542],{"class":108,"line":1207},[106,8543,1538],{"class":116},[106,8545,8546],{"class":108,"line":1213},[106,8547,7778],{"class":116},[106,8549,8550,8552],{"class":108,"line":1304},[106,8551,1977],{"class":112},[106,8553,7790],{"class":116},[106,8555,8556,8558],{"class":108,"line":1310},[106,8557,1977],{"class":112},[106,8559,7802],{"class":116},[106,8561,8562],{"class":108,"line":1322},[106,8563,1557],{"class":116},[106,8565,8566],{"class":108,"line":1604},[106,8567,8568],{"class":175},"\u002F\u002F定义老师结构体\n",[106,8570,8571,8573],{"class":108,"line":1609},[106,8572,7752],{"class":112},[106,8574,8575],{"class":1955}," Teacher\n",[106,8577,8578],{"class":108,"line":1615},[106,8579,1538],{"class":116},[106,8581,8582,8584],{"class":108,"line":1620},[106,8583,1977],{"class":112},[106,8585,8586],{"class":116}," id;\n",[106,8588,8589],{"class":108,"line":1634},[106,8590,7778],{"class":116},[106,8592,8593,8595],{"class":108,"line":1639},[106,8594,1977],{"class":112},[106,8596,7790],{"class":116},[106,8598,8599],{"class":108,"line":1645},[106,8600,8601],{"class":116},"    Student stu;\n",[106,8603,8604],{"class":108,"line":1666},[106,8605,1557],{"class":116},[106,8607,8608,8610,8612],{"class":108,"line":1671},[106,8609,120],{"class":112},[106,8611,1965],{"class":1955},[106,8613,5971],{"class":116},[106,8615,8616],{"class":108,"line":1685},[106,8617,1538],{"class":116},[106,8619,8620],{"class":108,"line":1690},[106,8621,8622],{"class":175},"    \u002F\u002F结构体嵌套结构体\n",[106,8624,8625],{"class":108,"line":1719},[106,8626,8627],{"class":175},"    \u002F\u002F创建老师\n",[106,8629,8630],{"class":108,"line":1724},[106,8631,8632],{"class":116},"    Teacher t;\n",[106,8634,8635,8638,8640,8642],{"class":108,"line":1741},[106,8636,8637],{"class":116},"    t.id",[106,8639,162],{"class":112},[106,8641,428],{"class":165},[106,8643,1283],{"class":116},[106,8645,8646,8649,8651,8654],{"class":108,"line":1746},[106,8647,8648],{"class":116},"    t.name",[106,8650,162],{"class":112},[106,8652,8653],{"class":221},"\"老王\"",[106,8655,1283],{"class":116},[106,8657,8658,8661,8663,8665],{"class":108,"line":1751},[106,8659,8660],{"class":116},"    t.age",[106,8662,162],{"class":112},[106,8664,767],{"class":165},[106,8666,1283],{"class":116},[106,8668,8669,8672,8674,8677],{"class":108,"line":1756},[106,8670,8671],{"class":116},"    t.stu.name",[106,8673,162],{"class":112},[106,8675,8676],{"class":221},"\"小王\"",[106,8678,8679],{"class":116},"；\n",[106,8681,8682,8685,8687,8689],{"class":108,"line":1770},[106,8683,8684],{"class":116},"    t.stu.age",[106,8686,162],{"class":112},[106,8688,817],{"class":165},[106,8690,1283],{"class":116},[106,8692,8693,8696,8698,8700],{"class":108,"line":1775},[106,8694,8695],{"class":116},"    t.stu.score",[106,8697,162],{"class":112},[106,8699,461],{"class":165},[106,8701,1283],{"class":116},[106,8703,8704],{"class":108,"line":2569},[106,8705,1557],{"class":116},[48,8707,8709],{"id":8708},"_45结构体做函数参数","4.5结构体做函数参数",[14,8711,8712],{},"案例学习:将学生传入到一个参数中，打印学生身上的所有信息",[97,8714,8716],{"className":99,"code":8715,"language":101,"meta":25,"style":25},"#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",[103,8717,8718,8724,8734,8740,8746,8750,8754,8760,8766,8770,8775,8780,8797,8801,8834,8838,8843,8862,8866,8897,8901,8909,8913,8922,8934,8946,8958,8971,8979,8992,9004,9012],{"__ignoreMap":25},[106,8719,8720,8722],{"class":108,"line":109},[106,8721,1941],{"class":112},[106,8723,1944],{"class":221},[106,8725,8726,8728,8730,8732],{"class":108,"line":28},[106,8727,1949],{"class":112},[106,8729,1952],{"class":112},[106,8731,1956],{"class":1955},[106,8733,1283],{"class":116},[106,8735,8736,8738],{"class":108,"line":1172},[106,8737,1941],{"class":112},[106,8739,7742],{"class":221},[106,8741,8742,8744],{"class":108,"line":1187},[106,8743,7752],{"class":112},[106,8745,7755],{"class":1955},[106,8747,8748],{"class":108,"line":1193},[106,8749,1538],{"class":116},[106,8751,8752],{"class":108,"line":1207},[106,8753,7778],{"class":116},[106,8755,8756,8758],{"class":108,"line":1213},[106,8757,1977],{"class":112},[106,8759,7790],{"class":116},[106,8761,8762,8764],{"class":108,"line":1304},[106,8763,1977],{"class":112},[106,8765,7802],{"class":116},[106,8767,8768],{"class":108,"line":1310},[106,8769,3987],{"class":116},[106,8771,8772],{"class":108,"line":1322},[106,8773,8774],{"class":175},"\u002F\u002F打印学生信息的函数\n",[106,8776,8777],{"class":108,"line":1604},[106,8778,8779],{"class":175},"\u002F\u002F值传递\n",[106,8781,8782,8784,8787,8789,8791,8793,8795],{"class":108,"line":1609},[106,8783,5357],{"class":112},[106,8785,8786],{"class":1955}," printStudent1",[106,8788,117],{"class":116},[106,8790,7752],{"class":112},[106,8792,7891],{"class":1955},[106,8794,8421],{"class":5209},[106,8796,123],{"class":116},[106,8798,8799],{"class":108,"line":1615},[106,8800,1538],{"class":116},[106,8802,8803,8805,8807,8810,8812,8815,8817,8820,8822,8824,8826,8829,8831],{"class":108,"line":1620},[106,8804,6522],{"class":116},[106,8806,1161],{"class":112},[106,8808,8809],{"class":116}," s.name ",[106,8811,1161],{"class":112},[106,8813,8814],{"class":221}," \" \"",[106,8816,1437],{"class":112},[106,8818,8819],{"class":116}," s.age ",[106,8821,1161],{"class":112},[106,8823,8814],{"class":221},[106,8825,1437],{"class":112},[106,8827,8828],{"class":116}," s.score ",[106,8830,1161],{"class":112},[106,8832,8833],{"class":116}," endl;\n",[106,8835,8836],{"class":108,"line":1634},[106,8837,1557],{"class":116},[106,8839,8840],{"class":108,"line":1639},[106,8841,8842],{"class":175},"\u002F\u002F地址传递\n",[106,8844,8845,8847,8850,8852,8854,8856,8858,8860],{"class":108,"line":1645},[106,8846,5357],{"class":112},[106,8848,8849],{"class":1955}," printStudent2",[106,8851,117],{"class":116},[106,8853,7752],{"class":112},[106,8855,7891],{"class":1955},[106,8857,6511],{"class":112},[106,8859,812],{"class":5209},[106,8861,123],{"class":116},[106,8863,8864],{"class":108,"line":1666},[106,8865,1538],{"class":116},[106,8867,8868,8870,8872,8875,8877,8879,8881,8884,8886,8888,8890,8893,8895],{"class":108,"line":1671},[106,8869,6522],{"class":116},[106,8871,1161],{"class":112},[106,8873,8874],{"class":116}," s->name ",[106,8876,1161],{"class":112},[106,8878,8814],{"class":221},[106,8880,1437],{"class":112},[106,8882,8883],{"class":116}," s->age ",[106,8885,1161],{"class":112},[106,8887,8814],{"class":221},[106,8889,1437],{"class":112},[106,8891,8892],{"class":116}," s->score ",[106,8894,1161],{"class":112},[106,8896,8833],{"class":116},[106,8898,8899],{"class":108,"line":1685},[106,8900,1557],{"class":116},[106,8902,8903,8905,8907],{"class":108,"line":1690},[106,8904,120],{"class":112},[106,8906,1965],{"class":1955},[106,8908,1968],{"class":116},[106,8910,8911],{"class":108,"line":1719},[106,8912,1538],{"class":116},[106,8914,8915,8917,8919],{"class":108,"line":1724},[106,8916,7888],{"class":112},[106,8918,7891],{"class":1955},[106,8920,8921],{"class":116}," s;\n",[106,8923,8924,8927,8929,8932],{"class":108,"line":1741},[106,8925,8926],{"class":116},"    s.name ",[106,8928,162],{"class":112},[106,8930,8931],{"class":221}," \"张三\"",[106,8933,1283],{"class":116},[106,8935,8936,8939,8941,8944],{"class":108,"line":1746},[106,8937,8938],{"class":116},"    s.age ",[106,8940,162],{"class":112},[106,8942,8943],{"class":165}," 20",[106,8945,1283],{"class":116},[106,8947,8948,8951,8953,8956],{"class":108,"line":1751},[106,8949,8950],{"class":116},"    s.score ",[106,8952,162],{"class":112},[106,8954,8955],{"class":165}," 85",[106,8957,1283],{"class":116},[106,8959,8960,8962,8964,8967,8969],{"class":108,"line":1756},[106,8961,1543],{"class":116},[106,8963,1161],{"class":112},[106,8965,8966],{"class":221},"\"值传递:\"",[106,8968,1161],{"class":112},[106,8970,1184],{"class":116},[106,8972,8973,8976],{"class":108,"line":1770},[106,8974,8975],{"class":1955},"    printStudent1",[106,8977,8978],{"class":116},"(s);\n",[106,8980,8981,8983,8985,8988,8990],{"class":108,"line":1775},[106,8982,1543],{"class":116},[106,8984,1161],{"class":112},[106,8986,8987],{"class":221},"\"地址传递:\"",[106,8989,1161],{"class":112},[106,8991,1184],{"class":116},[106,8993,8994,8997,8999,9001],{"class":108,"line":2569},[106,8995,8996],{"class":1955},"    printStudent2",[106,8998,117],{"class":116},[106,9000,470],{"class":112},[106,9002,9003],{"class":116},"s); \n",[106,9005,9006,9008,9010],{"class":108,"line":2583},[106,9007,4082],{"class":112},[106,9009,4085],{"class":165},[106,9011,1283],{"class":116},[106,9013,9014],{"class":108,"line":2591},[106,9015,1557],{"class":116},[14,9017,9018],{},"注意：",[1124,9020,9021,9024],{},[63,9022,9023],{},"1.先定义结构体，不要在函数中写结构体的定义",[63,9025,9026],{},"2.不想修改主函数中的数据，就用值传递；反之用地址传递",[48,9028,9030],{"id":9029},"_46结构体中const使用场景","4.6结构体中const使用场景",[14,9032,9033],{},"用const防止误操作",[97,9035,9037],{"className":99,"code":9036,"language":101,"meta":25,"style":25},"#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",[103,9038,9039,9045,9055,9061,9066,9070,9074,9080,9086,9090,9106,9110,9133,9137,9145,9149,9170,9177,9181],{"__ignoreMap":25},[106,9040,9041,9043],{"class":108,"line":109},[106,9042,1941],{"class":112},[106,9044,1944],{"class":221},[106,9046,9047,9049,9051,9053],{"class":108,"line":28},[106,9048,1949],{"class":112},[106,9050,1952],{"class":112},[106,9052,1956],{"class":1955},[106,9054,1283],{"class":116},[106,9056,9057,9059],{"class":108,"line":1172},[106,9058,1941],{"class":112},[106,9060,7742],{"class":221},[106,9062,9063],{"class":108,"line":1187},[106,9064,9065],{"class":116},"sctuct Student\n",[106,9067,9068],{"class":108,"line":1193},[106,9069,1538],{"class":116},[106,9071,9072],{"class":108,"line":1207},[106,9073,7778],{"class":116},[106,9075,9076,9078],{"class":108,"line":1213},[106,9077,1977],{"class":112},[106,9079,7790],{"class":116},[106,9081,9082,9084],{"class":108,"line":1304},[106,9083,1977],{"class":112},[106,9085,7802],{"class":116},[106,9087,9088],{"class":108,"line":1310},[106,9089,3987],{"class":116},[106,9091,9092,9094,9097,9099,9102,9104],{"class":108,"line":1322},[106,9093,5357],{"class":112},[106,9095,9096],{"class":1955}," printStudents",[106,9098,117],{"class":116},[106,9100,9101],{"class":1955},"student",[106,9103,8421],{"class":5209},[106,9105,123],{"class":116},[106,9107,9108],{"class":108,"line":1604},[106,9109,1538],{"class":116},[106,9111,9112,9114,9116,9119,9121,9124,9126,9129,9131],{"class":108,"line":1609},[106,9113,1543],{"class":116},[106,9115,1161],{"class":112},[106,9117,9118],{"class":116},"s.name",[106,9120,1161],{"class":112},[106,9122,9123],{"class":116},"s.age",[106,9125,1161],{"class":112},[106,9127,9128],{"class":116},"s.score",[106,9130,1161],{"class":112},[106,9132,1184],{"class":116},[106,9134,9135],{"class":108,"line":1615},[106,9136,1557],{"class":116},[106,9138,9139,9141,9143],{"class":108,"line":1620},[106,9140,120],{"class":112},[106,9142,1965],{"class":1955},[106,9144,5971],{"class":116},[106,9146,9147],{"class":108,"line":1634},[106,9148,1538],{"class":116},[106,9150,9151,9154,9156,9158,9160,9162,9164,9166,9168],{"class":108,"line":1639},[106,9152,9153],{"class":116},"    Student s",[106,9155,162],{"class":112},[106,9157,1013],{"class":116},[106,9159,7909],{"class":221},[106,9161,495],{"class":116},[106,9163,767],{"class":165},[106,9165,495],{"class":116},[106,9167,767],{"class":165},[106,9169,3987],{"class":116},[106,9171,9172,9175],{"class":108,"line":1645},[106,9173,9174],{"class":1955},"    printStudent",[106,9176,8978],{"class":116},[106,9178,9179],{"class":108,"line":1666},[106,9180,2392],{"emptyLinePlaceholder":33},[106,9182,9183],{"class":108,"line":1671},[106,9184,1557],{"class":116},[14,9186,9018],{},[1124,9188,9189,9192,9195],{},[63,9190,9191],{},"1.值传递时形参会copy一份实参的数值，所以实参数据多时，就会比较浪费内存",[63,9193,9194],{},"2.将函数中的形参改为指针，可以减少内存空间，而且不会复制新的副本出来",[63,9196,9197],{},"3.在结构体形参前边加上const后，函数中就没法改参数信息了（加入const之后，一旦有修改的操作就会报错，可以防止我们的误操作）",[97,9199,9201],{"className":99,"code":9200,"language":101,"meta":25,"style":25},"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",[103,9202,9203,9222,9226,9231,9251],{"__ignoreMap":25},[106,9204,9205,9207,9209,9211,9213,9216,9218,9220],{"class":108,"line":109},[106,9206,5357],{"class":112},[106,9208,9096],{"class":1955},[106,9210,117],{"class":116},[106,9212,6785],{"class":112},[106,9214,9215],{"class":1955}," student",[106,9217,6511],{"class":112},[106,9219,812],{"class":5209},[106,9221,123],{"class":116},[106,9223,9224],{"class":108,"line":28},[106,9225,1538],{"class":116},[106,9227,9228],{"class":108,"line":1172},[106,9229,9230],{"class":175},"    \u002F\u002F s->age=18;\u002F\u002F提示❎无，不可以这样做\n",[106,9232,9233,9235,9237,9239,9241,9243,9245,9247,9249],{"class":108,"line":1187},[106,9234,1543],{"class":116},[106,9236,1161],{"class":112},[106,9238,9118],{"class":116},[106,9240,1161],{"class":112},[106,9242,9123],{"class":116},[106,9244,1161],{"class":112},[106,9246,9128],{"class":116},[106,9248,1161],{"class":112},[106,9250,1184],{"class":116},[106,9252,9253],{"class":108,"line":1193},[106,9254,1557],{"class":116},[48,9256,9258],{"id":9257},"_47案例","4.7案例",[60,9260,9261],{},[63,9262,9263],{},"案例说明：学校正在做毕设项目，每名老师带领5个学生，总共有3名老师，需求如下：设计学生和老师的结构体，其中在老师的结构体中，有老师姓名和一个存放5名学生的数组，作为成员学生的成员有姓名、考试分数，创建数组存放3名老师，通过函数给每个老师及所带的学生赋值，最终打印出老师数据以及老师所带的学生数据。",[97,9265,9267],{"className":99,"code":9266,"language":101,"meta":25,"style":25},"#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",[103,9268,9269,9275,9285,9291,9298,9302,9308,9312,9317,9323,9329,9333,9337,9343,9347,9352,9357,9370,9374,9379,9405,9409,9421,9448,9452,9464,9474,9478,9483,9512,9516,9528,9537,9564,9575,9585,9589,9593,9597,9602,9626,9630,9654,9658,9677,9703,9707,9732,9755,9779,9784,9789,9794,9803,9808,9814,9835,9841,9855,9861,9888,9897,9903,9911,9916],{"__ignoreMap":25},[106,9270,9271,9273],{"class":108,"line":109},[106,9272,1941],{"class":112},[106,9274,1944],{"class":221},[106,9276,9277,9279,9281,9283],{"class":108,"line":28},[106,9278,1949],{"class":112},[106,9280,1952],{"class":112},[106,9282,1956],{"class":1955},[106,9284,1283],{"class":116},[106,9286,9287,9289],{"class":108,"line":1172},[106,9288,1941],{"class":112},[106,9290,7742],{"class":221},[106,9292,9293,9295],{"class":108,"line":1187},[106,9294,1941],{"class":112},[106,9296,9297],{"class":221},"\u003Cctime>\n",[106,9299,9300],{"class":108,"line":1193},[106,9301,8531],{"class":175},[106,9303,9304,9306],{"class":108,"line":1207},[106,9305,7752],{"class":112},[106,9307,7755],{"class":1955},[106,9309,9310],{"class":108,"line":1213},[106,9311,1538],{"class":116},[106,9313,9314],{"class":108,"line":1304},[106,9315,9316],{"class":116},"    string sName;\n",[106,9318,9319,9321],{"class":108,"line":1310},[106,9320,1977],{"class":112},[106,9322,7790],{"class":116},[106,9324,9325,9327],{"class":108,"line":1322},[106,9326,1977],{"class":112},[106,9328,7802],{"class":116},[106,9330,9331],{"class":108,"line":1604},[106,9332,3987],{"class":116},[106,9334,9335],{"class":108,"line":1609},[106,9336,8568],{"class":175},[106,9338,9339,9341],{"class":108,"line":1615},[106,9340,7752],{"class":112},[106,9342,8575],{"class":1955},[106,9344,9345],{"class":108,"line":1620},[106,9346,1538],{"class":116},[106,9348,9349],{"class":108,"line":1634},[106,9350,9351],{"class":116},"    string tName;\n",[106,9353,9354],{"class":108,"line":1639},[106,9355,9356],{"class":175},"    \u002F\u002F学生数组\n",[106,9358,9359,9361,9363,9366,9368],{"class":108,"line":1645},[106,9360,7888],{"class":112},[106,9362,7891],{"class":1955},[106,9364,9365],{"class":116}," sArray[",[106,9367,436],{"class":165},[106,9369,4682],{"class":116},[106,9371,9372],{"class":108,"line":1666},[106,9373,3987],{"class":116},[106,9375,9376],{"class":108,"line":1671},[106,9377,9378],{"class":175},"\u002F\u002F给老师和学生赋值的函数\n",[106,9380,9381,9383,9386,9388,9390,9393,9396,9399,9401,9403],{"class":108,"line":1685},[106,9382,5357],{"class":112},[106,9384,9385],{"class":1955}," allocateSpace",[106,9387,117],{"class":116},[106,9389,7752],{"class":112},[106,9391,9392],{"class":1955}," Teacher",[106,9394,9395],{"class":5209}," tArray",[106,9397,9398],{"class":116},"[],",[106,9400,120],{"class":112},[106,9402,7324],{"class":5209},[106,9404,123],{"class":116},[106,9406,9407],{"class":108,"line":1690},[106,9408,1538],{"class":116},[106,9410,9411,9414,9416,9419],{"class":108,"line":1719},[106,9412,9413],{"class":116},"    string nameSeed",[106,9415,162],{"class":112},[106,9417,9418],{"class":221},"\"ABCDE\"",[106,9420,1283],{"class":116},[106,9422,9423,9425,9427,9429,9432,9434,9436,9439,9441,9444,9446],{"class":108,"line":1724},[106,9424,3193],{"class":112},[106,9426,1650],{"class":116},[106,9428,120],{"class":112},[106,9430,9431],{"class":116}," i ",[106,9433,162],{"class":112},[106,9435,4085],{"class":165},[106,9437,9438],{"class":116},"; i ",[106,9440,1027],{"class":112},[106,9442,9443],{"class":116}," len; i",[106,9445,2284],{"class":112},[106,9447,123],{"class":116},[106,9449,9450],{"class":108,"line":1741},[106,9451,2022],{"class":116},[106,9453,9454,9457,9459,9462],{"class":108,"line":1746},[106,9455,9456],{"class":116},"        tArray[i].tName ",[106,9458,162],{"class":112},[106,9460,9461],{"class":221}," \"Teacher_\"",[106,9463,1283],{"class":116},[106,9465,9466,9468,9471],{"class":108,"line":1751},[106,9467,9456],{"class":116},[106,9469,9470],{"class":112},"+=",[106,9472,9473],{"class":116},"nameSeed[i];\n",[106,9475,9476],{"class":108,"line":1756},[106,9477,2392],{"emptyLinePlaceholder":33},[106,9479,9480],{"class":108,"line":1770},[106,9481,9482],{"class":175},"        \u002F\u002F通过循环给每名老师带的学生赋值\n",[106,9484,9485,9487,9489,9491,9494,9496,9498,9501,9503,9505,9508,9510],{"class":108,"line":1775},[106,9486,3395],{"class":112},[106,9488,1650],{"class":116},[106,9490,120],{"class":112},[106,9492,9493],{"class":116}," j ",[106,9495,162],{"class":112},[106,9497,4085],{"class":165},[106,9499,9500],{"class":116},"; j ",[106,9502,1027],{"class":112},[106,9504,2140],{"class":165},[106,9506,9507],{"class":116},"; j",[106,9509,2284],{"class":112},[106,9511,123],{"class":116},[106,9513,9514],{"class":108,"line":2569},[106,9515,2502],{"class":116},[106,9517,9518,9521,9523,9526],{"class":108,"line":2583},[106,9519,9520],{"class":116},"            tArray[i].sArray[j].sName ",[106,9522,162],{"class":112},[106,9524,9525],{"class":221}," \"Student_\"",[106,9527,1283],{"class":116},[106,9529,9530,9532,9534],{"class":108,"line":2591},[106,9531,9520],{"class":116},[106,9533,9470],{"class":112},[106,9535,9536],{"class":116}," nameSeed[j];\n",[106,9538,9539,9542,9545,9547,9549,9551,9553,9555,9557,9559,9561],{"class":108,"line":2596},[106,9540,9541],{"class":112},"            int",[106,9543,9544],{"class":116}," random",[106,9546,162],{"class":112},[106,9548,2416],{"class":1955},[106,9550,2419],{"class":116},[106,9552,445],{"class":112},[106,9554,1024],{"class":165},[106,9556,598],{"class":112},[106,9558,518],{"class":165},[106,9560,172],{"class":116},[106,9562,9563],{"class":175},"\u002F\u002F40~99\n",[106,9565,9566,9569,9571,9573],{"class":108,"line":2602},[106,9567,9568],{"class":116},"            tArray[i].sArray[j].age ",[106,9570,162],{"class":112},[106,9572,8943],{"class":165},[106,9574,1283],{"class":116},[106,9576,9577,9580,9582],{"class":108,"line":2608},[106,9578,9579],{"class":116},"            tArray[i].sArray[j].score ",[106,9581,162],{"class":112},[106,9583,9584],{"class":116}," random;\n",[106,9586,9587],{"class":108,"line":2613},[106,9588,2521],{"class":116},[106,9590,9591],{"class":108,"line":7941},[106,9592,2179],{"class":116},[106,9594,9595],{"class":108,"line":7965},[106,9596,1557],{"class":116},[106,9598,9599],{"class":108,"line":7970},[106,9600,9601],{"class":175},"\u002F\u002F打印所有信息的函数\n",[106,9603,9604,9606,9609,9611,9613,9615,9617,9620,9622,9624],{"class":108,"line":7976},[106,9605,5357],{"class":112},[106,9607,9608],{"class":1955}," printInfo",[106,9610,117],{"class":116},[106,9612,7752],{"class":112},[106,9614,9392],{"class":1955},[106,9616,9395],{"class":5209},[106,9618,9619],{"class":116},"[], ",[106,9621,120],{"class":112},[106,9623,7324],{"class":5209},[106,9625,123],{"class":116},[106,9627,9628],{"class":108,"line":8003},[106,9629,1538],{"class":116},[106,9631,9632,9634,9636,9638,9640,9642,9644,9646,9648,9650,9652],{"class":108,"line":8008},[106,9633,3193],{"class":112},[106,9635,1650],{"class":116},[106,9637,120],{"class":112},[106,9639,9431],{"class":116},[106,9641,162],{"class":112},[106,9643,4085],{"class":165},[106,9645,9438],{"class":116},[106,9647,1027],{"class":112},[106,9649,9443],{"class":116},[106,9651,2284],{"class":112},[106,9653,123],{"class":116},[106,9655,9656],{"class":108,"line":8014},[106,9657,2022],{"class":116},[106,9659,9660,9663,9665,9668,9670,9673,9675],{"class":108,"line":8026},[106,9661,9662],{"class":116},"        cout ",[106,9664,1161],{"class":112},[106,9666,9667],{"class":221}," \"Teacher: \"",[106,9669,1437],{"class":112},[106,9671,9672],{"class":116}," tArray[i].tName ",[106,9674,1161],{"class":112},[106,9676,8833],{"class":116},[106,9678,9679,9681,9683,9685,9687,9689,9691,9693,9695,9697,9699,9701],{"class":108,"line":8038},[106,9680,3395],{"class":112},[106,9682,1650],{"class":116},[106,9684,120],{"class":112},[106,9686,9493],{"class":116},[106,9688,162],{"class":112},[106,9690,4085],{"class":165},[106,9692,9500],{"class":116},[106,9694,1027],{"class":112},[106,9696,2140],{"class":165},[106,9698,9507],{"class":116},[106,9700,2284],{"class":112},[106,9702,123],{"class":116},[106,9704,9705],{"class":108,"line":8050},[106,9706,2502],{"class":116},[106,9708,9710,9713,9715,9718,9720,9723,9725,9728,9730],{"class":108,"line":9709},47,[106,9711,9712],{"class":116},"            cout ",[106,9714,1161],{"class":112},[106,9716,9717],{"class":221}," \"",[106,9719,1223],{"class":165},[106,9721,9722],{"class":221},"Student: \"",[106,9724,1437],{"class":112},[106,9726,9727],{"class":116}," tArray[i].sArray[j].sName",[106,9729,1161],{"class":112},[106,9731,1184],{"class":116},[106,9733,9735,9737,9739,9741,9743,9746,9748,9751,9753],{"class":108,"line":9734},48,[106,9736,9712],{"class":116},[106,9738,1161],{"class":112},[106,9740,9717],{"class":221},[106,9742,1223],{"class":165},[106,9744,9745],{"class":221},"Age: \"",[106,9747,1437],{"class":112},[106,9749,9750],{"class":116}," tArray[i].sArray[j].age ",[106,9752,1161],{"class":112},[106,9754,8833],{"class":116},[106,9756,9758,9760,9762,9764,9766,9769,9771,9774,9776],{"class":108,"line":9757},49,[106,9759,9712],{"class":116},[106,9761,1161],{"class":112},[106,9763,9717],{"class":221},[106,9765,1223],{"class":165},[106,9767,9768],{"class":221},"Score: \"",[106,9770,1437],{"class":112},[106,9772,9773],{"class":116}," tArray[i].sArray[j].score ",[106,9775,1161],{"class":112},[106,9777,9778],{"class":116}," endl;   \n",[106,9780,9782],{"class":108,"line":9781},50,[106,9783,2521],{"class":116},[106,9785,9787],{"class":108,"line":9786},51,[106,9788,2179],{"class":116},[106,9790,9792],{"class":108,"line":9791},52,[106,9793,1557],{"class":116},[106,9795,9797,9799,9801],{"class":108,"line":9796},53,[106,9798,120],{"class":112},[106,9800,1965],{"class":1955},[106,9802,1968],{"class":116},[106,9804,9806],{"class":108,"line":9805},54,[106,9807,1538],{"class":116},[106,9809,9811],{"class":108,"line":9810},55,[106,9812,9813],{"class":175},"    \u002F\u002F随机数种子\n",[106,9815,9817,9819,9821,9823,9825,9827,9829,9831,9833],{"class":108,"line":9816},56,[106,9818,2365],{"class":1955},[106,9820,2368],{"class":116},[106,9822,2371],{"class":112},[106,9824,2374],{"class":112},[106,9826,546],{"class":116},[106,9828,2379],{"class":1955},[106,9830,117],{"class":116},[106,9832,2384],{"class":165},[106,9834,2387],{"class":116},[106,9836,9838],{"class":108,"line":9837},57,[106,9839,9840],{"class":175},"    \u002F\u002F1.创建3名老师的数组\n",[106,9842,9844,9846,9848,9851,9853],{"class":108,"line":9843},58,[106,9845,7888],{"class":112},[106,9847,9392],{"class":1955},[106,9849,9850],{"class":116}," tArray[",[106,9852,188],{"class":165},[106,9854,4682],{"class":116},[106,9856,9858],{"class":108,"line":9857},59,[106,9859,9860],{"class":175},"    \u002F\u002F2.通过函数给3名老师的信息赋值，并给老师带的学生信息赋值\n",[106,9862,9864,9866,9869,9871,9874,9877,9879,9881,9884,9886],{"class":108,"line":9863},60,[106,9865,1977],{"class":112},[106,9867,9868],{"class":116}," len ",[106,9870,162],{"class":112},[106,9872,9873],{"class":112}," sizeof",[106,9875,9876],{"class":116},"(tArray) ",[106,9878,701],{"class":112},[106,9880,9873],{"class":112},[106,9882,9883],{"class":116},"(tArray[",[106,9885,308],{"class":165},[106,9887,3848],{"class":116},[106,9889,9891,9894],{"class":108,"line":9890},61,[106,9892,9893],{"class":1955},"    allocateSpace",[106,9895,9896],{"class":116},"(tArray, len);\n",[106,9898,9900],{"class":108,"line":9899},62,[106,9901,9902],{"class":175},"    \u002F\u002F3.打印所有老师及所带的学生信息\n",[106,9904,9906,9909],{"class":108,"line":9905},63,[106,9907,9908],{"class":1955},"    printInfo",[106,9910,9896],{"class":116},[106,9912,9914],{"class":108,"line":9913},64,[106,9915,2392],{"emptyLinePlaceholder":33},[106,9917,9919],{"class":108,"line":9918},65,[106,9920,1557],{"class":116},[60,9922,9923],{"start":28},[63,9924,9925,9928],{},[266,9926,9927],{},"案例描述：","：设计一个英雄的结构体，包括成员姓名，年龄，性别;创建结构体数组，数组中存放5名英雄。通过冒泡排序的算法，将数组中的英雄按照年龄进行升序排序，最终打印排序后的结果。",[14,9930,9931],{},"五名英雄信息如下：",[97,9933,9937],{"className":9934,"code":9935,"language":9936,"meta":25,"style":25},"language-C++ shiki shiki-themes github-light github-dark","        {\"刘备\",23,\"男\"},\n        {\"关羽\",22,\"男\"},\n        {\"张飞\",20,\"男\"},\n        {\"赵云\",21,\"男\"},\n        {\"貂蝉\",19,\"女\"},\n","C++",[103,9938,9939,9957,9974,9991,10008],{"__ignoreMap":25},[106,9940,9941,9943,9946,9948,9950,9952,9955],{"class":108,"line":109},[106,9942,4909],{"class":116},[106,9944,9945],{"class":221},"\"刘备\"",[106,9947,495],{"class":116},[106,9949,892],{"class":165},[106,9951,495],{"class":116},[106,9953,9954],{"class":221},"\"男\"",[106,9956,4922],{"class":116},[106,9958,9959,9961,9964,9966,9968,9970,9972],{"class":108,"line":28},[106,9960,4909],{"class":116},[106,9962,9963],{"class":221},"\"关羽\"",[106,9965,495],{"class":116},[106,9967,867],{"class":165},[106,9969,495],{"class":116},[106,9971,9954],{"class":221},[106,9973,4922],{"class":116},[106,9975,9976,9978,9981,9983,9985,9987,9989],{"class":108,"line":1172},[106,9977,4909],{"class":116},[106,9979,9980],{"class":221},"\"张飞\"",[106,9982,495],{"class":116},[106,9984,817],{"class":165},[106,9986,495],{"class":116},[106,9988,9954],{"class":221},[106,9990,4922],{"class":116},[106,9992,9993,9995,9998,10000,10002,10004,10006],{"class":108,"line":1187},[106,9994,4909],{"class":116},[106,9996,9997],{"class":221},"\"赵云\"",[106,9999,495],{"class":116},[106,10001,842],{"class":165},[106,10003,495],{"class":116},[106,10005,9954],{"class":221},[106,10007,4922],{"class":116},[106,10009,10010,10012,10015,10017,10019,10021,10024],{"class":108,"line":1193},[106,10011,4909],{"class":116},[106,10013,10014],{"class":221},"\"貂蝉\"",[106,10016,495],{"class":116},[106,10018,792],{"class":165},[106,10020,495],{"class":116},[106,10022,10023],{"class":221},"\"女\"",[106,10025,4922],{"class":116},[14,10027,10028],{},"代码：",[97,10030,10032],{"className":99,"code":10031,"language":101,"meta":25,"style":25},"#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",[103,10033,10034,10040,10050,10056,10063,10067,10071,10077,10082,10086,10091,10114,10118,10143,10147,10180,10185,10214,10219,10234,10260,10280,10285,10290,10294,10298,10303,10325,10329,10353,10357,10419,10423,10427,10435,10439,10444,10455,10459,10475,10491,10507,10523,10539,10543,10563,10585,10590,10603,10610,10615,10621,10626,10639,10645],{"__ignoreMap":25},[106,10035,10036,10038],{"class":108,"line":109},[106,10037,1941],{"class":112},[106,10039,1944],{"class":221},[106,10041,10042,10044,10046,10048],{"class":108,"line":28},[106,10043,1949],{"class":112},[106,10045,1952],{"class":112},[106,10047,1956],{"class":1955},[106,10049,1283],{"class":116},[106,10051,10052,10054],{"class":108,"line":1172},[106,10053,1941],{"class":112},[106,10055,7742],{"class":221},[106,10057,10058,10060],{"class":108,"line":1187},[106,10059,7752],{"class":112},[106,10061,10062],{"class":1955}," Sanguo\n",[106,10064,10065],{"class":108,"line":1193},[106,10066,1538],{"class":116},[106,10068,10069],{"class":108,"line":1207},[106,10070,7778],{"class":116},[106,10072,10073,10075],{"class":108,"line":1213},[106,10074,1977],{"class":112},[106,10076,7790],{"class":116},[106,10078,10079],{"class":108,"line":1304},[106,10080,10081],{"class":116},"    string gender;\n",[106,10083,10084],{"class":108,"line":1310},[106,10085,3987],{"class":116},[106,10087,10088],{"class":108,"line":1322},[106,10089,10090],{"class":175},"\u002F\u002F定义排序函数\n",[106,10092,10093,10095,10097,10099,10102,10104,10106,10108,10110,10112],{"class":108,"line":1604},[106,10094,5357],{"class":112},[106,10096,7309],{"class":1955},[106,10098,117],{"class":116},[106,10100,10101],{"class":1955},"Sanguo",[106,10103,6511],{"class":112},[106,10105,812],{"class":5209},[106,10107,495],{"class":116},[106,10109,120],{"class":112},[106,10111,7324],{"class":5209},[106,10113,123],{"class":116},[106,10115,10116],{"class":108,"line":1609},[106,10117,1538],{"class":116},[106,10119,10120,10122,10124,10126,10128,10130,10132,10134,10136,10139,10141],{"class":108,"line":1615},[106,10121,3193],{"class":112},[106,10123,117],{"class":116},[106,10125,120],{"class":112},[106,10127,3024],{"class":116},[106,10129,162],{"class":112},[106,10131,308],{"class":165},[106,10133,3031],{"class":116},[106,10135,1027],{"class":112},[106,10137,10138],{"class":116},"len;i",[106,10140,2284],{"class":112},[106,10142,123],{"class":116},[106,10144,10145],{"class":108,"line":1620},[106,10146,2022],{"class":116},[106,10148,10149,10152,10154,10156,10158,10160,10162,10164,10166,10168,10170,10172,10174,10176,10178],{"class":108,"line":1634},[106,10150,10151],{"class":112},"     for",[106,10153,1650],{"class":116},[106,10155,120],{"class":112},[106,10157,3402],{"class":116},[106,10159,162],{"class":112},[106,10161,308],{"class":165},[106,10163,3409],{"class":116},[106,10165,1027],{"class":112},[106,10167,7351],{"class":116},[106,10169,649],{"class":112},[106,10171,334],{"class":165},[106,10173,649],{"class":112},[106,10175,3542],{"class":116},[106,10177,2284],{"class":112},[106,10179,123],{"class":116},[106,10181,10182],{"class":108,"line":1639},[106,10183,10184],{"class":116},"     {\n",[106,10186,10187,10190,10193,10195,10198,10200,10203,10205,10207,10209,10211],{"class":108,"line":1645},[106,10188,10189],{"class":112},"         if",[106,10191,10192],{"class":116}," ((s",[106,10194,598],{"class":112},[106,10196,10197],{"class":116},"j)->age ",[106,10199,1077],{"class":112},[106,10201,10202],{"class":116}," (s",[106,10204,598],{"class":112},[106,10206,584],{"class":116},[106,10208,598],{"class":112},[106,10210,334],{"class":165},[106,10212,10213],{"class":116},")->age)\n",[106,10215,10216],{"class":108,"line":1666},[106,10217,10218],{"class":116},"         {\n",[106,10220,10221,10224,10226,10229,10231],{"class":108,"line":1671},[106,10222,10223],{"class":116},"             Sanguo temp",[106,10225,7146],{"class":112},[106,10227,10228],{"class":116},"(s",[106,10230,598],{"class":112},[106,10232,10233],{"class":116},"j);\n",[106,10235,10236,10239,10241,10243,10246,10248,10250,10252,10254,10256,10258],{"class":108,"line":1685},[106,10237,10238],{"class":112},"             *",[106,10240,10228],{"class":116},[106,10242,598],{"class":112},[106,10244,10245],{"class":116},"j)",[106,10247,7146],{"class":112},[106,10249,10228],{"class":116},[106,10251,598],{"class":112},[106,10253,584],{"class":116},[106,10255,598],{"class":112},[106,10257,334],{"class":165},[106,10259,2711],{"class":116},[106,10261,10262,10264,10266,10268,10270,10272,10274,10276,10278],{"class":108,"line":1690},[106,10263,10238],{"class":112},[106,10265,10228],{"class":116},[106,10267,598],{"class":112},[106,10269,584],{"class":116},[106,10271,598],{"class":112},[106,10273,334],{"class":165},[106,10275,546],{"class":116},[106,10277,162],{"class":112},[106,10279,4272],{"class":116},[106,10281,10282],{"class":108,"line":1719},[106,10283,10284],{"class":116},"         }\n",[106,10286,10287],{"class":108,"line":1724},[106,10288,10289],{"class":116},"     }\n",[106,10291,10292],{"class":108,"line":1741},[106,10293,2179],{"class":116},[106,10295,10296],{"class":108,"line":1746},[106,10297,1557],{"class":116},[106,10299,10300],{"class":108,"line":1751},[106,10301,10302],{"class":175},"\u002F\u002F定义打印函数\n",[106,10304,10305,10307,10309,10311,10313,10315,10317,10319,10321,10323],{"class":108,"line":1756},[106,10306,5357],{"class":112},[106,10308,9608],{"class":1955},[106,10310,117],{"class":116},[106,10312,10101],{"class":1955},[106,10314,6511],{"class":112},[106,10316,812],{"class":5209},[106,10318,495],{"class":116},[106,10320,120],{"class":112},[106,10322,7324],{"class":5209},[106,10324,123],{"class":116},[106,10326,10327],{"class":108,"line":1770},[106,10328,1538],{"class":116},[106,10330,10331,10333,10335,10337,10339,10341,10343,10345,10347,10349,10351],{"class":108,"line":1775},[106,10332,3193],{"class":112},[106,10334,1650],{"class":116},[106,10336,120],{"class":112},[106,10338,3024],{"class":116},[106,10340,162],{"class":112},[106,10342,308],{"class":165},[106,10344,3031],{"class":116},[106,10346,1027],{"class":112},[106,10348,10138],{"class":116},[106,10350,2284],{"class":112},[106,10352,123],{"class":116},[106,10354,10355],{"class":108,"line":2569},[106,10356,2022],{"class":116},[106,10358,10359,10361,10363,10365,10367,10370,10372,10374,10376,10379,10381,10383,10385,10388,10390,10392,10394,10397,10399,10401,10403,10406,10408,10410,10412,10415,10417],{"class":108,"line":2583},[106,10360,3443],{"class":116},[106,10362,1161],{"class":112},[106,10364,368],{"class":221},[106,10366,1223],{"class":165},[106,10368,10369],{"class":221},"姓名：\"",[106,10371,1161],{"class":112},[106,10373,10228],{"class":116},[106,10375,598],{"class":112},[106,10377,10378],{"class":116},"i)->name",[106,10380,1161],{"class":112},[106,10382,368],{"class":221},[106,10384,1223],{"class":165},[106,10386,10387],{"class":221},"年龄：\"",[106,10389,1161],{"class":112},[106,10391,10228],{"class":116},[106,10393,598],{"class":112},[106,10395,10396],{"class":116},"i)->age",[106,10398,1161],{"class":112},[106,10400,368],{"class":221},[106,10402,1223],{"class":165},[106,10404,10405],{"class":221},"性别：\"",[106,10407,1161],{"class":112},[106,10409,10228],{"class":116},[106,10411,598],{"class":112},[106,10413,10414],{"class":116},"i)->gender",[106,10416,1161],{"class":112},[106,10418,1184],{"class":116},[106,10420,10421],{"class":108,"line":2591},[106,10422,2179],{"class":116},[106,10424,10425],{"class":108,"line":2596},[106,10426,1557],{"class":116},[106,10428,10429,10431,10433],{"class":108,"line":2602},[106,10430,120],{"class":112},[106,10432,1965],{"class":1955},[106,10434,1968],{"class":116},[106,10436,10437],{"class":108,"line":2608},[106,10438,1538],{"class":116},[106,10440,10441],{"class":108,"line":2613},[106,10442,10443],{"class":175},"    \u002F\u002F定义结构体变量\n",[106,10445,10446,10449,10451,10453],{"class":108,"line":7941},[106,10447,10448],{"class":116},"    Sanguo s1[",[106,10450,436],{"class":165},[106,10452,1057],{"class":116},[106,10454,4900],{"class":112},[106,10456,10457],{"class":108,"line":7965},[106,10458,2022],{"class":116},[106,10460,10461,10463,10465,10467,10469,10471,10473],{"class":108,"line":7970},[106,10462,4909],{"class":116},[106,10464,9945],{"class":221},[106,10466,495],{"class":116},[106,10468,892],{"class":165},[106,10470,495],{"class":116},[106,10472,9954],{"class":221},[106,10474,4922],{"class":116},[106,10476,10477,10479,10481,10483,10485,10487,10489],{"class":108,"line":7976},[106,10478,4909],{"class":116},[106,10480,9963],{"class":221},[106,10482,495],{"class":116},[106,10484,867],{"class":165},[106,10486,495],{"class":116},[106,10488,9954],{"class":221},[106,10490,4922],{"class":116},[106,10492,10493,10495,10497,10499,10501,10503,10505],{"class":108,"line":8003},[106,10494,4909],{"class":116},[106,10496,9980],{"class":221},[106,10498,495],{"class":116},[106,10500,817],{"class":165},[106,10502,495],{"class":116},[106,10504,9954],{"class":221},[106,10506,4922],{"class":116},[106,10508,10509,10511,10513,10515,10517,10519,10521],{"class":108,"line":8008},[106,10510,4909],{"class":116},[106,10512,9997],{"class":221},[106,10514,495],{"class":116},[106,10516,842],{"class":165},[106,10518,495],{"class":116},[106,10520,9954],{"class":221},[106,10522,4922],{"class":116},[106,10524,10525,10527,10529,10531,10533,10535,10537],{"class":108,"line":8014},[106,10526,4909],{"class":116},[106,10528,10014],{"class":221},[106,10530,495],{"class":116},[106,10532,792],{"class":165},[106,10534,495],{"class":116},[106,10536,10023],{"class":221},[106,10538,4922],{"class":116},[106,10540,10541],{"class":108,"line":8026},[106,10542,4943],{"class":116},[106,10544,10545,10547,10549,10551,10554,10556,10559,10561],{"class":108,"line":8038},[106,10546,1977],{"class":112},[106,10548,7324],{"class":116},[106,10550,4195],{"class":112},[106,10552,10553],{"class":116},"(s1)",[106,10555,4201],{"class":112},[106,10557,10558],{"class":116},"(s1[",[106,10560,308],{"class":165},[106,10562,3848],{"class":116},[106,10564,10565,10568,10570,10573,10575,10578,10581,10583],{"class":108,"line":8050},[106,10566,10567],{"class":116},"    Sanguo ",[106,10569,572],{"class":112},[106,10571,10572],{"class":116},"s ",[106,10574,162],{"class":112},[106,10576,10577],{"class":112}," &",[106,10579,10580],{"class":116},"s1[",[106,10582,308],{"class":165},[106,10584,4682],{"class":116},[106,10586,10587],{"class":108,"line":9709},[106,10588,10589],{"class":175},"    \u002F\u002F排序前：\n",[106,10591,10592,10594,10596,10599,10601],{"class":108,"line":9734},[106,10593,6522],{"class":116},[106,10595,1161],{"class":112},[106,10597,10598],{"class":221}," \"排序前：\"",[106,10600,1437],{"class":112},[106,10602,8833],{"class":116},[106,10604,10605,10607],{"class":108,"line":9757},[106,10606,9908],{"class":1955},[106,10608,10609],{"class":116},"(s,len);\n",[106,10611,10612],{"class":108,"line":9781},[106,10613,10614],{"class":175},"    \u002F\u002F调用排序函数\n",[106,10616,10617,10619],{"class":108,"line":9786},[106,10618,7591],{"class":1955},[106,10620,10609],{"class":116},[106,10622,10623],{"class":108,"line":9791},[106,10624,10625],{"class":175},"    \u002F\u002F排序后\n",[106,10627,10628,10630,10632,10635,10637],{"class":108,"line":9796},[106,10629,6522],{"class":116},[106,10631,1161],{"class":112},[106,10633,10634],{"class":221}," \"排序后：\"",[106,10636,1437],{"class":112},[106,10638,8833],{"class":116},[106,10640,10641,10643],{"class":108,"line":9805},[106,10642,9908],{"class":1955},[106,10644,10609],{"class":116},[106,10646,10647],{"class":108,"line":9810},[106,10648,1557],{"class":116},[14,10650,10651,10652,10654],{},"注意：使用指针时直接用传首地址**&s",[106,10653,308],{},"**",[5119,10656,10657],{},"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":25,"searchDepth":28,"depth":28,"links":10659},[10660,10661,10662,10663,10664,10665,10666],{"id":7696,"depth":28,"text":7697},{"id":8058,"depth":28,"text":8059},{"id":8327,"depth":28,"text":8328},{"id":8492,"depth":28,"text":8493},{"id":8708,"depth":28,"text":8709},{"id":9029,"depth":28,"text":9030},{"id":9257,"depth":28,"text":9258},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch4",{"title":7685,"description":7693},"wiki\u002F2026-05-24-c++学习\u002Fch4-结构体","9PmekB_EowSYIB-KISKoLIyOoICqlLJlAWgdT5pQ-Ns",{"id":10673,"title":10674,"body":10675,"description":25,"extension":31,"meta":12018,"navigation":33,"path":12019,"seo":12020,"stem":12021,"__hash__":12022},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型.md","5.程序内存模型",{"type":7,"value":10676,"toc":12012},[10677,10680,10684,10690,10704,10709,10712,10716,10723,10729,10732,10739,10745,10750,10753,10756,10759,11323,11326,11340,11344,11349,11365,11505,11508,11514,11517,11522,11530,11638,11641,11646,11649,11654,11657,11663,11666,12009],[10,10678,10674],{"id":10679},"_5程序内存模型",[48,10681,10683],{"id":10682},"_51内存分区模型","5.1内存分区模型",[14,10685,10686,10687],{},"C++程序在执行时，将内存大方向划分为",[266,10688,10689],{},"4个区域",[1124,10691,10692,10695,10698,10701],{},[63,10693,10694],{},"代码区：存放函数体的二进制代码，由操作系统进行管理的",[63,10696,10697],{},"全局区：存放全局变量和静态变量以及常量",[63,10699,10700],{},"栈区：由编译器自动分配释放, 存放函数的参数值,局部变量等",[63,10702,10703],{},"堆区：由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收",[14,10705,10706],{},[266,10707,10708],{},"内存四区意义：",[14,10710,10711],{},"不同区域存放的数据，赋予不同的生命周期, 给我们更大的灵活编程",[77,10713,10715],{"id":10714},"_511程序运行前","5.1.1程序运行前",[14,10717,10718,10719,10722],{},"​\t在程序编译后，生成了exe可执行程序，",[266,10720,10721],{},"未执行该程序前","分为两个区域",[14,10724,10725,10726],{},"​\t",[266,10727,10728],{},"代码区：",[14,10730,10731],{},"​\t\t存放 CPU 执行的机器指令",[14,10733,10734,10735,10738],{},"​\t\t代码区是",[266,10736,10737],{},"共享","的，共享的目的是对于频繁被执行的程序，只需要在内存中有一份代码即可",[14,10740,10734,10741,10744],{},[266,10742,10743],{},"只读","的，使其只读的原因是防止程序意外地修改了它的指令",[14,10746,10725,10747],{},[266,10748,10749],{},"全局区：",[14,10751,10752],{},"​\t\t全局变量和静态变量存放在此.",[14,10754,10755],{},"​\t\t全局区还包含了常量区, 字符串常量和其他常量也存放在此.",[14,10757,10758],{},"​\t\t该区域的数据在程序结束后由操作系统释放",[97,10760,10762],{"className":99,"code":10761,"language":101,"meta":25,"style":25},"\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",[103,10763,10764,10769,10782,10795,10799,10804,10819,10834,10838,10847,10851,10856,10869,10882,10886,10891,10917,10943,10947,10974,11000,11004,11009,11025,11040,11044,11070,11096,11100,11125,11150,11154,11180,11206,11210,11226,11241,11267,11293,11297,11307,11311,11319],{"__ignoreMap":25},[106,10765,10766],{"class":108,"line":109},[106,10767,10768],{"class":175},"\u002F\u002F全局变量\n",[106,10770,10771,10773,10776,10778,10780],{"class":108,"line":28},[106,10772,120],{"class":112},[106,10774,10775],{"class":116}," g_a ",[106,10777,162],{"class":112},[106,10779,2030],{"class":165},[106,10781,1283],{"class":116},[106,10783,10784,10786,10789,10791,10793],{"class":108,"line":1172},[106,10785,120],{"class":112},[106,10787,10788],{"class":116}," g_b ",[106,10790,162],{"class":112},[106,10792,2030],{"class":165},[106,10794,1283],{"class":116},[106,10796,10797],{"class":108,"line":1187},[106,10798,2392],{"emptyLinePlaceholder":33},[106,10800,10801],{"class":108,"line":1193},[106,10802,10803],{"class":175},"\u002F\u002F全局常量\n",[106,10805,10806,10808,10810,10813,10815,10817],{"class":108,"line":1207},[106,10807,6785],{"class":112},[106,10809,2374],{"class":112},[106,10811,10812],{"class":116}," c_g_a ",[106,10814,162],{"class":112},[106,10816,2030],{"class":165},[106,10818,1283],{"class":116},[106,10820,10821,10823,10825,10828,10830,10832],{"class":108,"line":1213},[106,10822,6785],{"class":112},[106,10824,2374],{"class":112},[106,10826,10827],{"class":116}," c_g_b ",[106,10829,162],{"class":112},[106,10831,2030],{"class":165},[106,10833,1283],{"class":116},[106,10835,10836],{"class":108,"line":1304},[106,10837,2392],{"emptyLinePlaceholder":33},[106,10839,10840,10842,10844],{"class":108,"line":1310},[106,10841,120],{"class":112},[106,10843,1965],{"class":1955},[106,10845,10846],{"class":116},"() {\n",[106,10848,10849],{"class":108,"line":1322},[106,10850,2392],{"emptyLinePlaceholder":33},[106,10852,10853],{"class":108,"line":1604},[106,10854,10855],{"class":175},"    \u002F\u002F局部变量\n",[106,10857,10858,10860,10863,10865,10867],{"class":108,"line":1609},[106,10859,1977],{"class":112},[106,10861,10862],{"class":116}," a ",[106,10864,162],{"class":112},[106,10866,2030],{"class":165},[106,10868,1283],{"class":116},[106,10870,10871,10873,10876,10878,10880],{"class":108,"line":1615},[106,10872,1977],{"class":112},[106,10874,10875],{"class":116}," b ",[106,10877,162],{"class":112},[106,10879,2030],{"class":165},[106,10881,1283],{"class":116},[106,10883,10884],{"class":108,"line":1620},[106,10885,2392],{"emptyLinePlaceholder":33},[106,10887,10888],{"class":108,"line":1634},[106,10889,10890],{"class":175},"    \u002F\u002F打印地址\n",[106,10892,10893,10895,10897,10900,10902,10904,10906,10908,10910,10913,10915],{"class":108,"line":1639},[106,10894,6522],{"class":116},[106,10896,1161],{"class":112},[106,10898,10899],{"class":221}," \"局部变量a地址为： \"",[106,10901,1437],{"class":112},[106,10903,1650],{"class":116},[106,10905,120],{"class":112},[106,10907,546],{"class":116},[106,10909,470],{"class":112},[106,10911,10912],{"class":116},"a ",[106,10914,1161],{"class":112},[106,10916,8833],{"class":116},[106,10918,10919,10921,10923,10926,10928,10930,10932,10934,10936,10939,10941],{"class":108,"line":1645},[106,10920,6522],{"class":116},[106,10922,1161],{"class":112},[106,10924,10925],{"class":221}," \"局部变量b地址为： \"",[106,10927,1437],{"class":112},[106,10929,1650],{"class":116},[106,10931,120],{"class":112},[106,10933,546],{"class":116},[106,10935,470],{"class":112},[106,10937,10938],{"class":116},"b ",[106,10940,1161],{"class":112},[106,10942,8833],{"class":116},[106,10944,10945],{"class":108,"line":1666},[106,10946,2392],{"emptyLinePlaceholder":33},[106,10948,10949,10951,10953,10956,10958,10961,10963,10965,10967,10970,10972],{"class":108,"line":1671},[106,10950,6522],{"class":116},[106,10952,1161],{"class":112},[106,10954,10955],{"class":221}," \"全局变量g_a地址为： \"",[106,10957,1437],{"class":112},[106,10959,10960],{"class":116},"  (",[106,10962,120],{"class":112},[106,10964,546],{"class":116},[106,10966,470],{"class":112},[106,10968,10969],{"class":116},"g_a ",[106,10971,1161],{"class":112},[106,10973,8833],{"class":116},[106,10975,10976,10978,10980,10983,10985,10987,10989,10991,10993,10996,10998],{"class":108,"line":1685},[106,10977,6522],{"class":116},[106,10979,1161],{"class":112},[106,10981,10982],{"class":221}," \"全局变量g_b地址为： \"",[106,10984,1437],{"class":112},[106,10986,10960],{"class":116},[106,10988,120],{"class":112},[106,10990,546],{"class":116},[106,10992,470],{"class":112},[106,10994,10995],{"class":116},"g_b ",[106,10997,1161],{"class":112},[106,10999,8833],{"class":116},[106,11001,11002],{"class":108,"line":1690},[106,11003,2392],{"emptyLinePlaceholder":33},[106,11005,11006],{"class":108,"line":1719},[106,11007,11008],{"class":175},"    \u002F\u002F静态变量\n",[106,11010,11011,11014,11016,11019,11021,11023],{"class":108,"line":1724},[106,11012,11013],{"class":112},"    static",[106,11015,2374],{"class":112},[106,11017,11018],{"class":116}," s_a ",[106,11020,162],{"class":112},[106,11022,2030],{"class":165},[106,11024,1283],{"class":116},[106,11026,11027,11029,11031,11034,11036,11038],{"class":108,"line":1741},[106,11028,11013],{"class":112},[106,11030,2374],{"class":112},[106,11032,11033],{"class":116}," s_b ",[106,11035,162],{"class":112},[106,11037,2030],{"class":165},[106,11039,1283],{"class":116},[106,11041,11042],{"class":108,"line":1746},[106,11043,2392],{"emptyLinePlaceholder":33},[106,11045,11046,11048,11050,11053,11055,11057,11059,11061,11063,11066,11068],{"class":108,"line":1751},[106,11047,6522],{"class":116},[106,11049,1161],{"class":112},[106,11051,11052],{"class":221}," \"静态变量s_a地址为： \"",[106,11054,1437],{"class":112},[106,11056,1650],{"class":116},[106,11058,120],{"class":112},[106,11060,546],{"class":116},[106,11062,470],{"class":112},[106,11064,11065],{"class":116},"s_a ",[106,11067,1161],{"class":112},[106,11069,8833],{"class":116},[106,11071,11072,11074,11076,11079,11081,11083,11085,11087,11089,11092,11094],{"class":108,"line":1756},[106,11073,6522],{"class":116},[106,11075,1161],{"class":112},[106,11077,11078],{"class":221}," \"静态变量s_b地址为： \"",[106,11080,1437],{"class":112},[106,11082,1650],{"class":116},[106,11084,120],{"class":112},[106,11086,546],{"class":116},[106,11088,470],{"class":112},[106,11090,11091],{"class":116},"s_b ",[106,11093,1161],{"class":112},[106,11095,8833],{"class":116},[106,11097,11098],{"class":108,"line":1770},[106,11099,2392],{"emptyLinePlaceholder":33},[106,11101,11102,11104,11106,11109,11111,11113,11115,11117,11119,11121,11123],{"class":108,"line":1775},[106,11103,6522],{"class":116},[106,11105,1161],{"class":112},[106,11107,11108],{"class":221}," \"字符串常量地址为： \"",[106,11110,1437],{"class":112},[106,11112,1650],{"class":116},[106,11114,120],{"class":112},[106,11116,546],{"class":116},[106,11118,470],{"class":112},[106,11120,1179],{"class":221},[106,11122,1437],{"class":112},[106,11124,8833],{"class":116},[106,11126,11127,11129,11131,11133,11135,11137,11139,11141,11143,11146,11148],{"class":108,"line":2569},[106,11128,6522],{"class":116},[106,11130,1161],{"class":112},[106,11132,11108],{"class":221},[106,11134,1437],{"class":112},[106,11136,1650],{"class":116},[106,11138,120],{"class":112},[106,11140,546],{"class":116},[106,11142,470],{"class":112},[106,11144,11145],{"class":221},"\"hello world1\"",[106,11147,1437],{"class":112},[106,11149,8833],{"class":116},[106,11151,11152],{"class":108,"line":2583},[106,11153,2392],{"emptyLinePlaceholder":33},[106,11155,11156,11158,11160,11163,11165,11167,11169,11171,11173,11176,11178],{"class":108,"line":2591},[106,11157,6522],{"class":116},[106,11159,1161],{"class":112},[106,11161,11162],{"class":221}," \"全局常量c_g_a地址为： \"",[106,11164,1437],{"class":112},[106,11166,1650],{"class":116},[106,11168,120],{"class":112},[106,11170,546],{"class":116},[106,11172,470],{"class":112},[106,11174,11175],{"class":116},"c_g_a ",[106,11177,1161],{"class":112},[106,11179,8833],{"class":116},[106,11181,11182,11184,11186,11189,11191,11193,11195,11197,11199,11202,11204],{"class":108,"line":2596},[106,11183,6522],{"class":116},[106,11185,1161],{"class":112},[106,11187,11188],{"class":221}," \"全局常量c_g_b地址为： \"",[106,11190,1437],{"class":112},[106,11192,1650],{"class":116},[106,11194,120],{"class":112},[106,11196,546],{"class":116},[106,11198,470],{"class":112},[106,11200,11201],{"class":116},"c_g_b ",[106,11203,1161],{"class":112},[106,11205,8833],{"class":116},[106,11207,11208],{"class":108,"line":2602},[106,11209,2392],{"emptyLinePlaceholder":33},[106,11211,11212,11215,11217,11220,11222,11224],{"class":108,"line":2608},[106,11213,11214],{"class":112},"    const",[106,11216,2374],{"class":112},[106,11218,11219],{"class":116}," c_l_a ",[106,11221,162],{"class":112},[106,11223,2030],{"class":165},[106,11225,1283],{"class":116},[106,11227,11228,11230,11232,11235,11237,11239],{"class":108,"line":2613},[106,11229,11214],{"class":112},[106,11231,2374],{"class":112},[106,11233,11234],{"class":116}," c_l_b ",[106,11236,162],{"class":112},[106,11238,2030],{"class":165},[106,11240,1283],{"class":116},[106,11242,11243,11245,11247,11250,11252,11254,11256,11258,11260,11263,11265],{"class":108,"line":7941},[106,11244,6522],{"class":116},[106,11246,1161],{"class":112},[106,11248,11249],{"class":221}," \"局部常量c_l_a地址为： \"",[106,11251,1437],{"class":112},[106,11253,1650],{"class":116},[106,11255,120],{"class":112},[106,11257,546],{"class":116},[106,11259,470],{"class":112},[106,11261,11262],{"class":116},"c_l_a ",[106,11264,1161],{"class":112},[106,11266,8833],{"class":116},[106,11268,11269,11271,11273,11276,11278,11280,11282,11284,11286,11289,11291],{"class":108,"line":7965},[106,11270,6522],{"class":116},[106,11272,1161],{"class":112},[106,11274,11275],{"class":221}," \"局部常量c_l_b地址为： \"",[106,11277,1437],{"class":112},[106,11279,1650],{"class":116},[106,11281,120],{"class":112},[106,11283,546],{"class":116},[106,11285,470],{"class":112},[106,11287,11288],{"class":116},"c_l_b ",[106,11290,1161],{"class":112},[106,11292,8833],{"class":116},[106,11294,11295],{"class":108,"line":7970},[106,11296,2392],{"emptyLinePlaceholder":33},[106,11298,11299,11301,11303,11305],{"class":108,"line":7976},[106,11300,2295],{"class":1955},[106,11302,117],{"class":116},[106,11304,2300],{"class":221},[106,11306,2711],{"class":116},[106,11308,11309],{"class":108,"line":8003},[106,11310,2392],{"emptyLinePlaceholder":33},[106,11312,11313,11315,11317],{"class":108,"line":8008},[106,11314,4082],{"class":112},[106,11316,4085],{"class":165},[106,11318,1283],{"class":116},[106,11320,11321],{"class":108,"line":8014},[106,11322,1557],{"class":116},[14,11324,11325],{},"总结：",[1124,11327,11328,11331,11334,11337],{},[63,11329,11330],{},"c++中程序运行前分为全局区和代码区",[63,11332,11333],{},"代码区特点是共享和只读",[63,11335,11336],{},"全局区中存放全局变量、静态变量、常量",[63,11338,11339],{},"常量区中存放const修饰的全局常量和字符串常量",[77,11341,11343],{"id":11342},"_512程序运行后","5.1.2程序运行后",[60,11345,11346],{},[63,11347,11348],{},"栈区：",[1124,11350,11351,11358],{},[63,11352,11353,11354,11357],{},"由编译器自动分配释放, 存放",[266,11355,11356],{},"函数的参数值,局部变量","等",[63,11359,11360,11361,11364],{},"注意事项：",[266,11362,11363],{},"不要返回局部变量的地址","，栈区开辟的数据由编译器自动释放，执行完这部分就会释放",[97,11366,11368],{"className":99,"code":11367,"language":101,"meta":25,"style":25},"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",[103,11369,11370,11381,11385,11400,11412,11416,11420,11428,11433,11448,11466,11483,11493,11501],{"__ignoreMap":25},[106,11371,11372,11374,11376,11379],{"class":108,"line":109},[106,11373,120],{"class":112},[106,11375,6511],{"class":112},[106,11377,11378],{"class":1955}," func",[106,11380,1968],{"class":116},[106,11382,11383],{"class":108,"line":28},[106,11384,1538],{"class":116},[106,11386,11387,11389,11391,11393,11395,11397],{"class":108,"line":1172},[106,11388,1977],{"class":112},[106,11390,10862],{"class":116},[106,11392,162],{"class":112},[106,11394,2030],{"class":165},[106,11396,172],{"class":116},[106,11398,11399],{"class":175}," \u002F\u002F局部变量 存放在栈区，栈区的数据在函数执行完自动释放\n",[106,11401,11402,11404,11406,11409],{"class":108,"line":1187},[106,11403,4082],{"class":112},[106,11405,10577],{"class":112},[106,11407,11408],{"class":116},"a;",[106,11410,11411],{"class":175}," \u002F\u002F放回局部变量的地址\n",[106,11413,11414],{"class":108,"line":1193},[106,11415,1557],{"class":116},[106,11417,11418],{"class":108,"line":1207},[106,11419,2392],{"emptyLinePlaceholder":33},[106,11421,11422,11424,11426],{"class":108,"line":1213},[106,11423,120],{"class":112},[106,11425,1965],{"class":1955},[106,11427,10846],{"class":116},[106,11429,11430],{"class":108,"line":1304},[106,11431,11432],{"class":175},"    \u002F\u002F接受func的返回值\n",[106,11434,11435,11437,11439,11442,11444,11446],{"class":108,"line":1310},[106,11436,1977],{"class":112},[106,11438,6511],{"class":112},[106,11440,11441],{"class":116},"p ",[106,11443,162],{"class":112},[106,11445,11378],{"class":1955},[106,11447,5629],{"class":116},[106,11449,11450,11452,11454,11456,11458,11460,11463],{"class":108,"line":1322},[106,11451,6522],{"class":116},[106,11453,1161],{"class":112},[106,11455,6511],{"class":112},[106,11457,11441],{"class":116},[106,11459,1161],{"class":112},[106,11461,11462],{"class":116}," endl;",[106,11464,11465],{"class":175}," \u002F\u002F第一次打印正确的数字，是因为编辑器做了保留\n",[106,11467,11468,11470,11472,11474,11476,11478,11480],{"class":108,"line":1604},[106,11469,6522],{"class":116},[106,11471,1161],{"class":112},[106,11473,6511],{"class":112},[106,11475,11441],{"class":116},[106,11477,1161],{"class":112},[106,11479,11462],{"class":116},[106,11481,11482],{"class":175}," \u002F\u002F第二次这个数据不再保留\n",[106,11484,11485,11487,11489,11491],{"class":108,"line":1609},[106,11486,2295],{"class":1955},[106,11488,117],{"class":116},[106,11490,2300],{"class":221},[106,11492,2711],{"class":116},[106,11494,11495,11497,11499],{"class":108,"line":1615},[106,11496,4082],{"class":112},[106,11498,4085],{"class":165},[106,11500,1283],{"class":116},[106,11502,11503],{"class":108,"line":1620},[106,11504,1557],{"class":116},[14,11506,11507],{},"输出结果：",[14,11509,11510],{},[23,11511],{"alt":11512,"src":11513},"alt text","\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-005.png",[14,11515,11516],{},"总结：不要返回局部变量的地址",[60,11518,11519],{"start":28},[63,11520,11521],{},"堆区",[1124,11523,11524,11527],{},[63,11525,11526],{},"有程序员分配释放，若程序员不释放，程序结束时由操作系统回收",[63,11528,11529],{},"在c++中主要利用new在堆区开辟内存",[97,11531,11533],{"className":99,"code":11532,"language":101,"meta":25,"style":25},"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",[103,11534,11535,11550,11554,11559,11580,11587,11591,11599,11603,11608,11622,11634],{"__ignoreMap":25},[106,11536,11537,11539,11542,11545,11547],{"class":108,"line":109},[106,11538,120],{"class":112},[106,11540,11541],{"class":112},"  *",[106,11543,11544],{"class":1955},"func",[106,11546,2419],{"class":116},[106,11548,11549],{"class":175},"  \u002F\u002F函数返回指针\n",[106,11551,11552],{"class":108,"line":28},[106,11553,1538],{"class":116},[106,11555,11556],{"class":108,"line":1172},[106,11557,11558],{"class":175},"    \u002F\u002F利用new关键词  可以将数据开辟到堆区\n",[106,11560,11561,11563,11565,11567,11569,11572,11574,11576,11578],{"class":108,"line":1187},[106,11562,4139],{"class":112},[106,11564,6511],{"class":112},[106,11566,14],{"class":116},[106,11568,162],{"class":112},[106,11570,11571],{"class":112}," new",[106,11573,2374],{"class":112},[106,11575,117],{"class":116},[106,11577,563],{"class":165},[106,11579,2711],{"class":116},[106,11581,11582,11584],{"class":108,"line":1193},[106,11583,4373],{"class":112},[106,11585,11586],{"class":116}," p;\n",[106,11588,11589],{"class":108,"line":1207},[106,11590,1557],{"class":116},[106,11592,11593,11595,11597],{"class":108,"line":1213},[106,11594,120],{"class":112},[106,11596,1965],{"class":1955},[106,11598,1968],{"class":116},[106,11600,11601],{"class":108,"line":1304},[106,11602,1538],{"class":116},[106,11604,11605],{"class":108,"line":1310},[106,11606,11607],{"class":175},"    \u002F\u002F在堆区开辟数据\n",[106,11609,11610,11612,11614,11616,11618,11620],{"class":108,"line":1322},[106,11611,1977],{"class":112},[106,11613,6511],{"class":112},[106,11615,14],{"class":116},[106,11617,162],{"class":112},[106,11619,11544],{"class":1955},[106,11621,5629],{"class":116},[106,11623,11624,11626,11628,11630,11632],{"class":108,"line":1604},[106,11625,1543],{"class":116},[106,11627,6412],{"class":112},[106,11629,14],{"class":116},[106,11631,1161],{"class":112},[106,11633,1184],{"class":116},[106,11635,11636],{"class":108,"line":1609},[106,11637,1557],{"class":116},[14,11639,11640],{},"图片展示：",[14,11642,11643],{},[23,11644],{"alt":11512,"src":11645},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-006.png",[14,11647,11648],{},"堆区内存由程序员管生死！！！",[60,11650,11651],{"start":1172},[63,11652,11653],{},"new操作符\n​C++中利用==new==操作符在堆区开辟数据",[14,11655,11656],{},"​堆区开辟的数据，由程序员手动开辟，手动释放，释放利用操作符 ==delete==",[14,11658,11659,11660],{},"​语法：",[103,11661,11662],{}," new 数据类型",[14,11664,11665],{},"​利用new创建的数据，会返回该数据对应的类型的指针",[97,11667,11669],{"className":99,"code":11668,"language":101,"meta":25,"style":25},"\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",[103,11670,11671,11676,11686,11690,11695,11700,11722,11726,11734,11738,11752,11764,11776,11788,11793,11798,11809,11813,11818,11826,11830,11835,11857,11883,11887,11905,11909,11935,11939,11951,11955,11960,11965,11973,11977,11981,11989,11993,11999,12005],{"__ignoreMap":25},[106,11672,11673],{"class":108,"line":109},[106,11674,11675],{"class":175},"\u002F\u002F1.new的基本语法\n",[106,11677,11678,11680,11682,11684],{"class":108,"line":28},[106,11679,120],{"class":112},[106,11681,6511],{"class":112},[106,11683,11544],{"class":1955},[106,11685,1968],{"class":116},[106,11687,11688],{"class":108,"line":1172},[106,11689,1538],{"class":116},[106,11691,11692],{"class":108,"line":1187},[106,11693,11694],{"class":175},"    \u002F\u002F在堆区创建整型数据\n",[106,11696,11697],{"class":108,"line":1193},[106,11698,11699],{"class":175},"    \u002F\u002Fnew返回的是该数据类型的指针\n",[106,11701,11702,11704,11706,11708,11711,11713,11715,11717,11719],{"class":108,"line":1207},[106,11703,1977],{"class":112},[106,11705,6511],{"class":112},[106,11707,14],{"class":116},[106,11709,11710],{"class":112},"=new",[106,11712,2374],{"class":112},[106,11714,117],{"class":116},[106,11716,563],{"class":165},[106,11718,5959],{"class":116},[106,11720,11721],{"class":175},"\u002F\u002Fnew啥类型就返回啥类型数据的指针\n",[106,11723,11724],{"class":108,"line":1213},[106,11725,1557],{"class":116},[106,11727,11728,11730,11732],{"class":108,"line":1304},[106,11729,5357],{"class":112},[106,11731,5581],{"class":1955},[106,11733,1968],{"class":116},[106,11735,11736],{"class":108,"line":1310},[106,11737,1538],{"class":116},[106,11739,11740,11742,11744,11746,11748,11750],{"class":108,"line":1322},[106,11741,1977],{"class":112},[106,11743,6511],{"class":112},[106,11745,14],{"class":116},[106,11747,162],{"class":112},[106,11749,11544],{"class":1955},[106,11751,5629],{"class":116},[106,11753,11754,11756,11758,11760,11762],{"class":108,"line":1604},[106,11755,1543],{"class":116},[106,11757,6412],{"class":112},[106,11759,14],{"class":116},[106,11761,1161],{"class":112},[106,11763,1184],{"class":116},[106,11765,11766,11768,11770,11772,11774],{"class":108,"line":1609},[106,11767,1543],{"class":116},[106,11769,6412],{"class":112},[106,11771,14],{"class":116},[106,11773,1161],{"class":112},[106,11775,1184],{"class":116},[106,11777,11778,11780,11782,11784,11786],{"class":108,"line":1615},[106,11779,1543],{"class":116},[106,11781,6412],{"class":112},[106,11783,14],{"class":116},[106,11785,1161],{"class":112},[106,11787,1184],{"class":116},[106,11789,11790],{"class":108,"line":1620},[106,11791,11792],{"class":175},"    \u002F\u002F堆区的数据 由程序员管理开辟，程序员管理释放\n",[106,11794,11795],{"class":108,"line":1634},[106,11796,11797],{"class":175},"    \u002F\u002F如果想释放堆区的数据，利用关键词 delete\n",[106,11799,11800,11803,11806],{"class":108,"line":1639},[106,11801,11802],{"class":112},"    delete",[106,11804,11805],{"class":116}," p;",[106,11807,11808],{"class":175},"\u002F\u002F删除这块地址\n",[106,11810,11811],{"class":108,"line":1645},[106,11812,1557],{"class":116},[106,11814,11815],{"class":108,"line":1666},[106,11816,11817],{"class":175},"\u002F\u002F2.在堆区利用new开辟数组\n",[106,11819,11820,11822,11824],{"class":108,"line":1671},[106,11821,5357],{"class":112},[106,11823,5650],{"class":1955},[106,11825,1968],{"class":116},[106,11827,11828],{"class":108,"line":1685},[106,11829,1538],{"class":116},[106,11831,11832],{"class":108,"line":1690},[106,11833,11834],{"class":175},"    \u002F\u002F创建10整数数据的数组，在堆区\n",[106,11836,11837,11839,11841,11843,11845,11847,11849,11851,11854],{"class":108,"line":1719},[106,11838,1977],{"class":112},[106,11840,6511],{"class":112},[106,11842,3872],{"class":116},[106,11844,11710],{"class":112},[106,11846,2374],{"class":112},[106,11848,1007],{"class":116},[106,11850,563],{"class":165},[106,11852,11853],{"class":116},"];",[106,11855,11856],{"class":175},"\u002F\u002F10代表数组有10个元素\n",[106,11858,11859,11861,11863,11865,11867,11869,11871,11873,11875,11877,11879,11881],{"class":108,"line":1724},[106,11860,3193],{"class":112},[106,11862,1650],{"class":116},[106,11864,120],{"class":112},[106,11866,3024],{"class":116},[106,11868,162],{"class":112},[106,11870,308],{"class":165},[106,11872,3031],{"class":116},[106,11874,1027],{"class":112},[106,11876,563],{"class":165},[106,11878,3031],{"class":116},[106,11880,2284],{"class":112},[106,11882,123],{"class":116},[106,11884,11885],{"class":108,"line":1741},[106,11886,2022],{"class":116},[106,11888,11889,11892,11894,11896,11898,11900,11902],{"class":108,"line":1746},[106,11890,11891],{"class":116},"        arr[i]",[106,11893,162],{"class":112},[106,11895,558],{"class":116},[106,11897,598],{"class":112},[106,11899,428],{"class":165},[106,11901,172],{"class":116},[106,11903,11904],{"class":175},"\u002F\u002F给10个元素赋值100～109\n",[106,11906,11907],{"class":108,"line":1751},[106,11908,2179],{"class":116},[106,11910,11911,11913,11915,11917,11919,11921,11923,11925,11927,11929,11931,11933],{"class":108,"line":1756},[106,11912,3193],{"class":112},[106,11914,1650],{"class":116},[106,11916,120],{"class":112},[106,11918,3024],{"class":116},[106,11920,162],{"class":112},[106,11922,308],{"class":165},[106,11924,3031],{"class":116},[106,11926,1027],{"class":112},[106,11928,563],{"class":165},[106,11930,3031],{"class":116},[106,11932,2284],{"class":112},[106,11934,123],{"class":116},[106,11936,11937],{"class":108,"line":1770},[106,11938,2022],{"class":116},[106,11940,11941,11943,11945,11947,11949],{"class":108,"line":1775},[106,11942,3443],{"class":116},[106,11944,1161],{"class":112},[106,11946,4346],{"class":116},[106,11948,1161],{"class":112},[106,11950,1184],{"class":116},[106,11952,11953],{"class":108,"line":2569},[106,11954,2179],{"class":116},[106,11956,11957],{"class":108,"line":2583},[106,11958,11959],{"class":175},"    \u002F\u002F释放堆区数组\n",[106,11961,11962],{"class":108,"line":2591},[106,11963,11964],{"class":175},"    \u002F\u002F释放数组的时候 要加[]才可以\n",[106,11966,11967,11970],{"class":108,"line":2596},[106,11968,11969],{"class":112},"    delete[]",[106,11971,11972],{"class":116}," arr;\n",[106,11974,11975],{"class":108,"line":2602},[106,11976,1557],{"class":116},[106,11978,11979],{"class":108,"line":2608},[106,11980,2392],{"emptyLinePlaceholder":33},[106,11982,11983,11985,11987],{"class":108,"line":2613},[106,11984,120],{"class":112},[106,11986,1965],{"class":1955},[106,11988,1968],{"class":116},[106,11990,11991],{"class":108,"line":7941},[106,11992,1538],{"class":116},[106,11994,11995,11997],{"class":108,"line":7965},[106,11996,5626],{"class":1955},[106,11998,5629],{"class":116},[106,12000,12001,12003],{"class":108,"line":7970},[106,12002,5695],{"class":1955},[106,12004,5629],{"class":116},[106,12006,12007],{"class":108,"line":7976},[106,12008,1557],{"class":116},[5119,12010,12011],{},"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":25,"searchDepth":28,"depth":28,"links":12013},[12014],{"id":10682,"depth":28,"text":10683,"children":12015},[12016,12017],{"id":10714,"depth":1172,"text":10715},{"id":11342,"depth":1172,"text":11343},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch5",{"title":10674,"description":25},"wiki\u002F2026-05-24-c++学习\u002Fch5-程序内存模型","0YdYp-3ZJdvtzoCrG1guRSWnTqjqRMbmStt7z9sZDAA",{"id":12024,"title":12025,"body":12026,"description":25,"extension":31,"meta":13507,"navigation":33,"path":13508,"seo":13509,"stem":13510,"__hash__":13511},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch6-引用.md","6.引用",{"type":7,"value":12027,"toc":13499},[12028,12031,12035,12038,12041,12210,12214,12219,12236,12241,12393,12397,12400,12403,12797,12801,12804,12809,12812,13124,13128,13134,13294,13296,13304,13308,13311,13318,13496],[10,12029,12025],{"id":12030},"_6引用",[48,12032,12034],{"id":12033},"_61引用基本用法","6.1引用基本用法",[14,12036,12037],{},"引用的本质：给变量起别名",[14,12039,12040],{},"语法：数据类型 &别名=原名",[97,12042,12044],{"className":99,"code":12043,"language":101,"meta":25,"style":25},"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",[103,12045,12046,12054,12058,12070,12082,12086,12105,12124,12128,12139,12143,12162,12180,12184,12194,12198,12206],{"__ignoreMap":25},[106,12047,12048,12050,12052],{"class":108,"line":109},[106,12049,120],{"class":112},[106,12051,1965],{"class":1955},[106,12053,10846],{"class":116},[106,12055,12056],{"class":108,"line":28},[106,12057,2392],{"emptyLinePlaceholder":33},[106,12059,12060,12062,12064,12066,12068],{"class":108,"line":1172},[106,12061,1977],{"class":112},[106,12063,10862],{"class":116},[106,12065,162],{"class":112},[106,12067,2030],{"class":165},[106,12069,1283],{"class":116},[106,12071,12072,12074,12076,12078,12080],{"class":108,"line":1187},[106,12073,1977],{"class":112},[106,12075,10577],{"class":112},[106,12077,10938],{"class":116},[106,12079,162],{"class":112},[106,12081,1425],{"class":116},[106,12083,12084],{"class":108,"line":1193},[106,12085,2392],{"emptyLinePlaceholder":33},[106,12087,12088,12090,12092,12095,12097,12099,12101,12103],{"class":108,"line":1207},[106,12089,6522],{"class":116},[106,12091,1161],{"class":112},[106,12093,12094],{"class":221}," \"a = \"",[106,12096,1437],{"class":112},[106,12098,10862],{"class":116},[106,12100,1161],{"class":112},[106,12102,11462],{"class":116},[106,12104,7261],{"class":175},[106,12106,12107,12109,12111,12114,12116,12118,12120,12122],{"class":108,"line":1213},[106,12108,6522],{"class":116},[106,12110,1161],{"class":112},[106,12112,12113],{"class":221}," \"b = \"",[106,12115,1437],{"class":112},[106,12117,10875],{"class":116},[106,12119,1161],{"class":112},[106,12121,11462],{"class":116},[106,12123,7261],{"class":175},[106,12125,12126],{"class":108,"line":1304},[106,12127,2392],{"emptyLinePlaceholder":33},[106,12129,12130,12133,12135,12137],{"class":108,"line":1310},[106,12131,12132],{"class":116},"    b ",[106,12134,162],{"class":112},[106,12136,5747],{"class":165},[106,12138,1283],{"class":116},[106,12140,12141],{"class":108,"line":1322},[106,12142,2392],{"emptyLinePlaceholder":33},[106,12144,12145,12147,12149,12151,12153,12155,12157,12159],{"class":108,"line":1604},[106,12146,6522],{"class":116},[106,12148,1161],{"class":112},[106,12150,12094],{"class":221},[106,12152,1437],{"class":112},[106,12154,10862],{"class":116},[106,12156,1161],{"class":112},[106,12158,11462],{"class":116},[106,12160,12161],{"class":175},"\u002F\u002F100\n",[106,12163,12164,12166,12168,12170,12172,12174,12176,12178],{"class":108,"line":1609},[106,12165,6522],{"class":116},[106,12167,1161],{"class":112},[106,12169,12113],{"class":221},[106,12171,1437],{"class":112},[106,12173,10875],{"class":116},[106,12175,1161],{"class":112},[106,12177,11462],{"class":116},[106,12179,12161],{"class":175},[106,12181,12182],{"class":108,"line":1615},[106,12183,2392],{"emptyLinePlaceholder":33},[106,12185,12186,12188,12190,12192],{"class":108,"line":1620},[106,12187,2295],{"class":1955},[106,12189,117],{"class":116},[106,12191,2300],{"class":221},[106,12193,2711],{"class":116},[106,12195,12196],{"class":108,"line":1634},[106,12197,2392],{"emptyLinePlaceholder":33},[106,12199,12200,12202,12204],{"class":108,"line":1639},[106,12201,4082],{"class":112},[106,12203,4085],{"class":165},[106,12205,1283],{"class":116},[106,12207,12208],{"class":108,"line":1645},[106,12209,1557],{"class":116},[48,12211,12213],{"id":12212},"_62引用的注意事项","6.2引用的注意事项",[60,12215,12216],{},[63,12217,12218],{},"引用必须要初始化",[97,12220,12222],{"className":99,"code":12221,"language":101,"meta":25,"style":25},"int &b;\u002F\u002F非常错误！\n",[103,12223,12224],{"__ignoreMap":25},[106,12225,12226,12228,12230,12233],{"class":108,"line":109},[106,12227,120],{"class":112},[106,12229,10577],{"class":112},[106,12231,12232],{"class":116},"b;",[106,12234,12235],{"class":175},"\u002F\u002F非常错误！\n",[60,12237,12238],{"start":28},[63,12239,12240],{},"引用一旦初始化后，就不可以更改了，引用a了，就不能引用b了",[97,12242,12244],{"className":99,"code":12243,"language":101,"meta":25,"style":25},"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",[103,12245,12246,12254,12266,12278,12286,12302,12315,12333,12351,12371,12381,12389],{"__ignoreMap":25},[106,12247,12248,12250,12252],{"class":108,"line":109},[106,12249,120],{"class":112},[106,12251,1965],{"class":1955},[106,12253,10846],{"class":116},[106,12255,12256,12258,12260,12262,12264],{"class":108,"line":28},[106,12257,1977],{"class":112},[106,12259,10862],{"class":116},[106,12261,162],{"class":112},[106,12263,2030],{"class":165},[106,12265,1283],{"class":116},[106,12267,12268,12270,12272,12274,12276],{"class":108,"line":1172},[106,12269,1977],{"class":112},[106,12271,10875],{"class":116},[106,12273,162],{"class":112},[106,12275,8943],{"class":165},[106,12277,1283],{"class":116},[106,12279,12280,12283],{"class":108,"line":1187},[106,12281,12282],{"class":175},"    \u002F\u002Fint &c;",[106,12284,12285],{"class":175}," \u002F\u002F错误，引用必须初始化\n",[106,12287,12288,12290,12292,12294,12296,12299],{"class":108,"line":1193},[106,12289,1977],{"class":112},[106,12291,10577],{"class":112},[106,12293,2938],{"class":116},[106,12295,162],{"class":112},[106,12297,12298],{"class":116}," a;",[106,12300,12301],{"class":175}," \u002F\u002F一旦初始化后，就不可以更改\n",[106,12303,12304,12307,12309,12312],{"class":108,"line":1207},[106,12305,12306],{"class":116},"    c ",[106,12308,162],{"class":112},[106,12310,12311],{"class":116}," b;",[106,12313,12314],{"class":175}," \u002F\u002F这是赋值操作，不是更改引用\n",[106,12316,12317,12319,12321,12323,12325,12327,12329,12331],{"class":108,"line":1213},[106,12318,6522],{"class":116},[106,12320,1161],{"class":112},[106,12322,12094],{"class":221},[106,12324,1437],{"class":112},[106,12326,10862],{"class":116},[106,12328,1161],{"class":112},[106,12330,11462],{"class":116},[106,12332,7246],{"class":175},[106,12334,12335,12337,12339,12341,12343,12345,12347,12349],{"class":108,"line":1304},[106,12336,6522],{"class":116},[106,12338,1161],{"class":112},[106,12340,12113],{"class":221},[106,12342,1437],{"class":112},[106,12344,10875],{"class":116},[106,12346,1161],{"class":112},[106,12348,11462],{"class":116},[106,12350,7246],{"class":175},[106,12352,12353,12355,12357,12360,12362,12365,12367,12369],{"class":108,"line":1310},[106,12354,6522],{"class":116},[106,12356,1161],{"class":112},[106,12358,12359],{"class":221}," \"c = \"",[106,12361,1437],{"class":112},[106,12363,12364],{"class":116}," c ",[106,12366,1161],{"class":112},[106,12368,11462],{"class":116},[106,12370,7246],{"class":175},[106,12372,12373,12375,12377,12379],{"class":108,"line":1322},[106,12374,2295],{"class":1955},[106,12376,117],{"class":116},[106,12378,2300],{"class":221},[106,12380,2711],{"class":116},[106,12382,12383,12385,12387],{"class":108,"line":1604},[106,12384,4082],{"class":112},[106,12386,4085],{"class":165},[106,12388,1283],{"class":116},[106,12390,12391],{"class":108,"line":1609},[106,12392,1557],{"class":116},[48,12394,12396],{"id":12395},"_63引用做函数参数","6.3引用做函数参数",[14,12398,12399],{},"作用：函数传参时，可以利用引用的技术让形参修饰实参",[14,12401,12402],{},"优点：可以简化指针修改实参",[97,12404,12406],{"className":99,"code":12405,"language":101,"meta":25,"style":25},"\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",[103,12407,12408,12413,12436,12447,12457,12466,12470,12474,12479,12501,12513,12525,12535,12539,12543,12548,12570,12580,12588,12596,12600,12604,12612,12616,12628,12640,12644,12655,12681,12685,12705,12729,12733,12743,12767,12771,12781,12785,12793],{"__ignoreMap":25},[106,12409,12410],{"class":108,"line":109},[106,12411,12412],{"class":175},"\u002F\u002F1. 值传递\n",[106,12414,12415,12417,12420,12422,12424,12426,12429,12431,12433],{"class":108,"line":28},[106,12416,5357],{"class":112},[106,12418,12419],{"class":1955}," mySwap01",[106,12421,117],{"class":116},[106,12423,120],{"class":112},[106,12425,1391],{"class":5209},[106,12427,12428],{"class":116},", ",[106,12430,120],{"class":112},[106,12432,2825],{"class":5209},[106,12434,12435],{"class":116},") {\n",[106,12437,12438,12440,12443,12445],{"class":108,"line":1172},[106,12439,1977],{"class":112},[106,12441,12442],{"class":116}," temp ",[106,12444,162],{"class":112},[106,12446,1425],{"class":116},[106,12448,12449,12452,12454],{"class":108,"line":1187},[106,12450,12451],{"class":116},"    a ",[106,12453,162],{"class":112},[106,12455,12456],{"class":116}," b;\n",[106,12458,12459,12461,12463],{"class":108,"line":1193},[106,12460,12132],{"class":116},[106,12462,162],{"class":112},[106,12464,12465],{"class":116}," temp;\n",[106,12467,12468],{"class":108,"line":1207},[106,12469,1557],{"class":116},[106,12471,12472],{"class":108,"line":1213},[106,12473,2392],{"emptyLinePlaceholder":33},[106,12475,12476],{"class":108,"line":1304},[106,12477,12478],{"class":175},"\u002F\u002F2. 地址传递\n",[106,12480,12481,12483,12486,12488,12491,12493,12495,12497,12499],{"class":108,"line":1310},[106,12482,5357],{"class":112},[106,12484,12485],{"class":1955}," mySwap02",[106,12487,117],{"class":116},[106,12489,12490],{"class":112},"int*",[106,12492,1391],{"class":5209},[106,12494,12428],{"class":116},[106,12496,12490],{"class":112},[106,12498,2825],{"class":5209},[106,12500,12435],{"class":116},[106,12502,12503,12505,12507,12509,12511],{"class":108,"line":1322},[106,12504,1977],{"class":112},[106,12506,12442],{"class":116},[106,12508,162],{"class":112},[106,12510,6511],{"class":112},[106,12512,6190],{"class":116},[106,12514,12515,12517,12519,12521,12523],{"class":108,"line":1604},[106,12516,6396],{"class":112},[106,12518,10912],{"class":116},[106,12520,162],{"class":112},[106,12522,6511],{"class":112},[106,12524,6062],{"class":116},[106,12526,12527,12529,12531,12533],{"class":108,"line":1609},[106,12528,6396],{"class":112},[106,12530,10938],{"class":116},[106,12532,162],{"class":112},[106,12534,12465],{"class":116},[106,12536,12537],{"class":108,"line":1615},[106,12538,1557],{"class":116},[106,12540,12541],{"class":108,"line":1620},[106,12542,2392],{"emptyLinePlaceholder":33},[106,12544,12545],{"class":108,"line":1634},[106,12546,12547],{"class":175},"\u002F\u002F3. 引用传递\n",[106,12549,12550,12552,12555,12557,12560,12562,12564,12566,12568],{"class":108,"line":1639},[106,12551,5357],{"class":112},[106,12553,12554],{"class":1955}," mySwap03",[106,12556,117],{"class":116},[106,12558,12559],{"class":112},"int&",[106,12561,1391],{"class":5209},[106,12563,12428],{"class":116},[106,12565,12559],{"class":112},[106,12567,2825],{"class":5209},[106,12569,12435],{"class":116},[106,12571,12572,12574,12576,12578],{"class":108,"line":1645},[106,12573,1977],{"class":112},[106,12575,12442],{"class":116},[106,12577,162],{"class":112},[106,12579,1425],{"class":116},[106,12581,12582,12584,12586],{"class":108,"line":1666},[106,12583,12451],{"class":116},[106,12585,162],{"class":112},[106,12587,12456],{"class":116},[106,12589,12590,12592,12594],{"class":108,"line":1671},[106,12591,12132],{"class":116},[106,12593,162],{"class":112},[106,12595,12465],{"class":116},[106,12597,12598],{"class":108,"line":1685},[106,12599,1557],{"class":116},[106,12601,12602],{"class":108,"line":1690},[106,12603,2392],{"emptyLinePlaceholder":33},[106,12605,12606,12608,12610],{"class":108,"line":1719},[106,12607,120],{"class":112},[106,12609,1965],{"class":1955},[106,12611,10846],{"class":116},[106,12613,12614],{"class":108,"line":1724},[106,12615,2392],{"emptyLinePlaceholder":33},[106,12617,12618,12620,12622,12624,12626],{"class":108,"line":1741},[106,12619,1977],{"class":112},[106,12621,10862],{"class":116},[106,12623,162],{"class":112},[106,12625,2030],{"class":165},[106,12627,1283],{"class":116},[106,12629,12630,12632,12634,12636,12638],{"class":108,"line":1746},[106,12631,1977],{"class":112},[106,12633,10875],{"class":116},[106,12635,162],{"class":112},[106,12637,8943],{"class":165},[106,12639,1283],{"class":116},[106,12641,12642],{"class":108,"line":1751},[106,12643,2392],{"emptyLinePlaceholder":33},[106,12645,12646,12649,12652],{"class":108,"line":1756},[106,12647,12648],{"class":1955},"    mySwap01",[106,12650,12651],{"class":116},"(a, b);",[106,12653,12654],{"class":175},"\u002F\u002F值传递，形参不会修饰实参\n",[106,12656,12657,12659,12661,12664,12666,12668,12670,12673,12675,12677,12679],{"class":108,"line":1770},[106,12658,6522],{"class":116},[106,12660,1161],{"class":112},[106,12662,12663],{"class":221}," \"a:\"",[106,12665,1437],{"class":112},[106,12667,10862],{"class":116},[106,12669,1161],{"class":112},[106,12671,12672],{"class":221}," \" b:\"",[106,12674,1437],{"class":112},[106,12676,10875],{"class":116},[106,12678,1161],{"class":112},[106,12680,8833],{"class":116},[106,12682,12683],{"class":108,"line":1775},[106,12684,2392],{"emptyLinePlaceholder":33},[106,12686,12687,12690,12692,12694,12697,12699,12702],{"class":108,"line":2569},[106,12688,12689],{"class":1955},"    mySwap02",[106,12691,117],{"class":116},[106,12693,470],{"class":112},[106,12695,12696],{"class":116},"a, ",[106,12698,470],{"class":112},[106,12700,12701],{"class":116},"b);",[106,12703,12704],{"class":175},"\u002F\u002F地址传递，形参会修饰实参\n",[106,12706,12707,12709,12711,12713,12715,12717,12719,12721,12723,12725,12727],{"class":108,"line":2583},[106,12708,6522],{"class":116},[106,12710,1161],{"class":112},[106,12712,12663],{"class":221},[106,12714,1437],{"class":112},[106,12716,10862],{"class":116},[106,12718,1161],{"class":112},[106,12720,12672],{"class":221},[106,12722,1437],{"class":112},[106,12724,10875],{"class":116},[106,12726,1161],{"class":112},[106,12728,8833],{"class":116},[106,12730,12731],{"class":108,"line":2591},[106,12732,2392],{"emptyLinePlaceholder":33},[106,12734,12735,12738,12740],{"class":108,"line":2596},[106,12736,12737],{"class":1955},"    mySwap03",[106,12739,12651],{"class":116},[106,12741,12742],{"class":175},"\u002F\u002F引用传递，形参会修饰实参\n",[106,12744,12745,12747,12749,12751,12753,12755,12757,12759,12761,12763,12765],{"class":108,"line":2602},[106,12746,6522],{"class":116},[106,12748,1161],{"class":112},[106,12750,12663],{"class":221},[106,12752,1437],{"class":112},[106,12754,10862],{"class":116},[106,12756,1161],{"class":112},[106,12758,12672],{"class":221},[106,12760,1437],{"class":112},[106,12762,10875],{"class":116},[106,12764,1161],{"class":112},[106,12766,8833],{"class":116},[106,12768,12769],{"class":108,"line":2608},[106,12770,2392],{"emptyLinePlaceholder":33},[106,12772,12773,12775,12777,12779],{"class":108,"line":2613},[106,12774,2295],{"class":1955},[106,12776,117],{"class":116},[106,12778,2300],{"class":221},[106,12780,2711],{"class":116},[106,12782,12783],{"class":108,"line":7941},[106,12784,2392],{"emptyLinePlaceholder":33},[106,12786,12787,12789,12791],{"class":108,"line":7965},[106,12788,4082],{"class":112},[106,12790,4085],{"class":165},[106,12792,1283],{"class":116},[106,12794,12795],{"class":108,"line":7970},[106,12796,1557],{"class":116},[48,12798,12800],{"id":12799},"_64引用做函数的返回值","6.4引用做函数的返回值",[14,12802,12803],{},"作用：引用是可以作为函数的返回值存在的",[14,12805,9018,12806],{},[266,12807,12808],{},"不要返回局部变量引用",[14,12810,12811],{},"用法：函数调用作为左值",[97,12813,12815],{"className":9934,"code":12814,"language":9936,"meta":25,"style":25},"\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",[103,12816,12817,12822,12830,12845,12851,12855,12859,12864,12872,12889,12895,12899,12903,12911,12915,12920,12934,12954,12973,12977,12982,12995,13015,13033,13037,13053,13057,13076,13094,13098,13108,13112,13120],{"__ignoreMap":25},[106,12818,12819],{"class":108,"line":109},[106,12820,12821],{"class":175},"\u002F\u002F返回局部变量引用\n",[106,12823,12824,12826,12828],{"class":108,"line":28},[106,12825,12559],{"class":112},[106,12827,5581],{"class":1955},[106,12829,10846],{"class":116},[106,12831,12832,12834,12836,12838,12840,12842],{"class":108,"line":1172},[106,12833,1977],{"class":112},[106,12835,10862],{"class":116},[106,12837,162],{"class":112},[106,12839,2030],{"class":165},[106,12841,172],{"class":116},[106,12843,12844],{"class":175}," \u002F\u002F局部变量\n",[106,12846,12847,12849],{"class":108,"line":1187},[106,12848,4082],{"class":112},[106,12850,1425],{"class":116},[106,12852,12853],{"class":108,"line":1193},[106,12854,1557],{"class":116},[106,12856,12857],{"class":108,"line":1207},[106,12858,2392],{"emptyLinePlaceholder":33},[106,12860,12861],{"class":108,"line":1213},[106,12862,12863],{"class":175},"\u002F\u002F返回静态变量引用\n",[106,12865,12866,12868,12870],{"class":108,"line":1304},[106,12867,12559],{"class":112},[106,12869,5650],{"class":1955},[106,12871,10846],{"class":116},[106,12873,12874,12876,12878,12880,12882,12884,12886],{"class":108,"line":1310},[106,12875,11013],{"class":112},[106,12877,2374],{"class":112},[106,12879,10862],{"class":116},[106,12881,162],{"class":112},[106,12883,8943],{"class":165},[106,12885,172],{"class":116},[106,12887,12888],{"class":175},"\u002F\u002F静态变量，存放在全局区，全局区上的数据在程序结束后系统释放\n",[106,12890,12891,12893],{"class":108,"line":1322},[106,12892,4082],{"class":112},[106,12894,1425],{"class":116},[106,12896,12897],{"class":108,"line":1604},[106,12898,1557],{"class":116},[106,12900,12901],{"class":108,"line":1609},[106,12902,2392],{"emptyLinePlaceholder":33},[106,12904,12905,12907,12909],{"class":108,"line":1615},[106,12906,120],{"class":112},[106,12908,1965],{"class":1955},[106,12910,10846],{"class":116},[106,12912,12913],{"class":108,"line":1620},[106,12914,2392],{"emptyLinePlaceholder":33},[106,12916,12917],{"class":108,"line":1634},[106,12918,12919],{"class":175},"    \u002F\u002F不能返回局部变量的引用\n",[106,12921,12922,12925,12928,12930,12932],{"class":108,"line":1639},[106,12923,12924],{"class":112},"    int&",[106,12926,12927],{"class":116}," ref ",[106,12929,162],{"class":112},[106,12931,5581],{"class":1955},[106,12933,5629],{"class":116},[106,12935,12936,12938,12940,12943,12945,12947,12949,12951],{"class":108,"line":1645},[106,12937,6522],{"class":116},[106,12939,1161],{"class":112},[106,12941,12942],{"class":221}," \"ref = \"",[106,12944,1437],{"class":112},[106,12946,12927],{"class":116},[106,12948,1161],{"class":112},[106,12950,11462],{"class":116},[106,12952,12953],{"class":175},"\u002F\u002F10 第一次正确，是因为编译器做了保留\n",[106,12955,12956,12958,12960,12962,12964,12966,12968,12970],{"class":108,"line":1666},[106,12957,6522],{"class":116},[106,12959,1161],{"class":112},[106,12961,12942],{"class":221},[106,12963,1437],{"class":112},[106,12965,12927],{"class":116},[106,12967,1161],{"class":112},[106,12969,11462],{"class":116},[106,12971,12972],{"class":175},"\u002F\u002F乱码状态 第二次结果错误，因为a的内存已经释放\n",[106,12974,12975],{"class":108,"line":1671},[106,12976,2392],{"emptyLinePlaceholder":33},[106,12978,12979],{"class":108,"line":1685},[106,12980,12981],{"class":175},"    \u002F\u002F如果函数做左值，那么必须返回引用\n",[106,12983,12984,12986,12989,12991,12993],{"class":108,"line":1690},[106,12985,12924],{"class":112},[106,12987,12988],{"class":116}," ref2 ",[106,12990,162],{"class":112},[106,12992,5650],{"class":1955},[106,12994,5629],{"class":116},[106,12996,12997,12999,13001,13004,13006,13008,13010,13012],{"class":108,"line":1719},[106,12998,6522],{"class":116},[106,13000,1161],{"class":112},[106,13002,13003],{"class":221}," \"ref2 = \"",[106,13005,1437],{"class":112},[106,13007,12988],{"class":116},[106,13009,1161],{"class":112},[106,13011,11462],{"class":116},[106,13013,13014],{"class":175}," \u002F\u002F20\n",[106,13016,13017,13019,13021,13023,13025,13027,13029,13031],{"class":108,"line":1724},[106,13018,6522],{"class":116},[106,13020,1161],{"class":112},[106,13022,13003],{"class":221},[106,13024,1437],{"class":112},[106,13026,12988],{"class":116},[106,13028,1161],{"class":112},[106,13030,11462],{"class":116},[106,13032,13014],{"class":175},[106,13034,13035],{"class":108,"line":1741},[106,13036,2392],{"emptyLinePlaceholder":33},[106,13038,13039,13041,13044,13046,13048,13050],{"class":108,"line":1746},[106,13040,5695],{"class":1955},[106,13042,13043],{"class":116},"() ",[106,13045,162],{"class":112},[106,13047,2991],{"class":165},[106,13049,172],{"class":116},[106,13051,13052],{"class":175},"\u002F\u002F如果函数的返回值是引用，这个函数调用可以作为左值\n",[106,13054,13055],{"class":108,"line":1751},[106,13056,2392],{"emptyLinePlaceholder":33},[106,13058,13059,13061,13063,13065,13067,13069,13071,13073],{"class":108,"line":1756},[106,13060,6522],{"class":116},[106,13062,1161],{"class":112},[106,13064,13003],{"class":221},[106,13066,1437],{"class":112},[106,13068,12988],{"class":116},[106,13070,1161],{"class":112},[106,13072,11462],{"class":116},[106,13074,13075],{"class":175}," \u002F\u002F1000\n",[106,13077,13078,13080,13082,13084,13086,13088,13090,13092],{"class":108,"line":1770},[106,13079,6522],{"class":116},[106,13081,1161],{"class":112},[106,13083,13003],{"class":221},[106,13085,1437],{"class":112},[106,13087,12988],{"class":116},[106,13089,1161],{"class":112},[106,13091,11462],{"class":116},[106,13093,13075],{"class":175},[106,13095,13096],{"class":108,"line":1775},[106,13097,2392],{"emptyLinePlaceholder":33},[106,13099,13100,13102,13104,13106],{"class":108,"line":2569},[106,13101,2295],{"class":1955},[106,13103,117],{"class":116},[106,13105,2300],{"class":221},[106,13107,2711],{"class":116},[106,13109,13110],{"class":108,"line":2583},[106,13111,2392],{"emptyLinePlaceholder":33},[106,13113,13114,13116,13118],{"class":108,"line":2591},[106,13115,4082],{"class":112},[106,13117,4085],{"class":165},[106,13119,1283],{"class":116},[106,13121,13122],{"class":108,"line":2596},[106,13123,1557],{"class":116},[48,13125,13127],{"id":13126},"_65引用的本质","6.5引用的本质",[14,13129,13130,13131],{},"本质：",[266,13132,13133],{},"引用的本质在c++内部实现是一个指针常量.",[97,13135,13137],{"className":99,"code":13136,"language":101,"meta":25,"style":25},"\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",[103,13138,13139,13144,13160,13174,13178,13187,13199,13204,13209,13220,13233,13237,13253,13270,13274,13282,13290],{"__ignoreMap":25},[106,13140,13141],{"class":108,"line":109},[106,13142,13143],{"class":175},"\u002F\u002F发现是引用，转换为 int* const ref = &a;\n",[106,13145,13146,13148,13150,13152,13154,13157],{"class":108,"line":28},[106,13147,5357],{"class":112},[106,13149,11378],{"class":1955},[106,13151,117],{"class":116},[106,13153,12559],{"class":112},[106,13155,13156],{"class":5209}," ref",[106,13158,13159],{"class":116},"){\n",[106,13161,13162,13165,13167,13169,13171],{"class":108,"line":1172},[106,13163,13164],{"class":116},"    ref ",[106,13166,162],{"class":112},[106,13168,5747],{"class":165},[106,13170,172],{"class":116},[106,13172,13173],{"class":175}," \u002F\u002F ref是引用，转换为*ref = 100\n",[106,13175,13176],{"class":108,"line":1187},[106,13177,1557],{"class":116},[106,13179,13180,13182,13184],{"class":108,"line":1193},[106,13181,120],{"class":112},[106,13183,1965],{"class":1955},[106,13185,13186],{"class":116},"(){\n",[106,13188,13189,13191,13193,13195,13197],{"class":108,"line":1207},[106,13190,1977],{"class":112},[106,13192,10862],{"class":116},[106,13194,162],{"class":112},[106,13196,2030],{"class":165},[106,13198,1283],{"class":116},[106,13200,13201],{"class":108,"line":1213},[106,13202,13203],{"class":116},"    \n",[106,13205,13206],{"class":108,"line":1304},[106,13207,13208],{"class":175},"    \u002F\u002F自动转换为 int* const ref = &a; 指针常量是指针指向不可改，也说明为什么引用不可更改\n",[106,13210,13211,13213,13215,13217],{"class":108,"line":1310},[106,13212,12924],{"class":112},[106,13214,12927],{"class":116},[106,13216,162],{"class":112},[106,13218,13219],{"class":116}," a; \n",[106,13221,13222,13224,13226,13228,13230],{"class":108,"line":1322},[106,13223,13164],{"class":116},[106,13225,162],{"class":112},[106,13227,8943],{"class":165},[106,13229,172],{"class":116},[106,13231,13232],{"class":175}," \u002F\u002F内部发现ref是引用，自动帮我们转换为: *ref = 20;\n",[106,13234,13235],{"class":108,"line":1604},[106,13236,13203],{"class":116},[106,13238,13239,13241,13243,13245,13247,13249,13251],{"class":108,"line":1609},[106,13240,6522],{"class":116},[106,13242,1161],{"class":112},[106,13244,12663],{"class":221},[106,13246,1437],{"class":112},[106,13248,10862],{"class":116},[106,13250,1161],{"class":112},[106,13252,8833],{"class":116},[106,13254,13255,13257,13259,13262,13264,13266,13268],{"class":108,"line":1615},[106,13256,6522],{"class":116},[106,13258,1161],{"class":112},[106,13260,13261],{"class":221}," \"ref:\"",[106,13263,1437],{"class":112},[106,13265,12927],{"class":116},[106,13267,1161],{"class":112},[106,13269,8833],{"class":116},[106,13271,13272],{"class":108,"line":1620},[106,13273,13203],{"class":116},[106,13275,13276,13279],{"class":108,"line":1634},[106,13277,13278],{"class":1955},"    func",[106,13280,13281],{"class":116},"(a);\n",[106,13283,13284,13286,13288],{"class":108,"line":1639},[106,13285,4082],{"class":112},[106,13287,4085],{"class":165},[106,13289,1283],{"class":116},[106,13291,13292],{"class":108,"line":1645},[106,13293,1557],{"class":116},[14,13295,11325],{},[60,13297,13298,13301],{},[63,13299,13300],{},"引用的本质，就是一个指针常量",[63,13302,13303],{},"引用一旦初始化，就不可以发生改变",[48,13305,13307],{"id":13306},"_66常量引用","6.6常量引用",[14,13309,13310],{},"作用：常量引用主要用来修饰形参",[14,13312,13313,13314,13317],{},"在函数形参列表中，可以加",[266,13315,13316],{},"const修饰形参","，防止形参改变实参",[97,13319,13321],{"className":99,"code":13320,"language":101,"meta":25,"style":25},"\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",[103,13322,13323,13328,13333,13352,13357,13370,13374,13378,13386,13390,13395,13400,13414,13418,13426,13438,13442,13447,13459,13466,13470,13480,13484,13492],{"__ignoreMap":25},[106,13324,13325],{"class":108,"line":109},[106,13326,13327],{"class":175},"\u002F\u002F引用使用的场景，通常用来修饰形参\n",[106,13329,13330],{"class":108,"line":28},[106,13331,13332],{"class":175},"\u002F\u002F加上const就不能修改实参的\n",[106,13334,13335,13337,13340,13342,13344,13347,13350],{"class":108,"line":1172},[106,13336,5357],{"class":112},[106,13338,13339],{"class":1955}," showValue",[106,13341,117],{"class":116},[106,13343,6785],{"class":112},[106,13345,13346],{"class":112}," int&",[106,13348,13349],{"class":5209}," v",[106,13351,12435],{"class":116},[106,13353,13354],{"class":108,"line":1187},[106,13355,13356],{"class":175},"    \u002F\u002Fv += 100;\n",[106,13358,13359,13361,13363,13366,13368],{"class":108,"line":1193},[106,13360,6522],{"class":116},[106,13362,1161],{"class":112},[106,13364,13365],{"class":116}," v ",[106,13367,1161],{"class":112},[106,13369,8833],{"class":116},[106,13371,13372],{"class":108,"line":1207},[106,13373,1557],{"class":116},[106,13375,13376],{"class":108,"line":1213},[106,13377,2392],{"emptyLinePlaceholder":33},[106,13379,13380,13382,13384],{"class":108,"line":1304},[106,13381,120],{"class":112},[106,13383,1965],{"class":1955},[106,13385,10846],{"class":116},[106,13387,13388],{"class":108,"line":1310},[106,13389,2392],{"emptyLinePlaceholder":33},[106,13391,13392],{"class":108,"line":1322},[106,13393,13394],{"class":175},"    \u002F\u002Fint& ref = 10;  引用本身需要一个合法的内存空间，因此这行错误\n",[106,13396,13397],{"class":108,"line":1604},[106,13398,13399],{"class":175},"    \u002F\u002F加入const就可以了，编译器优化代码，int temp = 10; const int& ref = temp;\n",[106,13401,13402,13404,13406,13408,13410,13412],{"class":108,"line":1609},[106,13403,11214],{"class":112},[106,13405,13346],{"class":112},[106,13407,12927],{"class":116},[106,13409,162],{"class":112},[106,13411,2030],{"class":165},[106,13413,1283],{"class":116},[106,13415,13416],{"class":108,"line":1615},[106,13417,2392],{"emptyLinePlaceholder":33},[106,13419,13420,13423],{"class":108,"line":1620},[106,13421,13422],{"class":175},"    \u002F\u002Fref = 100;",[106,13424,13425],{"class":175},"  \u002F\u002F加入const后不可以修改变量\n",[106,13427,13428,13430,13432,13434,13436],{"class":108,"line":1634},[106,13429,6522],{"class":116},[106,13431,1161],{"class":112},[106,13433,12927],{"class":116},[106,13435,1161],{"class":112},[106,13437,8833],{"class":116},[106,13439,13440],{"class":108,"line":1639},[106,13441,2392],{"emptyLinePlaceholder":33},[106,13443,13444],{"class":108,"line":1645},[106,13445,13446],{"class":175},"    \u002F\u002F函数中利用常量引用防止误操作修改实参\n",[106,13448,13449,13451,13453,13455,13457],{"class":108,"line":1666},[106,13450,1977],{"class":112},[106,13452,10862],{"class":116},[106,13454,162],{"class":112},[106,13456,2030],{"class":165},[106,13458,1283],{"class":116},[106,13460,13461,13464],{"class":108,"line":1671},[106,13462,13463],{"class":1955},"    showValue",[106,13465,13281],{"class":116},[106,13467,13468],{"class":108,"line":1685},[106,13469,2392],{"emptyLinePlaceholder":33},[106,13471,13472,13474,13476,13478],{"class":108,"line":1690},[106,13473,2295],{"class":1955},[106,13475,117],{"class":116},[106,13477,2300],{"class":221},[106,13479,2711],{"class":116},[106,13481,13482],{"class":108,"line":1719},[106,13483,2392],{"emptyLinePlaceholder":33},[106,13485,13486,13488,13490],{"class":108,"line":1724},[106,13487,4082],{"class":112},[106,13489,4085],{"class":165},[106,13491,1283],{"class":116},[106,13493,13494],{"class":108,"line":1741},[106,13495,1557],{"class":116},[5119,13497,13498],{},"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":25,"searchDepth":28,"depth":28,"links":13500},[13501,13502,13503,13504,13505,13506],{"id":12033,"depth":28,"text":12034},{"id":12212,"depth":28,"text":12213},{"id":12395,"depth":28,"text":12396},{"id":12799,"depth":28,"text":12800},{"id":13126,"depth":28,"text":13127},{"id":13306,"depth":28,"text":13307},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch6",{"title":12025,"description":25},"wiki\u002F2026-05-24-c++学习\u002Fch6-引用","3b9GaOu4dJ6AA4pEN3OBkRN5PfpCvI4JUz7VlaaP6b0",{"id":13513,"title":13514,"body":13515,"description":25,"extension":31,"meta":14596,"navigation":33,"path":14597,"seo":14598,"stem":14599,"__hash__":14600},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch7-函数高级.md","7.函数(高级部分)",{"type":7,"value":13516,"toc":14588},[13517,13520,13524,13527,13532,13764,13766,13777,13781,13784,13792,13896,13899,13903,13906,13910,13913,13918,13940,13946,14273,14276,14280,14288,14585],[10,13518,13514],{"id":13519},"_7函数高级部分",[48,13521,13523],{"id":13522},"_71函数默认参数","7.1函数默认参数",[14,13525,13526],{},"在C++中，函数的形参列表中的形参是可以有默认值的。",[14,13528,5174,13529],{},[103,13530,13531],{}," 返回值类型  函数名 （参数= 默认值）{}",[97,13533,13535],{"className":99,"code":13534,"language":101,"meta":25,"style":25},"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",[103,13536,13537,13572,13587,13591,13595,13600,13605,13634,13654,13664,13668,13672,13680,13684,13712,13734,13738,13748,13752,13760],{"__ignoreMap":25},[106,13538,13539,13541,13543,13545,13547,13549,13551,13553,13555,13558,13560,13562,13564,13566,13568,13570],{"class":108,"line":109},[106,13540,120],{"class":112},[106,13542,11378],{"class":1955},[106,13544,117],{"class":116},[106,13546,120],{"class":112},[106,13548,1391],{"class":5209},[106,13550,12428],{"class":116},[106,13552,120],{"class":112},[106,13554,2825],{"class":5209},[106,13556,13557],{"class":112}," =",[106,13559,2030],{"class":165},[106,13561,12428],{"class":116},[106,13563,120],{"class":112},[106,13565,2841],{"class":5209},[106,13567,13557],{"class":112},[106,13569,2030],{"class":165},[106,13571,12435],{"class":116},[106,13573,13574,13576,13578,13580,13582,13584],{"class":108,"line":28},[106,13575,4082],{"class":112},[106,13577,10862],{"class":116},[106,13579,598],{"class":112},[106,13581,10875],{"class":116},[106,13583,598],{"class":112},[106,13585,13586],{"class":116}," c;\n",[106,13588,13589],{"class":108,"line":1172},[106,13590,1557],{"class":116},[106,13592,13593],{"class":108,"line":1187},[106,13594,2392],{"emptyLinePlaceholder":33},[106,13596,13597],{"class":108,"line":1193},[106,13598,13599],{"class":175},"\u002F\u002F1. 如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值\n",[106,13601,13602],{"class":108,"line":1207},[106,13603,13604],{"class":175},"\u002F\u002F2. 如果函数声明有默认值，函数实现的时候就不能有默认参数\n",[106,13606,13607,13609,13612,13614,13616,13618,13620,13622,13624,13626,13628,13630,13632],{"class":108,"line":1213},[106,13608,120],{"class":112},[106,13610,13611],{"class":1955}," func2",[106,13613,117],{"class":116},[106,13615,120],{"class":112},[106,13617,1391],{"class":5209},[106,13619,13557],{"class":112},[106,13621,2030],{"class":165},[106,13623,12428],{"class":116},[106,13625,120],{"class":112},[106,13627,2825],{"class":5209},[106,13629,13557],{"class":112},[106,13631,2030],{"class":165},[106,13633,2711],{"class":116},[106,13635,13636,13638,13640,13642,13644,13646,13648,13650,13652],{"class":108,"line":1304},[106,13637,120],{"class":112},[106,13639,13611],{"class":1955},[106,13641,117],{"class":116},[106,13643,120],{"class":112},[106,13645,1391],{"class":5209},[106,13647,12428],{"class":116},[106,13649,120],{"class":112},[106,13651,2825],{"class":5209},[106,13653,12435],{"class":116},[106,13655,13656,13658,13660,13662],{"class":108,"line":1310},[106,13657,4082],{"class":112},[106,13659,10862],{"class":116},[106,13661,598],{"class":112},[106,13663,12456],{"class":116},[106,13665,13666],{"class":108,"line":1322},[106,13667,1557],{"class":116},[106,13669,13670],{"class":108,"line":1604},[106,13671,2392],{"emptyLinePlaceholder":33},[106,13673,13674,13676,13678],{"class":108,"line":1609},[106,13675,120],{"class":112},[106,13677,1965],{"class":1955},[106,13679,10846],{"class":116},[106,13681,13682],{"class":108,"line":1615},[106,13683,2392],{"emptyLinePlaceholder":33},[106,13685,13686,13688,13690,13693,13695,13697,13699,13701,13703,13705,13708,13710],{"class":108,"line":1620},[106,13687,6522],{"class":116},[106,13689,1161],{"class":112},[106,13691,13692],{"class":221}," \"ret = \"",[106,13694,1437],{"class":112},[106,13696,11378],{"class":1955},[106,13698,117],{"class":116},[106,13700,817],{"class":165},[106,13702,12428],{"class":116},[106,13704,817],{"class":165},[106,13706,13707],{"class":116},") ",[106,13709,1161],{"class":112},[106,13711,8833],{"class":116},[106,13713,13714,13716,13718,13720,13722,13724,13726,13728,13730,13732],{"class":108,"line":1634},[106,13715,6522],{"class":116},[106,13717,1161],{"class":112},[106,13719,13692],{"class":221},[106,13721,1437],{"class":112},[106,13723,11378],{"class":1955},[106,13725,117],{"class":116},[106,13727,428],{"class":165},[106,13729,13707],{"class":116},[106,13731,1161],{"class":112},[106,13733,8833],{"class":116},[106,13735,13736],{"class":108,"line":1639},[106,13737,2392],{"emptyLinePlaceholder":33},[106,13739,13740,13742,13744,13746],{"class":108,"line":1645},[106,13741,2295],{"class":1955},[106,13743,117],{"class":116},[106,13745,2300],{"class":221},[106,13747,2711],{"class":116},[106,13749,13750],{"class":108,"line":1666},[106,13751,2392],{"emptyLinePlaceholder":33},[106,13753,13754,13756,13758],{"class":108,"line":1671},[106,13755,4082],{"class":112},[106,13757,4085],{"class":165},[106,13759,1283],{"class":116},[106,13761,13762],{"class":108,"line":1685},[106,13763,1557],{"class":116},[14,13765,11325],{},[60,13767,13768,13771,13774],{},[63,13769,13770],{},"我传就用我；没传就用你",[63,13772,13773],{},"如果某个位置参数有默认值，那么从这个位置往后，从左向右，必须都要有默认值；前边有没有无所谓",[63,13775,13776],{},"如果函数声明有默认值，函数实现的时候就不能有默认参数",[48,13778,13780],{"id":13779},"_72函数的占位参数","7.2函数的占位参数",[14,13782,13783],{},"C++中函数的形参列表里可以有占位参数，用来做占位，调用函数时必须填补该位置",[14,13785,13786,13788,13789],{},[266,13787,5174],{}," ",[103,13790,13791],{},"返回值类型 函数名 (数据类型){}",[97,13793,13795],{"className":99,"code":13794,"language":101,"meta":25,"style":25},"\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",[103,13796,13797,13802,13820,13833,13837,13845,13849,13866,13870,13880,13884,13892],{"__ignoreMap":25},[106,13798,13799],{"class":108,"line":109},[106,13800,13801],{"class":175},"\u002F\u002F函数占位参数 ，占位参数也可以有默认参数\n",[106,13803,13804,13806,13808,13810,13812,13814,13816,13818],{"class":108,"line":28},[106,13805,5357],{"class":112},[106,13807,11378],{"class":1955},[106,13809,117],{"class":116},[106,13811,120],{"class":112},[106,13813,1391],{"class":5209},[106,13815,12428],{"class":116},[106,13817,120],{"class":112},[106,13819,12435],{"class":116},[106,13821,13822,13824,13826,13829,13831],{"class":108,"line":1172},[106,13823,6522],{"class":116},[106,13825,1161],{"class":112},[106,13827,13828],{"class":221}," \"this is func\"",[106,13830,1437],{"class":112},[106,13832,8833],{"class":116},[106,13834,13835],{"class":108,"line":1187},[106,13836,1557],{"class":116},[106,13838,13839,13841,13843],{"class":108,"line":1193},[106,13840,120],{"class":112},[106,13842,1965],{"class":1955},[106,13844,10846],{"class":116},[106,13846,13847],{"class":108,"line":1207},[106,13848,2392],{"emptyLinePlaceholder":33},[106,13850,13851,13853,13855,13857,13859,13861,13863],{"class":108,"line":1213},[106,13852,13278],{"class":1955},[106,13854,117],{"class":116},[106,13856,563],{"class":165},[106,13858,495],{"class":116},[106,13860,563],{"class":165},[106,13862,5959],{"class":116},[106,13864,13865],{"class":175}," \u002F\u002F占位参数必须填补，现在还没法在函数中使用，后面就会用到！\n",[106,13867,13868],{"class":108,"line":1304},[106,13869,2392],{"emptyLinePlaceholder":33},[106,13871,13872,13874,13876,13878],{"class":108,"line":1310},[106,13873,2295],{"class":1955},[106,13875,117],{"class":116},[106,13877,2300],{"class":221},[106,13879,2711],{"class":116},[106,13881,13882],{"class":108,"line":1322},[106,13883,2392],{"emptyLinePlaceholder":33},[106,13885,13886,13888,13890],{"class":108,"line":1604},[106,13887,4082],{"class":112},[106,13889,4085],{"class":165},[106,13891,1283],{"class":116},[106,13893,13894],{"class":108,"line":1609},[106,13895,1557],{"class":116},[14,13897,13898],{},"注意：就是只填写数据类型作为占位，调用的时候必须传对应数据",[48,13900,13902],{"id":13901},"_73函数重载","7.3函数重载",[14,13904,13905],{},"意思是函数名是可以相同的",[77,13907,13909],{"id":13908},"_731基本语法","7.3.1基本语法",[14,13911,13912],{},"作用：函数名可以相同，提高复用性",[14,13914,13915],{},[266,13916,13917],{},"函数重载满足条件：",[1124,13919,13920,13923,13926],{},[63,13921,13922],{},"同一个作用域下",[63,13924,13925],{},"函数名称相同",[63,13927,13928,13929,13932,13933,13936,13937],{},"函数参数",[266,13930,13931],{},"类型不同","  或者 ",[266,13934,13935],{},"个数不同"," 或者 ",[266,13938,13939],{},"顺序不同",[14,13941,13942,13945],{},[266,13943,13944],{},"注意:","  函数的返回值不可以作为函数重载的条件",[97,13947,13949],{"className":9934,"code":13948,"language":9936,"meta":25,"style":25},"\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",[103,13950,13951,13956,13964,13968,13981,13985,13999,14003,14016,14020,14035,14039,14052,14056,14077,14081,14094,14098,14118,14122,14135,14139,14143,14148,14153,14158,14163,14168,14172,14176,14184,14188,14194,14204,14214,14228,14243,14247,14257,14261,14269],{"__ignoreMap":25},[106,13952,13953],{"class":108,"line":109},[106,13954,13955],{"class":175},"\u002F\u002F函数重载需要函数都在同一个作用域下\n",[106,13957,13958,13960,13962],{"class":108,"line":28},[106,13959,5357],{"class":112},[106,13961,11378],{"class":1955},[106,13963,1968],{"class":116},[106,13965,13966],{"class":108,"line":1172},[106,13967,1538],{"class":116},[106,13969,13970,13972,13974,13977,13979],{"class":108,"line":1187},[106,13971,6522],{"class":116},[106,13973,1161],{"class":112},[106,13975,13976],{"class":221}," \"func 的调用！\"",[106,13978,1437],{"class":112},[106,13980,8833],{"class":116},[106,13982,13983],{"class":108,"line":1193},[106,13984,1557],{"class":116},[106,13986,13987,13989,13991,13993,13995,13997],{"class":108,"line":1207},[106,13988,5357],{"class":112},[106,13990,11378],{"class":1955},[106,13992,117],{"class":116},[106,13994,120],{"class":112},[106,13996,1391],{"class":5209},[106,13998,123],{"class":116},[106,14000,14001],{"class":108,"line":1213},[106,14002,1538],{"class":116},[106,14004,14005,14007,14009,14012,14014],{"class":108,"line":1304},[106,14006,6522],{"class":116},[106,14008,1161],{"class":112},[106,14010,14011],{"class":221}," \"func (int a) 的调用！\"",[106,14013,1437],{"class":112},[106,14015,8833],{"class":116},[106,14017,14018],{"class":108,"line":1310},[106,14019,1557],{"class":116},[106,14021,14022,14024,14026,14028,14031,14033],{"class":108,"line":1322},[106,14023,5357],{"class":112},[106,14025,11378],{"class":1955},[106,14027,117],{"class":116},[106,14029,14030],{"class":112},"double",[106,14032,1391],{"class":5209},[106,14034,123],{"class":116},[106,14036,14037],{"class":108,"line":1604},[106,14038,1538],{"class":116},[106,14040,14041,14043,14045,14048,14050],{"class":108,"line":1609},[106,14042,6522],{"class":116},[106,14044,1161],{"class":112},[106,14046,14047],{"class":221}," \"func (double a)的调用！\"",[106,14049,1437],{"class":112},[106,14051,8833],{"class":116},[106,14053,14054],{"class":108,"line":1615},[106,14055,1557],{"class":116},[106,14057,14058,14060,14062,14064,14066,14068,14071,14073,14075],{"class":108,"line":1620},[106,14059,5357],{"class":112},[106,14061,11378],{"class":1955},[106,14063,117],{"class":116},[106,14065,120],{"class":112},[106,14067,1391],{"class":5209},[106,14069,14070],{"class":116}," ,",[106,14072,14030],{"class":112},[106,14074,2825],{"class":5209},[106,14076,123],{"class":116},[106,14078,14079],{"class":108,"line":1634},[106,14080,1538],{"class":116},[106,14082,14083,14085,14087,14090,14092],{"class":108,"line":1639},[106,14084,6522],{"class":116},[106,14086,1161],{"class":112},[106,14088,14089],{"class":221}," \"func (int a ,double b) 的调用！\"",[106,14091,1437],{"class":112},[106,14093,8833],{"class":116},[106,14095,14096],{"class":108,"line":1645},[106,14097,1557],{"class":116},[106,14099,14100,14102,14104,14106,14108,14110,14112,14114,14116],{"class":108,"line":1666},[106,14101,5357],{"class":112},[106,14103,11378],{"class":1955},[106,14105,117],{"class":116},[106,14107,14030],{"class":112},[106,14109,1391],{"class":5209},[106,14111,14070],{"class":116},[106,14113,120],{"class":112},[106,14115,2825],{"class":5209},[106,14117,123],{"class":116},[106,14119,14120],{"class":108,"line":1671},[106,14121,1538],{"class":116},[106,14123,14124,14126,14128,14131,14133],{"class":108,"line":1685},[106,14125,6522],{"class":116},[106,14127,1161],{"class":112},[106,14129,14130],{"class":221}," \"func (double a ,int b)的调用！\"",[106,14132,1437],{"class":112},[106,14134,8833],{"class":116},[106,14136,14137],{"class":108,"line":1690},[106,14138,1557],{"class":116},[106,14140,14141],{"class":108,"line":1719},[106,14142,2392],{"emptyLinePlaceholder":33},[106,14144,14145],{"class":108,"line":1724},[106,14146,14147],{"class":175},"\u002F\u002F函数返回值不可以作为函数重载条件\n",[106,14149,14150],{"class":108,"line":1741},[106,14151,14152],{"class":175},"\u002F\u002Fint func(double a, int b)\n",[106,14154,14155],{"class":108,"line":1746},[106,14156,14157],{"class":175},"\u002F\u002F{\n",[106,14159,14160],{"class":108,"line":1751},[106,14161,14162],{"class":175},"\u002F\u002F  cout \u003C\u003C \"func (double a ,int b)的调用！\" \u003C\u003C endl;\n",[106,14164,14165],{"class":108,"line":1756},[106,14166,14167],{"class":175},"\u002F\u002F}\n",[106,14169,14170],{"class":108,"line":1770},[106,14171,2392],{"emptyLinePlaceholder":33},[106,14173,14174],{"class":108,"line":1775},[106,14175,2392],{"emptyLinePlaceholder":33},[106,14177,14178,14180,14182],{"class":108,"line":2569},[106,14179,120],{"class":112},[106,14181,1965],{"class":1955},[106,14183,10846],{"class":116},[106,14185,14186],{"class":108,"line":2583},[106,14187,2392],{"emptyLinePlaceholder":33},[106,14189,14190,14192],{"class":108,"line":2591},[106,14191,13278],{"class":1955},[106,14193,5629],{"class":116},[106,14195,14196,14198,14200,14202],{"class":108,"line":2596},[106,14197,13278],{"class":1955},[106,14199,117],{"class":116},[106,14201,563],{"class":165},[106,14203,2711],{"class":116},[106,14205,14206,14208,14210,14212],{"class":108,"line":2602},[106,14207,13278],{"class":1955},[106,14209,117],{"class":116},[106,14211,166],{"class":165},[106,14213,2711],{"class":116},[106,14215,14216,14218,14220,14222,14224,14226],{"class":108,"line":2608},[106,14217,13278],{"class":1955},[106,14219,117],{"class":116},[106,14221,563],{"class":165},[106,14223,495],{"class":116},[106,14225,166],{"class":165},[106,14227,2711],{"class":116},[106,14229,14230,14232,14234,14236,14239,14241],{"class":108,"line":2613},[106,14231,13278],{"class":1955},[106,14233,117],{"class":116},[106,14235,166],{"class":165},[106,14237,14238],{"class":116}," , ",[106,14240,563],{"class":165},[106,14242,2711],{"class":116},[106,14244,14245],{"class":108,"line":7941},[106,14246,13203],{"class":116},[106,14248,14249,14251,14253,14255],{"class":108,"line":7965},[106,14250,2295],{"class":1955},[106,14252,117],{"class":116},[106,14254,2300],{"class":221},[106,14256,2711],{"class":116},[106,14258,14259],{"class":108,"line":7970},[106,14260,2392],{"emptyLinePlaceholder":33},[106,14262,14263,14265,14267],{"class":108,"line":7976},[106,14264,4082],{"class":112},[106,14266,4085],{"class":165},[106,14268,1283],{"class":116},[106,14270,14271],{"class":108,"line":8003},[106,14272,1557],{"class":116},[14,14274,14275],{},"重点：函数返回值不可以作为函数重载条件！",[77,14277,14279],{"id":14278},"_732注意事项","7.3.2注意事项",[1124,14281,14282,14285],{},[63,14283,14284],{},"引用作为重载条件!!!",[63,14286,14287],{},"函数重载碰到函数默认参数",[97,14289,14291],{"className":99,"code":14290,"language":101,"meta":25,"style":25},"\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",[103,14292,14293,14298,14303,14307,14323,14327,14340,14344,14348,14366,14370,14383,14387,14391,14395,14400,14404,14428,14432,14445,14449,14453,14467,14471,14484,14488,14492,14500,14504,14516,14526,14539,14543,14547,14555,14559,14569,14573,14581],{"__ignoreMap":25},[106,14294,14295],{"class":108,"line":109},[106,14296,14297],{"class":175},"\u002F\u002F函数重载注意事项\n",[106,14299,14300],{"class":108,"line":28},[106,14301,14302],{"class":175},"\u002F\u002F1、引用作为重载条件\n",[106,14304,14305],{"class":108,"line":1172},[106,14306,2392],{"emptyLinePlaceholder":33},[106,14308,14309,14311,14313,14315,14317,14319,14321],{"class":108,"line":1187},[106,14310,5357],{"class":112},[106,14312,11378],{"class":1955},[106,14314,117],{"class":116},[106,14316,120],{"class":112},[106,14318,10577],{"class":112},[106,14320,355],{"class":5209},[106,14322,123],{"class":116},[106,14324,14325],{"class":108,"line":1193},[106,14326,1538],{"class":116},[106,14328,14329,14331,14333,14336,14338],{"class":108,"line":1207},[106,14330,6522],{"class":116},[106,14332,1161],{"class":112},[106,14334,14335],{"class":221}," \"func (int &a) 调用 \"",[106,14337,1437],{"class":112},[106,14339,8833],{"class":116},[106,14341,14342],{"class":108,"line":1213},[106,14343,1557],{"class":116},[106,14345,14346],{"class":108,"line":1304},[106,14347,2392],{"emptyLinePlaceholder":33},[106,14349,14350,14352,14354,14356,14358,14360,14362,14364],{"class":108,"line":1310},[106,14351,5357],{"class":112},[106,14353,11378],{"class":1955},[106,14355,117],{"class":116},[106,14357,6785],{"class":112},[106,14359,2374],{"class":112},[106,14361,10577],{"class":112},[106,14363,355],{"class":5209},[106,14365,123],{"class":116},[106,14367,14368],{"class":108,"line":1322},[106,14369,1538],{"class":116},[106,14371,14372,14374,14376,14379,14381],{"class":108,"line":1604},[106,14373,6522],{"class":116},[106,14375,1161],{"class":112},[106,14377,14378],{"class":221}," \"func (const int &a) 调用 \"",[106,14380,1437],{"class":112},[106,14382,8833],{"class":116},[106,14384,14385],{"class":108,"line":1609},[106,14386,1557],{"class":116},[106,14388,14389],{"class":108,"line":1615},[106,14390,2392],{"emptyLinePlaceholder":33},[106,14392,14393],{"class":108,"line":1620},[106,14394,2392],{"emptyLinePlaceholder":33},[106,14396,14397],{"class":108,"line":1634},[106,14398,14399],{"class":175},"\u002F\u002F2、函数重载碰到函数默认参数\n",[106,14401,14402],{"class":108,"line":1639},[106,14403,2392],{"emptyLinePlaceholder":33},[106,14405,14406,14408,14410,14412,14414,14416,14418,14420,14422,14424,14426],{"class":108,"line":1645},[106,14407,5357],{"class":112},[106,14409,13611],{"class":1955},[106,14411,117],{"class":116},[106,14413,120],{"class":112},[106,14415,1391],{"class":5209},[106,14417,12428],{"class":116},[106,14419,120],{"class":112},[106,14421,2825],{"class":5209},[106,14423,13557],{"class":112},[106,14425,2030],{"class":165},[106,14427,123],{"class":116},[106,14429,14430],{"class":108,"line":1666},[106,14431,1538],{"class":116},[106,14433,14434,14436,14438,14441,14443],{"class":108,"line":1671},[106,14435,6522],{"class":116},[106,14437,1161],{"class":112},[106,14439,14440],{"class":221}," \"func2(int a, int b = 10) 调用\"",[106,14442,1437],{"class":112},[106,14444,8833],{"class":116},[106,14446,14447],{"class":108,"line":1685},[106,14448,1557],{"class":116},[106,14450,14451],{"class":108,"line":1690},[106,14452,2392],{"emptyLinePlaceholder":33},[106,14454,14455,14457,14459,14461,14463,14465],{"class":108,"line":1719},[106,14456,5357],{"class":112},[106,14458,13611],{"class":1955},[106,14460,117],{"class":116},[106,14462,120],{"class":112},[106,14464,1391],{"class":5209},[106,14466,123],{"class":116},[106,14468,14469],{"class":108,"line":1724},[106,14470,1538],{"class":116},[106,14472,14473,14475,14477,14480,14482],{"class":108,"line":1741},[106,14474,6522],{"class":116},[106,14476,1161],{"class":112},[106,14478,14479],{"class":221}," \"func2(int a) 调用\"",[106,14481,1437],{"class":112},[106,14483,8833],{"class":116},[106,14485,14486],{"class":108,"line":1746},[106,14487,1557],{"class":116},[106,14489,14490],{"class":108,"line":1751},[106,14491,2392],{"emptyLinePlaceholder":33},[106,14493,14494,14496,14498],{"class":108,"line":1756},[106,14495,120],{"class":112},[106,14497,1965],{"class":1955},[106,14499,10846],{"class":116},[106,14501,14502],{"class":108,"line":1770},[106,14503,13203],{"class":116},[106,14505,14506,14508,14510,14512,14514],{"class":108,"line":1775},[106,14507,1977],{"class":112},[106,14509,10862],{"class":116},[106,14511,162],{"class":112},[106,14513,2030],{"class":165},[106,14515,1283],{"class":116},[106,14517,14518,14520,14523],{"class":108,"line":2569},[106,14519,13278],{"class":1955},[106,14521,14522],{"class":116},"(a);",[106,14524,14525],{"class":175}," \u002F\u002F调用无const   因为a本身是个变量，可读可写\n",[106,14527,14528,14530,14532,14534,14536],{"class":108,"line":2583},[106,14529,13278],{"class":1955},[106,14531,117],{"class":116},[106,14533,563],{"class":165},[106,14535,5959],{"class":116},[106,14537,14538],{"class":175},"\u002F\u002F调用有const   10是个常量\n",[106,14540,14541],{"class":108,"line":2591},[106,14542,2392],{"emptyLinePlaceholder":33},[106,14544,14545],{"class":108,"line":2596},[106,14546,2392],{"emptyLinePlaceholder":33},[106,14548,14549,14552],{"class":108,"line":2602},[106,14550,14551],{"class":175},"    \u002F\u002Ffunc2(10);",[106,14553,14554],{"class":175}," \u002F\u002F碰到默认参数产生歧义，需要避免\n",[106,14556,14557],{"class":108,"line":2608},[106,14558,2392],{"emptyLinePlaceholder":33},[106,14560,14561,14563,14565,14567],{"class":108,"line":2613},[106,14562,2295],{"class":1955},[106,14564,117],{"class":116},[106,14566,2300],{"class":221},[106,14568,2711],{"class":116},[106,14570,14571],{"class":108,"line":7941},[106,14572,2392],{"emptyLinePlaceholder":33},[106,14574,14575,14577,14579],{"class":108,"line":7965},[106,14576,4082],{"class":112},[106,14578,4085],{"class":165},[106,14580,1283],{"class":116},[106,14582,14583],{"class":108,"line":7970},[106,14584,1557],{"class":116},[5119,14586,14587],{},"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":25,"searchDepth":28,"depth":28,"links":14589},[14590,14591,14592],{"id":13522,"depth":28,"text":13523},{"id":13779,"depth":28,"text":13780},{"id":13901,"depth":28,"text":13902,"children":14593},[14594,14595],{"id":13908,"depth":1172,"text":13909},{"id":14278,"depth":1172,"text":14279},{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch7",{"title":13514,"description":25},"wiki\u002F2026-05-24-c++学习\u002Fch7-函数高级","JeAg03-_IoVFCkdwiBEVx1i5FNY-l3QWmylt1RpVnus",{"id":14602,"title":14603,"body":14604,"description":23358,"extension":31,"meta":23359,"navigation":33,"path":23360,"seo":23361,"stem":23362,"__hash__":23363},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Fch8-类和对象.md","8.类和对象",{"type":7,"value":14605,"toc":23339},[14606,14609,14615,14622,14627,14630,14633,14636,14640,14644,14647,14650,14658,14663,14666,14673,14678,14837,14840,15093,15096,15099,15102,15107,15110,15113,15124,15129,15365,15369,15379,15382,15390,15537,15541,15544,15547,15551,15996,16000,16008,16016,16928,16935,16940,17568,17571,17574,17577,17696,17699,17786,17789,17915,17918,18012,18015,18368,18372,18380,18384,18391,18394,18397,18408,18414,18419,18431,18439,18459,18467,18484,18670,18673,18677,18680,18683,18686,18689,18692,18695,18698,19158,19164,19168,19171,19182,19769,19772,20261,20265,20268,20271,20274,20277,20280,20288,20684,20688,20691,20694,21141,21144,21147,21152,21155,21160,21163,21167,21170,21172,21178,21181,21487,21497,21538,21542,21545,21547,21580,21583,21890,21892,21907,21910,21933,21942,21948,21951,21955,21958,21961,21966,21977,21982,21990,21995,22125,22128,22131,22306,22311,22523,22527,22530,22644,22649,22888,22892,22896,22899,22902,22907,23012,23015,23018,23021,23025,23136,23139,23142,23147,23199,23202,23205,23210,23256,23259,23264,23332,23334,23337],[10,14607,14603],{"id":14608},"_8类和对象",[14,14610,14611,14612],{},"C++面向对象的三大特性为",[266,14613,14614],{},"封装、继承、多态",[14,14616,14617,14618,14621],{},"C++认为",[266,14619,14620],{},"万事万物都皆为对象","，对象上有其属性和行为",[14,14623,14624],{},[266,14625,14626],{},"例如：",[14,14628,14629],{},"​\t人可以作为对象，属性有姓名、年龄、身高、体重...，行为有走、跑、跳、吃饭、唱歌...",[14,14631,14632],{},"​\t车也可以作为对象，属性有轮胎、方向盘、车灯...,行为有载人、放音乐、放空调...",[14,14634,14635],{},"​\t具有相同性质的对象，我们可以抽象称为类，人属于人类，车属于车类",[48,14637,14639],{"id":14638},"_81封装","8.1封装",[77,14641,14643],{"id":14642},"_811封装的意义","8.1.1封装的意义",[14,14645,14646],{},"封装是C++面向对象三大特性之一",[14,14648,14649],{},"封装的意义：",[1124,14651,14652,14655],{},[63,14653,14654],{},"将属性和行为作为一个整体，表现生活中的事物",[63,14656,14657],{},"将属性和行为加以权限控制",[14,14659,14660],{},[266,14661,14662],{},"封装意义一：",[14,14664,14665],{},"​\t在设计类的时候，属性和行为写在一起，表现事物",[14,14667,14668,13788,14670],{},[266,14669,5174],{},[103,14671,14672],{},"class 类名{   访问权限： 属性  \u002F 行为  };",[60,14674,14675],{},[63,14676,14677],{},"**示例1：**设计一个圆类，求圆的周长",[97,14679,14681],{"className":99,"code":14680,"language":101,"meta":25,"style":25},"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",[103,14682,14683,14691,14695,14700,14705,14710,14715,14722,14727,14737,14741,14759,14763,14767,14775,14779,14784,14789,14794,14799,14810,14833],{"__ignoreMap":25},[106,14684,14685,14688],{"class":108,"line":109},[106,14686,14687],{"class":112},"class",[106,14689,14690],{"class":1955}," Circle\n",[106,14692,14693],{"class":108,"line":28},[106,14694,1538],{"class":116},[106,14696,14697],{"class":108,"line":1172},[106,14698,14699],{"class":175},"    \u002F\u002F访问权限\n",[106,14701,14702],{"class":108,"line":1187},[106,14703,14704],{"class":175},"    \u002F\u002F公共权限\n",[106,14706,14707],{"class":108,"line":1193},[106,14708,14709],{"class":112},"public:\n",[106,14711,14712],{"class":108,"line":1207},[106,14713,14714],{"class":175},"    \u002F\u002F属性\n",[106,14716,14717,14719],{"class":108,"line":1213},[106,14718,1977],{"class":112},[106,14720,14721],{"class":116}," m_r;\n",[106,14723,14724],{"class":108,"line":1304},[106,14725,14726],{"class":175},"    \u002F\u002F行为\n",[106,14728,14729,14732,14735],{"class":108,"line":1310},[106,14730,14731],{"class":112},"    double",[106,14733,14734],{"class":1955}," calculateZC",[106,14736,1968],{"class":116},[106,14738,14739],{"class":108,"line":1322},[106,14740,2022],{"class":116},[106,14742,14743,14746,14749,14751,14754,14756],{"class":108,"line":1604},[106,14744,14745],{"class":112},"        return",[106,14747,14748],{"class":165}," 2",[106,14750,572],{"class":112},[106,14752,14753],{"class":116},"PI",[106,14755,572],{"class":112},[106,14757,14758],{"class":116},"m_r;\n",[106,14760,14761],{"class":108,"line":1609},[106,14762,2179],{"class":116},[106,14764,14765],{"class":108,"line":1615},[106,14766,3987],{"class":116},[106,14768,14769,14771,14773],{"class":108,"line":1620},[106,14770,120],{"class":112},[106,14772,1965],{"class":1955},[106,14774,1968],{"class":116},[106,14776,14777],{"class":108,"line":1634},[106,14778,1538],{"class":116},[106,14780,14781],{"class":108,"line":1639},[106,14782,14783],{"class":175},"    \u002F\u002F通过圆类 创建具体的圆(对象)\n",[106,14785,14786],{"class":108,"line":1645},[106,14787,14788],{"class":175},"    \u002F\u002F实例化（通过一个类 创建一个对象的过程）\n",[106,14790,14791],{"class":108,"line":1666},[106,14792,14793],{"class":116},"    Circle c1;\n",[106,14795,14796],{"class":108,"line":1671},[106,14797,14798],{"class":175},"    \u002F\u002F给圆对象 的属性进行赋值\n",[106,14800,14801,14804,14806,14808],{"class":108,"line":1685},[106,14802,14803],{"class":116},"    c1.m_r",[106,14805,162],{"class":112},[106,14807,563],{"class":165},[106,14809,1283],{"class":116},[106,14811,14812,14814,14816,14819,14821,14824,14827,14829,14831],{"class":108,"line":1690},[106,14813,1543],{"class":116},[106,14815,1161],{"class":112},[106,14817,14818],{"class":221},"\"圆的周长\"",[106,14820,1161],{"class":112},[106,14822,14823],{"class":116},"c1.",[106,14825,14826],{"class":1955},"calculateZC",[106,14828,2419],{"class":116},[106,14830,1161],{"class":112},[106,14832,1184],{"class":116},[106,14834,14835],{"class":108,"line":1719},[106,14836,1557],{"class":116},[14,14838,14839],{},"案例：设计一个学生类，属性有姓名和学号，可以给姓名和学号赋值，可以显示学生的姓名和学号",[97,14841,14843],{"className":99,"code":14842,"language":101,"meta":25,"style":25},"#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",[103,14844,14845,14851,14861,14867,14873,14877,14881,14886,14893,14898,14916,14920,14930,14934,14939,14955,14959,14969,14973,14978,14986,14990,15022,15026,15030,15038,15042,15047,15052,15066,15080,15089],{"__ignoreMap":25},[106,14846,14847,14849],{"class":108,"line":109},[106,14848,1941],{"class":112},[106,14850,1944],{"class":221},[106,14852,14853,14855,14857,14859],{"class":108,"line":28},[106,14854,1949],{"class":112},[106,14856,1952],{"class":112},[106,14858,1956],{"class":1955},[106,14860,1283],{"class":116},[106,14862,14863,14865],{"class":108,"line":1172},[106,14864,1941],{"class":112},[106,14866,7742],{"class":221},[106,14868,14869,14871],{"class":108,"line":1187},[106,14870,14687],{"class":112},[106,14872,7755],{"class":1955},[106,14874,14875],{"class":108,"line":1193},[106,14876,1538],{"class":116},[106,14878,14879],{"class":108,"line":1207},[106,14880,14709],{"class":112},[106,14882,14883],{"class":108,"line":1213},[106,14884,14885],{"class":116},"    string m_name;\n",[106,14887,14888,14890],{"class":108,"line":1304},[106,14889,1977],{"class":112},[106,14891,14892],{"class":116}," m_id;\n",[106,14894,14895],{"class":108,"line":1310},[106,14896,14897],{"class":175},"    \u002F\u002F赋值姓名\n",[106,14899,14900,14903,14906,14908,14911,14914],{"class":108,"line":1322},[106,14901,14902],{"class":112},"    void",[106,14904,14905],{"class":1955}," setName",[106,14907,117],{"class":116},[106,14909,14910],{"class":1955},"string",[106,14912,14913],{"class":5209}," name",[106,14915,123],{"class":116},[106,14917,14918],{"class":108,"line":1604},[106,14919,2022],{"class":116},[106,14921,14922,14925,14927],{"class":108,"line":1609},[106,14923,14924],{"class":116},"        m_name",[106,14926,162],{"class":112},[106,14928,14929],{"class":116},"name;\n",[106,14931,14932],{"class":108,"line":1615},[106,14933,2179],{"class":116},[106,14935,14936],{"class":108,"line":1620},[106,14937,14938],{"class":175},"    \u002F\u002F赋值学号\n",[106,14940,14941,14943,14946,14948,14950,14953],{"class":108,"line":1634},[106,14942,14902],{"class":112},[106,14944,14945],{"class":1955}," setId",[106,14947,117],{"class":116},[106,14949,120],{"class":112},[106,14951,14952],{"class":5209}," id",[106,14954,123],{"class":116},[106,14956,14957],{"class":108,"line":1639},[106,14958,2022],{"class":116},[106,14960,14961,14964,14966],{"class":108,"line":1645},[106,14962,14963],{"class":116},"        m_id",[106,14965,162],{"class":112},[106,14967,14968],{"class":116},"id;\n",[106,14970,14971],{"class":108,"line":1666},[106,14972,2179],{"class":116},[106,14974,14975],{"class":108,"line":1671},[106,14976,14977],{"class":175},"    \u002F\u002F打印学生信息\n",[106,14979,14980,14982,14984],{"class":108,"line":1685},[106,14981,14902],{"class":112},[106,14983,9608],{"class":1955},[106,14985,1968],{"class":116},[106,14987,14988],{"class":108,"line":1690},[106,14989,2022],{"class":116},[106,14991,14992,14994,14996,14999,15001,15004,15006,15008,15010,15013,15015,15018,15020],{"class":108,"line":1719},[106,14993,3443],{"class":116},[106,14995,1161],{"class":112},[106,14997,14998],{"class":221},"\"姓名：\"",[106,15000,1161],{"class":112},[106,15002,15003],{"class":116},"m_name",[106,15005,1161],{"class":112},[106,15007,4351],{"class":221},[106,15009,1161],{"class":112},[106,15011,15012],{"class":221},"\"学号：\"",[106,15014,1161],{"class":112},[106,15016,15017],{"class":116},"m_id",[106,15019,1161],{"class":112},[106,15021,1184],{"class":116},[106,15023,15024],{"class":108,"line":1724},[106,15025,2179],{"class":116},[106,15027,15028],{"class":108,"line":1741},[106,15029,3987],{"class":116},[106,15031,15032,15034,15036],{"class":108,"line":1746},[106,15033,120],{"class":112},[106,15035,1965],{"class":1955},[106,15037,1968],{"class":116},[106,15039,15040],{"class":108,"line":1751},[106,15041,1538],{"class":116},[106,15043,15044],{"class":108,"line":1756},[106,15045,15046],{"class":175},"    \u002F\u002F实例化\n",[106,15048,15049],{"class":108,"line":1770},[106,15050,15051],{"class":116},"    Student s1;\n",[106,15053,15054,15057,15060,15062,15064],{"class":108,"line":1775},[106,15055,15056],{"class":116},"    s1.",[106,15058,15059],{"class":1955},"setName",[106,15061,117],{"class":116},[106,15063,7909],{"class":221},[106,15065,2711],{"class":116},[106,15067,15068,15070,15073,15075,15078],{"class":108,"line":2569},[106,15069,15056],{"class":116},[106,15071,15072],{"class":1955},"setId",[106,15074,117],{"class":116},[106,15076,15077],{"class":165},"123456",[106,15079,2711],{"class":116},[106,15081,15082,15084,15087],{"class":108,"line":2583},[106,15083,15056],{"class":116},[106,15085,15086],{"class":1955},"printInfo",[106,15088,5629],{"class":116},[106,15090,15091],{"class":108,"line":2591},[106,15092,1557],{"class":116},[14,15094,15095],{},"类中的属性和行为统称为成员",[14,15097,15098],{},"属性：成员属性(成员变量)",[14,15100,15101],{},"方法：成员函数(成员方法)",[14,15103,15104],{},[266,15105,15106],{},"封装意义二：",[14,15108,15109],{},"类在设计时，可以把属性和行为放在不同的权限下，加以控制",[14,15111,15112],{},"访问权限有三种：",[60,15114,15115,15118,15121],{},[63,15116,15117],{},"public        公共权限",[63,15119,15120],{},"protected 保护权限",[63,15122,15123],{},"private      私有权限",[14,15125,15126],{},[266,15127,15128],{},"示例：",[97,15130,15132],{"className":9934,"code":15131,"language":9936,"meta":25,"style":25},"\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",[103,15133,15134,15139,15144,15149,15154,15158,15165,15169,15174,15178,15183,15187,15192,15197,15202,15206,15211,15216,15223,15227,15231,15239,15243,15254,15266,15278,15282,15286,15290,15298,15302,15307,15319,15327,15335,15339,15349,15353,15361],{"__ignoreMap":25},[106,15135,15136],{"class":108,"line":109},[106,15137,15138],{"class":175},"\u002F\u002F三种权限\n",[106,15140,15141],{"class":108,"line":28},[106,15142,15143],{"class":175},"\u002F\u002F公共权限  public     类内可以访问  类外可以访问\n",[106,15145,15146],{"class":108,"line":1172},[106,15147,15148],{"class":175},"\u002F\u002F保护权限  protected  类内可以访问  类外不可以访问  儿子可以访问父亲中的保护内容\n",[106,15150,15151],{"class":108,"line":1187},[106,15152,15153],{"class":175},"\u002F\u002F私有权限  private    类内可以访问  类外不可以访问  儿子不可以访问父亲中的保护内容\n",[106,15155,15156],{"class":108,"line":1193},[106,15157,2392],{"emptyLinePlaceholder":33},[106,15159,15160,15162],{"class":108,"line":1207},[106,15161,14687],{"class":112},[106,15163,15164],{"class":1955}," Person\n",[106,15166,15167],{"class":108,"line":1213},[106,15168,1538],{"class":116},[106,15170,15171],{"class":108,"line":1304},[106,15172,15173],{"class":175},"    \u002F\u002F姓名  公共权限\n",[106,15175,15176],{"class":108,"line":1310},[106,15177,14709],{"class":112},[106,15179,15180],{"class":108,"line":1322},[106,15181,15182],{"class":116},"    string m_Name;\n",[106,15184,15185],{"class":108,"line":1604},[106,15186,2392],{"emptyLinePlaceholder":33},[106,15188,15189],{"class":108,"line":1609},[106,15190,15191],{"class":175},"    \u002F\u002F汽车  保护权限\n",[106,15193,15194],{"class":108,"line":1615},[106,15195,15196],{"class":112},"protected:\n",[106,15198,15199],{"class":108,"line":1620},[106,15200,15201],{"class":116},"    string m_Car;\n",[106,15203,15204],{"class":108,"line":1634},[106,15205,2392],{"emptyLinePlaceholder":33},[106,15207,15208],{"class":108,"line":1639},[106,15209,15210],{"class":175},"    \u002F\u002F银行卡密码  私有权限\n",[106,15212,15213],{"class":108,"line":1645},[106,15214,15215],{"class":112},"private:\n",[106,15217,15218,15220],{"class":108,"line":1666},[106,15219,1977],{"class":112},[106,15221,15222],{"class":116}," m_Password;\n",[106,15224,15225],{"class":108,"line":1671},[106,15226,2392],{"emptyLinePlaceholder":33},[106,15228,15229],{"class":108,"line":1685},[106,15230,14709],{"class":112},[106,15232,15233,15235,15237],{"class":108,"line":1690},[106,15234,14902],{"class":112},[106,15236,11378],{"class":1955},[106,15238,1968],{"class":116},[106,15240,15241],{"class":108,"line":1719},[106,15242,2022],{"class":116},[106,15244,15245,15248,15250,15252],{"class":108,"line":1724},[106,15246,15247],{"class":116},"        m_Name ",[106,15249,162],{"class":112},[106,15251,8931],{"class":221},[106,15253,1283],{"class":116},[106,15255,15256,15259,15261,15264],{"class":108,"line":1741},[106,15257,15258],{"class":116},"        m_Car ",[106,15260,162],{"class":112},[106,15262,15263],{"class":221}," \"拖拉机\"",[106,15265,1283],{"class":116},[106,15267,15268,15271,15273,15276],{"class":108,"line":1746},[106,15269,15270],{"class":116},"        m_Password ",[106,15272,162],{"class":112},[106,15274,15275],{"class":165}," 123456",[106,15277,1283],{"class":116},[106,15279,15280],{"class":108,"line":1751},[106,15281,2179],{"class":116},[106,15283,15284],{"class":108,"line":1756},[106,15285,3987],{"class":116},[106,15287,15288],{"class":108,"line":1770},[106,15289,2392],{"emptyLinePlaceholder":33},[106,15291,15292,15294,15296],{"class":108,"line":1775},[106,15293,120],{"class":112},[106,15295,1965],{"class":1955},[106,15297,10846],{"class":116},[106,15299,15300],{"class":108,"line":2569},[106,15301,2392],{"emptyLinePlaceholder":33},[106,15303,15304],{"class":108,"line":2583},[106,15305,15306],{"class":116},"    Person p;\n",[106,15308,15309,15312,15314,15317],{"class":108,"line":2591},[106,15310,15311],{"class":116},"    p.m_Name ",[106,15313,162],{"class":112},[106,15315,15316],{"class":221}," \"李四\"",[106,15318,1283],{"class":116},[106,15320,15321,15324],{"class":108,"line":2596},[106,15322,15323],{"class":175},"    \u002F\u002Fp.m_Car = \"奔驰\";",[106,15325,15326],{"class":175},"  \u002F\u002F保护权限类外访问不到\n",[106,15328,15329,15332],{"class":108,"line":2602},[106,15330,15331],{"class":175},"    \u002F\u002Fp.m_Password = 123;",[106,15333,15334],{"class":175}," \u002F\u002F私有权限类外访问不到\n",[106,15336,15337],{"class":108,"line":2608},[106,15338,2392],{"emptyLinePlaceholder":33},[106,15340,15341,15343,15345,15347],{"class":108,"line":2613},[106,15342,2295],{"class":1955},[106,15344,117],{"class":116},[106,15346,2300],{"class":221},[106,15348,2711],{"class":116},[106,15350,15351],{"class":108,"line":7941},[106,15352,2392],{"emptyLinePlaceholder":33},[106,15354,15355,15357,15359],{"class":108,"line":7965},[106,15356,4082],{"class":112},[106,15358,4085],{"class":165},[106,15360,1283],{"class":116},[106,15362,15363],{"class":108,"line":7970},[106,15364,1557],{"class":116},[77,15366,15368],{"id":15367},"_812封装c中的class和struct的区别","8.1.2封装c++中的class和struct的区别",[14,15370,15371,15372,15375,15376],{},"在C++中 struct和class唯一的",[266,15373,15374],{},"区别","就在于 ",[266,15377,15378],{},"默认的访问权限不同",[14,15380,15381],{},"区别：",[1124,15383,15384,15387],{},[63,15385,15386],{},"struct 默认权限为公共",[63,15388,15389],{},"class   默认权限为私有",[97,15391,15393],{"className":9934,"code":15392,"language":9936,"meta":25,"style":25},"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",[103,15394,15395,15402,15406,15416,15420,15424,15431,15435,15445,15449,15453,15461,15465,15470,15484,15488,15493,15507,15511,15521,15525,15533],{"__ignoreMap":25},[106,15396,15397,15399],{"class":108,"line":109},[106,15398,14687],{"class":112},[106,15400,15401],{"class":1955}," C1\n",[106,15403,15404],{"class":108,"line":28},[106,15405,1538],{"class":116},[106,15407,15408,15410,15413],{"class":108,"line":1172},[106,15409,1977],{"class":112},[106,15411,15412],{"class":116},"  m_A;",[106,15414,15415],{"class":175}," \u002F\u002F默认是私有权限\n",[106,15417,15418],{"class":108,"line":1187},[106,15419,3987],{"class":116},[106,15421,15422],{"class":108,"line":1193},[106,15423,2392],{"emptyLinePlaceholder":33},[106,15425,15426,15428],{"class":108,"line":1207},[106,15427,7752],{"class":112},[106,15429,15430],{"class":1955}," C2\n",[106,15432,15433],{"class":108,"line":1213},[106,15434,1538],{"class":116},[106,15436,15437,15439,15442],{"class":108,"line":1304},[106,15438,1977],{"class":112},[106,15440,15441],{"class":116}," m_A;",[106,15443,15444],{"class":175},"  \u002F\u002F默认是公共权限\n",[106,15446,15447],{"class":108,"line":1310},[106,15448,3987],{"class":116},[106,15450,15451],{"class":108,"line":1322},[106,15452,2392],{"emptyLinePlaceholder":33},[106,15454,15455,15457,15459],{"class":108,"line":1604},[106,15456,120],{"class":112},[106,15458,1965],{"class":1955},[106,15460,10846],{"class":116},[106,15462,15463],{"class":108,"line":1609},[106,15464,2392],{"emptyLinePlaceholder":33},[106,15466,15467],{"class":108,"line":1615},[106,15468,15469],{"class":116},"    C1 c1;\n",[106,15471,15472,15475,15477,15479,15481],{"class":108,"line":1620},[106,15473,15474],{"class":116},"    c1.m_A ",[106,15476,162],{"class":112},[106,15478,2030],{"class":165},[106,15480,172],{"class":116},[106,15482,15483],{"class":175}," \u002F\u002F错误，访问权限是私有\n",[106,15485,15486],{"class":108,"line":1634},[106,15487,2392],{"emptyLinePlaceholder":33},[106,15489,15490],{"class":108,"line":1639},[106,15491,15492],{"class":116},"    C2 c2;\n",[106,15494,15495,15498,15500,15502,15504],{"class":108,"line":1645},[106,15496,15497],{"class":116},"    c2.m_A ",[106,15499,162],{"class":112},[106,15501,2030],{"class":165},[106,15503,172],{"class":116},[106,15505,15506],{"class":175}," \u002F\u002F正确，访问权限是公共\n",[106,15508,15509],{"class":108,"line":1666},[106,15510,2392],{"emptyLinePlaceholder":33},[106,15512,15513,15515,15517,15519],{"class":108,"line":1671},[106,15514,2295],{"class":1955},[106,15516,117],{"class":116},[106,15518,2300],{"class":221},[106,15520,2711],{"class":116},[106,15522,15523],{"class":108,"line":1685},[106,15524,2392],{"emptyLinePlaceholder":33},[106,15526,15527,15529,15531],{"class":108,"line":1690},[106,15528,4082],{"class":112},[106,15530,4085],{"class":165},[106,15532,1283],{"class":116},[106,15534,15535],{"class":108,"line":1719},[106,15536,1557],{"class":116},[77,15538,15540],{"id":15539},"_813成员属性设置为私有","8.1.3成员属性设置为私有",[14,15542,15543],{},"**优点1：**将所有成员属性设置为私有，可以自己控制读写权限",[14,15545,15546],{},"**优点2：**对于写权限，我们可以检测数据的有效性",[14,15548,15549],{},[266,15550,15128],{},[97,15552,15554],{"className":9934,"code":15553,"language":9936,"meta":25,"style":25},"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",[103,15555,15556,15566,15570,15574,15579,15593,15602,15606,15616,15620,15627,15631,15635,15639,15644,15653,15660,15664,15669,15685,15708,15721,15728,15732,15741,15745,15749,15754,15770,15780,15784,15788,15792,15800,15804,15814,15818,15826,15830,15834,15842,15846,15850,15855,15868,15891,15895,15900,15913,15935,15939,15944,15958,15966,15970,15980,15984,15992],{"__ignoreMap":25},[106,15557,15558,15560,15563],{"class":108,"line":109},[106,15559,14687],{"class":112},[106,15561,15562],{"class":1955}," Person",[106,15564,15565],{"class":116}," {\n",[106,15567,15568],{"class":108,"line":28},[106,15569,14709],{"class":112},[106,15571,15572],{"class":108,"line":1172},[106,15573,2392],{"emptyLinePlaceholder":33},[106,15575,15576],{"class":108,"line":1187},[106,15577,15578],{"class":175},"    \u002F\u002F姓名设置可读可写\n",[106,15580,15581,15583,15585,15587,15589,15591],{"class":108,"line":1193},[106,15582,14902],{"class":112},[106,15584,14905],{"class":1955},[106,15586,117],{"class":116},[106,15588,14910],{"class":1955},[106,15590,14913],{"class":5209},[106,15592,12435],{"class":116},[106,15594,15595,15597,15599],{"class":108,"line":1207},[106,15596,15247],{"class":116},[106,15598,162],{"class":112},[106,15600,15601],{"class":116}," name;\n",[106,15603,15604],{"class":108,"line":1213},[106,15605,2179],{"class":116},[106,15607,15608,15611,15614],{"class":108,"line":1304},[106,15609,15610],{"class":1955},"    string",[106,15612,15613],{"class":1955}," getName",[106,15615,1968],{"class":116},[106,15617,15618],{"class":108,"line":1310},[106,15619,2022],{"class":116},[106,15621,15622,15624],{"class":108,"line":1322},[106,15623,14745],{"class":112},[106,15625,15626],{"class":116}," m_Name;\n",[106,15628,15629],{"class":108,"line":1604},[106,15630,2179],{"class":116},[106,15632,15633],{"class":108,"line":1609},[106,15634,2392],{"emptyLinePlaceholder":33},[106,15636,15637],{"class":108,"line":1615},[106,15638,2392],{"emptyLinePlaceholder":33},[106,15640,15641],{"class":108,"line":1620},[106,15642,15643],{"class":175},"    \u002F\u002F获取年龄 \n",[106,15645,15646,15648,15651],{"class":108,"line":1634},[106,15647,1977],{"class":112},[106,15649,15650],{"class":1955}," getAge",[106,15652,10846],{"class":116},[106,15654,15655,15657],{"class":108,"line":1639},[106,15656,14745],{"class":112},[106,15658,15659],{"class":116}," m_Age;\n",[106,15661,15662],{"class":108,"line":1645},[106,15663,2179],{"class":116},[106,15665,15666],{"class":108,"line":1666},[106,15667,15668],{"class":175},"    \u002F\u002F设置年龄\n",[106,15670,15671,15673,15676,15678,15680,15683],{"class":108,"line":1671},[106,15672,14902],{"class":112},[106,15674,15675],{"class":1955}," setAge",[106,15677,117],{"class":116},[106,15679,120],{"class":112},[106,15681,15682],{"class":5209}," age",[106,15684,12435],{"class":116},[106,15686,15687,15689,15692,15694,15696,15698,15701,15703,15706],{"class":108,"line":1685},[106,15688,2489],{"class":112},[106,15690,15691],{"class":116}," (age ",[106,15693,1027],{"class":112},[106,15695,4085],{"class":165},[106,15697,3247],{"class":112},[106,15699,15700],{"class":116}," age ",[106,15702,1077],{"class":112},[106,15704,15705],{"class":165}," 150",[106,15707,12435],{"class":116},[106,15709,15710,15712,15714,15717,15719],{"class":108,"line":1690},[106,15711,9712],{"class":116},[106,15713,1161],{"class":112},[106,15715,15716],{"class":221}," \"你个老妖精!\"",[106,15718,1437],{"class":112},[106,15720,8833],{"class":116},[106,15722,15723,15726],{"class":108,"line":1719},[106,15724,15725],{"class":112},"            return",[106,15727,1283],{"class":116},[106,15729,15730],{"class":108,"line":1724},[106,15731,2521],{"class":116},[106,15733,15734,15737,15739],{"class":108,"line":1741},[106,15735,15736],{"class":116},"        m_Age ",[106,15738,162],{"class":112},[106,15740,7790],{"class":116},[106,15742,15743],{"class":108,"line":1746},[106,15744,2179],{"class":116},[106,15746,15747],{"class":108,"line":1751},[106,15748,2392],{"emptyLinePlaceholder":33},[106,15750,15751],{"class":108,"line":1756},[106,15752,15753],{"class":175},"    \u002F\u002F情人设置为只写\n",[106,15755,15756,15758,15761,15763,15765,15768],{"class":108,"line":1770},[106,15757,14902],{"class":112},[106,15759,15760],{"class":1955}," setLover",[106,15762,117],{"class":116},[106,15764,14910],{"class":1955},[106,15766,15767],{"class":5209}," lover",[106,15769,12435],{"class":116},[106,15771,15772,15775,15777],{"class":108,"line":1775},[106,15773,15774],{"class":116},"        m_Lover ",[106,15776,162],{"class":112},[106,15778,15779],{"class":116}," lover;\n",[106,15781,15782],{"class":108,"line":2569},[106,15783,2179],{"class":116},[106,15785,15786],{"class":108,"line":2583},[106,15787,2392],{"emptyLinePlaceholder":33},[106,15789,15790],{"class":108,"line":2591},[106,15791,15215],{"class":112},[106,15793,15794,15797],{"class":108,"line":2596},[106,15795,15796],{"class":116},"    string m_Name;",[106,15798,15799],{"class":175}," \u002F\u002F可读可写  姓名\n",[106,15801,15802],{"class":108,"line":2602},[106,15803,13203],{"class":116},[106,15805,15806,15808,15811],{"class":108,"line":2608},[106,15807,1977],{"class":112},[106,15809,15810],{"class":116}," m_Age;",[106,15812,15813],{"class":175}," \u002F\u002F只读  年龄\n",[106,15815,15816],{"class":108,"line":2613},[106,15817,2392],{"emptyLinePlaceholder":33},[106,15819,15820,15823],{"class":108,"line":7941},[106,15821,15822],{"class":116},"    string m_Lover;",[106,15824,15825],{"class":175}," \u002F\u002F只写  情人\n",[106,15827,15828],{"class":108,"line":7965},[106,15829,3987],{"class":116},[106,15831,15832],{"class":108,"line":7970},[106,15833,2392],{"emptyLinePlaceholder":33},[106,15835,15836,15838,15840],{"class":108,"line":7976},[106,15837,120],{"class":112},[106,15839,1965],{"class":1955},[106,15841,10846],{"class":116},[106,15843,15844],{"class":108,"line":8003},[106,15845,2392],{"emptyLinePlaceholder":33},[106,15847,15848],{"class":108,"line":8008},[106,15849,15306],{"class":116},[106,15851,15852],{"class":108,"line":8014},[106,15853,15854],{"class":175},"    \u002F\u002F姓名设置\n",[106,15856,15857,15860,15862,15864,15866],{"class":108,"line":8026},[106,15858,15859],{"class":116},"    p.",[106,15861,15059],{"class":1955},[106,15863,117],{"class":116},[106,15865,7909],{"class":221},[106,15867,2711],{"class":116},[106,15869,15870,15872,15874,15877,15879,15882,15885,15887,15889],{"class":108,"line":8038},[106,15871,6522],{"class":116},[106,15873,1161],{"class":112},[106,15875,15876],{"class":221}," \"姓名： \"",[106,15878,1437],{"class":112},[106,15880,15881],{"class":116}," p.",[106,15883,15884],{"class":1955},"getName",[106,15886,13043],{"class":116},[106,15888,1161],{"class":112},[106,15890,8833],{"class":116},[106,15892,15893],{"class":108,"line":8050},[106,15894,2392],{"emptyLinePlaceholder":33},[106,15896,15897],{"class":108,"line":9709},[106,15898,15899],{"class":175},"    \u002F\u002F年龄设置\n",[106,15901,15902,15904,15907,15909,15911],{"class":108,"line":9734},[106,15903,15859],{"class":116},[106,15905,15906],{"class":1955},"setAge",[106,15908,117],{"class":116},[106,15910,773],{"class":165},[106,15912,2711],{"class":116},[106,15914,15915,15917,15919,15922,15924,15926,15929,15931,15933],{"class":108,"line":9757},[106,15916,6522],{"class":116},[106,15918,1161],{"class":112},[106,15920,15921],{"class":221}," \"年龄： \"",[106,15923,1437],{"class":112},[106,15925,15881],{"class":116},[106,15927,15928],{"class":1955},"getAge",[106,15930,13043],{"class":116},[106,15932,1161],{"class":112},[106,15934,8833],{"class":116},[106,15936,15937],{"class":108,"line":9781},[106,15938,2392],{"emptyLinePlaceholder":33},[106,15940,15941],{"class":108,"line":9786},[106,15942,15943],{"class":175},"    \u002F\u002F情人设置\n",[106,15945,15946,15948,15951,15953,15956],{"class":108,"line":9791},[106,15947,15859],{"class":116},[106,15949,15950],{"class":1955},"setLover",[106,15952,117],{"class":116},[106,15954,15955],{"class":221},"\"苍井\"",[106,15957,2711],{"class":116},[106,15959,15960,15963],{"class":108,"line":9796},[106,15961,15962],{"class":175},"    \u002F\u002Fcout \u003C\u003C \"情人： \" \u003C\u003C p.m_Lover \u003C\u003C endl;",[106,15964,15965],{"class":175},"  \u002F\u002F只写属性，不可以读取\n",[106,15967,15968],{"class":108,"line":9805},[106,15969,2392],{"emptyLinePlaceholder":33},[106,15971,15972,15974,15976,15978],{"class":108,"line":9810},[106,15973,2295],{"class":1955},[106,15975,117],{"class":116},[106,15977,2300],{"class":221},[106,15979,2711],{"class":116},[106,15981,15982],{"class":108,"line":9816},[106,15983,2392],{"emptyLinePlaceholder":33},[106,15985,15986,15988,15990],{"class":108,"line":9837},[106,15987,4082],{"class":112},[106,15989,4085],{"class":165},[106,15991,1283],{"class":116},[106,15993,15994],{"class":108,"line":9843},[106,15995,1557],{"class":116},[77,15997,15999],{"id":15998},"_814封装案例","8.1.4封装案例",[60,16001,16002],{},[63,16003,16004,16007],{},[266,16005,16006],{},"练习案例1：设计立方体类","\n设计立方体类(Cube)",[1124,16009,16010,16013],{},[63,16011,16012],{},"求出立方体的面积和体积",[63,16014,16015],{},"分别用全局函数和成员函数判断两个立方体是否相等。",[97,16017,16019],{"className":99,"code":16018,"language":101,"meta":25,"style":25},"#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",[103,16020,16021,16027,16037,16044,16048,16052,16057,16087,16091,16101,16111,16121,16125,16134,16138,16174,16178,16187,16191,16207,16211,16216,16225,16229,16236,16240,16249,16253,16260,16264,16273,16277,16284,16288,16293,16310,16314,16360,16364,16373,16377,16381,16385,16394,16398,16402,16407,16411,16417,16423,16429,16433,16437,16442,16464,16468,16522,16526,16534,16538,16543,16548,16561,16568,16584,16595,16601,16624,16630,16653,16667,16687,16693,16704,16727,16749,16754,16760,16774,16787,16792,16806,16811,16817,16822,16836,16841,16846,16860,16872,16877,16890,16895,16900,16905,16918,16923],{"__ignoreMap":25},[106,16022,16023,16025],{"class":108,"line":109},[106,16024,1941],{"class":112},[106,16026,1944],{"class":221},[106,16028,16029,16031,16033,16035],{"class":108,"line":28},[106,16030,1949],{"class":112},[106,16032,1952],{"class":112},[106,16034,1956],{"class":1955},[106,16036,1283],{"class":116},[106,16038,16039,16041],{"class":108,"line":1172},[106,16040,14687],{"class":112},[106,16042,16043],{"class":1955}," Cube\n",[106,16045,16046],{"class":108,"line":1187},[106,16047,1538],{"class":116},[106,16049,16050],{"class":108,"line":1193},[106,16051,14709],{"class":112},[106,16053,16054],{"class":108,"line":1207},[106,16055,16056],{"class":175},"    \u002F\u002F输入长宽高\n",[106,16058,16059,16061,16064,16066,16068,16071,16073,16075,16078,16080,16082,16085],{"class":108,"line":1213},[106,16060,14902],{"class":112},[106,16062,16063],{"class":1955}," setLwh",[106,16065,117],{"class":116},[106,16067,120],{"class":112},[106,16069,16070],{"class":5209}," l",[106,16072,495],{"class":116},[106,16074,120],{"class":112},[106,16076,16077],{"class":5209}," w",[106,16079,495],{"class":116},[106,16081,120],{"class":112},[106,16083,16084],{"class":5209}," h",[106,16086,123],{"class":116},[106,16088,16089],{"class":108,"line":1304},[106,16090,2022],{"class":116},[106,16092,16093,16096,16098],{"class":108,"line":1310},[106,16094,16095],{"class":116},"        m_L",[106,16097,162],{"class":112},[106,16099,16100],{"class":116},"l;\n",[106,16102,16103,16106,16108],{"class":108,"line":1322},[106,16104,16105],{"class":116},"        m_W",[106,16107,162],{"class":112},[106,16109,16110],{"class":116},"w;\n",[106,16112,16113,16116,16118],{"class":108,"line":1604},[106,16114,16115],{"class":116},"        m_H",[106,16117,162],{"class":112},[106,16119,16120],{"class":116},"h;\n",[106,16122,16123],{"class":108,"line":1609},[106,16124,2179],{"class":116},[106,16126,16127,16129,16132],{"class":108,"line":1615},[106,16128,1977],{"class":112},[106,16130,16131],{"class":1955}," mianji",[106,16133,1968],{"class":116},[106,16135,16136],{"class":108,"line":1620},[106,16137,2022],{"class":116},[106,16139,16140,16142,16144,16146,16149,16151,16154,16156,16159,16161,16164,16166,16169,16171],{"class":108,"line":1634},[106,16141,14745],{"class":112},[106,16143,14748],{"class":165},[106,16145,572],{"class":112},[106,16147,16148],{"class":116},"(m_L",[106,16150,572],{"class":112},[106,16152,16153],{"class":116},"m_W ",[106,16155,598],{"class":112},[106,16157,16158],{"class":116}," m_L",[106,16160,572],{"class":112},[106,16162,16163],{"class":116},"m_H ",[106,16165,598],{"class":112},[106,16167,16168],{"class":116}," m_W",[106,16170,572],{"class":112},[106,16172,16173],{"class":116},"m_H);\n",[106,16175,16176],{"class":108,"line":1639},[106,16177,2179],{"class":116},[106,16179,16180,16182,16185],{"class":108,"line":1645},[106,16181,1977],{"class":112},[106,16183,16184],{"class":1955}," tiji",[106,16186,1968],{"class":116},[106,16188,16189],{"class":108,"line":1666},[106,16190,2022],{"class":116},[106,16192,16193,16195,16197,16199,16202,16204],{"class":108,"line":1671},[106,16194,14745],{"class":112},[106,16196,16158],{"class":116},[106,16198,572],{"class":112},[106,16200,16201],{"class":116},"m_W",[106,16203,572],{"class":112},[106,16205,16206],{"class":116},"m_H;\n",[106,16208,16209],{"class":108,"line":1685},[106,16210,2179],{"class":116},[106,16212,16213],{"class":108,"line":1690},[106,16214,16215],{"class":175},"    \u002F\u002F获取长宽高\n",[106,16217,16218,16220,16223],{"class":108,"line":1719},[106,16219,1977],{"class":112},[106,16221,16222],{"class":1955}," getLength",[106,16224,1968],{"class":116},[106,16226,16227],{"class":108,"line":1724},[106,16228,2022],{"class":116},[106,16230,16231,16233],{"class":108,"line":1741},[106,16232,14745],{"class":112},[106,16234,16235],{"class":116}," m_L;\n",[106,16237,16238],{"class":108,"line":1746},[106,16239,2179],{"class":116},[106,16241,16242,16244,16247],{"class":108,"line":1751},[106,16243,1977],{"class":112},[106,16245,16246],{"class":1955}," getWidth",[106,16248,1968],{"class":116},[106,16250,16251],{"class":108,"line":1756},[106,16252,2022],{"class":116},[106,16254,16255,16257],{"class":108,"line":1770},[106,16256,14745],{"class":112},[106,16258,16259],{"class":116}," m_W;\n",[106,16261,16262],{"class":108,"line":1775},[106,16263,2179],{"class":116},[106,16265,16266,16268,16271],{"class":108,"line":2569},[106,16267,1977],{"class":112},[106,16269,16270],{"class":1955}," getHeight",[106,16272,1968],{"class":116},[106,16274,16275],{"class":108,"line":2583},[106,16276,2022],{"class":116},[106,16278,16279,16281],{"class":108,"line":2591},[106,16280,14745],{"class":112},[106,16282,16283],{"class":116}," m_H;\n",[106,16285,16286],{"class":108,"line":2596},[106,16287,2179],{"class":116},[106,16289,16290],{"class":108,"line":2602},[106,16291,16292],{"class":175},"    \u002F\u002F成员函数判断两个立方体是否相等\n",[106,16294,16295,16298,16301,16303,16306,16308],{"class":108,"line":2608},[106,16296,16297],{"class":112},"    bool",[106,16299,16300],{"class":1955}," isEqual",[106,16302,117],{"class":116},[106,16304,16305],{"class":1955},"Cube",[106,16307,2841],{"class":5209},[106,16309,123],{"class":116},[106,16311,16312],{"class":108,"line":2613},[106,16313,2022],{"class":116},[106,16315,16316,16318,16321,16324,16326,16328,16331,16333,16336,16339,16341,16343,16346,16348,16350,16353,16355,16357],{"class":108,"line":7941},[106,16317,2489],{"class":112},[106,16319,16320],{"class":116}," (c.",[106,16322,16323],{"class":1955},"getLength",[106,16325,13043],{"class":116},[106,16327,2941],{"class":112},[106,16329,16330],{"class":116}," m_L ",[106,16332,1707],{"class":112},[106,16334,16335],{"class":116}," c.",[106,16337,16338],{"class":1955},"getWidth",[106,16340,13043],{"class":116},[106,16342,2941],{"class":112},[106,16344,16345],{"class":116}," m_W ",[106,16347,1707],{"class":112},[106,16349,16335],{"class":116},[106,16351,16352],{"class":1955},"getHeight",[106,16354,13043],{"class":116},[106,16356,2941],{"class":112},[106,16358,16359],{"class":116}," m_H)\n",[106,16361,16362],{"class":108,"line":7965},[106,16363,2502],{"class":116},[106,16365,16366,16368,16371],{"class":108,"line":7970},[106,16367,15725],{"class":112},[106,16369,16370],{"class":165}," true",[106,16372,1283],{"class":116},[106,16374,16375],{"class":108,"line":7976},[106,16376,2521],{"class":116},[106,16378,16379],{"class":108,"line":8003},[106,16380,2562],{"class":112},[106,16382,16383],{"class":108,"line":8008},[106,16384,2502],{"class":116},[106,16386,16387,16389,16392],{"class":108,"line":8014},[106,16388,15725],{"class":112},[106,16390,16391],{"class":165}," false",[106,16393,1283],{"class":116},[106,16395,16396],{"class":108,"line":8026},[106,16397,2521],{"class":116},[106,16399,16400],{"class":108,"line":8038},[106,16401,2179],{"class":116},[106,16403,16404],{"class":108,"line":8050},[106,16405,16406],{"class":175},"    \u002F\u002F私有属性\n",[106,16408,16409],{"class":108,"line":9709},[106,16410,15215],{"class":112},[106,16412,16413,16415],{"class":108,"line":9734},[106,16414,1977],{"class":112},[106,16416,16235],{"class":116},[106,16418,16419,16421],{"class":108,"line":9757},[106,16420,1977],{"class":112},[106,16422,16259],{"class":116},[106,16424,16425,16427],{"class":108,"line":9781},[106,16426,1977],{"class":112},[106,16428,16283],{"class":116},[106,16430,16431],{"class":108,"line":9786},[106,16432,2392],{"emptyLinePlaceholder":33},[106,16434,16435],{"class":108,"line":9791},[106,16436,3987],{"class":116},[106,16438,16439],{"class":108,"line":9796},[106,16440,16441],{"class":175},"\u002F\u002F全局函数判断两个立方体是否相等\n",[106,16443,16444,16446,16448,16450,16452,16455,16457,16459,16462],{"class":108,"line":9805},[106,16445,1347],{"class":112},[106,16447,16300],{"class":1955},[106,16449,117],{"class":116},[106,16451,16305],{"class":1955},[106,16453,16454],{"class":5209}," c1",[106,16456,495],{"class":116},[106,16458,16305],{"class":1955},[106,16460,16461],{"class":5209}," c2",[106,16463,123],{"class":116},[106,16465,16466],{"class":108,"line":9810},[106,16467,1538],{"class":116},[106,16469,16470,16472,16475,16477,16479,16481,16484,16486,16489,16491,16493,16495,16497,16499,16501,16503,16505,16507,16509,16511,16513,16515,16517,16519],{"class":108,"line":9816},[106,16471,4082],{"class":112},[106,16473,16474],{"class":116}," (c1.",[106,16476,16323],{"class":1955},[106,16478,13043],{"class":116},[106,16480,2941],{"class":112},[106,16482,16483],{"class":116}," c2.",[106,16485,16323],{"class":1955},[106,16487,16488],{"class":116},"()) ",[106,16490,1707],{"class":112},[106,16492,16474],{"class":116},[106,16494,16338],{"class":1955},[106,16496,13043],{"class":116},[106,16498,2941],{"class":112},[106,16500,16483],{"class":116},[106,16502,16338],{"class":1955},[106,16504,16488],{"class":116},[106,16506,1707],{"class":112},[106,16508,16474],{"class":116},[106,16510,16352],{"class":1955},[106,16512,13043],{"class":116},[106,16514,2941],{"class":112},[106,16516,16483],{"class":116},[106,16518,16352],{"class":1955},[106,16520,16521],{"class":116},"());\n",[106,16523,16524],{"class":108,"line":9837},[106,16525,1557],{"class":116},[106,16527,16528,16530,16532],{"class":108,"line":9843},[106,16529,120],{"class":112},[106,16531,1965],{"class":1955},[106,16533,1968],{"class":116},[106,16535,16536],{"class":108,"line":9857},[106,16537,1538],{"class":116},[106,16539,16540],{"class":108,"line":9863},[106,16541,16542],{"class":116},"    Cube c1;\n",[106,16544,16545],{"class":108,"line":9890},[106,16546,16547],{"class":175},"    \u002F\u002F输入立方体的长宽高\n",[106,16549,16550,16552,16554,16557,16559],{"class":108,"line":9899},[106,16551,1543],{"class":116},[106,16553,1161],{"class":112},[106,16555,16556],{"class":221},"\"请输入第一个立方体的长、宽、高：\"",[106,16558,1161],{"class":112},[106,16560,1184],{"class":116},[106,16562,16563,16565],{"class":108,"line":9905},[106,16564,1977],{"class":112},[106,16566,16567],{"class":116}," l,w,h,l1,w1,h1;\n",[106,16569,16570,16572,16574,16576,16578,16580,16582],{"class":108,"line":9913},[106,16571,2004],{"class":116},[106,16573,1422],{"class":112},[106,16575,635],{"class":116},[106,16577,1422],{"class":112},[106,16579,912],{"class":116},[106,16581,1422],{"class":112},[106,16583,16120],{"class":116},[106,16585,16586,16589,16592],{"class":108,"line":9918},[106,16587,16588],{"class":116},"    c1.",[106,16590,16591],{"class":1955},"setLwh",[106,16593,16594],{"class":116},"(l,w,h);\n",[106,16596,16598],{"class":108,"line":16597},66,[106,16599,16600],{"class":175},"    \u002F\u002F面积\n",[106,16602,16604,16606,16608,16611,16613,16615,16618,16620,16622],{"class":108,"line":16603},67,[106,16605,1543],{"class":116},[106,16607,1161],{"class":112},[106,16609,16610],{"class":221},"\"立方体的表面积为：\"",[106,16612,1161],{"class":112},[106,16614,14823],{"class":116},[106,16616,16617],{"class":1955},"mianji",[106,16619,2419],{"class":116},[106,16621,1161],{"class":112},[106,16623,1184],{"class":116},[106,16625,16627],{"class":108,"line":16626},68,[106,16628,16629],{"class":175},"    \u002F\u002F体积\n",[106,16631,16633,16635,16637,16640,16642,16644,16647,16649,16651],{"class":108,"line":16632},69,[106,16634,1543],{"class":116},[106,16636,1161],{"class":112},[106,16638,16639],{"class":221},"\"立方体的体积为：\"",[106,16641,1161],{"class":112},[106,16643,14823],{"class":116},[106,16645,16646],{"class":1955},"tiji",[106,16648,2419],{"class":116},[106,16650,1161],{"class":112},[106,16652,1184],{"class":116},[106,16654,16656,16658,16660,16663,16665],{"class":108,"line":16655},70,[106,16657,1543],{"class":116},[106,16659,1161],{"class":112},[106,16661,16662],{"class":221},"\"请输入第二个立方体的长、宽、高：\"",[106,16664,1161],{"class":112},[106,16666,1184],{"class":116},[106,16668,16670,16672,16674,16677,16679,16682,16684],{"class":108,"line":16669},71,[106,16671,2004],{"class":116},[106,16673,1422],{"class":112},[106,16675,16676],{"class":116},"l1",[106,16678,1422],{"class":112},[106,16680,16681],{"class":116},"w1",[106,16683,1422],{"class":112},[106,16685,16686],{"class":116},"h1;\n",[106,16688,16690],{"class":108,"line":16689},72,[106,16691,16692],{"class":116},"    Cube c2;\n",[106,16694,16696,16699,16701],{"class":108,"line":16695},73,[106,16697,16698],{"class":116},"    c2.",[106,16700,16591],{"class":1955},[106,16702,16703],{"class":116},"(l1,w1,h1);\n",[106,16705,16707,16709,16711,16714,16716,16719,16721,16723,16725],{"class":108,"line":16706},74,[106,16708,1543],{"class":116},[106,16710,1161],{"class":112},[106,16712,16713],{"class":221},"\"第二个立方体的表面积为：\"",[106,16715,1161],{"class":112},[106,16717,16718],{"class":116},"c2.",[106,16720,16617],{"class":1955},[106,16722,2419],{"class":116},[106,16724,1161],{"class":112},[106,16726,1184],{"class":116},[106,16728,16730,16732,16734,16737,16739,16741,16743,16745,16747],{"class":108,"line":16729},75,[106,16731,1543],{"class":116},[106,16733,1161],{"class":112},[106,16735,16736],{"class":221},"\"第二个立方体的体积为：\"",[106,16738,1161],{"class":112},[106,16740,16718],{"class":116},[106,16742,16646],{"class":1955},[106,16744,2419],{"class":116},[106,16746,1161],{"class":112},[106,16748,1184],{"class":116},[106,16750,16752],{"class":108,"line":16751},76,[106,16753,2392],{"emptyLinePlaceholder":33},[106,16755,16757],{"class":108,"line":16756},77,[106,16758,16759],{"class":175},"    \u002F\u002F判断两个立方体的表面积和体积是否相等\n",[106,16761,16763,16765,16767,16770,16772],{"class":108,"line":16762},78,[106,16764,1543],{"class":116},[106,16766,1161],{"class":112},[106,16768,16769],{"class":221},"\"内部函数判断结果：\"",[106,16771,1161],{"class":112},[106,16773,1184],{"class":116},[106,16775,16777,16779,16781,16784],{"class":108,"line":16776},79,[106,16778,3093],{"class":112},[106,16780,16474],{"class":116},[106,16782,16783],{"class":1955},"isEqual",[106,16785,16786],{"class":116},"(c2))\n",[106,16788,16790],{"class":108,"line":16789},80,[106,16791,2022],{"class":116},[106,16793,16795,16797,16799,16802,16804],{"class":108,"line":16794},81,[106,16796,3443],{"class":116},[106,16798,1161],{"class":112},[106,16800,16801],{"class":221},"\"两个立方体相等\"",[106,16803,1161],{"class":112},[106,16805,1184],{"class":116},[106,16807,16809],{"class":108,"line":16808},82,[106,16810,2179],{"class":116},[106,16812,16814],{"class":108,"line":16813},83,[106,16815,16816],{"class":112},"    else\n",[106,16818,16820],{"class":108,"line":16819},84,[106,16821,2022],{"class":116},[106,16823,16825,16827,16829,16832,16834],{"class":108,"line":16824},85,[106,16826,3443],{"class":116},[106,16828,1161],{"class":112},[106,16830,16831],{"class":221},"\"两个立方体不相等\"",[106,16833,1161],{"class":112},[106,16835,1184],{"class":116},[106,16837,16839],{"class":108,"line":16838},86,[106,16840,2179],{"class":116},[106,16842,16844],{"class":108,"line":16843},87,[106,16845,2392],{"emptyLinePlaceholder":33},[106,16847,16849,16851,16853,16856,16858],{"class":108,"line":16848},88,[106,16850,1543],{"class":116},[106,16852,1161],{"class":112},[106,16854,16855],{"class":221},"\"全局函数判断结果：\"",[106,16857,1161],{"class":112},[106,16859,1184],{"class":116},[106,16861,16863,16865,16867,16869],{"class":108,"line":16862},89,[106,16864,3093],{"class":112},[106,16866,1650],{"class":116},[106,16868,16783],{"class":1955},[106,16870,16871],{"class":116},"(c1, c2))\n",[106,16873,16875],{"class":108,"line":16874},90,[106,16876,2022],{"class":116},[106,16878,16880,16882,16884,16886,16888],{"class":108,"line":16879},91,[106,16881,3443],{"class":116},[106,16883,1161],{"class":112},[106,16885,16801],{"class":221},[106,16887,1161],{"class":112},[106,16889,1184],{"class":116},[106,16891,16893],{"class":108,"line":16892},92,[106,16894,2179],{"class":116},[106,16896,16898],{"class":108,"line":16897},93,[106,16899,16816],{"class":112},[106,16901,16903],{"class":108,"line":16902},94,[106,16904,2022],{"class":116},[106,16906,16908,16910,16912,16914,16916],{"class":108,"line":16907},95,[106,16909,3443],{"class":116},[106,16911,1161],{"class":112},[106,16913,16831],{"class":221},[106,16915,1161],{"class":112},[106,16917,1184],{"class":116},[106,16919,16921],{"class":108,"line":16920},96,[106,16922,2179],{"class":116},[106,16924,16926],{"class":108,"line":16925},97,[106,16927,1557],{"class":116},[60,16929,16930],{"start":28},[63,16931,16932],{},[266,16933,16934],{},"练习案例2：点和圆的关系",[1124,16936,16937],{},[63,16938,16939],{},"设计一个圆形类（Circle），和一个点类（Point），计算点和圆的关系。",[97,16941,16943],{"className":99,"code":16942,"language":101,"meta":25,"style":25},"#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",[103,16944,16945,16951,16961,16968,16975,16979,16983,16988,17022,17027,17043,17057,17061,17065,17072,17079,17083,17089,17093,17097,17101,17123,17146,17151,17165,17180,17184,17188,17194,17199,17204,17208,17234,17238,17268,17296,17324,17341,17345,17358,17362,17366,17370,17383,17387,17391,17399,17403,17407,17411,17416,17420,17431,17438,17447,17457,17468,17475,17488,17499,17509,17520,17527,17541,17546,17556,17564],{"__ignoreMap":25},[106,16946,16947,16949],{"class":108,"line":109},[106,16948,1941],{"class":112},[106,16950,1944],{"class":221},[106,16952,16953,16955,16957,16959],{"class":108,"line":28},[106,16954,1949],{"class":112},[106,16956,1952],{"class":112},[106,16958,1956],{"class":1955},[106,16960,1283],{"class":116},[106,16962,16963,16965],{"class":108,"line":1172},[106,16964,1941],{"class":112},[106,16966,16967],{"class":221},"\u003Ccmath>\n",[106,16969,16970,16972],{"class":108,"line":1187},[106,16971,14687],{"class":112},[106,16973,16974],{"class":1955}," Point\n",[106,16976,16977],{"class":108,"line":1193},[106,16978,1538],{"class":116},[106,16980,16981],{"class":108,"line":1207},[106,16982,14709],{"class":112},[106,16984,16985],{"class":108,"line":1213},[106,16986,16987],{"class":175},"    \u002F\u002F赋值\n",[106,16989,16990,16992,16995,16997,16999,17002,17004,17006,17009,17012,17014,17017,17019],{"class":108,"line":1304},[106,16991,14902],{"class":112},[106,16993,16994],{"class":1955}," setPoint",[106,16996,117],{"class":116},[106,16998,14030],{"class":112},[106,17000,17001],{"class":5209}," x",[106,17003,12428],{"class":116},[106,17005,14030],{"class":112},[106,17007,17008],{"class":5209}," y",[106,17010,17011],{"class":116},") { m_x ",[106,17013,162],{"class":112},[106,17015,17016],{"class":116}," x; m_y ",[106,17018,162],{"class":112},[106,17020,17021],{"class":116}," y; }\n",[106,17023,17024],{"class":108,"line":1310},[106,17025,17026],{"class":175},"    \u002F\u002F获取坐标\n",[106,17028,17029,17031,17034,17037,17040],{"class":108,"line":1322},[106,17030,14731],{"class":112},[106,17032,17033],{"class":1955}," getX",[106,17035,17036],{"class":116},"() { ",[106,17038,17039],{"class":112},"return",[106,17041,17042],{"class":116}," m_x; }\n",[106,17044,17045,17047,17050,17052,17054],{"class":108,"line":1604},[106,17046,14731],{"class":112},[106,17048,17049],{"class":1955}," getY",[106,17051,17036],{"class":116},[106,17053,17039],{"class":112},[106,17055,17056],{"class":116}," m_y; }\n",[106,17058,17059],{"class":108,"line":1609},[106,17060,2392],{"emptyLinePlaceholder":33},[106,17062,17063],{"class":108,"line":1615},[106,17064,15215],{"class":112},[106,17066,17067,17069],{"class":108,"line":1620},[106,17068,14731],{"class":112},[106,17070,17071],{"class":116}," m_x;\n",[106,17073,17074,17076],{"class":108,"line":1634},[106,17075,14731],{"class":112},[106,17077,17078],{"class":116}," m_y;\n",[106,17080,17081],{"class":108,"line":1639},[106,17082,3987],{"class":116},[106,17084,17085,17087],{"class":108,"line":1645},[106,17086,14687],{"class":112},[106,17088,14690],{"class":1955},[106,17090,17091],{"class":108,"line":1666},[106,17092,1538],{"class":116},[106,17094,17095],{"class":108,"line":1671},[106,17096,14709],{"class":112},[106,17098,17099],{"class":108,"line":1685},[106,17100,16987],{"class":175},[106,17102,17103,17105,17108,17110,17112,17115,17118,17120],{"class":108,"line":1690},[106,17104,14902],{"class":112},[106,17106,17107],{"class":1955}," setRadius",[106,17109,117],{"class":116},[106,17111,14030],{"class":112},[106,17113,17114],{"class":5209}," r",[106,17116,17117],{"class":116},") { m_r ",[106,17119,162],{"class":112},[106,17121,17122],{"class":116}," r; }\n",[106,17124,17125,17127,17130,17132,17135,17138,17141,17143],{"class":108,"line":1719},[106,17126,14902],{"class":112},[106,17128,17129],{"class":1955}," setCenter",[106,17131,117],{"class":116},[106,17133,17134],{"class":1955},"Point",[106,17136,17137],{"class":5209}," center",[106,17139,17140],{"class":116},") { m_center ",[106,17142,162],{"class":112},[106,17144,17145],{"class":116}," center; }\n",[106,17147,17148],{"class":108,"line":1724},[106,17149,17150],{"class":175},"    \u002F\u002F获取属性\n",[106,17152,17153,17155,17158,17160,17162],{"class":108,"line":1741},[106,17154,14731],{"class":112},[106,17156,17157],{"class":1955}," getRadius",[106,17159,17036],{"class":116},[106,17161,17039],{"class":112},[106,17163,17164],{"class":116}," m_r; }\n",[106,17166,17167,17170,17173,17175,17177],{"class":108,"line":1746},[106,17168,17169],{"class":1955},"    Point",[106,17171,17172],{"class":1955}," getCenter",[106,17174,17036],{"class":116},[106,17176,17039],{"class":112},[106,17178,17179],{"class":116}," m_center; }\n",[106,17181,17182],{"class":108,"line":1751},[106,17183,2392],{"emptyLinePlaceholder":33},[106,17185,17186],{"class":108,"line":1756},[106,17187,15215],{"class":112},[106,17189,17190,17192],{"class":108,"line":1770},[106,17191,14731],{"class":112},[106,17193,14721],{"class":116},[106,17195,17196],{"class":108,"line":1775},[106,17197,17198],{"class":175},"    \u002F\u002F在类中可以让另一个类作为本来的成员\n",[106,17200,17201],{"class":108,"line":2569},[106,17202,17203],{"class":116},"    Point m_center;\n",[106,17205,17206],{"class":108,"line":2583},[106,17207,3987],{"class":116},[106,17209,17210,17212,17215,17217,17220,17222,17224,17226,17228,17230,17232],{"class":108,"line":2591},[106,17211,5357],{"class":112},[106,17213,17214],{"class":1955}," isInCircle",[106,17216,117],{"class":116},[106,17218,17219],{"class":1955},"Circle",[106,17221,10577],{"class":112},[106,17223,405],{"class":5209},[106,17225,495],{"class":116},[106,17227,17134],{"class":1955},[106,17229,10577],{"class":112},[106,17231,14],{"class":5209},[106,17233,123],{"class":116},[106,17235,17236],{"class":108,"line":2596},[106,17237,1538],{"class":116},[106,17239,17240,17242,17245,17247,17249,17252,17255,17258,17260,17262,17264,17266],{"class":108,"line":2602},[106,17241,14731],{"class":112},[106,17243,17244],{"class":116}," dx ",[106,17246,162],{"class":112},[106,17248,16335],{"class":116},[106,17250,17251],{"class":1955},"getCenter",[106,17253,17254],{"class":116},"().",[106,17256,17257],{"class":1955},"getX",[106,17259,13043],{"class":116},[106,17261,649],{"class":112},[106,17263,15881],{"class":116},[106,17265,17257],{"class":1955},[106,17267,5629],{"class":116},[106,17269,17270,17272,17275,17277,17279,17281,17283,17286,17288,17290,17292,17294],{"class":108,"line":2608},[106,17271,14731],{"class":112},[106,17273,17274],{"class":116}," dy ",[106,17276,162],{"class":112},[106,17278,16335],{"class":116},[106,17280,17251],{"class":1955},[106,17282,17254],{"class":116},[106,17284,17285],{"class":1955},"getY",[106,17287,13043],{"class":116},[106,17289,649],{"class":112},[106,17291,15881],{"class":116},[106,17293,17285],{"class":1955},[106,17295,5629],{"class":116},[106,17297,17298,17300,17303,17305,17308,17311,17313,17315,17317,17319,17321],{"class":108,"line":2613},[106,17299,14731],{"class":112},[106,17301,17302],{"class":116}," distance ",[106,17304,162],{"class":112},[106,17306,17307],{"class":1955}," sqrt",[106,17309,17310],{"class":116},"(dx ",[106,17312,572],{"class":112},[106,17314,17244],{"class":116},[106,17316,598],{"class":112},[106,17318,17274],{"class":116},[106,17320,572],{"class":112},[106,17322,17323],{"class":116}," dy);\n",[106,17325,17326,17328,17331,17333,17335,17338],{"class":108,"line":7941},[106,17327,3093],{"class":112},[106,17329,17330],{"class":116}," (distance ",[106,17332,1027],{"class":112},[106,17334,16335],{"class":116},[106,17336,17337],{"class":1955},"getRadius",[106,17339,17340],{"class":116},"())\n",[106,17342,17343],{"class":108,"line":7965},[106,17344,2022],{"class":116},[106,17346,17347,17349,17351,17354,17356],{"class":108,"line":7970},[106,17348,9662],{"class":116},[106,17350,1161],{"class":112},[106,17352,17353],{"class":221}," \"点在圆内\"",[106,17355,1437],{"class":112},[106,17357,8833],{"class":116},[106,17359,17360],{"class":108,"line":7976},[106,17361,2179],{"class":116},[106,17363,17364],{"class":108,"line":8003},[106,17365,16816],{"class":112},[106,17367,17368],{"class":108,"line":8008},[106,17369,2022],{"class":116},[106,17371,17372,17374,17376,17379,17381],{"class":108,"line":8014},[106,17373,9662],{"class":116},[106,17375,1161],{"class":112},[106,17377,17378],{"class":221}," \"点在圆外\"",[106,17380,1437],{"class":112},[106,17382,8833],{"class":116},[106,17384,17385],{"class":108,"line":8026},[106,17386,2179],{"class":116},[106,17388,17389],{"class":108,"line":8038},[106,17390,1557],{"class":116},[106,17392,17393,17395,17397],{"class":108,"line":8050},[106,17394,120],{"class":112},[106,17396,1965],{"class":1955},[106,17398,1968],{"class":116},[106,17400,17401],{"class":108,"line":9709},[106,17402,1538],{"class":116},[106,17404,17405],{"class":108,"line":9734},[106,17406,15046],{"class":175},[106,17408,17409],{"class":108,"line":9757},[106,17410,14793],{"class":116},[106,17412,17413],{"class":108,"line":9781},[106,17414,17415],{"class":116},"    Point p1;\n",[106,17417,17418],{"class":108,"line":9786},[106,17419,16987],{"class":175},[106,17421,17422,17424,17426,17429],{"class":108,"line":9791},[106,17423,1543],{"class":116},[106,17425,1161],{"class":112},[106,17427,17428],{"class":221},"\"请输入圆的半径：\"",[106,17430,1283],{"class":116},[106,17432,17433,17435],{"class":108,"line":9796},[106,17434,14731],{"class":112},[106,17436,17437],{"class":116}," r;\n",[106,17439,17440,17442,17444],{"class":108,"line":9805},[106,17441,2004],{"class":116},[106,17443,1422],{"class":112},[106,17445,17446],{"class":116},"r;\n",[106,17448,17449,17451,17454],{"class":108,"line":9810},[106,17450,16588],{"class":116},[106,17452,17453],{"class":1955},"setRadius",[106,17455,17456],{"class":116},"(r);\n",[106,17458,17459,17461,17463,17466],{"class":108,"line":9816},[106,17460,1543],{"class":116},[106,17462,1161],{"class":112},[106,17464,17465],{"class":221},"\"请输入圆心坐标：\"",[106,17467,1283],{"class":116},[106,17469,17470,17472],{"class":108,"line":9837},[106,17471,14731],{"class":112},[106,17473,17474],{"class":116}," x, y;\n",[106,17476,17477,17479,17481,17483,17485],{"class":108,"line":9843},[106,17478,2004],{"class":116},[106,17480,1422],{"class":112},[106,17482,937],{"class":116},[106,17484,1422],{"class":112},[106,17486,17487],{"class":116},"y;\n",[106,17489,17490,17493,17496],{"class":108,"line":9857},[106,17491,17492],{"class":116},"    p1.",[106,17494,17495],{"class":1955},"setPoint",[106,17497,17498],{"class":116},"(x, y);\n",[106,17500,17501,17503,17506],{"class":108,"line":9863},[106,17502,16588],{"class":116},[106,17504,17505],{"class":1955},"setCenter",[106,17507,17508],{"class":116},"(p1);\n",[106,17510,17511,17513,17515,17518],{"class":108,"line":9890},[106,17512,1543],{"class":116},[106,17514,1161],{"class":112},[106,17516,17517],{"class":221},"\"请输入测试点坐标：\"",[106,17519,1283],{"class":116},[106,17521,17522,17524],{"class":108,"line":9899},[106,17523,14731],{"class":112},[106,17525,17526],{"class":116}," x1, y1;\n",[106,17528,17529,17531,17533,17536,17538],{"class":108,"line":9905},[106,17530,2004],{"class":116},[106,17532,1422],{"class":112},[106,17534,17535],{"class":116},"x1",[106,17537,1422],{"class":112},[106,17539,17540],{"class":116},"y1;\n",[106,17542,17543],{"class":108,"line":9913},[106,17544,17545],{"class":116},"    Point p2;\n",[106,17547,17548,17551,17553],{"class":108,"line":9918},[106,17549,17550],{"class":116},"    p2.",[106,17552,17495],{"class":1955},[106,17554,17555],{"class":116},"(x1, y1);\n",[106,17557,17558,17561],{"class":108,"line":16597},[106,17559,17560],{"class":1955},"    isInCircle",[106,17562,17563],{"class":116},"(c1, p2);\n",[106,17565,17566],{"class":108,"line":16603},[106,17567,1557],{"class":116},[14,17569,17570],{},"在类中可以让另一个类作为本来的成员",[14,17572,17573],{},"这个案例非常重要的一点在于类和对象封装成一个单独文件",[14,17575,17576],{},"创建point.h",[97,17578,17580],{"className":99,"code":17579,"language":101,"meta":25,"style":25},"#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",[103,17581,17582,17593,17599,17609,17615,17619,17624,17628,17632,17652,17656,17664,17672,17676,17680,17686,17692],{"__ignoreMap":25},[106,17583,17584,17587,17590],{"class":108,"line":109},[106,17585,17586],{"class":112},"#pragma",[106,17588,17589],{"class":1955}," once",[106,17591,17592],{"class":175}," \u002F\u002F防止头文件重复包含\n",[106,17594,17595,17597],{"class":108,"line":28},[106,17596,1941],{"class":112},[106,17598,1944],{"class":221},[106,17600,17601,17603,17605,17607],{"class":108,"line":1172},[106,17602,1949],{"class":112},[106,17604,1952],{"class":112},[106,17606,1956],{"class":1955},[106,17608,1283],{"class":116},[106,17610,17611,17613],{"class":108,"line":1187},[106,17612,14687],{"class":112},[106,17614,16974],{"class":1955},[106,17616,17617],{"class":108,"line":1193},[106,17618,1538],{"class":116},[106,17620,17621],{"class":108,"line":1207},[106,17622,17623],{"class":175},"\u002F\u002F做好声明与变量定义就可以\n",[106,17625,17626],{"class":108,"line":1213},[106,17627,14709],{"class":112},[106,17629,17630],{"class":108,"line":1304},[106,17631,16987],{"class":175},[106,17633,17634,17636,17638,17640,17642,17644,17646,17648,17650],{"class":108,"line":1310},[106,17635,14902],{"class":112},[106,17637,16994],{"class":1955},[106,17639,117],{"class":116},[106,17641,14030],{"class":112},[106,17643,17001],{"class":5209},[106,17645,12428],{"class":116},[106,17647,14030],{"class":112},[106,17649,17008],{"class":5209},[106,17651,2711],{"class":116},[106,17653,17654],{"class":108,"line":1322},[106,17655,17026],{"class":175},[106,17657,17658,17660,17662],{"class":108,"line":1604},[106,17659,14731],{"class":112},[106,17661,17033],{"class":1955},[106,17663,5629],{"class":116},[106,17665,17666,17668,17670],{"class":108,"line":1609},[106,17667,14731],{"class":112},[106,17669,17049],{"class":1955},[106,17671,5629],{"class":116},[106,17673,17674],{"class":108,"line":1615},[106,17675,2392],{"emptyLinePlaceholder":33},[106,17677,17678],{"class":108,"line":1620},[106,17679,15215],{"class":112},[106,17681,17682,17684],{"class":108,"line":1634},[106,17683,14731],{"class":112},[106,17685,17071],{"class":116},[106,17687,17688,17690],{"class":108,"line":1639},[106,17689,14731],{"class":112},[106,17691,17078],{"class":116},[106,17693,17694],{"class":108,"line":1645},[106,17695,3987],{"class":116},[14,17697,17698],{},"创建point.cpp",[97,17700,17702],{"className":99,"code":17701,"language":101,"meta":25,"style":25},"#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",[103,17703,17704,17711,17716,17750,17754,17770],{"__ignoreMap":25},[106,17705,17706,17708],{"class":108,"line":109},[106,17707,1941],{"class":112},[106,17709,17710],{"class":221},"\u003Cpoint.h>\n",[106,17712,17713],{"class":108,"line":28},[106,17714,17715],{"class":175},"\u002F\u002F此时如果不给予他作用域就会报错，所以要加Point::\n",[106,17717,17718,17720,17723,17726,17728,17730,17732,17734,17736,17738,17740,17742,17744,17746,17748],{"class":108,"line":1172},[106,17719,14902],{"class":112},[106,17721,17722],{"class":1955}," Point",[106,17724,17725],{"class":116},"::",[106,17727,17495],{"class":1955},[106,17729,117],{"class":116},[106,17731,14030],{"class":112},[106,17733,17001],{"class":5209},[106,17735,12428],{"class":116},[106,17737,14030],{"class":112},[106,17739,17008],{"class":5209},[106,17741,17011],{"class":116},[106,17743,162],{"class":112},[106,17745,17016],{"class":116},[106,17747,162],{"class":112},[106,17749,17021],{"class":116},[106,17751,17752],{"class":108,"line":1187},[106,17753,17026],{"class":175},[106,17755,17756,17758,17760,17762,17764,17766,17768],{"class":108,"line":1193},[106,17757,14731],{"class":112},[106,17759,17722],{"class":1955},[106,17761,17725],{"class":116},[106,17763,17257],{"class":1955},[106,17765,17036],{"class":116},[106,17767,17039],{"class":112},[106,17769,17042],{"class":116},[106,17771,17772,17774,17776,17778,17780,17782,17784],{"class":108,"line":1207},[106,17773,14731],{"class":112},[106,17775,17722],{"class":1955},[106,17777,17725],{"class":116},[106,17779,17285],{"class":1955},[106,17781,17036],{"class":116},[106,17783,17039],{"class":112},[106,17785,17056],{"class":116},[14,17787,17788],{},"创建circle.h",[97,17790,17792],{"className":99,"code":17791,"language":101,"meta":25,"style":25},"#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",[103,17793,17794,17801,17807,17817,17823,17829,17833,17837,17841,17855,17869,17873,17881,17889,17893,17897,17903,17907,17911],{"__ignoreMap":25},[106,17795,17796,17798],{"class":108,"line":109},[106,17797,17586],{"class":112},[106,17799,17800],{"class":1955}," once\n",[106,17802,17803,17805],{"class":108,"line":28},[106,17804,1941],{"class":112},[106,17806,1944],{"class":221},[106,17808,17809,17811,17813,17815],{"class":108,"line":1172},[106,17810,1949],{"class":112},[106,17812,1952],{"class":112},[106,17814,1956],{"class":1955},[106,17816,1283],{"class":116},[106,17818,17819,17821],{"class":108,"line":1187},[106,17820,1941],{"class":112},[106,17822,17710],{"class":221},[106,17824,17825,17827],{"class":108,"line":1193},[106,17826,14687],{"class":112},[106,17828,14690],{"class":1955},[106,17830,17831],{"class":108,"line":1207},[106,17832,1538],{"class":116},[106,17834,17835],{"class":108,"line":1213},[106,17836,14709],{"class":112},[106,17838,17839],{"class":108,"line":1304},[106,17840,16987],{"class":175},[106,17842,17843,17845,17847,17849,17851,17853],{"class":108,"line":1310},[106,17844,14902],{"class":112},[106,17846,17107],{"class":1955},[106,17848,117],{"class":116},[106,17850,14030],{"class":112},[106,17852,17114],{"class":5209},[106,17854,2711],{"class":116},[106,17856,17857,17859,17861,17863,17865,17867],{"class":108,"line":1322},[106,17858,14902],{"class":112},[106,17860,17129],{"class":1955},[106,17862,117],{"class":116},[106,17864,17134],{"class":1955},[106,17866,17137],{"class":5209},[106,17868,2711],{"class":116},[106,17870,17871],{"class":108,"line":1604},[106,17872,17150],{"class":175},[106,17874,17875,17877,17879],{"class":108,"line":1609},[106,17876,14731],{"class":112},[106,17878,17157],{"class":1955},[106,17880,5629],{"class":116},[106,17882,17883,17885,17887],{"class":108,"line":1615},[106,17884,17169],{"class":1955},[106,17886,17172],{"class":1955},[106,17888,5629],{"class":116},[106,17890,17891],{"class":108,"line":1620},[106,17892,2392],{"emptyLinePlaceholder":33},[106,17894,17895],{"class":108,"line":1634},[106,17896,15215],{"class":112},[106,17898,17899,17901],{"class":108,"line":1639},[106,17900,14731],{"class":112},[106,17902,14721],{"class":116},[106,17904,17905],{"class":108,"line":1645},[106,17906,17198],{"class":175},[106,17908,17909],{"class":108,"line":1666},[106,17910,17203],{"class":116},[106,17912,17913],{"class":108,"line":1671},[106,17914,3987],{"class":116},[14,17916,17917],{},"创建circle.cpp",[97,17919,17921],{"className":99,"code":17920,"language":101,"meta":25,"style":25},"#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",[103,17922,17923,17930,17953,17975,17980,17996],{"__ignoreMap":25},[106,17924,17925,17927],{"class":108,"line":109},[106,17926,1941],{"class":112},[106,17928,17929],{"class":221},"\u003Ccircle.h>\n",[106,17931,17932,17934,17937,17939,17941,17943,17945,17947,17949,17951],{"class":108,"line":28},[106,17933,5357],{"class":112},[106,17935,17936],{"class":1955}," Circle",[106,17938,17725],{"class":116},[106,17940,17453],{"class":1955},[106,17942,117],{"class":116},[106,17944,14030],{"class":112},[106,17946,17114],{"class":5209},[106,17948,17117],{"class":116},[106,17950,162],{"class":112},[106,17952,17122],{"class":116},[106,17954,17955,17957,17959,17961,17963,17965,17967,17969,17971,17973],{"class":108,"line":1172},[106,17956,5357],{"class":112},[106,17958,17936],{"class":1955},[106,17960,17725],{"class":116},[106,17962,17505],{"class":1955},[106,17964,117],{"class":116},[106,17966,17134],{"class":1955},[106,17968,17137],{"class":5209},[106,17970,17140],{"class":116},[106,17972,162],{"class":112},[106,17974,17145],{"class":116},[106,17976,17977],{"class":108,"line":1187},[106,17978,17979],{"class":175},"\u002F\u002F获取属性\n",[106,17981,17982,17984,17986,17988,17990,17992,17994],{"class":108,"line":1193},[106,17983,14030],{"class":112},[106,17985,17936],{"class":1955},[106,17987,17725],{"class":116},[106,17989,17337],{"class":1955},[106,17991,17036],{"class":116},[106,17993,17039],{"class":112},[106,17995,17164],{"class":116},[106,17997,17998,18000,18002,18004,18006,18008,18010],{"class":108,"line":1207},[106,17999,17134],{"class":1955},[106,18001,17936],{"class":1955},[106,18003,17725],{"class":116},[106,18005,17251],{"class":1955},[106,18007,17036],{"class":116},[106,18009,17039],{"class":112},[106,18011,17179],{"class":116},[14,18013,18014],{},"使用封装的类",[97,18016,18018],{"className":99,"code":18017,"language":101,"meta":25,"style":25},"#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",[103,18019,18020,18026,18036,18042,18048,18072,18076,18102,18128,18152,18166,18170,18182,18186,18190,18194,18206,18210,18214,18222,18226,18230,18234,18238,18242,18252,18258,18266,18274,18284,18290,18302,18310,18318,18328,18334,18346,18350,18358,18364],{"__ignoreMap":25},[106,18021,18022,18024],{"class":108,"line":109},[106,18023,1941],{"class":112},[106,18025,1944],{"class":221},[106,18027,18028,18030,18032,18034],{"class":108,"line":28},[106,18029,1949],{"class":112},[106,18031,1952],{"class":112},[106,18033,1956],{"class":1955},[106,18035,1283],{"class":116},[106,18037,18038,18040],{"class":108,"line":1172},[106,18039,1941],{"class":112},[106,18041,17929],{"class":221},[106,18043,18044,18046],{"class":108,"line":1187},[106,18045,1941],{"class":112},[106,18047,17710],{"class":221},[106,18049,18050,18052,18054,18056,18058,18060,18062,18064,18066,18068,18070],{"class":108,"line":1193},[106,18051,5357],{"class":112},[106,18053,17214],{"class":1955},[106,18055,117],{"class":116},[106,18057,17219],{"class":1955},[106,18059,10577],{"class":112},[106,18061,405],{"class":5209},[106,18063,495],{"class":116},[106,18065,17134],{"class":1955},[106,18067,10577],{"class":112},[106,18069,14],{"class":5209},[106,18071,123],{"class":116},[106,18073,18074],{"class":108,"line":1207},[106,18075,1538],{"class":116},[106,18077,18078,18080,18082,18084,18086,18088,18090,18092,18094,18096,18098,18100],{"class":108,"line":1213},[106,18079,14731],{"class":112},[106,18081,17244],{"class":116},[106,18083,162],{"class":112},[106,18085,16335],{"class":116},[106,18087,17251],{"class":1955},[106,18089,17254],{"class":116},[106,18091,17257],{"class":1955},[106,18093,13043],{"class":116},[106,18095,649],{"class":112},[106,18097,15881],{"class":116},[106,18099,17257],{"class":1955},[106,18101,5629],{"class":116},[106,18103,18104,18106,18108,18110,18112,18114,18116,18118,18120,18122,18124,18126],{"class":108,"line":1304},[106,18105,14731],{"class":112},[106,18107,17274],{"class":116},[106,18109,162],{"class":112},[106,18111,16335],{"class":116},[106,18113,17251],{"class":1955},[106,18115,17254],{"class":116},[106,18117,17285],{"class":1955},[106,18119,13043],{"class":116},[106,18121,649],{"class":112},[106,18123,15881],{"class":116},[106,18125,17285],{"class":1955},[106,18127,5629],{"class":116},[106,18129,18130,18132,18134,18136,18138,18140,18142,18144,18146,18148,18150],{"class":108,"line":1310},[106,18131,14731],{"class":112},[106,18133,17302],{"class":116},[106,18135,162],{"class":112},[106,18137,17307],{"class":1955},[106,18139,17310],{"class":116},[106,18141,572],{"class":112},[106,18143,17244],{"class":116},[106,18145,598],{"class":112},[106,18147,17274],{"class":116},[106,18149,572],{"class":112},[106,18151,17323],{"class":116},[106,18153,18154,18156,18158,18160,18162,18164],{"class":108,"line":1322},[106,18155,3093],{"class":112},[106,18157,17330],{"class":116},[106,18159,1027],{"class":112},[106,18161,16335],{"class":116},[106,18163,17337],{"class":1955},[106,18165,17340],{"class":116},[106,18167,18168],{"class":108,"line":1604},[106,18169,2022],{"class":116},[106,18171,18172,18174,18176,18178,18180],{"class":108,"line":1609},[106,18173,9662],{"class":116},[106,18175,1161],{"class":112},[106,18177,17353],{"class":221},[106,18179,1437],{"class":112},[106,18181,8833],{"class":116},[106,18183,18184],{"class":108,"line":1615},[106,18185,2179],{"class":116},[106,18187,18188],{"class":108,"line":1620},[106,18189,16816],{"class":112},[106,18191,18192],{"class":108,"line":1634},[106,18193,2022],{"class":116},[106,18195,18196,18198,18200,18202,18204],{"class":108,"line":1639},[106,18197,9662],{"class":116},[106,18199,1161],{"class":112},[106,18201,17378],{"class":221},[106,18203,1437],{"class":112},[106,18205,8833],{"class":116},[106,18207,18208],{"class":108,"line":1645},[106,18209,2179],{"class":116},[106,18211,18212],{"class":108,"line":1666},[106,18213,1557],{"class":116},[106,18215,18216,18218,18220],{"class":108,"line":1671},[106,18217,120],{"class":112},[106,18219,1965],{"class":1955},[106,18221,1968],{"class":116},[106,18223,18224],{"class":108,"line":1685},[106,18225,1538],{"class":116},[106,18227,18228],{"class":108,"line":1690},[106,18229,15046],{"class":175},[106,18231,18232],{"class":108,"line":1719},[106,18233,14793],{"class":116},[106,18235,18236],{"class":108,"line":1724},[106,18237,17415],{"class":116},[106,18239,18240],{"class":108,"line":1741},[106,18241,16987],{"class":175},[106,18243,18244,18246,18248,18250],{"class":108,"line":1746},[106,18245,1543],{"class":116},[106,18247,1161],{"class":112},[106,18249,17428],{"class":221},[106,18251,1283],{"class":116},[106,18253,18254,18256],{"class":108,"line":1751},[106,18255,14731],{"class":112},[106,18257,17437],{"class":116},[106,18259,18260,18262,18264],{"class":108,"line":1756},[106,18261,2004],{"class":116},[106,18263,1422],{"class":112},[106,18265,17446],{"class":116},[106,18267,18268,18270,18272],{"class":108,"line":1770},[106,18269,16588],{"class":116},[106,18271,17453],{"class":1955},[106,18273,17456],{"class":116},[106,18275,18276,18278,18280,18282],{"class":108,"line":1775},[106,18277,1543],{"class":116},[106,18279,1161],{"class":112},[106,18281,17465],{"class":221},[106,18283,1283],{"class":116},[106,18285,18286,18288],{"class":108,"line":2569},[106,18287,14731],{"class":112},[106,18289,17474],{"class":116},[106,18291,18292,18294,18296,18298,18300],{"class":108,"line":2583},[106,18293,2004],{"class":116},[106,18295,1422],{"class":112},[106,18297,937],{"class":116},[106,18299,1422],{"class":112},[106,18301,17487],{"class":116},[106,18303,18304,18306,18308],{"class":108,"line":2591},[106,18305,17492],{"class":116},[106,18307,17495],{"class":1955},[106,18309,17498],{"class":116},[106,18311,18312,18314,18316],{"class":108,"line":2596},[106,18313,16588],{"class":116},[106,18315,17505],{"class":1955},[106,18317,17508],{"class":116},[106,18319,18320,18322,18324,18326],{"class":108,"line":2602},[106,18321,1543],{"class":116},[106,18323,1161],{"class":112},[106,18325,17517],{"class":221},[106,18327,1283],{"class":116},[106,18329,18330,18332],{"class":108,"line":2608},[106,18331,14731],{"class":112},[106,18333,17526],{"class":116},[106,18335,18336,18338,18340,18342,18344],{"class":108,"line":2613},[106,18337,2004],{"class":116},[106,18339,1422],{"class":112},[106,18341,17535],{"class":116},[106,18343,1422],{"class":112},[106,18345,17540],{"class":116},[106,18347,18348],{"class":108,"line":7941},[106,18349,17545],{"class":116},[106,18351,18352,18354,18356],{"class":108,"line":7965},[106,18353,17550],{"class":116},[106,18355,17495],{"class":1955},[106,18357,17555],{"class":116},[106,18359,18360,18362],{"class":108,"line":7970},[106,18361,17560],{"class":1955},[106,18363,17563],{"class":116},[106,18365,18366],{"class":108,"line":7976},[106,18367,1557],{"class":116},[48,18369,18371],{"id":18370},"_82对象的初始化清理","8.2对象的初始化清理",[1124,18373,18374,18377],{},[63,18375,18376],{},"生活中我们买的电子产品都基本会有出厂设置，在某一天我们不用时候也会删除一些自己信息数据保证安全",[63,18378,18379],{},"C++中的面向对象来源于生活，每个对象也都会有初始设置以及 对象销毁前的清理数据的设置。",[77,18381,18383],{"id":18382},"_821构造函数和析构函数","8.2.1构造函数和析构函数",[14,18385,18386,18387,18390],{},"对象的",[266,18388,18389],{},"初始化和清理","也是两个非常重要的安全问题",[14,18392,18393],{},"​\t一个对象或者变量没有初始状态，对其使用后果是未知",[14,18395,18396],{},"​\t同样的使用完一个对象或变量，没有及时清理，也会造成一定的安全问题",[14,18398,18399,18400,18403,18404,18407],{},"c++利用了",[266,18401,18402],{},"构造函数","和",[266,18405,18406],{},"析构函数","解决上述问题，这两个函数将会被编译器自动调用，完成对象初始化和清理工作。",[14,18409,18410,18411],{},"对象的初始化和清理工作是编译器强制要我们做的事情，因此如果",[266,18412,18413],{},"我们不提供构造和析构，编译器会提供",[14,18415,18416],{},[266,18417,18418],{},"编译器提供的构造函数和析构函数是空实现。",[1124,18420,18421,18424],{},[63,18422,18423],{},"构造函数：主要作用在于创建对象时为对象的成员属性赋值，构造函数由编译器自动调用，无须手动调用。",[63,18425,18426,18427,18430],{},"析构函数：主要作用在于对象",[266,18428,18429],{},"销毁前","系统自动调用，执行一些清理工作。",[14,18432,18433,18436],{},[266,18434,18435],{},"构造函数语法：",[103,18437,18438],{},"类名(){}",[60,18440,18441,18444,18447,18450,18453],{},[63,18442,18443],{},"构造函数，没有返回值也不写void",[63,18445,18446],{},"函数名称与类名相同",[63,18448,18449],{},"构造函数可以有参数，因此可以发生重载",[63,18451,18452],{},"程序在调用对象时候会自动调用构造，无须手动调用,而且只会调用一次",[63,18454,18455,18456,546],{},"构造函数在程序运行时会自动调用，如果自己定义的话就用自己；否则就用编译器给我们生成的(例如",[103,18457,18458],{},"Person(){}",[14,18460,18461,13788,18464],{},[266,18462,18463],{},"析构函数语法：",[103,18465,18466],{},"~类名(){}",[60,18468,18469,18472,18475,18481],{},[63,18470,18471],{},"析构函数，没有返回值也不写void",[63,18473,18474],{},"函数名称与类名相同,在名称前加上符号  ~",[63,18476,18477,18478],{},"析构函数不可以有参数，因此",[266,18479,18480],{},"不可以发生重载",[63,18482,18483],{},"程序在对象销毁前会自动调用析构，无须手动调用,而且只会调用一次",[97,18485,18487],{"className":99,"code":18486,"language":101,"meta":25,"style":25},"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",[103,18488,18489,18495,18499,18503,18508,18515,18519,18532,18536,18541,18548,18552,18565,18569,18573,18577,18581,18589,18593,18601,18605,18609,18617,18621,18626,18630,18637,18641,18654,18658,18666],{"__ignoreMap":25},[106,18490,18491,18493],{"class":108,"line":109},[106,18492,14687],{"class":112},[106,18494,15164],{"class":1955},[106,18496,18497],{"class":108,"line":28},[106,18498,1538],{"class":116},[106,18500,18501],{"class":108,"line":1172},[106,18502,14709],{"class":112},[106,18504,18505],{"class":108,"line":1187},[106,18506,18507],{"class":175},"    \u002F\u002F构造函数\n",[106,18509,18510,18513],{"class":108,"line":1193},[106,18511,18512],{"class":1955},"    Person",[106,18514,1968],{"class":116},[106,18516,18517],{"class":108,"line":1207},[106,18518,2022],{"class":116},[106,18520,18521,18523,18525,18528,18530],{"class":108,"line":1213},[106,18522,9662],{"class":116},[106,18524,1161],{"class":112},[106,18526,18527],{"class":221}," \"Person的构造函数调用\"",[106,18529,1437],{"class":112},[106,18531,8833],{"class":116},[106,18533,18534],{"class":108,"line":1304},[106,18535,2179],{"class":116},[106,18537,18538],{"class":108,"line":1310},[106,18539,18540],{"class":175},"    \u002F\u002F析构函数\n",[106,18542,18543,18546],{"class":108,"line":1322},[106,18544,18545],{"class":1955},"    ~Person",[106,18547,1968],{"class":116},[106,18549,18550],{"class":108,"line":1604},[106,18551,2022],{"class":116},[106,18553,18554,18556,18558,18561,18563],{"class":108,"line":1609},[106,18555,9662],{"class":116},[106,18557,1161],{"class":112},[106,18559,18560],{"class":221}," \"Person的析构函数调用\"",[106,18562,1437],{"class":112},[106,18564,8833],{"class":116},[106,18566,18567],{"class":108,"line":1615},[106,18568,2179],{"class":116},[106,18570,18571],{"class":108,"line":1620},[106,18572,2392],{"emptyLinePlaceholder":33},[106,18574,18575],{"class":108,"line":1634},[106,18576,3987],{"class":116},[106,18578,18579],{"class":108,"line":1639},[106,18580,2392],{"emptyLinePlaceholder":33},[106,18582,18583,18585,18587],{"class":108,"line":1645},[106,18584,5357],{"class":112},[106,18586,5581],{"class":1955},[106,18588,1968],{"class":116},[106,18590,18591],{"class":108,"line":1666},[106,18592,1538],{"class":116},[106,18594,18595,18598],{"class":108,"line":1671},[106,18596,18597],{"class":116},"    Person p;",[106,18599,18600],{"class":175},"\u002F\u002F在栈上的数据，test01执行完毕后，释放这个\n",[106,18602,18603],{"class":108,"line":1685},[106,18604,1557],{"class":116},[106,18606,18607],{"class":108,"line":1690},[106,18608,2392],{"emptyLinePlaceholder":33},[106,18610,18611,18613,18615],{"class":108,"line":1719},[106,18612,120],{"class":112},[106,18614,1965],{"class":1955},[106,18616,10846],{"class":116},[106,18618,18619],{"class":108,"line":1724},[106,18620,13203],{"class":116},[106,18622,18623],{"class":108,"line":1741},[106,18624,18625],{"class":175},"    \u002F\u002F test01();  调用这个会有构造和析构函数的调用\n",[106,18627,18628],{"class":108,"line":1746},[106,18629,2392],{"emptyLinePlaceholder":33},[106,18631,18632,18634],{"class":108,"line":1751},[106,18633,18597],{"class":116},[106,18635,18636],{"class":175},"\u002F\u002F只有构造函数\n",[106,18638,18639],{"class":108,"line":1756},[106,18640,2392],{"emptyLinePlaceholder":33},[106,18642,18643,18645,18647,18649,18651],{"class":108,"line":1770},[106,18644,2295],{"class":1955},[106,18646,117],{"class":116},[106,18648,2300],{"class":221},[106,18650,5959],{"class":116},[106,18652,18653],{"class":175},"\u002F\u002F按键后程序才会结束，就会出现析构函数的调用，但是窗口很快就关了\n",[106,18655,18656],{"class":108,"line":1775},[106,18657,2392],{"emptyLinePlaceholder":33},[106,18659,18660,18662,18664],{"class":108,"line":2569},[106,18661,4082],{"class":112},[106,18663,4085],{"class":165},[106,18665,1283],{"class":116},[106,18667,18668],{"class":108,"line":2583},[106,18669,1557],{"class":116},[14,18671,18672],{},"构造和析构都是必须有的实现，如果我们自己不提供，编译器会提供一个空实现的构造和析构",[77,18674,18676],{"id":18675},"_822构造函数的分类及调用","8.2.2构造函数的分类及调用",[14,18678,18679],{},"两种分类方式：",[14,18681,18682],{},"​\t按参数分为： 有参构造和无参构造",[14,18684,18685],{},"​\t按类型分为： 普通构造和拷贝构造",[14,18687,18688],{},"三种调用方式：",[14,18690,18691],{},"​\t括号法",[14,18693,18694],{},"​\t显示法",[14,18696,18697],{},"​\t隐式转换法",[97,18699,18701],{"className":99,"code":18700,"language":101,"meta":25,"style":25},"#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",[103,18702,18703,18709,18719,18724,18729,18734,18739,18743,18751,18755,18759,18763,18769,18773,18786,18790,18802,18806,18815,18828,18832,18836,18842,18846,18859,18863,18868,18884,18888,18893,18902,18915,18919,18925,18929,18934,18942,18946,18951,18955,18963,18967,18972,18977,18982,18987,18992,18996,19001,19006,19011,19016,19020,19025,19030,19046,19058,19063,19067,19072,19077,19082,19086,19091,19105,19118,19122,19130,19134,19140,19146,19154],{"__ignoreMap":25},[106,18704,18705,18707],{"class":108,"line":109},[106,18706,1941],{"class":112},[106,18708,1944],{"class":221},[106,18710,18711,18713,18715,18717],{"class":108,"line":28},[106,18712,1949],{"class":112},[106,18714,1952],{"class":112},[106,18716,1956],{"class":1955},[106,18718,1283],{"class":116},[106,18720,18721],{"class":108,"line":1172},[106,18722,18723],{"class":175},"\u002F\u002F1.构造函数的分类及调用\n",[106,18725,18726],{"class":108,"line":1187},[106,18727,18728],{"class":175},"\u002F\u002F分类\n",[106,18730,18731],{"class":108,"line":1193},[106,18732,18733],{"class":175},"\u002F\u002F  按照参数分类 无参数构造(默认构造)  有参构造\n",[106,18735,18736],{"class":108,"line":1207},[106,18737,18738],{"class":175},"\u002F\u002F  按照类型分类 普通构造 拷贝构造\n",[106,18740,18741],{"class":108,"line":1213},[106,18742,2392],{"emptyLinePlaceholder":33},[106,18744,18745,18747,18749],{"class":108,"line":1304},[106,18746,14687],{"class":112},[106,18748,15562],{"class":1955},[106,18750,2666],{"class":116},[106,18752,18753],{"class":108,"line":1310},[106,18754,1538],{"class":116},[106,18756,18757],{"class":108,"line":1322},[106,18758,14709],{"class":112},[106,18760,18761],{"class":108,"line":1604},[106,18762,18507],{"class":175},[106,18764,18765,18767],{"class":108,"line":1609},[106,18766,18512],{"class":1955},[106,18768,1968],{"class":116},[106,18770,18771],{"class":108,"line":1615},[106,18772,2022],{"class":116},[106,18774,18775,18777,18779,18782,18784],{"class":108,"line":1620},[106,18776,3443],{"class":116},[106,18778,1161],{"class":112},[106,18780,18781],{"class":221},"\"Person构造函数无参构造\"",[106,18783,1161],{"class":112},[106,18785,1184],{"class":116},[106,18787,18788],{"class":108,"line":1634},[106,18789,2179],{"class":116},[106,18791,18792,18794,18796,18798,18800],{"class":108,"line":1639},[106,18793,18512],{"class":1955},[106,18795,117],{"class":116},[106,18797,120],{"class":112},[106,18799,1391],{"class":5209},[106,18801,123],{"class":116},[106,18803,18804],{"class":108,"line":1645},[106,18805,2022],{"class":116},[106,18807,18808,18811,18813],{"class":108,"line":1666},[106,18809,18810],{"class":116},"        age",[106,18812,162],{"class":112},[106,18814,6190],{"class":116},[106,18816,18817,18819,18821,18824,18826],{"class":108,"line":1671},[106,18818,3443],{"class":116},[106,18820,1161],{"class":112},[106,18822,18823],{"class":221},"\"Person构造函数有参构造\"",[106,18825,1161],{"class":112},[106,18827,1184],{"class":116},[106,18829,18830],{"class":108,"line":1685},[106,18831,2179],{"class":116},[106,18833,18834],{"class":108,"line":1690},[106,18835,18540],{"class":175},[106,18837,18838,18840],{"class":108,"line":1719},[106,18839,18545],{"class":1955},[106,18841,1968],{"class":116},[106,18843,18844],{"class":108,"line":1724},[106,18845,2022],{"class":116},[106,18847,18848,18850,18852,18855,18857],{"class":108,"line":1741},[106,18849,3443],{"class":116},[106,18851,1161],{"class":112},[106,18853,18854],{"class":221},"\"Person析构函数被调用\"",[106,18856,1161],{"class":112},[106,18858,1184],{"class":116},[106,18860,18861],{"class":108,"line":1746},[106,18862,2179],{"class":116},[106,18864,18865],{"class":108,"line":1751},[106,18866,18867],{"class":175},"    \u002F\u002F拷贝构造函数\n",[106,18869,18870,18872,18874,18876,18878,18880,18882],{"class":108,"line":1756},[106,18871,18512],{"class":1955},[106,18873,117],{"class":116},[106,18875,6785],{"class":112},[106,18877,15562],{"class":1955},[106,18879,10577],{"class":112},[106,18881,14],{"class":5209},[106,18883,123],{"class":116},[106,18885,18886],{"class":108,"line":1770},[106,18887,2022],{"class":116},[106,18889,18890],{"class":108,"line":1775},[106,18891,18892],{"class":175},"        \u002F\u002F将传入对象的age赋值给当前对象的age\n",[106,18894,18895,18897,18899],{"class":108,"line":2569},[106,18896,18810],{"class":116},[106,18898,162],{"class":112},[106,18900,18901],{"class":116},"p.age;\n",[106,18903,18904,18906,18908,18911,18913],{"class":108,"line":2583},[106,18905,3443],{"class":116},[106,18907,1161],{"class":112},[106,18909,18910],{"class":221},"\"Person拷贝构造函数被调用\"",[106,18912,1161],{"class":112},[106,18914,1184],{"class":116},[106,18916,18917],{"class":108,"line":2591},[106,18918,2179],{"class":116},[106,18920,18921,18923],{"class":108,"line":2596},[106,18922,1977],{"class":112},[106,18924,7790],{"class":116},[106,18926,18927],{"class":108,"line":2602},[106,18928,3987],{"class":116},[106,18930,18931],{"class":108,"line":2608},[106,18932,18933],{"class":175},"\u002F\u002F调用\n",[106,18935,18936,18938,18940],{"class":108,"line":2613},[106,18937,5357],{"class":112},[106,18939,5581],{"class":1955},[106,18941,1968],{"class":116},[106,18943,18944],{"class":108,"line":7941},[106,18945,1538],{"class":116},[106,18947,18948],{"class":108,"line":7965},[106,18949,18950],{"class":175},"    \u002F\u002F Person p1;\u002F\u002F默认构造函数调用\n",[106,18952,18953],{"class":108,"line":7970},[106,18954,1557],{"class":116},[106,18956,18957,18959,18961],{"class":108,"line":7976},[106,18958,5357],{"class":112},[106,18960,5650],{"class":1955},[106,18962,1968],{"class":116},[106,18964,18965],{"class":108,"line":8003},[106,18966,1538],{"class":116},[106,18968,18969],{"class":108,"line":8008},[106,18970,18971],{"class":175},"    \u002F\u002F1.括号法\n",[106,18973,18974],{"class":108,"line":8014},[106,18975,18976],{"class":175},"    \u002F\u002F Person p2(10);\u002F\u002F有参构造函数调用\n",[106,18978,18979],{"class":108,"line":8026},[106,18980,18981],{"class":175},"    \u002F\u002F Person p3(p2);\u002F\u002F拷贝构造函数调用\n",[106,18983,18984],{"class":108,"line":8038},[106,18985,18986],{"class":175},"    \u002F\u002F cout\u003C\u003C\"p2的age:\"\u003C\u003Cp2.age\u003C\u003Cendl;\n",[106,18988,18989],{"class":108,"line":8050},[106,18990,18991],{"class":175},"    \u002F\u002F cout\u003C\u003C\"p3的age:\"\u003C\u003Cp3.age\u003C\u003Cendl;\n",[106,18993,18994],{"class":108,"line":9709},[106,18995,2392],{"emptyLinePlaceholder":33},[106,18997,18998],{"class":108,"line":9734},[106,18999,19000],{"class":175},"    \u002F\u002F注意事项\n",[106,19002,19003],{"class":108,"line":9757},[106,19004,19005],{"class":175},"    \u002F\u002F调用默认构造函数时候，不要加()\n",[106,19007,19008],{"class":108,"line":9781},[106,19009,19010],{"class":175},"    \u002F\u002F因为下面这行代码，编译器会认为是一个函数的声明,不会认为在创建对象\n",[106,19012,19013],{"class":108,"line":9786},[106,19014,19015],{"class":175},"    \u002F\u002F Person p4();\n",[106,19017,19018],{"class":108,"line":9791},[106,19019,2392],{"emptyLinePlaceholder":33},[106,19021,19022],{"class":108,"line":9796},[106,19023,19024],{"class":175},"    \u002F\u002F2.显示法\n",[106,19026,19027],{"class":108,"line":9805},[106,19028,19029],{"class":116},"    Person p1;\n",[106,19031,19032,19035,19037,19040,19042,19044],{"class":108,"line":9810},[106,19033,19034],{"class":116},"    Person p2",[106,19036,162],{"class":112},[106,19038,19039],{"class":1955},"Person",[106,19041,117],{"class":116},[106,19043,563],{"class":165},[106,19045,2711],{"class":116},[106,19047,19048,19051,19053,19055],{"class":108,"line":9816},[106,19049,19050],{"class":116},"    Person p3",[106,19052,162],{"class":112},[106,19054,19039],{"class":1955},[106,19056,19057],{"class":116},"(p2);\n",[106,19059,19060],{"class":108,"line":9837},[106,19061,19062],{"class":175},"    \u002F\u002F 如果单独拿出右侧Person(10);，这是个匿名对象\n",[106,19064,19065],{"class":108,"line":9843},[106,19066,2392],{"emptyLinePlaceholder":33},[106,19068,19069],{"class":108,"line":9857},[106,19070,19071],{"class":175},"    \u002F\u002F 注意事项2\n",[106,19073,19074],{"class":108,"line":9863},[106,19075,19076],{"class":175},"    \u002F\u002F 不要利用拷贝构造函数  初始化匿名对象\n",[106,19078,19079],{"class":108,"line":9890},[106,19080,19081],{"class":175},"    \u002F\u002F Person(p2);  编译器会认为 Person (p2)===Person p2； 错误的 编译器会认为是对象的声明   \n",[106,19083,19084],{"class":108,"line":9899},[106,19085,2392],{"emptyLinePlaceholder":33},[106,19087,19088],{"class":108,"line":9905},[106,19089,19090],{"class":175},"    \u002F\u002F3.隐士转换法\n",[106,19092,19093,19096,19098,19100,19102],{"class":108,"line":9913},[106,19094,19095],{"class":116},"    Person p4",[106,19097,162],{"class":112},[106,19099,563],{"class":165},[106,19101,172],{"class":116},[106,19103,19104],{"class":175},"  \u002F\u002F 这里会调用有参构造函数  相当于Person p4=Person(10);\n",[106,19106,19107,19110,19112,19115],{"class":108,"line":9918},[106,19108,19109],{"class":116},"    Person p5",[106,19111,162],{"class":112},[106,19113,19114],{"class":116},"p4;",[106,19116,19117],{"class":175}," \u002F\u002F 这里会调用拷贝构造函数\n",[106,19119,19120],{"class":108,"line":16597},[106,19121,1557],{"class":116},[106,19123,19124,19126,19128],{"class":108,"line":16603},[106,19125,120],{"class":112},[106,19127,1965],{"class":1955},[106,19129,1968],{"class":116},[106,19131,19132],{"class":108,"line":16626},[106,19133,1538],{"class":116},[106,19135,19136,19138],{"class":108,"line":16632},[106,19137,5626],{"class":1955},[106,19139,5629],{"class":116},[106,19141,19142,19144],{"class":108,"line":16655},[106,19143,5695],{"class":1955},[106,19145,5629],{"class":116},[106,19147,19148,19150,19152],{"class":108,"line":16669},[106,19149,4082],{"class":112},[106,19151,4085],{"class":165},[106,19153,1283],{"class":116},[106,19155,19156],{"class":108,"line":16689},[106,19157,1557],{"class":116},[14,19159,19160,19163],{},[266,19161,19162],{},"匿名对象的特点","：当前行执行结束后，系统会立即回收掉匿名对象",[77,19165,19167],{"id":19166},"_823拷贝构造函数","8.2.3拷贝构造函数",[14,19169,19170],{},"C++中拷贝构造函数调用时机通常有三种情况",[1124,19172,19173,19176,19179],{},[63,19174,19175],{},"使用一个已经创建完毕的对象来初始化一个新对象",[63,19177,19178],{},"值传递的方式给函数参数传值",[63,19180,19181],{},"以值方式返回局部对象",[97,19183,19185],{"className":99,"code":19184,"language":101,"meta":25,"style":25},"#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",[103,19186,19187,19193,19203,19207,19212,19216,19221,19226,19231,19237,19241,19245,19251,19255,19268,19272,19277,19289,19293,19301,19314,19318,19322,19338,19342,19351,19364,19368,19374,19378,19390,19394,19400,19404,19408,19416,19420,19433,19441,19459,19463,19468,19473,19488,19492,19505,19509,19517,19521,19525,19533,19537,19542,19551,19555,19559,19584,19594,19598,19606,19610,19621,19646,19650,19654,19658,19666,19670,19675,19680,19687,19692,19697,19702,19707,19711,19716,19720,19725,19729,19734,19739,19743,19747,19752,19757,19765],{"__ignoreMap":25},[106,19188,19189,19191],{"class":108,"line":109},[106,19190,1941],{"class":112},[106,19192,1944],{"class":221},[106,19194,19195,19197,19199,19201],{"class":108,"line":28},[106,19196,1949],{"class":112},[106,19198,1952],{"class":112},[106,19200,1956],{"class":1955},[106,19202,1283],{"class":116},[106,19204,19205],{"class":108,"line":1172},[106,19206,2392],{"emptyLinePlaceholder":33},[106,19208,19209],{"class":108,"line":1187},[106,19210,19211],{"class":175},"\u002F\u002F拷贝构造函数调用时机\n",[106,19213,19214],{"class":108,"line":1193},[106,19215,2392],{"emptyLinePlaceholder":33},[106,19217,19218],{"class":108,"line":1207},[106,19219,19220],{"class":175},"\u002F\u002F1.使用一个已经创建好的对象来初始化一个新对象\n",[106,19222,19223],{"class":108,"line":1213},[106,19224,19225],{"class":175},"\u002F\u002F2.值传递的方式给函数参数传值\n",[106,19227,19228],{"class":108,"line":1304},[106,19229,19230],{"class":175},"\u002F\u002F3.以值方式返回局部对象\n",[106,19232,19233,19235],{"class":108,"line":1310},[106,19234,14687],{"class":112},[106,19236,15164],{"class":1955},[106,19238,19239],{"class":108,"line":1322},[106,19240,1538],{"class":116},[106,19242,19243],{"class":108,"line":1604},[106,19244,14709],{"class":112},[106,19246,19247,19249],{"class":108,"line":1609},[106,19248,18512],{"class":1955},[106,19250,1968],{"class":116},[106,19252,19253],{"class":108,"line":1615},[106,19254,2022],{"class":116},[106,19256,19257,19259,19261,19264,19266],{"class":108,"line":1620},[106,19258,9662],{"class":116},[106,19260,1161],{"class":112},[106,19262,19263],{"class":221}," \"Person的默认构造函数调用\"",[106,19265,1437],{"class":112},[106,19267,8833],{"class":116},[106,19269,19270],{"class":108,"line":1634},[106,19271,2179],{"class":116},[106,19273,19274],{"class":108,"line":1639},[106,19275,19276],{"class":175},"    \u002F\u002F有参构造\n",[106,19278,19279,19281,19283,19285,19287],{"class":108,"line":1645},[106,19280,18512],{"class":1955},[106,19282,117],{"class":116},[106,19284,120],{"class":112},[106,19286,15682],{"class":5209},[106,19288,123],{"class":116},[106,19290,19291],{"class":108,"line":1666},[106,19292,2022],{"class":116},[106,19294,19295,19297,19299],{"class":108,"line":1671},[106,19296,15736],{"class":116},[106,19298,162],{"class":112},[106,19300,7790],{"class":116},[106,19302,19303,19305,19307,19310,19312],{"class":108,"line":1685},[106,19304,9662],{"class":116},[106,19306,1161],{"class":112},[106,19308,19309],{"class":221}," \"Person的有参构造函数调用\"",[106,19311,1437],{"class":112},[106,19313,8833],{"class":116},[106,19315,19316],{"class":108,"line":1690},[106,19317,2179],{"class":116},[106,19319,19320],{"class":108,"line":1719},[106,19321,18867],{"class":175},[106,19323,19324,19326,19328,19330,19332,19334,19336],{"class":108,"line":1724},[106,19325,18512],{"class":1955},[106,19327,117],{"class":116},[106,19329,6785],{"class":112},[106,19331,15562],{"class":1955},[106,19333,10577],{"class":112},[106,19335,14],{"class":5209},[106,19337,123],{"class":116},[106,19339,19340],{"class":108,"line":1741},[106,19341,2022],{"class":116},[106,19343,19344,19346,19348],{"class":108,"line":1746},[106,19345,15736],{"class":116},[106,19347,162],{"class":112},[106,19349,19350],{"class":116}," p.m_Age;\n",[106,19352,19353,19355,19357,19360,19362],{"class":108,"line":1751},[106,19354,9662],{"class":116},[106,19356,1161],{"class":112},[106,19358,19359],{"class":221}," \"Person的拷贝构造函数调用\"",[106,19361,1437],{"class":112},[106,19363,8833],{"class":116},[106,19365,19366],{"class":108,"line":1756},[106,19367,2179],{"class":116},[106,19369,19370,19372],{"class":108,"line":1770},[106,19371,18545],{"class":1955},[106,19373,1968],{"class":116},[106,19375,19376],{"class":108,"line":1775},[106,19377,2022],{"class":116},[106,19379,19380,19382,19384,19386,19388],{"class":108,"line":2569},[106,19381,9662],{"class":116},[106,19383,1161],{"class":112},[106,19385,18560],{"class":221},[106,19387,1437],{"class":112},[106,19389,8833],{"class":116},[106,19391,19392],{"class":108,"line":2583},[106,19393,2179],{"class":116},[106,19395,19396,19398],{"class":108,"line":2591},[106,19397,1977],{"class":112},[106,19399,15659],{"class":116},[106,19401,19402],{"class":108,"line":2596},[106,19403,3987],{"class":116},[106,19405,19406],{"class":108,"line":2602},[106,19407,19220],{"class":175},[106,19409,19410,19412,19414],{"class":108,"line":2608},[106,19411,5357],{"class":112},[106,19413,5581],{"class":1955},[106,19415,1968],{"class":116},[106,19417,19418],{"class":108,"line":2613},[106,19419,1538],{"class":116},[106,19421,19422,19425,19427,19429,19431],{"class":108,"line":7941},[106,19423,19424],{"class":116},"    Person ",[106,19426,7123],{"class":1955},[106,19428,117],{"class":116},[106,19430,817],{"class":165},[106,19432,2711],{"class":116},[106,19434,19435,19437,19439],{"class":108,"line":7965},[106,19436,19424],{"class":116},[106,19438,7026],{"class":1955},[106,19440,17508],{"class":116},[106,19442,19443,19445,19447,19450,19452,19455,19457],{"class":108,"line":7970},[106,19444,1543],{"class":116},[106,19446,1161],{"class":112},[106,19448,19449],{"class":221},"\"P2的年龄为：\"",[106,19451,1161],{"class":112},[106,19453,19454],{"class":116},"p2.m_Age",[106,19456,1161],{"class":112},[106,19458,1184],{"class":116},[106,19460,19461],{"class":108,"line":7976},[106,19462,1557],{"class":116},[106,19464,19465],{"class":108,"line":8003},[106,19466,19467],{"class":175},"\u002F\u002F 2.值传递的方式给函数参数传值\n",[106,19469,19470],{"class":108,"line":8008},[106,19471,19472],{"class":175},"\u002F\u002F值传递会拷贝一个新的对象，调用拷贝构造函数\n",[106,19474,19475,19477,19480,19482,19484,19486],{"class":108,"line":8014},[106,19476,5357],{"class":112},[106,19478,19479],{"class":1955}," doWork",[106,19481,117],{"class":116},[106,19483,19039],{"class":1955},[106,19485,6818],{"class":5209},[106,19487,123],{"class":116},[106,19489,19490],{"class":108,"line":8026},[106,19491,1538],{"class":116},[106,19493,19494,19496,19498,19501,19503],{"class":108,"line":8038},[106,19495,6522],{"class":116},[106,19497,1161],{"class":112},[106,19499,19500],{"class":221}," \"doWork函数调用\"",[106,19502,1437],{"class":112},[106,19504,8833],{"class":116},[106,19506,19507],{"class":108,"line":8050},[106,19508,1557],{"class":116},[106,19510,19511,19513,19515],{"class":108,"line":9709},[106,19512,5357],{"class":112},[106,19514,5650],{"class":1955},[106,19516,1968],{"class":116},[106,19518,19519],{"class":108,"line":9734},[106,19520,1538],{"class":116},[106,19522,19523],{"class":108,"line":9757},[106,19524,15306],{"class":116},[106,19526,19527,19530],{"class":108,"line":9781},[106,19528,19529],{"class":1955},"    doWork",[106,19531,19532],{"class":116},"(p);\n",[106,19534,19535],{"class":108,"line":9786},[106,19536,1557],{"class":116},[106,19538,19539],{"class":108,"line":9791},[106,19540,19541],{"class":175},"\u002F\u002F 3.以值方式返回局部对象\n",[106,19543,19544,19546,19549],{"class":108,"line":9796},[106,19545,19039],{"class":1955},[106,19547,19548],{"class":1955}," doWork2",[106,19550,1968],{"class":116},[106,19552,19553],{"class":108,"line":9805},[106,19554,1538],{"class":116},[106,19556,19557],{"class":108,"line":9810},[106,19558,19029],{"class":116},[106,19560,19561,19563,19565,19567,19569,19571,19573,19575,19577,19579,19581],{"class":108,"line":9816},[106,19562,1543],{"class":116},[106,19564,1161],{"class":112},[106,19566,117],{"class":116},[106,19568,120],{"class":112},[106,19570,6511],{"class":112},[106,19572,546],{"class":116},[106,19574,470],{"class":112},[106,19576,7123],{"class":116},[106,19578,1161],{"class":112},[106,19580,1231],{"class":116},[106,19582,19583],{"class":175},"\u002F\u002F打印p1的地址\n",[106,19585,19586,19588,19591],{"class":108,"line":9837},[106,19587,4082],{"class":112},[106,19589,19590],{"class":116}," p1;",[106,19592,19593],{"class":175},"\u002F\u002F返回局部对象，调用拷贝构造函数\n",[106,19595,19596],{"class":108,"line":9843},[106,19597,1557],{"class":116},[106,19599,19600,19602,19604],{"class":108,"line":9857},[106,19601,5357],{"class":112},[106,19603,5722],{"class":1955},[106,19605,1968],{"class":116},[106,19607,19608],{"class":108,"line":9863},[106,19609,1538],{"class":116},[106,19611,19612,19615,19617,19619],{"class":108,"line":9890},[106,19613,19614],{"class":116},"    Person p ",[106,19616,162],{"class":112},[106,19618,19548],{"class":1955},[106,19620,5629],{"class":116},[106,19622,19623,19625,19627,19629,19631,19633,19635,19637,19639,19641,19643],{"class":108,"line":9899},[106,19624,1543],{"class":116},[106,19626,1161],{"class":112},[106,19628,117],{"class":116},[106,19630,120],{"class":112},[106,19632,6511],{"class":112},[106,19634,546],{"class":116},[106,19636,470],{"class":112},[106,19638,14],{"class":116},[106,19640,1161],{"class":112},[106,19642,1231],{"class":116},[106,19644,19645],{"class":175},"\u002F\u002F打印p的地址\n",[106,19647,19648],{"class":108,"line":9905},[106,19649,1557],{"class":116},[106,19651,19652],{"class":108,"line":9913},[106,19653,2392],{"emptyLinePlaceholder":33},[106,19655,19656],{"class":108,"line":9918},[106,19657,2392],{"emptyLinePlaceholder":33},[106,19659,19660,19662,19664],{"class":108,"line":16597},[106,19661,120],{"class":112},[106,19663,1965],{"class":1955},[106,19665,1968],{"class":116},[106,19667,19668],{"class":108,"line":16603},[106,19669,1538],{"class":116},[106,19671,19672],{"class":108,"line":16626},[106,19673,19674],{"class":175},"    \u002F\u002F test01();\n",[106,19676,19677],{"class":108,"line":16632},[106,19678,19679],{"class":175},"    \u002F\u002F test02();\n",[106,19681,19682,19685],{"class":108,"line":16655},[106,19683,19684],{"class":1955},"    test03",[106,19686,5629],{"class":116},[106,19688,19689],{"class":108,"line":16669},[106,19690,19691],{"class":175},"\u002F\u002F此时编译器进行了优化，返回值优化（RVO），没有调用拷贝构造函数，直接在p的地址上创建了p1对象\n",[106,19693,19694],{"class":108,"line":16689},[106,19695,19696],{"class":175},"\u002F\u002F 输出结果如下：\n",[106,19698,19699],{"class":108,"line":16695},[106,19700,19701],{"class":175},"\u002F\u002F Person的默认构造函数调用\n",[106,19703,19704],{"class":108,"line":16706},[106,19705,19706],{"class":175},"\u002F\u002F 0x7fffffffceec\n",[106,19708,19709],{"class":108,"line":16729},[106,19710,19706],{"class":175},[106,19712,19713],{"class":108,"line":16751},[106,19714,19715],{"class":175},"\u002F\u002F Person的析构函数调用\n",[106,19717,19718],{"class":108,"line":16756},[106,19719,2392],{"emptyLinePlaceholder":33},[106,19721,19722],{"class":108,"line":16762},[106,19723,19724],{"class":175},"\u002F\u002F 之前的输出结果如下：\n",[106,19726,19727],{"class":108,"line":16776},[106,19728,19701],{"class":175},[106,19730,19731],{"class":108,"line":16789},[106,19732,19733],{"class":175},"\u002F\u002F 地址\n",[106,19735,19736],{"class":108,"line":16794},[106,19737,19738],{"class":175},"\u002F\u002F Person的拷贝构造函数调用\n",[106,19740,19741],{"class":108,"line":16808},[106,19742,19715],{"class":175},[106,19744,19745],{"class":108,"line":16813},[106,19746,19733],{"class":175},[106,19748,19749],{"class":108,"line":16819},[106,19750,19751],{"class":175},"\u002F\u002F (这两次输出的地址也是不同的) \n",[106,19753,19754],{"class":108,"line":16824},[106,19755,19756],{"class":175},"\u002F\u002F Person的析构函数调用     \n",[106,19758,19759,19761,19763],{"class":108,"line":16838},[106,19760,4082],{"class":112},[106,19762,4085],{"class":165},[106,19764,1283],{"class":116},[106,19766,19767],{"class":108,"line":16843},[106,19768,1557],{"class":116},[14,19770,19771],{},"简化版理解",[97,19773,19775],{"className":99,"code":19774,"language":101,"meta":25,"style":25},"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",[103,19776,19777,19785,19789,19795,19808,19819,19823,19835,19848,19856,19860,19876,19889,19898,19902,19907,19913,19926,19930,19934,19941,19945,19949,19954,19962,19966,19982,19995,20008,20012,20017,20025,20029,20033,20038,20043,20059,20067,20074,20080,20084,20088,20093,20101,20105,20109,20132,20139,20143,20147,20155,20159,20169,20191,20195,20199,20203,20211,20215,20220,20225,20231,20235,20245,20249,20257],{"__ignoreMap":25},[106,19778,19779,19781,19783],{"class":108,"line":109},[106,19780,14687],{"class":112},[106,19782,15562],{"class":1955},[106,19784,15565],{"class":116},[106,19786,19787],{"class":108,"line":28},[106,19788,14709],{"class":112},[106,19790,19791,19793],{"class":108,"line":1172},[106,19792,18512],{"class":1955},[106,19794,10846],{"class":116},[106,19796,19797,19799,19801,19804,19806],{"class":108,"line":1187},[106,19798,9662],{"class":116},[106,19800,1161],{"class":112},[106,19802,19803],{"class":221}," \"无参构造函数!\"",[106,19805,1437],{"class":112},[106,19807,8833],{"class":116},[106,19809,19810,19813,19815,19817],{"class":108,"line":1193},[106,19811,19812],{"class":116},"        mAge ",[106,19814,162],{"class":112},[106,19816,4085],{"class":165},[106,19818,1283],{"class":116},[106,19820,19821],{"class":108,"line":1207},[106,19822,2179],{"class":116},[106,19824,19825,19827,19829,19831,19833],{"class":108,"line":1213},[106,19826,18512],{"class":1955},[106,19828,117],{"class":116},[106,19830,120],{"class":112},[106,19832,15682],{"class":5209},[106,19834,12435],{"class":116},[106,19836,19837,19839,19841,19844,19846],{"class":108,"line":1304},[106,19838,9662],{"class":116},[106,19840,1161],{"class":112},[106,19842,19843],{"class":221}," \"有参构造函数!\"",[106,19845,1437],{"class":112},[106,19847,8833],{"class":116},[106,19849,19850,19852,19854],{"class":108,"line":1310},[106,19851,19812],{"class":116},[106,19853,162],{"class":112},[106,19855,7790],{"class":116},[106,19857,19858],{"class":108,"line":1322},[106,19859,2179],{"class":116},[106,19861,19862,19864,19866,19868,19870,19872,19874],{"class":108,"line":1604},[106,19863,18512],{"class":1955},[106,19865,117],{"class":116},[106,19867,6785],{"class":112},[106,19869,15562],{"class":1955},[106,19871,470],{"class":112},[106,19873,6818],{"class":5209},[106,19875,12435],{"class":116},[106,19877,19878,19880,19882,19885,19887],{"class":108,"line":1609},[106,19879,9662],{"class":116},[106,19881,1161],{"class":112},[106,19883,19884],{"class":221}," \"拷贝构造函数!\"",[106,19886,1437],{"class":112},[106,19888,8833],{"class":116},[106,19890,19891,19893,19895],{"class":108,"line":1615},[106,19892,19812],{"class":116},[106,19894,162],{"class":112},[106,19896,19897],{"class":116}," p.mAge;\n",[106,19899,19900],{"class":108,"line":1620},[106,19901,2179],{"class":116},[106,19903,19904],{"class":108,"line":1634},[106,19905,19906],{"class":175},"    \u002F\u002F析构函数在释放内存之前调用\n",[106,19908,19909,19911],{"class":108,"line":1639},[106,19910,18545],{"class":1955},[106,19912,10846],{"class":116},[106,19914,19915,19917,19919,19922,19924],{"class":108,"line":1645},[106,19916,9662],{"class":116},[106,19918,1161],{"class":112},[106,19920,19921],{"class":221}," \"析构函数!\"",[106,19923,1437],{"class":112},[106,19925,8833],{"class":116},[106,19927,19928],{"class":108,"line":1666},[106,19929,2179],{"class":116},[106,19931,19932],{"class":108,"line":1671},[106,19933,14709],{"class":112},[106,19935,19936,19938],{"class":108,"line":1685},[106,19937,1977],{"class":112},[106,19939,19940],{"class":116}," mAge;\n",[106,19942,19943],{"class":108,"line":1690},[106,19944,3987],{"class":116},[106,19946,19947],{"class":108,"line":1719},[106,19948,2392],{"emptyLinePlaceholder":33},[106,19950,19951],{"class":108,"line":1724},[106,19952,19953],{"class":175},"\u002F\u002F1. 使用一个已经创建完毕的对象来初始化一个新对象\n",[106,19955,19956,19958,19960],{"class":108,"line":1741},[106,19957,5357],{"class":112},[106,19959,5581],{"class":1955},[106,19961,10846],{"class":116},[106,19963,19964],{"class":108,"line":1746},[106,19965,2392],{"emptyLinePlaceholder":33},[106,19967,19968,19970,19973,19975,19977,19979],{"class":108,"line":1751},[106,19969,19424],{"class":116},[106,19971,19972],{"class":1955},"man",[106,19974,117],{"class":116},[106,19976,428],{"class":165},[106,19978,5959],{"class":116},[106,19980,19981],{"class":175}," \u002F\u002Fp对象已经创建完毕\n",[106,19983,19984,19986,19989,19992],{"class":108,"line":1756},[106,19985,19424],{"class":116},[106,19987,19988],{"class":1955},"newman",[106,19990,19991],{"class":116},"(man);",[106,19993,19994],{"class":175}," \u002F\u002F调用拷贝构造函数\n",[106,19996,19997,20000,20002,20005],{"class":108,"line":1770},[106,19998,19999],{"class":116},"    Person newman2 ",[106,20001,162],{"class":112},[106,20003,20004],{"class":116}," man;",[106,20006,20007],{"class":175}," \u002F\u002F拷贝构造\n",[106,20009,20010],{"class":108,"line":1775},[106,20011,2392],{"emptyLinePlaceholder":33},[106,20013,20014],{"class":108,"line":2569},[106,20015,20016],{"class":175},"    \u002F\u002FPerson newman3;\n",[106,20018,20019,20022],{"class":108,"line":2583},[106,20020,20021],{"class":175},"    \u002F\u002Fnewman3 = man;",[106,20023,20024],{"class":175}," \u002F\u002F不是调用拷贝构造函数，赋值操作\n",[106,20026,20027],{"class":108,"line":2591},[106,20028,1557],{"class":116},[106,20030,20031],{"class":108,"line":2596},[106,20032,2392],{"emptyLinePlaceholder":33},[106,20034,20035],{"class":108,"line":2602},[106,20036,20037],{"class":175},"\u002F\u002F2. 值传递的方式给函数参数传值\n",[106,20039,20040],{"class":108,"line":2608},[106,20041,20042],{"class":175},"\u002F\u002F相当于Person p1 = p;\n",[106,20044,20045,20047,20049,20051,20053,20056],{"class":108,"line":2613},[106,20046,5357],{"class":112},[106,20048,19479],{"class":1955},[106,20050,117],{"class":116},[106,20052,19039],{"class":1955},[106,20054,20055],{"class":5209}," p1",[106,20057,20058],{"class":116},") {}\n",[106,20060,20061,20063,20065],{"class":108,"line":7941},[106,20062,5357],{"class":112},[106,20064,5650],{"class":1955},[106,20066,10846],{"class":116},[106,20068,20069,20071],{"class":108,"line":7965},[106,20070,18597],{"class":116},[106,20072,20073],{"class":175}," \u002F\u002F无参构造函数\n",[106,20075,20076,20078],{"class":108,"line":7970},[106,20077,19529],{"class":1955},[106,20079,19532],{"class":116},[106,20081,20082],{"class":108,"line":7976},[106,20083,1557],{"class":116},[106,20085,20086],{"class":108,"line":8003},[106,20087,2392],{"emptyLinePlaceholder":33},[106,20089,20090],{"class":108,"line":8008},[106,20091,20092],{"class":175},"\u002F\u002F3. 以值方式返回局部对象\n",[106,20094,20095,20097,20099],{"class":108,"line":8014},[106,20096,19039],{"class":1955},[106,20098,19548],{"class":1955},[106,20100,1968],{"class":116},[106,20102,20103],{"class":108,"line":8026},[106,20104,1538],{"class":116},[106,20106,20107],{"class":108,"line":8038},[106,20108,19029],{"class":116},[106,20110,20111,20113,20115,20117,20119,20121,20123,20125,20128,20130],{"class":108,"line":8050},[106,20112,6522],{"class":116},[106,20114,1161],{"class":112},[106,20116,1650],{"class":116},[106,20118,120],{"class":112},[106,20120,6511],{"class":112},[106,20122,546],{"class":116},[106,20124,470],{"class":112},[106,20126,20127],{"class":116},"p1 ",[106,20129,1161],{"class":112},[106,20131,8833],{"class":116},[106,20133,20134,20136],{"class":108,"line":9709},[106,20135,4082],{"class":112},[106,20137,20138],{"class":116}," p1;\n",[106,20140,20141],{"class":108,"line":9734},[106,20142,1557],{"class":116},[106,20144,20145],{"class":108,"line":9757},[106,20146,2392],{"emptyLinePlaceholder":33},[106,20148,20149,20151,20153],{"class":108,"line":9781},[106,20150,5357],{"class":112},[106,20152,5722],{"class":1955},[106,20154,1968],{"class":116},[106,20156,20157],{"class":108,"line":9786},[106,20158,1538],{"class":116},[106,20160,20161,20163,20165,20167],{"class":108,"line":9791},[106,20162,19614],{"class":116},[106,20164,162],{"class":112},[106,20166,19548],{"class":1955},[106,20168,5629],{"class":116},[106,20170,20171,20173,20175,20177,20179,20181,20183,20185,20187,20189],{"class":108,"line":9796},[106,20172,6522],{"class":116},[106,20174,1161],{"class":112},[106,20176,1650],{"class":116},[106,20178,120],{"class":112},[106,20180,6511],{"class":112},[106,20182,546],{"class":116},[106,20184,470],{"class":112},[106,20186,11441],{"class":116},[106,20188,1161],{"class":112},[106,20190,8833],{"class":116},[106,20192,20193],{"class":108,"line":9805},[106,20194,1557],{"class":116},[106,20196,20197],{"class":108,"line":9810},[106,20198,2392],{"emptyLinePlaceholder":33},[106,20200,20201],{"class":108,"line":9816},[106,20202,2392],{"emptyLinePlaceholder":33},[106,20204,20205,20207,20209],{"class":108,"line":9837},[106,20206,120],{"class":112},[106,20208,1965],{"class":1955},[106,20210,10846],{"class":116},[106,20212,20213],{"class":108,"line":9843},[106,20214,2392],{"emptyLinePlaceholder":33},[106,20216,20217],{"class":108,"line":9857},[106,20218,20219],{"class":175},"    \u002F\u002Ftest01();\n",[106,20221,20222],{"class":108,"line":9863},[106,20223,20224],{"class":175},"    \u002F\u002Ftest02();\n",[106,20226,20227,20229],{"class":108,"line":9890},[106,20228,19684],{"class":1955},[106,20230,5629],{"class":116},[106,20232,20233],{"class":108,"line":9899},[106,20234,2392],{"emptyLinePlaceholder":33},[106,20236,20237,20239,20241,20243],{"class":108,"line":9905},[106,20238,2295],{"class":1955},[106,20240,117],{"class":116},[106,20242,2300],{"class":221},[106,20244,2711],{"class":116},[106,20246,20247],{"class":108,"line":9913},[106,20248,2392],{"emptyLinePlaceholder":33},[106,20250,20251,20253,20255],{"class":108,"line":9918},[106,20252,4082],{"class":112},[106,20254,4085],{"class":165},[106,20256,1283],{"class":116},[106,20258,20259],{"class":108,"line":16597},[106,20260,1557],{"class":116},[77,20262,20264],{"id":20263},"_824构造函数的调用规则","8.2.4构造函数的调用规则",[14,20266,20267],{},"默认情况下，c++编译器至少给一个类添加3个函数",[14,20269,20270],{},"1．默认构造函数(无参，函数体为空)",[14,20272,20273],{},"2．默认析构函数(无参，函数体为空)",[14,20275,20276],{},"3．默认拷贝构造函数，对属性进行值拷贝  (值拷贝)",[14,20278,20279],{},"构造函数调用规则如下：",[1124,20281,20282,20285],{},[63,20283,20284],{},"如果用户定义有参构造函数，c++不在提供默认无参构造，但是会提供默认拷贝构造",[63,20286,20287],{},"如果用户定义拷贝构造函数，c++不会再提供其他构造函数",[97,20289,20291],{"className":99,"code":20290,"language":101,"meta":25,"style":25},"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",[103,20292,20293,20301,20305,20310,20316,20328,20332,20337,20349,20358,20370,20374,20378,20394,20403,20415,20419,20423,20429,20441,20445,20449,20455,20459,20463,20471,20475,20487,20492,20500,20504,20522,20526,20530,20538,20542,20547,20555,20570,20583,20587,20592,20599,20615,20628,20632,20636,20644,20648,20654,20658,20668,20672,20680],{"__ignoreMap":25},[106,20294,20295,20297,20299],{"class":108,"line":109},[106,20296,14687],{"class":112},[106,20298,15562],{"class":1955},[106,20300,15565],{"class":116},[106,20302,20303],{"class":108,"line":28},[106,20304,14709],{"class":112},[106,20306,20307],{"class":108,"line":1172},[106,20308,20309],{"class":175},"    \u002F\u002F无参（默认）构造函数\n",[106,20311,20312,20314],{"class":108,"line":1187},[106,20313,18512],{"class":1955},[106,20315,10846],{"class":116},[106,20317,20318,20320,20322,20324,20326],{"class":108,"line":1193},[106,20319,9662],{"class":116},[106,20321,1161],{"class":112},[106,20323,19803],{"class":221},[106,20325,1437],{"class":112},[106,20327,8833],{"class":116},[106,20329,20330],{"class":108,"line":1207},[106,20331,2179],{"class":116},[106,20333,20334],{"class":108,"line":1213},[106,20335,20336],{"class":175},"    \u002F\u002F有参构造函数\n",[106,20338,20339,20341,20343,20345,20347],{"class":108,"line":1304},[106,20340,18512],{"class":1955},[106,20342,117],{"class":116},[106,20344,120],{"class":112},[106,20346,1391],{"class":5209},[106,20348,12435],{"class":116},[106,20350,20351,20354,20356],{"class":108,"line":1310},[106,20352,20353],{"class":116},"        age ",[106,20355,162],{"class":112},[106,20357,1425],{"class":116},[106,20359,20360,20362,20364,20366,20368],{"class":108,"line":1322},[106,20361,9662],{"class":116},[106,20363,1161],{"class":112},[106,20365,19843],{"class":221},[106,20367,1437],{"class":112},[106,20369,8833],{"class":116},[106,20371,20372],{"class":108,"line":1604},[106,20373,2179],{"class":116},[106,20375,20376],{"class":108,"line":1609},[106,20377,18867],{"class":175},[106,20379,20380,20382,20384,20386,20388,20390,20392],{"class":108,"line":1615},[106,20381,18512],{"class":1955},[106,20383,117],{"class":116},[106,20385,6785],{"class":112},[106,20387,15562],{"class":1955},[106,20389,470],{"class":112},[106,20391,6818],{"class":5209},[106,20393,12435],{"class":116},[106,20395,20396,20398,20400],{"class":108,"line":1620},[106,20397,20353],{"class":116},[106,20399,162],{"class":112},[106,20401,20402],{"class":116}," p.age;\n",[106,20404,20405,20407,20409,20411,20413],{"class":108,"line":1634},[106,20406,9662],{"class":116},[106,20408,1161],{"class":112},[106,20410,19884],{"class":221},[106,20412,1437],{"class":112},[106,20414,8833],{"class":116},[106,20416,20417],{"class":108,"line":1639},[106,20418,2179],{"class":116},[106,20420,20421],{"class":108,"line":1645},[106,20422,18540],{"class":175},[106,20424,20425,20427],{"class":108,"line":1666},[106,20426,18545],{"class":1955},[106,20428,10846],{"class":116},[106,20430,20431,20433,20435,20437,20439],{"class":108,"line":1671},[106,20432,9662],{"class":116},[106,20434,1161],{"class":112},[106,20436,19921],{"class":221},[106,20438,1437],{"class":112},[106,20440,8833],{"class":116},[106,20442,20443],{"class":108,"line":1685},[106,20444,2179],{"class":116},[106,20446,20447],{"class":108,"line":1690},[106,20448,14709],{"class":112},[106,20450,20451,20453],{"class":108,"line":1719},[106,20452,1977],{"class":112},[106,20454,7790],{"class":116},[106,20456,20457],{"class":108,"line":1724},[106,20458,3987],{"class":116},[106,20460,20461],{"class":108,"line":1741},[106,20462,2392],{"emptyLinePlaceholder":33},[106,20464,20465,20467,20469],{"class":108,"line":1746},[106,20466,5357],{"class":112},[106,20468,5581],{"class":1955},[106,20470,1968],{"class":116},[106,20472,20473],{"class":108,"line":1751},[106,20474,1538],{"class":116},[106,20476,20477,20479,20481,20483,20485],{"class":108,"line":1756},[106,20478,19424],{"class":116},[106,20480,7123],{"class":1955},[106,20482,117],{"class":116},[106,20484,767],{"class":165},[106,20486,2711],{"class":116},[106,20488,20489],{"class":108,"line":1770},[106,20490,20491],{"class":175},"    \u002F\u002F如果不写拷贝构造，编译器会自动添加拷贝构造，并且做浅拷贝操作\n",[106,20493,20494,20496,20498],{"class":108,"line":1775},[106,20495,19424],{"class":116},[106,20497,7026],{"class":1955},[106,20499,17508],{"class":116},[106,20501,20502],{"class":108,"line":2569},[106,20503,2392],{"emptyLinePlaceholder":33},[106,20505,20506,20508,20510,20513,20515,20518,20520],{"class":108,"line":2583},[106,20507,6522],{"class":116},[106,20509,1161],{"class":112},[106,20511,20512],{"class":221}," \"p2的年龄为： \"",[106,20514,1437],{"class":112},[106,20516,20517],{"class":116}," p2.age ",[106,20519,1161],{"class":112},[106,20521,8833],{"class":116},[106,20523,20524],{"class":108,"line":2591},[106,20525,1557],{"class":116},[106,20527,20528],{"class":108,"line":2596},[106,20529,2392],{"emptyLinePlaceholder":33},[106,20531,20532,20534,20536],{"class":108,"line":2602},[106,20533,5357],{"class":112},[106,20535,5650],{"class":1955},[106,20537,1968],{"class":116},[106,20539,20540],{"class":108,"line":2608},[106,20541,1538],{"class":116},[106,20543,20544],{"class":108,"line":2613},[106,20545,20546],{"class":175},"    \u002F\u002F如果用户提供有参构造，编译器不会提供默认构造，会提供拷贝构造\n",[106,20548,20549,20552],{"class":108,"line":7941},[106,20550,20551],{"class":116},"    Person p1;",[106,20553,20554],{"class":175}," \u002F\u002F此时如果用户自己没有提供默认构造，会出错\n",[106,20556,20557,20559,20561,20563,20565,20567],{"class":108,"line":7965},[106,20558,19424],{"class":116},[106,20560,7026],{"class":1955},[106,20562,117],{"class":116},[106,20564,563],{"class":165},[106,20566,5959],{"class":116},[106,20568,20569],{"class":175}," \u002F\u002F用户提供的有参\n",[106,20571,20572,20574,20577,20580],{"class":108,"line":7970},[106,20573,19424],{"class":116},[106,20575,20576],{"class":1955},"p3",[106,20578,20579],{"class":116},"(p2);",[106,20581,20582],{"class":175}," \u002F\u002F此时如果用户没有提供拷贝构造，编译器会提供\n",[106,20584,20585],{"class":108,"line":7976},[106,20586,2392],{"emptyLinePlaceholder":33},[106,20588,20589],{"class":108,"line":8003},[106,20590,20591],{"class":175},"    \u002F\u002F如果用户提供拷贝构造，编译器不会提供其他构造函数\n",[106,20593,20594,20597],{"class":108,"line":8008},[106,20595,20596],{"class":116},"    Person p4;",[106,20598,20554],{"class":175},[106,20600,20601,20603,20606,20608,20610,20612],{"class":108,"line":8014},[106,20602,19424],{"class":116},[106,20604,20605],{"class":1955},"p5",[106,20607,117],{"class":116},[106,20609,563],{"class":165},[106,20611,5959],{"class":116},[106,20613,20614],{"class":175}," \u002F\u002F此时如果用户自己没有提供有参，会出错\n",[106,20616,20617,20619,20622,20625],{"class":108,"line":8026},[106,20618,19424],{"class":116},[106,20620,20621],{"class":1955},"p6",[106,20623,20624],{"class":116},"(p5);",[106,20626,20627],{"class":175}," \u002F\u002F用户自己提供拷贝构造\n",[106,20629,20630],{"class":108,"line":8038},[106,20631,1557],{"class":116},[106,20633,20634],{"class":108,"line":8050},[106,20635,2392],{"emptyLinePlaceholder":33},[106,20637,20638,20640,20642],{"class":108,"line":9709},[106,20639,120],{"class":112},[106,20641,1965],{"class":1955},[106,20643,10846],{"class":116},[106,20645,20646],{"class":108,"line":9734},[106,20647,2392],{"emptyLinePlaceholder":33},[106,20649,20650,20652],{"class":108,"line":9757},[106,20651,5626],{"class":1955},[106,20653,5629],{"class":116},[106,20655,20656],{"class":108,"line":9781},[106,20657,2392],{"emptyLinePlaceholder":33},[106,20659,20660,20662,20664,20666],{"class":108,"line":9786},[106,20661,2295],{"class":1955},[106,20663,117],{"class":116},[106,20665,2300],{"class":221},[106,20667,2711],{"class":116},[106,20669,20670],{"class":108,"line":9791},[106,20671,2392],{"emptyLinePlaceholder":33},[106,20673,20674,20676,20678],{"class":108,"line":9796},[106,20675,4082],{"class":112},[106,20677,4085],{"class":165},[106,20679,1283],{"class":116},[106,20681,20682],{"class":108,"line":9805},[106,20683,1557],{"class":116},[77,20685,20687],{"id":20686},"_825深拷贝和浅拷贝","8.2.5深拷贝和浅拷贝",[14,20689,20690],{},"浅拷贝：简单的赋值拷贝操作",[14,20692,20693],{},"深拷贝：在堆区重新申请空间，进行拷贝操作",[97,20695,20697],{"className":99,"code":20696,"language":101,"meta":25,"style":25},"#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",[103,20698,20699,20705,20715,20721,20725,20729,20734,20740,20744,20757,20761,20765,20772,20776,20786,20801,20814,20818,20823,20828,20844,20848,20861,20866,20871,20876,20885,20890,20905,20909,20913,20917,20923,20927,20932,20947,20951,20962,20976,20980,20989,20993,20999,21011,21015,21023,21027,21044,21075,21083,21111,21115,21119,21127,21131,21137],{"__ignoreMap":25},[106,20700,20701,20703],{"class":108,"line":109},[106,20702,1941],{"class":112},[106,20704,1944],{"class":221},[106,20706,20707,20709,20711,20713],{"class":108,"line":28},[106,20708,1949],{"class":112},[106,20710,1952],{"class":112},[106,20712,1956],{"class":1955},[106,20714,1283],{"class":116},[106,20716,20717,20719],{"class":108,"line":1172},[106,20718,14687],{"class":112},[106,20720,15164],{"class":1955},[106,20722,20723],{"class":108,"line":1187},[106,20724,1538],{"class":116},[106,20726,20727],{"class":108,"line":1193},[106,20728,14709],{"class":112},[106,20730,20731],{"class":108,"line":1207},[106,20732,20733],{"class":175},"    \u002F\u002F默认构造函数\n",[106,20735,20736,20738],{"class":108,"line":1213},[106,20737,18512],{"class":1955},[106,20739,1968],{"class":116},[106,20741,20742],{"class":108,"line":1304},[106,20743,2022],{"class":116},[106,20745,20746,20748,20750,20753,20755],{"class":108,"line":1310},[106,20747,3443],{"class":116},[106,20749,1161],{"class":112},[106,20751,20752],{"class":221},"\"默认构造函数\"",[106,20754,1161],{"class":112},[106,20756,1184],{"class":116},[106,20758,20759],{"class":108,"line":1322},[106,20760,2179],{"class":116},[106,20762,20763],{"class":108,"line":1604},[106,20764,20336],{"class":175},[106,20766,20767,20769],{"class":108,"line":1609},[106,20768,18545],{"class":1955},[106,20770,20771],{"class":116},"(int age,int height)\n",[106,20773,20774],{"class":108,"line":1615},[106,20775,2022],{"class":116},[106,20777,20778,20781,20783],{"class":108,"line":1620},[106,20779,20780],{"class":116},"        m_Age",[106,20782,162],{"class":112},[106,20784,20785],{"class":116},"age;\n",[106,20787,20788,20791,20793,20795,20798],{"class":108,"line":1634},[106,20789,20790],{"class":116},"        m_Height",[106,20792,11710],{"class":112},[106,20794,2374],{"class":112},[106,20796,20797],{"class":116},"(height);",[106,20799,20800],{"class":175},"\u002F\u002F放到堆区\n",[106,20802,20803,20805,20807,20810,20812],{"class":108,"line":1639},[106,20804,3443],{"class":116},[106,20806,1161],{"class":112},[106,20808,20809],{"class":221},"\"有参构造函数\"",[106,20811,1161],{"class":112},[106,20813,1184],{"class":116},[106,20815,20816],{"class":108,"line":1645},[106,20817,2179],{"class":116},[106,20819,20820],{"class":108,"line":1666},[106,20821,20822],{"class":175},"    \u002F\u002F深拷贝解决上述问题\n",[106,20824,20825],{"class":108,"line":1671},[106,20826,20827],{"class":175},"    \u002F\u002F自己实现拷贝构造函数，解决浅拷贝带来的问题\n",[106,20829,20830,20832,20834,20836,20838,20840,20842],{"class":108,"line":1685},[106,20831,18512],{"class":1955},[106,20833,117],{"class":116},[106,20835,6785],{"class":112},[106,20837,15562],{"class":1955},[106,20839,10577],{"class":112},[106,20841,14],{"class":5209},[106,20843,123],{"class":116},[106,20845,20846],{"class":108,"line":1690},[106,20847,2022],{"class":116},[106,20849,20850,20852,20854,20857,20859],{"class":108,"line":1719},[106,20851,3443],{"class":116},[106,20853,1161],{"class":112},[106,20855,20856],{"class":221},"\"拷贝构造函数\"",[106,20858,1161],{"class":112},[106,20860,1184],{"class":116},[106,20862,20863],{"class":108,"line":1724},[106,20864,20865],{"class":175},"        \u002F\u002F编译器默认的写如下注释部分\n",[106,20867,20868],{"class":108,"line":1741},[106,20869,20870],{"class":175},"        \u002F\u002Fm_Age=p.m_Age;\n",[106,20872,20873],{"class":108,"line":1746},[106,20874,20875],{"class":175},"        \u002F\u002Fm_Height=p.m_Height;\n",[106,20877,20878,20880,20882],{"class":108,"line":1751},[106,20879,20780],{"class":116},[106,20881,162],{"class":112},[106,20883,20884],{"class":116},"p.m_Age;\n",[106,20886,20887],{"class":108,"line":1756},[106,20888,20889],{"class":175},"        \u002F\u002F深拷贝操作\n",[106,20891,20892,20894,20896,20898,20900,20902],{"class":108,"line":1770},[106,20893,20790],{"class":116},[106,20895,11710],{"class":112},[106,20897,2374],{"class":112},[106,20899,117],{"class":116},[106,20901,572],{"class":112},[106,20903,20904],{"class":116},"p.m_Height);\n",[106,20906,20907],{"class":108,"line":1775},[106,20908,2179],{"class":116},[106,20910,20911],{"class":108,"line":2569},[106,20912,2392],{"emptyLinePlaceholder":33},[106,20914,20915],{"class":108,"line":2583},[106,20916,18540],{"class":175},[106,20918,20919,20921],{"class":108,"line":2591},[106,20920,18545],{"class":1955},[106,20922,1968],{"class":116},[106,20924,20925],{"class":108,"line":2596},[106,20926,2022],{"class":116},[106,20928,20929],{"class":108,"line":2602},[106,20930,20931],{"class":175},"        \u002F\u002F析构函数，将堆区开辟数据做释放操作\n",[106,20933,20934,20936,20939,20942,20945],{"class":108,"line":2608},[106,20935,2489],{"class":112},[106,20937,20938],{"class":116},"(m_Height ",[106,20940,20941],{"class":112},"!=",[106,20943,20944],{"class":165}," NULL",[106,20946,123],{"class":116},[106,20948,20949],{"class":108,"line":2613},[106,20950,2502],{"class":116},[106,20952,20953,20956,20959],{"class":108,"line":7941},[106,20954,20955],{"class":112},"            delete",[106,20957,20958],{"class":116}," m_Height;",[106,20960,20961],{"class":175}," \u002F\u002F释放堆区内存\n",[106,20963,20964,20967,20969,20971,20973],{"class":108,"line":7965},[106,20965,20966],{"class":116},"            m_Height",[106,20968,162],{"class":112},[106,20970,2384],{"class":165},[106,20972,172],{"class":116},[106,20974,20975],{"class":175}," \u002F\u002F防止野指针\n",[106,20977,20978],{"class":108,"line":7970},[106,20979,2521],{"class":116},[106,20981,20982,20984,20986],{"class":108,"line":7976},[106,20983,3443],{"class":116},[106,20985,1161],{"class":112},[106,20987,20988],{"class":221},"\"Person的析构函数调用\"\n",[106,20990,20991],{"class":108,"line":8003},[106,20992,2179],{"class":116},[106,20994,20995,20997],{"class":108,"line":8008},[106,20996,1977],{"class":112},[106,20998,15659],{"class":116},[106,21000,21001,21003,21005,21008],{"class":108,"line":8014},[106,21002,1977],{"class":112},[106,21004,6511],{"class":112},[106,21006,21007],{"class":116},"m_Height;",[106,21009,21010],{"class":175}," \u002F\u002F定义一个指针，指向身高\n",[106,21012,21013],{"class":108,"line":8026},[106,21014,3987],{"class":116},[106,21016,21017,21019,21021],{"class":108,"line":8038},[106,21018,5357],{"class":112},[106,21020,5581],{"class":1955},[106,21022,1968],{"class":116},[106,21024,21025],{"class":108,"line":8050},[106,21026,1538],{"class":116},[106,21028,21029,21031,21033,21035,21037,21039,21042],{"class":108,"line":9709},[106,21030,19424],{"class":116},[106,21032,7123],{"class":1955},[106,21034,117],{"class":116},[106,21036,767],{"class":165},[106,21038,495],{"class":116},[106,21040,21041],{"class":165},"160",[106,21043,2711],{"class":116},[106,21045,21046,21048,21050,21053,21055,21058,21060,21063,21065,21068,21070,21072],{"class":108,"line":9734},[106,21047,1543],{"class":116},[106,21049,1161],{"class":112},[106,21051,21052],{"class":221},"\"p1的年龄为:\"",[106,21054,1161],{"class":112},[106,21056,21057],{"class":116},"p1.m_Age",[106,21059,1161],{"class":112},[106,21061,21062],{"class":221},"\"身高为：\"",[106,21064,6412],{"class":112},[106,21066,21067],{"class":116},"p1.m_Height",[106,21069,1161],{"class":112},[106,21071,1231],{"class":116},[106,21073,21074],{"class":175},"  \u002F\u002F18\n",[106,21076,21077,21079,21081],{"class":108,"line":9757},[106,21078,19424],{"class":116},[106,21080,7026],{"class":1955},[106,21082,17508],{"class":116},[106,21084,21085,21087,21089,21092,21094,21096,21098,21100,21102,21105,21107,21109],{"class":108,"line":9781},[106,21086,1543],{"class":116},[106,21088,1161],{"class":112},[106,21090,21091],{"class":221},"\"p2的年龄为：\"",[106,21093,1161],{"class":112},[106,21095,19454],{"class":116},[106,21097,1161],{"class":112},[106,21099,21062],{"class":221},[106,21101,6412],{"class":112},[106,21103,21104],{"class":116},"p2.m_Height",[106,21106,1161],{"class":112},[106,21108,1231],{"class":116},[106,21110,21074],{"class":175},[106,21112,21113],{"class":108,"line":9786},[106,21114,13203],{"class":116},[106,21116,21117],{"class":108,"line":9791},[106,21118,1557],{"class":116},[106,21120,21121,21123,21125],{"class":108,"line":9796},[106,21122,120],{"class":112},[106,21124,1965],{"class":1955},[106,21126,1968],{"class":116},[106,21128,21129],{"class":108,"line":9805},[106,21130,1538],{"class":116},[106,21132,21133,21135],{"class":108,"line":9810},[106,21134,5626],{"class":1955},[106,21136,5629],{"class":116},[106,21138,21139],{"class":108,"line":9816},[106,21140,1557],{"class":116},[14,21142,21143],{},"浅拷贝时，对象释放是先进后放，所以会先释放p2，然后再释放p1；所以就出现了两次释放内存，也就是会出现非法操作",[14,21145,21146],{},"浅拷贝带来的问题是堆区的内存重复释放",[14,21148,21149],{},[23,21150],{"alt":25,"src":21151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-007.png",[14,21153,21154],{},"浅拷贝问题要使用深拷贝来解决",[14,21156,21157],{},[23,21158],{"alt":25,"src":21159},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2026-05-24-c++%E5%AD%A6%E4%B9%A0-008.png",[14,21161,21162],{},"**总结：**如果属性有在堆区开辟的，一定要自己提供拷贝构造函数，防止浅拷贝带来的问题",[77,21164,21166],{"id":21165},"_826初始化列表","8.2.6初始化列表",[14,21168,21169],{},"作用：初始化属性",[14,21171,5174],{},[97,21173,21176],{"className":21174,"code":21175,"language":5180},[5178],"构造函数():属性1(值1),属性2(值2).....{}\n",[103,21177,21175],{"__ignoreMap":25},[14,21179,21180],{},"例子",[97,21182,21184],{"className":99,"code":21183,"language":101,"meta":25,"style":25},"#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",[103,21185,21186,21192,21202,21208,21212,21217,21221,21226,21231,21236,21241,21246,21251,21255,21260,21265,21308,21317,21335,21353,21371,21375,21379,21386,21393,21400,21404,21408,21416,21420,21424,21444,21453,21457,21461,21471,21475,21483],{"__ignoreMap":25},[106,21187,21188,21190],{"class":108,"line":109},[106,21189,1941],{"class":112},[106,21191,1944],{"class":221},[106,21193,21194,21196,21198,21200],{"class":108,"line":28},[106,21195,1949],{"class":112},[106,21197,1952],{"class":112},[106,21199,1956],{"class":1955},[106,21201,1283],{"class":116},[106,21203,21204,21206],{"class":108,"line":1172},[106,21205,14687],{"class":112},[106,21207,15164],{"class":1955},[106,21209,21210],{"class":108,"line":1187},[106,21211,1538],{"class":116},[106,21213,21214],{"class":108,"line":1193},[106,21215,21216],{"class":112},"    public:\n",[106,21218,21219],{"class":108,"line":1207},[106,21220,2392],{"emptyLinePlaceholder":33},[106,21222,21223],{"class":108,"line":1213},[106,21224,21225],{"class":175},"    \u002F\u002F\u002F\u002F传统方式初始化\n",[106,21227,21228],{"class":108,"line":1304},[106,21229,21230],{"class":175},"    \u002F\u002FPerson(int a, int b, int c) {\n",[106,21232,21233],{"class":108,"line":1310},[106,21234,21235],{"class":175},"    \u002F\u002F  m_A = a;\n",[106,21237,21238],{"class":108,"line":1322},[106,21239,21240],{"class":175},"    \u002F\u002F  m_B = b;\n",[106,21242,21243],{"class":108,"line":1604},[106,21244,21245],{"class":175},"    \u002F\u002F  m_C = c;\n",[106,21247,21248],{"class":108,"line":1609},[106,21249,21250],{"class":175},"    \u002F\u002F}\n",[106,21252,21253],{"class":108,"line":1615},[106,21254,2392],{"emptyLinePlaceholder":33},[106,21256,21257],{"class":108,"line":1620},[106,21258,21259],{"class":175},"    \u002F\u002F初始化列表方式初始化\n",[106,21261,21262],{"class":108,"line":1634},[106,21263,21264],{"class":175},"    \u002F\u002F使用有参构造函数\n",[106,21266,21267,21269,21271,21273,21275,21277,21279,21281,21283,21285,21287,21290,21293,21296,21299,21302,21305],{"class":108,"line":1639},[106,21268,18512],{"class":1955},[106,21270,117],{"class":116},[106,21272,120],{"class":112},[106,21274,1391],{"class":5209},[106,21276,12428],{"class":116},[106,21278,120],{"class":112},[106,21280,2825],{"class":5209},[106,21282,12428],{"class":116},[106,21284,120],{"class":112},[106,21286,2841],{"class":5209},[106,21288,21289],{"class":116},") :",[106,21291,21292],{"class":1955},"m_A",[106,21294,21295],{"class":116},"(a), ",[106,21297,21298],{"class":1955},"m_B",[106,21300,21301],{"class":116},"(b), ",[106,21303,21304],{"class":1955},"m_C",[106,21306,21307],{"class":116},"(c) {}\n",[106,21309,21310,21312,21315],{"class":108,"line":1645},[106,21311,14902],{"class":112},[106,21313,21314],{"class":1955}," PrintPerson",[106,21316,10846],{"class":116},[106,21318,21319,21321,21323,21326,21328,21331,21333],{"class":108,"line":1666},[106,21320,9662],{"class":116},[106,21322,1161],{"class":112},[106,21324,21325],{"class":221}," \"mA:\"",[106,21327,1437],{"class":112},[106,21329,21330],{"class":116}," m_A ",[106,21332,1161],{"class":112},[106,21334,8833],{"class":116},[106,21336,21337,21339,21341,21344,21346,21349,21351],{"class":108,"line":1671},[106,21338,9662],{"class":116},[106,21340,1161],{"class":112},[106,21342,21343],{"class":221}," \"mB:\"",[106,21345,1437],{"class":112},[106,21347,21348],{"class":116}," m_B ",[106,21350,1161],{"class":112},[106,21352,8833],{"class":116},[106,21354,21355,21357,21359,21362,21364,21367,21369],{"class":108,"line":1685},[106,21356,9662],{"class":116},[106,21358,1161],{"class":112},[106,21360,21361],{"class":221}," \"mC:\"",[106,21363,1437],{"class":112},[106,21365,21366],{"class":116}," m_C ",[106,21368,1161],{"class":112},[106,21370,8833],{"class":116},[106,21372,21373],{"class":108,"line":1690},[106,21374,2179],{"class":116},[106,21376,21377],{"class":108,"line":1719},[106,21378,15215],{"class":112},[106,21380,21381,21383],{"class":108,"line":1724},[106,21382,1977],{"class":112},[106,21384,21385],{"class":116}," m_A;\n",[106,21387,21388,21390],{"class":108,"line":1741},[106,21389,1977],{"class":112},[106,21391,21392],{"class":116}," m_B;\n",[106,21394,21395,21397],{"class":108,"line":1746},[106,21396,1977],{"class":112},[106,21398,21399],{"class":116}," m_C;\n",[106,21401,21402],{"class":108,"line":1751},[106,21403,3987],{"class":116},[106,21405,21406],{"class":108,"line":1756},[106,21407,2392],{"emptyLinePlaceholder":33},[106,21409,21410,21412,21414],{"class":108,"line":1770},[106,21411,120],{"class":112},[106,21413,1965],{"class":1955},[106,21415,5971],{"class":116},[106,21417,21418],{"class":108,"line":1775},[106,21419,1538],{"class":116},[106,21421,21422],{"class":108,"line":2569},[106,21423,2392],{"emptyLinePlaceholder":33},[106,21425,21426,21428,21430,21432,21434,21436,21438,21440,21442],{"class":108,"line":2583},[106,21427,19424],{"class":116},[106,21429,14],{"class":1955},[106,21431,117],{"class":116},[106,21433,334],{"class":165},[106,21435,12428],{"class":116},[106,21437,194],{"class":165},[106,21439,12428],{"class":116},[106,21441,188],{"class":165},[106,21443,2711],{"class":116},[106,21445,21446,21448,21451],{"class":108,"line":2591},[106,21447,15859],{"class":116},[106,21449,21450],{"class":1955},"PrintPerson",[106,21452,5629],{"class":116},[106,21454,21455],{"class":108,"line":2596},[106,21456,2392],{"emptyLinePlaceholder":33},[106,21458,21459],{"class":108,"line":2602},[106,21460,2392],{"emptyLinePlaceholder":33},[106,21462,21463,21465,21467,21469],{"class":108,"line":2608},[106,21464,2295],{"class":1955},[106,21466,117],{"class":116},[106,21468,2300],{"class":221},[106,21470,2711],{"class":116},[106,21472,21473],{"class":108,"line":2613},[106,21474,2392],{"emptyLinePlaceholder":33},[106,21476,21477,21479,21481],{"class":108,"line":7941},[106,21478,4082],{"class":112},[106,21480,4085],{"class":165},[106,21482,1283],{"class":116},[106,21484,21485],{"class":108,"line":7965},[106,21486,1557],{"class":116},[14,21488,21489,21490,21493,21494],{},"通过有参构造函数的参数赋值给后面的属性的形式实现初始化列表的,",[266,21491,21492],{},"参数名就是定义的对象属性","，",[266,21495,21496],{},"属性后面的值为有参构造函数的形参",[97,21498,21500],{"className":99,"code":21499,"language":101,"meta":25,"style":25},"Person(int a.int b,int b):m_A(a),m_B(c),m_C(b) {}\n",[103,21501,21502],{"__ignoreMap":25},[106,21503,21504,21506,21508,21510,21513,21515,21518,21520,21523,21525,21528,21530,21533,21535],{"class":108,"line":109},[106,21505,19039],{"class":1955},[106,21507,117],{"class":116},[106,21509,120],{"class":112},[106,21511,21512],{"class":116}," a.",[106,21514,120],{"class":112},[106,21516,21517],{"class":116}," b,",[106,21519,120],{"class":112},[106,21521,21522],{"class":116}," b):",[106,21524,21292],{"class":1955},[106,21526,21527],{"class":116},"(a),",[106,21529,21298],{"class":1955},[106,21531,21532],{"class":116},"(c),",[106,21534,21304],{"class":1955},[106,21536,21537],{"class":116},"(b) {}\n",[77,21539,21541],{"id":21540},"_827类对象作为类成员","8.2.7类对象作为类成员",[14,21543,21544],{},"c++类中的成员可以是另一个类的对象，该成员被称为类成员",[14,21546,14626],{},[97,21548,21550],{"className":99,"code":21549,"language":101,"meta":25,"style":25},"A{};\nB\n{\n    A a;\n}\n\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[103,21551,21552,21557,21562,21566,21571,21575],{"__ignoreMap":25},[106,21553,21554],{"class":108,"line":109},[106,21555,21556],{"class":116},"A{};\n",[106,21558,21559],{"class":108,"line":28},[106,21560,21561],{"class":116},"B\n",[106,21563,21564],{"class":108,"line":1172},[106,21565,1538],{"class":116},[106,21567,21568],{"class":108,"line":1187},[106,21569,21570],{"class":116},"    A a;\n",[106,21572,21573],{"class":108,"line":1193},[106,21574,1557],{"class":116},[106,21576,21577],{"class":108,"line":1207},[106,21578,21579],{"class":175},"\u002F\u002FB类中有对象A作为成员，A为对象成员\n",[14,21581,21582],{},"案例",[97,21584,21586],{"className":99,"code":21585,"language":101,"meta":25,"style":25},"\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",[103,21587,21588,21593,21600,21604,21609,21614,21628,21632,21642,21653,21657,21664,21668,21681,21685,21690,21695,21699,21705,21709,21713,21717,21748,21752,21763,21767,21773,21777,21790,21794,21798,21802,21807,21812,21816,21824,21828,21845,21864,21868,21876,21880,21886],{"__ignoreMap":25},[106,21589,21590],{"class":108,"line":109},[106,21591,21592],{"class":175},"\u002F\u002Fphone这个对象作为Person这个类的类成员\n",[106,21594,21595,21597],{"class":108,"line":28},[106,21596,14687],{"class":112},[106,21598,21599],{"class":1955}," Phone\n",[106,21601,21602],{"class":108,"line":1172},[106,21603,1538],{"class":116},[106,21605,21606],{"class":108,"line":1187},[106,21607,21608],{"class":116},"public：\n",[106,21610,21611],{"class":108,"line":1193},[106,21612,21613],{"class":175},"    \u002F\u002F 赋值(构造函数)\n",[106,21615,21616,21619,21621,21623,21626],{"class":108,"line":1207},[106,21617,21618],{"class":1955},"    Phone",[106,21620,117],{"class":116},[106,21622,14910],{"class":1955},[106,21624,21625],{"class":5209}," pName",[106,21627,123],{"class":116},[106,21629,21630],{"class":108,"line":1213},[106,21631,2022],{"class":116},[106,21633,21634,21637,21639],{"class":108,"line":1304},[106,21635,21636],{"class":116},"        m_pName",[106,21638,162],{"class":112},[106,21640,21641],{"class":116},"pName;\n",[106,21643,21644,21646,21648,21651],{"class":108,"line":1310},[106,21645,3443],{"class":116},[106,21647,1161],{"class":112},[106,21649,21650],{"class":221},"\"Phone的构造函数调用\"",[106,21652,1283],{"class":116},[106,21654,21655],{"class":108,"line":1322},[106,21656,2179],{"class":116},[106,21658,21659,21662],{"class":108,"line":1604},[106,21660,21661],{"class":1955},"    ~Phone",[106,21663,1968],{"class":116},[106,21665,21666],{"class":108,"line":1609},[106,21667,2022],{"class":116},[106,21669,21670,21672,21674,21677,21679],{"class":108,"line":1615},[106,21671,3443],{"class":116},[106,21673,1161],{"class":112},[106,21675,21676],{"class":221},"\"Phone析构函数调用\"",[106,21678,1161],{"class":112},[106,21680,1184],{"class":116},[106,21682,21683],{"class":108,"line":1620},[106,21684,2179],{"class":116},[106,21686,21687],{"class":108,"line":1634},[106,21688,21689],{"class":175},"    \u002F\u002F\n",[106,21691,21692],{"class":108,"line":1639},[106,21693,21694],{"class":116},"    string m_PName;\n",[106,21696,21697],{"class":108,"line":1645},[106,21698,3987],{"class":116},[106,21700,21701,21703],{"class":108,"line":1666},[106,21702,14687],{"class":112},[106,21704,15164],{"class":1955},[106,21706,21707],{"class":108,"line":1671},[106,21708,1538],{"class":116},[106,21710,21711],{"class":108,"line":1685},[106,21712,14709],{"class":112},[106,21714,21715],{"class":108,"line":1690},[106,21716,16987],{"class":175},[106,21718,21719,21721,21723,21725,21727,21729,21731,21734,21737,21739,21742,21745],{"class":108,"line":1719},[106,21720,18512],{"class":1955},[106,21722,117],{"class":116},[106,21724,14910],{"class":1955},[106,21726,14913],{"class":5209},[106,21728,495],{"class":116},[106,21730,14910],{"class":1955},[106,21732,21733],{"class":5209}," pname",[106,21735,21736],{"class":116},"):",[106,21738,15003],{"class":1955},[106,21740,21741],{"class":116},"(name),m_phone.",[106,21743,21744],{"class":1955},"m_PName",[106,21746,21747],{"class":116},"(pname) \n",[106,21749,21750],{"class":108,"line":1724},[106,21751,2022],{"class":116},[106,21753,21754,21756,21758,21761],{"class":108,"line":1741},[106,21755,3443],{"class":116},[106,21757,1161],{"class":112},[106,21759,21760],{"class":221},"\"Person的构造函数调用\"",[106,21762,1283],{"class":116},[106,21764,21765],{"class":108,"line":1746},[106,21766,2179],{"class":116},[106,21768,21769,21771],{"class":108,"line":1751},[106,21770,18545],{"class":1955},[106,21772,1968],{"class":116},[106,21774,21775],{"class":108,"line":1756},[106,21776,2022],{"class":116},[106,21778,21779,21781,21783,21786,21788],{"class":108,"line":1770},[106,21780,3443],{"class":116},[106,21782,1161],{"class":112},[106,21784,21785],{"class":221},"\"Person析构函数调用\"",[106,21787,1161],{"class":112},[106,21789,1184],{"class":116},[106,21791,21792],{"class":108,"line":1775},[106,21793,2179],{"class":116},[106,21795,21796],{"class":108,"line":2569},[106,21797,7773],{"class":175},[106,21799,21800],{"class":108,"line":2583},[106,21801,14885],{"class":116},[106,21803,21804],{"class":108,"line":2591},[106,21805,21806],{"class":175},"    \u002F\u002F手机\n",[106,21808,21809],{"class":108,"line":2596},[106,21810,21811],{"class":116},"    Phone m_Phone;\n",[106,21813,21814],{"class":108,"line":2602},[106,21815,3987],{"class":116},[106,21817,21818,21820,21822],{"class":108,"line":2608},[106,21819,5357],{"class":112},[106,21821,5581],{"class":1955},[106,21823,1968],{"class":116},[106,21825,21826],{"class":108,"line":2613},[106,21827,1538],{"class":116},[106,21829,21830,21832,21834,21836,21838,21840,21843],{"class":108,"line":7941},[106,21831,19424],{"class":116},[106,21833,14],{"class":1955},[106,21835,117],{"class":116},[106,21837,7909],{"class":221},[106,21839,495],{"class":116},[106,21841,21842],{"class":221},"\"安卓\"",[106,21844,2711],{"class":116},[106,21846,21847,21849,21851,21854,21856,21859,21861],{"class":108,"line":7965},[106,21848,1543],{"class":116},[106,21850,1161],{"class":112},[106,21852,21853],{"class":116},"p.Name",[106,21855,1161],{"class":112},[106,21857,21858],{"class":221},"\"拿着：\"",[106,21860,1161],{"class":112},[106,21862,21863],{"class":116},"p.m_phone.m_PName;\n",[106,21865,21866],{"class":108,"line":7970},[106,21867,1557],{"class":116},[106,21869,21870,21872,21874],{"class":108,"line":7976},[106,21871,120],{"class":112},[106,21873,1965],{"class":1955},[106,21875,1968],{"class":116},[106,21877,21878],{"class":108,"line":8003},[106,21879,1538],{"class":116},[106,21881,21882,21884],{"class":108,"line":8008},[106,21883,5626],{"class":1955},[106,21885,5629],{"class":116},[106,21887,21888],{"class":108,"line":8014},[106,21889,1557],{"class":116},[14,21891,9018],{},[97,21893,21895],{"className":99,"code":21894,"language":101,"meta":25,"style":25},"    \u002F\u002F不需要写这个：\n    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[103,21896,21897,21902],{"__ignoreMap":25},[106,21898,21899],{"class":108,"line":109},[106,21900,21901],{"class":175},"    \u002F\u002F不需要写这个：\n",[106,21903,21904],{"class":108,"line":28},[106,21905,21906],{"class":175},"    \u002F\u002F Person(string name,string pname):m_name(name),m_phone.m_PName(pname) {}\n",[14,21908,21909],{},"因为Phone这个类里面写了有参构造函数，所以不需要调用他的属性直接传值通过有参构造函数就可以实现初始化phone",[97,21911,21913],{"className":99,"code":21912,"language":101,"meta":25,"style":25},"Person(string name.string pname):m_name(name),m_phone(pname) {}\n",[103,21914,21915],{"__ignoreMap":25},[106,21916,21917,21919,21922,21924,21927,21930],{"class":108,"line":109},[106,21918,19039],{"class":1955},[106,21920,21921],{"class":116},"(string name.string pname):",[106,21923,15003],{"class":1955},[106,21925,21926],{"class":116},"(name),",[106,21928,21929],{"class":1955},"m_phone",[106,21931,21932],{"class":116},"(pname) {}\n",[14,21934,21935,21936,162,21939],{},"采用的是隐式转换法，实际为如下：\n",[103,21937,21938],{},"m_phone(pname)",[103,21940,21941],{},"Phone m_phone=pname",[14,21943,21944,21947],{},[266,21945,21946],{},"总结","：这里可以直接类比人的胳膊腿，肯定得全有之后才能构造人！析构函数是遵循先进后出的规律！（析构函数的调用顺序与构造函数的调用顺序是相反的）",[14,21949,21950],{},"因此，这里应当是先Phone构造函数调用，然后再Person构造函数调用；Person的析构函数先调用，Phone的析构函数在调用；",[77,21952,21954],{"id":21953},"_828静态对象","8.2.8静态对象",[14,21956,21957],{},"静态对象在成员对象前static，称为静态对象",[14,21959,21960],{},"静态对象分为两类：",[60,21962,21963],{},[63,21964,21965],{},"静态成员变量",[1124,21967,21968,21971,21974],{},[63,21969,21970],{},"①所有对象共享同一份数据   (理解的话可以当作指针，例如a=10;b=20;此时a=20，这里只例子仅仅为解释共享同一份数据)",[63,21972,21973],{},"②在编译阶段分配内存",[63,21975,21976],{},"③类内声明，类外初始化",[60,21978,21979],{"start":28},[63,21980,21981],{},"静态成员函数",[1124,21983,21984,21987],{},[63,21985,21986],{},"①所有对象共享同一个函数",[63,21988,21989],{},"②静态成员函数只能访问静态成员变量",[21991,21992,21994],"h4",{"id":21993},"_8281静态成员变量","8.2.8.1静态成员变量",[97,21996,21998],{"className":99,"code":21997,"language":101,"meta":25,"style":25},"#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",[103,21999,22000,22006,22016,22022,22026,22030,22035,22040,22045,22053,22057,22061,22065,22073,22077,22081,22086,22099,22103,22111,22115,22121],{"__ignoreMap":25},[106,22001,22002,22004],{"class":108,"line":109},[106,22003,1941],{"class":112},[106,22005,1944],{"class":221},[106,22007,22008,22010,22012,22014],{"class":108,"line":28},[106,22009,1949],{"class":112},[106,22011,1952],{"class":112},[106,22013,1956],{"class":1955},[106,22015,1283],{"class":116},[106,22017,22018,22020],{"class":108,"line":1172},[106,22019,14687],{"class":112},[106,22021,15164],{"class":1955},[106,22023,22024],{"class":108,"line":1187},[106,22025,1538],{"class":116},[106,22027,22028],{"class":108,"line":1193},[106,22029,14709],{"class":112},[106,22031,22032],{"class":108,"line":1207},[106,22033,22034],{"class":175},"    \u002F\u002F非静态成员变量\n",[106,22036,22037],{"class":108,"line":1213},[106,22038,22039],{"class":175},"    \u002F\u002F int m_A;\n",[106,22041,22042],{"class":108,"line":1304},[106,22043,22044],{"class":175},"    \u002F\u002F定义静态成员变量\n",[106,22046,22047,22049,22051],{"class":108,"line":1310},[106,22048,11013],{"class":112},[106,22050,2374],{"class":112},[106,22052,21385],{"class":116},[106,22054,22055],{"class":108,"line":1322},[106,22056,2392],{"emptyLinePlaceholder":33},[106,22058,22059],{"class":108,"line":1604},[106,22060,2392],{"emptyLinePlaceholder":33},[106,22062,22063],{"class":108,"line":1609},[106,22064,3987],{"class":116},[106,22066,22067,22069,22071],{"class":108,"line":1615},[106,22068,5357],{"class":112},[106,22070,5581],{"class":1955},[106,22072,1968],{"class":116},[106,22074,22075],{"class":108,"line":1620},[106,22076,1538],{"class":116},[106,22078,22079],{"class":108,"line":1634},[106,22080,15306],{"class":116},[106,22082,22083],{"class":108,"line":1639},[106,22084,22085],{"class":175},"    \u002F\u002F输出类成员变量这块内存\n",[106,22087,22088,22090,22092,22095,22097],{"class":108,"line":1645},[106,22089,1543],{"class":116},[106,22091,1161],{"class":112},[106,22093,22094],{"class":116},"p.m_A",[106,22096,1161],{"class":112},[106,22098,1184],{"class":116},[106,22100,22101],{"class":108,"line":1666},[106,22102,1557],{"class":116},[106,22104,22105,22107,22109],{"class":108,"line":1671},[106,22106,120],{"class":112},[106,22108,1965],{"class":1955},[106,22110,1968],{"class":116},[106,22112,22113],{"class":108,"line":1685},[106,22114,1538],{"class":116},[106,22116,22117,22119],{"class":108,"line":1690},[106,22118,5626],{"class":1955},[106,22120,1968],{"class":116},[106,22122,22123],{"class":108,"line":1719},[106,22124,1557],{"class":116},[14,22126,22127],{},"此时输出是报错的：无法解析外部命令",[14,22129,22130],{},"解决这一问题：必须用到类内声明，类外初始化操作",[97,22132,22134],{"className":99,"code":22133,"language":101,"meta":25,"style":25},"#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",[103,22135,22136,22142,22152,22158,22162,22166,22171,22179,22183,22188,22203,22211,22215,22219,22224,22229,22241,22246,22257,22262,22267,22280,22284,22292,22296,22302],{"__ignoreMap":25},[106,22137,22138,22140],{"class":108,"line":109},[106,22139,1941],{"class":112},[106,22141,1944],{"class":221},[106,22143,22144,22146,22148,22150],{"class":108,"line":28},[106,22145,1949],{"class":112},[106,22147,1952],{"class":112},[106,22149,1956],{"class":1955},[106,22151,1283],{"class":116},[106,22153,22154,22156],{"class":108,"line":1172},[106,22155,14687],{"class":112},[106,22157,15164],{"class":1955},[106,22159,22160],{"class":108,"line":1187},[106,22161,1538],{"class":116},[106,22163,22164],{"class":108,"line":1193},[106,22165,14709],{"class":112},[106,22167,22168],{"class":108,"line":1207},[106,22169,22170],{"class":175},"    \u002F\u002F类内声明\n",[106,22172,22173,22175,22177],{"class":108,"line":1213},[106,22174,11013],{"class":112},[106,22176,2374],{"class":112},[106,22178,21385],{"class":116},[106,22180,22181],{"class":108,"line":1304},[106,22182,3987],{"class":116},[106,22184,22185],{"class":108,"line":1310},[106,22186,22187],{"class":175},"\u002F\u002F类外初始化\n",[106,22189,22190,22192,22194,22197,22199,22201],{"class":108,"line":1322},[106,22191,120],{"class":112},[106,22193,15562],{"class":1955},[106,22195,22196],{"class":116},"::m_A",[106,22198,162],{"class":112},[106,22200,563],{"class":165},[106,22202,1283],{"class":116},[106,22204,22205,22207,22209],{"class":108,"line":1604},[106,22206,5357],{"class":112},[106,22208,5581],{"class":1955},[106,22210,1968],{"class":116},[106,22212,22213],{"class":108,"line":1609},[106,22214,1538],{"class":116},[106,22216,22217],{"class":108,"line":1615},[106,22218,15306],{"class":116},[106,22220,22221],{"class":108,"line":1620},[106,22222,22223],{"class":175},"    \u002F\u002F访问变量的原内存空间\n",[106,22225,22226],{"class":108,"line":1634},[106,22227,22228],{"class":175},"    \u002F\u002F100\n",[106,22230,22231,22233,22235,22237,22239],{"class":108,"line":1639},[106,22232,1543],{"class":116},[106,22234,1161],{"class":112},[106,22236,22094],{"class":116},[106,22238,1161],{"class":112},[106,22240,1184],{"class":116},[106,22242,22243],{"class":108,"line":1645},[106,22244,22245],{"class":116},"    Person p2;\n",[106,22247,22248,22251,22253,22255],{"class":108,"line":1666},[106,22249,22250],{"class":116},"    p2.m_A",[106,22252,162],{"class":112},[106,22254,1714],{"class":165},[106,22256,1283],{"class":116},[106,22258,22259],{"class":108,"line":1671},[106,22260,22261],{"class":175},"    \u002F\u002F继续访问这片空间\n",[106,22263,22264],{"class":108,"line":1685},[106,22265,22266],{"class":175},"    \u002F\u002F200\n",[106,22268,22269,22271,22273,22276,22278],{"class":108,"line":1690},[106,22270,1543],{"class":116},[106,22272,1161],{"class":112},[106,22274,22275],{"class":116},"p2.m_A",[106,22277,1161],{"class":112},[106,22279,1184],{"class":116},[106,22281,22282],{"class":108,"line":1719},[106,22283,1557],{"class":116},[106,22285,22286,22288,22290],{"class":108,"line":1724},[106,22287,120],{"class":112},[106,22289,1965],{"class":1955},[106,22291,1968],{"class":116},[106,22293,22294],{"class":108,"line":1741},[106,22295,1538],{"class":116},[106,22297,22298,22300],{"class":108,"line":1746},[106,22299,5626],{"class":1955},[106,22301,5629],{"class":116},[106,22303,22304],{"class":108,"line":1751},[106,22305,1557],{"class":116},[14,22307,22308],{},[266,22309,22310],{},"静态变量的访问",[97,22312,22314],{"className":99,"code":22313,"language":101,"meta":25,"style":25},"#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",[103,22315,22316,22322,22332,22338,22342,22346,22350,22358,22362,22367,22375,22379,22383,22397,22412,22420,22424,22429,22434,22439,22444,22456,22461,22466,22480,22497,22501,22509,22513,22519],{"__ignoreMap":25},[106,22317,22318,22320],{"class":108,"line":109},[106,22319,1941],{"class":112},[106,22321,1944],{"class":221},[106,22323,22324,22326,22328,22330],{"class":108,"line":28},[106,22325,1949],{"class":112},[106,22327,1952],{"class":112},[106,22329,1956],{"class":1955},[106,22331,1283],{"class":116},[106,22333,22334,22336],{"class":108,"line":1172},[106,22335,14687],{"class":112},[106,22337,15164],{"class":1955},[106,22339,22340],{"class":108,"line":1187},[106,22341,1538],{"class":116},[106,22343,22344],{"class":108,"line":1193},[106,22345,14709],{"class":112},[106,22347,22348],{"class":108,"line":1207},[106,22349,22170],{"class":175},[106,22351,22352,22354,22356],{"class":108,"line":1213},[106,22353,11013],{"class":112},[106,22355,2374],{"class":112},[106,22357,21385],{"class":116},[106,22359,22360],{"class":108,"line":1304},[106,22361,15215],{"class":112},[106,22363,22364],{"class":108,"line":1310},[106,22365,22366],{"class":175},"    \u002F\u002F静态成员变量也是有访问权限的\n",[106,22368,22369,22371,22373],{"class":108,"line":1322},[106,22370,11013],{"class":112},[106,22372,2374],{"class":112},[106,22374,21392],{"class":116},[106,22376,22377],{"class":108,"line":1604},[106,22378,3987],{"class":116},[106,22380,22381],{"class":108,"line":1609},[106,22382,22187],{"class":175},[106,22384,22385,22387,22389,22391,22393,22395],{"class":108,"line":1615},[106,22386,120],{"class":112},[106,22388,15562],{"class":1955},[106,22390,22196],{"class":116},[106,22392,162],{"class":112},[106,22394,563],{"class":165},[106,22396,1283],{"class":116},[106,22398,22399,22401,22403,22406,22408,22410],{"class":108,"line":1620},[106,22400,120],{"class":112},[106,22402,15562],{"class":1955},[106,22404,22405],{"class":116},"::m_B",[106,22407,162],{"class":112},[106,22409,817],{"class":165},[106,22411,1283],{"class":116},[106,22413,22414,22416,22418],{"class":108,"line":1634},[106,22415,5357],{"class":112},[106,22417,5650],{"class":1955},[106,22419,1968],{"class":116},[106,22421,22422],{"class":108,"line":1639},[106,22423,1538],{"class":116},[106,22425,22426],{"class":108,"line":1645},[106,22427,22428],{"class":175},"    \u002F\u002F静态成员变量 不属于某个对象上，所有对象都共享同一份数据\n",[106,22430,22431],{"class":108,"line":1666},[106,22432,22433],{"class":175},"    \u002F\u002F静态成员变量有两种访问方式：\n",[106,22435,22436],{"class":108,"line":1671},[106,22437,22438],{"class":175},"    \u002F\u002F1.通过对象进行访问\n",[106,22440,22441],{"class":108,"line":1685},[106,22442,22443],{"class":116},"    Person p;  \n",[106,22445,22446,22448,22450,22452,22454],{"class":108,"line":1690},[106,22447,1543],{"class":116},[106,22449,1161],{"class":112},[106,22451,22094],{"class":116},[106,22453,1161],{"class":112},[106,22455,1184],{"class":116},[106,22457,22458],{"class":108,"line":1719},[106,22459,22460],{"class":175},"    \u002F\u002F这里其实也可以不用创建对象，因为它本身也不属于某个对象，采用下面方法\n",[106,22462,22463],{"class":108,"line":1724},[106,22464,22465],{"class":175},"    \u002F\u002F2.通过类名进行访问\n",[106,22467,22468,22470,22472,22474,22476,22478],{"class":108,"line":1741},[106,22469,1543],{"class":116},[106,22471,1161],{"class":112},[106,22473,19039],{"class":1955},[106,22475,22196],{"class":116},[106,22477,1161],{"class":112},[106,22479,1184],{"class":116},[106,22481,22482,22484,22486,22488,22490,22492,22494],{"class":108,"line":1746},[106,22483,1543],{"class":116},[106,22485,1161],{"class":112},[106,22487,19039],{"class":1955},[106,22489,22405],{"class":116},[106,22491,1161],{"class":112},[106,22493,1231],{"class":116},[106,22495,22496],{"class":175}," \u002F\u002F没有访问权限，报错\n",[106,22498,22499],{"class":108,"line":1751},[106,22500,1557],{"class":116},[106,22502,22503,22505,22507],{"class":108,"line":1756},[106,22504,120],{"class":112},[106,22506,1965],{"class":1955},[106,22508,1968],{"class":116},[106,22510,22511],{"class":108,"line":1770},[106,22512,1538],{"class":116},[106,22514,22515,22517],{"class":108,"line":1775},[106,22516,5695],{"class":1955},[106,22518,5629],{"class":116},[106,22520,22521],{"class":108,"line":2569},[106,22522,1557],{"class":116},[21991,22524,22526],{"id":22525},"_8282静态成员函数","8.2.8.2静态成员函数",[14,22528,22529],{},"1.静态成员函数定义与访问",[97,22531,22533],{"className":99,"code":22532,"language":101,"meta":25,"style":25},"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",[103,22534,22535,22541,22545,22549,22554,22565,22569,22583,22587,22591,22599,22603,22608,22613,22617,22625,22630,22640],{"__ignoreMap":25},[106,22536,22537,22539],{"class":108,"line":109},[106,22538,14687],{"class":112},[106,22540,15164],{"class":1955},[106,22542,22543],{"class":108,"line":28},[106,22544,1538],{"class":116},[106,22546,22547],{"class":108,"line":1172},[106,22548,14709],{"class":112},[106,22550,22551],{"class":108,"line":1187},[106,22552,22553],{"class":175},"    \u002F\u002F在公共权限下定义静态成员函数\n",[106,22555,22556,22558,22561,22563],{"class":108,"line":1193},[106,22557,11013],{"class":112},[106,22559,22560],{"class":112}," void",[106,22562,11378],{"class":1955},[106,22564,1968],{"class":116},[106,22566,22567],{"class":108,"line":1207},[106,22568,2022],{"class":116},[106,22570,22571,22574,22576,22579,22581],{"class":108,"line":1213},[106,22572,22573],{"class":116},"        coout",[106,22575,1161],{"class":112},[106,22577,22578],{"class":221},"\"静态成员函数的调用\"",[106,22580,1161],{"class":112},[106,22582,1184],{"class":116},[106,22584,22585],{"class":108,"line":1304},[106,22586,2179],{"class":116},[106,22588,22589],{"class":108,"line":1310},[106,22590,3987],{"class":116},[106,22592,22593,22595,22597],{"class":108,"line":1322},[106,22594,5357],{"class":112},[106,22596,5581],{"class":1955},[106,22598,1968],{"class":116},[106,22600,22601],{"class":108,"line":1604},[106,22602,1538],{"class":116},[106,22604,22605],{"class":108,"line":1609},[106,22606,22607],{"class":175},"    \u002F\u002F静态成员函数的调用方式:\n",[106,22609,22610],{"class":108,"line":1615},[106,22611,22612],{"class":175},"    \u002F\u002F1.通过对象访问\n",[106,22614,22615],{"class":108,"line":1620},[106,22616,15306],{"class":116},[106,22618,22619,22621,22623],{"class":108,"line":1634},[106,22620,15859],{"class":116},[106,22622,11544],{"class":1955},[106,22624,5629],{"class":116},[106,22626,22627],{"class":108,"line":1639},[106,22628,22629],{"class":175},"    \u002F\u002F2.通过类名访问\n",[106,22631,22632,22634,22636,22638],{"class":108,"line":1645},[106,22633,18512],{"class":1955},[106,22635,17725],{"class":116},[106,22637,11544],{"class":1955},[106,22639,5629],{"class":116},[106,22641,22642],{"class":108,"line":1666},[106,22643,1557],{"class":116},[60,22645,22646],{"start":28},[63,22647,22648],{},"静态成员函数只能访问静态成员变量",[97,22650,22652],{"className":99,"code":22651,"language":101,"meta":25,"style":25},"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",[103,22653,22654,22660,22664,22668,22672,22682,22686,22700,22705,22717,22721,22732,22742,22746,22750,22754,22764,22768,22781,22785,22789,22793,22797,22811,22819,22823,22827,22831,22835,22843,22847,22857,22862,22866,22874,22878,22884],{"__ignoreMap":25},[106,22655,22656,22658],{"class":108,"line":109},[106,22657,14687],{"class":112},[106,22659,15164],{"class":1955},[106,22661,22662],{"class":108,"line":28},[106,22663,1538],{"class":116},[106,22665,22666],{"class":108,"line":1172},[106,22667,14709],{"class":112},[106,22669,22670],{"class":108,"line":1187},[106,22671,22553],{"class":175},[106,22673,22674,22676,22678,22680],{"class":108,"line":1193},[106,22675,11013],{"class":112},[106,22677,22560],{"class":112},[106,22679,11378],{"class":1955},[106,22681,1968],{"class":116},[106,22683,22684],{"class":108,"line":1207},[106,22685,2022],{"class":116},[106,22687,22688,22691,22693,22695,22697],{"class":108,"line":1213},[106,22689,22690],{"class":116},"        m_A",[106,22692,162],{"class":112},[106,22694,428],{"class":165},[106,22696,172],{"class":116},[106,22698,22699],{"class":175}," \u002F\u002F静态成员函数可以访问 静态成员变量\n",[106,22701,22702],{"class":108,"line":1304},[106,22703,22704],{"class":175},"        \u002F\u002Fm_B=200;\u002F\u002F这行直接报错，因为Person::func();调用函数时，编译器是不知道改p1的m_B还是p2的m_B;m_A是对所有对象公用，但是m_B专属于某个对象\n",[106,22706,22707,22709,22711,22713,22715],{"class":108,"line":1310},[106,22708,22573],{"class":116},[106,22710,1161],{"class":112},[106,22712,22578],{"class":221},[106,22714,1161],{"class":112},[106,22716,1184],{"class":116},[106,22718,22719],{"class":108,"line":1322},[106,22720,2179],{"class":116},[106,22722,22723,22725,22727,22729],{"class":108,"line":1604},[106,22724,11013],{"class":112},[106,22726,2374],{"class":112},[106,22728,15441],{"class":116},[106,22730,22731],{"class":175}," \u002F\u002F静态成员变量\n",[106,22733,22734,22736,22739],{"class":108,"line":1609},[106,22735,1977],{"class":112},[106,22737,22738],{"class":116}," m_B;",[106,22740,22741],{"class":175}," \u002F\u002F非静态成员变量\n",[106,22743,22744],{"class":108,"line":1615},[106,22745,2392],{"emptyLinePlaceholder":33},[106,22747,22748],{"class":108,"line":1620},[106,22749,15215],{"class":112},[106,22751,22752],{"class":108,"line":1634},[106,22753,22366],{"class":175},[106,22755,22756,22758,22760,22762],{"class":108,"line":1639},[106,22757,11013],{"class":112},[106,22759,22560],{"class":112},[106,22761,13611],{"class":1955},[106,22763,1968],{"class":116},[106,22765,22766],{"class":108,"line":1645},[106,22767,2022],{"class":116},[106,22769,22770,22772,22774,22777,22779],{"class":108,"line":1666},[106,22771,3443],{"class":116},[106,22773,1161],{"class":112},[106,22775,22776],{"class":221},"\"这是私有权限下的静态函数调用\"",[106,22778,1161],{"class":112},[106,22780,1184],{"class":116},[106,22782,22783],{"class":108,"line":1671},[106,22784,2179],{"class":116},[106,22786,22787],{"class":108,"line":1685},[106,22788,2392],{"emptyLinePlaceholder":33},[106,22790,22791],{"class":108,"line":1690},[106,22792,2392],{"emptyLinePlaceholder":33},[106,22794,22795],{"class":108,"line":1719},[106,22796,3987],{"class":116},[106,22798,22799,22801,22803,22805,22807,22809],{"class":108,"line":1724},[106,22800,120],{"class":112},[106,22802,15562],{"class":1955},[106,22804,22196],{"class":116},[106,22806,162],{"class":112},[106,22808,308],{"class":165},[106,22810,1283],{"class":116},[106,22812,22813,22815,22817],{"class":108,"line":1741},[106,22814,5357],{"class":112},[106,22816,5581],{"class":1955},[106,22818,1968],{"class":116},[106,22820,22821],{"class":108,"line":1746},[106,22822,1538],{"class":116},[106,22824,22825],{"class":108,"line":1751},[106,22826,22607],{"class":175},[106,22828,22829],{"class":108,"line":1756},[106,22830,22612],{"class":175},[106,22832,22833],{"class":108,"line":1770},[106,22834,15306],{"class":116},[106,22836,22837,22839,22841],{"class":108,"line":1775},[106,22838,15859],{"class":116},[106,22840,11544],{"class":1955},[106,22842,5629],{"class":116},[106,22844,22845],{"class":108,"line":2569},[106,22846,22629],{"class":175},[106,22848,22849,22851,22853,22855],{"class":108,"line":2583},[106,22850,18512],{"class":1955},[106,22852,17725],{"class":116},[106,22854,11544],{"class":1955},[106,22856,5629],{"class":116},[106,22858,22859],{"class":108,"line":2591},[106,22860,22861],{"class":175},"    \u002F\u002FPerson::func2();   报错，类外是访问不到私有静态成员函数的\n",[106,22863,22864],{"class":108,"line":2596},[106,22865,1557],{"class":116},[106,22867,22868,22870,22872],{"class":108,"line":2602},[106,22869,120],{"class":112},[106,22871,1965],{"class":1955},[106,22873,1968],{"class":116},[106,22875,22876],{"class":108,"line":2608},[106,22877,1538],{"class":116},[106,22879,22880,22882],{"class":108,"line":2613},[106,22881,5626],{"class":1955},[106,22883,5629],{"class":116},[106,22885,22886],{"class":108,"line":7941},[106,22887,1557],{"class":116},[77,22889,22891],{"id":22890},"_83c对象模型和this指针","8.3C++对象模型和this指针",[21991,22893,22895],{"id":22894},"_831成员变量和成员函数分开存储","8.3.1成员变量和成员函数分开存储",[14,22897,22898],{},"在c++中，类内的成员变量和成员函数分开存储",[14,22900,22901],{},"只有非静态成员变量才属于类的对象上",[22903,22904,22906],"h5",{"id":22905},"_8311空对象占的内存大小","8.3.1.1空对象占的内存大小",[97,22908,22910],{"className":99,"code":22909,"language":101,"meta":25,"style":25},"#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",[103,22911,22912,22919,22929,22935,22939,22943,22947,22955,22959,22963,22986,22990,22998,23002,23008],{"__ignoreMap":25},[106,22913,22914,22916],{"class":108,"line":109},[106,22915,1941],{"class":112},[106,22917,22918],{"class":221},"\u003Ciostraem>\n",[106,22920,22921,22923,22925,22927],{"class":108,"line":28},[106,22922,1949],{"class":112},[106,22924,1952],{"class":112},[106,22926,1956],{"class":1955},[106,22928,1283],{"class":116},[106,22930,22931,22933],{"class":108,"line":1172},[106,22932,14687],{"class":112},[106,22934,15164],{"class":1955},[106,22936,22937],{"class":108,"line":1187},[106,22938,1538],{"class":116},[106,22940,22941],{"class":108,"line":1193},[106,22942,2392],{"emptyLinePlaceholder":33},[106,22944,22945],{"class":108,"line":1207},[106,22946,3987],{"class":116},[106,22948,22949,22951,22953],{"class":108,"line":1213},[106,22950,5357],{"class":112},[106,22952,5581],{"class":1955},[106,22954,1968],{"class":116},[106,22956,22957],{"class":108,"line":1304},[106,22958,1538],{"class":116},[106,22960,22961],{"class":108,"line":1310},[106,22962,15306],{"class":116},[106,22964,22965,22967,22969,22972,22974,22977,22979,22981,22983],{"class":108,"line":1322},[106,22966,1543],{"class":116},[106,22968,1161],{"class":112},[106,22970,22971],{"class":221},"\"size of p=\"",[106,22973,1161],{"class":112},[106,22975,22976],{"class":1955},"sizeoif",[106,22978,6532],{"class":116},[106,22980,1161],{"class":112},[106,22982,1231],{"class":116},[106,22984,22985],{"class":175}," \u002F\u002F查看这个空类的占用的内存空间\n",[106,22987,22988],{"class":108,"line":1604},[106,22989,1557],{"class":116},[106,22991,22992,22994,22996],{"class":108,"line":1609},[106,22993,120],{"class":112},[106,22995,1965],{"class":1955},[106,22997,1968],{"class":116},[106,22999,23000],{"class":108,"line":1615},[106,23001,1538],{"class":116},[106,23003,23004,23006],{"class":108,"line":1620},[106,23005,5626],{"class":1955},[106,23007,5629],{"class":116},[106,23009,23010],{"class":108,"line":1634},[106,23011,1557],{"class":116},[14,23013,23014],{},"输出结果为：size of p=1",[14,23016,23017],{},"原因：C++编译器会给每个空对象也分配一个字节空间，是为了区分空对象占内存的位置",[14,23019,23020],{},"每一个空对象也应该有一个独一无二的内存地址（可以这样理解：一个字节的空间不用来存储数据，而是作为标记去区分不同的对象）",[22903,23022,23024],{"id":23023},"_8312成员变量与成员函数分开存储","8.3.1.2成员变量与成员函数分开存储",[97,23026,23028],{"className":99,"code":23027,"language":101,"meta":25,"style":25},"#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",[103,23029,23030,23036,23046,23054,23058,23067,23071,23079,23083,23087,23106,23110,23114,23122,23126,23132],{"__ignoreMap":25},[106,23031,23032,23034],{"class":108,"line":109},[106,23033,1941],{"class":112},[106,23035,1944],{"class":221},[106,23037,23038,23040,23042,23044],{"class":108,"line":28},[106,23039,1949],{"class":112},[106,23041,1952],{"class":112},[106,23043,1956],{"class":1955},[106,23045,1283],{"class":116},[106,23047,23048,23050,23052],{"class":108,"line":1172},[106,23049,14687],{"class":112},[106,23051,15562],{"class":1955},[106,23053,2666],{"class":116},[106,23055,23056],{"class":108,"line":1187},[106,23057,1538],{"class":116},[106,23059,23060,23062,23064],{"class":108,"line":1193},[106,23061,1977],{"class":112},[106,23063,15441],{"class":116},[106,23065,23066],{"class":175},"\u002F\u002F非静态成员变量\n",[106,23068,23069],{"class":108,"line":1207},[106,23070,3987],{"class":116},[106,23072,23073,23075,23077],{"class":108,"line":1213},[106,23074,5357],{"class":112},[106,23076,5581],{"class":1955},[106,23078,1968],{"class":116},[106,23080,23081],{"class":108,"line":1304},[106,23082,1538],{"class":116},[106,23084,23085],{"class":108,"line":1310},[106,23086,15306],{"class":116},[106,23088,23089,23091,23093,23095,23097,23099,23101,23103],{"class":108,"line":1322},[106,23090,1543],{"class":116},[106,23092,1161],{"class":112},[106,23094,22971],{"class":221},[106,23096,1365],{"class":112},[106,23098,6532],{"class":116},[106,23100,1161],{"class":112},[106,23102,1231],{"class":116},[106,23104,23105],{"class":175}," \u002F\u002F查看不是空对象时占用多少内存\n",[106,23107,23108],{"class":108,"line":1604},[106,23109,2392],{"emptyLinePlaceholder":33},[106,23111,23112],{"class":108,"line":1609},[106,23113,1557],{"class":116},[106,23115,23116,23118,23120],{"class":108,"line":1615},[106,23117,120],{"class":112},[106,23119,1965],{"class":1955},[106,23121,1968],{"class":116},[106,23123,23124],{"class":108,"line":1620},[106,23125,1538],{"class":116},[106,23127,23128,23130],{"class":108,"line":1634},[106,23129,5626],{"class":1955},[106,23131,5629],{"class":116},[106,23133,23134],{"class":108,"line":1639},[106,23135,1557],{"class":116},[14,23137,23138],{},"输出结果：size of p=4",[14,23140,23141],{},"解释：对象是空的话就占用一字节内存；如果对象不为空，占用的内存空间就是变量占用内存空间的情况",[60,23143,23144],{},[63,23145,23146],{},"如果加上非静态成员变量，Person类修改如下",[97,23148,23150],{"className":99,"code":23149,"language":101,"meta":25,"style":25},"class Person\n{\n    int m_A;\n    static int m_B;\n};\n\u002F\u002F 静态成员变量类内声明，类外初始化\nint Person::m_B=0;\n",[103,23151,23152,23158,23162,23168,23176,23180,23185],{"__ignoreMap":25},[106,23153,23154,23156],{"class":108,"line":109},[106,23155,14687],{"class":112},[106,23157,15164],{"class":1955},[106,23159,23160],{"class":108,"line":28},[106,23161,1538],{"class":116},[106,23163,23164,23166],{"class":108,"line":1172},[106,23165,1977],{"class":112},[106,23167,21385],{"class":116},[106,23169,23170,23172,23174],{"class":108,"line":1187},[106,23171,11013],{"class":112},[106,23173,2374],{"class":112},[106,23175,21392],{"class":116},[106,23177,23178],{"class":108,"line":1193},[106,23179,3987],{"class":116},[106,23181,23182],{"class":108,"line":1207},[106,23183,23184],{"class":175},"\u002F\u002F 静态成员变量类内声明，类外初始化\n",[106,23186,23187,23189,23191,23193,23195,23197],{"class":108,"line":1213},[106,23188,120],{"class":112},[106,23190,15562],{"class":1955},[106,23192,22405],{"class":116},[106,23194,162],{"class":112},[106,23196,308],{"class":165},[106,23198,1283],{"class":116},[14,23200,23201],{},"输出结果：4",[14,23203,23204],{},"解释：静态成员变量不属于某一个对象上，因此还是看int m_A;占用4字节",[60,23206,23207],{"start":28},[63,23208,23209],{},"加上非静态成员函数",[97,23211,23213],{"className":99,"code":23212,"language":101,"meta":25,"style":25},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n};\n\n",[103,23214,23215,23222,23226,23232,23240,23244,23248,23252],{"__ignoreMap":25},[106,23216,23217,23219],{"class":108,"line":109},[106,23218,14687],{"class":112},[106,23220,23221],{"class":1955},"  Person\n",[106,23223,23224],{"class":108,"line":28},[106,23225,1538],{"class":116},[106,23227,23228,23230],{"class":108,"line":1172},[106,23229,1977],{"class":112},[106,23231,21385],{"class":116},[106,23233,23234,23236,23238],{"class":108,"line":1187},[106,23235,14902],{"class":112},[106,23237,11378],{"class":1955},[106,23239,1968],{"class":116},[106,23241,23242],{"class":108,"line":1193},[106,23243,2022],{"class":116},[106,23245,23246],{"class":108,"line":1207},[106,23247,2392],{"emptyLinePlaceholder":33},[106,23249,23250],{"class":108,"line":1213},[106,23251,2179],{"class":116},[106,23253,23254],{"class":108,"line":1304},[106,23255,3987],{"class":116},[14,23257,23258],{},"输出结果：4\n成员函数与成员变量是分开存储的，非静态成员函数不属于类对象上",[60,23260,23261],{"start":1172},[63,23262,23263],{},"加上静态成员函数",[97,23265,23267],{"className":99,"code":23266,"language":101,"meta":25,"style":25},"class  Person\n{\n    int m_A;\n    void func()\n    {\n\n    }\n    static void func1()\n    {\n\n    }\n};\n\n",[103,23268,23269,23275,23279,23285,23293,23297,23301,23305,23316,23320,23324,23328],{"__ignoreMap":25},[106,23270,23271,23273],{"class":108,"line":109},[106,23272,14687],{"class":112},[106,23274,23221],{"class":1955},[106,23276,23277],{"class":108,"line":28},[106,23278,1538],{"class":116},[106,23280,23281,23283],{"class":108,"line":1172},[106,23282,1977],{"class":112},[106,23284,21385],{"class":116},[106,23286,23287,23289,23291],{"class":108,"line":1187},[106,23288,14902],{"class":112},[106,23290,11378],{"class":1955},[106,23292,1968],{"class":116},[106,23294,23295],{"class":108,"line":1193},[106,23296,2022],{"class":116},[106,23298,23299],{"class":108,"line":1207},[106,23300,2392],{"emptyLinePlaceholder":33},[106,23302,23303],{"class":108,"line":1213},[106,23304,2179],{"class":116},[106,23306,23307,23309,23311,23314],{"class":108,"line":1304},[106,23308,11013],{"class":112},[106,23310,22560],{"class":112},[106,23312,23313],{"class":1955}," func1",[106,23315,1968],{"class":116},[106,23317,23318],{"class":108,"line":1310},[106,23319,2022],{"class":116},[106,23321,23322],{"class":108,"line":1322},[106,23323,2392],{"emptyLinePlaceholder":33},[106,23325,23326],{"class":108,"line":1604},[106,23327,2179],{"class":116},[106,23329,23330],{"class":108,"line":1609},[106,23331,3987],{"class":116},[14,23333,23201],{},[14,23335,23336],{},"解释：静态成员函数也不属于类上",[5119,23338,7667],{},{"title":25,"searchDepth":28,"depth":28,"links":23340},[23341,23347],{"id":14638,"depth":28,"text":14639,"children":23342},[23343,23344,23345,23346],{"id":14642,"depth":1172,"text":14643},{"id":15367,"depth":1172,"text":15368},{"id":15539,"depth":1172,"text":15540},{"id":15998,"depth":1172,"text":15999},{"id":18370,"depth":28,"text":18371,"children":23348},[23349,23350,23351,23352,23353,23354,23355,23356,23357],{"id":18382,"depth":1172,"text":18383},{"id":18675,"depth":1172,"text":18676},{"id":19166,"depth":1172,"text":19167},{"id":20263,"depth":1172,"text":20264},{"id":20686,"depth":1172,"text":20687},{"id":21165,"depth":1172,"text":21166},{"id":21540,"depth":1172,"text":21541},{"id":21953,"depth":1172,"text":21954},{"id":22890,"depth":1172,"text":22891},"C++面向对象的三大特性为封装、继承、多态",{},"\u002Fwiki\u002F2026-05-24-c++\u002Fch8",{"title":14603,"description":23358},"wiki\u002F2026-05-24-c++学习\u002Fch8-类和对象","zb3Tc7FBL0NwZ1Abpqpn9O1Rg-UdgPbemeNRscdNci4",{"id":23365,"title":101,"body":23366,"description":30,"extension":31,"meta":23370,"navigation":33,"path":23372,"seo":23373,"stem":23374,"__hash__":23375},"wiki\u002Fwiki\u002F2026-05-24-c++学习\u002Findex.md",{"type":7,"value":23367,"toc":23368},[],{"title":25,"searchDepth":28,"depth":28,"links":23369},[],{"category":23371},"机器人","\u002Fwiki\u002F2026-05-24-c++",{"title":101,"description":30},"wiki\u002F2026-05-24-c++学习\u002Findex","C9n-1L0uN4HGOF9HS37y6tUkSfEeWPo7gZVXtwLRezw",{"id":23377,"title":23378,"body":23379,"description":25,"extension":31,"meta":23970,"navigation":33,"path":23971,"seo":23972,"stem":23973,"__hash__":23974},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识.md","1.强化学习基本认识",{"type":7,"value":23380,"toc":23952},[23381,23384,23388,23391,23394,23397,23415,23420,23423,23426,23429,23432,23437,23440,23445,23448,23451,23455,23458,23461,23467,23470,23488,23492,23496,23499,23504,23507,23511,23514,23527,23530,23534,23537,23540,23543,23568,23571,23580,23591,23606,23638,23642,23649,23657,23661,23664,23667,23672,23676,23679,23682,23687,23690,23694,23697,23700,23705,23708,23712,23717,23721,23788,23792,23795,23798,23801,23804,23807,23813,23834,23837,23851,23860,23864,23867,23870,23875,23878,23883,23888,23891,23894,23899,23904,23907,23912,23917,23920,23925,23930,23933,23936,23941,23944,23949],[10,23382,23378],{"id":23383},"_1强化学习基本认识",[48,23385,23387],{"id":23386},"_11什么是强化学习","1.1.什么是强化学习",[14,23389,23390],{},"强化学习有两部分组成：智能体和环境；",[14,23392,23393],{},"监督学习：①输入的数据（标注的数据）都应是没有关联的；②需要我们告诉学习器正确的标签是什么，学习器会根据正确标签来修正自己的预测",[14,23395,23396],{},"强化学习与监督学习的区别:",[60,23398,23399,23402,23405,23408],{},[63,23400,23401],{},"强化学习输入的样本是序列数据(是时间序列数据)，而不像监督学习里面样本都是独立的",[63,23403,23404],{},"学习器并没有告诉我们每一步正确的动作应该是什么，学习器需要自己去发现哪些动作可以带来最多的奖励，只能通过不停地尝试来发现最有利的动作",[63,23406,23407],{},"智能体获得自己能力的过程，其实是不断地试错探索（trial-and-error exploration）的过程。探索（exploration）和利用（exploitation）是强化学习里面非常核心的问题。其中，探索指尝试一些新的动作,这些新的动作有可能会使我们得到更多的奖励，也有可能使我们“一无所有”；利用指采取已知的可以获得最多奖励的动作，重复执行这个动作，因为我们知道这样做可以获得一定的奖励。因此，我们需要在探索和利用之间进行权衡，这也是在监督学习里面没有的情况",[63,23409,23410,23411,23414],{},"在强化学习过程中，没有非常强的监督者（supervisor），只有 ",[266,23412,23413],{},"奖励信号（reward signal）"," ，并且奖励信号是延迟的，即环境会在很久以后告诉我们之前我们采取的动作到底是不是有效的。因为我们没有得到即时反馈，所以智能体使用强化学习来学习就非常困难。当我们采取一个动作后，如果我们使用监督学习，我们就可以立刻获得一个指导，比如，我们现在采取了一个错误的动作，正确的动作应该是什么。而在强化学习里面，环境可能会告诉我们这个动作是错误的，但是它并没有告诉我们正确的动作是什么。而且更困难的是，它可能是在一两分钟过后告诉我们这个动作是错误的。所以这也是强化学习和监督学习不同的地方",[14,23416,23417],{},[23,23418],{"alt":25,"src":23419},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-001.png",[14,23421,23422],{},"在强化学习过程中，智能体与环境一直在交互。智能体在环境里面获取某个状态后，它会利用该状态输出",[14,23424,23425],{},"一个动作（action），这个动作也称为决策（decision）。然后这个动作会在环境之中被执行，环境会根据智",[14,23427,23428],{},"能体采取的动作，输出下一个状态以及当前这个动作带来的奖励。智能体的目的就是尽可能多地从环境中",[14,23430,23431],{},"获取奖励",[14,23433,23434],{},[23,23435],{"alt":25,"src":23436},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-002.png",[14,23438,23439],{},"强化学习可以分成标准强化学习和深度强化学习",[14,23441,23442],{},[23,23443],{"alt":25,"src":23444},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-003.png",[14,23446,23447],{},"标准强化学习需要先设计很多特征，这些特征可以描述现在整个状态。得到这些特征后，我们就可以通过训练一个分类网络或者分别训练一个价值估计函数来采取动作",[14,23449,23450],{},"深度强化学习是一个端到端训练过程，省去了设计特征，直接输入状态就可以输出动作",[48,23452,23454],{"id":23453},"_12强化学习应用场景","1.2.强化学习应用场景",[14,23456,23457],{},"具身智能、isaaclab中机械臂的仿真任务、无人驾驶等",[14,23459,23460],{},"具身智能中的应用",[14,23462,23463,23466],{},[266,23464,23465],{},"Sim2Real（仿真到现实）："," 由于在现实中训练机器人太慢且危险，RL通常在物理仿真环境中让机器人疯狂试错，获得高奖励的策略，然后迁移到现实",[14,23468,23469],{},"RL与VLA结合可以对VLA模型进行微调和自我修正任务",[14,23471,23472,23473,23476,23477,23480,23481,23484,23485],{},"机器人是",[266,23474,23475],{},"躯体","，深度学习是",[266,23478,23479],{},"神经元****网络","，VLA是",[266,23482,23483],{},"通用的行为逻辑","，而强化学习是",[266,23486,23487],{},"教练",[48,23489,23491],{"id":23490},"_13序列决策","1.3.序列决策",[77,23493,23495],{"id":23494},"_131智能体与环境","1.3.1.智能体与环境",[14,23497,23498],{},"强化学习研究的问题是智能体agent与环境交互的问题",[14,23500,23501],{},[23,23502],{"alt":25,"src":23503},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-004.png",[14,23505,23506],{},"agent把动作输出给环境，环境根据agent的动作会把下一步的观测与这个动作带来的奖励还给agent，交互可以产生非常多的观测，agent的目的就是从这些观测中学到最大化奖励的策略",[77,23508,23510],{"id":23509},"_132奖励","1.3.2.奖励",[14,23512,23513],{},"奖励是由环境给的一种标量的反馈信号（scalar feedback signal），这种信号可显示智能体在某一步采",[14,23515,23516,23517,23526],{},"取某个策略的表现如何。强化学习的目的就是",[266,23518,23519,23520,23525],{},"最大化",[266,23521,23522],{},[266,23523,23524],{},"智能体","可以获得的奖励","，智能体在环境里面存在的目",[14,23528,23529],{},"的就是最大化它的期望的累积奖励（expected cumulative reward）。不同的环境中，奖励也是不同的。",[77,23531,23533],{"id":23532},"_133序列决策","1.3.3.序列决策",[14,23535,23536],{},"强化学习里一个重要的课题就是近期奖励和远期奖励的权衡 （trade-off），研究怎么让agent取得更多的远期奖励",[14,23538,23539],{},"在与环境的交互过程中，智能体会获得很多观测。针对每一个观测，智能体会采取一个动作，也会得",[14,23541,23542],{},"到一个奖励。所以历史是观测、动作、奖励的序列：",[14,23544,23545,23549,23550,23552,23553,23555,23556,23558,23559,13788,23562,13788,23565],{},[23546,23547,23548],"em",{},"Ht"," = ",[23546,23551,713],{},"1*, a",[23546,23554,334],{},", r",[23546,23557,334],{},", . . . ,* ",[23546,23560,23561],{},"ot",[23546,23563,23564],{},", at ,",[23546,23566,23567],{},"rt",[14,23569,23570],{},"智能体在采取当前动作的时候会依赖于它之前得到的历史，所以我们可以把整个游戏的状态看成关于这个历史的函数：",[14,23572,23573,23549,23576,1650,23578,546],{},[23546,23574,23575],{},"st",[23546,23577,169],{},[23546,23579,23548],{},[14,23581,23582,23583,23586,23587,23590],{},"环境有自己的函数来更新状态，在智能体的内部也有一个函数来更新状态。当智能体的状态与环境的状态等价的时候，即当智能体能够观察到环境的所有状态时，我们称这个环境是 ",[266,23584,23585],{},"完全可观测的（fully observed）"," 。在这种情况下面，强化学习通常被建模成一个 ",[266,23588,23589],{},"马尔可夫决策过程（Markov decision process，MDP）"," 的问题。",[14,23592,23593,23594,23597,23598,23601,23602,23605],{},"当智能体只能看到部分的观测，我们就称这个环境是 ",[266,23595,23596],{},"部分可观测的（partially observed）。"," 在这种情况下，强化学习通常被建模成 ",[266,23599,23600],{},"部分可观测马尔可夫决策过程（partially observable Markov decision process, POMDP）"," 的问题。部分可观测马尔可夫决策过程是马尔可夫决策过程的一种泛化。部分可观测马尔可夫决策过程依然具有马尔可夫性质，但是假设智能体无法感知环境的状态，只能知道部分观测值。比如在自动驾驶中，智能体只能感知传感器采集的有限的环境信息。部分可观测马尔可夫决策过程可以用一个七元组描述：(",[23546,23603,23604],{},"S, A, T, R, Ω, O, γ",")。",[14,23607,23608,23609,23611,23612,23614,23615,117,23617,23620,23621,23623,23624,117,23627,23630,23631,23633,23634,23637],{},"其中 ",[23546,23610,806],{}," 表示状态空间，为隐变量，",[23546,23613,349],{}," 为动作空间，",[23546,23616,831],{},[23546,23618,23619],{},"s ′ |s, a",") 为状态转移概率，",[23546,23622,781],{}," 为奖励函数，",[23546,23625,23626],{},"Ω",[23546,23628,23629],{},"o|s, a",") 为观测概率，",[23546,23632,707],{}," 为观测空间，",[23546,23635,23636],{},"γ"," 为折扣因子。",[48,23639,23641],{"id":23640},"_14动作空间","1.4.动作空间",[14,23643,23644,23645,23648],{},"不同的环境允许不同种类的动作。在给定的环境中，有效动作的集合经常被称为 ",[266,23646,23647],{},"动作空间"," ，动作空间分为:",[60,23650,23651,23654],{},[63,23652,23653],{},"离散动作空间:在该空间中，智能体的动作数量是有限的",[63,23655,23656],{},"连续动作空间：在其他环境，比如在物理世界中控制一个智能体，在这个环境中就有连续动作空间，在连续动作空间中，动作是实值的向量",[48,23658,23660],{"id":23659},"_15强化学习智能体的组成成分和类型","1.5.强化学习智能体的组成成分和类型",[14,23662,23663],{},"由策略、价值函数、模型三部分组成",[14,23665,23666],{},"这三者组成马尔可夫决策过程",[14,23668,23669],{},[23,23670],{"alt":25,"src":23671},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-005.png",[77,23673,23675],{"id":23674},"_151策略","1.5.1.策略",[14,23677,23678],{},"策略是智能体的动作模型，它决定了智能体的动作。它其实是一个函数，用于把输入的状态变成动作。",[14,23680,23681],{},"策略可分为两种：",[14,23683,23684],{},[23,23685],{"alt":25,"src":23686},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-006.png",[14,23688,23689],{},"强化学习一般使用的是随机性策略，相比于确定性策略使得agent对同样的状态采用相同的动作，随机性策略动作具有多样性，在智能体博弈时非常重要",[77,23691,23693],{"id":23692},"_152价值函数","1.5.2.价值函数",[14,23695,23696],{},"这个函数是对未来奖励的预测-->评估状态的好坏",[14,23698,23699],{},"价值函数中有一个折扣因子，类似于存款利息",[14,23701,23702],{},[23,23703],{"alt":25,"src":23704},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-007.png",[14,23706,23707],{},"进入某个状态采取的最优动作可以通过Q函数得到",[77,23709,23711],{"id":23710},"_153模型","1.5.3.模型",[14,23713,23714],{},[23,23715],{"alt":25,"src":23716},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-008.png",[48,23718,23720],{"id":23719},"_16强化学习智能体的类型","1.6.强化学习智能体的类型",[254,23722,23723,23734],{},[257,23724,23725],{},[260,23726,23727,23731],{},[263,23728,23730],{"align":23729},"left","类型",[263,23732,23733],{"align":23729},"特点",[301,23735,23736,23746,23756,23766,23778],{},[260,23737,23738,23743],{},[306,23739,23740],{"align":23729},[266,23741,23742],{},"基于价值的智能体",[306,23744,23745],{"align":23729},"显式地学习价值函数，隐式地学习它的策略。 策略是其从学到的价值函数里面推算出来的。",[260,23747,23748,23753],{},[306,23749,23750],{"align":23729},[266,23751,23752],{},"基于策略的智能体",[306,23754,23755],{"align":23729},"直接学习策略，没有学习价值函数",[260,23757,23758,23763],{},[306,23759,23760],{"align":23729},[266,23761,23762],{},"演员-评论员智能体",[306,23764,23765],{"align":23729},"基于策略的智能体和基于价值智能体的结合版，将策略和价值都学习了，通过两者的交互得到最佳动作",[260,23767,23768,23773],{},[306,23769,23770],{"align":23729},[266,23771,23772],{},"有模型强化学习智能体",[306,23774,23775],{"align":23729},[23,23776],{"alt":25,"src":23777},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-009.png",[260,23779,23780,23785],{},[306,23781,23782],{"align":23729},[266,23783,23784],{},"免模型强化学习智能体",[306,23786,23787],{"align":23729},"没有去直接估计状态的转移，也没有得到环境的具体转移量，它通过学习价值函数和策略函数进行决策，没有环境转移的模型 不对环境建模，直接与真实环境交互学习得到最优策略",[48,23789,23791],{"id":23790},"_17剩余强化学习概念知识","1.7.剩余强化学习概念知识",[14,23793,23794],{},"学习和规划是序列决策的两个基本问题",[14,23796,23797],{},"一个常用的强化学习问题解决思路：先学习环境如何工作，也就是了解环境工作的方式，即学习得到一个模型，然后利用这个模型进行规划",[14,23799,23800],{},"在强化学习里面，探索和利用是两个很核心的问题。探索即我们去探索环境，通过尝试不同的动作来得到最佳的策略（带来最大奖励的策略）。利用即我们不去尝试新的动作，而是采取已知的可以带来很大奖励的动作",[14,23802,23803],{},"强化学习用到的库：Gym",[14,23805,23806],{},"Gym可以检验强化学习算法的优劣",[14,23808,23809,23812],{},[266,23810,23811],{},"Gym 库"," 是一个环境仿真库，里面包含很多现有的环境。针对不同的场景，我们可以选择不同的环境。离散控制场景一般使用雅达利环境评估；连续控制场景一 般使用 MuJoCo 环境评估",[97,23814,23818],{"className":23815,"code":23816,"language":23817,"meta":25,"style":25},"language-bash shiki shiki-themes github-light github-dark","pip install gym==0.25.2\n","bash",[103,23819,23820],{"__ignoreMap":25},[106,23821,23822,23825,23828,23831],{"class":108,"line":109},[106,23823,23824],{"class":1955},"pip",[106,23826,23827],{"class":221}," install",[106,23829,23830],{"class":221}," gym==",[106,23832,23833],{"class":165},"0.25.2\n",[14,23835,23836],{},"显示图形界面需要",[97,23838,23840],{"className":23815,"code":23839,"language":23817,"meta":25,"style":25},"pip install pygame\n",[103,23841,23842],{"__ignoreMap":25},[106,23843,23844,23846,23848],{"class":108,"line":109},[106,23845,23824],{"class":1955},[106,23847,23827],{"class":221},[106,23849,23850],{"class":221}," pygame\n",[14,23852,23853,23854],{},"有关Gym库的相关文档介绍：",[355,23855,23859],{"href":23856,"rel":23857},"https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic%5C_usage\u002F",[23858],"nofollow","https:\u002F\u002Fgymnasium.org.cn\u002Fintroduction\u002Fbasic\\_usage\u002F",[48,23861,23863],{"id":23862},"_18一些补充基础概念","1.8.一些补充基础概念",[14,23865,23866],{},"强化学习的过程:强化学习中会使用概率密度函数来表示智能体根据当前的状态所作的动作的概率情况，智能体在执行动作之后，此时会得到一个奖励函数，此时会更新智能体的状态",[14,23868,23869],{},"St时刻的奖励函数肯定要比St+1时刻的奖励函数要值钱一些的，因为St时刻的奖励获得后，St+1时刻的奖励不一定就会获得，所以要给未来的奖励打折扣，所以折扣回报如下:",[14,23871,23872],{},[23,23873],{"alt":25,"src":23874},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-010.png",[14,23876,23877],{},"折扣率需要自己来设定",[14,23879,23880],{},[23,23881],{"alt":25,"src":23882},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-011.png",[60,23884,23885],{},[63,23886,23887],{},"状态转移函数：",[14,23889,23890],{},"指的是在状态 s下执行动作a后，环境有多大可能会进入每一个可能的下一个状态s'",[14,23892,23893],{},"例如角色在坐标中运动，得到的信息会是下方这种情况",[14,23895,23896],{},[23,23897],{"alt":25,"src":23898},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-012.png",[60,23900,23901],{"start":28},[63,23902,23903],{},"动作价值函数：",[14,23905,23906],{},"在t时刻并不知道这个折扣函数Ut是啥，所以可以对Ut求期望，QΠ只依赖于当前的状态St和动作at，动作价值可以反映当前状态St下，智能体做动作at的好坏程度",[14,23908,23909],{},[23,23910],{"alt":25,"src":23911},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-013.png",[60,23913,23914],{"start":1172},[63,23915,23916],{},"最优动作价值函数：",[14,23918,23919],{},"这个函数是对QΠ关于策略Π求最大化，表示不管用什么样的策略函数Π，要使agent在当前状态St下做动作at，回报Ut的期望顶多为Q*，而且Q*函数跟策略函数中的Π是无关的，只要agent现在做了动作a，那么Q*(St,at)就是最好的结果，即使现在你将策略函数Π改进的再好，获得的期望汇报Ut也不可能比Q*(St,at)更好；Q*反映了基于当前状态St做出at的好坏程度，也就是说Q*函数可以指导agent做决策：agent观测当前的状态st，Q*函数会给所有的动作打分，agent会基于这个分数来做决策，这样期望回报会最大化",[14,23921,23922],{},[23,23923],{"alt":25,"src":23924},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-014.png",[60,23926,23927],{"start":1187},[63,23928,23929],{},"状态价值函数:",[14,23931,23932],{},"在遵循某个特定策略 π 的情况下，从状态 s 开始，所能获得的期望折扣回报（平均长期总收益）",[14,23934,23935],{},"它衡量的是“一个具体动作”的长期价值",[14,23937,23938],{},[23,23939],{"alt":25,"src":23940},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-015.png",[14,23942,23943],{},"几个价值函数之间的比较：",[14,23945,23946],{},[23,23947],{"alt":25,"src":23948},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-016.png",[5119,23950,23951],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":28,"depth":28,"links":23953},[23954,23955,23956,23961,23962,23967,23968,23969],{"id":23386,"depth":28,"text":23387},{"id":23453,"depth":28,"text":23454},{"id":23490,"depth":28,"text":23491,"children":23957},[23958,23959,23960],{"id":23494,"depth":1172,"text":23495},{"id":23509,"depth":1172,"text":23510},{"id":23532,"depth":1172,"text":23533},{"id":23640,"depth":28,"text":23641},{"id":23659,"depth":28,"text":23660,"children":23963},[23964,23965,23966],{"id":23674,"depth":1172,"text":23675},{"id":23692,"depth":1172,"text":23693},{"id":23710,"depth":1172,"text":23711},{"id":23719,"depth":28,"text":23720},{"id":23790,"depth":28,"text":23791},{"id":23862,"depth":28,"text":23863},{},"\u002Fwiki\u002F2025-12-04\u002Fch1",{"title":23378,"description":25},"wiki\u002F2025-12-04-强化学习\u002Fch1-强化学习的基本认识","QQJgDM8AHMQ2lFI0H5HtcYYpQ6x5K4ccUrZvuGfUAxM",{"id":23976,"title":23977,"body":23978,"description":23985,"extension":31,"meta":23996,"navigation":33,"path":23997,"seo":23998,"stem":23999,"__hash__":24000},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程.md","2.马尔可夫决策过程",{"type":7,"value":23979,"toc":23994},[23980,23983,23986,23991],[10,23981,23977],{"id":23982},"_2马尔可夫决策过程",[14,23984,23985],{},"这是强化学习的基本框架",[14,23987,23988],{},[23,23989],{"alt":25,"src":23990},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-017.png",[14,23992,23993],{},"马尔可夫过程指的是状态，核心为单步状态依赖",{"title":25,"searchDepth":28,"depth":28,"links":23995},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch2",{"title":23977,"description":23985},"wiki\u002F2025-12-04-强化学习\u002Fch2-马尔可夫决策过程","V3fB9MQC6Z7cMbsh_eQBMmJ6frTaqyZrzXVsFs9eZSM",{"id":24002,"title":24003,"body":24004,"description":25,"extension":31,"meta":24120,"navigation":33,"path":24121,"seo":24122,"stem":24123,"__hash__":24124},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数.md","3.动作价值函数",{"type":7,"value":24005,"toc":24115},[24006,24009,24013,24016,24021,24026,24029,24034,24037,24042,24045,24049,24054,24057,24062,24067,24072,24075,24079,24084,24087,24092,24097,24102,24107,24110],[10,24007,24003],{"id":24008},"_3动作价值函数",[48,24010,24012],{"id":24011},"_31dqn","3.1.DQN",[14,24014,24015],{},"Deep Q-Network是一种价值学习的方法，用一个神经网络去近似Q*函数，将神经网络近似为Q（s,a;w）",[14,24017,24018],{},[23,24019],{"alt":25,"src":24020},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-018.png",[14,24022,24023],{},[23,24024],{"alt":25,"src":24025},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-019.png",[14,24027,24028],{},"DQN算法的描述：",[14,24030,24031],{},[23,24032],{"alt":25,"src":24033},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-020.png",[14,24035,24036],{},"这里的Dense指的是全连接层",[14,24038,24039],{},[23,24040],{"alt":25,"src":24041},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-021.png",[14,24043,24044],{},"当前观测的状态为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算法",[48,24046,24048],{"id":24047},"_32dqn的举例","3.2.DQN的举例",[14,24050,24051],{},[23,24052],{"alt":25,"src":24053},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-022.png",[14,24055,24056],{},"上方进行模型预测的话需要完成整个过程才可以对模型进行更新，使用TD算法可以改进这一问题，不需要完成整个过程，只需要利用其中的一段过程来更新模型",[14,24058,24059],{},[23,24060],{"alt":25,"src":24061},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-023.png",[14,24063,24064],{},[23,24065],{"alt":25,"src":24066},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-024.png",[14,24068,24069],{},[23,24070],{"alt":25,"src":24071},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-025.png",[14,24073,24074],{},"TD算法的原理是尽可能的让TD error=0(预计时间与实际时间相等)，TD算法要用梯度下降来减少TD error",[48,24076,24078],{"id":24077},"_33td算法","3.3.TD算法",[14,24080,24081],{},[23,24082],{"alt":25,"src":24083},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-026.png",[14,24085,24086],{},"强化学习TD算法公式的粗略解释：",[14,24088,24089],{},[23,24090],{"alt":25,"src":24091},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-027.png",[14,24093,24094],{},[23,24095],{"alt":25,"src":24096},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-028.png",[14,24098,24099],{},[23,24100],{"alt":25,"src":24101},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-029.png",[14,24103,24104],{},[23,24105],{"alt":25,"src":24106},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-030.png",[14,24108,24109],{},"TD算法总结：",[14,24111,24112],{},[23,24113],{"alt":25,"src":24114},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-031.png",{"title":25,"searchDepth":28,"depth":28,"links":24116},[24117,24118,24119],{"id":24011,"depth":28,"text":24012},{"id":24047,"depth":28,"text":24048},{"id":24077,"depth":28,"text":24078},{},"\u002Fwiki\u002F2025-12-04\u002Fch3",{"title":24003,"description":25},"wiki\u002F2025-12-04-强化学习\u002Fch3-动作价值函数","hOI8u98eYzg8VeCIrCMpe_y_lDcQnTxfrNA8iN4Vl7g",{"id":24126,"title":24127,"body":24128,"description":25,"extension":31,"meta":24361,"navigation":33,"path":24362,"seo":24363,"stem":24364,"__hash__":24365},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch4-策略函数.md","4.策略学习",{"type":7,"value":24129,"toc":24357},[24130,24133,24137,24140,24143,24148,24153,24156,24161,24166,24169,24174,24177,24182,24185,24190,24193,24198,24201,24206,24211,24214,24219,24222,24225,24230,24233,24238,24243,24247,24250,24253,24258,24263,24266,24271,24276,24279,24284,24287,24290,24295,24298,24303,24306,24311,24316,24319,24324,24329,24332,24337,24340,24345,24348],[10,24131,24127],{"id":24132},"_4策略学习",[48,24134,24136],{"id":24135},"_41概念描述","4.1.概念描述",[14,24138,24139],{},"用神经网络（策略网络）近似策略函数",[14,24141,24142],{},"策略函数是一个概率密度函数，可以用它来自动控制agent运动，输入是状态s，输出是一个概率分布",[14,24144,24145],{},[23,24146],{"alt":25,"src":24147},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-032.png",[14,24149,24150],{},[23,24151],{"alt":25,"src":24152},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-033.png",[14,24154,24155],{},"softmax函数这个激活函数可以让输出都为正数，且加和为1，策略函数必须满足如下性质：对于所有可能的动作A，把Π函数的输出全部加起来必须要等于1",[14,24157,24158],{},[23,24159],{"alt":25,"src":24160},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-034.png",[14,24162,24163],{},[23,24164],{"alt":25,"src":24165},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-035.png",[14,24167,24168],{},"使用神经网络来近似策略函数，这样的话VΠ(St)就变为了VΠ(St,theta)，theta是神经网络中的参数 实现策略网络近似策略函数，V可以评价状态S和策略网络的好坏，给定状态S和策略网络越好，则V值越大",[14,24170,24171],{},[23,24172],{"alt":25,"src":24173},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-036.png",[14,24175,24176],{},"所以关键在于让策略网络变得越来越好：改变模型参数theta，让V(St,theta)变大，基于此我们可以把目标函数定义为V(St,theta)的期望J(theta)，这个期望是关于状态s来求解的，将状态S作为随机变量用期望的形式将其去掉，这样就只剩theta--->J(theta)就是对策略网络的评价（策略网络i越好，J(theta)就越大）",[14,24178,24179],{},[23,24180],{"alt":25,"src":24181},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-037.png",[14,24183,24184],{},"改进theta要用到策略梯度算法",[14,24186,24187],{},[23,24188],{"alt":25,"src":24189},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-038.png",[14,24191,24192],{},"这里采用梯度上升的形式实现theta更新(我们希望theta变大以提高J值)",[14,24194,24195],{},[23,24196],{"alt":25,"src":24197},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-039.png",[14,24199,24200],{},"假设QΠ(s,a)不依赖于theta，不影响最后结果的，即使QΠ是theta的导数最终结果也依然是如下的结果",[14,24202,24203],{},[23,24204],{"alt":25,"src":24205},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-040.png",[14,24207,24208],{},[23,24209],{"alt":25,"src":24210},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-041.png",[14,24212,24213],{},"梯度公式总结：",[14,24215,24216],{},[23,24217],{"alt":25,"src":24218},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-042.png",[14,24220,24221],{},"两个公式的分别应用场景：",[14,24223,24224],{},"对于离散的动作：",[14,24226,24227],{},[23,24228],{"alt":25,"src":24229},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-043.png",[14,24231,24232],{},"对于连续的动作：",[14,24234,24235],{},[23,24236],{"alt":25,"src":24237},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-044.png",[14,24239,24240],{},[23,24241],{"alt":25,"src":24242},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-045.png",[48,24244,24246],{"id":24245},"_42概率梯度算法总结","4.2.概率梯度算法总结",[14,24248,24249],{},"使用蒙特卡洛来近似计算策略梯度",[14,24251,24252],{},"蒙特卡洛法的解释如下：",[14,24254,24255],{},[23,24256],{"alt":25,"src":24257},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-046.png",[14,24259,24260],{},[23,24261],{"alt":25,"src":24262},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-047.png",[14,24264,24265],{},"但是现在存在一个问题，并不知道动作价值函数的值(QΠ(St,at))，可以通过如下两个办法来近似qt",[60,24267,24268],{},[63,24269,24270],{},"方法一：reinforce算法",[14,24272,24273],{},[23,24274],{"alt":25,"src":24275},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-048.png",[14,24277,24278],{},"用策略网络来控制agent的运动，从一开始到玩到游戏结束，把整个游戏的轨迹都记录下来了，观测到所有的奖励R，我们可以算出折扣汇报Ut，由于价值函数QΠ(St,at)是大于Ut的期望，所以可以用Ut的观测值ut来近似QΠ，这个REINFORCE算法就是用观测到的ut来代替QΠ函数，这个算法需要玩完一局游戏，观测到所有的奖励，然后才可以更新策略网络",[60,24280,24281],{"start":28},[63,24282,24283],{},"方法二：actor-critic算法",[14,24285,24286],{},"这一方法是用一个神经网络来做函数近似QΠ，这样加上之前用神经网络近似的策略函数Π，总共有两个神经网络，一个被称为actor，一个被称为critic，这个方法就是actor-critic方法，这个方法将策略学习与价值学习结合起来（策略网络用来控制agent的运动，可以将策略网络理解为体操运动员，要做一连串的动作；价值网络用来评价动作的好坏，可以将价值网络理解为裁判或评委，给运动员动作打分；终极目标是训练这个策略函数Π，也就是这个运动员，价值网络作为裁判起辅助作用，最后训好就不再用了）",[14,24288,24289],{},"两个网络的构建：",[14,24291,24292],{},[23,24293],{"alt":25,"src":24294},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-049.png",[14,24296,24297],{},"actor网路：",[14,24299,24300],{},[23,24301],{"alt":25,"src":24302},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-050.png",[14,24304,24305],{},"critic网络",[14,24307,24308],{},[23,24309],{"alt":25,"src":24310},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-051.png",[60,24312,24313],{"start":1172},[63,24314,24315],{},"网络的训练",[14,24317,24318],{},"网络描述",[14,24320,24321],{},[23,24322],{"alt":25,"src":24323},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-052.png",[14,24325,24326],{},[23,24327],{"alt":25,"src":24328},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-053.png",[14,24330,24331],{},"TD算法更新梯度：",[14,24333,24334],{},[23,24335],{"alt":25,"src":24336},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-054.png",[14,24338,24339],{},"策略网络更新梯度：",[14,24341,24342],{},[23,24343],{"alt":25,"src":24344},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-055.png",[14,24346,24347],{},"训练整个流程的具体描述：",[14,24349,24350,24353,24354],{},[23,24351],{"alt":25,"src":24352},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-056.png","\n4.  算法步骤总结：\n",[23,24355],{"alt":25,"src":24356},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-057.png",{"title":25,"searchDepth":28,"depth":28,"links":24358},[24359,24360],{"id":24135,"depth":28,"text":24136},{"id":24245,"depth":28,"text":24246},{},"\u002Fwiki\u002F2025-12-04\u002Fch4",{"title":24127,"description":25},"wiki\u002F2025-12-04-强化学习\u002Fch4-策略函数","iPTq7imHbOiAmdpc63dBoleY9XDApFgwiwvhpbNentI",{"id":24367,"title":24368,"body":24369,"description":24376,"extension":31,"meta":24426,"navigation":33,"path":24427,"seo":24428,"stem":24429,"__hash__":24430},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法.md","5.Alphago算法",{"type":7,"value":24370,"toc":24422},[24371,24374,24377,24381,24384,24389,24393,24396,24401,24404,24409,24414,24417],[10,24372,24368],{"id":24373},"_5alphago算法",[14,24375,24376],{},"这一算法有两种实现形式：通过模仿学习来训练策略网络或通过强化学习来训练策略网络",[48,24378,24380],{"id":24379},"_51behavior-cloning训练策略网络","5.1.Behavior cloning训练策略网络",[14,24382,24383],{},"使用behavior cloning来训练策略网络，模仿人类的动作来实现任务的，不会用到rewards奖励；behavior cloning的缺陷是无法保证状态St一定出现在训练数据中，策略网络没有见过状态St，策略网络的决策at就会比较差，会使得错误累加，导致状态变得越来越奇怪",[14,24385,24386],{},[23,24387],{"alt":25,"src":24388},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-058.png",[48,24390,24392],{"id":24391},"_52上述弊端的解决方式","5.2.上述弊端的解决方式",[14,24394,24395],{},"采用强化学习的方式训练策略网络",[14,24397,24398],{},[23,24399],{"alt":25,"src":24400},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-059.png",[14,24402,24403],{},"Alphago让两个策略网络进行博弈(player和opponent)，Player就是agent，它是由策略网络来控制的，用的是策略网络最新的模型参数，每下完一局围棋，把胜负作为奖励，靠奖励来更新player的参数；opponent相当于环境，它是用来陪agent的，每当player下一个棋子，opponent也要跟着走一步，相当于随机状态转移，opponent也是策略网络来控制的，但是opponent的参数不用学习，随机从旧的参数中选出一个作为opponent的参数即可",[14,24405,24406],{},[23,24407],{"alt":25,"src":24408},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-060.png",[14,24410,24411],{},[23,24412],{"alt":25,"src":24413},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-061.png",[14,24415,24416],{},"强化学习训练策略网络的总结：",[14,24418,24419],{},[23,24420],{"alt":25,"src":24421},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-04-%E5%BC%BA%E5%8C%96%E5%AD%A6%E4%B9%A0-062.png",{"title":25,"searchDepth":28,"depth":28,"links":24423},[24424,24425],{"id":24379,"depth":28,"text":24380},{"id":24391,"depth":28,"text":24392},{},"\u002Fwiki\u002F2025-12-04\u002Fch5-alphago",{"title":24368,"description":24376},"wiki\u002F2025-12-04-强化学习\u002Fch5-Alphago算法","7NankPVCRx1TrpHTCvluPUc71533NNCBPe3Q8v6G_DE",{"id":24432,"title":24433,"body":24434,"description":24441,"extension":31,"meta":24444,"navigation":33,"path":24445,"seo":24446,"stem":24447,"__hash__":24448},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Fch6-价值网络.md","6.价值网络",{"type":7,"value":24435,"toc":24442},[24436,24439],[10,24437,24433],{"id":24438},"_6价值网络",[14,24440,24441],{},"价值网络是对状态价值函数V的近似，而不是对Q的近似",{"title":25,"searchDepth":28,"depth":28,"links":24443},[],{},"\u002Fwiki\u002F2025-12-04\u002Fch6",{"title":24433,"description":24441},"wiki\u002F2025-12-04-强化学习\u002Fch6-价值网络","3cEHo5nTUYq0vWJWE4vi_wjaXMU6_zNuhEXQKUo0VEw",{"id":24450,"title":24451,"body":24452,"description":24456,"extension":31,"meta":24457,"navigation":33,"path":24458,"seo":24459,"stem":24460,"__hash__":24461},"wiki\u002Fwiki\u002F2025-12-04-强化学习\u002Findex.md","强化学习",{"type":7,"value":24453,"toc":24454},[],{"title":25,"searchDepth":28,"depth":28,"links":24455},[],"记录自己的强化学习笔记。",{"category":23371},"\u002Fwiki\u002F2025-12-04",{"title":24451,"description":24456},"wiki\u002F2025-12-04-强化学习\u002Findex","mU4IQte9eGoyxGmnQYAjswHUQyt6-Sy7KQ-XeruBDHA",{"id":24463,"title":24464,"body":24465,"description":30,"extension":31,"meta":24504,"navigation":33,"path":24505,"seo":24506,"stem":24507,"__hash__":24508},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源.md","1. 项目概览与官方资源",{"type":7,"value":24466,"toc":24502},[24467,24470,24473,24479,24482,24488,24491,24496,24499],[10,24468,24464],{"id":24469},"_1-项目概览与官方资源",[14,24471,24472],{},"官方文档：",[14,24474,24475],{},[355,24476,24477],{"href":24477,"rel":24478},"https:\u002F\u002Fhuggingface.co\u002Fdocs\u002Flerobot\u002Fso101",[23858],[14,24480,24481],{},"官方代码仓库：",[14,24483,24484],{},[355,24485,24486],{"href":24486,"rel":24487},"https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot",[23858],[14,24489,24490],{},"复现大体流程：",[14,24492,24493],{},[23,24494],{"alt":25,"src":24495},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-001.png",[14,24497,24498],{},"本教程的目标是打通这条链路：",[14,24500,24501],{},"硬件连通 -> 遥操采集 -> 数据集上传 -> ACT 训练 -> 策略回放\u002F部署。",{"title":25,"searchDepth":28,"depth":28,"links":24503},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch1",{"title":24464,"description":30},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch1-项目概览与官方资源","aG5q21Mq3Ar_oYCKvVnhRqPnnBwQLIhGvrE7YSibWFk",{"id":24510,"title":24511,"body":24512,"description":30,"extension":31,"meta":24628,"navigation":33,"path":24629,"seo":24630,"stem":24631,"__hash__":24632},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接.md","2. 环境准备与设备连接",{"type":7,"value":24513,"toc":24623},[24514,24517,24521,24524,24531,24535,24538,24547,24557,24561,24591,24594,24620],[10,24515,24511],{"id":24516},"_2-环境准备与设备连接",[48,24518,24520],{"id":24519},"_21-系统与环境","2.1 系统与环境",[14,24522,24523],{},"可用系统：Linux \u002F Windows(Wsl2) \u002F macOS。",[14,24525,24526,24527,24530],{},"建议使用 conda 创建独立虚拟环境，并按官方文档安装 ",[103,24528,24529],{},"lerobot"," 依赖。",[48,24532,24534],{"id":24533},"_22-机械臂串口识别","2.2 机械臂串口识别",[14,24536,24537],{},"需要用拓展坞把 usb 和电源接到 MotorBus。执行端口探测命令：",[97,24539,24541],{"className":23815,"code":24540,"language":23817,"meta":25,"style":25},"lerobot-find-out\n",[103,24542,24543],{"__ignoreMap":25},[106,24544,24545],{"class":108,"line":109},[106,24546,24540],{"class":1955},[14,24548,24549,24550,329,24553,24556],{},"按提示断开\u002F接回线缆后，记录识别出的串口（如 ",[103,24551,24552],{},"\u002Fdev\u002FttyACM0",[103,24554,24555],{},"\u002Fdev\u002FttyACM1","）。",[48,24558,24560],{"id":24559},"_23-串口授权","2.3 串口授权",[97,24562,24564],{"className":23815,"code":24563,"language":23817,"meta":25,"style":25},"sudo chmod 666 \u002Fdev\u002FttyACM0\nsudo chmod 666 \u002Fdev\u002FttyACM1\n",[103,24565,24566,24580],{"__ignoreMap":25},[106,24567,24568,24571,24574,24577],{"class":108,"line":109},[106,24569,24570],{"class":1955},"sudo",[106,24572,24573],{"class":221}," chmod",[106,24575,24576],{"class":165}," 666",[106,24578,24579],{"class":221}," \u002Fdev\u002FttyACM0\n",[106,24581,24582,24584,24586,24588],{"class":108,"line":28},[106,24583,24570],{"class":1955},[106,24585,24573],{"class":221},[106,24587,24576],{"class":165},[106,24589,24590],{"class":221}," \u002Fdev\u002FttyACM1\n",[14,24592,24593],{},"说明：",[1124,24595,24596,24601,24607,24617],{},[63,24597,24598,24600],{},[103,24599,24570],{},"：以 root 权限执行命令。",[63,24602,24603,24606],{},[103,24604,24605],{},"chmod","：修改设备节点权限。",[63,24608,24609,24612,24613,24616],{},[103,24610,24611],{},"666","：",[103,24614,24615],{},"rw-rw-rw-","，所有用户可读写。",[63,24618,24619],{},"串口号必须替换为你机器上的真实端口。",[5119,24621,24622],{},"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":25,"searchDepth":28,"depth":28,"links":24624},[24625,24626,24627],{"id":24519,"depth":28,"text":24520},{"id":24533,"depth":28,"text":24534},{"id":24559,"depth":28,"text":24560},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch2",{"title":24511,"description":30},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch2-环境准备与设备连接","rkCwGsCF9P0Hxf6FNqwOMf_cN32ap76nbDFqDZjilSg",{"id":24634,"title":24635,"body":24636,"description":30,"extension":31,"meta":24797,"navigation":33,"path":24798,"seo":24799,"stem":24800,"__hash__":24801},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准.md","3. 电机ID配置与机械臂校准",{"type":7,"value":24637,"toc":24793},[24638,24642,24646,24652,24655,24712,24715,24719,24722,24790],[10,24639,24641],{"id":24640},"_3-电机-id-配置与机械臂校准","3. 电机 ID 配置与机械臂校准",[48,24643,24645],{"id":24644},"_31-配置电机-id","3.1 配置电机 ID",[14,24647,24648,24649,24651],{},"每个电机都需要唯一 ID。新电机默认常见为 ",[103,24650,334],{},"，需要改成机械臂链路里不冲突的编号。",[14,24653,24654],{},"方式一：用 LeRobot 命令逐步写入。",[97,24656,24658],{"className":23815,"code":24657,"language":23817,"meta":25,"style":25},"# 主臂舵机配置 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",[103,24659,24660,24665,24673,24680,24685,24689,24694,24700,24707],{"__ignoreMap":25},[106,24661,24662],{"class":108,"line":109},[106,24663,24664],{"class":175},"# 主臂舵机配置 ID\n",[106,24666,24667,24670],{"class":108,"line":28},[106,24668,24669],{"class":1955},"lerobot-setup-motors",[106,24671,24672],{"class":165}," \\\n",[106,24674,24675,24678],{"class":108,"line":1172},[106,24676,24677],{"class":165},"  --teleop.type=so101_leader",[106,24679,24672],{"class":165},[106,24681,24682],{"class":108,"line":1187},[106,24683,24684],{"class":165},"  --teleop.port=\u002Fdev\u002FttyACM0\n",[106,24686,24687],{"class":108,"line":1193},[106,24688,2392],{"emptyLinePlaceholder":33},[106,24690,24691],{"class":108,"line":1207},[106,24692,24693],{"class":175},"# 从臂舵机配置 ID\n",[106,24695,24696,24698],{"class":108,"line":1213},[106,24697,24669],{"class":1955},[106,24699,24672],{"class":165},[106,24701,24702,24705],{"class":108,"line":1304},[106,24703,24704],{"class":165},"  --robot.type=so101_follower",[106,24706,24672],{"class":165},[106,24708,24709],{"class":108,"line":1310},[106,24710,24711],{"class":165},"  --robot.port=\u002Fdev\u002FttyACM1\n",[14,24713,24714],{},"方式二：使用对应舵机厂商调试工具改 ID（排障时也常用）。",[48,24716,24718],{"id":24717},"_32-机械臂校准","3.2 机械臂校准",[14,24720,24721],{},"校准时先把关节放到行程中间位置，按提示在全行程内运动每个关节。",[97,24723,24725],{"className":23815,"code":24724,"language":23817,"meta":25,"style":25},"# 主臂校准\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",[103,24726,24727,24732,24739,24745,24752,24757,24761,24766,24772,24778,24785],{"__ignoreMap":25},[106,24728,24729],{"class":108,"line":109},[106,24730,24731],{"class":175},"# 主臂校准\n",[106,24733,24734,24737],{"class":108,"line":28},[106,24735,24736],{"class":1955},"lerobot-calibrate",[106,24738,24672],{"class":165},[106,24740,24741,24743],{"class":108,"line":1172},[106,24742,24677],{"class":165},[106,24744,24672],{"class":165},[106,24746,24747,24750],{"class":108,"line":1187},[106,24748,24749],{"class":165},"  --teleop.port=\u002Fdev\u002FttyACM0",[106,24751,24672],{"class":165},[106,24753,24754],{"class":108,"line":1193},[106,24755,24756],{"class":165},"  --teleop.id=my_awesome_leader_arm\n",[106,24758,24759],{"class":108,"line":1207},[106,24760,2392],{"emptyLinePlaceholder":33},[106,24762,24763],{"class":108,"line":1213},[106,24764,24765],{"class":175},"# 从臂校准\n",[106,24767,24768,24770],{"class":108,"line":1304},[106,24769,24736],{"class":1955},[106,24771,24672],{"class":165},[106,24773,24774,24776],{"class":108,"line":1310},[106,24775,24704],{"class":165},[106,24777,24672],{"class":165},[106,24779,24780,24783],{"class":108,"line":1322},[106,24781,24782],{"class":165},"  --robot.port=\u002Fdev\u002FttyACM1",[106,24784,24672],{"class":165},[106,24786,24787],{"class":108,"line":1604},[106,24788,24789],{"class":165},"  --robot.id=my_awesome_follower_arm\n",[5119,24791,24792],{},"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":25,"searchDepth":28,"depth":28,"links":24794},[24795,24796],{"id":24644,"depth":28,"text":24645},{"id":24717,"depth":28,"text":24718},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch3-id",{"title":24635,"description":30},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch3-电机ID配置与机械臂校准","FWPrvO5PLjTaitrb_QEQTCyLpoBM2eeoOlKlR4HoLMc",{"id":24803,"title":24804,"body":24805,"description":30,"extension":31,"meta":24996,"navigation":33,"path":24997,"seo":24998,"stem":24999,"__hash__":25000},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入.md","4. 遥操与相机接入",{"type":7,"value":24806,"toc":24992},[24807,24810,24814,24861,24865,24878,24941,24944,24989],[10,24808,24804],{"id":24809},"_4-遥操与相机接入",[48,24811,24813],{"id":24812},"_41-不带相机遥操","4.1 不带相机遥操",[97,24815,24817],{"className":23815,"code":24816,"language":23817,"meta":25,"style":25},"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",[103,24818,24819,24826,24832,24838,24845,24851,24857],{"__ignoreMap":25},[106,24820,24821,24824],{"class":108,"line":109},[106,24822,24823],{"class":1955},"lerobot-teleoperate",[106,24825,24672],{"class":165},[106,24827,24828,24830],{"class":108,"line":28},[106,24829,24704],{"class":165},[106,24831,24672],{"class":165},[106,24833,24834,24836],{"class":108,"line":1172},[106,24835,24782],{"class":165},[106,24837,24672],{"class":165},[106,24839,24840,24843],{"class":108,"line":1187},[106,24841,24842],{"class":165},"  --robot.id=my_awesome_follower_arm",[106,24844,24672],{"class":165},[106,24846,24847,24849],{"class":108,"line":1193},[106,24848,24677],{"class":165},[106,24850,24672],{"class":165},[106,24852,24853,24855],{"class":108,"line":1207},[106,24854,24749],{"class":165},[106,24856,24672],{"class":165},[106,24858,24859],{"class":108,"line":1213},[106,24860,24756],{"class":165},[48,24862,24864],{"id":24863},"_42-查找相机并启用可视化","4.2 查找相机并启用可视化",[97,24866,24868],{"className":23815,"code":24867,"language":23817,"meta":25,"style":25},"lerobot-find-cameras opencv\n",[103,24869,24870],{"__ignoreMap":25},[106,24871,24872,24875],{"class":108,"line":109},[106,24873,24874],{"class":1955},"lerobot-find-cameras",[106,24876,24877],{"class":221}," opencv\n",[97,24879,24881],{"className":23815,"code":24880,"language":23817,"meta":25,"style":25},"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",[103,24882,24883,24889,24895,24901,24907,24917,24923,24929,24936],{"__ignoreMap":25},[106,24884,24885,24887],{"class":108,"line":109},[106,24886,24823],{"class":1955},[106,24888,24672],{"class":165},[106,24890,24891,24893],{"class":108,"line":28},[106,24892,24704],{"class":165},[106,24894,24672],{"class":165},[106,24896,24897,24899],{"class":108,"line":1172},[106,24898,24782],{"class":165},[106,24900,24672],{"class":165},[106,24902,24903,24905],{"class":108,"line":1187},[106,24904,24842],{"class":165},[106,24906,24672],{"class":165},[106,24908,24909,24912,24915],{"class":108,"line":1193},[106,24910,24911],{"class":165},"  --robot.cameras=",[106,24913,24914],{"class":221},"\"{ front: {type: opencv, index_or_path: \u002Fdev\u002Fvideo4, width: 640, height: 480, fps: 30}}\"",[106,24916,24672],{"class":165},[106,24918,24919,24921],{"class":108,"line":1207},[106,24920,24677],{"class":165},[106,24922,24672],{"class":165},[106,24924,24925,24927],{"class":108,"line":1213},[106,24926,24749],{"class":165},[106,24928,24672],{"class":165},[106,24930,24931,24934],{"class":108,"line":1304},[106,24932,24933],{"class":165},"  --teleop.id=my_awesome_leader_arm",[106,24935,24672],{"class":165},[106,24937,24938],{"class":108,"line":1310},[106,24939,24940],{"class":165},"  --display_data=true\n",[14,24942,24943],{},"相机参数说明：",[1124,24945,24946,24952,24958,24967,24977,24983],{},[63,24947,24948,24951],{},[103,24949,24950],{},"front","：相机名称。",[63,24953,24954,24957],{},[103,24955,24956],{},"type: opencv","：相机驱动类型。",[63,24959,24960,24963,24964,24556],{},[103,24961,24962],{},"index_or_path","：设备编号或设备路径（如 ",[103,24965,24966],{},"\u002Fdev\u002Fvideo4",[63,24968,24969,24972,24973,24976],{},[103,24970,24971],{},"width"," \u002F ",[103,24974,24975],{},"height","：图像分辨率。",[63,24978,24979,24982],{},[103,24980,24981],{},"fps","：采样帧率。",[63,24984,24985,24988],{},[103,24986,24987],{},"--display_data=true","：启用实时可视化。",[5119,24990,24991],{},"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":25,"searchDepth":28,"depth":28,"links":24993},[24994,24995],{"id":24812,"depth":28,"text":24813},{"id":24863,"depth":28,"text":24864},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch4",{"title":24804,"description":30},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch4-遥操与相机接入","V7Ps_cVCNPrXljkxAGw33NUyz0IWtr3kXqwGCWdWgQY",{"id":25002,"title":25003,"body":25004,"description":30,"extension":31,"meta":25176,"navigation":33,"path":25177,"seo":25178,"stem":25179,"__hash__":25180},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备.md","5. HuggingFace认证与仓库准备",{"type":7,"value":25005,"toc":25171},[25006,25010,25014,25019,25024,25027,25069,25075,25079,25128,25133,25137,25140,25148,25153,25158,25163,25168],[10,25007,25009],{"id":25008},"_5-hugging-face-认证与仓库准备","5. Hugging Face 认证与仓库准备",[48,25011,25013],{"id":25012},"_51-生成访问令牌","5.1 生成访问令牌",[14,25015,25016],{},[23,25017],{"alt":25,"src":25018},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-002.png",[14,25020,25021],{},[23,25022],{"alt":25,"src":25023},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-003.png",[14,25025,25026],{},"建议使用环境变量保存 token，不要把真实 token 写进脚本和仓库。",[97,25028,25030],{"className":23815,"code":25029,"language":23817,"meta":25,"style":25},"export HF_TOKEN=\"your_huggingface_token\"\nhf auth login --token \"$HF_TOKEN\" --add-to-git-credential\n",[103,25031,25032,25045],{"__ignoreMap":25},[106,25033,25034,25037,25040,25042],{"class":108,"line":109},[106,25035,25036],{"class":112},"export",[106,25038,25039],{"class":116}," HF_TOKEN",[106,25041,162],{"class":112},[106,25043,25044],{"class":221},"\"your_huggingface_token\"\n",[106,25046,25047,25050,25053,25056,25059,25061,25064,25066],{"class":108,"line":28},[106,25048,25049],{"class":1955},"hf",[106,25051,25052],{"class":221}," auth",[106,25054,25055],{"class":221}," login",[106,25057,25058],{"class":165}," --token",[106,25060,9717],{"class":221},[106,25062,25063],{"class":116},"$HF_TOKEN",[106,25065,368],{"class":221},[106,25067,25068],{"class":165}," --add-to-git-credential\n",[14,25070,25071,25074],{},[103,25072,25073],{},"--add-to-git-credential"," 会把 token 写入 git 凭据系统，后续推拉 Hugging Face 仓库可免重复登录。",[48,25076,25078],{"id":25077},"_52-验证登录","5.2 验证登录",[97,25080,25082],{"className":23815,"code":25081,"language":23817,"meta":25,"style":25},"HF_USER=$(hf auth whoami | head -n 1)\necho \"$HF_USER\"\n",[103,25083,25084,25115],{"__ignoreMap":25},[106,25085,25086,25089,25091,25094,25096,25098,25101,25104,25107,25110,25113],{"class":108,"line":109},[106,25087,25088],{"class":116},"HF_USER",[106,25090,162],{"class":112},[106,25092,25093],{"class":116},"$(",[106,25095,25049],{"class":1955},[106,25097,25052],{"class":221},[106,25099,25100],{"class":221}," whoami",[106,25102,25103],{"class":112}," |",[106,25105,25106],{"class":1955}," head",[106,25108,25109],{"class":165}," -n",[106,25111,25112],{"class":165}," 1",[106,25114,123],{"class":116},[106,25116,25117,25120,25122,25125],{"class":108,"line":28},[106,25118,25119],{"class":165},"echo",[106,25121,9717],{"class":221},[106,25123,25124],{"class":116},"$HF_USER",[106,25126,25127],{"class":221},"\"\n",[14,25129,25130],{},[23,25131],{"alt":25,"src":25132},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-004.png",[48,25134,25136],{"id":25135},"_53-创建数据集仓库与模型仓库","5.3 创建数据集仓库与模型仓库",[14,25138,25139],{},"训练和回放都依赖远程仓库，需提前在 Hugging Face Hub 创建：",[1124,25141,25142,25145],{},[63,25143,25144],{},"Dataset Repo（用于上传演示数据）",[63,25146,25147],{},"Model Repo（用于上传训练后的 ACT 权重）",[14,25149,25150],{},[23,25151],{"alt":25,"src":25152},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-006.png",[14,25154,25155],{},[23,25156],{"alt":25,"src":25157},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-007.png",[14,25159,25160],{},[23,25161],{"alt":25,"src":25162},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-008.png",[14,25164,25165],{},[23,25166],{"alt":25,"src":25167},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-009.png",[5119,25169,25170],{},"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":25,"searchDepth":28,"depth":28,"links":25172},[25173,25174,25175],{"id":25012,"depth":28,"text":25013},{"id":25077,"depth":28,"text":25078},{"id":25135,"depth":28,"text":25136},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch5-huggingface",{"title":25003,"description":30},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch5-HuggingFace认证与仓库准备","WTvwmhXny3fI_3GR6axPCny7WggFD_5lp-pvwwDej6Y",{"id":25182,"title":25183,"body":25184,"description":30,"extension":31,"meta":25381,"navigation":33,"path":25382,"seo":25383,"stem":25384,"__hash__":25385},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放.md","6. 数据录制重录与回放",{"type":7,"value":25185,"toc":25376},[25186,25190,25194,25290,25298,25303,25307,25323,25326,25330,25373],[10,25187,25189],{"id":25188},"_6-数据录制重录与回放","6. 数据录制、重录与回放",[48,25191,25193],{"id":25192},"_61-录制示教数据","6.1 录制示教数据",[97,25195,25197],{"className":23815,"code":25196,"language":23817,"meta":25,"style":25},"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",[103,25198,25199,25206,25212,25218,25224,25233,25239,25245,25251,25258,25268,25275,25285],{"__ignoreMap":25},[106,25200,25201,25204],{"class":108,"line":109},[106,25202,25203],{"class":1955},"lerobot-record",[106,25205,24672],{"class":165},[106,25207,25208,25210],{"class":108,"line":28},[106,25209,24704],{"class":165},[106,25211,24672],{"class":165},[106,25213,25214,25216],{"class":108,"line":1172},[106,25215,24782],{"class":165},[106,25217,24672],{"class":165},[106,25219,25220,25222],{"class":108,"line":1187},[106,25221,24842],{"class":165},[106,25223,24672],{"class":165},[106,25225,25226,25228,25231],{"class":108,"line":1193},[106,25227,24911],{"class":165},[106,25229,25230],{"class":221},"\"{ front: {type: opencv, index_or_path: 4, width: 640, height: 480, fps: 30}}\"",[106,25232,24672],{"class":165},[106,25234,25235,25237],{"class":108,"line":1207},[106,25236,24677],{"class":165},[106,25238,24672],{"class":165},[106,25240,25241,25243],{"class":108,"line":1213},[106,25242,24749],{"class":165},[106,25244,24672],{"class":165},[106,25246,25247,25249],{"class":108,"line":1304},[106,25248,24933],{"class":165},[106,25250,24672],{"class":165},[106,25252,25253,25256],{"class":108,"line":1310},[106,25254,25255],{"class":165},"  --display_data=true",[106,25257,24672],{"class":165},[106,25259,25260,25263,25266],{"class":108,"line":1322},[106,25261,25262],{"class":165},"  --dataset.repo_id=",[106,25264,25265],{"class":221},"\"Embodied-AI-6\u002Fso101_test\"",[106,25267,24672],{"class":165},[106,25269,25270,25273],{"class":108,"line":1604},[106,25271,25272],{"class":165},"  --dataset.num_episodes=10",[106,25274,24672],{"class":165},[106,25276,25277,25280,25283],{"class":108,"line":1609},[106,25278,25279],{"class":165},"  --dataset.single_task=",[106,25281,25282],{"class":221},"\"Grab the green cube\"",[106,25284,24672],{"class":165},[106,25286,25287],{"class":108,"line":1615},[106,25288,25289],{"class":165},"  --resume=true\n",[1124,25291,25292],{},[63,25293,25294,25297],{},[103,25295,25296],{},"--resume=true","：已有同一数据集时继续追加 episode。",[14,25299,25300],{},[23,25301],{"alt":25,"src":25302},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-005.png",[48,25304,25306],{"id":25305},"_62-重录前清理本地缓存","6.2 重录前清理本地缓存",[97,25308,25310],{"className":23815,"code":25309,"language":23817,"meta":25,"style":25},"rm -rf \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[103,25311,25312],{"__ignoreMap":25},[106,25313,25314,25317,25320],{"class":108,"line":109},[106,25315,25316],{"class":1955},"rm",[106,25318,25319],{"class":165}," -rf",[106,25321,25322],{"class":221}," \u002Fhome\u002Fcherish\u002F.cache\u002Fhuggingface\u002Flerobot\u002FEmbodied-AI-6\u002Fso101_test\n",[14,25324,25325],{},"注意：务必替换为自己的缓存路径，避免误删系统文件。",[48,25327,25329],{"id":25328},"_63-回放指定-episode","6.3 回放指定 episode",[97,25331,25333],{"className":23815,"code":25332,"language":23817,"meta":25,"style":25},"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",[103,25334,25335,25342,25348,25354,25360,25368],{"__ignoreMap":25},[106,25336,25337,25340],{"class":108,"line":109},[106,25338,25339],{"class":1955},"lerobot-replay",[106,25341,24672],{"class":165},[106,25343,25344,25346],{"class":108,"line":28},[106,25345,24704],{"class":165},[106,25347,24672],{"class":165},[106,25349,25350,25352],{"class":108,"line":1172},[106,25351,24782],{"class":165},[106,25353,24672],{"class":165},[106,25355,25356,25358],{"class":108,"line":1187},[106,25357,24842],{"class":165},[106,25359,24672],{"class":165},[106,25361,25362,25364,25366],{"class":108,"line":1193},[106,25363,25262],{"class":165},[106,25365,25265],{"class":221},[106,25367,24672],{"class":165},[106,25369,25370],{"class":108,"line":1207},[106,25371,25372],{"class":165},"  --dataset.episode=0\n",[5119,25374,25375],{},"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":25,"searchDepth":28,"depth":28,"links":25377},[25378,25379,25380],{"id":25192,"depth":28,"text":25193},{"id":25305,"depth":28,"text":25306},{"id":25328,"depth":28,"text":25329},{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch6",{"title":25183,"description":30},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch6-数据录制重录与回放","8nexk4omzICmhfOlIf4GxgMqb-maIwGqHLr4YUnYKQ4",{"id":25387,"title":25388,"body":25389,"description":30,"extension":31,"meta":25517,"navigation":33,"path":25518,"seo":25519,"stem":25520,"__hash__":25521},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练.md","7. ACT模型训练",{"type":7,"value":25390,"toc":25515},[25391,25395,25458,25461,25508,25513],[10,25392,25394],{"id":25393},"_7-act-模型训练","7. ACT 模型训练",[97,25396,25398],{"className":23815,"code":25397,"language":23817,"meta":25,"style":25},"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",[103,25399,25400,25407,25415,25422,25429,25436,25443,25450],{"__ignoreMap":25},[106,25401,25402,25405],{"class":108,"line":109},[106,25403,25404],{"class":1955},"lerobot-train",[106,25406,24672],{"class":165},[106,25408,25409,25411,25413],{"class":108,"line":28},[106,25410,25262],{"class":165},[106,25412,25265],{"class":221},[106,25414,24672],{"class":165},[106,25416,25417,25420],{"class":108,"line":1172},[106,25418,25419],{"class":165},"  --policy.type=act",[106,25421,24672],{"class":165},[106,25423,25424,25427],{"class":108,"line":1187},[106,25425,25426],{"class":165},"  --output_dir=outputs\u002Ftrain\u002Fact_so101_test",[106,25428,24672],{"class":165},[106,25430,25431,25434],{"class":108,"line":1193},[106,25432,25433],{"class":165},"  --job_name=act_so101_test",[106,25435,24672],{"class":165},[106,25437,25438,25441],{"class":108,"line":1207},[106,25439,25440],{"class":165},"  --policy.device=cuda",[106,25442,24672],{"class":165},[106,25444,25445,25448],{"class":108,"line":1213},[106,25446,25447],{"class":165},"  --wandb.enable=false",[106,25449,24672],{"class":165},[106,25451,25452,25455],{"class":108,"line":1304},[106,25453,25454],{"class":165},"  --policy.repo_id=",[106,25456,25457],{"class":221},"\"Embodied-AI-6\u002Flerobot_new\"\n",[14,25459,25460],{},"参数说明：",[1124,25462,25463,25469,25475,25481,25487,25496,25502],{},[63,25464,25465,25468],{},[103,25466,25467],{},"--dataset.repo_id","：训练数据集仓库。",[63,25470,25471,25474],{},[103,25472,25473],{},"--policy.type=act","：策略模型类型为 ACT。",[63,25476,25477,25480],{},[103,25478,25479],{},"--output_dir","：本地训练输出目录。",[63,25482,25483,25486],{},[103,25484,25485],{},"--job_name","：训练任务名称。",[63,25488,25489,25492,25493,24556],{},[103,25490,25491],{},"--policy.device","：训练设备（如 ",[103,25494,25495],{},"cuda",[63,25497,25498,25501],{},[103,25499,25500],{},"--wandb.enable","：是否启用 WandB 可视化。",[63,25503,25504,25507],{},[103,25505,25506],{},"--policy.repo_id","：训练后模型推送目标仓库。",[14,25509,25510],{},[23,25511],{"alt":25,"src":25512},"..\u002F\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-12-01-lerobot101-act%E7%AE%97%E6%B3%95%E5%A4%8D%E7%8E%B0-010.png",[5119,25514,25375],{},{"title":25,"searchDepth":28,"depth":28,"links":25516},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch7-act",{"title":25388,"description":30},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch7-ACT模型训练","Qt8rQhlcgcPzm395Ved_SsG10oi0KN9HpAkfBVuC-CM",{"id":25523,"title":25524,"body":25525,"description":30,"extension":31,"meta":25612,"navigation":33,"path":25613,"seo":25614,"stem":25615,"__hash__":25616},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集.md","8. 策略部署与自动采集",{"type":7,"value":25526,"toc":25610},[25527,25530,25533,25600,25608],[10,25528,25524],{"id":25529},"_8-策略部署与自动采集",[14,25531,25532],{},"使用已训练好的 ACT 模型驱动从臂执行，并继续录制新数据：",[97,25534,25536],{"className":23815,"code":25535,"language":23817,"meta":25,"style":25},"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",[103,25537,25538,25544,25550,25556,25564,25570,25577,25585,25593],{"__ignoreMap":25},[106,25539,25540,25542],{"class":108,"line":109},[106,25541,25203],{"class":1955},[106,25543,24672],{"class":165},[106,25545,25546,25548],{"class":108,"line":28},[106,25547,24704],{"class":165},[106,25549,24672],{"class":165},[106,25551,25552,25554],{"class":108,"line":1172},[106,25553,24782],{"class":165},[106,25555,24672],{"class":165},[106,25557,25558,25560,25562],{"class":108,"line":1187},[106,25559,24911],{"class":165},[106,25561,25230],{"class":221},[106,25563,24672],{"class":165},[106,25565,25566,25568],{"class":108,"line":1193},[106,25567,24842],{"class":165},[106,25569,24672],{"class":165},[106,25571,25572,25575],{"class":108,"line":1207},[106,25573,25574],{"class":165},"  --display_data=false",[106,25576,24672],{"class":165},[106,25578,25579,25581,25583],{"class":108,"line":1213},[106,25580,25262],{"class":165},[106,25582,25265],{"class":221},[106,25584,24672],{"class":165},[106,25586,25587,25589,25591],{"class":108,"line":1304},[106,25588,25279],{"class":165},[106,25590,25282],{"class":221},[106,25592,24672],{"class":165},[106,25594,25595,25598],{"class":108,"line":1310},[106,25596,25597],{"class":165},"  --policy.path=",[106,25599,25457],{"class":221},[1124,25601,25602],{},[63,25603,25604,25607],{},[103,25605,25606],{},"--policy.path","：已训练策略的本地路径或远程仓库路径。",[5119,25609,25375],{},{"title":25,"searchDepth":28,"depth":28,"links":25611},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch8",{"title":25524,"description":30},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch8-策略部署与自动采集","i9uzLIpUhl0JgoMvjV4YJ3r41m04fqol_qiMKUFJZA0",{"id":25618,"title":25619,"body":25620,"description":30,"extension":31,"meta":25649,"navigation":33,"path":25650,"seo":25651,"stem":25652,"__hash__":25653},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展.md","9. IsaacLab仿真拓展",{"type":7,"value":25621,"toc":25647},[25622,25626,25629,25635,25638,25644],[10,25623,25625],{"id":25624},"_9-isaaclab-仿真拓展","9. IsaacLab 仿真拓展",[14,25627,25628],{},"项目地址：",[14,25630,25631],{},[355,25632,25633],{"href":25633,"rel":25634},"https:\u002F\u002Fgithub.com\u002FLightwheelAI\u002Fleisaac",[23858],[14,25636,25637],{},"参考教程：",[14,25639,25640],{},[355,25641,25642],{"href":25642,"rel":25643},"https:\u002F\u002Fcloud.tencent.com\u002Fdeveloper\u002Farticle\u002F2578981",[23858],[14,25645,25646],{},"示例任务：仿真机械臂在厨房抓橘子。",{"title":25,"searchDepth":28,"depth":28,"links":25648},[],{},"\u002Fwiki\u002F2025-12-01-lerobot101-act\u002Fch9-isaaclab",{"title":25619,"description":30},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Fch9-IsaacLab仿真拓展","yFxqMAnCXTDYdIYJyAM2pC4uxbPPomVMI3Y_my_JAQY",{"id":25655,"title":25656,"body":25657,"description":25661,"extension":31,"meta":25662,"navigation":33,"path":25663,"seo":25664,"stem":25665,"__hash__":25666},"wiki\u002Fwiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex.md","lerobot-act算法复现",{"type":7,"value":25658,"toc":25659},[],{"title":25,"searchDepth":28,"depth":28,"links":25660},[],"act复现",{"category":23371},"\u002Fwiki\u002F2025-12-01-lerobot101-act",{"title":25656,"description":25661},"wiki\u002F2025-12-01-lerobot101-act算法复现\u002Findex","O0oFPbXs3nGtmkVmLGeGnWlJcQIVE-dAD_mqYPwnk3w",{"id":25668,"title":25669,"body":25670,"description":25,"extension":31,"meta":25972,"navigation":33,"path":25973,"seo":25974,"stem":25975,"__hash__":25976},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch1-简介.md","1.简介",{"type":7,"value":25671,"toc":25964},[25672,25675,25679,25689,25696,25703,25706,25713,25716,25719,25723,25735,25739,25785,25788,25791,25794,25797,25800,25804,25842,25848,25852,25906,25911,25914,25917,25922,25925,25930,25933,25936,25940,25943,25946,25950],[10,25673,25669],{"id":25674},"_1简介",[77,25676,25678],{"id":25677},"_11什么是-docker","1.1什么是 Docker？",[14,25680,25681,25682,25685,25686],{},"Docker 是一个开源的 ",[266,25683,25684],{},"应用容器引擎"," ，可以让开发者将应用和其所有依赖打包成一个“容器”， ",[266,25687,25688],{},"一次构建，到处运行。",[14,25690,25691,25692,25695],{},"“ ",[266,25693,25694],{},"一次构建，到处运行"," ”也就是说：",[60,25697,25698],{},[63,25699,25700],{},[266,25701,25702],{},"之前：",[14,25704,25705],{},"之前想跑ROS2+OpenCV+CUDA+CuDNN，我需要在一台电脑上一个一个环境的安装配置，如果我还要在另一台电脑上跑这个，也需要把第二台电脑也这样配置一遍。如果我的系统环境崩了，需要重装系统了，重装完后又双叒叕要再来一遍配置过程，很麻烦。",[60,25707,25708],{},[63,25709,25710],{},[266,25711,25712],{},"使用docker后：",[14,25714,25715],{},"（docker镜像和docker容器的概念在下下下面，下面这段话里看到镜像和容器的概念先接受就行。）",[14,25717,25718],{},"我只需要在电脑上用docker配置一遍这个ROS2+OpenCV+CUDA+CuDNN环境，然后用docker生成一个镜像，把这个镜像打包好。以后在任何一台电脑上，我都可以直接用这个镜像生成一个容器，而这个容器内就包含了我所需要的ROS2+OpenCV+CUDA+CuDNN环境，如果我的容器环境崩了，我只需要把坏掉的容器删掉，重新由镜像再生成一个新的容器即可。只需要配置一次，以后都可以一键安装这个环境。",[77,25720,25722],{"id":25721},"_12它是怎么工作的","1.2.它是怎么工作的？",[1124,25724,25725,25728],{},[63,25726,25727],{},"传统方式：软件运行需要在不同系统上安装各种库、配置环境，很麻烦。",[63,25729,25730,25731,25734],{},"Docker方式：打包成“容器”，环境和应用一起封装， ",[266,25732,25733],{},"无论在哪运行都一样稳定"," 。",[77,25736,25738],{"id":25737},"_13docker-的几个基本概念","1.3.Docker 的几个基本概念",[254,25740,25741,25751],{},[257,25742,25743],{},[260,25744,25745,25748],{},[263,25746,25747],{"align":23729},"概念",[263,25749,25750],{"align":23729},"解释",[301,25752,25753,25761,25769,25777],{},[260,25754,25755,25758],{},[306,25756,25757],{"align":23729},"镜像",[306,25759,25760],{"align":23729},"Image，运行容器的模板，像是一个应用快照",[260,25762,25763,25766],{},[306,25764,25765],{"align":23729},"容器",[306,25767,25768],{"align":23729},"Container，运行中的镜像实例，有自己的文件系统、网络等",[260,25770,25771,25774],{},[306,25772,25773],{"align":23729},"Dockerfile",[306,25775,25776],{"align":23729},"构建镜像的脚本，写明安装哪些包、设置哪些环境变量等",[260,25778,25779,25782],{},[306,25780,25781],{"align":23729},"仓库",[306,25783,25784],{"align":23729},"Registry，存放镜像的地方，比如 Docker Hub",[14,25786,25787],{},"抽象化理解:",[14,25789,25790],{},"Docker镜像≈C++类",[14,25792,25793],{},"Docker容器≈C++类实例(即对象)",[14,25795,25796],{},"形象化理解: 镜像可以类似于给电脑装系统的iso镜像文件。 容器可以类似于已经被装到电脑上的可以运行的系统。",[14,25798,25799],{},"把镜像变为容器时，需要用docker run命令添加很多参数，这个可以理解你这个电脑到底有啥硬件配置。",[77,25801,25803],{"id":25802},"_14类比理解","1.4.类比理解",[254,25805,25806,25816],{},[257,25807,25808],{},[260,25809,25810,25813],{},[263,25811,25812],{"align":23729},"传统部署",[263,25814,25815],{"align":23729},"Docker部署",[301,25817,25818,25826,25834],{},[260,25819,25820,25823],{},[306,25821,25822],{"align":23729},"手动安装依赖、调试版本不一致问题",[306,25824,25825],{"align":23729},"一次打包环境和代码",[260,25827,25828,25831],{},[306,25829,25830],{"align":23729},"程序“裸奔”跑在系统上",[306,25832,25833],{"align":23729},"程序“穿着容器”隔离运行",[260,25835,25836,25839],{},[306,25837,25838],{"align":23729},"容易“在我电脑上能跑”",[306,25840,25841],{"align":23729},"保证“无论在哪都能跑”",[14,25843,25844,25845],{},"就像快递包裹： ",[266,25846,25847],{},"你不再关心内容怎么运送，因为包装已经帮你做好了一切隔离。",[77,25849,25851],{"id":25850},"_15docker-的核心优势","1.5.Docker 的核心优势",[254,25853,25854,25864],{},[257,25855,25856],{},[260,25857,25858,25861],{},[263,25859,25860],{"align":23729},"优势",[263,25862,25863],{"align":23729},"说明",[301,25865,25866,25874,25882,25890,25898],{},[260,25867,25868,25871],{},[306,25869,25870],{"align":23729},"轻量级",[306,25872,25873],{"align":23729},"基于系统内核共享，启动速度快，占资源少",[260,25875,25876,25879],{},[306,25877,25878],{"align":23729},"跨平台",[306,25880,25881],{"align":23729},"一次构建，到处运行（Windows、Linux、macOS 上都一致）",[260,25883,25884,25887],{},[306,25885,25886],{"align":23729},"易于迁移部署",[306,25888,25889],{"align":23729},"应用和环境一起封装，不怕依赖不一致",[260,25891,25892,25895],{},[306,25893,25894],{"align":23729},"易于版本控制",[306,25896,25897],{"align":23729},"镜像版本可控，支持回滚",[260,25899,25900,25903],{},[306,25901,25902],{"align":23729},"生态丰富",[306,25904,25905],{"align":23729},"Docker Hub 上有成千上万的现成镜像可用",[60,25907,25908],{},[63,25909,25910],{},"在Linux上可以几乎实现无性能损失。",[14,25912,25913],{},"docker里的发行版和本机共用Linux内核。",[14,25915,25916],{},"CPU损耗不到1%。 内存接近原生没损耗。 硬盘损耗不到2%。 网络性能接近原生没有损耗。 显卡损耗小于1%。",[60,25918,25919],{},[63,25920,25921],{},"可以快速部署在绝大多数Linux发行版",[14,25923,25924],{},"你想跑ROS2，之前是仅在Ubuntu上是比较好部署的，但是现在你可以使用任意发行版，比如Fedora，ArchLinux等发行版上也能通过docker跑ROS2。",[60,25926,25927],{},[63,25928,25929],{},"配置环境简单",[14,25931,25932],{},"之前你需要在Ubuntu上按照教程安装ROS2，CUDA，CuDNN，OpenCV4等等，但是只要你用了Docker，可以直接用docker pull命令拉取别人配置好的开发环境，只需要一条命令直通罗马。",[14,25934,25935],{},"你仅仅只需要把一个发行版最基础的东西配置好，比如那些仓库换源，输入法，显卡驱动（只用让显卡工作起来，不用在本机配置CUDA和CuDNN）等。",[60,25937,25938],{},[63,25939,25902],{},[14,25941,25942],{},"生态极其丰富，有很多东西即便自己不构建，也能在dockerhub上找到别人构建好的镜像，自己连编译都省去了。",[14,25944,25945],{},"比如之前配置cuda和cudnn的话，需要在本机先安装英伟达驱动，再安装CUDA和CuDNN。而现在，我们只需要本机安装英伟达驱动，英伟达官方在DockerHub上提供了CUDA和CUDNN的镜像，他们已经编译好了，我们可以直接拿来用。",[77,25947,25949],{"id":25948},"_16常见-docker-应用场景","1.6.常见 Docker 应用场景",[1124,25951,25952,25955,25958,25961],{},[63,25953,25954],{},"本地开发：快速搭建各种开发环境（如 Python + Jupyter、ROS + Gazebo）",[63,25956,25957],{},"测试部署：CI\u002FCD 中自动测试、构建、部署",[63,25959,25960],{},"微服务架构：每个服务一个容器，灵活组合",[63,25962,25963],{},"科研工具封装：复现别人论文环境，或封装自己的项目发给他人使用",{"title":25,"searchDepth":28,"depth":28,"links":25965},[25966,25967,25968,25969,25970,25971],{"id":25677,"depth":1172,"text":25678},{"id":25721,"depth":1172,"text":25722},{"id":25737,"depth":1172,"text":25738},{"id":25802,"depth":1172,"text":25803},{"id":25850,"depth":1172,"text":25851},{"id":25948,"depth":1172,"text":25949},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch1",{"title":25669,"description":25},"wiki\u002F2025-11-10-Docker\u002Fch1-简介","RWfN-VzqXrPFzaf024ZOqhkFsjhm2OaDsrg8ij3bqRg",{"id":25978,"title":25979,"body":25980,"description":25,"extension":31,"meta":26713,"navigation":33,"path":26714,"seo":26715,"stem":26716,"__hash__":26717},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch2-安装Docker.md","2.安装Docker",{"type":7,"value":25981,"toc":26708},[25982,25985,25989,25992,25995,26001,26007,26011,26020,26023,26080,26083,26134,26137,26220,26223,26260,26264,26275,26288,26295,26298,26378,26381,26431,26434,26457,26461,26468,26471,26487,26493,26496,26512,26518,26521,26537,26551,26557,26577,26583,26586,26598,26604,26607,26621,26627,26630,26650,26655,26658,26661,26665,26668,26671,26674,26681,26684,26687,26690,26695,26700,26705],[10,25983,25979],{"id":25984},"_2安装docker",[77,25986,25988],{"id":25987},"_21linux安装docker-engine推荐","2.1.Linux安装Docker Engine(推荐)",[14,25990,25991],{},"Linux只需要安装Docker Engine就可以，不要安装docker desktop，那玩意是专门给Mac和Windows用的。",[14,25993,25994],{},"Linux跑docker性能损失很低，而Windows和MacOS跑docker损失相对于大一些。",[14,25996,25997],{},[355,25998,25999],{"href":25999,"rel":26000},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002F",[23858],[14,26002,26003],{},[355,26004,26005],{"href":26005,"rel":26006},"https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fhelp\u002Fdocker-ce\u002F",[23858],[21991,26008,26010],{"id":26009},"_211ubuntuapt","2.1.1.Ubuntu（APT）",[14,26012,26013,26014,26019],{},"以下内容根据 ",[355,26015,26018],{"href":26016,"rel":26017},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Fubuntu\u002F",[23858],"官方文档"," 修改而来。",[14,26021,26022],{},"如果你过去安装过 docker，先删掉：",[97,26024,26026],{"className":23815,"code":26025,"language":23817,"meta":25,"style":25},"for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done\n",[103,26027,26028],{"__ignoreMap":25},[106,26029,26030,26032,26035,26038,26041,26044,26047,26050,26053,26056,26059,26062,26065,26068,26071,26074,26077],{"class":108,"line":109},[106,26031,3017],{"class":112},[106,26033,26034],{"class":116}," pkg ",[106,26036,26037],{"class":112},"in",[106,26039,26040],{"class":221}," docker.io",[106,26042,26043],{"class":221}," docker-doc",[106,26045,26046],{"class":221}," docker-compose",[106,26048,26049],{"class":221}," docker-compose-v2",[106,26051,26052],{"class":221}," podman-docker",[106,26054,26055],{"class":221}," containerd",[106,26057,26058],{"class":221}," runc",[106,26060,26061],{"class":116},"; ",[106,26063,26064],{"class":112},"do",[106,26066,26067],{"class":1955}," sudo",[106,26069,26070],{"class":221}," apt-get",[106,26072,26073],{"class":221}," remove",[106,26075,26076],{"class":116}," $pkg; ",[106,26078,26079],{"class":112},"done\n",[14,26081,26082],{},"首先安装依赖和GPG：",[97,26084,26088],{"className":26085,"code":26086,"language":26087,"meta":25,"style":25},"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",[103,26089,26090,26095,26100,26105,26110,26115,26120,26124,26129],{"__ignoreMap":25},[106,26091,26092],{"class":108,"line":109},[106,26093,26094],{},"# Add Docker's official GPG key:\n",[106,26096,26097],{"class":108,"line":28},[106,26098,26099],{},"sudo apt-get update\n",[106,26101,26102],{"class":108,"line":1172},[106,26103,26104],{},"sudo apt-get install ca-certificates curl\n",[106,26106,26107],{"class":108,"line":1187},[106,26108,26109],{},"sudo install -m 0755 -d \u002Fetc\u002Fapt\u002Fkeyrings\n",[106,26111,26112],{"class":108,"line":1193},[106,26113,26114],{},"sudo curl -fsSL https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Fubuntu\u002Fgpg | sudo gpg --dearmor -o \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[106,26116,26117],{"class":108,"line":1207},[106,26118,26119],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.asc\n",[106,26121,26122],{"class":108,"line":1213},[106,26123,2392],{"emptyLinePlaceholder":33},[106,26125,26126],{"class":108,"line":1304},[106,26127,26128],{},"# 如果上面这行报错就弄下面这行\n",[106,26130,26131],{"class":108,"line":1310},[106,26132,26133],{},"sudo chmod a+r \u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg\n",[14,26135,26136],{},"信任 Docker 的 GPG 公钥并添加仓库：",[97,26138,26140],{"className":23815,"code":26139,"language":23817,"meta":25,"style":25},"# 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",[103,26141,26142,26147,26153,26170,26203],{"__ignoreMap":25},[106,26143,26144],{"class":108,"line":109},[106,26145,26146],{"class":175},"# Add the repository to Apt sources:\n",[106,26148,26149,26151],{"class":108,"line":28},[106,26150,25119],{"class":165},[106,26152,24672],{"class":165},[106,26154,26155,26158,26161,26164,26167],{"class":108,"line":1172},[106,26156,26157],{"class":221},"  \"deb [arch=$(",[106,26159,26160],{"class":1955},"dpkg",[106,26162,26163],{"class":165}," --print-architecture",[106,26165,26166],{"class":221},") signed-by=\u002Fetc\u002Fapt\u002Fkeyrings\u002Fdocker.gpg] https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce\u002Flinux\u002Fubuntu ",[106,26168,26169],{"class":165},"\\\n",[106,26171,26172,26175,26177,26179,26182,26185,26187,26189,26192,26194,26196,26199,26201],{"class":108,"line":1187},[106,26173,26174],{"class":221},"  \"",[106,26176,25093],{"class":116},[106,26178,675],{"class":165},[106,26180,26181],{"class":221}," \u002Fetc\u002Fos-release",[106,26183,26184],{"class":116}," && ",[106,26186,25119],{"class":165},[106,26188,9717],{"class":221},[106,26190,26191],{"class":116},"$VERSION_CODENAME",[106,26193,368],{"class":221},[106,26195,546],{"class":116},[106,26197,26198],{"class":221},"\" stable\"",[106,26200,25103],{"class":112},[106,26202,24672],{"class":165},[106,26204,26205,26208,26211,26214,26217],{"class":108,"line":1193},[106,26206,26207],{"class":1955},"  sudo",[106,26209,26210],{"class":221}," tee",[106,26212,26213],{"class":221}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fdocker.list",[106,26215,26216],{"class":112}," >",[106,26218,26219],{"class":221}," \u002Fdev\u002Fnull\n",[14,26221,26222],{},"最后安装",[97,26224,26226],{"className":23815,"code":26225,"language":23817,"meta":25,"style":25},"sudo apt-get update\nsudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[103,26227,26228,26237],{"__ignoreMap":25},[106,26229,26230,26232,26234],{"class":108,"line":109},[106,26231,24570],{"class":1955},[106,26233,26070],{"class":221},[106,26235,26236],{"class":221}," update\n",[106,26238,26239,26241,26243,26245,26248,26251,26254,26257],{"class":108,"line":28},[106,26240,24570],{"class":1955},[106,26242,26070],{"class":221},[106,26244,23827],{"class":221},[106,26246,26247],{"class":221}," docker-ce",[106,26249,26250],{"class":221}," docker-ce-cli",[106,26252,26253],{"class":221}," containerd.io",[106,26255,26256],{"class":221}," docker-buildx-plugin",[106,26258,26259],{"class":221}," docker-compose-plugin\n",[21991,26261,26263],{"id":26262},"_212fedoradnf5","2.1.2.Fedora（DNF5）",[14,26265,26266,26267,26270,26271,26274],{},"查看自己自己包管理工具版本（dnf是 ",[266,26268,26269],{},"Fedora \u002F RHEL \u002F CentOS"," 系列 Linux 系统中的 ",[266,26272,26273],{},"包管理器（包管理工具）"," ，用来安装、卸载、更新和管理软件包）",[97,26276,26278],{"className":23815,"code":26277,"language":23817,"meta":25,"style":25},"dnf --version\n",[103,26279,26280],{"__ignoreMap":25},[106,26281,26282,26285],{"class":108,"line":109},[106,26283,26284],{"class":1955},"dnf",[106,26286,26287],{"class":165}," --version\n",[14,26289,26013,26290,26294],{},[355,26291,26018],{"href":26292,"rel":26293},"https:\u002F\u002Fdocs.docker.com\u002Fengine\u002Finstall\u002Ffedora\u002F",[23858]," 修改而来。(官方教程还是DNF4,太老了，请看下方的教程)",[14,26296,26297],{},"如果你之前安装过 docker，请先删掉",[97,26299,26301],{"className":23815,"code":26300,"language":23817,"meta":25,"style":25},"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",[103,26302,26303,26317,26324,26331,26338,26345,26352,26359,26366,26373],{"__ignoreMap":25},[106,26304,26305,26307,26310,26312,26315],{"class":108,"line":109},[106,26306,24570],{"class":1955},[106,26308,26309],{"class":221}," dnf",[106,26311,26073],{"class":221},[106,26313,26314],{"class":221}," docker",[106,26316,24672],{"class":165},[106,26318,26319,26322],{"class":108,"line":28},[106,26320,26321],{"class":221},"                  docker-client",[106,26323,24672],{"class":165},[106,26325,26326,26329],{"class":108,"line":1172},[106,26327,26328],{"class":221},"                  docker-client-latest",[106,26330,24672],{"class":165},[106,26332,26333,26336],{"class":108,"line":1187},[106,26334,26335],{"class":221},"                  docker-common",[106,26337,24672],{"class":165},[106,26339,26340,26343],{"class":108,"line":1193},[106,26341,26342],{"class":221},"                  docker-latest",[106,26344,24672],{"class":165},[106,26346,26347,26350],{"class":108,"line":1207},[106,26348,26349],{"class":221},"                  docker-latest-logrotate",[106,26351,24672],{"class":165},[106,26353,26354,26357],{"class":108,"line":1213},[106,26355,26356],{"class":221},"                  docker-logrotate",[106,26358,24672],{"class":165},[106,26360,26361,26364],{"class":108,"line":1304},[106,26362,26363],{"class":221},"                  docker-selinux",[106,26365,24672],{"class":165},[106,26367,26368,26371],{"class":108,"line":1310},[106,26369,26370],{"class":221},"                  docker-engine-selinux",[106,26372,24672],{"class":165},[106,26374,26375],{"class":108,"line":1322},[106,26376,26377],{"class":221},"                  docker-engine\n",[14,26379,26380],{},"安装依赖，下载 repo 文件，并把软件仓库地址替换为镜像站：",[97,26382,26384],{"className":23815,"code":26383,"language":23817,"meta":25,"style":25},"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",[103,26385,26386,26400,26415],{"__ignoreMap":25},[106,26387,26388,26390,26392,26395,26397],{"class":108,"line":109},[106,26389,24570],{"class":1955},[106,26391,26309],{"class":221},[106,26393,26394],{"class":165}," -y",[106,26396,23827],{"class":221},[106,26398,26399],{"class":221}," dnf-plugins-core\n",[106,26401,26402,26404,26406,26409,26412],{"class":108,"line":28},[106,26403,24570],{"class":1955},[106,26405,26309],{"class":221},[106,26407,26408],{"class":221}," config-manager",[106,26410,26411],{"class":221}," addrepo",[106,26413,26414],{"class":165}," --from-repofile=https:\u002F\u002Fdownload.docker.com\u002Flinux\u002Ffedora\u002Fdocker-ce.repo\n",[106,26416,26417,26419,26422,26425,26428],{"class":108,"line":1172},[106,26418,24570],{"class":1955},[106,26420,26421],{"class":221}," sed",[106,26423,26424],{"class":165}," -i",[106,26426,26427],{"class":221}," 's+https:\u002F\u002Fdownload.docker.com+https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Fdocker-ce+'",[106,26429,26430],{"class":221}," \u002Fetc\u002Fyum.repos.d\u002Fdocker-ce.repo\n",[14,26432,26433],{},"最后安装：",[97,26435,26437],{"className":23815,"code":26436,"language":23817,"meta":25,"style":25},"sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin\n",[103,26438,26439],{"__ignoreMap":25},[106,26440,26441,26443,26445,26447,26449,26451,26453,26455],{"class":108,"line":109},[106,26442,24570],{"class":1955},[106,26444,26309],{"class":221},[106,26446,23827],{"class":221},[106,26448,26247],{"class":221},[106,26450,26250],{"class":221},[106,26452,26253],{"class":221},[106,26454,26256],{"class":221},[106,26456,26259],{"class":221},[77,26458,26460],{"id":26459},"_22配置环境","2.2.配置环境",[21991,26462,26464,26467],{"id":26463},"_221检查-docker-服务状态",[266,26465,26466],{},"2.2.1.检查 Docker 服务状态"," ：",[14,26469,26470],{},"在 Linux 上，你可以通过以下命令检查 Docker 服务的状态：",[97,26472,26474],{"className":23815,"code":26473,"language":23817,"meta":25,"style":25},"systemctl status docker\n",[103,26475,26476],{"__ignoreMap":25},[106,26477,26478,26481,26484],{"class":108,"line":109},[106,26479,26480],{"class":1955},"systemctl",[106,26482,26483],{"class":221}," status",[106,26485,26486],{"class":221}," docker\n",[21991,26488,26490,26467],{"id":26489},"_222启动-docker-服务",[266,26491,26492],{},"2.2.2.启动 Docker 服务",[14,26494,26495],{},"如果服务没有运行，可以使用以下命令启动 Docker 服务：",[97,26497,26499],{"className":23815,"code":26498,"language":23817,"meta":25,"style":25},"sudo systemctl start docker\n",[103,26500,26501],{"__ignoreMap":25},[106,26502,26503,26505,26508,26510],{"class":108,"line":109},[106,26504,24570],{"class":1955},[106,26506,26507],{"class":221}," systemctl",[106,26509,4176],{"class":221},[106,26511,26486],{"class":221},[21991,26513,26515,26467],{"id":26514},"_223设置-docker-开机自启",[266,26516,26517],{},"2.2.3.设置 Docker 开机自启",[14,26519,26520],{},"如果你希望 Docker 在每次启动时自动运行，可以启用开机自启：",[97,26522,26524],{"className":23815,"code":26523,"language":23817,"meta":25,"style":25},"sudo systemctl enable docker\n",[103,26525,26526],{"__ignoreMap":25},[106,26527,26528,26530,26532,26535],{"class":108,"line":109},[106,26529,24570],{"class":1955},[106,26531,26507],{"class":221},[106,26533,26534],{"class":221}," enable",[106,26536,26486],{"class":221},[21991,26538,26540,13788,26543,13788,26548,26467],{"id":26539},"_224将用户添加到-docker-组",[266,26541,26542],{},"2.2.4.将用户添加到",[266,26544,26545],{},[103,26546,26547],{},"docker",[266,26549,26550],{},"组",[14,26552,26553,26554,26556],{},"使用以下命令将当前用户添加到 ",[103,26555,26547],{}," 组：",[97,26558,26560],{"className":23815,"code":26559,"language":23817,"meta":25,"style":25},"sudo usermod -aG docker $USER\n",[103,26561,26562],{"__ignoreMap":25},[106,26563,26564,26566,26569,26572,26574],{"class":108,"line":109},[106,26565,24570],{"class":1955},[106,26567,26568],{"class":221}," usermod",[106,26570,26571],{"class":165}," -aG",[106,26573,26314],{"class":221},[106,26575,26576],{"class":116}," $USER\n",[21991,26578,26580,26467],{"id":26579},"_225退出并重新登录",[266,26581,26582],{},"2.2.5.退出并重新登录",[14,26584,26585],{},"执行完上述命令后，你需要退出当前会话并重新登录，或者运行以下命令使更改生效：",[97,26587,26589],{"className":23815,"code":26588,"language":23817,"meta":25,"style":25},"newgrp docker\n",[103,26590,26591],{"__ignoreMap":25},[106,26592,26593,26596],{"class":108,"line":109},[106,26594,26595],{"class":1955},"newgrp",[106,26597,26486],{"class":221},[21991,26599,26601,26467],{"id":26600},"_226重新启动-docker-服务如果需要",[266,26602,26603],{},"2.2.6.重新启动 Docker 服务（如果需要）",[14,26605,26606],{},"确保 Docker 服务正在运行，可以使用以下命令：",[97,26608,26609],{"className":23815,"code":26498,"language":23817,"meta":25,"style":25},[103,26610,26611],{"__ignoreMap":25},[106,26612,26613,26615,26617,26619],{"class":108,"line":109},[106,26614,24570],{"class":1955},[106,26616,26507],{"class":221},[106,26618,4176],{"class":221},[106,26620,26486],{"class":221},[21991,26622,26624,26467],{"id":26623},"_227重启电脑后检查-docker-服务状态",[266,26625,26626],{},"2.2.7.重启电脑后检查 Docker 服务状态",[14,26628,26629],{},"先重启电脑，接着你可以通过以下命令检查 Docker 服务的状态，看看是否正常：",[97,26631,26633],{"className":23815,"code":26632,"language":23817,"meta":25,"style":25},"sudo reboot\nsystemctl status docker\n",[103,26634,26635,26642],{"__ignoreMap":25},[106,26636,26637,26639],{"class":108,"line":109},[106,26638,24570],{"class":1955},[106,26640,26641],{"class":221}," reboot\n",[106,26643,26644,26646,26648],{"class":108,"line":28},[106,26645,26480],{"class":1955},[106,26647,26483],{"class":221},[106,26649,26486],{"class":221},[14,26651,26652],{},[23,26653],{"alt":25,"src":26654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-001.png",[14,26656,26657],{},"第三行显示enabled说明开机自启动成功",[14,26659,26660],{},"按q退出",[77,26662,26664],{"id":26663},"_23安装docker-desktopwinmac","2.3.安装Docker Desktop（Win，Mac）",[14,26666,26667],{},"优先使用linux来使用docker是比较好的",[14,26669,26670],{},"(Docker Desktop在Windows和MacOS使用的是虚拟机，性能有损失，在这俩系统上可以用，但是你需要接受这些性能损失。在Windows上性能损失和WSL2的损失几乎一样，因为Windows的docker desktop基于wsl2)",[14,26672,26673],{},"(Docker Desktop在Linux上只是Docker Engine的一个GUI管理工具，依然默认使用Docker Engine开启容器，所以依然几乎没有损耗，讨厌用命令行的可以考虑使用)",[14,26675,26676,26677],{},"官方下载安装:",[355,26678,26679],{"href":26679,"rel":26680},"https:\u002F\u002Fwww.docker.com\u002F",[23858],[14,26682,26683],{},"Windows的Docker显卡直通与USB直通:",[14,26685,26686],{},"在Windows上想Nvidia显卡直通的话，需要先去DockerDesktop设置里开启WSL2支持并勾选一个wsl2的发行版，比如Ubuntu22.04，紧接着，需要进入wsl2的Ubuntu22.04中安装NVIDIA Container Toolkit，教程在下方。",[14,26688,26689],{},"在Windows的Docker上想要USB直通需要先让wsl2直通该usb，再在docker run命令将该设备添加到docker。(如果把wsl2所有设备全挂载到docker了，那么只需要让usb直通wsl2)",[14,26691,26692],{},[23,26693],{"alt":25,"src":26694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-002.png",[14,26696,26697],{},[23,26698],{"alt":25,"src":26699},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-003.png",[14,26701,26702],{},[23,26703],{"alt":25,"src":26704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-004.png",[5119,26706,26707],{},"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":25,"searchDepth":28,"depth":28,"links":26709},[26710,26711,26712],{"id":25987,"depth":1172,"text":25988},{"id":26459,"depth":1172,"text":26460},{"id":26663,"depth":1172,"text":26664},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch2-docker",{"title":25979,"description":25},"wiki\u002F2025-11-10-Docker\u002Fch2-安装Docker","CcH--l5LuaypKBoO7AJJUKqaK8NHmo0d-iudiZdasMo",{"id":26719,"title":26720,"body":26721,"description":26728,"extension":31,"meta":27421,"navigation":33,"path":27422,"seo":27423,"stem":27424,"__hash__":27425},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch3-Docker直通.md","3.Docker直通",{"type":7,"value":26722,"toc":27415},[26723,26726,26729,26733,26738,26743,26746,26774,26779,26788,26791,26796,26800,26807,26812,26818,26822,26825,26829,26834,26926,26931,26949,26954,26975,26980,26996,27000,27005,27034,27039,27085,27090,27134,27142,27159,27164,27180,27185,27199,27202,27205,27208,27211,27240,27243,27248,27252,27255,27258,27264,27267,27270,27273,27335,27342,27347,27350,27368,27372,27375,27392,27395,27398,27412],[10,26724,26720],{"id":26725},"_3docker直通",[14,26727,26728],{},"将宿主机的硬件设备或特定资源直接传递给Docker容器使用的技术",[77,26730,26732],{"id":26731},"_31usb直通","3.1.USB直通",[14,26734,26735],{},[23,26736],{"alt":25,"src":26737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-005.png",[60,26739,26740],{},[63,26741,26742],{},"方法一(不是很推荐新手)：",[14,26744,26745],{},"创建容器的时候把需要的设备加在红色部分这里即可。可以通过下面的命令查看想要的设备的名字。",[97,26747,26749],{"className":23815,"code":26748,"language":23817,"meta":25,"style":25},"ls \u002Fdev\n#例如\n--device=\u002Fdev\u002Ftty_USB0\n",[103,26750,26751,26759,26764],{"__ignoreMap":25},[106,26752,26753,26756],{"class":108,"line":109},[106,26754,26755],{"class":1955},"ls",[106,26757,26758],{"class":221}," \u002Fdev\n",[106,26760,26761],{"class":108,"line":28},[106,26762,26763],{"class":175},"#例如\n",[106,26765,26766,26769,26771],{"class":108,"line":1172},[106,26767,26768],{"class":116},"--device",[106,26770,162],{"class":112},[106,26772,26773],{"class":221},"\u002Fdev\u002Ftty_USB0\n",[60,26775,26776],{"start":28},[63,26777,26778],{},"方法二(个人更加推荐，不用重新再挂载了，虽然安全性会降低，但是别人利用安全权限能够攻击你的概率很低很低，企业服务器才需要提防)：",[97,26780,26782],{"className":23815,"code":26781,"language":23817,"meta":25,"style":25},"--privileged\n",[103,26783,26784],{"__ignoreMap":25},[106,26785,26786],{"class":108,"line":109},[106,26787,26781],{"class":1955},[14,26789,26790],{},"直接添加一行绿色部分，然后所有设备都会被挂载到docker了。(红色部分就不用写了）",[14,26792,26793],{},[23,26794],{"alt":25,"src":26795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-006.png",[77,26797,26799],{"id":26798},"_32nvidia显卡直通","3.2.NVIDIA显卡直通",[14,26801,26802,26803,26806],{},"NVIDIA Container Toolkit使用户 ",[266,26804,26805],{},"能够构建和运行GPU加速的容器"," 。该工具包包括一个容器运行库和实用程序，用于自动配置容器以利用NVIDIA GPU。",[14,26808,26809],{},[23,26810],{"alt":25,"src":26811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-007.png",[14,26813,26814],{},[355,26815,26816],{"href":26816,"rel":26817},"https:\u002F\u002Fdocs.nvidia.com\u002Fdatacenter\u002Fcloud-native\u002Fcontainer-toolkit\u002Flatest\u002Finstall-guide.html",[23858],[21991,26819,26821],{"id":26820},"_321安装","3.2.1.安装",[14,26823,26824],{},"（尽量能看官方就看官方的，安装方式可能会更新）",[22903,26826,26828],{"id":26827},"_3211ubuntu","3.2.1.1.Ubuntu",[60,26830,26831],{},[63,26832,26833],{},"配置存储库 并更新",[97,26835,26837],{"className":23815,"code":26836,"language":23817,"meta":25,"style":25},"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",[103,26838,26839,26868,26888,26900,26912,26918],{"__ignoreMap":25},[106,26840,26841,26844,26847,26850,26852,26854,26857,26860,26863,26866],{"class":108,"line":109},[106,26842,26843],{"class":1955},"curl",[106,26845,26846],{"class":165}," -fsSL",[106,26848,26849],{"class":221}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fgpgkey",[106,26851,25103],{"class":112},[106,26853,26067],{"class":1955},[106,26855,26856],{"class":221}," gpg",[106,26858,26859],{"class":165}," --dearmor",[106,26861,26862],{"class":165}," -o",[106,26864,26865],{"class":221}," \u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg",[106,26867,24672],{"class":165},[106,26869,26870,26873,26875,26878,26881,26884,26886],{"class":108,"line":28},[106,26871,26872],{"class":116},"  && ",[106,26874,26843],{"class":1955},[106,26876,26877],{"class":165}," -s",[106,26879,26880],{"class":165}," -L",[106,26882,26883],{"class":221}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Fdeb\u002Fnvidia-container-toolkit.list",[106,26885,25103],{"class":112},[106,26887,24672],{"class":165},[106,26889,26890,26893,26896,26898],{"class":108,"line":1172},[106,26891,26892],{"class":1955},"    sed",[106,26894,26895],{"class":221}," 's#deb https:\u002F\u002F#deb [signed-by=\u002Fusr\u002Fshare\u002Fkeyrings\u002Fnvidia-container-toolkit-keyring.gpg] https:\u002F\u002F#g'",[106,26897,25103],{"class":112},[106,26899,24672],{"class":165},[106,26901,26902,26905,26907,26910],{"class":108,"line":1187},[106,26903,26904],{"class":1955},"    sudo",[106,26906,26210],{"class":221},[106,26908,26909],{"class":221}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fnvidia-container-toolkit.list",[106,26911,24672],{"class":165},[106,26913,26914,26916],{"class":108,"line":1193},[106,26915,26872],{"class":116},[106,26917,26169],{"class":165},[106,26919,26920,26922,26924],{"class":108,"line":1207},[106,26921,26904],{"class":1955},[106,26923,26070],{"class":221},[106,26925,26236],{"class":221},[60,26927,26928],{"start":28},[63,26929,26930],{},"安装nvidia-docker2",[97,26932,26934],{"className":23815,"code":26933,"language":23817,"meta":25,"style":25},"sudo apt-get install -y nvidia-docker2\n",[103,26935,26936],{"__ignoreMap":25},[106,26937,26938,26940,26942,26944,26946],{"class":108,"line":109},[106,26939,24570],{"class":1955},[106,26941,26070],{"class":221},[106,26943,23827],{"class":221},[106,26945,26394],{"class":165},[106,26947,26948],{"class":221}," nvidia-docker2\n",[60,26950,26951],{"start":1172},[63,26952,26953],{},"使用nvidia-ctk命令配置container runtime",[97,26955,26957],{"className":23815,"code":26956,"language":23817,"meta":25,"style":25},"sudo nvidia-ctk runtime configure --runtime=docker\n",[103,26958,26959],{"__ignoreMap":25},[106,26960,26961,26963,26966,26969,26972],{"class":108,"line":109},[106,26962,24570],{"class":1955},[106,26964,26965],{"class":221}," nvidia-ctk",[106,26967,26968],{"class":221}," runtime",[106,26970,26971],{"class":221}," configure",[106,26973,26974],{"class":165}," --runtime=docker\n",[60,26976,26977],{"start":1187},[63,26978,26979],{},"重启docker服务:",[97,26981,26983],{"className":23815,"code":26982,"language":23817,"meta":25,"style":25},"sudo systemctl restart docker\n",[103,26984,26985],{"__ignoreMap":25},[106,26986,26987,26989,26991,26994],{"class":108,"line":109},[106,26988,24570],{"class":1955},[106,26990,26507],{"class":221},[106,26992,26993],{"class":221}," restart",[106,26995,26486],{"class":221},[22903,26997,26999],{"id":26998},"_3212fedora","3.2.1.2.Fedora",[60,27001,27002],{},[63,27003,27004],{},"配置存储库",[97,27006,27008],{"className":23815,"code":27007,"language":23817,"meta":25,"style":25},"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",[103,27009,27010,27025],{"__ignoreMap":25},[106,27011,27012,27014,27016,27018,27021,27023],{"class":108,"line":109},[106,27013,26843],{"class":1955},[106,27015,26877],{"class":165},[106,27017,26880],{"class":165},[106,27019,27020],{"class":221}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Fnvidia-container-toolkit.repo",[106,27022,25103],{"class":112},[106,27024,24672],{"class":165},[106,27026,27027,27029,27031],{"class":108,"line":28},[106,27028,24570],{"class":1955},[106,27030,26210],{"class":221},[106,27032,27033],{"class":221}," \u002Fetc\u002Fyum.repos.d\u002Fnvidia-container-toolkit.repo\n",[60,27035,27036],{"start":28},[63,27037,27038],{},"配置NVIDIA容器工具库的官方软件源，使用实验包，可选",[97,27040,27042],{"className":23815,"code":27041,"language":23817,"meta":25,"style":25},"# 如果是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",[103,27043,27044,27049,27063,27067,27072],{"__ignoreMap":25},[106,27045,27046],{"class":108,"line":109},[106,27047,27048],{"class":175},"# 如果是RHEL或者Rocky（DNF4）\n",[106,27050,27051,27053,27055,27057,27060],{"class":108,"line":28},[106,27052,24570],{"class":1955},[106,27054,26309],{"class":221},[106,27056,26408],{"class":221},[106,27058,27059],{"class":165}," --add-repo",[106,27061,27062],{"class":221}," https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[106,27064,27065],{"class":108,"line":1172},[106,27066,2392],{"emptyLinePlaceholder":33},[106,27068,27069],{"class":108,"line":1187},[106,27070,27071],{"class":175},"# 如果是Feodra41+（DNF5）\n",[106,27073,27074,27076,27078,27080,27082],{"class":108,"line":1193},[106,27075,24570],{"class":1955},[106,27077,26309],{"class":221},[106,27079,26408],{"class":221},[106,27081,26411],{"class":221},[106,27083,27084],{"class":165}," --from-repofile=https:\u002F\u002Fnvidia.github.io\u002Flibnvidia-container\u002Fstable\u002Frpm\u002Flibnvidia-container.repo\n",[60,27086,27087],{"start":1172},[63,27088,27089],{},"安装NVIDIA Container Toolki包",[97,27091,27093],{"className":23815,"code":27092,"language":23817,"meta":25,"style":25},"# 如果是RHEL或者Rocky\nsudo dnf install -y nvidia-container-toolkit\n\n# 如果是Fedora\nsudo dnf install -y nvidia-container-toolkit\n",[103,27094,27095,27100,27113,27117,27122],{"__ignoreMap":25},[106,27096,27097],{"class":108,"line":109},[106,27098,27099],{"class":175},"# 如果是RHEL或者Rocky\n",[106,27101,27102,27104,27106,27108,27110],{"class":108,"line":28},[106,27103,24570],{"class":1955},[106,27105,26309],{"class":221},[106,27107,23827],{"class":221},[106,27109,26394],{"class":165},[106,27111,27112],{"class":221}," nvidia-container-toolkit\n",[106,27114,27115],{"class":108,"line":1172},[106,27116,2392],{"emptyLinePlaceholder":33},[106,27118,27119],{"class":108,"line":1187},[106,27120,27121],{"class":175},"# 如果是Fedora\n",[106,27123,27124,27126,27128,27130,27132],{"class":108,"line":1193},[106,27125,24570],{"class":1955},[106,27127,26309],{"class":221},[106,27129,23827],{"class":221},[106,27131,26394],{"class":165},[106,27133,27112],{"class":221},[60,27135,27136],{"start":1187},[63,27137,27138,27139,27141],{},"安装nvidia-docker2 ： 在Fedora上使用",[103,27140,26284],{},"进行安装",[97,27143,27145],{"className":23815,"code":27144,"language":23817,"meta":25,"style":25},"sudo dnf install -y nvidia-docker2\n",[103,27146,27147],{"__ignoreMap":25},[106,27148,27149,27151,27153,27155,27157],{"class":108,"line":109},[106,27150,24570],{"class":1955},[106,27152,26309],{"class":221},[106,27154,23827],{"class":221},[106,27156,26394],{"class":165},[106,27158,26948],{"class":221},[60,27160,27161],{"start":1193},[63,27162,27163],{},"使用nvidia-ctk命令配置容器运行时 ： 这个命令用于配置NVIDIA Container Toolkit与Docker集成。命令如下：",[97,27165,27166],{"className":23815,"code":26956,"language":23817,"meta":25,"style":25},[103,27167,27168],{"__ignoreMap":25},[106,27169,27170,27172,27174,27176,27178],{"class":108,"line":109},[106,27171,24570],{"class":1955},[106,27173,26965],{"class":221},[106,27175,26968],{"class":221},[106,27177,26971],{"class":221},[106,27179,26974],{"class":165},[60,27181,27182],{"start":1207},[63,27183,27184],{},"重启Docker服务 ： 完成配置后，必须重启Docker服务以使更改生效：",[97,27186,27187],{"className":23815,"code":26982,"language":23817,"meta":25,"style":25},[103,27188,27189],{"__ignoreMap":25},[106,27190,27191,27193,27195,27197],{"class":108,"line":109},[106,27192,24570],{"class":1955},[106,27194,26507],{"class":221},[106,27196,26993],{"class":221},[106,27198,26486],{"class":221},[14,27200,27201],{},"这些步骤执行后，Docker将使用NVIDIA Container Runtime，并支持GPU加速的容器运行。你可以使用nvidia-smi命令来验证容器中的NVIDIA GPU是否可用",[14,27203,27204],{},"方法：",[14,27206,27207],{},"1️⃣nvidia-smi",[14,27209,27210],{},"2️⃣运行nvidia cuda 容器进行测试",[97,27212,27214],{"className":23815,"code":27213,"language":23817,"meta":25,"style":25},"sudo docker run --rm --gpus all nvidia\u002Fcuda:11.0.3-base-ubuntu20.04 nvidia-smi\n",[103,27215,27216],{"__ignoreMap":25},[106,27217,27218,27220,27222,27225,27228,27231,27234,27237],{"class":108,"line":109},[106,27219,24570],{"class":1955},[106,27221,26314],{"class":221},[106,27223,27224],{"class":221}," run",[106,27226,27227],{"class":165}," --rm",[106,27229,27230],{"class":165}," --gpus",[106,27232,27233],{"class":221}," all",[106,27235,27236],{"class":221}," nvidia\u002Fcuda:11.0.3-base-ubuntu20.04",[106,27238,27239],{"class":221}," nvidia-smi\n",[14,27241,27242],{},"docker会自动从nvidia\u002Fcuda拉取11.0.3-base-ubuntu20.04镜像，并创建一个运行一次即删除的容器",[14,27244,27245],{},[23,27246],{"alt":25,"src":27247},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-008.png",[77,27249,27251],{"id":27250},"_33docker配置cuda和cudnn","3.3.Docker配置CUDA和CuDNN",[14,27253,27254],{},"如果你不需要自己创建Docker镜像，直接使用学长或者其他人创建好的镜像，则不用看该章节，容器的CUDA和CuDNN是和本地完全隔离的环境，你本地有没有CUDA都无所谓，但英伟达驱动版本必须满足CUDA的最低版本要求。",[14,27256,27257],{},"下面是如果你想自己创建镜像，则可以在学会如何创建容器的镜像后再回来看本节：",[14,27259,27260],{},[355,27261,27262],{"href":27262,"rel":27263},"https:\u002F\u002Fhub.docker.com\u002Fr\u002Fnvidia\u002Fcuda",[23858],[14,27265,27266],{},"在上方这个网站中，英伟达都帮我们配置好了CUDA和CuDNN了，我们根本不需要自己去配置了，比传统方式要简单太多太多了。",[14,27268,27269],{},"我们只需要找到对应的Docker镜像当底包即可。",[14,27271,27272],{},"CUDA镜像有三个类型，如下，如果我们需要编译OpenCV4,那么需要使用devel版的CUDA。",[254,27274,27275,27291],{},[257,27276,27277],{},[260,27278,27279,27282,27285,27288],{},[263,27280,27281],{"align":23729},"镜像类型",[263,27283,27284],{"align":23729},"适用场景",[263,27286,27287],{"align":23729},"示例标签",[263,27289,27290],{"align":23729},"大小",[301,27292,27293,27307,27321],{},[260,27294,27295,27298,27301,27304],{},[306,27296,27297],{"align":23729},"base",[306,27299,27300],{"align":23729},"仅需 CUDA 运行时库",[306,27302,27303],{"align":23729},"12.4.0-base-ubuntu22.04",[306,27305,27306],{"align":23729},"~240MB",[260,27308,27309,27312,27315,27318],{},[306,27310,27311],{"align":23729},"runtime",[306,27313,27314],{"align":23729},"部署编译后的应用（含数学库）",[306,27316,27317],{"align":23729},"12.4.0-runtime-ubuntu22.04",[306,27319,27320],{"align":23729},"~2GB",[260,27322,27323,27326,27329,27332],{},[306,27324,27325],{"align":23729},"devel",[306,27327,27328],{"align":23729},"开发环境（含编译工具）",[306,27330,27331],{"align":23729},"12.4.0-devel-ubuntu22.04",[306,27333,27334],{"align":23729},"~3GB",[14,27336,27337,27338,27341],{},"我示例一个，比如我想用在Ubuntu24.04上用CUDA12.6和CuDNN，那么就选择",[103,27339,27340],{},"nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04","。这个镜像既有CUDA-devel也有CuDNN，而且还是基于Ubuntu24.04的。",[14,27343,27344],{},[23,27345],{"alt":25,"src":27346},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-009.png",[14,27348,27349],{},"在dockerfile里就可以开头这么写：",[97,27351,27353],{"className":23815,"code":27352,"language":23817,"meta":25,"style":25},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\nFROM nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[103,27354,27355,27360],{"__ignoreMap":25},[106,27356,27357],{"class":108,"line":109},[106,27358,27359],{"class":175},"# 基于NVIDIA官方CUDA 12.6和CuDNN基础镜像\n",[106,27361,27362,27365],{"class":108,"line":28},[106,27363,27364],{"class":1955},"FROM",[106,27366,27367],{"class":221}," nvidia\u002Fcuda:12.6.0-cudnn-devel-ubuntu24.04\n",[77,27369,27371],{"id":27370},"_34配置以太网","3.4.配置以太网",[14,27373,27374],{},"指定网络模式",[97,27376,27378],{"className":23815,"code":27377,"language":23817,"meta":25,"style":25},"--net=host \\\n",[103,27379,27380],{"__ignoreMap":25},[106,27381,27382,27385,27387,27390],{"class":108,"line":109},[106,27383,27384],{"class":116},"--net",[106,27386,162],{"class":112},[106,27388,27389],{"class":221},"host",[106,27391,24672],{"class":1955},[14,27393,27394],{},"启动参数里加上这行即可。具体在下方",[14,27396,27397],{},"--net选项：指定网络模式，该选项有以下参数可选：",[1124,27399,27400,27403,27406,27409],{},[63,27401,27402],{},"--net=bridge:默认选项，表示连接到默认的网桥",[63,27404,27405],{},"--net=host:容器使用宿主机的网络",[63,27407,27408],{},"--net=container:Name-or-ID:告诉Docker让新建的容器使用已有容器的网络配置",[63,27410,27411],{},"--net=none：不配置该容器的网络，用户自定义网络配置",[5119,27413,27414],{},"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":25,"searchDepth":28,"depth":28,"links":27416},[27417,27418,27419,27420],{"id":26731,"depth":1172,"text":26732},{"id":26798,"depth":1172,"text":26799},{"id":27250,"depth":1172,"text":27251},{"id":27370,"depth":1172,"text":27371},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch3-docker",{"title":26720,"description":26728},"wiki\u002F2025-11-10-Docker\u002Fch3-Docker直通","3SumKNcyD4vYz0D1pW1XpeDrzDFvMpi3imN6YMXjcfA",{"id":27427,"title":27428,"body":27429,"description":27436,"extension":31,"meta":27442,"navigation":33,"path":27443,"seo":27444,"stem":27445,"__hash__":27446},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源.md","4.DockerHub换源",{"type":7,"value":27430,"toc":27440},[27431,27434,27437],[10,27432,27428],{"id":27433},"_4dockerhub换源",[14,27435,27436],{},"（DockerHub已于2024年5月被🇨🇳封杀，各大国内镜像源均已下架DockerHub镜像源，直接挂梯用官方源吧）",[14,27438,27439],{},"各大镜像源只有Docker-Ce的镜像库，这个是用来安装docker的，而不是dockerhub的镜像源。",{"title":25,"searchDepth":28,"depth":28,"links":27441},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch4-dockerhub",{"title":27428,"description":27436},"wiki\u002F2025-11-10-Docker\u002Fch4-DockerHub换源","3CWIuSicuLr9U-Hfgi3WEZVlW4kQZuOPYkyp9VBbnxY",{"id":27448,"title":27449,"body":27450,"description":25,"extension":31,"meta":28462,"navigation":33,"path":28463,"seo":28464,"stem":28465,"__hash__":28466},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习.md","5.Docker命令学习",{"type":7,"value":27451,"toc":28457},[27452,27455,27459,27465,27469,27472,27812,27815,27818,27821,27826,27831,27834,27837,27840,27843,27862,27865,27876,27882,28064,28074,28090,28353,28355,28380,28395,28404,28454],[10,27453,27449],{"id":27454},"_5docker命令学习",[77,27456,27458],{"id":27457},"_51参考文档","5.1.参考文档",[14,27460,27461],{},[355,27462,27463],{"href":27463,"rel":27464},"https:\u002F\u002Fwww.runoob.com\u002Fdocker\u002Fdocker-tutorial.html",[23858],[77,27466,27468],{"id":27467},"_52常用命令","5.2.常用命令",[14,27470,27471],{},"常用的标红了，偶尔用的标绿了，其他了解就行。",[254,27473,27474,27487],{},[257,27475,27476],{},[260,27477,27478,27481,27484],{},[263,27479,27480],{"align":23729},"命令",[263,27482,27483],{"align":23729},"描述",[263,27485,27486],{"align":23729},"示例",[301,27488,27489,27500,27511,27522,27533,27544,27555,27566,27576,27587,27598,27609,27619,27630,27641,27652,27662,27672,27682,27692,27703,27714,27725,27736,27747,27758,27768,27779,27790,27801],{},[260,27490,27491,27494,27497],{},[306,27492,27493],{"align":23729},"docker run",[306,27495,27496],{"align":23729},"创建并启动一个新的容器。",[306,27498,27499],{"align":23729},"docker run -it ubuntu bash",[260,27501,27502,27505,27508],{},[306,27503,27504],{"align":23729},"docker build",[306,27506,27507],{"align":23729},"通过指定的 Dockerfile 创建一个新的镜像。",[306,27509,27510],{"align":23729},"docker build -t myimage .",[260,27512,27513,27516,27519],{},[306,27514,27515],{"align":23729},"docker pull",[306,27517,27518],{"align":23729},"从 Docker 仓库拉取镜像。",[306,27520,27521],{"align":23729},"docker pull ubuntu",[260,27523,27524,27527,27530],{},[306,27525,27526],{"align":23729},"docker push",[306,27528,27529],{"align":23729},"将本地镜像推送到 Docker 仓库。",[306,27531,27532],{"align":23729},"docker push myimage",[260,27534,27535,27538,27541],{},[306,27536,27537],{"align":23729},"docker stop",[306,27539,27540],{"align":23729},"停止一个正在运行的容器。",[306,27542,27543],{"align":23729},"docker stop container_id",[260,27545,27546,27549,27552],{},[306,27547,27548],{"align":23729},"docker start",[306,27550,27551],{"align":23729},"启动一个已经存在的容器。",[306,27553,27554],{"align":23729},"docker start container_id",[260,27556,27557,27560,27563],{},[306,27558,27559],{"align":23729},"docker restart",[306,27561,27562],{"align":23729},"重新启动容器。",[306,27564,27565],{"align":23729},"docker restart container_id",[260,27567,27568,27571,27574],{},[306,27569,27570],{"align":23729},"docker ps",[306,27572,27573],{"align":23729},"列出当前正在运行的容器。",[306,27575,27570],{"align":23729},[260,27577,27578,27581,27584],{},[306,27579,27580],{"align":23729},"docker rm",[306,27582,27583],{"align":23729},"删除一个或多个停止的容器。",[306,27585,27586],{"align":23729},"docker rm container_id",[260,27588,27589,27592,27595],{},[306,27590,27591],{"align":23729},"docker exec",[306,27593,27594],{"align":23729},"在一个正在运行的容器中执行命令。",[306,27596,27597],{"align":23729},"docker exec -it container_id bash",[260,27599,27600,27603,27606],{},[306,27601,27602],{"align":23729},"docker logs",[306,27604,27605],{"align":23729},"查看容器的日志输出。",[306,27607,27608],{"align":23729},"docker logs container_id",[260,27610,27611,27614,27617],{},[306,27612,27613],{"align":23729},"docker images",[306,27615,27616],{"align":23729},"列出本地所有镜像。",[306,27618,27613],{"align":23729},[260,27620,27621,27624,27627],{},[306,27622,27623],{"align":23729},"docker rmi",[306,27625,27626],{"align":23729},"删除一个或多个镜像。",[306,27628,27629],{"align":23729},"docker rmi myimage",[260,27631,27632,27635,27638],{},[306,27633,27634],{"align":23729},"docker network",[306,27636,27637],{"align":23729},"管理 Docker 网络。",[306,27639,27640],{"align":23729},"docker network ls",[260,27642,27643,27646,27649],{},[306,27644,27645],{"align":23729},"docker volume",[306,27647,27648],{"align":23729},"管理 Docker 数据卷。",[306,27650,27651],{"align":23729},"docker volume ls",[260,27653,27654,27657,27660],{},[306,27655,27656],{"align":23729},"docker-compose up",[306,27658,27659],{"align":23729},"启动 docker-compose.yml 中定义的所有服务。",[306,27661,27656],{"align":23729},[260,27663,27664,27667,27670],{},[306,27665,27666],{"align":23729},"docker-compose down",[306,27668,27669],{"align":23729},"停止并移除 docker-compose.yml 中定义的所有服务及其相关资源。",[306,27671,27666],{"align":23729},[260,27673,27674,27677,27680],{},[306,27675,27676],{"align":23729},"docker info",[306,27678,27679],{"align":23729},"显示 Docker 系统的详细信息。",[306,27681,27676],{"align":23729},[260,27683,27684,27687,27690],{},[306,27685,27686],{"align":23729},"docker stats",[306,27688,27689],{"align":23729},"查看正在运行的容器的实时资源使用情况（CPU、内存等）。",[306,27691,27686],{"align":23729},[260,27693,27694,27697,27700],{},[306,27695,27696],{"align":23729},"docker inspect",[306,27698,27699],{"align":23729},"查看容器或镜像的详细信息（JSON 格式）。",[306,27701,27702],{"align":23729},"docker inspect container_id",[260,27704,27705,27708,27711],{},[306,27706,27707],{"align":23729},"docker save",[306,27709,27710],{"align":23729},"将一个镜像保存为 tar 文件。",[306,27712,27713],{"align":23729},"docker save -o myimage.tar myimage",[260,27715,27716,27719,27722],{},[306,27717,27718],{"align":23729},"docker load",[306,27720,27721],{"align":23729},"从 tar 文件中加载镜像。",[306,27723,27724],{"align":23729},"docker load -i myimage.tar",[260,27726,27727,27730,27733],{},[306,27728,27729],{"align":23729},"docker tag",[306,27731,27732],{"align":23729},"为镜像添加标签（tag）。",[306,27734,27735],{"align":23729},"docker tag myimage myimage:v1",[260,27737,27738,27741,27744],{},[306,27739,27740],{"align":23729},"docker buildx build",[306,27742,27743],{"align":23729},"使用 Buildx 构建多架构镜像。",[306,27745,27746],{"align":23729},"docker buildx build -t myimage .",[260,27748,27749,27752,27755],{},[306,27750,27751],{"align":23729},"docker buildx create",[306,27753,27754],{"align":23729},"创建一个新的 Buildx 构建实例。",[306,27756,27757],{"align":23729},"docker buildx create –use",[260,27759,27760,27763,27766],{},[306,27761,27762],{"align":23729},"docker buildx ls",[306,27764,27765],{"align":23729},"列出所有可用的 Buildx 构建实例。",[306,27767,27762],{"align":23729},[260,27769,27770,27773,27776],{},[306,27771,27772],{"align":23729},"docker buildx use",[306,27774,27775],{"align":23729},"设置当前的 Buildx 构建实例。",[306,27777,27778],{"align":23729},"docker buildx use mybuilder",[260,27780,27781,27784,27787],{},[306,27782,27783],{"align":23729},"docker buildx bake",[306,27785,27786],{"align":23729},"使用 Bake 文件批量构建镜像。",[306,27788,27789],{"align":23729},"docker buildx bake -f bake.hcl",[260,27791,27792,27795,27798],{},[306,27793,27794],{"align":23729},"docker buildx build –push",[306,27796,27797],{"align":23729},"构建镜像并推送到镜像仓库。",[306,27799,27800],{"align":23729},"docker buildx build –push -t myimage .",[260,27802,27803,27806,27809],{},[306,27804,27805],{"align":23729},"docker buildx build –platform",[306,27807,27808],{"align":23729},"构建镜像并为多个平台生成支持。",[306,27810,27811],{"align":23729},"docker buildx build –platform linux\u002Famd64,linux\u002Farm64 -t myimage .",[14,27813,27814],{},"docker exec -it 进入容器并给予i输入和t终端 （docker exec -it 4f6c8cd45b58 \u002Fbin\u002Fbash）",[14,27816,27817],{},"docker search 可以查看Docker Hub上关键字的镜像仓库",[14,27819,27820],{},"docker images 可以查看已经下载的镜像",[14,27822,27823],{},[23,27824],{"alt":25,"src":27825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-010.png",[14,27827,27828],{},[266,27829,27830],{},"Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器",[14,27832,27833],{},"docker rmi $(docker images -q) 删除所有的镜像",[14,27835,27836],{},"docker container logs 查看容器日志",[14,27838,27839],{},"docker top 查看容器里的进程",[14,27841,27842],{},"docker cp 容器id:要拷贝的文件在容器里面的路径 宿主机的相应路径",[97,27844,27846],{"className":23815,"code":27845,"language":23817,"meta":25,"style":25},"如：docker cp 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf \u002Fmydata\u002Fnginx\n",[103,27847,27848],{"__ignoreMap":25},[106,27849,27850,27853,27856,27859],{"class":108,"line":109},[106,27851,27852],{"class":1955},"如：docker",[106,27854,27855],{"class":221}," cp",[106,27857,27858],{"class":221}," 7aa5dc458f9d:\u002Fetc\u002Fnginx\u002Fnginx.conf",[106,27860,27861],{"class":221}," \u002Fmydata\u002Fnginx\n",[14,27863,27864],{},"docker run时在启动容器的时候会有几个常用的选项：",[1124,27866,27867,27870,27873],{},[63,27868,27869],{},"-d选项：表示后台运行",[63,27871,27872],{},"-P选项：随机端口映射",[63,27874,27875],{},"-p选项：指定端口映射，有以下四种方式： --ip:hostPort:containerPort --ip::containerPort --hostPort::containerPort --containerPort",[77,27877,27879],{"id":27878},"_53run命令的参数非常重要",[266,27880,27881],{},"5.3.run命令的参数（非常重要）",[254,27883,27884,27897],{},[257,27885,27886],{},[260,27887,27888,27891,27894],{},[263,27889,27890],{"align":23729},"参数\u002F配置",[263,27892,27893],{"align":23729},"功能说明",[263,27895,27896],{"align":23729},"重要性与参考依据",[301,27898,27899,27910,27921,27932,27943,27954,27965,27976,27987,27998,28009,28020,28031,28042,28053],{},[260,27900,27901,27904,27907],{},[306,27902,27903],{"align":23729},"-name=ros_jazzy_opencv411_cuda128_cudnn971_noble",[306,27905,27906],{"align":23729},"指定容器名称，便于后续管理",[306,27908,27909],{"align":23729},"替代随机生成的容器名。",[260,27911,27912,27915,27918],{},[306,27913,27914],{"align":23729},"–gpus all",[306,27916,27917],{"align":23729},"允许容器访问宿主机所有GPU资源，需NVIDIA驱动支持",[306,27919,27920],{"align":23729},"用于CUDA加速等GPU依赖任务。",[260,27922,27923,27926,27929],{},[306,27924,27925],{"align":23729},"-e NVIDIA_DRIVER_CAPABILITIES=all",[306,27927,27928],{"align":23729},"启用NVIDIA驱动的全部功能（如CUDA、图形渲染）",[306,27930,27931],{"align":23729},"确保容器内GPU功能完整67。",[260,27933,27934,27937,27940],{},[306,27935,27936],{"align":23729},"-dit",[306,27938,27939],{"align":23729},"组合参数：- -d：后台运行容器（Detached模式）- -i：保持标准输入（STDIN）开放- -t：分配伪终端（TTY）",[306,27941,27942],{"align":23729},"允许容器在后台运行并支持交互操作。",[260,27944,27945,27948,27951],{},[306,27946,27947],{"align":23729},"–privileged",[306,27949,27950],{"align":23729},"赋予容器完全主机权限（可访问设备、内核模块等）",[306,27952,27953],{"align":23729},"用于需要直接操作硬件的场景（如访问USB设备），但存在安全风险。",[260,27955,27956,27959,27962],{},[306,27957,27958],{"align":23729},"–net=host",[306,27960,27961],{"align":23729},"共享宿主机网络命名空间（容器使用宿主机IP和端口）",[306,27963,27964],{"align":23729},"简化网络配置，无NAT，这样的话，网络效率更高，局域网设备更容易发现。",[260,27966,27967,27970,27973],{},[306,27968,27969],{"align":23729},"–group-add audio–group-add video–group-add dialout",[306,27971,27972],{"align":23729},"将容器用户加入宿主机用户组：- audio：音频设备访问- video：视频设备访问- dialout：串口设备访问",[306,27974,27975],{"align":23729},"避免权限问题（如避免无法调用摄像头、麦克风）。",[260,27977,27978,27981,27984],{},[306,27979,27980],{"align":23729},"-e DISPLAY=$DISPLAY-e XAUTHORITY=\u002Fhome\u002Ftungchiahui\u002F.Xauthority-e WAYLAND_DISPLAY-e XDG_RUNTIME_DIR-e QT_QPA_PLATFORM=xcb",[306,27982,27983],{"align":23729},"配置图形显示环境：- 绑定宿主机显示接口（X11或Wayland）- 设置GUI应用渲染后端",[306,27985,27986],{"align":23729},"支持容器内运行图形界面应用（如OpenCV可视化）。",[260,27988,27989,27992,27995],{},[306,27990,27991],{"align":23729},"-v \u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw-v \u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[306,27993,27994],{"align":23729},"挂载宿主机图形设备：- X11套接字目录- 直接渲染管理器（DRI）设备",[306,27996,27997],{"align":23729},"实现容器内图形显示。",[260,27999,28000,28003,28006],{},[306,28001,28002],{"align":23729},"-v $HOME\u002F.Xauthority:\u002Fhome\u002Ftungchiahui\u002F.Xauthority:ro",[306,28004,28005],{"align":23729},"挂载X11认证文件（只读）",[306,28007,28008],{"align":23729},"确保容器有权连接宿主机显示服务。",[260,28010,28011,28014,28017],{},[306,28012,28013],{"align":23729},"-v \u002Frun\u002Fuser\u002F1000\u002Fwayland-0-v \u002Frun\u002Fuser\u002F1000",[306,28015,28016],{"align":23729},"挂载Wayland显示协议相关目录",[306,28018,28019],{"align":23729},"支持Wayland协议的图形显示。",[260,28021,28022,28025,28028],{},[306,28023,28024],{"align":23729},"–ulimit nofile=1024:524288",[306,28026,28027],{"align":23729},"设置进程最大可打开文件数（nofile）的方式，用于控制容器或进程运行时的文件句柄数量限制。–ulimit \u003C限制类型>=\u003C软限制>:\u003C硬限制>",[306,28029,28030],{"align":23729},"如果默认限制太小，可能会出现 “too many open files” 的错误。所以在容器运行或系统服务启动时，需要调大这个值。–ulimit nofile=4096:65536",[260,28032,28033,28036,28039],{},[306,28034,28035],{"align":23729},"-v \u002Fhome\u002Ftungchiahui:\u002Fhome\u002Ftungchiahui",[306,28037,28038],{"align":23729},"挂载宿主机用户目录到容器内同名路径",[306,28040,28041],{"align":23729},"实现宿主机与容器间文件共享（如代码、数据持久化）。",[260,28043,28044,28047,28050],{},[306,28045,28046],{"align":23729},"-w \u002Fhome\u002Ftungchiahui",[306,28048,28049],{"align":23729},"设置容器启动后的默认工作目录",[306,28051,28052],{"align":23729},"直接进入项目路径，方便执行命令2324。",[260,28054,28055,28058,28061],{},[306,28056,28057],{"align":23729},"tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn971-noble",[306,28059,28060],{"align":23729},"镜像名称指定镜像及标签，包含：- ROS 2 Jazzy- OpenCV 4.11- CUDA 12.8- cuDNN 9.7.1",[306,28062,28063],{"align":23729},"提供预配置的深度学习与机器人开发环境。",[14,28065,28066,28067,28069,28070,28073],{},"下方这条命令一定要在普通用户下运行，不要在root用户下运行，其实加不加",[103,28068,24570],{},"加不加",[103,28071,28072],{},"sudo -E","都无所谓。",[14,28075,28076,28077,28079,28080,28082,28083,28086,28087,28089],{},"用户已经被加到docker组了，不用",[103,28078,24570],{},"也行跑，其次，",[103,28081,24570],{},"运行的话，你的",[103,28084,28085],{},"$HOME","变量也不会变，更何况加上-E的话，这样你的",[103,28088,28085],{},"更不可能变了。",[97,28091,28093],{"className":23815,"code":28092,"language":23817,"meta":25,"style":25},"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",[103,28094,28095,28108,28118,28128,28140,28147,28154,28161,28171,28180,28189,28203,28215,28227,28236,28246,28255,28270,28303,28330,28341,28348],{"__ignoreMap":25},[106,28096,28097,28099,28101,28103,28106],{"class":108,"line":109},[106,28098,24570],{"class":1955},[106,28100,26314],{"class":221},[106,28102,27224],{"class":221},[106,28104,28105],{"class":165}," --name=ros_opencv_cuda",[106,28107,24672],{"class":165},[106,28109,28110,28113,28116],{"class":108,"line":28},[106,28111,28112],{"class":116},"--gpus ",[106,28114,28115],{"class":221},"all",[106,28117,24672],{"class":165},[106,28119,28120,28123,28126],{"class":108,"line":1172},[106,28121,28122],{"class":116},"-e ",[106,28124,28125],{"class":221},"NVIDIA_DRIVER_CAPABILITIES=all",[106,28127,24672],{"class":165},[106,28129,28130,28132,28135,28138],{"class":108,"line":1187},[106,28131,28122],{"class":116},[106,28133,28134],{"class":221},"DISPLAY=",[106,28136,28137],{"class":116},"$DISPLAY ",[106,28139,26169],{"class":165},[106,28141,28142,28145],{"class":108,"line":1193},[106,28143,28144],{"class":116},"-dit ",[106,28146,26169],{"class":165},[106,28148,28149,28152],{"class":108,"line":1207},[106,28150,28151],{"class":116},"--privileged ",[106,28153,26169],{"class":165},[106,28155,28156,28159],{"class":108,"line":1213},[106,28157,28158],{"class":116},"--net=host ",[106,28160,26169],{"class":165},[106,28162,28163,28166,28169],{"class":108,"line":1304},[106,28164,28165],{"class":116},"--group-add ",[106,28167,28168],{"class":221},"audio",[106,28170,24672],{"class":165},[106,28172,28173,28175,28178],{"class":108,"line":1310},[106,28174,28165],{"class":116},[106,28176,28177],{"class":221},"video",[106,28179,24672],{"class":165},[106,28181,28182,28184,28187],{"class":108,"line":1322},[106,28183,28165],{"class":116},[106,28185,28186],{"class":221},"dialout",[106,28188,24672],{"class":165},[106,28190,28191,28193,28196,28198,28201],{"class":108,"line":1604},[106,28192,28122],{"class":116},[106,28194,28195],{"class":221},"XAUTHORITY=",[106,28197,28085],{"class":116},[106,28199,28200],{"class":221},"\u002F.Xauthority",[106,28202,24672],{"class":165},[106,28204,28205,28207,28210,28213],{"class":108,"line":1609},[106,28206,28122],{"class":116},[106,28208,28209],{"class":221},"WAYLAND_DISPLAY=",[106,28211,28212],{"class":116},"$WAYLAND_DISPLAY ",[106,28214,26169],{"class":165},[106,28216,28217,28219,28222,28225],{"class":108,"line":1615},[106,28218,28122],{"class":116},[106,28220,28221],{"class":221},"XDG_RUNTIME_DIR=",[106,28223,28224],{"class":116},"$XDG_RUNTIME_DIR ",[106,28226,26169],{"class":165},[106,28228,28229,28231,28234],{"class":108,"line":1620},[106,28230,28122],{"class":116},[106,28232,28233],{"class":221},"QT_QPA_PLATFORM=xcb",[106,28235,24672],{"class":165},[106,28237,28238,28241,28244],{"class":108,"line":1634},[106,28239,28240],{"class":116},"-v ",[106,28242,28243],{"class":221},"\u002Ftmp\u002F.X11-unix:\u002Ftmp\u002F.X11-unix:rw",[106,28245,24672],{"class":165},[106,28247,28248,28250,28253],{"class":108,"line":1639},[106,28249,28240],{"class":116},[106,28251,28252],{"class":221},"\u002Fdev\u002Fdri:\u002Fdev\u002Fdri",[106,28254,24672],{"class":165},[106,28256,28257,28260,28263,28265,28268],{"class":108,"line":1645},[106,28258,28259],{"class":116},"-v $HOME",[106,28261,28262],{"class":221},"\u002F.Xauthority:",[106,28264,28085],{"class":116},[106,28266,28267],{"class":221},"\u002F.Xauthority:ro",[106,28269,24672],{"class":165},[106,28271,28272,28274,28277,28279,28282,28285,28287,28290,28292,28294,28296,28298,28301],{"class":108,"line":1666},[106,28273,28240],{"class":116},[106,28275,28276],{"class":221},"\u002Frun\u002Fuser\u002F",[106,28278,25093],{"class":116},[106,28280,28281],{"class":1955},"id",[106,28283,28284],{"class":165}," -u",[106,28286,546],{"class":116},[106,28288,28289],{"class":221},"\u002Fwayland-0:\u002Frun\u002Fuser\u002F",[106,28291,25093],{"class":116},[106,28293,28281],{"class":1955},[106,28295,28284],{"class":165},[106,28297,546],{"class":116},[106,28299,28300],{"class":221},"\u002Fwayland-0",[106,28302,24672],{"class":165},[106,28304,28305,28307,28309,28311,28313,28315,28317,28320,28322,28324,28326,28328],{"class":108,"line":1671},[106,28306,28240],{"class":116},[106,28308,28276],{"class":221},[106,28310,25093],{"class":116},[106,28312,28281],{"class":1955},[106,28314,28284],{"class":165},[106,28316,546],{"class":116},[106,28318,28319],{"class":221},":\u002Frun\u002Fuser\u002F",[106,28321,25093],{"class":116},[106,28323,28281],{"class":1955},[106,28325,28284],{"class":165},[106,28327,13707],{"class":116},[106,28329,26169],{"class":165},[106,28331,28332,28334,28336,28339],{"class":108,"line":1685},[106,28333,28259],{"class":116},[106,28335,976],{"class":221},[106,28337,28338],{"class":116},"$HOME ",[106,28340,26169],{"class":165},[106,28342,28343,28346],{"class":108,"line":1690},[106,28344,28345],{"class":116},"-w $HOME ",[106,28347,26169],{"class":165},[106,28349,28350],{"class":108,"line":1719},[106,28351,28352],{"class":116},"tungchiahui\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy\n",[14,28354,9018],{},[60,28356,28357,28365,28368,28371],{},[63,28358,28359,13788,28361,28364],{},[103,28360,28125],{},[103,28362,28363],{},"--gpus all","没有英伟达显卡请注释。",[63,28366,28367],{},"--name后面请自己为容器起名。",[63,28369,28370],{},"最后一行仓库名称请你自己找对应的镜像填上。",[63,28372,28373,28374,28379],{},"ROS1在Fedora发行版下会爆内存，需要添加上下面这个参数，如果你不是Fedora和ROS1,",[23546,28375,28376],{},[266,28377,28378],{},"请不要加","。",[97,28381,28383],{"className":23815,"code":28382,"language":23817,"meta":25,"style":25},"--ulimit nofile=1024:524288 \\\n",[103,28384,28385],{"__ignoreMap":25},[106,28386,28387,28390,28393],{"class":108,"line":109},[106,28388,28389],{"class":1955},"--ulimit",[106,28391,28392],{"class":221}," nofile=1024:524288",[106,28394,24672],{"class":165},[14,28396,28397,28398,28403],{},"如果想用当前用户登陆容器,可以加上下面这几条,但非常非常",[23546,28399,28400],{},[266,28401,28402],{},"不建议","**.**",[97,28405,28407],{"className":23815,"code":28406,"language":23817,"meta":25,"style":25},"--user $(id -u):$(id -g) \\\n-v \u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro \\\n-v \u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro \\\n",[103,28408,28409,28436,28445],{"__ignoreMap":25},[106,28410,28411,28414,28417,28419,28421,28423,28425,28427,28429,28432,28434],{"class":108,"line":109},[106,28412,28413],{"class":1955},"--user",[106,28415,28416],{"class":116}," $(",[106,28418,28281],{"class":1955},[106,28420,28284],{"class":165},[106,28422,546],{"class":116},[106,28424,976],{"class":221},[106,28426,25093],{"class":116},[106,28428,28281],{"class":1955},[106,28430,28431],{"class":165}," -g",[106,28433,13707],{"class":116},[106,28435,26169],{"class":165},[106,28437,28438,28440,28443],{"class":108,"line":28},[106,28439,28240],{"class":116},[106,28441,28442],{"class":221},"\u002Fetc\u002Fpasswd:\u002Fetc\u002Fpasswd:ro",[106,28444,24672],{"class":165},[106,28446,28447,28449,28452],{"class":108,"line":1172},[106,28448,28240],{"class":116},[106,28450,28451],{"class":221},"\u002Fetc\u002Fgroup:\u002Fetc\u002Fgroup:ro",[106,28453,24672],{"class":165},[5119,28455,28456],{},"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":25,"searchDepth":28,"depth":28,"links":28458},[28459,28460,28461],{"id":27457,"depth":1172,"text":27458},{"id":27467,"depth":1172,"text":27468},{"id":27878,"depth":1172,"text":27881},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch5-docker",{"title":27449,"description":25},"wiki\u002F2025-11-10-Docker\u002Fch5-Docker命令学习","G0221wUbE2NPPL3_iqRgrDmGtdCFY_26n0BQpBEY1bQ",{"id":28468,"title":28469,"body":28470,"description":25,"extension":31,"meta":30093,"navigation":33,"path":30094,"seo":30095,"stem":30096,"__hash__":30097},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像.md","6.手动创建Docker镜像",{"type":7,"value":28471,"toc":30088},[28472,28475,28479,28482,28704,28708,28712,28715,28821,28826,28829,28834,28837,28842,28845,28850,28853,28865,28868,28873,28880,28908,28915,28991,28996,28999,29022,29024,29099,29104,29107,29111,29119,29124,29129,29133,29144,29150,29153,29156,29180,29183,29186,29214,29217,29220,29685,29688,29693,29698,29702,29725,29730,29734,29738,29741,29744,29747,29774,29777,29780,29798,29801,29804,29826,29834,29839,29844,29848,29851,29854,29857,29860,29905,29908,29926,29929,29934,29937,29958,29961,30017,30020,30025,30029,30032,30039,30042,30045,30050,30053,30069,30072,30085],[10,28473,28469],{"id":28474},"_6手动创建docker镜像",[77,28476,28478],{"id":28477},"_61dockerfile","6.1.DockerFile",[14,28480,28481],{},"常用命令：",[254,28483,28484,28495],{},[257,28485,28486],{},[260,28487,28488,28491,28493],{},[263,28489,28490],{"align":23729},"指令",[263,28492,25863],{"align":23729},[263,28494,27486],{"align":23729},[301,28496,28497,28507,28523,28534,28545,28556,28567,28578,28589,28603,28617,28628,28642,28653,28664,28678,28693],{},[260,28498,28499,28501,28504],{},[306,28500,27364],{"align":23729},[306,28502,28503],{"align":23729},"指定基础镜像，是 Dockerfile 的起点",[306,28505,28506],{"align":23729},"FROM ubuntu:22.04",[260,28508,28509,28512,28515],{},[306,28510,28511],{"align":23729},"LABEL",[306,28513,28514],{"align":23729},"添加元数据（如作者、版本等）",[306,28516,28517,28518,28522],{"align":23729},"LABEL maintainer=”",[355,28519,28521],{"href":28520},"mailto:you@example.com","you@example.com","”",[260,28524,28525,28528,28531],{},[306,28526,28527],{"align":23729},"ENV",[306,28529,28530],{"align":23729},"设置环境变量",[306,28532,28533],{"align":23729},"ENV PORT=8080",[260,28535,28536,28539,28542],{},[306,28537,28538],{"align":23729},"ARG",[306,28540,28541],{"align":23729},"构建参数，只在构建期间可用",[306,28543,28544],{"align":23729},"ARG VERSION=1.0",[260,28546,28547,28550,28553],{},[306,28548,28549],{"align":23729},"RUN",[306,28551,28552],{"align":23729},"构建镜像时运行命令",[306,28554,28555],{"align":23729},"RUN apt-get update && apt-get install -y curl",[260,28557,28558,28561,28564],{},[306,28559,28560],{"align":23729},"COPY",[306,28562,28563],{"align":23729},"复制文件到镜像中",[306,28565,28566],{"align":23729},"COPY . \u002Fapp",[260,28568,28569,28572,28575],{},[306,28570,28571],{"align":23729},"ADD",[306,28573,28574],{"align":23729},"类似 COPY，额外支持解压 .tar 文件或远程 URL（不推荐用于 URL）",[306,28576,28577],{"align":23729},"ADD archive.tar.gz \u002Fdata\u002F",[260,28579,28580,28583,28586],{},[306,28581,28582],{"align":23729},"WORKDIR",[306,28584,28585],{"align":23729},"设置工作目录",[306,28587,28588],{"align":23729},"WORKDIR \u002Fopt",[260,28590,28591,28594,28597],{},[306,28592,28593],{"align":23729},"CMD",[306,28595,28596],{"align":23729},"设置容器启动时默认命令（可被 docker run 覆盖）",[306,28598,28599,28600],{"align":23729},"CMD ",[106,28601,28602],{},"“node”, “index.js”",[260,28604,28605,28608,28611],{},[306,28606,28607],{"align":23729},"ENTRYPOINT",[306,28609,28610],{"align":23729},"设置容器启动时固定命令（通常用于 CLI 工具等）",[306,28612,28613,28614],{"align":23729},"ENTRYPOINT ",[106,28615,28616],{},"“python3”",[260,28618,28619,28622,28625],{},[306,28620,28621],{"align":23729},"EXPOSE",[306,28623,28624],{"align":23729},"声明镜像内服务监听的端口（不会自动映射）",[306,28626,28627],{"align":23729},"EXPOSE 80",[260,28629,28630,28633,28636],{},[306,28631,28632],{"align":23729},"VOLUME",[306,28634,28635],{"align":23729},"声明数据卷挂载点",[306,28637,28638,28639],{"align":23729},"VOLUME ",[106,28640,28641],{},"“\u002Fdata”",[260,28643,28644,28647,28650],{},[306,28645,28646],{"align":23729},"USER",[306,28648,28649],{"align":23729},"设置后续命令执行的用户",[306,28651,28652],{"align":23729},"USER appuser",[260,28654,28655,28658,28661],{},[306,28656,28657],{"align":23729},"ONBUILD",[306,28659,28660],{"align":23729},"当镜像作为其他镜像基础镜像时触发的构建指令",[306,28662,28663],{"align":23729},"ONBUILD COPY . \u002Fsrc",[260,28665,28666,28669,28672],{},[306,28667,28668],{"align":23729},"SHELL",[306,28670,28671],{"align":23729},"更改默认 shell，比如将 sh -c 改为 bash -c",[306,28673,28674,28675],{"align":23729},"SHELL ",[106,28676,28677],{},"“\u002Fbin\u002Fbash”, “-c”",[260,28679,28680,28683,28686],{},[306,28681,28682],{"align":23729},"HEALTHCHECK",[306,28684,28685],{"align":23729},"定义容器运行时的健康检查命令",[306,28687,28688,28689],{"align":23729},"`HEALTHCHECK CMD curl –fail ",[355,28690,28691],{"href":28691,"rel":28692},"http:\u002F\u002Flocalhost:8080",[23858],[260,28694,28695,28698,28701],{},[306,28696,28697],{"align":23729},"STOPSIGNAL",[306,28699,28700],{"align":23729},"容器停止时发送的信号",[306,28702,28703],{"align":23729},"STOPSIGNAL SIGKILL",[77,28705,28707],{"id":28706},"_62自己创建容器","6.2.自己创建容器",[21991,28709,28711],{"id":28710},"_621手动创建","6.2.1.手动创建",[14,28713,28714],{},"在x86电脑上编译x86的：",[97,28716,28718],{"className":23815,"code":28717,"language":23817,"meta":25,"style":25},"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",[103,28719,28720,28736,28740,28753,28757,28770,28774,28787,28791,28804,28808],{"__ignoreMap":25},[106,28721,28722,28724,28727,28730,28733],{"class":108,"line":109},[106,28723,26547],{"class":1955},[106,28725,28726],{"class":221}," build",[106,28728,28729],{"class":165}," -t",[106,28731,28732],{"class":221}," ros-melodic-cuda118-cudnn8-bionic:latest",[106,28734,28735],{"class":221}," .\n",[106,28737,28738],{"class":108,"line":28},[106,28739,2392],{"emptyLinePlaceholder":33},[106,28741,28742,28744,28746,28748,28751],{"class":108,"line":1172},[106,28743,26547],{"class":1955},[106,28745,28726],{"class":221},[106,28747,28729],{"class":165},[106,28749,28750],{"class":221}," ros-noetic-focal:latest",[106,28752,28735],{"class":221},[106,28754,28755],{"class":108,"line":1187},[106,28756,2392],{"emptyLinePlaceholder":33},[106,28758,28759,28761,28763,28765,28768],{"class":108,"line":1193},[106,28760,26547],{"class":1955},[106,28762,28726],{"class":221},[106,28764,28729],{"class":165},[106,28766,28767],{"class":221}," ros-humble-jammy:latest",[106,28769,28735],{"class":221},[106,28771,28772],{"class":108,"line":1207},[106,28773,2392],{"emptyLinePlaceholder":33},[106,28775,28776,28778,28780,28782,28785],{"class":108,"line":1213},[106,28777,26547],{"class":1955},[106,28779,28726],{"class":221},[106,28781,28729],{"class":165},[106,28783,28784],{"class":221}," ros-jazzy-noble:latest",[106,28786,28735],{"class":221},[106,28788,28789],{"class":108,"line":1304},[106,28790,2392],{"emptyLinePlaceholder":33},[106,28792,28793,28795,28797,28799,28802],{"class":108,"line":1310},[106,28794,26547],{"class":1955},[106,28796,28726],{"class":221},[106,28798,28729],{"class":165},[106,28800,28801],{"class":221}," ros-humble-opencv411-cuda128-cudnn970-jammy:latest",[106,28803,28735],{"class":221},[106,28805,28806],{"class":108,"line":1322},[106,28807,2392],{"emptyLinePlaceholder":33},[106,28809,28810,28812,28814,28816,28819],{"class":108,"line":1604},[106,28811,26547],{"class":1955},[106,28813,28726],{"class":221},[106,28815,28729],{"class":165},[106,28817,28818],{"class":221}," ros-jazzy-opencv411-cuda128-cudnn970-noble:latest",[106,28820,28735],{"class":221},[14,28822,28823],{},[23,28824],{"alt":25,"src":28825},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-011.png",[14,28827,28828],{},"镜像大小5GB(压缩后的大小详见DockerHub)",[14,28830,28831],{},[23,28832],{"alt":25,"src":28833},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-012.png",[14,28835,28836],{},"将 Docker 镜像推送到 Docker Hub 的步骤如下：",[60,28838,28839],{},[63,28840,28841],{},"创建 Docker Hub 账户",[14,28843,28844],{},"如果你还没有 Docker Hub 账户，请前往 Docker Hub 注册一个免费账户。",[60,28846,28847],{"start":28},[63,28848,28849],{},"登录 Docker Hub",[14,28851,28852],{},"在终端中使用以下命令登录到你的 Docker Hub 账户：",[97,28854,28856],{"className":23815,"code":28855,"language":23817,"meta":25,"style":25},"docker login\n",[103,28857,28858],{"__ignoreMap":25},[106,28859,28860,28862],{"class":108,"line":109},[106,28861,26547],{"class":1955},[106,28863,28864],{"class":221}," login\n",[14,28866,28867],{},"输入你的 Docker Hub 用户名和密码进行验证。",[60,28869,28870],{},[63,28871,28872],{},"为你的镜像打标签",[14,28874,28875,28876,28879],{},"Docker Hub 使用 ",[103,28877,28878],{},"\u003C用户名>\u002F\u003C镜像名>:\u003C标签>"," 的格式来标识镜像。你需要为你的镜像打上标签，以便能够推送到 Docker Hub。使用以下命令：",[97,28881,28883],{"className":23815,"code":28882,"language":23817,"meta":25,"style":25},"docker tag ros-jazzy-noble:latest \u003C你的用户名>\u002Fros-jazzy-noble:latest\n",[103,28884,28885],{"__ignoreMap":25},[106,28886,28887,28889,28892,28894,28897,28900,28903,28905],{"class":108,"line":109},[106,28888,26547],{"class":1955},[106,28890,28891],{"class":221}," tag",[106,28893,28784],{"class":221},[106,28895,28896],{"class":112}," \u003C",[106,28898,28899],{"class":221},"你的用户",[106,28901,28902],{"class":116},"名",[106,28904,1077],{"class":112},[106,28906,28907],{"class":221},"\u002Fros-jazzy-noble:latest\n",[14,28909,28910,28911,28914],{},"例如，如果你的 Docker Hub 用户名是 ",[103,28912,28913],{},"tungchiahui","，你应该执行：",[97,28916,28918],{"className":23815,"code":28917,"language":23817,"meta":25,"style":25},"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",[103,28919,28920,28931,28935,28946,28950,28961,28965,28976,28980],{"__ignoreMap":25},[106,28921,28922,28924,28926,28928],{"class":108,"line":109},[106,28923,26547],{"class":1955},[106,28925,28891],{"class":221},[106,28927,28750],{"class":221},[106,28929,28930],{"class":221}," tungchiahui\u002Fros-noetic-focal:latest\n",[106,28932,28933],{"class":108,"line":28},[106,28934,2392],{"emptyLinePlaceholder":33},[106,28936,28937,28939,28941,28943],{"class":108,"line":1172},[106,28938,26547],{"class":1955},[106,28940,28891],{"class":221},[106,28942,28767],{"class":221},[106,28944,28945],{"class":221}," tungchiahui\u002Fros-humble-jammy:latest\n",[106,28947,28948],{"class":108,"line":1187},[106,28949,2392],{"emptyLinePlaceholder":33},[106,28951,28952,28954,28956,28958],{"class":108,"line":1193},[106,28953,26547],{"class":1955},[106,28955,28891],{"class":221},[106,28957,28784],{"class":221},[106,28959,28960],{"class":221}," tungchiahui\u002Fros-jazzy-noble:latest\n",[106,28962,28963],{"class":108,"line":1207},[106,28964,2392],{"emptyLinePlaceholder":33},[106,28966,28967,28969,28971,28973],{"class":108,"line":1213},[106,28968,26547],{"class":1955},[106,28970,28891],{"class":221},[106,28972,28801],{"class":221},[106,28974,28975],{"class":221}," \u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[106,28977,28978],{"class":108,"line":1304},[106,28979,2392],{"emptyLinePlaceholder":33},[106,28981,28982,28984,28986,28988],{"class":108,"line":1310},[106,28983,26547],{"class":1955},[106,28985,28891],{"class":221},[106,28987,28818],{"class":221},[106,28989,28990],{"class":221}," tungchiahui\u002Fros-jazzy-opencv411-cuda128-cudnn970-noble:latest\n",[60,28992,28993],{"start":28},[63,28994,28995],{},"推送镜像到 Docker Hub",[14,28997,28998],{},"使用以下命令将镜像推送到 Docker Hub：",[97,29000,29002],{"className":23815,"code":29001,"language":23817,"meta":25,"style":25},"docker push \u003C你的用户名>\u002Fros-noetic-jazzy-noble:latest\n",[103,29003,29004],{"__ignoreMap":25},[106,29005,29006,29008,29011,29013,29015,29017,29019],{"class":108,"line":109},[106,29007,26547],{"class":1955},[106,29009,29010],{"class":221}," push",[106,29012,28896],{"class":112},[106,29014,28899],{"class":221},[106,29016,28902],{"class":116},[106,29018,1077],{"class":112},[106,29020,29021],{"class":221},"\u002Fros-noetic-jazzy-noble:latest\n",[14,29023,14626],{},[97,29025,29027],{"className":23815,"code":29026,"language":23817,"meta":25,"style":25},"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",[103,29028,29029,29037,29041,29049,29053,29061,29065,29074,29078,29086,29090],{"__ignoreMap":25},[106,29030,29031,29033,29035],{"class":108,"line":109},[106,29032,26547],{"class":1955},[106,29034,29010],{"class":221},[106,29036,28930],{"class":221},[106,29038,29039],{"class":108,"line":28},[106,29040,2392],{"emptyLinePlaceholder":33},[106,29042,29043,29045,29047],{"class":108,"line":1172},[106,29044,26547],{"class":1955},[106,29046,29010],{"class":221},[106,29048,28945],{"class":221},[106,29050,29051],{"class":108,"line":1187},[106,29052,2392],{"emptyLinePlaceholder":33},[106,29054,29055,29057,29059],{"class":108,"line":1193},[106,29056,26547],{"class":1955},[106,29058,29010],{"class":221},[106,29060,28960],{"class":221},[106,29062,29063],{"class":108,"line":1207},[106,29064,2392],{"emptyLinePlaceholder":33},[106,29066,29067,29069,29071],{"class":108,"line":1213},[106,29068,26547],{"class":1955},[106,29070,29010],{"class":221},[106,29072,29073],{"class":221}," tungchiahui\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[106,29075,29076],{"class":108,"line":1304},[106,29077,2392],{"emptyLinePlaceholder":33},[106,29079,29080,29082,29084],{"class":108,"line":1310},[106,29081,26547],{"class":1955},[106,29083,29010],{"class":221},[106,29085,28990],{"class":221},[106,29087,29088],{"class":108,"line":1322},[106,29089,2392],{"emptyLinePlaceholder":33},[106,29091,29092,29094,29096],{"class":108,"line":1604},[106,29093,26547],{"class":1955},[106,29095,29010],{"class":221},[106,29097,29098],{"class":221}," tungchiahui\u002Fros-noetic-focal-arm64:latest\n",[60,29100,29101],{"start":1172},[63,29102,29103],{},"验证推送成功",[14,29105,29106],{},"你可以通过访问 Docker Hub 的个人页面来验证你的镜像是否已成功推送",[14,29108,29109],{},[266,29110,3776],{},[1124,29112,29113,29116],{},[63,29114,29115],{},"确保你的镜像大小在 Docker Hub 的限制范围内（一般为 10GB）",[63,29117,29118],{},"如果你打算将镜像公开，可以设置为公共仓库；如果希望只有你自己可以访问，可以设置为私有仓库",[14,29120,29121],{},[23,29122],{"alt":25,"src":29123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-013.png",[14,29125,29126],{},[23,29127],{"alt":25,"src":29128},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-014.png",[21991,29130,29132],{"id":29131},"_622手动创建跨平台多架构构建","6.2.2.手动创建(跨平台多架构构建)",[14,29134,29135,29136,29139,29140,29143],{},"如果您想在 ",[266,29137,29138],{},"x86\u002Fx64 电脑上即为本机x86设备构建镜像，又想为树莓派、Jetson等ARM64 设备构建 Docker 镜像"," ，需要使用 ",[266,29141,29142],{},"Docker 的跨平台构建功能"," 。以下是完整解决方案：",[14,29145,29146,29147],{},"1. ",[266,29148,29149],{},"启用 Docker 跨平台构建",[14,29151,29152],{},"在 x86 主机上模拟 ARM64 环境需要以下工具：",[14,29154,29155],{},"第一步：启用 buildx（只需执行一次）",[97,29157,29159],{"className":23815,"code":29158,"language":23817,"meta":25,"style":25},"docker buildx create --name multiarch_builder --use\n",[103,29160,29161],{"__ignoreMap":25},[106,29162,29163,29165,29168,29171,29174,29177],{"class":108,"line":109},[106,29164,26547],{"class":1955},[106,29166,29167],{"class":221}," buildx",[106,29169,29170],{"class":221}," create",[106,29172,29173],{"class":165}," --name",[106,29175,29176],{"class":221}," multiarch_builder",[106,29178,29179],{"class":165}," --use\n",[14,29181,29182],{},"这会创建并启用一个支持多架构构建的 builder，电脑重启后也依然存在，所以只用运行一次。",[14,29184,29185],{},"第二步：安装 QEMU 支持（一般新版 Docker Desktop 已自带，但是Linux必须要安装） 如果你用的是服务器或Linux发行版，确保有 qemu 模拟器：",[97,29187,29189],{"className":23815,"code":29188,"language":23817,"meta":25,"style":25},"docker run --rm --privileged multiarch\u002Fqemu-user-static --reset -p yes\n",[103,29190,29191],{"__ignoreMap":25},[106,29192,29193,29195,29197,29199,29202,29205,29208,29211],{"class":108,"line":109},[106,29194,26547],{"class":1955},[106,29196,27224],{"class":221},[106,29198,27227],{"class":165},[106,29200,29201],{"class":165}," --privileged",[106,29203,29204],{"class":221}," multiarch\u002Fqemu-user-static",[106,29206,29207],{"class":165}," --reset",[106,29209,29210],{"class":165}," -p",[106,29212,29213],{"class":221}," yes\n",[14,29215,29216],{},"电脑重启后，就会消失，所以需要你每次电脑重启后，在buildx命令前，运行一次该命令即可。",[14,29218,29219],{},"第三步：构建多架构镜像 用下面的命令构建 amd64 和 arm64：",[97,29221,29223],{"className":23815,"code":29222,"language":23817,"meta":25,"style":25},"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",[103,29224,29225,29267,29271,29276,29286,29296,29305,29311,29315,29319,29329,29337,29346,29352,29356,29360,29370,29378,29387,29393,29397,29401,29411,29419,29428,29434,29438,29442,29452,29460,29469,29475,29479,29483,29493,29501,29510,29516,29520,29524,29534,29542,29551,29557,29561,29565,29575,29583,29592,29598,29602,29606,29616,29624,29633,29639,29643,29647,29658,29666,29675,29681],{"__ignoreMap":25},[106,29226,29227,29229,29231,29233,29236,29239,29241,29243,29246,29248,29250,29252,29254,29257,29260,29262,29265],{"class":108,"line":109},[106,29228,26547],{"class":1955},[106,29230,29167],{"class":221},[106,29232,28726],{"class":221},[106,29234,29235],{"class":165}," --platform",[106,29237,29238],{"class":221}," linux\u002Famd64,linux\u002Farm64",[106,29240,28729],{"class":165},[106,29242,28896],{"class":112},[106,29244,29245],{"class":221},"你的镜像",[106,29247,28902],{"class":116},[106,29249,1077],{"class":112},[106,29251,976],{"class":221},[106,29253,1027],{"class":112},[106,29255,29256],{"class":221},"标",[106,29258,29259],{"class":116},"签",[106,29261,1077],{"class":112},[106,29263,29264],{"class":165}," --push",[106,29266,28735],{"class":221},[106,29268,29269],{"class":108,"line":28},[106,29270,2392],{"emptyLinePlaceholder":33},[106,29272,29273],{"class":108,"line":1172},[106,29274,29275],{"class":175},"# 例子：\n",[106,29277,29278,29280,29282,29284],{"class":108,"line":1187},[106,29279,26547],{"class":1955},[106,29281,29167],{"class":221},[106,29283,28726],{"class":221},[106,29285,24672],{"class":165},[106,29287,29288,29291,29294],{"class":108,"line":1193},[106,29289,29290],{"class":116},"--platform ",[106,29292,29293],{"class":221},"linux\u002Famd64,linux\u002Farm64",[106,29295,24672],{"class":165},[106,29297,29298,29300,29303],{"class":108,"line":1207},[106,29299,28729],{"class":165},[106,29301,29302],{"class":221}," tungchiahui\u002Fros:noetic-focal",[106,29304,24672],{"class":165},[106,29306,29307,29309],{"class":108,"line":1213},[106,29308,29264],{"class":165},[106,29310,24672],{"class":165},[106,29312,29313],{"class":108,"line":1304},[106,29314,28735],{"class":221},[106,29316,29317],{"class":108,"line":1310},[106,29318,2392],{"emptyLinePlaceholder":33},[106,29320,29321,29323,29325,29327],{"class":108,"line":1322},[106,29322,26547],{"class":1955},[106,29324,29167],{"class":221},[106,29326,28726],{"class":221},[106,29328,24672],{"class":165},[106,29330,29331,29333,29335],{"class":108,"line":1604},[106,29332,29290],{"class":116},[106,29334,29293],{"class":221},[106,29336,24672],{"class":165},[106,29338,29339,29341,29344],{"class":108,"line":1609},[106,29340,28729],{"class":165},[106,29342,29343],{"class":221}," tungchiahui\u002Fros:humble-jammy",[106,29345,24672],{"class":165},[106,29347,29348,29350],{"class":108,"line":1615},[106,29349,29264],{"class":165},[106,29351,24672],{"class":165},[106,29353,29354],{"class":108,"line":1620},[106,29355,28735],{"class":221},[106,29357,29358],{"class":108,"line":1634},[106,29359,2392],{"emptyLinePlaceholder":33},[106,29361,29362,29364,29366,29368],{"class":108,"line":1639},[106,29363,26547],{"class":1955},[106,29365,29167],{"class":221},[106,29367,28726],{"class":221},[106,29369,24672],{"class":165},[106,29371,29372,29374,29376],{"class":108,"line":1645},[106,29373,29290],{"class":116},[106,29375,29293],{"class":221},[106,29377,24672],{"class":165},[106,29379,29380,29382,29385],{"class":108,"line":1666},[106,29381,28729],{"class":165},[106,29383,29384],{"class":221}," tungchiahui\u002Fros:jazzy-noble",[106,29386,24672],{"class":165},[106,29388,29389,29391],{"class":108,"line":1671},[106,29390,29264],{"class":165},[106,29392,24672],{"class":165},[106,29394,29395],{"class":108,"line":1685},[106,29396,28735],{"class":221},[106,29398,29399],{"class":108,"line":1690},[106,29400,2392],{"emptyLinePlaceholder":33},[106,29402,29403,29405,29407,29409],{"class":108,"line":1719},[106,29404,26314],{"class":1955},[106,29406,29167],{"class":221},[106,29408,28726],{"class":221},[106,29410,24672],{"class":165},[106,29412,29413,29415,29417],{"class":108,"line":1724},[106,29414,29290],{"class":116},[106,29416,29293],{"class":221},[106,29418,24672],{"class":165},[106,29420,29421,29423,29426],{"class":108,"line":1741},[106,29422,28729],{"class":165},[106,29424,29425],{"class":221}," tungchiahui\u002Fopencv:411-cuda128-cudnn970-focal",[106,29427,24672],{"class":165},[106,29429,29430,29432],{"class":108,"line":1746},[106,29431,29264],{"class":165},[106,29433,24672],{"class":165},[106,29435,29436],{"class":108,"line":1751},[106,29437,28735],{"class":221},[106,29439,29440],{"class":108,"line":1756},[106,29441,2392],{"emptyLinePlaceholder":33},[106,29443,29444,29446,29448,29450],{"class":108,"line":1770},[106,29445,26547],{"class":1955},[106,29447,29167],{"class":221},[106,29449,28726],{"class":221},[106,29451,24672],{"class":165},[106,29453,29454,29456,29458],{"class":108,"line":1775},[106,29455,29290],{"class":116},[106,29457,29293],{"class":221},[106,29459,24672],{"class":165},[106,29461,29462,29464,29467],{"class":108,"line":2569},[106,29463,28729],{"class":165},[106,29465,29466],{"class":221}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-jammy",[106,29468,24672],{"class":165},[106,29470,29471,29473],{"class":108,"line":2583},[106,29472,29264],{"class":165},[106,29474,24672],{"class":165},[106,29476,29477],{"class":108,"line":2591},[106,29478,28735],{"class":221},[106,29480,29481],{"class":108,"line":2596},[106,29482,2392],{"emptyLinePlaceholder":33},[106,29484,29485,29487,29489,29491],{"class":108,"line":2602},[106,29486,26314],{"class":1955},[106,29488,29167],{"class":221},[106,29490,28726],{"class":221},[106,29492,24672],{"class":165},[106,29494,29495,29497,29499],{"class":108,"line":2608},[106,29496,29290],{"class":116},[106,29498,29293],{"class":221},[106,29500,24672],{"class":165},[106,29502,29503,29505,29508],{"class":108,"line":2613},[106,29504,28729],{"class":165},[106,29506,29507],{"class":221}," tungchiahui\u002Fopencv:411-cuda128-cudnn971-noble",[106,29509,24672],{"class":165},[106,29511,29512,29514],{"class":108,"line":7941},[106,29513,29264],{"class":165},[106,29515,24672],{"class":165},[106,29517,29518],{"class":108,"line":7965},[106,29519,28735],{"class":221},[106,29521,29522],{"class":108,"line":7970},[106,29523,2392],{"emptyLinePlaceholder":33},[106,29525,29526,29528,29530,29532],{"class":108,"line":7976},[106,29527,26547],{"class":1955},[106,29529,29167],{"class":221},[106,29531,28726],{"class":221},[106,29533,24672],{"class":165},[106,29535,29536,29538,29540],{"class":108,"line":8003},[106,29537,29290],{"class":116},[106,29539,29293],{"class":221},[106,29541,24672],{"class":165},[106,29543,29544,29546,29549],{"class":108,"line":8008},[106,29545,28729],{"class":165},[106,29547,29548],{"class":221}," tungchiahui\u002Fros-opencv:noetic-411-cuda128-cudnn970-focal",[106,29550,24672],{"class":165},[106,29552,29553,29555],{"class":108,"line":8014},[106,29554,29264],{"class":165},[106,29556,24672],{"class":165},[106,29558,29559],{"class":108,"line":8026},[106,29560,28735],{"class":221},[106,29562,29563],{"class":108,"line":8038},[106,29564,2392],{"emptyLinePlaceholder":33},[106,29566,29567,29569,29571,29573],{"class":108,"line":8050},[106,29568,26547],{"class":1955},[106,29570,29167],{"class":221},[106,29572,28726],{"class":221},[106,29574,24672],{"class":165},[106,29576,29577,29579,29581],{"class":108,"line":9709},[106,29578,29290],{"class":116},[106,29580,29293],{"class":221},[106,29582,24672],{"class":165},[106,29584,29585,29587,29590],{"class":108,"line":9734},[106,29586,28729],{"class":165},[106,29588,29589],{"class":221}," cherish\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[106,29591,24672],{"class":165},[106,29593,29594,29596],{"class":108,"line":9757},[106,29595,29264],{"class":165},[106,29597,24672],{"class":165},[106,29599,29600],{"class":108,"line":9781},[106,29601,28735],{"class":221},[106,29603,29604],{"class":108,"line":9786},[106,29605,2392],{"emptyLinePlaceholder":33},[106,29607,29608,29610,29612,29614],{"class":108,"line":9791},[106,29609,26314],{"class":1955},[106,29611,29167],{"class":221},[106,29613,28726],{"class":221},[106,29615,24672],{"class":165},[106,29617,29618,29620,29622],{"class":108,"line":9796},[106,29619,29290],{"class":116},[106,29621,29293],{"class":221},[106,29623,24672],{"class":165},[106,29625,29626,29628,29631],{"class":108,"line":9805},[106,29627,28729],{"class":165},[106,29629,29630],{"class":221}," tungchiahui\u002Fros-opencv:jazzy-411-cuda128-cudnn970-noble",[106,29632,24672],{"class":165},[106,29634,29635,29637],{"class":108,"line":9810},[106,29636,29264],{"class":165},[106,29638,24672],{"class":165},[106,29640,29641],{"class":108,"line":9816},[106,29642,28735],{"class":221},[106,29644,29645],{"class":108,"line":9837},[106,29646,2392],{"emptyLinePlaceholder":33},[106,29648,29649,29652,29654,29656],{"class":108,"line":9843},[106,29650,29651],{"class":1955},"  docker",[106,29653,29167],{"class":221},[106,29655,28726],{"class":221},[106,29657,24672],{"class":165},[106,29659,29660,29662,29664],{"class":108,"line":9857},[106,29661,29290],{"class":116},[106,29663,29293],{"class":221},[106,29665,24672],{"class":165},[106,29667,29668,29670,29673],{"class":108,"line":9863},[106,29669,28729],{"class":165},[106,29671,29672],{"class":221}," sdutvincirobot\u002Fros-opencv:humble-411-cuda128-cudnn970-jammy",[106,29674,24672],{"class":165},[106,29676,29677,29679],{"class":108,"line":9890},[106,29678,29264],{"class":165},[106,29680,24672],{"class":165},[106,29682,29683],{"class":108,"line":9899},[106,29684,28735],{"class":221},[14,29686,29687],{},"说明： –platform 指定多架构。 –push 是必须的，因为 buildx 的多平台构建默认是不能本地加载的（除非加 –load，但那只能支持单一架构）",[14,29689,29690],{},[23,29691],{"alt":25,"src":29692},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-015.png",[14,29694,29695],{},[23,29696],{"alt":25,"src":29697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-016.png",[21991,29699,29701],{"id":29700},"_623清除构建缓存","6.2.3.清除构建缓存",[97,29703,29705],{"className":23815,"code":29704,"language":23817,"meta":25,"style":25},"# 清理BuildKit构建缓存\ndocker builder prune -f  \n",[103,29706,29707,29712],{"__ignoreMap":25},[106,29708,29709],{"class":108,"line":109},[106,29710,29711],{"class":175},"# 清理BuildKit构建缓存\n",[106,29713,29714,29716,29719,29722],{"class":108,"line":28},[106,29715,26547],{"class":1955},[106,29717,29718],{"class":221}," builder",[106,29720,29721],{"class":221}," prune",[106,29723,29724],{"class":165}," -f\n",[14,29726,29727],{},[23,29728],{"alt":25,"src":29729},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-017.png",[77,29731,29733],{"id":29732},"_63补充","6.3.补充",[21991,29735,29737],{"id":29736},"_631使用dockfile构建docker镜像","6.3.1.使用Dockfile构建Docker镜像",[14,29739,29740],{},"Dockerfile是一个文本文件，其中包含了若干条指令，指令描述了构建镜像的细节",[14,29742,29743],{},"先来编写一个最简单的Dockerfile，以前文下载的Nginx镜像为例，来编写一个Dockerfile修改该Nginx镜像的首页",[14,29745,29746],{},"1、新建一个空文件夹docker-demo，在里面再新建文件夹app，在app目录下新建一个名为Dockerfile的文件，在里面增加如下内容（vim Dockerfile）：",[97,29748,29750],{"className":23815,"code":29749,"language":23817,"meta":25,"style":25},"FROM nginx\nRUN echo '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>' > \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[103,29751,29752,29759],{"__ignoreMap":25},[106,29753,29754,29756],{"class":108,"line":109},[106,29755,27364],{"class":1955},[106,29757,29758],{"class":221}," nginx\n",[106,29760,29761,29763,29766,29769,29771],{"class":108,"line":28},[106,29762,28549],{"class":1955},[106,29764,29765],{"class":221}," echo",[106,29767,29768],{"class":221}," '\u003Ch1>This is Tuling Nginx!!!\u003C\u002Fh1>'",[106,29770,26216],{"class":112},[106,29772,29773],{"class":221}," \u002Fusr\u002Fshare\u002Fnginx\u002Fhtml\u002Findex.html\n",[14,29775,29776],{},"该Dockerfile非常简单，其中的 FROM、 RUN都是 Dockerfile的指令。 FROM指令用于指定基础镜像， RUN指令用于执行命令",[14,29778,29779],{},"2、在Dockerfile所在路径执行以下命令构建镜像：",[97,29781,29783],{"className":23815,"code":29782,"language":23817,"meta":25,"style":25},"docker build -t nginx:tuling .\n",[103,29784,29785],{"__ignoreMap":25},[106,29786,29787,29789,29791,29793,29796],{"class":108,"line":109},[106,29788,26547],{"class":1955},[106,29790,28726],{"class":221},[106,29792,28729],{"class":165},[106,29794,29795],{"class":221}," nginx:tuling",[106,29797,28735],{"class":221},[14,29799,29800],{},"其中，-t指定镜像名字，命令最后的点（.）表示Dockerfile文件所在路径",[14,29802,29803],{},"3、执行以下命令，即可使用该镜像启动一个 Docker容器",[97,29805,29807],{"className":23815,"code":29806,"language":23817,"meta":25,"style":25},"docker run -d -p 92:80 nginx:tuling\n",[103,29808,29809],{"__ignoreMap":25},[106,29810,29811,29813,29815,29818,29820,29823],{"class":108,"line":109},[106,29812,26547],{"class":1955},[106,29814,27224],{"class":221},[106,29816,29817],{"class":165}," -d",[106,29819,29210],{"class":165},[106,29821,29822],{"class":221}," 92:80",[106,29824,29825],{"class":221}," nginx:tuling\n",[14,29827,29828,29829],{},"4、访问 ",[355,29830,29833],{"href":29831,"rel":29832},"http:\u002F\u002FDocker%E5%AE%BF%E4%B8%BB%E6%9C%BAIP:92\u002F%EF%BC%8C%E5%8F%AF%E7%9C%8B%E5%88%B0%E4%B8%8B%E5%9B%BE%E6%89%80%E7%A4%BA%E7%95%8C%E9%9D%A2",[23858],"http:\u002F\u002FDocker宿主机IP:92\u002F，可看到下图所示界面",[14,29835,29836],{},[23,29837],{"alt":25,"src":29838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-018.png",[14,29840,29841],{},[23,29842],{"alt":25,"src":29843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-019.png",[21991,29845,29847],{"id":29846},"_632使用dockerfile构建微服务镜像","6.3.2.使用Dockerfile构建微服务镜像",[14,29849,29850],{},"只需要知道大体流程即可",[14,29852,29853],{},"以项目tulingmall-member为例，将该微服务的可运行jar包构建成docker镜像",[14,29855,29856],{},"1、将jar包上传linux服务器\u002Froot\u002Ftulingmall\u002Ftulingmall-member目录，在jar包所在目录创建名为Dockerfile的文件",[14,29858,29859],{},"2、在Dockerfile中添加以下内容",[97,29861,29863],{"className":26085,"code":29862,"language":26087,"meta":25,"style":25},"# 基于哪个镜像\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",[103,29864,29865,29870,29875,29880,29885,29890,29895,29900],{"__ignoreMap":25},[106,29866,29867],{"class":108,"line":109},[106,29868,29869],{},"# 基于哪个镜像\n",[106,29871,29872],{"class":108,"line":28},[106,29873,29874],{},"From java:8\n",[106,29876,29877],{"class":108,"line":1172},[106,29878,29879],{},"# 复制文件到容器\n",[106,29881,29882],{"class":108,"line":1187},[106,29883,29884],{},"ADD tulingmall-member-0.0.5.jar \u002Ftulingmall-member-0.0.5.jar\n",[106,29886,29887],{"class":108,"line":1193},[106,29888,29889],{},"# 声明需要暴露的端口\n",[106,29891,29892],{"class":108,"line":1207},[106,29893,29894],{},"EXPOSE 8877\n",[106,29896,29897],{"class":108,"line":1213},[106,29898,29899],{},"# 配置容器启动后执行的命令\n",[106,29901,29902],{"class":108,"line":1304},[106,29903,29904],{},"ENTRYPOINT java ${JAVA_OPTS} -jar \u002Ftulingmall-member-0.0.5.jar\n",[14,29906,29907],{},"3、使用docker build命令构建镜像",[97,29909,29911],{"className":23815,"code":29910,"language":23817,"meta":25,"style":25},"docker build -t tulingmall-member:0.0.5 .\n",[103,29912,29913],{"__ignoreMap":25},[106,29914,29915,29917,29919,29921,29924],{"class":108,"line":109},[106,29916,26547],{"class":1955},[106,29918,28726],{"class":221},[106,29920,28729],{"class":165},[106,29922,29923],{"class":221}," tulingmall-member:0.0.5",[106,29925,28735],{"class":221},[14,29927,29928],{},"格式： docker build -t 镜像名称:标签 Dockerfile的相对位置",[14,29930,29931],{},[23,29932],{"alt":25,"src":29933},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-020.png",[14,29935,29936],{},"4、启动镜像，加-d可在后台启动",[97,29938,29940],{"className":23815,"code":29939,"language":23817,"meta":25,"style":25},"docker run -d -p 8877:8877 tulingmall-member:0.0.5\n",[103,29941,29942],{"__ignoreMap":25},[106,29943,29944,29946,29948,29950,29952,29955],{"class":108,"line":109},[106,29945,26547],{"class":1955},[106,29947,27224],{"class":221},[106,29949,29817],{"class":165},[106,29951,29210],{"class":165},[106,29953,29954],{"class":221}," 8877:8877",[106,29956,29957],{"class":221}," tulingmall-member:0.0.5\n",[14,29959,29960],{},"加上JVM参数：",[97,29962,29964],{"className":23815,"code":29963,"language":23817,"meta":25,"style":25},"# --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",[103,29965,29966,29971,29986,29996,30005,30012],{"__ignoreMap":25},[106,29967,29968],{"class":108,"line":109},[106,29969,29970],{"class":175},"# --cap-add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo，jmap这些命令，如果不需要在容器里执行这些命令可以不加\n",[106,29972,29973,29975,29977,29980,29982,29984],{"class":108,"line":28},[106,29974,26547],{"class":1955},[106,29976,27224],{"class":221},[106,29978,29979],{"class":165},"  -d",[106,29981,29210],{"class":165},[106,29983,29954],{"class":221},[106,29985,24672],{"class":165},[106,29987,29988,29990,29993],{"class":108,"line":1172},[106,29989,28122],{"class":116},[106,29991,29992],{"class":221},"SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.65.174:8848",[106,29994,29995],{"class":165},"  \\\n",[106,29997,29998,30000,30003],{"class":108,"line":1187},[106,29999,28122],{"class":116},[106,30001,30002],{"class":221},"JAVA_OPTS='-Xmx1g -Xms1g -XX:MaxMetaspaceSize=512m'",[106,30004,29995],{"class":165},[106,30006,30007,30010],{"class":108,"line":1193},[106,30008,30009],{"class":116},"--cap-add=SYS_PTRACE  ",[106,30011,26169],{"class":165},[106,30013,30014],{"class":108,"line":1207},[106,30015,30016],{"class":116},"tulingmall-member:0.0.5\n",[14,30018,30019],{},"5、访问会员服务接口",[14,30021,30022],{},[23,30023],{"alt":25,"src":30024},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-021.png",[21991,30026,30028],{"id":30027},"_633将微服务镜像发布到阿里云","6.3.3.将微服务镜像发布到阿里云",[14,30030,30031],{},"我们制作好了微服务镜像，一般需要发布到镜像仓库供别人使用，我们可以选择自建镜像仓库，也可以直接使用官方镜像仓库，这里我们选择",[14,30033,30034,30035],{},"阿里云docker镜像仓库：",[355,30036,30037],{"href":30037,"rel":30038},"https:\u002F\u002Fcr.console.aliyun.com\u002Fcn-hangzhou\u002Finstance\u002Frepositories",[23858],[14,30040,30041],{},"首先，我们需要注册一个阿里云账号，创建容器镜像服务",[14,30043,30044],{},"然后，在linux服务器上用docker login命令登录镜像仓库",[14,30046,30047],{},[23,30048],{"alt":25,"src":30049},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-022.png",[14,30051,30052],{},"要把镜像推送到镜像仓库",[97,30054,30056],{"className":23815,"code":30055,"language":23817,"meta":25,"style":25},"docker tag tulingmall-member:0.0.5 registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[103,30057,30058],{"__ignoreMap":25},[106,30059,30060,30062,30064,30066],{"class":108,"line":109},[106,30061,26547],{"class":1955},[106,30063,28891],{"class":221},[106,30065,29923],{"class":221},[106,30067,30068],{"class":221}," registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[14,30070,30071],{},"最后将镜像推送到远程仓库",[97,30073,30075],{"className":23815,"code":30074,"language":23817,"meta":25,"style":25},"docker push registry.cn-hangzhou.aliyuncs.com\u002Ffox666\u002Ftulingmall-member:0.0.5\n",[103,30076,30077],{"__ignoreMap":25},[106,30078,30079,30081,30083],{"class":108,"line":109},[106,30080,26547],{"class":1955},[106,30082,29010],{"class":221},[106,30084,30068],{"class":221},[5119,30086,30087],{},"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":25,"searchDepth":28,"depth":28,"links":30089},[30090,30091,30092],{"id":28477,"depth":1172,"text":28478},{"id":28706,"depth":1172,"text":28707},{"id":29732,"depth":1172,"text":29733},{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch6-docker",{"title":28469,"description":25},"wiki\u002F2025-11-10-Docker\u002Fch6-手动创建Docker镜像","ViWMXEj6lWx3Vw92hAMOoKTyGbZ4r_bHvPkT-sIqCJk",{"id":30099,"title":30100,"body":30101,"description":25,"extension":31,"meta":30244,"navigation":33,"path":30245,"seo":30246,"stem":30247,"__hash__":30248},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发.md","7.VScode远程开发",{"type":7,"value":30102,"toc":30242},[30103,30106,30111,30116,30119,30124,30129,30132,30137,30142,30145,30150,30153,30156,30159,30162,30165,30168,30188,30210,30213,30216,30236,30239],[10,30104,30100],{"id":30105},"_7vscode远程开发",[60,30107,30108],{},[63,30109,30110],{},"插件1：微软Docker工具",[14,30112,30113],{},[23,30114],{"alt":25,"src":30115},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-023.png",[14,30117,30118],{},"docker扩展插件已经进化为container tools了，请安装container tools",[14,30120,30121],{},[23,30122],{"alt":25,"src":30123},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-024.png",[60,30125,30126],{"start":28},[63,30127,30128],{},"插件2：微软Docker远程开发工具",[14,30130,30131],{},"下面这是远程开发的插件。",[14,30133,30134],{},[23,30135],{"alt":25,"src":30136},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-025.png",[14,30138,30139],{},[23,30140],{"alt":25,"src":30141},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-026.png",[14,30143,30144],{},"上述教程已经挂载了本地磁盘了，所以在Docker容器中可以轻松访问本地的工程",[14,30146,30147],{},[23,30148],{"alt":25,"src":30149},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-10-Docker-027.png",[14,30151,30152],{},"安装完拓展之后，vscode进行链接：",[14,30154,30155],{},"1.按ctrl+shift+p",[14,30157,30158],{},"2.输入 \"Dev Containers: Attach to Running Container\"",[14,30160,30161],{},"3.选择目前运行的容器",[14,30163,30164],{},"4.VS Code 会在新窗口中打开并连接到容器",[14,30166,30167],{},"5.补充一点：在开发时候最好不要将项目所需要的文件夹放到容器中，可以将本地目录挂载到容器内，这样就可以实现项目文件在本地，环境仍然在容器当中 挂载实现方式：",[97,30169,30171],{"className":23815,"code":30170,"language":23817,"meta":25,"style":25},"docker run -v 主机目录:容器目录 image-name\n",[103,30172,30173],{"__ignoreMap":25},[106,30174,30175,30177,30179,30182,30185],{"class":108,"line":109},[106,30176,26547],{"class":1955},[106,30178,27224],{"class":221},[106,30180,30181],{"class":165}," -v",[106,30183,30184],{"class":221}," 主机目录:容器目录",[106,30186,30187],{"class":221}," image-name\n",[97,30189,30191],{"className":23815,"code":30190,"language":23817,"meta":25,"style":25},"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",[103,30192,30193],{"__ignoreMap":25},[106,30194,30195,30197,30199,30202,30204,30207],{"class":108,"line":109},[106,30196,26547],{"class":1955},[106,30198,27224],{"class":221},[106,30200,30201],{"class":165}," -it",[106,30203,30181],{"class":165},[106,30205,30206],{"class":221}," \u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F:\u002Fhome\u002Fcherish\u002Fproject\u002Fpi0.5\u002F",[106,30208,30209],{"class":221}," cherish6\u002Fros-humble-opencv411-cuda128-cudnn970-jammy:latest\n",[14,30211,30212],{},"在运行的时候进行挂载，挂载自己的这个项目目录就可以，不会对其他目录产生影响的 需要补充一点非常重要：不要把系统文件给挂载进去，在容器中如果误删除后，本地就崩了！",[14,30214,30215],{},"查看挂载情况：",[97,30217,30219],{"className":23815,"code":30218,"language":23817,"meta":25,"style":25},"mount | grep -i project\n",[103,30220,30221],{"__ignoreMap":25},[106,30222,30223,30226,30228,30231,30233],{"class":108,"line":109},[106,30224,30225],{"class":1955},"mount",[106,30227,25103],{"class":112},[106,30229,30230],{"class":1955}," grep",[106,30232,26424],{"class":165},[106,30234,30235],{"class":221}," project\n",[14,30237,30238],{},"也可以通过ls来进行查看",[5119,30240,30241],{},"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":25,"searchDepth":28,"depth":28,"links":30243},[],{},"\u002Fwiki\u002F2025-11-10-docker\u002Fch7-vscode",{"title":30100,"description":25},"wiki\u002F2025-11-10-Docker\u002Fch7-VScode远程开发","jXcDt4HYisao6zvVrVK-MtSjb5N3Bk6ZZ0Wv7p7WKKI",{"id":30250,"title":30251,"body":30252,"description":30,"extension":31,"meta":30256,"navigation":33,"path":30258,"seo":30259,"stem":30260,"__hash__":30261},"wiki\u002Fwiki\u002F2025-11-10-Docker\u002Findex.md","Docker",{"type":7,"value":30253,"toc":30254},[],{"title":25,"searchDepth":28,"depth":28,"links":30255},[],{"category":30257},"运维","\u002Fwiki\u002F2025-11-10-docker",{"title":30251,"description":30},"wiki\u002F2025-11-10-Docker\u002Findex","cPixP1_tGoKPYhmNBJD9RRykSUOIBgXIUZ_wkP0gFbg",{"id":30263,"title":30264,"body":30265,"description":30,"extension":31,"meta":30269,"navigation":33,"path":30270,"seo":30271,"stem":30272,"__hash__":30273},"wiki\u002Fwiki\u002F2025-11-10-k8s.md","K8S",{"type":7,"value":30266,"toc":30267},[],{"title":25,"searchDepth":28,"depth":28,"links":30268},[],{"category":30257},"\u002Fwiki\u002F2025-11-10-k8s",{"title":30264,"description":30},"wiki\u002F2025-11-10-k8s","78QQJjmWuXthybVJ5CPmqyTGLhB8l9HoS-XENe0Lur0",{"id":30275,"title":30276,"body":30277,"description":30,"extension":31,"meta":30570,"navigation":33,"path":30571,"seo":30572,"stem":30573,"__hash__":30574},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境.md","1.验证深度学习环境",{"type":7,"value":30278,"toc":30568},[30279,30282,30290,30305,30310,30361,30364,30370,30557,30562,30565],[10,30280,30276],{"id":30281},"_1验证深度学习环境",[14,30283,30284,30285],{},"关于环境的安装，看",[355,30286,30289],{"href":30287,"rel":30288},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FK4cjdAj26ogJLGxVfWTcrwo6nih",[23858],"Pytorch-->深度学习",[14,30291,30292,30293,30296,30297,30300,30301,30304],{},"补充一点安装cuda和cudnn时，使用指令比较好一些，不用单独进行安装，安装pytorch时直接安依赖包就可以（ ",[103,30294,30295],{},"pytorch-cuda=12.4"," 是一个“ ",[266,30298,30299],{},"元包（meta-package）"," ”，它并不包含真正的 CUDA 文件，而是一个 ",[266,30302,30303],{},"依赖集合，"," 里边包含了所需要的一些包，需要注意的是安装前先查看电脑支持的cuda最高版本，要安装的cuda版本小于等于13.0",[14,30306,30307],{},[23,30308],{"alt":25,"src":30309},"\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",[97,30311,30313],{"className":23815,"code":30312,"language":23817,"meta":25,"style":25},"# 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",[103,30314,30315,30320],{"__ignoreMap":25},[106,30316,30317],{"class":108,"line":109},[106,30318,30319],{"class":175},"# CUDA 12.4\n",[106,30321,30322,30325,30327,30330,30333,30336,30339,30342,30344,30347,30350,30353,30356,30358],{"class":108,"line":28},[106,30323,30324],{"class":1955},"conda",[106,30326,23827],{"class":221},[106,30328,30329],{"class":221}," pytorch==",[106,30331,30332],{"class":165},"2.5.1",[106,30334,30335],{"class":221}," torchvision==",[106,30337,30338],{"class":165},"0.20.1",[106,30340,30341],{"class":221}," torchaudio==",[106,30343,30332],{"class":165},[106,30345,30346],{"class":221}," pytorch-cuda=",[106,30348,30349],{"class":165},"12.4",[106,30351,30352],{"class":165}," -c",[106,30354,30355],{"class":221}," pytorch",[106,30357,30352],{"class":165},[106,30359,30360],{"class":221}," nvidia\n",[14,30362,30363],{},"）：",[14,30365,30366],{},[355,30367,30368],{"href":30368,"rel":30369},"https:\u002F\u002Fpytorch.org\u002Fget-started\u002Fprevious-versions\u002F",[23858],[97,30371,30375],{"className":30372,"code":30373,"language":30374,"meta":25,"style":25},"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",[103,30376,30377,30382,30390,30395,30405,30421,30426,30436,30473,30480,30492,30508,30513,30523,30535,30545],{"__ignoreMap":25},[106,30378,30379],{"class":108,"line":109},[106,30380,30381],{"class":175},"# 对深度学习环境进行测试\n",[106,30383,30384,30387],{"class":108,"line":28},[106,30385,30386],{"class":112},"import",[106,30388,30389],{"class":116}," torch\n",[106,30391,30392],{"class":108,"line":1172},[106,30393,30394],{"class":175},"# 查看cuda是否被激活\n",[106,30396,30397,30400,30402],{"class":108,"line":1187},[106,30398,30399],{"class":116},"flag",[106,30401,162],{"class":112},[106,30403,30404],{"class":116},"torch.cuda.is_available()\n",[106,30406,30407,30410,30412,30415,30418],{"class":108,"line":1193},[106,30408,30409],{"class":165},"print",[106,30411,117],{"class":116},[106,30413,30414],{"class":221},"\"cuda:\"",[106,30416,30417],{"class":116},", flag)   ",[106,30419,30420],{"class":175},"#返回true的话说明被激活\n",[106,30422,30423],{"class":108,"line":1207},[106,30424,30425],{"class":175},"# 进行调用查看:有GPU调用GPU，没有GPU调用CPU\n",[106,30427,30428,30431,30433],{"class":108,"line":1213},[106,30429,30430],{"class":116},"ngpu",[106,30432,162],{"class":112},[106,30434,30435],{"class":165},"1\n",[106,30437,30438,30441,30443,30446,30449,30451,30454,30457,30460,30462,30464,30466,30468,30471],{"class":108,"line":1304},[106,30439,30440],{"class":116},"device",[106,30442,162],{"class":112},[106,30444,30445],{"class":116},"torch.device(",[106,30447,30448],{"class":221},"\"cuda:0\"",[106,30450,1696],{"class":112},[106,30452,30453],{"class":116},"(torch.cuda.is_available() ",[106,30455,30456],{"class":112},"and",[106,30458,30459],{"class":116}," ngpu",[106,30461,1077],{"class":112},[106,30463,308],{"class":165},[106,30465,13707],{"class":116},[106,30467,1693],{"class":112},[106,30469,30470],{"class":221}," \"cpu\"",[106,30472,123],{"class":116},[106,30474,30475,30477],{"class":108,"line":1310},[106,30476,30409],{"class":165},[106,30478,30479],{"class":116},"(device)\n",[106,30481,30482,30484,30487,30489],{"class":108,"line":1322},[106,30483,30409],{"class":165},[106,30485,30486],{"class":116},"(torch.cuda.get_device_name(",[106,30488,308],{"class":165},[106,30490,30491],{"class":116},"))\n",[106,30493,30494,30496,30499,30501,30503,30505],{"class":108,"line":1604},[106,30495,30409],{"class":165},[106,30497,30498],{"class":116},"(torch.rand(",[106,30500,188],{"class":165},[106,30502,495],{"class":116},[106,30504,188],{"class":165},[106,30506,30507],{"class":116},").cuda())\n",[106,30509,30510],{"class":108,"line":1609},[106,30511,30512],{"class":175},"# 查看cuda和cudnn的版本\n",[106,30514,30515,30518,30520],{"class":108,"line":1615},[106,30516,30517],{"class":116},"cuda_version",[106,30519,162],{"class":112},[106,30521,30522],{"class":116},"torch.version.cuda\n",[106,30524,30525,30527,30529,30532],{"class":108,"line":1620},[106,30526,30409],{"class":165},[106,30528,117],{"class":116},[106,30530,30531],{"class":221},"\"cuda version\"",[106,30533,30534],{"class":116},",cuda_version)\n",[106,30536,30537,30540,30542],{"class":108,"line":1634},[106,30538,30539],{"class":116},"cudnn_version",[106,30541,162],{"class":112},[106,30543,30544],{"class":116},"torch.backends.cudnn.version()\n",[106,30546,30547,30549,30551,30554],{"class":108,"line":1639},[106,30548,30409],{"class":165},[106,30550,117],{"class":116},[106,30552,30553],{"class":221},"\"cudnn version\"",[106,30555,30556],{"class":116},",cudnn_version)\n",[14,30558,30559],{},[23,30560],{"alt":25,"src":30561},"\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,30563,30564],{},"cuda:0 指的是一块显卡",[5119,30566,30567],{},"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":25,"searchDepth":28,"depth":28,"links":30569},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch1",{"title":30276,"description":30},"wiki\u002F2025-11-03-cnn基础\u002Fch1-验证深度学习环境","RH7hK3Jf2AfXWipS59cUOBvN5klNTAjs1j6ohh9I9GE",{"id":30576,"title":30577,"body":30578,"description":30,"extension":31,"meta":50382,"navigation":33,"path":50383,"seo":50384,"stem":50385,"__hash__":50386},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络.md","2.经典神经网络",{"type":7,"value":30579,"toc":50376},[30580,30583,30587,30591,30594,30599,30604,30607,30612,30617,30622,30625,30629,30634,30638,30643,30646,30651,30654,30657,30660,30663,30668,30671,30676,30681,30686,30691,30694,30698,30701,30706,31310,31315,31318,31323,31326,31329,31793,31796,31799,31802,31805,33856,33859,33864,33869,34664,34667,34672,35450,35454,37113,37117,37831,37835,37839,37844,37849,37854,37857,37862,37867,37872,37877,37882,37886,37891,39173,39178,39181,39184,39187,39342,39345,39348,40564,40569,41264,41268,41272,41277,41282,41285,41290,41295,41300,41305,41310,41315,41320,41325,41330,41335,41340,41345,41350,41355,41360,41365,41370,41375,41380,41385,41390,41395,41400,41405,41410,41415,41420,41425,41430,41435,41439,41443,41446,42924,42928,44575,44579,45273,45277,45280,45283,45827,45830,45834,45837,47234,47238,47241,47819,49606,49610,49613,50373],[10,30581,30577],{"id":30582},"_2经典神经网络",[77,30584,30586],{"id":30585},"_21lenet与alexnet","2.1.LeNet与AlexNet",[21991,30588,30590],{"id":30589},"_211原理介绍","2.1.1.原理介绍",[14,30592,30593],{},"LeNet-5",[60,30595,30596],{},[63,30597,30598],{},"原理",[14,30600,30601],{},[23,30602],{"alt":25,"src":30603},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-003.png",[14,30605,30606],{},"B是batch批次；C是channel通道",[60,30608,30609],{"start":28},[63,30610,30611],{},"网络参数详细",[14,30613,30614],{},[23,30615],{"alt":25,"src":30616},"\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,30618,30619],{},[23,30620],{"alt":25,"src":30621},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-005.png",[14,30623,30624],{},"AlexNet",[60,30626,30627],{},[63,30628,30598],{},[14,30630,30631],{},[23,30632],{"alt":25,"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-006.png",[60,30635,30636],{"start":28},[63,30637,30611],{},[14,30639,30640],{},[23,30641],{"alt":25,"src":30642},"\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,30644,30645],{},"使用dropout使一部分神经元失活，这样可以避免数据量太大导致的过拟合发生，操作如下：",[14,30647,30648],{},[23,30649],{"alt":25,"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-008.png",[14,30652,30653],{},"数据处理中的图像增强操作:",[14,30655,30656],{},"在深度学习中最重要的就是对数据的采集和处理，数据不够的情况下，需要对数据进行扩增，有两个好处：",[14,30658,30659],{},"①增加数据量，保证训练数据充足；②防止过拟合",[14,30661,30662],{},"操作方式：①水平翻转；②随机裁剪；③PCA",[14,30664,30665],{},[23,30666],{"alt":25,"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-009.png",[14,30669,30670],{},"提升网络精确度的方法：LRN正则化",[14,30672,30673],{},[23,30674],{"alt":25,"src":30675},"\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,30677,30678],{},[23,30679],{"alt":25,"src":30680},"\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",[60,30682,30683],{"start":1172},[63,30684,30685],{},"AlexNet的总结",[14,30687,30688],{},[23,30689],{"alt":25,"src":30690},"\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,30692,30693],{},"比LeNet模型要深一丢丢",[21991,30695,30697],{"id":30696},"_212代码实现","2.1.2.代码实现",[14,30699,30700],{},"（1）LeNet",[60,30702,30703],{},[63,30704,30705],{},"模型搭建",[97,30707,30709],{"className":30372,"code":30708,"language":30374,"meta":25,"style":25},"# 导入库\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",[103,30710,30711,30716,30722,30727,30740,30745,30757,30761,30781,30786,30791,30802,30807,30826,30830,30835,30884,30896,30901,30930,30965,30992,30997,31009,31014,31034,31053,31072,31076,31081,31091,31108,31119,31134,31145,31156,31171,31186,31197,31204,31208,31222,31227,31250,31255,31260,31265,31269,31274,31279,31289],{"__ignoreMap":25},[106,30712,30713],{"class":108,"line":109},[106,30714,30715],{"class":175},"# 导入库\n",[106,30717,30718,30720],{"class":108,"line":28},[106,30719,30386],{"class":112},[106,30721,30389],{"class":116},[106,30723,30724],{"class":108,"line":1172},[106,30725,30726],{"class":175},"# 导入神经网络层\n",[106,30728,30729,30732,30735,30737],{"class":108,"line":1187},[106,30730,30731],{"class":112},"from",[106,30733,30734],{"class":116}," torch ",[106,30736,30386],{"class":112},[106,30738,30739],{"class":116}," nn\n",[106,30741,30742],{"class":108,"line":1193},[106,30743,30744],{"class":175},"# 导入展示神经网络参数的包\n",[106,30746,30747,30749,30752,30754],{"class":108,"line":1207},[106,30748,30731],{"class":112},[106,30750,30751],{"class":116}," torchsummary ",[106,30753,30386],{"class":112},[106,30755,30756],{"class":116}," summary\n",[106,30758,30759],{"class":108,"line":1213},[106,30760,2392],{"emptyLinePlaceholder":33},[106,30762,30763,30765,30768,30770,30773,30775,30778],{"class":108,"line":1304},[106,30764,14687],{"class":112},[106,30766,30767],{"class":1955}," LeNet",[106,30769,117],{"class":116},[106,30771,30772],{"class":1955},"nn",[106,30774,675],{"class":116},[106,30776,30777],{"class":1955},"Module",[106,30779,30780],{"class":116},"):\n",[106,30782,30783],{"class":108,"line":1310},[106,30784,30785],{"class":175},"    # 模型初始化:\n",[106,30787,30788],{"class":108,"line":1322},[106,30789,30790],{"class":175},"    # 定义一些网络层和激活函数\n",[106,30792,30793,30796,30799],{"class":108,"line":1604},[106,30794,30795],{"class":112},"    def",[106,30797,30798],{"class":165}," __init__",[106,30800,30801],{"class":116},"(self):\n",[106,30803,30804],{"class":108,"line":1609},[106,30805,30806],{"class":175},"        # 当时使用继承的时候,如果要进行初始化,必须也要将父类进行初始化一下\n",[106,30808,30809,30812,30815,30818,30821,30824],{"class":108,"line":1615},[106,30810,30811],{"class":165},"        super",[106,30813,30814],{"class":116},"(LeNet,",[106,30816,30817],{"class":165},"self",[106,30819,30820],{"class":116},").",[106,30822,30823],{"class":165},"__init__",[106,30825,1968],{"class":116},[106,30827,30828],{"class":108,"line":1620},[106,30829,2392],{"emptyLinePlaceholder":33},[106,30831,30832],{"class":108,"line":1634},[106,30833,30834],{"class":175},"        # 定义网络层\n",[106,30836,30837,30840,30843,30845,30848,30851,30853,30855,30857,30860,30862,30864,30866,30869,30871,30873,30875,30878,30880,30882],{"class":108,"line":1639},[106,30838,30839],{"class":165},"        self",[106,30841,30842],{"class":116},".c1",[106,30844,162],{"class":112},[106,30846,30847],{"class":116},"nn.Conv2d(",[106,30849,30850],{"class":5209},"in_channels",[106,30852,162],{"class":112},[106,30854,334],{"class":165},[106,30856,495],{"class":116},[106,30858,30859],{"class":5209},"out_channels",[106,30861,162],{"class":112},[106,30863,461],{"class":165},[106,30865,495],{"class":116},[106,30867,30868],{"class":5209},"kernel_size",[106,30870,162],{"class":112},[106,30872,436],{"class":165},[106,30874,495],{"class":116},[106,30876,30877],{"class":5209},"padding",[106,30879,162],{"class":112},[106,30881,194],{"class":165},[106,30883,123],{"class":116},[106,30885,30886,30888,30891,30893],{"class":108,"line":1645},[106,30887,30839],{"class":165},[106,30889,30890],{"class":116},".sig",[106,30892,162],{"class":112},[106,30894,30895],{"class":116},"nn.Sigmoid()\n",[106,30897,30898],{"class":108,"line":1666},[106,30899,30900],{"class":175},"        # 定义池化\n",[106,30902,30903,30905,30908,30910,30913,30915,30917,30919,30921,30924,30926,30928],{"class":108,"line":1671},[106,30904,30839],{"class":165},[106,30906,30907],{"class":116},".s2",[106,30909,162],{"class":112},[106,30911,30912],{"class":116},"nn.AvgPool2d(",[106,30914,30868],{"class":5209},[106,30916,162],{"class":112},[106,30918,194],{"class":165},[106,30920,495],{"class":116},[106,30922,30923],{"class":5209},"stride",[106,30925,162],{"class":112},[106,30927,194],{"class":165},[106,30929,123],{"class":116},[106,30931,30932,30934,30937,30939,30941,30943,30945,30947,30949,30951,30953,30955,30957,30959,30961,30963],{"class":108,"line":1685},[106,30933,30839],{"class":165},[106,30935,30936],{"class":116},".c3",[106,30938,162],{"class":112},[106,30940,30847],{"class":116},[106,30942,30850],{"class":5209},[106,30944,162],{"class":112},[106,30946,461],{"class":165},[106,30948,495],{"class":116},[106,30950,30859],{"class":5209},[106,30952,162],{"class":112},[106,30954,718],{"class":165},[106,30956,495],{"class":116},[106,30958,30868],{"class":5209},[106,30960,162],{"class":112},[106,30962,436],{"class":165},[106,30964,123],{"class":116},[106,30966,30967,30969,30972,30974,30976,30978,30980,30982,30984,30986,30988,30990],{"class":108,"line":1690},[106,30968,30839],{"class":165},[106,30970,30971],{"class":116},".s4",[106,30973,162],{"class":112},[106,30975,30912],{"class":116},[106,30977,30868],{"class":5209},[106,30979,162],{"class":112},[106,30981,194],{"class":165},[106,30983,495],{"class":116},[106,30985,30923],{"class":5209},[106,30987,162],{"class":112},[106,30989,194],{"class":165},[106,30991,123],{"class":116},[106,30993,30994],{"class":108,"line":1719},[106,30995,30996],{"class":175},"        # 定义平展层\n",[106,30998,30999,31001,31004,31006],{"class":108,"line":1724},[106,31000,30839],{"class":165},[106,31002,31003],{"class":116},".flatten",[106,31005,162],{"class":112},[106,31007,31008],{"class":116},"nn.Flatten()\n",[106,31010,31011],{"class":108,"line":1741},[106,31012,31013],{"class":175},"        # 定义全连接层\n",[106,31015,31016,31018,31021,31023,31026,31028,31030,31032],{"class":108,"line":1746},[106,31017,30839],{"class":165},[106,31019,31020],{"class":116},".f5",[106,31022,162],{"class":112},[106,31024,31025],{"class":116},"nn.Linear(",[106,31027,3979],{"class":165},[106,31029,495],{"class":116},[106,31031,934],{"class":165},[106,31033,123],{"class":116},[106,31035,31036,31038,31041,31043,31045,31047,31049,31051],{"class":108,"line":1751},[106,31037,30839],{"class":165},[106,31039,31040],{"class":116},".f6",[106,31042,162],{"class":112},[106,31044,31025],{"class":116},[106,31046,934],{"class":165},[106,31048,495],{"class":116},[106,31050,828],{"class":165},[106,31052,123],{"class":116},[106,31054,31055,31057,31060,31062,31064,31066,31068,31070],{"class":108,"line":1756},[106,31056,30839],{"class":165},[106,31058,31059],{"class":116},".f7",[106,31061,162],{"class":112},[106,31063,31025],{"class":116},[106,31065,828],{"class":165},[106,31067,495],{"class":116},[106,31069,563],{"class":165},[106,31071,123],{"class":116},[106,31073,31074],{"class":108,"line":1770},[106,31075,2392],{"emptyLinePlaceholder":33},[106,31077,31078],{"class":108,"line":1775},[106,31079,31080],{"class":175},"    # 写工具->写前向传播\n",[106,31082,31083,31085,31088],{"class":108,"line":2569},[106,31084,30795],{"class":112},[106,31086,31087],{"class":1955}," forward",[106,31089,31090],{"class":116},"(self,x):\n",[106,31092,31093,31096,31098,31100,31103,31105],{"class":108,"line":2583},[106,31094,31095],{"class":116},"        x",[106,31097,162],{"class":112},[106,31099,30817],{"class":165},[106,31101,31102],{"class":116},".sig(",[106,31104,30817],{"class":165},[106,31106,31107],{"class":116},".c1(x))\n",[106,31109,31110,31112,31114,31116],{"class":108,"line":2591},[106,31111,31095],{"class":116},[106,31113,162],{"class":112},[106,31115,30817],{"class":165},[106,31117,31118],{"class":116},".s2(x)\n",[106,31120,31121,31123,31125,31127,31129,31131],{"class":108,"line":2596},[106,31122,31095],{"class":116},[106,31124,162],{"class":112},[106,31126,30817],{"class":165},[106,31128,31102],{"class":116},[106,31130,30817],{"class":165},[106,31132,31133],{"class":116},".c3(x))\n",[106,31135,31136,31138,31140,31142],{"class":108,"line":2602},[106,31137,31095],{"class":116},[106,31139,162],{"class":112},[106,31141,30817],{"class":165},[106,31143,31144],{"class":116},".s4(x)\n",[106,31146,31147,31149,31151,31153],{"class":108,"line":2608},[106,31148,31095],{"class":116},[106,31150,162],{"class":112},[106,31152,30817],{"class":165},[106,31154,31155],{"class":116},".flatten(x)\n",[106,31157,31158,31160,31162,31164,31166,31168],{"class":108,"line":2613},[106,31159,31095],{"class":116},[106,31161,162],{"class":112},[106,31163,30817],{"class":165},[106,31165,31102],{"class":116},[106,31167,30817],{"class":165},[106,31169,31170],{"class":116},".f5(x))\n",[106,31172,31173,31175,31177,31179,31181,31183],{"class":108,"line":7941},[106,31174,31095],{"class":116},[106,31176,162],{"class":112},[106,31178,30817],{"class":165},[106,31180,31102],{"class":116},[106,31182,30817],{"class":165},[106,31184,31185],{"class":116},".f6(x))\n",[106,31187,31188,31190,31192,31194],{"class":108,"line":7965},[106,31189,31095],{"class":116},[106,31191,162],{"class":112},[106,31193,30817],{"class":165},[106,31195,31196],{"class":116},".f7(x)\n",[106,31198,31199,31201],{"class":108,"line":7970},[106,31200,14745],{"class":112},[106,31202,31203],{"class":116}," x\n",[106,31205,31206],{"class":108,"line":7976},[106,31207,2392],{"emptyLinePlaceholder":33},[106,31209,31210,31212,31215,31217,31220],{"class":108,"line":8003},[106,31211,1523],{"class":112},[106,31213,31214],{"class":165}," __name__",[106,31216,2941],{"class":112},[106,31218,31219],{"class":221},"\"__main__\"",[106,31221,3731],{"class":116},[106,31223,31224],{"class":108,"line":8008},[106,31225,31226],{"class":175},"    # 判断是否有cuda是否激活,有GPU会返回cuda\n",[106,31228,31229,31232,31234,31236,31239,31241,31244,31246,31248],{"class":108,"line":8014},[106,31230,31231],{"class":116},"    device",[106,31233,162],{"class":112},[106,31235,30445],{"class":116},[106,31237,31238],{"class":221},"\"cuda\"",[106,31240,1696],{"class":112},[106,31242,31243],{"class":116}," torch.cuda.is_available() ",[106,31245,1693],{"class":112},[106,31247,30470],{"class":221},[106,31249,123],{"class":116},[106,31251,31252],{"class":108,"line":8026},[106,31253,31254],{"class":175},"    # 如果就是想指定用cpu用下方代码:\n",[106,31256,31257],{"class":108,"line":8038},[106,31258,31259],{"class":175},"    # device=\"cpu\"\n",[106,31261,31262],{"class":108,"line":8050},[106,31263,31264],{"class":175},"    # print(device)\n",[106,31266,31267],{"class":108,"line":9709},[106,31268,2392],{"emptyLinePlaceholder":33},[106,31270,31271],{"class":108,"line":9734},[106,31272,31273],{"class":175},"    # 实例化模型\n",[106,31275,31276],{"class":108,"line":9757},[106,31277,31278],{"class":175},"    # 将模型放到设备中去运行\n",[106,31280,31281,31284,31286],{"class":108,"line":9781},[106,31282,31283],{"class":116},"    model",[106,31285,162],{"class":112},[106,31287,31288],{"class":116},"LeNet().to(device)\n",[106,31290,31291,31294,31297,31299,31301,31303,31305,31307],{"class":108,"line":9786},[106,31292,31293],{"class":165},"    print",[106,31295,31296],{"class":116},"(summary(model,(",[106,31298,334],{"class":165},[106,31300,495],{"class":116},[106,31302,1018],{"class":165},[106,31304,495],{"class":116},[106,31306,1018],{"class":165},[106,31308,31309],{"class":116},")))\n",[14,31311,31312],{},[23,31313],{"alt":25,"src":31314},"\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,31316,31317],{},"summary这个包就是用来展示神经网络的计算过程，展示参数的变化",[60,31319,31320],{"start":28},[63,31321,31322],{},"训练",[14,31324,31325],{},"训练和测试部分的代码作为模板，可以移植到其他模型使用",[14,31327,31328],{},"在训练之前可以将数据展示看一下",[97,31330,31332],{"className":30372,"code":31331,"language":30374,"meta":25,"style":25},"# 建立画图的函数，用于展示数据\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",[103,31333,31334,31339,31344,31356,31368,31381,31386,31398,31403,31415,31420,31432,31436,31440,31461,31473,31478,31499,31510,31514,31519,31537,31548,31553,31564,31569,31580,31584,31589,31604,31617,31622,31627,31640,31653,31666,31671,31675,31680,31700,31717,31737,31750,31763,31773,31788],{"__ignoreMap":25},[106,31335,31336],{"class":108,"line":109},[106,31337,31338],{"class":175},"# 建立画图的函数，用于展示数据\n",[106,31340,31341],{"class":108,"line":28},[106,31342,31343],{"class":175},"# torchvision中包含很多内置的数据集\n",[106,31345,31346,31348,31351,31353],{"class":108,"line":1172},[106,31347,30731],{"class":112},[106,31349,31350],{"class":116}," sklearn.externals.array_api_compat.torch ",[106,31352,30386],{"class":112},[106,31354,31355],{"class":116}," squeeze\n",[106,31357,31358,31360,31363,31365],{"class":108,"line":1187},[106,31359,30731],{"class":112},[106,31361,31362],{"class":116}," torchvision.datasets ",[106,31364,30386],{"class":112},[106,31366,31367],{"class":116}," FashionMNIST\n",[106,31369,31370,31372,31375,31378],{"class":108,"line":1193},[106,31371,30386],{"class":112},[106,31373,31374],{"class":116}," numpy ",[106,31376,31377],{"class":112},"as",[106,31379,31380],{"class":116}," np\n",[106,31382,31383],{"class":108,"line":1207},[106,31384,31385],{"class":175},"# 引入处理数据集的包\n",[106,31387,31388,31390,31393,31395],{"class":108,"line":1213},[106,31389,30731],{"class":112},[106,31391,31392],{"class":116}," torchvision ",[106,31394,30386],{"class":112},[106,31396,31397],{"class":116}," transforms\n",[106,31399,31400],{"class":108,"line":1304},[106,31401,31402],{"class":175},"# 从torch库中引入数据处理的包\n",[106,31404,31405,31407,31410,31412],{"class":108,"line":1310},[106,31406,30386],{"class":112},[106,31408,31409],{"class":116}," torch.utils.data ",[106,31411,31377],{"class":112},[106,31413,31414],{"class":116}," Data\n",[106,31416,31417],{"class":108,"line":1322},[106,31418,31419],{"class":175},"# 导入画图的库\n",[106,31421,31422,31424,31427,31429],{"class":108,"line":1604},[106,31423,30386],{"class":112},[106,31425,31426],{"class":116}," matplotlib.pyplot ",[106,31428,31377],{"class":112},[106,31430,31431],{"class":116}," plt\n",[106,31433,31434],{"class":108,"line":1609},[106,31435,2392],{"emptyLinePlaceholder":33},[106,31437,31438],{"class":108,"line":1615},[106,31439,2392],{"emptyLinePlaceholder":33},[106,31441,31442,31445,31447,31450,31453,31455,31458],{"class":108,"line":1620},[106,31443,31444],{"class":116},"train_data",[106,31446,162],{"class":112},[106,31448,31449],{"class":116},"FashionMNIST(",[106,31451,31452],{"class":5209},"root",[106,31454,162],{"class":112},[106,31456,31457],{"class":221},"'.\u002Fdata'",[106,31459,31460],{"class":116},",\n",[106,31462,31463,31466,31468,31471],{"class":108,"line":1634},[106,31464,31465],{"class":5209},"                        train",[106,31467,162],{"class":112},[106,31469,31470],{"class":165},"True",[106,31472,31460],{"class":116},[106,31474,31475],{"class":108,"line":1639},[106,31476,31477],{"class":175},"                        # 将数据大小变为224大小,并转换为张量的形式,方便模型的应用\n",[106,31479,31480,31483,31485,31488,31491,31493,31496],{"class":108,"line":1645},[106,31481,31482],{"class":5209},"                        transform",[106,31484,162],{"class":112},[106,31486,31487],{"class":116},"transforms.Compose([transforms.Resize(",[106,31489,31490],{"class":5209},"size",[106,31492,162],{"class":112},[106,31494,31495],{"class":165},"224",[106,31497,31498],{"class":116},"),transforms.ToTensor()]),\n",[106,31500,31501,31504,31506,31508],{"class":108,"line":1666},[106,31502,31503],{"class":5209},"                        download",[106,31505,162],{"class":112},[106,31507,31470],{"class":165},[106,31509,123],{"class":116},[106,31511,31512],{"class":108,"line":1671},[106,31513,2392],{"emptyLinePlaceholder":33},[106,31515,31516],{"class":108,"line":1685},[106,31517,31518],{"class":175},"# 处理数据--->将数据引入进来,将数据进行打乱,成捆,然后规定进程\n",[106,31520,31521,31524,31526,31529,31532,31534],{"class":108,"line":1690},[106,31522,31523],{"class":116},"train_loader",[106,31525,162],{"class":112},[106,31527,31528],{"class":116},"Data.DataLoader(",[106,31530,31531],{"class":5209},"dataset",[106,31533,162],{"class":112},[106,31535,31536],{"class":116},"train_data,\n",[106,31538,31539,31542,31544,31546],{"class":108,"line":1719},[106,31540,31541],{"class":5209},"                             batch_size",[106,31543,162],{"class":112},[106,31545,320],{"class":165},[106,31547,31460],{"class":116},[106,31549,31550],{"class":108,"line":1724},[106,31551,31552],{"class":175},"                             # 数据是否打乱\n",[106,31554,31555,31558,31560,31562],{"class":108,"line":1741},[106,31556,31557],{"class":5209},"                             shuffle",[106,31559,162],{"class":112},[106,31561,31470],{"class":165},[106,31563,31460],{"class":116},[106,31565,31566],{"class":108,"line":1746},[106,31567,31568],{"class":175},"                             # 规定加载数据的进程\n",[106,31570,31571,31574,31576,31578],{"class":108,"line":1751},[106,31572,31573],{"class":5209},"                             num_workers",[106,31575,162],{"class":112},[106,31577,308],{"class":165},[106,31579,123],{"class":116},[106,31581,31582],{"class":108,"line":1756},[106,31583,2392],{"emptyLinePlaceholder":33},[106,31585,31586],{"class":108,"line":1770},[106,31587,31588],{"class":175},"# 获得一个batch的数据\n",[106,31590,31591,31593,31596,31598,31601],{"class":108,"line":1775},[106,31592,3017],{"class":112},[106,31594,31595],{"class":116}," step,(b_x,b_y) ",[106,31597,26037],{"class":112},[106,31599,31600],{"class":165}," enumerate",[106,31602,31603],{"class":116},"(train_loader):\n",[106,31605,31606,31608,31611,31613,31615],{"class":108,"line":2569},[106,31607,3093],{"class":112},[106,31609,31610],{"class":116}," step ",[106,31612,1077],{"class":112},[106,31614,4085],{"class":165},[106,31616,3731],{"class":116},[106,31618,31619],{"class":108,"line":2583},[106,31620,31621],{"class":112},"        break\n",[106,31623,31624],{"class":108,"line":2591},[106,31625,31626],{"class":175},"# squeeze()这个函数是去除张量中所有大小为1的维度\n",[106,31628,31629,31632,31634,31637],{"class":108,"line":2596},[106,31630,31631],{"class":116},"batch_x",[106,31633,162],{"class":112},[106,31635,31636],{"class":116},"b_x.squeeze().numpy()  ",[106,31638,31639],{"class":175},"#将四维张量移除所有维度为1的维度,并转换成numpy数组\n",[106,31641,31642,31645,31647,31650],{"class":108,"line":2602},[106,31643,31644],{"class":116},"batch_y",[106,31646,162],{"class":112},[106,31648,31649],{"class":116},"b_y.numpy()   ",[106,31651,31652],{"class":175},"#将张量转换成功numpy数组\n",[106,31654,31655,31658,31660,31663],{"class":108,"line":2608},[106,31656,31657],{"class":116},"class_label",[106,31659,162],{"class":112},[106,31661,31662],{"class":116},"train_data.classes  ",[106,31664,31665],{"class":175},"#训练集标签\n",[106,31667,31668],{"class":108,"line":2613},[106,31669,31670],{"class":175},"# print(class_label)\n",[106,31672,31673],{"class":108,"line":7941},[106,31674,2392],{"emptyLinePlaceholder":33},[106,31676,31677],{"class":108,"line":7965},[106,31678,31679],{"class":175},"# 可视化一个batch的图像\n",[106,31681,31682,31685,31688,31690,31692,31694,31696,31698],{"class":108,"line":7970},[106,31683,31684],{"class":116},"plt.figure(",[106,31686,31687],{"class":5209},"figsize",[106,31689,162],{"class":112},[106,31691,117],{"class":116},[106,31693,615],{"class":165},[106,31695,495],{"class":116},[106,31697,436],{"class":165},[106,31699,30491],{"class":116},[106,31701,31702,31704,31707,31709,31712,31714],{"class":108,"line":7976},[106,31703,3017],{"class":112},[106,31705,31706],{"class":116}," ii ",[106,31708,26037],{"class":112},[106,31710,31711],{"class":116}," np.arange(",[106,31713,7351],{"class":165},[106,31715,31716],{"class":116},"(batch_y)):\n",[106,31718,31719,31722,31724,31726,31728,31731,31733,31735],{"class":108,"line":8003},[106,31720,31721],{"class":116},"    plt.subplot(",[106,31723,410],{"class":165},[106,31725,495],{"class":116},[106,31727,718],{"class":165},[106,31729,31730],{"class":116},",ii ",[106,31732,598],{"class":112},[106,31734,25112],{"class":165},[106,31736,123],{"class":116},[106,31738,31739,31742,31745,31747],{"class":108,"line":8008},[106,31740,31741],{"class":116},"    plt.imshow(batch_x[ii,:,:],",[106,31743,31744],{"class":5209},"cmap",[106,31746,162],{"class":112},[106,31748,31749],{"class":116},"plt.cm.gray)\n",[106,31751,31752,31755,31757,31759,31761],{"class":108,"line":8014},[106,31753,31754],{"class":116},"    plt.title(class_label[batch_y[ii]],",[106,31756,31490],{"class":5209},[106,31758,162],{"class":112},[106,31760,563],{"class":165},[106,31762,123],{"class":116},[106,31764,31765,31768,31771],{"class":108,"line":8026},[106,31766,31767],{"class":116},"    plt.axis(",[106,31769,31770],{"class":221},"\"off\"",[106,31772,123],{"class":116},[106,31774,31775,31778,31781,31783,31786],{"class":108,"line":8038},[106,31776,31777],{"class":116},"    plt.subplots_adjust(",[106,31779,31780],{"class":5209},"wspace",[106,31782,162],{"class":112},[106,31784,31785],{"class":165},"0.05",[106,31787,123],{"class":116},[106,31789,31790],{"class":108,"line":8050},[106,31791,31792],{"class":116},"plt.show()\n",[14,31794,31795],{},"用matplotlib进行展示的过程可以后续再补",[14,31797,31798],{},"关于损失函数的使用：分类用交叉熵损失函数；回归用均方差损失函数",[14,31800,31801],{},"训练次数就是按照批次过整个训练集数据的次数",[14,31803,31804],{},"模型训练：",[97,31806,31808],{"className":30372,"code":31807,"language":30374,"meta":25,"style":25},"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",[103,31809,31810,31817,31824,31828,31840,31846,31857,31867,31877,31887,31897,31902,31914,31924,31928,31932,31937,31948,31961,31972,31989,32000,32039,32055,32067,32078,32083,32094,32110,32121,32132,32143,32150,32154,32159,32164,32168,32173,32183,32204,32208,32212,32217,32222,32227,32247,32251,32256,32266,32270,32275,32284,32289,32294,32299,32309,32313,32317,32322,32327,32337,32342,32352,32357,32366,32371,32380,32385,32394,32398,32403,32413,32417,32421,32426,32441,32469,32484,32488,32493,32498,32507,32512,32521,32526,32535,32540,32549,32554,32563,32568,32577,32582,32595,32600,32610,32615,32625,32631,32637,32643,32649,32660,32666,32686,32692,32703,32709,32715,32721,32727,32733,32739,32745,32765,32771,32787,32793,32807,32813,32828,32834,32843,32849,32858,32864,32870,32879,32885,32896,32902,32921,32927,32938,32944,32964,32980,32986,33000,33006,33012,33023,33029,33035,33045,33051,33062,33068,33078,33083,33089,33138,33185,33190,33196,33215,33221,33241,33247,33253,33263,33268,33274,33290,33335,33341,33347,33353,33364,33370,33376,33382,33400,33414,33423,33432,33441,33450,33456,33462,33470,33475,33481,33492,33498,33518,33524,33530,33536,33553,33559,33565,33571,33577,33583,33610,33634,33640,33646,33652,33663,33674,33680,33697,33720,33743,33749,33754,33763,33773,33779,33784,33790,33803,33809,33820,33831,33850],{"__ignoreMap":25},[106,31811,31812,31814],{"class":108,"line":109},[106,31813,30386],{"class":112},[106,31815,31816],{"class":116}," copy\n",[106,31818,31819,31821],{"class":108,"line":28},[106,31820,30386],{"class":112},[106,31822,31823],{"class":116}," time\n",[106,31825,31826],{"class":108,"line":1172},[106,31827,2392],{"emptyLinePlaceholder":33},[106,31829,31830,31832,31835,31837],{"class":108,"line":1187},[106,31831,30386],{"class":112},[106,31833,31834],{"class":116}," pandas ",[106,31836,31377],{"class":112},[106,31838,31839],{"class":116}," pd\n",[106,31841,31842,31844],{"class":108,"line":1193},[106,31843,30386],{"class":112},[106,31845,30389],{"class":116},[106,31847,31848,31850,31852,31854],{"class":108,"line":1207},[106,31849,30731],{"class":112},[106,31851,31409],{"class":116},[106,31853,30386],{"class":112},[106,31855,31856],{"class":116}," Dataset\n",[106,31858,31859,31861,31863,31865],{"class":108,"line":1213},[106,31860,30731],{"class":112},[106,31862,31362],{"class":116},[106,31864,30386],{"class":112},[106,31866,31367],{"class":116},[106,31868,31869,31871,31873,31875],{"class":108,"line":1304},[106,31870,30731],{"class":112},[106,31872,31392],{"class":116},[106,31874,30386],{"class":112},[106,31876,31397],{"class":116},[106,31878,31879,31881,31883,31885],{"class":108,"line":1310},[106,31880,30386],{"class":112},[106,31882,31409],{"class":116},[106,31884,31377],{"class":112},[106,31886,31414],{"class":116},[106,31888,31889,31891,31893,31895],{"class":108,"line":1322},[106,31890,30386],{"class":112},[106,31892,31426],{"class":116},[106,31894,31377],{"class":112},[106,31896,31431],{"class":116},[106,31898,31899],{"class":108,"line":1604},[106,31900,31901],{"class":175},"# 导入模型\n",[106,31903,31904,31906,31909,31911],{"class":108,"line":1609},[106,31905,30731],{"class":112},[106,31907,31908],{"class":116}," model ",[106,31910,30386],{"class":112},[106,31912,31913],{"class":116}," LeNet\n",[106,31915,31916,31918,31920,31922],{"class":108,"line":1615},[106,31917,30731],{"class":112},[106,31919,30734],{"class":116},[106,31921,30386],{"class":112},[106,31923,30739],{"class":116},[106,31925,31926],{"class":108,"line":1620},[106,31927,2392],{"emptyLinePlaceholder":33},[106,31929,31930],{"class":108,"line":1634},[106,31931,2392],{"emptyLinePlaceholder":33},[106,31933,31934],{"class":108,"line":1639},[106,31935,31936],{"class":175},"# 处理训练集与验证集函数--->划分数据集\n",[106,31938,31939,31942,31945],{"class":108,"line":1645},[106,31940,31941],{"class":112},"def",[106,31943,31944],{"class":1955}," train_val_data_process",[106,31946,31947],{"class":116},"():\n",[106,31949,31950,31953,31955,31957,31959],{"class":108,"line":1666},[106,31951,31952],{"class":116},"    train_data",[106,31954,162],{"class":112},[106,31956,31449],{"class":116},[106,31958,31457],{"class":221},[106,31960,31460],{"class":116},[106,31962,31963,31966,31968,31970],{"class":108,"line":1671},[106,31964,31965],{"class":5209},"                            train",[106,31967,162],{"class":112},[106,31969,31470],{"class":165},[106,31971,31460],{"class":116},[106,31973,31974,31977,31979,31981,31983,31985,31987],{"class":108,"line":1685},[106,31975,31976],{"class":5209},"                            transform",[106,31978,162],{"class":112},[106,31980,31487],{"class":116},[106,31982,31490],{"class":5209},[106,31984,162],{"class":112},[106,31986,1018],{"class":165},[106,31988,31498],{"class":116},[106,31990,31991,31994,31996,31998],{"class":108,"line":1690},[106,31992,31993],{"class":5209},"                            download",[106,31995,162],{"class":112},[106,31997,31470],{"class":165},[106,31999,123],{"class":116},[106,32001,32002,32005,32007,32010,32013,32015,32018,32020,32022,32025,32027,32029,32032,32034,32036],{"class":108,"line":1719},[106,32003,32004],{"class":116},"    train_data,val_data",[106,32006,162],{"class":112},[106,32008,32009],{"class":116},"Data.random_split(train_data,[",[106,32011,32012],{"class":165},"round",[106,32014,117],{"class":116},[106,32016,32017],{"class":165},"0.8",[106,32019,572],{"class":112},[106,32021,7351],{"class":165},[106,32023,32024],{"class":116},"(train_data)),",[106,32026,32012],{"class":165},[106,32028,117],{"class":116},[106,32030,32031],{"class":165},"0.2",[106,32033,572],{"class":112},[106,32035,7351],{"class":165},[106,32037,32038],{"class":116},"(train_data))])\n",[106,32040,32041,32044,32046,32049,32051,32053],{"class":108,"line":1724},[106,32042,32043],{"class":116},"    train_dataloader ",[106,32045,162],{"class":112},[106,32047,32048],{"class":116}," Data.DataLoader(",[106,32050,31531],{"class":5209},[106,32052,162],{"class":112},[106,32054,31536],{"class":116},[106,32056,32057,32060,32062,32065],{"class":108,"line":1741},[106,32058,32059],{"class":5209},"                                       batch_size",[106,32061,162],{"class":112},[106,32063,32064],{"class":165},"128",[106,32066,31460],{"class":116},[106,32068,32069,32072,32074,32076],{"class":108,"line":1746},[106,32070,32071],{"class":5209},"                                       shuffle",[106,32073,162],{"class":112},[106,32075,31470],{"class":165},[106,32077,31460],{"class":116},[106,32079,32080],{"class":108,"line":1751},[106,32081,32082],{"class":175},"                                       # 规定8个进程\n",[106,32084,32085,32088,32090,32092],{"class":108,"line":1756},[106,32086,32087],{"class":5209},"                                       num_workers",[106,32089,162],{"class":112},[106,32091,512],{"class":165},[106,32093,123],{"class":116},[106,32095,32096,32099,32101,32103,32105,32107],{"class":108,"line":1770},[106,32097,32098],{"class":116},"    val_dataloader",[106,32100,162],{"class":112},[106,32102,31528],{"class":116},[106,32104,31531],{"class":5209},[106,32106,162],{"class":112},[106,32108,32109],{"class":116},"val_data,\n",[106,32111,32112,32115,32117,32119],{"class":108,"line":1775},[106,32113,32114],{"class":5209},"                                   batch_size",[106,32116,162],{"class":112},[106,32118,32064],{"class":165},[106,32120,31460],{"class":116},[106,32122,32123,32126,32128,32130],{"class":108,"line":2569},[106,32124,32125],{"class":5209},"                                   shuffle",[106,32127,162],{"class":112},[106,32129,31470],{"class":165},[106,32131,31460],{"class":116},[106,32133,32134,32137,32139,32141],{"class":108,"line":2583},[106,32135,32136],{"class":5209},"                                   num_workers",[106,32138,162],{"class":112},[106,32140,512],{"class":165},[106,32142,123],{"class":116},[106,32144,32145,32147],{"class":108,"line":2591},[106,32146,4082],{"class":112},[106,32148,32149],{"class":116}," train_dataloader,val_dataloader\n",[106,32151,32152],{"class":108,"line":2596},[106,32153,2392],{"emptyLinePlaceholder":33},[106,32155,32156],{"class":108,"line":2602},[106,32157,32158],{"class":175},"# 验证是否出错\n",[106,32160,32161],{"class":108,"line":2608},[106,32162,32163],{"class":175},"# train_val_data_process()\n",[106,32165,32166],{"class":108,"line":2613},[106,32167,2392],{"emptyLinePlaceholder":33},[106,32169,32170],{"class":108,"line":7941},[106,32171,32172],{"class":175},"# 定义模型训练函数\n",[106,32174,32175,32177,32180],{"class":108,"line":7965},[106,32176,31941],{"class":112},[106,32178,32179],{"class":1955}," train_model_process",[106,32181,32182],{"class":116},"(model,train_dataloader,val_dataloader,num_epochs):\n",[106,32184,32185,32187,32189,32191,32193,32195,32197,32199,32202],{"class":108,"line":7970},[106,32186,31231],{"class":116},[106,32188,162],{"class":112},[106,32190,30445],{"class":116},[106,32192,31238],{"class":221},[106,32194,1696],{"class":112},[106,32196,31243],{"class":116},[106,32198,1693],{"class":112},[106,32200,32201],{"class":221}," 'cpu'",[106,32203,123],{"class":116},[106,32205,32206],{"class":108,"line":7976},[106,32207,2392],{"emptyLinePlaceholder":33},[106,32209,32210],{"class":108,"line":8003},[106,32211,2392],{"emptyLinePlaceholder":33},[106,32213,32214],{"class":108,"line":8008},[106,32215,32216],{"class":175},"    # 定义优化器\n",[106,32218,32219],{"class":108,"line":8014},[106,32220,32221],{"class":175},"    # model.parameters()表示把模型里所有可训练的参数（权重、偏置）传给优化器\n",[106,32223,32224],{"class":108,"line":8026},[106,32225,32226],{"class":175},"    # lr为学习率\n",[106,32228,32229,32232,32234,32237,32240,32242,32245],{"class":108,"line":8038},[106,32230,32231],{"class":116},"    optimizer",[106,32233,162],{"class":112},[106,32235,32236],{"class":116},"torch.optim.Adam(model.parameters(),",[106,32238,32239],{"class":5209},"lr",[106,32241,162],{"class":112},[106,32243,32244],{"class":165},"0.001",[106,32246,123],{"class":116},[106,32248,32249],{"class":108,"line":8050},[106,32250,2392],{"emptyLinePlaceholder":33},[106,32252,32253],{"class":108,"line":9709},[106,32254,32255],{"class":175},"    # 定义损失函数使用交叉熵损失函数\n",[106,32257,32258,32261,32263],{"class":108,"line":9734},[106,32259,32260],{"class":116},"    criterion",[106,32262,162],{"class":112},[106,32264,32265],{"class":116},"nn.CrossEntropyLoss()\n",[106,32267,32268],{"class":108,"line":9757},[106,32269,2392],{"emptyLinePlaceholder":33},[106,32271,32272],{"class":108,"line":9781},[106,32273,32274],{"class":175},"    # 将模型放到GPU中进行训练\n",[106,32276,32277,32279,32281],{"class":108,"line":9786},[106,32278,31283],{"class":116},[106,32280,162],{"class":112},[106,32282,32283],{"class":116},"model.to(device)\n",[106,32285,32286],{"class":108,"line":9791},[106,32287,32288],{"class":175},"    # 复制当前模型的参数\n",[106,32290,32291],{"class":108,"line":9796},[106,32292,32293],{"class":175},"    # 把model（PyTorch的神经网络）的当前参数（权重 \u002F 偏置等）完整复制一份，放到best_model_wts变量里\n",[106,32295,32296],{"class":108,"line":9805},[106,32297,32298],{"class":175},"    # ，保证这份拷贝不会随着后续训练改变 —— 常用于保存“到目前为止表现最好的模型参数”\n",[106,32300,32301,32304,32306],{"class":108,"line":9810},[106,32302,32303],{"class":116},"    best_model_wts",[106,32305,162],{"class":112},[106,32307,32308],{"class":116},"copy.deepcopy(model.state_dict())\n",[106,32310,32311],{"class":108,"line":9816},[106,32312,2392],{"emptyLinePlaceholder":33},[106,32314,32315],{"class":108,"line":9837},[106,32316,2392],{"emptyLinePlaceholder":33},[106,32318,32319],{"class":108,"line":9843},[106,32320,32321],{"class":175},"    # 初始化参数\n",[106,32323,32324],{"class":108,"line":9857},[106,32325,32326],{"class":175},"    # 最高准确度\n",[106,32328,32329,32332,32334],{"class":108,"line":9863},[106,32330,32331],{"class":116},"    best_acc",[106,32333,162],{"class":112},[106,32335,32336],{"class":165},"0.0\n",[106,32338,32339],{"class":108,"line":9890},[106,32340,32341],{"class":175},"    # 训练集损失列表\n",[106,32343,32344,32347,32349],{"class":108,"line":9899},[106,32345,32346],{"class":116},"    train_loss_all",[106,32348,162],{"class":112},[106,32350,32351],{"class":116},"[]\n",[106,32353,32354],{"class":108,"line":9905},[106,32355,32356],{"class":175},"    # 验证集函数列表\n",[106,32358,32359,32362,32364],{"class":108,"line":9913},[106,32360,32361],{"class":116},"    val_loss_all",[106,32363,162],{"class":112},[106,32365,32351],{"class":116},[106,32367,32368],{"class":108,"line":9918},[106,32369,32370],{"class":175},"    # 训练集准确度列表\n",[106,32372,32373,32376,32378],{"class":108,"line":16597},[106,32374,32375],{"class":116},"    train_acc_all",[106,32377,162],{"class":112},[106,32379,32351],{"class":116},[106,32381,32382],{"class":108,"line":16603},[106,32383,32384],{"class":175},"    # 验证集准确度列表\n",[106,32386,32387,32390,32392],{"class":108,"line":16626},[106,32388,32389],{"class":116},"    val_acc_all",[106,32391,162],{"class":112},[106,32393,32351],{"class":116},[106,32395,32396],{"class":108,"line":16632},[106,32397,2392],{"emptyLinePlaceholder":33},[106,32399,32400],{"class":108,"line":16655},[106,32401,32402],{"class":175},"    # 保存当前时间--->方便看每轮训练的时间\n",[106,32404,32405,32408,32410],{"class":108,"line":16669},[106,32406,32407],{"class":116},"    since",[106,32409,162],{"class":112},[106,32411,32412],{"class":116},"time.time()\n",[106,32414,32415],{"class":108,"line":16689},[106,32416,2392],{"emptyLinePlaceholder":33},[106,32418,32419],{"class":108,"line":16695},[106,32420,2392],{"emptyLinePlaceholder":33},[106,32422,32423],{"class":108,"line":16706},[106,32424,32425],{"class":175},"    # 准备工作完成--->开始训练模型\n",[106,32427,32428,32430,32433,32435,32438],{"class":108,"line":16729},[106,32429,3193],{"class":112},[106,32431,32432],{"class":116}," epoch ",[106,32434,26037],{"class":112},[106,32436,32437],{"class":165}," range",[106,32439,32440],{"class":116},"(num_epochs):\n",[106,32442,32443,32446,32448,32451,32454,32456,32458,32460,32463,32465,32467],{"class":108,"line":16751},[106,32444,32445],{"class":165},"        print",[106,32447,117],{"class":116},[106,32449,32450],{"class":221},"\"Epoch ",[106,32452,32453],{"class":165},"{}",[106,32455,701],{"class":221},[106,32457,32453],{"class":165},[106,32459,368],{"class":221},[106,32461,32462],{"class":116},".format(epoch,num_epochs",[106,32464,649],{"class":112},[106,32466,334],{"class":165},[106,32468,30491],{"class":116},[106,32470,32471,32473,32475,32478,32480,32482],{"class":108,"line":16756},[106,32472,32445],{"class":165},[106,32474,117],{"class":116},[106,32476,32477],{"class":221},"\"-\"",[106,32479,572],{"class":112},[106,32481,563],{"class":165},[106,32483,123],{"class":116},[106,32485,32486],{"class":108,"line":16762},[106,32487,2392],{"emptyLinePlaceholder":33},[106,32489,32490],{"class":108,"line":16776},[106,32491,32492],{"class":175},"        # 初始化参数\n",[106,32494,32495],{"class":108,"line":16789},[106,32496,32497],{"class":175},"        # 训练集损失函数\n",[106,32499,32500,32503,32505],{"class":108,"line":16794},[106,32501,32502],{"class":116},"        train_loss",[106,32504,162],{"class":112},[106,32506,32336],{"class":165},[106,32508,32509],{"class":108,"line":16808},[106,32510,32511],{"class":175},"        # 训练集准确度\n",[106,32513,32514,32517,32519],{"class":108,"line":16813},[106,32515,32516],{"class":116},"        train_corrects",[106,32518,162],{"class":112},[106,32520,3077],{"class":165},[106,32522,32523],{"class":108,"line":16819},[106,32524,32525],{"class":175},"        # 验证集损失函数\n",[106,32527,32528,32531,32533],{"class":108,"line":16824},[106,32529,32530],{"class":116},"        val_loss",[106,32532,162],{"class":112},[106,32534,32336],{"class":165},[106,32536,32537],{"class":108,"line":16838},[106,32538,32539],{"class":175},"        # 验证集准确度\n",[106,32541,32542,32545,32547],{"class":108,"line":16843},[106,32543,32544],{"class":116},"        val_corrects",[106,32546,162],{"class":112},[106,32548,3077],{"class":165},[106,32550,32551],{"class":108,"line":16848},[106,32552,32553],{"class":175},"        # 训练集样本数量\n",[106,32555,32556,32559,32561],{"class":108,"line":16862},[106,32557,32558],{"class":116},"        train_num",[106,32560,162],{"class":112},[106,32562,3077],{"class":165},[106,32564,32565],{"class":108,"line":16874},[106,32566,32567],{"class":175},"        # 验证集样本数量\n",[106,32569,32570,32573,32575],{"class":108,"line":16879},[106,32571,32572],{"class":116},"        val_num",[106,32574,162],{"class":112},[106,32576,3077],{"class":165},[106,32578,32579],{"class":108,"line":16892},[106,32580,32581],{"class":175},"        # 将数据放到设备,并开始训练\n",[106,32583,32584,32586,32588,32590,32592],{"class":108,"line":16897},[106,32585,3395],{"class":112},[106,32587,31595],{"class":116},[106,32589,26037],{"class":112},[106,32591,31600],{"class":165},[106,32593,32594],{"class":116},"(train_dataloader):\n",[106,32596,32597],{"class":108,"line":16902},[106,32598,32599],{"class":175},"            # 将特征放入到训练设备\n",[106,32601,32602,32605,32607],{"class":108,"line":16907},[106,32603,32604],{"class":116},"            b_x",[106,32606,162],{"class":112},[106,32608,32609],{"class":116},"b_x.to(device)\n",[106,32611,32612],{"class":108,"line":16920},[106,32613,32614],{"class":175},"            # 将标签放入到训练设备当中\n",[106,32616,32617,32620,32622],{"class":108,"line":16925},[106,32618,32619],{"class":116},"            b_y",[106,32621,162],{"class":112},[106,32623,32624],{"class":116},"b_y.to(device)\n",[106,32626,32628],{"class":108,"line":32627},98,[106,32629,32630],{"class":175},"            # 设置模型为训练模式\n",[106,32632,32634],{"class":108,"line":32633},99,[106,32635,32636],{"class":116},"            model.train()\n",[106,32638,32640],{"class":108,"line":32639},100,[106,32641,32642],{"class":175},"            # 将数据放到模型当中,开始前向传播\n",[106,32644,32646],{"class":108,"line":32645},101,[106,32647,32648],{"class":175},"            # 前向传播过程,输入一个batch,输出为一个batch中对应的预测\n",[106,32650,32652,32655,32657],{"class":108,"line":32651},102,[106,32653,32654],{"class":116},"            output",[106,32656,162],{"class":112},[106,32658,32659],{"class":116},"model(b_x)\n",[106,32661,32663],{"class":108,"line":32662},103,[106,32664,32665],{"class":175},"            # 从网络输出 output 的每一行里，找出数值最大的下标（类别），作为模型预测的标签\n",[106,32667,32669,32672,32674,32677,32680,32682,32684],{"class":108,"line":32668},104,[106,32670,32671],{"class":116},"            pre_lab",[106,32673,162],{"class":112},[106,32675,32676],{"class":116},"torch.argmax(output,",[106,32678,32679],{"class":5209},"dim",[106,32681,162],{"class":112},[106,32683,334],{"class":165},[106,32685,123],{"class":116},[106,32687,32689],{"class":108,"line":32688},105,[106,32690,32691],{"class":175},"            # 计算每一个batch的损失函数\n",[106,32693,32695,32698,32700],{"class":108,"line":32694},106,[106,32696,32697],{"class":116},"            loss",[106,32699,162],{"class":112},[106,32701,32702],{"class":116},"criterion(output,b_y)\n",[106,32704,32706],{"class":108,"line":32705},107,[106,32707,32708],{"class":175},"            # 将梯度初始化为0\n",[106,32710,32712],{"class":108,"line":32711},108,[106,32713,32714],{"class":116},"            optimizer.zero_grad()\n",[106,32716,32718],{"class":108,"line":32717},109,[106,32719,32720],{"class":175},"            # 梯度置为0后再进行反向传播\n",[106,32722,32724],{"class":108,"line":32723},110,[106,32725,32726],{"class":116},"            loss.backward()\n",[106,32728,32730],{"class":108,"line":32729},111,[106,32731,32732],{"class":175},"            # 根据网络反向传播的梯度信息来更新网络的参数，以起到降低loss函数计算的作用\n",[106,32734,32736],{"class":108,"line":32735},112,[106,32737,32738],{"class":116},"            optimizer.step()\n",[106,32740,32742],{"class":108,"line":32741},113,[106,32743,32744],{"class":175},"            # loss.item()指的是batch的平均损失\n",[106,32746,32748,32751,32753,32756,32758,32761,32763],{"class":108,"line":32747},114,[106,32749,32750],{"class":116},"            train_loss",[106,32752,9470],{"class":112},[106,32754,32755],{"class":116},"loss.item()",[106,32757,572],{"class":112},[106,32759,32760],{"class":116},"b_x.size(",[106,32762,308],{"class":165},[106,32764,123],{"class":116},[106,32766,32768],{"class":108,"line":32767},115,[106,32769,32770],{"class":175},"            # 计算每个批次中正确预测的数量\n",[106,32772,32774,32777,32779,32782,32784],{"class":108,"line":32773},116,[106,32775,32776],{"class":116},"            train_corrects",[106,32778,9470],{"class":112},[106,32780,32781],{"class":116},"torch.sum(pre_lab",[106,32783,2941],{"class":112},[106,32785,32786],{"class":116},"b_y.data)\n",[106,32788,32790],{"class":108,"line":32789},117,[106,32791,32792],{"class":175},"            # 计算目前为止一共处理了多少样本\n",[106,32794,32796,32799,32801,32803,32805],{"class":108,"line":32795},118,[106,32797,32798],{"class":116},"            train_num",[106,32800,9470],{"class":112},[106,32802,32760],{"class":116},[106,32804,308],{"class":165},[106,32806,123],{"class":116},[106,32808,32810],{"class":108,"line":32809},119,[106,32811,32812],{"class":175},"        # 验证数据\n",[106,32814,32816,32818,32821,32823,32825],{"class":108,"line":32815},120,[106,32817,3395],{"class":112},[106,32819,32820],{"class":116}," step ,(b_x,b_y) ",[106,32822,26037],{"class":112},[106,32824,31600],{"class":165},[106,32826,32827],{"class":116},"(val_dataloader):\n",[106,32829,32831],{"class":108,"line":32830},121,[106,32832,32833],{"class":175},"            # 将特征放到验证设备当中\n",[106,32835,32837,32839,32841],{"class":108,"line":32836},122,[106,32838,32604],{"class":116},[106,32840,162],{"class":112},[106,32842,32609],{"class":116},[106,32844,32846],{"class":108,"line":32845},123,[106,32847,32848],{"class":175},"            # 将标签放到放到训练设备当中\n",[106,32850,32852,32854,32856],{"class":108,"line":32851},124,[106,32853,32619],{"class":116},[106,32855,162],{"class":112},[106,32857,32624],{"class":116},[106,32859,32861],{"class":108,"line":32860},125,[106,32862,32863],{"class":175},"            # 开启验证模式，设置模型为评估模式\n",[106,32865,32867],{"class":108,"line":32866},126,[106,32868,32869],{"class":116},"            model.eval()\n",[106,32871,32873,32876],{"class":108,"line":32872},127,[106,32874,32875],{"class":112},"            with",[106,32877,32878],{"class":116}," torch.no_grad():\n",[106,32880,32882],{"class":108,"line":32881},128,[106,32883,32884],{"class":175},"                # 前向传播过程，输入一个batch,输出为一个batch中对应的预测\n",[106,32886,32888,32891,32893],{"class":108,"line":32887},129,[106,32889,32890],{"class":116},"                output ",[106,32892,162],{"class":112},[106,32894,32895],{"class":116}," model(b_x)\n",[106,32897,32899],{"class":108,"line":32898},130,[106,32900,32901],{"class":175},"                # 查找每一行中最大值对应的下标\n",[106,32903,32905,32908,32910,32913,32915,32917,32919],{"class":108,"line":32904},131,[106,32906,32907],{"class":116},"                pre_lab ",[106,32909,162],{"class":112},[106,32911,32912],{"class":116}," torch.argmax(output, ",[106,32914,32679],{"class":5209},[106,32916,162],{"class":112},[106,32918,334],{"class":165},[106,32920,123],{"class":116},[106,32922,32924],{"class":108,"line":32923},132,[106,32925,32926],{"class":175},"                # 计算验证集上的当前 batch 损失\n",[106,32928,32930,32933,32935],{"class":108,"line":32929},133,[106,32931,32932],{"class":116},"                val_batch_loss ",[106,32934,162],{"class":112},[106,32936,32937],{"class":116}," criterion(output, b_y)\n",[106,32939,32941],{"class":108,"line":32940},134,[106,32942,32943],{"class":175},"                # 对损失函数进行累加（按样本数加权）\n",[106,32945,32947,32950,32952,32955,32957,32960,32962],{"class":108,"line":32946},135,[106,32948,32949],{"class":116},"                val_loss ",[106,32951,9470],{"class":112},[106,32953,32954],{"class":116}," val_batch_loss.item() ",[106,32956,572],{"class":112},[106,32958,32959],{"class":116}," b_x.size(",[106,32961,308],{"class":165},[106,32963,123],{"class":116},[106,32965,32967,32970,32972,32975,32977],{"class":108,"line":32966},136,[106,32968,32969],{"class":116},"                val_corrects ",[106,32971,9470],{"class":112},[106,32973,32974],{"class":116}," torch.sum(pre_lab ",[106,32976,2941],{"class":112},[106,32978,32979],{"class":116}," b_y.data)\n",[106,32981,32983],{"class":108,"line":32982},137,[106,32984,32985],{"class":175},"                # 当前用于验证的样本数量\n",[106,32987,32989,32992,32994,32996,32998],{"class":108,"line":32988},138,[106,32990,32991],{"class":116},"            val_num ",[106,32993,9470],{"class":112},[106,32995,32959],{"class":116},[106,32997,308],{"class":165},[106,32999,123],{"class":116},[106,33001,33003],{"class":108,"line":33002},139,[106,33004,33005],{"class":175},"        # 计算并保存每一次迭代的loss值和准确率\n",[106,33007,33009],{"class":108,"line":33008},140,[106,33010,33011],{"class":175},"        # 计算并保存训练集的loss值\n",[106,33013,33015,33018,33020],{"class":108,"line":33014},141,[106,33016,33017],{"class":116},"        train_loss_all.append(train_loss",[106,33019,701],{"class":112},[106,33021,33022],{"class":116},"train_num)\n",[106,33024,33026],{"class":108,"line":33025},142,[106,33027,33028],{"class":175},"        # 取双精度\n",[106,33030,33032],{"class":108,"line":33031},143,[106,33033,33034],{"class":175},"        # 计算并保存训练集的准确率\n",[106,33036,33038,33041,33043],{"class":108,"line":33037},144,[106,33039,33040],{"class":116},"        train_acc_all.append(train_corrects.double().item()",[106,33042,701],{"class":112},[106,33044,33022],{"class":116},[106,33046,33048],{"class":108,"line":33047},145,[106,33049,33050],{"class":175},"        # 计算并保存验证集的loss值\n",[106,33052,33054,33057,33059],{"class":108,"line":33053},146,[106,33055,33056],{"class":116},"        val_loss_all.append(val_loss",[106,33058,701],{"class":112},[106,33060,33061],{"class":116},"val_num)\n",[106,33063,33065],{"class":108,"line":33064},147,[106,33066,33067],{"class":175},"        # 计算并保存验证集的准确率\n",[106,33069,33071,33074,33076],{"class":108,"line":33070},148,[106,33072,33073],{"class":116},"        val_acc_all.append(val_corrects.double().item()",[106,33075,701],{"class":112},[106,33077,33061],{"class":116},[106,33079,33081],{"class":108,"line":33080},149,[106,33082,2392],{"emptyLinePlaceholder":33},[106,33084,33086],{"class":108,"line":33085},150,[106,33087,33088],{"class":175},"        # 打印训练一轮的loss值和准确率\n",[106,33090,33092,33094,33096,33098,33100,33103,33105,33108,33110,33113,33115,33117,33119,33121,33124,33126,33128,33131,33133,33135],{"class":108,"line":33091},151,[106,33093,32445],{"class":165},[106,33095,117],{"class":116},[106,33097,3584],{"class":221},[106,33099,32453],{"class":165},[106,33101,33102],{"class":221},"train loss:",[106,33104,1013],{"class":165},[106,33106,33107],{"class":112},":.4f",[106,33109,1063],{"class":165},[106,33111,33112],{"class":221}," train acc:",[106,33114,1013],{"class":165},[106,33116,33107],{"class":112},[106,33118,1063],{"class":165},[106,33120,3584],{"class":221},[106,33122,33123],{"class":116},".format(epoch,train_loss_all[",[106,33125,649],{"class":112},[106,33127,334],{"class":165},[106,33129,33130],{"class":116},"],train_acc_all[",[106,33132,649],{"class":112},[106,33134,334],{"class":165},[106,33136,33137],{"class":116},"]))\n",[106,33139,33141,33143,33145,33147,33149,33152,33154,33156,33158,33161,33163,33165,33167,33169,33172,33174,33176,33179,33181,33183],{"class":108,"line":33140},152,[106,33142,32445],{"class":165},[106,33144,117],{"class":116},[106,33146,3584],{"class":221},[106,33148,32453],{"class":165},[106,33150,33151],{"class":221},"val loss:",[106,33153,1013],{"class":165},[106,33155,33107],{"class":112},[106,33157,1063],{"class":165},[106,33159,33160],{"class":221}," val acc:",[106,33162,1013],{"class":165},[106,33164,33107],{"class":112},[106,33166,1063],{"class":165},[106,33168,3584],{"class":221},[106,33170,33171],{"class":116},".format(epoch,val_loss_all[",[106,33173,649],{"class":112},[106,33175,334],{"class":165},[106,33177,33178],{"class":116},"],val_acc_all[",[106,33180,649],{"class":112},[106,33182,334],{"class":165},[106,33184,33137],{"class":116},[106,33186,33188],{"class":108,"line":33187},153,[106,33189,2392],{"emptyLinePlaceholder":33},[106,33191,33193],{"class":108,"line":33192},154,[106,33194,33195],{"class":175},"        # 判断准确度--->保存最优模型\n",[106,33197,33199,33201,33204,33206,33208,33210,33212],{"class":108,"line":33198},155,[106,33200,2489],{"class":112},[106,33202,33203],{"class":116}," val_acc_all[",[106,33205,649],{"class":112},[106,33207,334],{"class":165},[106,33209,1057],{"class":116},[106,33211,1077],{"class":112},[106,33213,33214],{"class":116},"best_acc:\n",[106,33216,33218],{"class":108,"line":33217},156,[106,33219,33220],{"class":175},"            # 保存当前模型准确度\n",[106,33222,33224,33227,33229,33231,33234,33236,33238],{"class":108,"line":33223},157,[106,33225,33226],{"class":116},"            best_acc:",[106,33228,156],{"class":165},[106,33230,162],{"class":112},[106,33232,33233],{"class":116},"val_acc_all[",[106,33235,649],{"class":112},[106,33237,334],{"class":165},[106,33239,33240],{"class":116},"]\n",[106,33242,33244],{"class":108,"line":33243},158,[106,33245,33246],{"class":175},"            # 保存当前的准确度\n",[106,33248,33250],{"class":108,"line":33249},159,[106,33251,33252],{"class":175},"            # model.state_dict()是当前模型的所有参数（权重和偏置）\n",[106,33254,33256,33259,33261],{"class":108,"line":33255},160,[106,33257,33258],{"class":116},"            best_model_wts",[106,33260,162],{"class":112},[106,33262,32308],{"class":116},[106,33264,33266],{"class":108,"line":33265},161,[106,33267,2392],{"emptyLinePlaceholder":33},[106,33269,33271],{"class":108,"line":33270},162,[106,33272,33273],{"class":175},"        # 计算耗时\n",[106,33275,33277,33280,33282,33285,33287],{"class":108,"line":33276},163,[106,33278,33279],{"class":116},"        time_use",[106,33281,162],{"class":112},[106,33283,33284],{"class":116},"time.time()",[106,33286,649],{"class":112},[106,33288,33289],{"class":116},"since\n",[106,33291,33293,33295,33297,33300,33302,33305,33307,33309,33311,33313,33315,33318,33321,33324,33326,33329,33331,33333],{"class":108,"line":33292},164,[106,33294,32445],{"class":165},[106,33296,117],{"class":116},[106,33298,33299],{"class":221},"'训练和验证耗费的时间",[106,33301,1013],{"class":165},[106,33303,33304],{"class":112},":.0f",[106,33306,1063],{"class":165},[106,33308,661],{"class":221},[106,33310,1013],{"class":165},[106,33312,33304],{"class":112},[106,33314,1063],{"class":165},[106,33316,33317],{"class":221},"s'",[106,33319,33320],{"class":116},".format(time_use",[106,33322,33323],{"class":112},"\u002F\u002F",[106,33325,1024],{"class":165},[106,33327,33328],{"class":116},",time_use",[106,33330,445],{"class":112},[106,33332,1024],{"class":165},[106,33334,30491],{"class":116},[106,33336,33338],{"class":108,"line":33337},165,[106,33339,33340],{"class":175},"    # 选择最优参数\n",[106,33342,33344],{"class":108,"line":33343},166,[106,33345,33346],{"class":175},"    # 加载最高准确率下的模型参数\n",[106,33348,33350],{"class":108,"line":33349},167,[106,33351,33352],{"class":175},"    # model.load_state_dict(best_model_wts)\n",[106,33354,33356,33359,33362],{"class":108,"line":33355},168,[106,33357,33358],{"class":116},"    torch.save(model.state_dict(best_model_wts), ",[106,33360,33361],{"class":221},"'.\u002Fbest_model.pth'",[106,33363,123],{"class":116},[106,33365,33367],{"class":108,"line":33366},169,[106,33368,33369],{"class":175},"    # 或者写成\n",[106,33371,33373],{"class":108,"line":33372},170,[106,33374,33375],{"class":175},"    # torch.save(best_model_wts,'.\u002Fbest_model.pth')\n",[106,33377,33379],{"class":108,"line":33378},171,[106,33380,33381],{"class":175},"    # 保存训练过程,可以使用pandas来进行保存,里边有个DataFrame()可以像列表一样保存数据\n",[106,33383,33385,33388,33390,33393,33396,33398],{"class":108,"line":33384},172,[106,33386,33387],{"class":116},"    train_process",[106,33389,162],{"class":112},[106,33391,33392],{"class":116},"pd.DataFrame(",[106,33394,33395],{"class":5209},"data",[106,33397,162],{"class":112},[106,33399,1538],{"class":116},[106,33401,33403,33406,33408,33411],{"class":108,"line":33402},173,[106,33404,33405],{"class":221},"        \"epoch\"",[106,33407,976],{"class":116},[106,33409,33410],{"class":165},"range",[106,33412,33413],{"class":116},"(num_epochs),\n",[106,33415,33417,33420],{"class":108,"line":33416},174,[106,33418,33419],{"class":221},"        \"train_loss_all\"",[106,33421,33422],{"class":116},":train_loss_all,\n",[106,33424,33426,33429],{"class":108,"line":33425},175,[106,33427,33428],{"class":221},"        \"val_loss_all\"",[106,33430,33431],{"class":116},":val_loss_all,\n",[106,33433,33435,33438],{"class":108,"line":33434},176,[106,33436,33437],{"class":221},"        \"train_acc_all\"",[106,33439,33440],{"class":116},":train_acc_all,\n",[106,33442,33444,33447],{"class":108,"line":33443},177,[106,33445,33446],{"class":221},"        \"val_acc_all\"",[106,33448,33449],{"class":116},":val_acc_all\n",[106,33451,33453],{"class":108,"line":33452},178,[106,33454,33455],{"class":116},"    })\n",[106,33457,33459],{"class":108,"line":33458},179,[106,33460,33461],{"class":175},"    # 返回训练保存的过程\n",[106,33463,33465,33467],{"class":108,"line":33464},180,[106,33466,4082],{"class":112},[106,33468,33469],{"class":116}," train_process\n",[106,33471,33473],{"class":108,"line":33472},181,[106,33474,2392],{"emptyLinePlaceholder":33},[106,33476,33478],{"class":108,"line":33477},182,[106,33479,33480],{"class":175},"# 将loss值和精度按照图片的形式展示出来\n",[106,33482,33484,33486,33489],{"class":108,"line":33483},183,[106,33485,31941],{"class":112},[106,33487,33488],{"class":1955}," matplot_acc_loss",[106,33490,33491],{"class":116},"(train_process):\n",[106,33493,33495],{"class":108,"line":33494},184,[106,33496,33497],{"class":175},"    # 设置图的大小\n",[106,33499,33501,33504,33506,33508,33510,33512,33514,33516],{"class":108,"line":33500},185,[106,33502,33503],{"class":116},"    plt.figure(",[106,33505,31687],{"class":5209},[106,33507,162],{"class":112},[106,33509,117],{"class":116},[106,33511,615],{"class":165},[106,33513,495],{"class":116},[106,33515,410],{"class":165},[106,33517,30491],{"class":116},[106,33519,33521],{"class":108,"line":33520},186,[106,33522,33523],{"class":175},"    # 设置图中有几张图\n",[106,33525,33527],{"class":108,"line":33526},187,[106,33528,33529],{"class":175},"    # 把当前画布分成1行2列的子图,当前位置是 第 1 个子图\n",[106,33531,33533],{"class":108,"line":33532},188,[106,33534,33535],{"class":175},"    # ①loss图\n",[106,33537,33539,33541,33543,33545,33547,33549,33551],{"class":108,"line":33538},189,[106,33540,31721],{"class":116},[106,33542,334],{"class":165},[106,33544,495],{"class":116},[106,33546,194],{"class":165},[106,33548,495],{"class":116},[106,33550,334],{"class":165},[106,33552,123],{"class":116},[106,33554,33556],{"class":108,"line":33555},190,[106,33557,33558],{"class":175},"    # 补充:\n",[106,33560,33562],{"class":108,"line":33561},191,[106,33563,33564],{"class":175},"    # plt.subplot(nrows, ncols, index)\n",[106,33566,33568],{"class":108,"line":33567},192,[106,33569,33570],{"class":175},"    # nrows：行数\n",[106,33572,33574],{"class":108,"line":33573},193,[106,33575,33576],{"class":175},"    # ncols：列数\n",[106,33578,33580],{"class":108,"line":33579},194,[106,33581,33582],{"class":175},"    # index：目前选中第几个子图（从1开始）\n",[106,33584,33586,33589,33592,33595,33598,33600,33603,33605,33608],{"class":108,"line":33585},195,[106,33587,33588],{"class":116},"    plt.plot(train_process[",[106,33590,33591],{"class":221},"\"epoch\"",[106,33593,33594],{"class":116},"],train_process.train_loss_all,",[106,33596,33597],{"class":221},"'ro-'",[106,33599,495],{"class":116},[106,33601,33602],{"class":5209},"label",[106,33604,162],{"class":112},[106,33606,33607],{"class":221},"'train loss'",[106,33609,123],{"class":116},[106,33611,33613,33615,33617,33620,33623,33625,33627,33629,33632],{"class":108,"line":33612},196,[106,33614,33588],{"class":116},[106,33616,33591],{"class":221},[106,33618,33619],{"class":116},"],train_process.val_loss_all,",[106,33621,33622],{"class":221},"'bs--'",[106,33624,495],{"class":116},[106,33626,33602],{"class":5209},[106,33628,162],{"class":112},[106,33630,33631],{"class":221},"'val loss'",[106,33633,123],{"class":116},[106,33635,33637],{"class":108,"line":33636},197,[106,33638,33639],{"class":175},"    # 添加一个图例\n",[106,33641,33643],{"class":108,"line":33642},198,[106,33644,33645],{"class":116},"    plt.legend()\n",[106,33647,33649],{"class":108,"line":33648},199,[106,33650,33651],{"class":175},"    # 给轴添加标签\n",[106,33653,33655,33658,33661],{"class":108,"line":33654},200,[106,33656,33657],{"class":116},"    plt.xlabel(",[106,33659,33660],{"class":221},"'epoch'",[106,33662,123],{"class":116},[106,33664,33666,33669,33672],{"class":108,"line":33665},201,[106,33667,33668],{"class":116},"    plt.ylabel(",[106,33670,33671],{"class":221},"'loss'",[106,33673,123],{"class":116},[106,33675,33677],{"class":108,"line":33676},202,[106,33678,33679],{"class":175},"    # ②准确度图\n",[106,33681,33683,33685,33687,33689,33691,33693,33695],{"class":108,"line":33682},203,[106,33684,31721],{"class":116},[106,33686,334],{"class":165},[106,33688,495],{"class":116},[106,33690,194],{"class":165},[106,33692,495],{"class":116},[106,33694,194],{"class":165},[106,33696,123],{"class":116},[106,33698,33700,33702,33704,33707,33709,33711,33713,33715,33718],{"class":108,"line":33699},204,[106,33701,33588],{"class":116},[106,33703,33591],{"class":221},[106,33705,33706],{"class":116},"],train_process.train_acc_all,",[106,33708,33597],{"class":221},[106,33710,495],{"class":116},[106,33712,33602],{"class":5209},[106,33714,162],{"class":112},[106,33716,33717],{"class":221},"'train acc'",[106,33719,123],{"class":116},[106,33721,33723,33725,33727,33730,33732,33734,33736,33738,33741],{"class":108,"line":33722},205,[106,33724,33588],{"class":116},[106,33726,33591],{"class":221},[106,33728,33729],{"class":116},"],train_process.val_acc_all,",[106,33731,33622],{"class":221},[106,33733,495],{"class":116},[106,33735,33602],{"class":5209},[106,33737,162],{"class":112},[106,33739,33740],{"class":221},"'val acc'",[106,33742,123],{"class":116},[106,33744,33746],{"class":108,"line":33745},206,[106,33747,33748],{"class":175},"    # 添加图例\n",[106,33750,33752],{"class":108,"line":33751},207,[106,33753,33645],{"class":116},[106,33755,33757,33759,33761],{"class":108,"line":33756},208,[106,33758,33657],{"class":116},[106,33760,33591],{"class":221},[106,33762,123],{"class":116},[106,33764,33766,33768,33771],{"class":108,"line":33765},209,[106,33767,33668],{"class":116},[106,33769,33770],{"class":221},"\"acc\"",[106,33772,123],{"class":116},[106,33774,33776],{"class":108,"line":33775},210,[106,33777,33778],{"class":116},"    plt.show()\n",[106,33780,33782],{"class":108,"line":33781},211,[106,33783,2392],{"emptyLinePlaceholder":33},[106,33785,33787],{"class":108,"line":33786},212,[106,33788,33789],{"class":175},"# 正式开始训练:\n",[106,33791,33793,33795,33797,33799,33801],{"class":108,"line":33792},213,[106,33794,1523],{"class":112},[106,33796,31214],{"class":165},[106,33798,2941],{"class":112},[106,33800,31219],{"class":221},[106,33802,3731],{"class":116},[106,33804,33806],{"class":108,"line":33805},214,[106,33807,33808],{"class":175},"    # 将模型实例化\n",[106,33810,33812,33815,33817],{"class":108,"line":33811},215,[106,33813,33814],{"class":116},"    LeNet",[106,33816,162],{"class":112},[106,33818,33819],{"class":116},"LeNet()\n",[106,33821,33823,33826,33828],{"class":108,"line":33822},216,[106,33824,33825],{"class":116},"    train_dataloader,val_dataloader",[106,33827,162],{"class":112},[106,33829,33830],{"class":116},"train_val_data_process()\n",[106,33832,33834,33836,33838,33841,33844,33846,33848],{"class":108,"line":33833},217,[106,33835,33387],{"class":116},[106,33837,162],{"class":112},[106,33839,33840],{"class":116},"train_model_process(LeNet,train_dataloader,val_dataloader,",[106,33842,33843],{"class":5209},"num_epochs",[106,33845,162],{"class":112},[106,33847,817],{"class":165},[106,33849,123],{"class":116},[106,33851,33853],{"class":108,"line":33852},218,[106,33854,33855],{"class":116},"    matplot_acc_loss(train_process)\n",[14,33857,33858],{},"画图的补充点学习：",[14,33860,33861],{},[23,33862],{"alt":25,"src":33863},"\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",[60,33865,33866],{"start":1172},[63,33867,33868],{},"测试",[97,33870,33872],{"className":30372,"code":33871,"language":30374,"meta":25,"style":25},"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",[103,33873,33874,33880,33890,33902,33912,33917,33927,33937,33941,33946,33955,33972,33984,34001,34012,34028,34033,34044,34055,34066,34073,34077,34082,34092,34097,34114,34122,34126,34131,34140,34149,34153,34158,34163,34168,34175,34180,34192,34202,34212,34217,34221,34226,34235,34240,34256,34261,34266,34271,34285,34290,34304,34308,34313,34328,34333,34345,34349,34354,34366,34371,34379,34384,34389,34399,34404,34413,34418,34423,34427,34432,34437,34453,34461,34466,34471,34530,34536,34541,34552,34560,34568,34572,34577,34581,34586,34594,34599,34615,34620,34630,34640],{"__ignoreMap":25},[106,33875,33876,33878],{"class":108,"line":109},[106,33877,30386],{"class":112},[106,33879,30389],{"class":116},[106,33881,33882,33884,33886,33888],{"class":108,"line":28},[106,33883,30386],{"class":112},[106,33885,31409],{"class":116},[106,33887,31377],{"class":112},[106,33889,31414],{"class":116},[106,33891,33892,33894,33897,33899],{"class":108,"line":1172},[106,33893,30731],{"class":112},[106,33895,33896],{"class":116}," jupyter_client.consoleapp ",[106,33898,30386],{"class":112},[106,33900,33901],{"class":116}," classes\n",[106,33903,33904,33906,33908,33910],{"class":108,"line":1187},[106,33905,30731],{"class":112},[106,33907,31392],{"class":116},[106,33909,30386],{"class":112},[106,33911,31397],{"class":116},[106,33913,33914],{"class":108,"line":1193},[106,33915,33916],{"class":175},"# 导入数据集\n",[106,33918,33919,33921,33923,33925],{"class":108,"line":1207},[106,33920,30731],{"class":112},[106,33922,31362],{"class":116},[106,33924,30386],{"class":112},[106,33926,31367],{"class":116},[106,33928,33929,33931,33933,33935],{"class":108,"line":1213},[106,33930,30731],{"class":112},[106,33932,31908],{"class":116},[106,33934,30386],{"class":112},[106,33936,31913],{"class":116},[106,33938,33939],{"class":108,"line":1304},[106,33940,2392],{"emptyLinePlaceholder":33},[106,33942,33943],{"class":108,"line":1310},[106,33944,33945],{"class":175},"# 测试数据处理\n",[106,33947,33948,33950,33953],{"class":108,"line":1322},[106,33949,31941],{"class":112},[106,33951,33952],{"class":1955}," test_data_process",[106,33954,31947],{"class":116},[106,33956,33957,33960,33962,33964,33966,33968,33970],{"class":108,"line":1604},[106,33958,33959],{"class":116},"    test_data",[106,33961,162],{"class":112},[106,33963,31449],{"class":116},[106,33965,31452],{"class":5209},[106,33967,162],{"class":112},[106,33969,31457],{"class":221},[106,33971,31460],{"class":116},[106,33973,33974,33977,33979,33982],{"class":108,"line":1609},[106,33975,33976],{"class":5209},"                           train",[106,33978,162],{"class":112},[106,33980,33981],{"class":165},"False",[106,33983,31460],{"class":116},[106,33985,33986,33989,33991,33993,33995,33997,33999],{"class":108,"line":1615},[106,33987,33988],{"class":5209},"                           transform",[106,33990,162],{"class":112},[106,33992,31487],{"class":116},[106,33994,31490],{"class":5209},[106,33996,162],{"class":112},[106,33998,1018],{"class":165},[106,34000,31498],{"class":116},[106,34002,34003,34006,34008,34010],{"class":108,"line":1620},[106,34004,34005],{"class":5209},"                           download",[106,34007,162],{"class":112},[106,34009,31470],{"class":165},[106,34011,123],{"class":116},[106,34013,34014,34017,34019,34021,34023,34025],{"class":108,"line":1634},[106,34015,34016],{"class":116},"    test_dataloader",[106,34018,162],{"class":112},[106,34020,31528],{"class":116},[106,34022,31531],{"class":5209},[106,34024,162],{"class":112},[106,34026,34027],{"class":116},"test_data,\n",[106,34029,34030],{"class":108,"line":1639},[106,34031,34032],{"class":175},"                                    # 这里是一张一张进行测试\n",[106,34034,34035,34038,34040,34042],{"class":108,"line":1645},[106,34036,34037],{"class":5209},"                                    batch_size",[106,34039,162],{"class":112},[106,34041,334],{"class":165},[106,34043,31460],{"class":116},[106,34045,34046,34049,34051,34053],{"class":108,"line":1666},[106,34047,34048],{"class":5209},"                                    shuffle",[106,34050,162],{"class":112},[106,34052,31470],{"class":165},[106,34054,31460],{"class":116},[106,34056,34057,34060,34062,34064],{"class":108,"line":1671},[106,34058,34059],{"class":5209},"                                    num_workers",[106,34061,162],{"class":112},[106,34063,308],{"class":165},[106,34065,123],{"class":116},[106,34067,34068,34070],{"class":108,"line":1685},[106,34069,4082],{"class":112},[106,34071,34072],{"class":116}," test_dataloader\n",[106,34074,34075],{"class":108,"line":1690},[106,34076,2392],{"emptyLinePlaceholder":33},[106,34078,34079],{"class":108,"line":1719},[106,34080,34081],{"class":175},"# 定义模型测试函数\n",[106,34083,34084,34086,34089],{"class":108,"line":1724},[106,34085,31941],{"class":112},[106,34087,34088],{"class":1955}," test_model_process",[106,34090,34091],{"class":116},"(model,test_dataloader):\n",[106,34093,34094],{"class":108,"line":1741},[106,34095,34096],{"class":175},"    # 将模型放到设备当中，先进行判断\n",[106,34098,34099,34101,34103,34105,34107,34109,34111],{"class":108,"line":1746},[106,34100,31231],{"class":116},[106,34102,162],{"class":112},[106,34104,31238],{"class":221},[106,34106,1696],{"class":112},[106,34108,31243],{"class":116},[106,34110,1693],{"class":112},[106,34112,34113],{"class":221}," \"cpu\"\n",[106,34115,34116,34118,34120],{"class":108,"line":1751},[106,34117,31283],{"class":116},[106,34119,162],{"class":112},[106,34121,32283],{"class":116},[106,34123,34124],{"class":108,"line":1756},[106,34125,2392],{"emptyLinePlaceholder":33},[106,34127,34128],{"class":108,"line":1770},[106,34129,34130],{"class":175},"    # 设置初始化参数\n",[106,34132,34133,34136,34138],{"class":108,"line":1775},[106,34134,34135],{"class":116},"    test_corrects",[106,34137,162],{"class":112},[106,34139,32336],{"class":165},[106,34141,34142,34145,34147],{"class":108,"line":2569},[106,34143,34144],{"class":116},"    test_num",[106,34146,162],{"class":112},[106,34148,3077],{"class":165},[106,34150,34151],{"class":108,"line":2583},[106,34152,2392],{"emptyLinePlaceholder":33},[106,34154,34155],{"class":108,"line":2591},[106,34156,34157],{"class":175},"    # 进行模型测试\n",[106,34159,34160],{"class":108,"line":2596},[106,34161,34162],{"class":175},"    # 模型在推理的时候只进行前向传播，不再进行反向传播更新梯度了\n",[106,34164,34165],{"class":108,"line":2602},[106,34166,34167],{"class":175},"    # 不进行梯度计算，可以节省内存，加快运行速度\n",[106,34169,34170,34173],{"class":108,"line":2608},[106,34171,34172],{"class":112},"    with",[106,34174,32878],{"class":116},[106,34176,34177],{"class":108,"line":2613},[106,34178,34179],{"class":175},"        # 从数据中进行\n",[106,34181,34182,34184,34187,34189],{"class":108,"line":7941},[106,34183,3395],{"class":112},[106,34185,34186],{"class":116}," test_data_x,test_data_y ",[106,34188,26037],{"class":112},[106,34190,34191],{"class":116}," test_dataloader:\n",[106,34193,34194,34197,34199],{"class":108,"line":7965},[106,34195,34196],{"class":116},"            test_data_x",[106,34198,162],{"class":112},[106,34200,34201],{"class":116},"test_data_x.to(device)\n",[106,34203,34204,34207,34209],{"class":108,"line":7970},[106,34205,34206],{"class":116},"            test_data_y",[106,34208,162],{"class":112},[106,34210,34211],{"class":116},"test_data_y.to(device)\n",[106,34213,34214],{"class":108,"line":7976},[106,34215,34216],{"class":175},"            # 设置为验证模式\n",[106,34218,34219],{"class":108,"line":8003},[106,34220,32869],{"class":116},[106,34222,34223],{"class":108,"line":8008},[106,34224,34225],{"class":175},"            # 前向传播过程，输入为测试数据集,输出为对每个样本的预测值\n",[106,34227,34228,34230,34232],{"class":108,"line":8014},[106,34229,32654],{"class":116},[106,34231,162],{"class":112},[106,34233,34234],{"class":116},"model(test_data_x)\n",[106,34236,34237],{"class":108,"line":8026},[106,34238,34239],{"class":175},"            # 查找每一行中最大值对应的下标\n",[106,34241,34242,34244,34246,34248,34250,34252,34254],{"class":108,"line":8038},[106,34243,32671],{"class":116},[106,34245,162],{"class":112},[106,34247,32676],{"class":116},[106,34249,32679],{"class":5209},[106,34251,162],{"class":112},[106,34253,334],{"class":165},[106,34255,123],{"class":116},[106,34257,34258],{"class":108,"line":8050},[106,34259,34260],{"class":175},"            # 计算正确率\n",[106,34262,34263],{"class":108,"line":9709},[106,34264,34265],{"class":175},"            # .data表示是一个不带梯度信息的tensor\n",[106,34267,34268],{"class":108,"line":9734},[106,34269,34270],{"class":175},"            # 如果预测正确，则准确度test_corrects加1\n",[106,34272,34273,34276,34278,34280,34282],{"class":108,"line":9757},[106,34274,34275],{"class":116},"            test_corrects",[106,34277,9470],{"class":112},[106,34279,32781],{"class":116},[106,34281,2941],{"class":112},[106,34283,34284],{"class":116},"test_data_y.data)\n",[106,34286,34287],{"class":108,"line":9781},[106,34288,34289],{"class":175},"            # 将所有的测试样本进行累计\n",[106,34291,34292,34295,34297,34300,34302],{"class":108,"line":9786},[106,34293,34294],{"class":116},"            test_num",[106,34296,9470],{"class":112},[106,34298,34299],{"class":116},"test_data_x.size(",[106,34301,308],{"class":165},[106,34303,123],{"class":116},[106,34305,34306],{"class":108,"line":9791},[106,34307,2392],{"emptyLinePlaceholder":33},[106,34309,34310],{"class":108,"line":9796},[106,34311,34312],{"class":175},"        # 计算准确度\n",[106,34314,34315,34318,34320,34323,34325],{"class":108,"line":9805},[106,34316,34317],{"class":116},"        test_acc",[106,34319,162],{"class":112},[106,34321,34322],{"class":116},"test_corrects.double().item()",[106,34324,701],{"class":112},[106,34326,34327],{"class":116},"test_num\n",[106,34329,34330],{"class":108,"line":9810},[106,34331,34332],{"class":175},"        # .item()的作用是：把只含1个数字的 Tensor 转成 Python 的数字\n",[106,34334,34335,34337,34339,34342],{"class":108,"line":9816},[106,34336,32445],{"class":165},[106,34338,117],{"class":116},[106,34340,34341],{"class":221},"\"测试的准确率：\"",[106,34343,34344],{"class":116},",test_acc)\n",[106,34346,34347],{"class":108,"line":9837},[106,34348,2392],{"emptyLinePlaceholder":33},[106,34350,34351],{"class":108,"line":9843},[106,34352,34353],{"class":175},"# 实现模型的测试功能\n",[106,34355,34356,34358,34360,34362,34364],{"class":108,"line":9857},[106,34357,1523],{"class":112},[106,34359,31214],{"class":165},[106,34361,2941],{"class":112},[106,34363,31219],{"class":221},[106,34365,3731],{"class":116},[106,34367,34368],{"class":108,"line":9863},[106,34369,34370],{"class":175},"    # 加载模型\n",[106,34372,34373,34375,34377],{"class":108,"line":9890},[106,34374,31283],{"class":116},[106,34376,162],{"class":112},[106,34378,33819],{"class":116},[106,34380,34381],{"class":108,"line":9899},[106,34382,34383],{"class":175},"    # 调用训练好的权重，把之前训练好、保存下来的模型参数重新装回模型里\n",[106,34385,34386],{"class":108,"line":9905},[106,34387,34388],{"class":175},"    # 使用torch中的load函数加载权重，利用model.load_state_dict将参数加回到模型当中\n",[106,34390,34391,34394,34397],{"class":108,"line":9913},[106,34392,34393],{"class":116},"    model.load_state_dict(torch.load(",[106,34395,34396],{"class":221},"'best_model.pth'",[106,34398,30491],{"class":116},[106,34400,34401],{"class":108,"line":9918},[106,34402,34403],{"class":175},"    # 数据加载\n",[106,34405,34406,34408,34410],{"class":108,"line":16597},[106,34407,34016],{"class":116},[106,34409,162],{"class":112},[106,34411,34412],{"class":116},"test_data_process()\n",[106,34414,34415],{"class":108,"line":16603},[106,34416,34417],{"class":175},"    # 加载模型测试的函数\n",[106,34419,34420],{"class":108,"line":16626},[106,34421,34422],{"class":116},"    test_model_process(model,test_dataloader)\n",[106,34424,34425],{"class":108,"line":16632},[106,34426,2392],{"emptyLinePlaceholder":33},[106,34428,34429],{"class":108,"line":16655},[106,34430,34431],{"class":175},"    # 验证集推理实现：\n",[106,34433,34434],{"class":108,"line":16669},[106,34435,34436],{"class":175},"    # 加载数据加载的更详细一些\n",[106,34438,34439,34441,34443,34445,34447,34449,34451],{"class":108,"line":16689},[106,34440,31231],{"class":116},[106,34442,162],{"class":112},[106,34444,31238],{"class":221},[106,34446,1696],{"class":112},[106,34448,31243],{"class":116},[106,34450,1693],{"class":112},[106,34452,34113],{"class":221},[106,34454,34455,34457,34459],{"class":108,"line":16695},[106,34456,31283],{"class":116},[106,34458,162],{"class":112},[106,34460,32283],{"class":116},[106,34462,34463],{"class":108,"line":16706},[106,34464,34465],{"class":175},"    # 设置类别，这样预测值就不展示数字，就直接展示这个种类了\n",[106,34467,34468],{"class":108,"line":16729},[106,34469,34470],{"class":175},"    # 顺序不可改变\n",[106,34472,34473,34476,34478,34480,34483,34485,34488,34490,34493,34495,34498,34500,34503,34505,34508,34510,34513,34515,34518,34520,34523,34525,34528],{"class":108,"line":16751},[106,34474,34475],{"class":116},"    classes",[106,34477,162],{"class":112},[106,34479,1007],{"class":116},[106,34481,34482],{"class":221},"'T-shirt\u002Ftop'",[106,34484,495],{"class":116},[106,34486,34487],{"class":221},"'Trouser'",[106,34489,495],{"class":116},[106,34491,34492],{"class":221},"'Pullover'",[106,34494,495],{"class":116},[106,34496,34497],{"class":221},"'Dress'",[106,34499,495],{"class":116},[106,34501,34502],{"class":221},"'Coat'",[106,34504,495],{"class":116},[106,34506,34507],{"class":221},"'Sandal'",[106,34509,495],{"class":116},[106,34511,34512],{"class":221},"'Shirt'",[106,34514,495],{"class":116},[106,34516,34517],{"class":221},"'Sneaker'",[106,34519,495],{"class":116},[106,34521,34522],{"class":221},"'Bag'",[106,34524,495],{"class":116},[106,34526,34527],{"class":221},"'Ankle boot'",[106,34529,33240],{"class":116},[106,34531,34532,34534],{"class":108,"line":16756},[106,34533,34172],{"class":112},[106,34535,32878],{"class":116},[106,34537,34538],{"class":108,"line":16762},[106,34539,34540],{"class":175},"        # 将数据和标签都放到设备当中\n",[106,34542,34543,34545,34548,34550],{"class":108,"line":16776},[106,34544,3395],{"class":112},[106,34546,34547],{"class":116}," b_x,b_y ",[106,34549,26037],{"class":112},[106,34551,34191],{"class":116},[106,34553,34554,34556,34558],{"class":108,"line":16789},[106,34555,32604],{"class":116},[106,34557,162],{"class":112},[106,34559,32609],{"class":116},[106,34561,34562,34564,34566],{"class":108,"line":16794},[106,34563,32619],{"class":116},[106,34565,162],{"class":112},[106,34567,32624],{"class":116},[106,34569,34570],{"class":108,"line":16808},[106,34571,2392],{"emptyLinePlaceholder":33},[106,34573,34574],{"class":108,"line":16813},[106,34575,34576],{"class":175},"            # 设置模型为验证模式\n",[106,34578,34579],{"class":108,"line":16819},[106,34580,32869],{"class":116},[106,34582,34583],{"class":108,"line":16824},[106,34584,34585],{"class":175},"            # 模型推理结果\n",[106,34587,34588,34590,34592],{"class":108,"line":16838},[106,34589,32654],{"class":116},[106,34591,162],{"class":112},[106,34593,32659],{"class":116},[106,34595,34596],{"class":108,"line":16843},[106,34597,34598],{"class":175},"            # 获取最大下标，最大下标就是类别号\n",[106,34600,34601,34603,34605,34607,34609,34611,34613],{"class":108,"line":16848},[106,34602,32671],{"class":116},[106,34604,162],{"class":112},[106,34606,32676],{"class":116},[106,34608,32679],{"class":5209},[106,34610,162],{"class":112},[106,34612,334],{"class":165},[106,34614,123],{"class":116},[106,34616,34617],{"class":108,"line":16862},[106,34618,34619],{"class":175},"            # 取出张量中的数值\n",[106,34621,34622,34625,34627],{"class":108,"line":16874},[106,34623,34624],{"class":116},"            result",[106,34626,162],{"class":112},[106,34628,34629],{"class":116},"pre_lab.item()\n",[106,34631,34632,34635,34637],{"class":108,"line":16879},[106,34633,34634],{"class":116},"            label",[106,34636,162],{"class":112},[106,34638,34639],{"class":116},"b_y.item()\n",[106,34641,34642,34645,34647,34650,34653,34656,34658,34661],{"class":108,"line":16892},[106,34643,34644],{"class":165},"            print",[106,34646,117],{"class":116},[106,34648,34649],{"class":221},"\"预测值：\"",[106,34651,34652],{"class":116},",classes[result],",[106,34654,34655],{"class":221},"\"------\"",[106,34657,495],{"class":116},[106,34659,34660],{"class":221},"\"真实值：\"",[106,34662,34663],{"class":116},",classes[label])\n",[14,34665,34666],{},"（2）AlexNet",[60,34668,34669],{},[63,34670,34671],{},"神经网络构建",[97,34673,34675],{"className":30372,"code":34674,"language":30374,"meta":25,"style":25},"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",[103,34676,34677,34683,34693,34703,34715,34719,34736,34744,34759,34771,34813,34840,34883,34909,34953,34996,35039,35066,35070,35080,35085,35113,35132,35151,35155,35160,35168,35183,35193,35207,35217,35232,35247,35262,35273,35277,35282,35292,35307,35312,35326,35341,35353,35358,35369,35374,35380,35385,35397,35417,35422,35431],{"__ignoreMap":25},[106,34678,34679,34681],{"class":108,"line":109},[106,34680,30386],{"class":112},[106,34682,30389],{"class":116},[106,34684,34685,34687,34689,34691],{"class":108,"line":28},[106,34686,30731],{"class":112},[106,34688,30734],{"class":116},[106,34690,30386],{"class":112},[106,34692,30739],{"class":116},[106,34694,34695,34697,34699,34701],{"class":108,"line":1172},[106,34696,30731],{"class":112},[106,34698,30751],{"class":116},[106,34700,30386],{"class":112},[106,34702,30756],{"class":116},[106,34704,34705,34707,34710,34712],{"class":108,"line":1187},[106,34706,30386],{"class":112},[106,34708,34709],{"class":116}," torch.nn.functional ",[106,34711,31377],{"class":112},[106,34713,34714],{"class":116}," F\n",[106,34716,34717],{"class":108,"line":1193},[106,34718,2392],{"emptyLinePlaceholder":33},[106,34720,34721,34723,34726,34728,34730,34732,34734],{"class":108,"line":1207},[106,34722,14687],{"class":112},[106,34724,34725],{"class":1955}," AlexNet",[106,34727,117],{"class":116},[106,34729,30772],{"class":1955},[106,34731,675],{"class":116},[106,34733,30777],{"class":1955},[106,34735,30780],{"class":116},[106,34737,34738,34740,34742],{"class":108,"line":1213},[106,34739,30795],{"class":112},[106,34741,30798],{"class":165},[106,34743,30801],{"class":116},[106,34745,34746,34748,34751,34753,34755,34757],{"class":108,"line":1304},[106,34747,30811],{"class":165},[106,34749,34750],{"class":116},"(AlexNet,",[106,34752,30817],{"class":165},[106,34754,30820],{"class":116},[106,34756,30823],{"class":165},[106,34758,1968],{"class":116},[106,34760,34761,34763,34766,34768],{"class":108,"line":1310},[106,34762,30839],{"class":165},[106,34764,34765],{"class":116},".ReLu",[106,34767,162],{"class":112},[106,34769,34770],{"class":116},"nn.ReLU()\n",[106,34772,34773,34775,34777,34779,34781,34783,34785,34787,34789,34791,34793,34795,34797,34799,34801,34803,34805,34807,34809,34811],{"class":108,"line":1322},[106,34774,30839],{"class":165},[106,34776,30842],{"class":116},[106,34778,162],{"class":112},[106,34780,30847],{"class":116},[106,34782,30850],{"class":5209},[106,34784,162],{"class":112},[106,34786,334],{"class":165},[106,34788,495],{"class":116},[106,34790,30859],{"class":5209},[106,34792,162],{"class":112},[106,34794,326],{"class":165},[106,34796,495],{"class":116},[106,34798,30868],{"class":5209},[106,34800,162],{"class":112},[106,34802,589],{"class":165},[106,34804,495],{"class":116},[106,34806,30923],{"class":5209},[106,34808,162],{"class":112},[106,34810,410],{"class":165},[106,34812,123],{"class":116},[106,34814,34815,34817,34819,34821,34824,34826,34828,34830,34832,34834,34836,34838],{"class":108,"line":1604},[106,34816,30839],{"class":165},[106,34818,30907],{"class":116},[106,34820,162],{"class":112},[106,34822,34823],{"class":116},"nn.MaxPool2d(",[106,34825,30868],{"class":5209},[106,34827,162],{"class":112},[106,34829,188],{"class":165},[106,34831,495],{"class":116},[106,34833,30923],{"class":5209},[106,34835,162],{"class":112},[106,34837,194],{"class":165},[106,34839,123],{"class":116},[106,34841,34842,34844,34846,34848,34850,34852,34854,34856,34858,34860,34862,34865,34867,34869,34871,34873,34875,34877,34879,34881],{"class":108,"line":1609},[106,34843,30839],{"class":165},[106,34845,30936],{"class":116},[106,34847,162],{"class":112},[106,34849,30847],{"class":116},[106,34851,30850],{"class":5209},[106,34853,162],{"class":112},[106,34855,326],{"class":165},[106,34857,495],{"class":116},[106,34859,30859],{"class":5209},[106,34861,162],{"class":112},[106,34863,34864],{"class":165},"256",[106,34866,495],{"class":116},[106,34868,30868],{"class":5209},[106,34870,162],{"class":112},[106,34872,436],{"class":165},[106,34874,495],{"class":116},[106,34876,30877],{"class":5209},[106,34878,162],{"class":112},[106,34880,194],{"class":165},[106,34882,123],{"class":116},[106,34884,34885,34887,34889,34891,34893,34895,34897,34899,34901,34903,34905,34907],{"class":108,"line":1615},[106,34886,30839],{"class":165},[106,34888,30971],{"class":116},[106,34890,162],{"class":112},[106,34892,34823],{"class":116},[106,34894,30868],{"class":5209},[106,34896,162],{"class":112},[106,34898,188],{"class":165},[106,34900,495],{"class":116},[106,34902,30923],{"class":5209},[106,34904,162],{"class":112},[106,34906,194],{"class":165},[106,34908,123],{"class":116},[106,34910,34911,34913,34916,34918,34920,34922,34924,34926,34928,34930,34932,34935,34937,34939,34941,34943,34945,34947,34949,34951],{"class":108,"line":1620},[106,34912,30839],{"class":165},[106,34914,34915],{"class":116},".c5",[106,34917,162],{"class":112},[106,34919,30847],{"class":116},[106,34921,30850],{"class":5209},[106,34923,162],{"class":112},[106,34925,34864],{"class":165},[106,34927,495],{"class":116},[106,34929,30859],{"class":5209},[106,34931,162],{"class":112},[106,34933,34934],{"class":165},"384",[106,34936,495],{"class":116},[106,34938,30868],{"class":5209},[106,34940,162],{"class":112},[106,34942,188],{"class":165},[106,34944,495],{"class":116},[106,34946,30877],{"class":5209},[106,34948,162],{"class":112},[106,34950,334],{"class":165},[106,34952,123],{"class":116},[106,34954,34955,34957,34960,34962,34964,34966,34968,34970,34972,34974,34976,34978,34980,34982,34984,34986,34988,34990,34992,34994],{"class":108,"line":1634},[106,34956,30839],{"class":165},[106,34958,34959],{"class":116},".c6",[106,34961,162],{"class":112},[106,34963,30847],{"class":116},[106,34965,30850],{"class":5209},[106,34967,162],{"class":112},[106,34969,34934],{"class":165},[106,34971,495],{"class":116},[106,34973,30859],{"class":5209},[106,34975,162],{"class":112},[106,34977,34934],{"class":165},[106,34979,495],{"class":116},[106,34981,30868],{"class":5209},[106,34983,162],{"class":112},[106,34985,188],{"class":165},[106,34987,495],{"class":116},[106,34989,30877],{"class":5209},[106,34991,162],{"class":112},[106,34993,334],{"class":165},[106,34995,123],{"class":116},[106,34997,34998,35000,35003,35005,35007,35009,35011,35013,35015,35017,35019,35021,35023,35025,35027,35029,35031,35033,35035,35037],{"class":108,"line":1639},[106,34999,30839],{"class":165},[106,35001,35002],{"class":116},".c7",[106,35004,162],{"class":112},[106,35006,30847],{"class":116},[106,35008,30850],{"class":5209},[106,35010,162],{"class":112},[106,35012,34934],{"class":165},[106,35014,495],{"class":116},[106,35016,30859],{"class":5209},[106,35018,162],{"class":112},[106,35020,34864],{"class":165},[106,35022,495],{"class":116},[106,35024,30868],{"class":5209},[106,35026,162],{"class":112},[106,35028,188],{"class":165},[106,35030,495],{"class":116},[106,35032,30877],{"class":5209},[106,35034,162],{"class":112},[106,35036,334],{"class":165},[106,35038,123],{"class":116},[106,35040,35041,35043,35046,35048,35050,35052,35054,35056,35058,35060,35062,35064],{"class":108,"line":1645},[106,35042,30839],{"class":165},[106,35044,35045],{"class":116},".s8",[106,35047,162],{"class":112},[106,35049,34823],{"class":116},[106,35051,30868],{"class":5209},[106,35053,162],{"class":112},[106,35055,188],{"class":165},[106,35057,495],{"class":116},[106,35059,30923],{"class":5209},[106,35061,162],{"class":112},[106,35063,194],{"class":165},[106,35065,123],{"class":116},[106,35067,35068],{"class":108,"line":1666},[106,35069,30996],{"class":175},[106,35071,35072,35074,35076,35078],{"class":108,"line":1671},[106,35073,30839],{"class":165},[106,35075,31003],{"class":116},[106,35077,162],{"class":112},[106,35079,31008],{"class":116},[106,35081,35082],{"class":108,"line":1685},[106,35083,35084],{"class":175},"       # 定义全连接层\n",[106,35086,35087,35089,35092,35094,35096,35098,35100,35102,35104,35106,35108,35111],{"class":108,"line":1690},[106,35088,30839],{"class":165},[106,35090,35091],{"class":116},".f1",[106,35093,162],{"class":112},[106,35095,31025],{"class":116},[106,35097,461],{"class":165},[106,35099,572],{"class":112},[106,35101,461],{"class":165},[106,35103,572],{"class":112},[106,35105,34864],{"class":165},[106,35107,495],{"class":116},[106,35109,35110],{"class":165},"4096",[106,35112,123],{"class":116},[106,35114,35115,35117,35120,35122,35124,35126,35128,35130],{"class":108,"line":1719},[106,35116,30839],{"class":165},[106,35118,35119],{"class":116},".f2",[106,35121,162],{"class":112},[106,35123,31025],{"class":116},[106,35125,35110],{"class":165},[106,35127,495],{"class":116},[106,35129,35110],{"class":165},[106,35131,123],{"class":116},[106,35133,35134,35136,35139,35141,35143,35145,35147,35149],{"class":108,"line":1724},[106,35135,30839],{"class":165},[106,35137,35138],{"class":116},".f3",[106,35140,162],{"class":112},[106,35142,31025],{"class":116},[106,35144,35110],{"class":165},[106,35146,495],{"class":116},[106,35148,563],{"class":165},[106,35150,123],{"class":116},[106,35152,35153],{"class":108,"line":1741},[106,35154,2392],{"emptyLinePlaceholder":33},[106,35156,35157],{"class":108,"line":1746},[106,35158,35159],{"class":175},"    # 定义前向传播\n",[106,35161,35162,35164,35166],{"class":108,"line":1751},[106,35163,30795],{"class":112},[106,35165,31087],{"class":1955},[106,35167,31090],{"class":116},[106,35169,35170,35172,35174,35176,35179,35181],{"class":108,"line":1756},[106,35171,31095],{"class":116},[106,35173,162],{"class":112},[106,35175,30817],{"class":165},[106,35177,35178],{"class":116},".ReLu(",[106,35180,30817],{"class":165},[106,35182,31107],{"class":116},[106,35184,35185,35187,35189,35191],{"class":108,"line":1770},[106,35186,31095],{"class":116},[106,35188,162],{"class":112},[106,35190,30817],{"class":165},[106,35192,31118],{"class":116},[106,35194,35195,35197,35199,35201,35203,35205],{"class":108,"line":1775},[106,35196,31095],{"class":116},[106,35198,162],{"class":112},[106,35200,30817],{"class":165},[106,35202,35178],{"class":116},[106,35204,30817],{"class":165},[106,35206,31133],{"class":116},[106,35208,35209,35211,35213,35215],{"class":108,"line":2569},[106,35210,31095],{"class":116},[106,35212,162],{"class":112},[106,35214,30817],{"class":165},[106,35216,31144],{"class":116},[106,35218,35219,35221,35223,35225,35227,35229],{"class":108,"line":2583},[106,35220,31095],{"class":116},[106,35222,162],{"class":112},[106,35224,30817],{"class":165},[106,35226,35178],{"class":116},[106,35228,30817],{"class":165},[106,35230,35231],{"class":116},".c5(x))\n",[106,35233,35234,35236,35238,35240,35242,35244],{"class":108,"line":2591},[106,35235,31095],{"class":116},[106,35237,162],{"class":112},[106,35239,30817],{"class":165},[106,35241,35178],{"class":116},[106,35243,30817],{"class":165},[106,35245,35246],{"class":116},".c6(x))\n",[106,35248,35249,35251,35253,35255,35257,35259],{"class":108,"line":2596},[106,35250,31095],{"class":116},[106,35252,162],{"class":112},[106,35254,30817],{"class":165},[106,35256,35178],{"class":116},[106,35258,30817],{"class":165},[106,35260,35261],{"class":116},".c7(x))\n",[106,35263,35264,35266,35268,35270],{"class":108,"line":2602},[106,35265,31095],{"class":116},[106,35267,162],{"class":112},[106,35269,30817],{"class":165},[106,35271,35272],{"class":116},".s8(x)\n",[106,35274,35275],{"class":108,"line":2608},[106,35276,2392],{"emptyLinePlaceholder":33},[106,35278,35279],{"class":108,"line":2613},[106,35280,35281],{"class":175},"        # 展平加线性全连接层\n",[106,35283,35284,35286,35288,35290],{"class":108,"line":7941},[106,35285,31095],{"class":116},[106,35287,162],{"class":112},[106,35289,30817],{"class":165},[106,35291,31155],{"class":116},[106,35293,35294,35296,35298,35300,35302,35304],{"class":108,"line":7965},[106,35295,31095],{"class":116},[106,35297,162],{"class":112},[106,35299,30817],{"class":165},[106,35301,35178],{"class":116},[106,35303,30817],{"class":165},[106,35305,35306],{"class":116},".f1(x))\n",[106,35308,35309],{"class":108,"line":7970},[106,35310,35311],{"class":175},"        # 还需要dropout对神经元随机进行失活\n",[106,35313,35314,35316,35318,35321,35324],{"class":108,"line":7976},[106,35315,31095],{"class":116},[106,35317,162],{"class":112},[106,35319,35320],{"class":116},"F.dropout(x,",[106,35322,35323],{"class":165},"0.5",[106,35325,123],{"class":116},[106,35327,35328,35330,35332,35334,35336,35338],{"class":108,"line":8003},[106,35329,31095],{"class":116},[106,35331,162],{"class":112},[106,35333,30817],{"class":165},[106,35335,35178],{"class":116},[106,35337,30817],{"class":165},[106,35339,35340],{"class":116},".f2(x))\n",[106,35342,35343,35345,35347,35349,35351],{"class":108,"line":8008},[106,35344,31095],{"class":116},[106,35346,162],{"class":112},[106,35348,35320],{"class":116},[106,35350,35323],{"class":165},[106,35352,123],{"class":116},[106,35354,35355],{"class":108,"line":8014},[106,35356,35357],{"class":175},"        # 直接输出\n",[106,35359,35360,35362,35364,35366],{"class":108,"line":8026},[106,35361,31095],{"class":116},[106,35363,162],{"class":112},[106,35365,30817],{"class":165},[106,35367,35368],{"class":116},".f3(x)\n",[106,35370,35371],{"class":108,"line":8038},[106,35372,35373],{"class":175},"        # 前向传播输出\n",[106,35375,35376,35378],{"class":108,"line":8050},[106,35377,14745],{"class":112},[106,35379,31203],{"class":116},[106,35381,35382],{"class":108,"line":9709},[106,35383,35384],{"class":175},"# 定义主函数，用于测试神经网络是否可以正常工作\n",[106,35386,35387,35389,35391,35393,35395],{"class":108,"line":9734},[106,35388,1523],{"class":112},[106,35390,31214],{"class":165},[106,35392,2941],{"class":112},[106,35394,31219],{"class":221},[106,35396,3731],{"class":116},[106,35398,35399,35401,35403,35405,35407,35409,35411,35413,35415],{"class":108,"line":9757},[106,35400,31231],{"class":116},[106,35402,162],{"class":112},[106,35404,30445],{"class":116},[106,35406,31238],{"class":221},[106,35408,1696],{"class":112},[106,35410,31243],{"class":116},[106,35412,1693],{"class":112},[106,35414,30470],{"class":221},[106,35416,123],{"class":116},[106,35418,35419],{"class":108,"line":9781},[106,35420,35421],{"class":175},"    # 模型实例化，然后将实例化的模型放到设备中\n",[106,35423,35424,35426,35428],{"class":108,"line":9786},[106,35425,31283],{"class":116},[106,35427,162],{"class":112},[106,35429,35430],{"class":116},"AlexNet().to(device)\n",[106,35432,35433,35435,35437,35439,35441,35444,35446,35448],{"class":108,"line":9791},[106,35434,31293],{"class":165},[106,35436,31296],{"class":116},[106,35438,334],{"class":165},[106,35440,495],{"class":116},[106,35442,35443],{"class":165},"227",[106,35445,495],{"class":116},[106,35447,35443],{"class":165},[106,35449,31309],{"class":116},[60,35451,35452],{"start":28},[63,35453,31322],{},[97,35455,35457],{"className":30372,"code":35456,"language":30374,"meta":25,"style":25},"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",[103,35458,35459,35465,35471,35481,35487,35497,35507,35517,35527,35537,35541,35552,35562,35566,35570,35574,35582,35594,35604,35620,35630,35662,35676,35686,35696,35700,35710,35724,35734,35744,35754,35760,35764,35768,35772,35776,35780,35788,35808,35812,35816,35820,35824,35828,35844,35848,35852,35860,35864,35868,35876,35880,35884,35888,35896,35900,35904,35908,35912,35920,35924,35932,35936,35944,35948,35956,35960,35968,35972,35976,35984,35988,35992,35996,36008,36032,36046,36050,36054,36058,36066,36070,36078,36082,36090,36094,36102,36106,36114,36118,36126,36130,36142,36146,36154,36158,36166,36170,36174,36178,36182,36190,36194,36210,36214,36222,36226,36230,36234,36238,36242,36246,36250,36266,36270,36282,36286,36298,36302,36314,36318,36326,36330,36338,36342,36346,36351,36357,36361,36370,36374,36391,36395,36404,36408,36426,36439,36444,36457,36461,36465,36473,36477,36481,36489,36493,36501,36505,36513,36517,36521,36563,36605,36609,36613,36629,36633,36649,36653,36657,36665,36669,36673,36685,36723,36728,36733,36742,36746,36760,36770,36776,36782,36788,36794,36798,36802,36808,36812,36816,36824,36828,36846,36850,36854,36858,36874,36878,36882,36886,36890,36894,36914,36934,36938,36942,36946,36954,36962,36966,36982,37002,37022,37026,37030,37038,37046,37050,37054,37058,37070,37074,37084,37092,37109],{"__ignoreMap":25},[106,35460,35461,35463],{"class":108,"line":109},[106,35462,30386],{"class":112},[106,35464,31816],{"class":116},[106,35466,35467,35469],{"class":108,"line":28},[106,35468,30386],{"class":112},[106,35470,31823],{"class":116},[106,35472,35473,35475,35477,35479],{"class":108,"line":1172},[106,35474,30386],{"class":112},[106,35476,31834],{"class":116},[106,35478,31377],{"class":112},[106,35480,31839],{"class":116},[106,35482,35483,35485],{"class":108,"line":1187},[106,35484,30386],{"class":112},[106,35486,30389],{"class":116},[106,35488,35489,35491,35493,35495],{"class":108,"line":1193},[106,35490,30731],{"class":112},[106,35492,31409],{"class":116},[106,35494,30386],{"class":112},[106,35496,31856],{"class":116},[106,35498,35499,35501,35503,35505],{"class":108,"line":1207},[106,35500,30731],{"class":112},[106,35502,31362],{"class":116},[106,35504,30386],{"class":112},[106,35506,31367],{"class":116},[106,35508,35509,35511,35513,35515],{"class":108,"line":1213},[106,35510,30731],{"class":112},[106,35512,31392],{"class":116},[106,35514,30386],{"class":112},[106,35516,31397],{"class":116},[106,35518,35519,35521,35523,35525],{"class":108,"line":1304},[106,35520,30386],{"class":112},[106,35522,31409],{"class":116},[106,35524,31377],{"class":112},[106,35526,31414],{"class":116},[106,35528,35529,35531,35533,35535],{"class":108,"line":1310},[106,35530,30386],{"class":112},[106,35532,31426],{"class":116},[106,35534,31377],{"class":112},[106,35536,31431],{"class":116},[106,35538,35539],{"class":108,"line":1322},[106,35540,31901],{"class":175},[106,35542,35543,35545,35547,35549],{"class":108,"line":1604},[106,35544,30731],{"class":112},[106,35546,31908],{"class":116},[106,35548,30386],{"class":112},[106,35550,35551],{"class":116}," AlexNet\n",[106,35553,35554,35556,35558,35560],{"class":108,"line":1609},[106,35555,30731],{"class":112},[106,35557,30734],{"class":116},[106,35559,30386],{"class":112},[106,35561,30739],{"class":116},[106,35563,35564],{"class":108,"line":1615},[106,35565,2392],{"emptyLinePlaceholder":33},[106,35567,35568],{"class":108,"line":1620},[106,35569,2392],{"emptyLinePlaceholder":33},[106,35571,35572],{"class":108,"line":1634},[106,35573,31936],{"class":175},[106,35575,35576,35578,35580],{"class":108,"line":1639},[106,35577,31941],{"class":112},[106,35579,31944],{"class":1955},[106,35581,31947],{"class":116},[106,35583,35584,35586,35588,35590,35592],{"class":108,"line":1645},[106,35585,31952],{"class":116},[106,35587,162],{"class":112},[106,35589,31449],{"class":116},[106,35591,31457],{"class":221},[106,35593,31460],{"class":116},[106,35595,35596,35598,35600,35602],{"class":108,"line":1666},[106,35597,31965],{"class":5209},[106,35599,162],{"class":112},[106,35601,31470],{"class":165},[106,35603,31460],{"class":116},[106,35605,35606,35608,35610,35612,35614,35616,35618],{"class":108,"line":1671},[106,35607,31976],{"class":5209},[106,35609,162],{"class":112},[106,35611,31487],{"class":116},[106,35613,31490],{"class":5209},[106,35615,162],{"class":112},[106,35617,35443],{"class":165},[106,35619,31498],{"class":116},[106,35621,35622,35624,35626,35628],{"class":108,"line":1685},[106,35623,31993],{"class":5209},[106,35625,162],{"class":112},[106,35627,31470],{"class":165},[106,35629,123],{"class":116},[106,35631,35632,35634,35636,35638,35640,35642,35644,35646,35648,35650,35652,35654,35656,35658,35660],{"class":108,"line":1690},[106,35633,32004],{"class":116},[106,35635,162],{"class":112},[106,35637,32009],{"class":116},[106,35639,32012],{"class":165},[106,35641,117],{"class":116},[106,35643,32017],{"class":165},[106,35645,572],{"class":112},[106,35647,7351],{"class":165},[106,35649,32024],{"class":116},[106,35651,32012],{"class":165},[106,35653,117],{"class":116},[106,35655,32031],{"class":165},[106,35657,572],{"class":112},[106,35659,7351],{"class":165},[106,35661,32038],{"class":116},[106,35663,35664,35666,35668,35670,35672,35674],{"class":108,"line":1719},[106,35665,32043],{"class":116},[106,35667,162],{"class":112},[106,35669,32048],{"class":116},[106,35671,31531],{"class":5209},[106,35673,162],{"class":112},[106,35675,31536],{"class":116},[106,35677,35678,35680,35682,35684],{"class":108,"line":1724},[106,35679,32059],{"class":5209},[106,35681,162],{"class":112},[106,35683,32064],{"class":165},[106,35685,31460],{"class":116},[106,35687,35688,35690,35692,35694],{"class":108,"line":1741},[106,35689,32071],{"class":5209},[106,35691,162],{"class":112},[106,35693,31470],{"class":165},[106,35695,31460],{"class":116},[106,35697,35698],{"class":108,"line":1746},[106,35699,32082],{"class":175},[106,35701,35702,35704,35706,35708],{"class":108,"line":1751},[106,35703,32087],{"class":5209},[106,35705,162],{"class":112},[106,35707,512],{"class":165},[106,35709,123],{"class":116},[106,35711,35712,35714,35716,35718,35720,35722],{"class":108,"line":1756},[106,35713,32098],{"class":116},[106,35715,162],{"class":112},[106,35717,31528],{"class":116},[106,35719,31531],{"class":5209},[106,35721,162],{"class":112},[106,35723,32109],{"class":116},[106,35725,35726,35728,35730,35732],{"class":108,"line":1770},[106,35727,32114],{"class":5209},[106,35729,162],{"class":112},[106,35731,32064],{"class":165},[106,35733,31460],{"class":116},[106,35735,35736,35738,35740,35742],{"class":108,"line":1775},[106,35737,32125],{"class":5209},[106,35739,162],{"class":112},[106,35741,31470],{"class":165},[106,35743,31460],{"class":116},[106,35745,35746,35748,35750,35752],{"class":108,"line":2569},[106,35747,32136],{"class":5209},[106,35749,162],{"class":112},[106,35751,512],{"class":165},[106,35753,123],{"class":116},[106,35755,35756,35758],{"class":108,"line":2583},[106,35757,4082],{"class":112},[106,35759,32149],{"class":116},[106,35761,35762],{"class":108,"line":2591},[106,35763,2392],{"emptyLinePlaceholder":33},[106,35765,35766],{"class":108,"line":2596},[106,35767,32158],{"class":175},[106,35769,35770],{"class":108,"line":2602},[106,35771,32163],{"class":175},[106,35773,35774],{"class":108,"line":2608},[106,35775,2392],{"emptyLinePlaceholder":33},[106,35777,35778],{"class":108,"line":2613},[106,35779,32172],{"class":175},[106,35781,35782,35784,35786],{"class":108,"line":7941},[106,35783,31941],{"class":112},[106,35785,32179],{"class":1955},[106,35787,32182],{"class":116},[106,35789,35790,35792,35794,35796,35798,35800,35802,35804,35806],{"class":108,"line":7965},[106,35791,31231],{"class":116},[106,35793,162],{"class":112},[106,35795,30445],{"class":116},[106,35797,31238],{"class":221},[106,35799,1696],{"class":112},[106,35801,31243],{"class":116},[106,35803,1693],{"class":112},[106,35805,32201],{"class":221},[106,35807,123],{"class":116},[106,35809,35810],{"class":108,"line":7970},[106,35811,2392],{"emptyLinePlaceholder":33},[106,35813,35814],{"class":108,"line":7976},[106,35815,2392],{"emptyLinePlaceholder":33},[106,35817,35818],{"class":108,"line":8003},[106,35819,32216],{"class":175},[106,35821,35822],{"class":108,"line":8008},[106,35823,32221],{"class":175},[106,35825,35826],{"class":108,"line":8014},[106,35827,32226],{"class":175},[106,35829,35830,35832,35834,35836,35838,35840,35842],{"class":108,"line":8026},[106,35831,32231],{"class":116},[106,35833,162],{"class":112},[106,35835,32236],{"class":116},[106,35837,32239],{"class":5209},[106,35839,162],{"class":112},[106,35841,32244],{"class":165},[106,35843,123],{"class":116},[106,35845,35846],{"class":108,"line":8038},[106,35847,2392],{"emptyLinePlaceholder":33},[106,35849,35850],{"class":108,"line":8050},[106,35851,32255],{"class":175},[106,35853,35854,35856,35858],{"class":108,"line":9709},[106,35855,32260],{"class":116},[106,35857,162],{"class":112},[106,35859,32265],{"class":116},[106,35861,35862],{"class":108,"line":9734},[106,35863,2392],{"emptyLinePlaceholder":33},[106,35865,35866],{"class":108,"line":9757},[106,35867,32274],{"class":175},[106,35869,35870,35872,35874],{"class":108,"line":9781},[106,35871,31283],{"class":116},[106,35873,162],{"class":112},[106,35875,32283],{"class":116},[106,35877,35878],{"class":108,"line":9786},[106,35879,32288],{"class":175},[106,35881,35882],{"class":108,"line":9791},[106,35883,32293],{"class":175},[106,35885,35886],{"class":108,"line":9796},[106,35887,32298],{"class":175},[106,35889,35890,35892,35894],{"class":108,"line":9805},[106,35891,32303],{"class":116},[106,35893,162],{"class":112},[106,35895,32308],{"class":116},[106,35897,35898],{"class":108,"line":9810},[106,35899,2392],{"emptyLinePlaceholder":33},[106,35901,35902],{"class":108,"line":9816},[106,35903,2392],{"emptyLinePlaceholder":33},[106,35905,35906],{"class":108,"line":9837},[106,35907,32321],{"class":175},[106,35909,35910],{"class":108,"line":9843},[106,35911,32326],{"class":175},[106,35913,35914,35916,35918],{"class":108,"line":9857},[106,35915,32331],{"class":116},[106,35917,162],{"class":112},[106,35919,32336],{"class":165},[106,35921,35922],{"class":108,"line":9863},[106,35923,32341],{"class":175},[106,35925,35926,35928,35930],{"class":108,"line":9890},[106,35927,32346],{"class":116},[106,35929,162],{"class":112},[106,35931,32351],{"class":116},[106,35933,35934],{"class":108,"line":9899},[106,35935,32356],{"class":175},[106,35937,35938,35940,35942],{"class":108,"line":9905},[106,35939,32361],{"class":116},[106,35941,162],{"class":112},[106,35943,32351],{"class":116},[106,35945,35946],{"class":108,"line":9913},[106,35947,32370],{"class":175},[106,35949,35950,35952,35954],{"class":108,"line":9918},[106,35951,32375],{"class":116},[106,35953,162],{"class":112},[106,35955,32351],{"class":116},[106,35957,35958],{"class":108,"line":16597},[106,35959,32384],{"class":175},[106,35961,35962,35964,35966],{"class":108,"line":16603},[106,35963,32389],{"class":116},[106,35965,162],{"class":112},[106,35967,32351],{"class":116},[106,35969,35970],{"class":108,"line":16626},[106,35971,2392],{"emptyLinePlaceholder":33},[106,35973,35974],{"class":108,"line":16632},[106,35975,32402],{"class":175},[106,35977,35978,35980,35982],{"class":108,"line":16655},[106,35979,32407],{"class":116},[106,35981,162],{"class":112},[106,35983,32412],{"class":116},[106,35985,35986],{"class":108,"line":16669},[106,35987,2392],{"emptyLinePlaceholder":33},[106,35989,35990],{"class":108,"line":16689},[106,35991,2392],{"emptyLinePlaceholder":33},[106,35993,35994],{"class":108,"line":16695},[106,35995,32425],{"class":175},[106,35997,35998,36000,36002,36004,36006],{"class":108,"line":16706},[106,35999,3193],{"class":112},[106,36001,32432],{"class":116},[106,36003,26037],{"class":112},[106,36005,32437],{"class":165},[106,36007,32440],{"class":116},[106,36009,36010,36012,36014,36016,36018,36020,36022,36024,36026,36028,36030],{"class":108,"line":16729},[106,36011,32445],{"class":165},[106,36013,117],{"class":116},[106,36015,32450],{"class":221},[106,36017,32453],{"class":165},[106,36019,701],{"class":221},[106,36021,32453],{"class":165},[106,36023,368],{"class":221},[106,36025,32462],{"class":116},[106,36027,649],{"class":112},[106,36029,334],{"class":165},[106,36031,30491],{"class":116},[106,36033,36034,36036,36038,36040,36042,36044],{"class":108,"line":16751},[106,36035,32445],{"class":165},[106,36037,117],{"class":116},[106,36039,32477],{"class":221},[106,36041,572],{"class":112},[106,36043,563],{"class":165},[106,36045,123],{"class":116},[106,36047,36048],{"class":108,"line":16756},[106,36049,2392],{"emptyLinePlaceholder":33},[106,36051,36052],{"class":108,"line":16762},[106,36053,32492],{"class":175},[106,36055,36056],{"class":108,"line":16776},[106,36057,32497],{"class":175},[106,36059,36060,36062,36064],{"class":108,"line":16789},[106,36061,32502],{"class":116},[106,36063,162],{"class":112},[106,36065,32336],{"class":165},[106,36067,36068],{"class":108,"line":16794},[106,36069,32511],{"class":175},[106,36071,36072,36074,36076],{"class":108,"line":16808},[106,36073,32516],{"class":116},[106,36075,162],{"class":112},[106,36077,3077],{"class":165},[106,36079,36080],{"class":108,"line":16813},[106,36081,32525],{"class":175},[106,36083,36084,36086,36088],{"class":108,"line":16819},[106,36085,32530],{"class":116},[106,36087,162],{"class":112},[106,36089,32336],{"class":165},[106,36091,36092],{"class":108,"line":16824},[106,36093,32539],{"class":175},[106,36095,36096,36098,36100],{"class":108,"line":16838},[106,36097,32544],{"class":116},[106,36099,162],{"class":112},[106,36101,3077],{"class":165},[106,36103,36104],{"class":108,"line":16843},[106,36105,32553],{"class":175},[106,36107,36108,36110,36112],{"class":108,"line":16848},[106,36109,32558],{"class":116},[106,36111,162],{"class":112},[106,36113,3077],{"class":165},[106,36115,36116],{"class":108,"line":16862},[106,36117,32567],{"class":175},[106,36119,36120,36122,36124],{"class":108,"line":16874},[106,36121,32572],{"class":116},[106,36123,162],{"class":112},[106,36125,3077],{"class":165},[106,36127,36128],{"class":108,"line":16879},[106,36129,32581],{"class":175},[106,36131,36132,36134,36136,36138,36140],{"class":108,"line":16892},[106,36133,3395],{"class":112},[106,36135,31595],{"class":116},[106,36137,26037],{"class":112},[106,36139,31600],{"class":165},[106,36141,32594],{"class":116},[106,36143,36144],{"class":108,"line":16897},[106,36145,32599],{"class":175},[106,36147,36148,36150,36152],{"class":108,"line":16902},[106,36149,32604],{"class":116},[106,36151,162],{"class":112},[106,36153,32609],{"class":116},[106,36155,36156],{"class":108,"line":16907},[106,36157,32614],{"class":175},[106,36159,36160,36162,36164],{"class":108,"line":16920},[106,36161,32619],{"class":116},[106,36163,162],{"class":112},[106,36165,32624],{"class":116},[106,36167,36168],{"class":108,"line":16925},[106,36169,32630],{"class":175},[106,36171,36172],{"class":108,"line":32627},[106,36173,32636],{"class":116},[106,36175,36176],{"class":108,"line":32633},[106,36177,32642],{"class":175},[106,36179,36180],{"class":108,"line":32639},[106,36181,32648],{"class":175},[106,36183,36184,36186,36188],{"class":108,"line":32645},[106,36185,32654],{"class":116},[106,36187,162],{"class":112},[106,36189,32659],{"class":116},[106,36191,36192],{"class":108,"line":32651},[106,36193,32665],{"class":175},[106,36195,36196,36198,36200,36202,36204,36206,36208],{"class":108,"line":32662},[106,36197,32671],{"class":116},[106,36199,162],{"class":112},[106,36201,32676],{"class":116},[106,36203,32679],{"class":5209},[106,36205,162],{"class":112},[106,36207,334],{"class":165},[106,36209,123],{"class":116},[106,36211,36212],{"class":108,"line":32668},[106,36213,32691],{"class":175},[106,36215,36216,36218,36220],{"class":108,"line":32688},[106,36217,32697],{"class":116},[106,36219,162],{"class":112},[106,36221,32702],{"class":116},[106,36223,36224],{"class":108,"line":32694},[106,36225,32708],{"class":175},[106,36227,36228],{"class":108,"line":32705},[106,36229,32714],{"class":116},[106,36231,36232],{"class":108,"line":32711},[106,36233,32720],{"class":175},[106,36235,36236],{"class":108,"line":32717},[106,36237,32726],{"class":116},[106,36239,36240],{"class":108,"line":32723},[106,36241,32732],{"class":175},[106,36243,36244],{"class":108,"line":32729},[106,36245,32738],{"class":116},[106,36247,36248],{"class":108,"line":32735},[106,36249,32744],{"class":175},[106,36251,36252,36254,36256,36258,36260,36262,36264],{"class":108,"line":32741},[106,36253,32750],{"class":116},[106,36255,9470],{"class":112},[106,36257,32755],{"class":116},[106,36259,572],{"class":112},[106,36261,32760],{"class":116},[106,36263,308],{"class":165},[106,36265,123],{"class":116},[106,36267,36268],{"class":108,"line":32747},[106,36269,32770],{"class":175},[106,36271,36272,36274,36276,36278,36280],{"class":108,"line":32767},[106,36273,32776],{"class":116},[106,36275,9470],{"class":112},[106,36277,32781],{"class":116},[106,36279,2941],{"class":112},[106,36281,32786],{"class":116},[106,36283,36284],{"class":108,"line":32773},[106,36285,32792],{"class":175},[106,36287,36288,36290,36292,36294,36296],{"class":108,"line":32789},[106,36289,32798],{"class":116},[106,36291,9470],{"class":112},[106,36293,32760],{"class":116},[106,36295,308],{"class":165},[106,36297,123],{"class":116},[106,36299,36300],{"class":108,"line":32795},[106,36301,32812],{"class":175},[106,36303,36304,36306,36308,36310,36312],{"class":108,"line":32809},[106,36305,3395],{"class":112},[106,36307,32820],{"class":116},[106,36309,26037],{"class":112},[106,36311,31600],{"class":165},[106,36313,32827],{"class":116},[106,36315,36316],{"class":108,"line":32815},[106,36317,32833],{"class":175},[106,36319,36320,36322,36324],{"class":108,"line":32830},[106,36321,32604],{"class":116},[106,36323,162],{"class":112},[106,36325,32609],{"class":116},[106,36327,36328],{"class":108,"line":32836},[106,36329,32848],{"class":175},[106,36331,36332,36334,36336],{"class":108,"line":32845},[106,36333,32619],{"class":116},[106,36335,162],{"class":112},[106,36337,32624],{"class":116},[106,36339,36340],{"class":108,"line":32851},[106,36341,32863],{"class":175},[106,36343,36344],{"class":108,"line":32860},[106,36345,32869],{"class":116},[106,36347,36348],{"class":108,"line":32866},[106,36349,36350],{"class":175},"            # 验证时不计算梯度以节省内存\u002F计算\n",[106,36352,36353,36355],{"class":108,"line":32872},[106,36354,32875],{"class":112},[106,36356,32878],{"class":116},[106,36358,36359],{"class":108,"line":32881},[106,36360,32884],{"class":175},[106,36362,36363,36366,36368],{"class":108,"line":32887},[106,36364,36365],{"class":116},"                output",[106,36367,162],{"class":112},[106,36369,32659],{"class":116},[106,36371,36372],{"class":108,"line":32898},[106,36373,32901],{"class":175},[106,36375,36376,36379,36381,36383,36385,36387,36389],{"class":108,"line":32904},[106,36377,36378],{"class":116},"                pre_lab",[106,36380,162],{"class":112},[106,36382,32676],{"class":116},[106,36384,32679],{"class":5209},[106,36386,162],{"class":112},[106,36388,334],{"class":165},[106,36390,123],{"class":116},[106,36392,36393],{"class":108,"line":32923},[106,36394,32926],{"class":175},[106,36396,36397,36400,36402],{"class":108,"line":32929},[106,36398,36399],{"class":116},"                val_batch_loss",[106,36401,162],{"class":112},[106,36403,32702],{"class":116},[106,36405,36406],{"class":108,"line":32940},[106,36407,32943],{"class":175},[106,36409,36410,36413,36415,36418,36420,36422,36424],{"class":108,"line":32946},[106,36411,36412],{"class":116},"                val_loss",[106,36414,9470],{"class":112},[106,36416,36417],{"class":116},"val_batch_loss.item()",[106,36419,572],{"class":112},[106,36421,32760],{"class":116},[106,36423,308],{"class":165},[106,36425,123],{"class":116},[106,36427,36428,36431,36433,36435,36437],{"class":108,"line":32966},[106,36429,36430],{"class":116},"                val_corrects",[106,36432,9470],{"class":112},[106,36434,32781],{"class":116},[106,36436,2941],{"class":112},[106,36438,32786],{"class":116},[106,36440,36441],{"class":108,"line":32982},[106,36442,36443],{"class":175},"            # 当前用于验证的样本数量\n",[106,36445,36446,36449,36451,36453,36455],{"class":108,"line":32988},[106,36447,36448],{"class":116},"            val_num",[106,36450,9470],{"class":112},[106,36452,32760],{"class":116},[106,36454,308],{"class":165},[106,36456,123],{"class":116},[106,36458,36459],{"class":108,"line":33002},[106,36460,33005],{"class":175},[106,36462,36463],{"class":108,"line":33008},[106,36464,33011],{"class":175},[106,36466,36467,36469,36471],{"class":108,"line":33014},[106,36468,33017],{"class":116},[106,36470,701],{"class":112},[106,36472,33022],{"class":116},[106,36474,36475],{"class":108,"line":33025},[106,36476,33028],{"class":175},[106,36478,36479],{"class":108,"line":33031},[106,36480,33034],{"class":175},[106,36482,36483,36485,36487],{"class":108,"line":33037},[106,36484,33040],{"class":116},[106,36486,701],{"class":112},[106,36488,33022],{"class":116},[106,36490,36491],{"class":108,"line":33047},[106,36492,33050],{"class":175},[106,36494,36495,36497,36499],{"class":108,"line":33053},[106,36496,33056],{"class":116},[106,36498,701],{"class":112},[106,36500,33061],{"class":116},[106,36502,36503],{"class":108,"line":33064},[106,36504,33067],{"class":175},[106,36506,36507,36509,36511],{"class":108,"line":33070},[106,36508,33073],{"class":116},[106,36510,701],{"class":112},[106,36512,33061],{"class":116},[106,36514,36515],{"class":108,"line":33080},[106,36516,2392],{"emptyLinePlaceholder":33},[106,36518,36519],{"class":108,"line":33085},[106,36520,33088],{"class":175},[106,36522,36523,36525,36527,36529,36531,36533,36535,36537,36539,36541,36543,36545,36547,36549,36551,36553,36555,36557,36559,36561],{"class":108,"line":33091},[106,36524,32445],{"class":165},[106,36526,117],{"class":116},[106,36528,3584],{"class":221},[106,36530,32453],{"class":165},[106,36532,33102],{"class":221},[106,36534,1013],{"class":165},[106,36536,33107],{"class":112},[106,36538,1063],{"class":165},[106,36540,33112],{"class":221},[106,36542,1013],{"class":165},[106,36544,33107],{"class":112},[106,36546,1063],{"class":165},[106,36548,3584],{"class":221},[106,36550,33123],{"class":116},[106,36552,649],{"class":112},[106,36554,334],{"class":165},[106,36556,33130],{"class":116},[106,36558,649],{"class":112},[106,36560,334],{"class":165},[106,36562,33137],{"class":116},[106,36564,36565,36567,36569,36571,36573,36575,36577,36579,36581,36583,36585,36587,36589,36591,36593,36595,36597,36599,36601,36603],{"class":108,"line":33140},[106,36566,32445],{"class":165},[106,36568,117],{"class":116},[106,36570,3584],{"class":221},[106,36572,32453],{"class":165},[106,36574,33151],{"class":221},[106,36576,1013],{"class":165},[106,36578,33107],{"class":112},[106,36580,1063],{"class":165},[106,36582,33160],{"class":221},[106,36584,1013],{"class":165},[106,36586,33107],{"class":112},[106,36588,1063],{"class":165},[106,36590,3584],{"class":221},[106,36592,33171],{"class":116},[106,36594,649],{"class":112},[106,36596,334],{"class":165},[106,36598,33178],{"class":116},[106,36600,649],{"class":112},[106,36602,334],{"class":165},[106,36604,33137],{"class":116},[106,36606,36607],{"class":108,"line":33187},[106,36608,2392],{"emptyLinePlaceholder":33},[106,36610,36611],{"class":108,"line":33192},[106,36612,33195],{"class":175},[106,36614,36615,36617,36619,36621,36623,36625,36627],{"class":108,"line":33198},[106,36616,2489],{"class":112},[106,36618,33203],{"class":116},[106,36620,649],{"class":112},[106,36622,334],{"class":165},[106,36624,1057],{"class":116},[106,36626,1077],{"class":112},[106,36628,33214],{"class":116},[106,36630,36631],{"class":108,"line":33217},[106,36632,33220],{"class":175},[106,36634,36635,36637,36639,36641,36643,36645,36647],{"class":108,"line":33223},[106,36636,33226],{"class":116},[106,36638,156],{"class":165},[106,36640,162],{"class":112},[106,36642,33233],{"class":116},[106,36644,649],{"class":112},[106,36646,334],{"class":165},[106,36648,33240],{"class":116},[106,36650,36651],{"class":108,"line":33243},[106,36652,33246],{"class":175},[106,36654,36655],{"class":108,"line":33249},[106,36656,33252],{"class":175},[106,36658,36659,36661,36663],{"class":108,"line":33255},[106,36660,33258],{"class":116},[106,36662,162],{"class":112},[106,36664,32308],{"class":116},[106,36666,36667],{"class":108,"line":33265},[106,36668,2392],{"emptyLinePlaceholder":33},[106,36670,36671],{"class":108,"line":33270},[106,36672,33273],{"class":175},[106,36674,36675,36677,36679,36681,36683],{"class":108,"line":33276},[106,36676,33279],{"class":116},[106,36678,162],{"class":112},[106,36680,33284],{"class":116},[106,36682,649],{"class":112},[106,36684,33289],{"class":116},[106,36686,36687,36689,36691,36693,36695,36697,36699,36701,36703,36705,36707,36709,36711,36713,36715,36717,36719,36721],{"class":108,"line":33292},[106,36688,32445],{"class":165},[106,36690,117],{"class":116},[106,36692,33299],{"class":221},[106,36694,1013],{"class":165},[106,36696,33304],{"class":112},[106,36698,1063],{"class":165},[106,36700,661],{"class":221},[106,36702,1013],{"class":165},[106,36704,33304],{"class":112},[106,36706,1063],{"class":165},[106,36708,33317],{"class":221},[106,36710,33320],{"class":116},[106,36712,33323],{"class":112},[106,36714,1024],{"class":165},[106,36716,33328],{"class":116},[106,36718,445],{"class":112},[106,36720,1024],{"class":165},[106,36722,30491],{"class":116},[106,36724,36725],{"class":108,"line":33337},[106,36726,36727],{"class":175},"    # 选择最优参数并保存\n",[106,36729,36730],{"class":108,"line":33343},[106,36731,36732],{"class":175},"    # 保存最佳模型权重字典\n",[106,36734,36735,36738,36740],{"class":108,"line":33349},[106,36736,36737],{"class":116},"    torch.save(best_model_wts,",[106,36739,33361],{"class":221},[106,36741,123],{"class":116},[106,36743,36744],{"class":108,"line":33355},[106,36745,33381],{"class":175},[106,36747,36748,36750,36752,36754,36756,36758],{"class":108,"line":33366},[106,36749,33387],{"class":116},[106,36751,162],{"class":112},[106,36753,33392],{"class":116},[106,36755,33395],{"class":5209},[106,36757,162],{"class":112},[106,36759,1538],{"class":116},[106,36761,36762,36764,36766,36768],{"class":108,"line":33372},[106,36763,33405],{"class":221},[106,36765,976],{"class":116},[106,36767,33410],{"class":165},[106,36769,33413],{"class":116},[106,36771,36772,36774],{"class":108,"line":33378},[106,36773,33419],{"class":221},[106,36775,33422],{"class":116},[106,36777,36778,36780],{"class":108,"line":33384},[106,36779,33428],{"class":221},[106,36781,33431],{"class":116},[106,36783,36784,36786],{"class":108,"line":33402},[106,36785,33437],{"class":221},[106,36787,33440],{"class":116},[106,36789,36790,36792],{"class":108,"line":33416},[106,36791,33446],{"class":221},[106,36793,33449],{"class":116},[106,36795,36796],{"class":108,"line":33425},[106,36797,33455],{"class":116},[106,36799,36800],{"class":108,"line":33434},[106,36801,33461],{"class":175},[106,36803,36804,36806],{"class":108,"line":33443},[106,36805,4082],{"class":112},[106,36807,33469],{"class":116},[106,36809,36810],{"class":108,"line":33452},[106,36811,2392],{"emptyLinePlaceholder":33},[106,36813,36814],{"class":108,"line":33458},[106,36815,33480],{"class":175},[106,36817,36818,36820,36822],{"class":108,"line":33464},[106,36819,31941],{"class":112},[106,36821,33488],{"class":1955},[106,36823,33491],{"class":116},[106,36825,36826],{"class":108,"line":33472},[106,36827,33497],{"class":175},[106,36829,36830,36832,36834,36836,36838,36840,36842,36844],{"class":108,"line":33477},[106,36831,33503],{"class":116},[106,36833,31687],{"class":5209},[106,36835,162],{"class":112},[106,36837,117],{"class":116},[106,36839,615],{"class":165},[106,36841,495],{"class":116},[106,36843,410],{"class":165},[106,36845,30491],{"class":116},[106,36847,36848],{"class":108,"line":33483},[106,36849,33523],{"class":175},[106,36851,36852],{"class":108,"line":33494},[106,36853,33529],{"class":175},[106,36855,36856],{"class":108,"line":33500},[106,36857,33535],{"class":175},[106,36859,36860,36862,36864,36866,36868,36870,36872],{"class":108,"line":33520},[106,36861,31721],{"class":116},[106,36863,334],{"class":165},[106,36865,495],{"class":116},[106,36867,194],{"class":165},[106,36869,495],{"class":116},[106,36871,334],{"class":165},[106,36873,123],{"class":116},[106,36875,36876],{"class":108,"line":33526},[106,36877,33558],{"class":175},[106,36879,36880],{"class":108,"line":33532},[106,36881,33564],{"class":175},[106,36883,36884],{"class":108,"line":33538},[106,36885,33570],{"class":175},[106,36887,36888],{"class":108,"line":33555},[106,36889,33576],{"class":175},[106,36891,36892],{"class":108,"line":33561},[106,36893,33582],{"class":175},[106,36895,36896,36898,36900,36902,36904,36906,36908,36910,36912],{"class":108,"line":33567},[106,36897,33588],{"class":116},[106,36899,33591],{"class":221},[106,36901,33594],{"class":116},[106,36903,33597],{"class":221},[106,36905,495],{"class":116},[106,36907,33602],{"class":5209},[106,36909,162],{"class":112},[106,36911,33607],{"class":221},[106,36913,123],{"class":116},[106,36915,36916,36918,36920,36922,36924,36926,36928,36930,36932],{"class":108,"line":33573},[106,36917,33588],{"class":116},[106,36919,33591],{"class":221},[106,36921,33619],{"class":116},[106,36923,33622],{"class":221},[106,36925,495],{"class":116},[106,36927,33602],{"class":5209},[106,36929,162],{"class":112},[106,36931,33631],{"class":221},[106,36933,123],{"class":116},[106,36935,36936],{"class":108,"line":33579},[106,36937,33639],{"class":175},[106,36939,36940],{"class":108,"line":33585},[106,36941,33645],{"class":116},[106,36943,36944],{"class":108,"line":33612},[106,36945,33651],{"class":175},[106,36947,36948,36950,36952],{"class":108,"line":33636},[106,36949,33657],{"class":116},[106,36951,33660],{"class":221},[106,36953,123],{"class":116},[106,36955,36956,36958,36960],{"class":108,"line":33642},[106,36957,33668],{"class":116},[106,36959,33671],{"class":221},[106,36961,123],{"class":116},[106,36963,36964],{"class":108,"line":33648},[106,36965,33679],{"class":175},[106,36967,36968,36970,36972,36974,36976,36978,36980],{"class":108,"line":33654},[106,36969,31721],{"class":116},[106,36971,334],{"class":165},[106,36973,495],{"class":116},[106,36975,194],{"class":165},[106,36977,495],{"class":116},[106,36979,194],{"class":165},[106,36981,123],{"class":116},[106,36983,36984,36986,36988,36990,36992,36994,36996,36998,37000],{"class":108,"line":33665},[106,36985,33588],{"class":116},[106,36987,33591],{"class":221},[106,36989,33706],{"class":116},[106,36991,33597],{"class":221},[106,36993,495],{"class":116},[106,36995,33602],{"class":5209},[106,36997,162],{"class":112},[106,36999,33717],{"class":221},[106,37001,123],{"class":116},[106,37003,37004,37006,37008,37010,37012,37014,37016,37018,37020],{"class":108,"line":33676},[106,37005,33588],{"class":116},[106,37007,33591],{"class":221},[106,37009,33729],{"class":116},[106,37011,33622],{"class":221},[106,37013,495],{"class":116},[106,37015,33602],{"class":5209},[106,37017,162],{"class":112},[106,37019,33740],{"class":221},[106,37021,123],{"class":116},[106,37023,37024],{"class":108,"line":33682},[106,37025,33748],{"class":175},[106,37027,37028],{"class":108,"line":33699},[106,37029,33645],{"class":116},[106,37031,37032,37034,37036],{"class":108,"line":33722},[106,37033,33657],{"class":116},[106,37035,33591],{"class":221},[106,37037,123],{"class":116},[106,37039,37040,37042,37044],{"class":108,"line":33745},[106,37041,33668],{"class":116},[106,37043,33770],{"class":221},[106,37045,123],{"class":116},[106,37047,37048],{"class":108,"line":33751},[106,37049,33778],{"class":116},[106,37051,37052],{"class":108,"line":33756},[106,37053,2392],{"emptyLinePlaceholder":33},[106,37055,37056],{"class":108,"line":33765},[106,37057,33789],{"class":175},[106,37059,37060,37062,37064,37066,37068],{"class":108,"line":33775},[106,37061,1523],{"class":112},[106,37063,31214],{"class":165},[106,37065,2941],{"class":112},[106,37067,31219],{"class":221},[106,37069,3731],{"class":116},[106,37071,37072],{"class":108,"line":33781},[106,37073,33808],{"class":175},[106,37075,37076,37079,37081],{"class":108,"line":33786},[106,37077,37078],{"class":116},"    AlexNet",[106,37080,162],{"class":112},[106,37082,37083],{"class":116},"AlexNet()\n",[106,37085,37086,37088,37090],{"class":108,"line":33792},[106,37087,33825],{"class":116},[106,37089,162],{"class":112},[106,37091,33830],{"class":116},[106,37093,37094,37096,37098,37101,37103,37105,37107],{"class":108,"line":33805},[106,37095,33387],{"class":116},[106,37097,162],{"class":112},[106,37099,37100],{"class":116},"train_model_process(AlexNet,train_dataloader,val_dataloader,",[106,37102,33843],{"class":5209},[106,37104,162],{"class":112},[106,37106,817],{"class":165},[106,37108,123],{"class":116},[106,37110,37111],{"class":108,"line":33811},[106,37112,33855],{"class":116},[60,37114,37115],{"start":1172},[63,37116,33868],{},[97,37118,37120],{"className":30372,"code":37119,"language":30374,"meta":25,"style":25},"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",[103,37121,37122,37128,37138,37148,37158,37162,37172,37182,37193,37197,37201,37205,37213,37229,37239,37255,37265,37279,37283,37293,37303,37313,37319,37323,37327,37335,37339,37355,37363,37367,37371,37379,37387,37391,37395,37399,37403,37409,37413,37423,37431,37439,37443,37447,37451,37459,37463,37479,37483,37487,37491,37503,37507,37519,37523,37527,37539,37543,37553,37557,37561,37573,37577,37585,37589,37593,37601,37605,37613,37617,37621,37625,37629,37633,37649,37657,37661,37665,37713,37719,37723,37733,37741,37749,37753,37757,37761,37765,37773,37777,37793,37797,37805,37813],{"__ignoreMap":25},[106,37123,37124,37126],{"class":108,"line":109},[106,37125,30386],{"class":112},[106,37127,30389],{"class":116},[106,37129,37130,37132,37134,37136],{"class":108,"line":28},[106,37131,30386],{"class":112},[106,37133,31409],{"class":116},[106,37135,31377],{"class":112},[106,37137,31414],{"class":116},[106,37139,37140,37142,37144,37146],{"class":108,"line":1172},[106,37141,30731],{"class":112},[106,37143,33896],{"class":116},[106,37145,30386],{"class":112},[106,37147,33901],{"class":116},[106,37149,37150,37152,37154,37156],{"class":108,"line":1187},[106,37151,30731],{"class":112},[106,37153,31392],{"class":116},[106,37155,30386],{"class":112},[106,37157,31397],{"class":116},[106,37159,37160],{"class":108,"line":1193},[106,37161,33916],{"class":175},[106,37163,37164,37166,37168,37170],{"class":108,"line":1207},[106,37165,30731],{"class":112},[106,37167,31362],{"class":116},[106,37169,30386],{"class":112},[106,37171,31367],{"class":116},[106,37173,37174,37176,37178,37180],{"class":108,"line":1213},[106,37175,30731],{"class":112},[106,37177,31908],{"class":116},[106,37179,30386],{"class":112},[106,37181,35551],{"class":116},[106,37183,37184,37186,37189,37191],{"class":108,"line":1304},[106,37185,30731],{"class":112},[106,37187,37188],{"class":116}," 练习.AlexNet.model ",[106,37190,30386],{"class":112},[106,37192,35551],{"class":116},[106,37194,37195],{"class":108,"line":1310},[106,37196,2392],{"emptyLinePlaceholder":33},[106,37198,37199],{"class":108,"line":1322},[106,37200,2392],{"emptyLinePlaceholder":33},[106,37202,37203],{"class":108,"line":1604},[106,37204,33945],{"class":175},[106,37206,37207,37209,37211],{"class":108,"line":1609},[106,37208,31941],{"class":112},[106,37210,33952],{"class":1955},[106,37212,31947],{"class":116},[106,37214,37215,37217,37219,37221,37223,37225,37227],{"class":108,"line":1615},[106,37216,33959],{"class":116},[106,37218,162],{"class":112},[106,37220,31449],{"class":116},[106,37222,31452],{"class":5209},[106,37224,162],{"class":112},[106,37226,31457],{"class":221},[106,37228,31460],{"class":116},[106,37230,37231,37233,37235,37237],{"class":108,"line":1620},[106,37232,33976],{"class":5209},[106,37234,162],{"class":112},[106,37236,33981],{"class":165},[106,37238,31460],{"class":116},[106,37240,37241,37243,37245,37247,37249,37251,37253],{"class":108,"line":1634},[106,37242,33988],{"class":5209},[106,37244,162],{"class":112},[106,37246,31487],{"class":116},[106,37248,31490],{"class":5209},[106,37250,162],{"class":112},[106,37252,35443],{"class":165},[106,37254,31498],{"class":116},[106,37256,37257,37259,37261,37263],{"class":108,"line":1639},[106,37258,34005],{"class":5209},[106,37260,162],{"class":112},[106,37262,31470],{"class":165},[106,37264,123],{"class":116},[106,37266,37267,37269,37271,37273,37275,37277],{"class":108,"line":1645},[106,37268,34016],{"class":116},[106,37270,162],{"class":112},[106,37272,31528],{"class":116},[106,37274,31531],{"class":5209},[106,37276,162],{"class":112},[106,37278,34027],{"class":116},[106,37280,37281],{"class":108,"line":1666},[106,37282,34032],{"class":175},[106,37284,37285,37287,37289,37291],{"class":108,"line":1671},[106,37286,34037],{"class":5209},[106,37288,162],{"class":112},[106,37290,334],{"class":165},[106,37292,31460],{"class":116},[106,37294,37295,37297,37299,37301],{"class":108,"line":1685},[106,37296,34048],{"class":5209},[106,37298,162],{"class":112},[106,37300,31470],{"class":165},[106,37302,31460],{"class":116},[106,37304,37305,37307,37309,37311],{"class":108,"line":1690},[106,37306,34059],{"class":5209},[106,37308,162],{"class":112},[106,37310,308],{"class":165},[106,37312,123],{"class":116},[106,37314,37315,37317],{"class":108,"line":1719},[106,37316,4082],{"class":112},[106,37318,34072],{"class":116},[106,37320,37321],{"class":108,"line":1724},[106,37322,2392],{"emptyLinePlaceholder":33},[106,37324,37325],{"class":108,"line":1741},[106,37326,34081],{"class":175},[106,37328,37329,37331,37333],{"class":108,"line":1746},[106,37330,31941],{"class":112},[106,37332,34088],{"class":1955},[106,37334,34091],{"class":116},[106,37336,37337],{"class":108,"line":1751},[106,37338,34096],{"class":175},[106,37340,37341,37343,37345,37347,37349,37351,37353],{"class":108,"line":1756},[106,37342,31231],{"class":116},[106,37344,162],{"class":112},[106,37346,31238],{"class":221},[106,37348,1696],{"class":112},[106,37350,31243],{"class":116},[106,37352,1693],{"class":112},[106,37354,34113],{"class":221},[106,37356,37357,37359,37361],{"class":108,"line":1770},[106,37358,31283],{"class":116},[106,37360,162],{"class":112},[106,37362,32283],{"class":116},[106,37364,37365],{"class":108,"line":1775},[106,37366,2392],{"emptyLinePlaceholder":33},[106,37368,37369],{"class":108,"line":2569},[106,37370,34130],{"class":175},[106,37372,37373,37375,37377],{"class":108,"line":2583},[106,37374,34135],{"class":116},[106,37376,162],{"class":112},[106,37378,32336],{"class":165},[106,37380,37381,37383,37385],{"class":108,"line":2591},[106,37382,34144],{"class":116},[106,37384,162],{"class":112},[106,37386,3077],{"class":165},[106,37388,37389],{"class":108,"line":2596},[106,37390,2392],{"emptyLinePlaceholder":33},[106,37392,37393],{"class":108,"line":2602},[106,37394,34157],{"class":175},[106,37396,37397],{"class":108,"line":2608},[106,37398,34162],{"class":175},[106,37400,37401],{"class":108,"line":2613},[106,37402,34167],{"class":175},[106,37404,37405,37407],{"class":108,"line":7941},[106,37406,34172],{"class":112},[106,37408,32878],{"class":116},[106,37410,37411],{"class":108,"line":7965},[106,37412,34179],{"class":175},[106,37414,37415,37417,37419,37421],{"class":108,"line":7970},[106,37416,3395],{"class":112},[106,37418,34186],{"class":116},[106,37420,26037],{"class":112},[106,37422,34191],{"class":116},[106,37424,37425,37427,37429],{"class":108,"line":7976},[106,37426,34196],{"class":116},[106,37428,162],{"class":112},[106,37430,34201],{"class":116},[106,37432,37433,37435,37437],{"class":108,"line":8003},[106,37434,34206],{"class":116},[106,37436,162],{"class":112},[106,37438,34211],{"class":116},[106,37440,37441],{"class":108,"line":8008},[106,37442,34216],{"class":175},[106,37444,37445],{"class":108,"line":8014},[106,37446,32869],{"class":116},[106,37448,37449],{"class":108,"line":8026},[106,37450,34225],{"class":175},[106,37452,37453,37455,37457],{"class":108,"line":8038},[106,37454,32654],{"class":116},[106,37456,162],{"class":112},[106,37458,34234],{"class":116},[106,37460,37461],{"class":108,"line":8050},[106,37462,34239],{"class":175},[106,37464,37465,37467,37469,37471,37473,37475,37477],{"class":108,"line":9709},[106,37466,32671],{"class":116},[106,37468,162],{"class":112},[106,37470,32676],{"class":116},[106,37472,32679],{"class":5209},[106,37474,162],{"class":112},[106,37476,334],{"class":165},[106,37478,123],{"class":116},[106,37480,37481],{"class":108,"line":9734},[106,37482,34260],{"class":175},[106,37484,37485],{"class":108,"line":9757},[106,37486,34265],{"class":175},[106,37488,37489],{"class":108,"line":9781},[106,37490,34270],{"class":175},[106,37492,37493,37495,37497,37499,37501],{"class":108,"line":9786},[106,37494,34275],{"class":116},[106,37496,9470],{"class":112},[106,37498,32781],{"class":116},[106,37500,2941],{"class":112},[106,37502,34284],{"class":116},[106,37504,37505],{"class":108,"line":9791},[106,37506,34289],{"class":175},[106,37508,37509,37511,37513,37515,37517],{"class":108,"line":9796},[106,37510,34294],{"class":116},[106,37512,9470],{"class":112},[106,37514,34299],{"class":116},[106,37516,308],{"class":165},[106,37518,123],{"class":116},[106,37520,37521],{"class":108,"line":9805},[106,37522,2392],{"emptyLinePlaceholder":33},[106,37524,37525],{"class":108,"line":9810},[106,37526,34312],{"class":175},[106,37528,37529,37531,37533,37535,37537],{"class":108,"line":9816},[106,37530,34317],{"class":116},[106,37532,162],{"class":112},[106,37534,34322],{"class":116},[106,37536,701],{"class":112},[106,37538,34327],{"class":116},[106,37540,37541],{"class":108,"line":9837},[106,37542,34332],{"class":175},[106,37544,37545,37547,37549,37551],{"class":108,"line":9843},[106,37546,32445],{"class":165},[106,37548,117],{"class":116},[106,37550,34341],{"class":221},[106,37552,34344],{"class":116},[106,37554,37555],{"class":108,"line":9857},[106,37556,2392],{"emptyLinePlaceholder":33},[106,37558,37559],{"class":108,"line":9863},[106,37560,34353],{"class":175},[106,37562,37563,37565,37567,37569,37571],{"class":108,"line":9890},[106,37564,1523],{"class":112},[106,37566,31214],{"class":165},[106,37568,2941],{"class":112},[106,37570,31219],{"class":221},[106,37572,3731],{"class":116},[106,37574,37575],{"class":108,"line":9899},[106,37576,34370],{"class":175},[106,37578,37579,37581,37583],{"class":108,"line":9905},[106,37580,31283],{"class":116},[106,37582,162],{"class":112},[106,37584,37083],{"class":116},[106,37586,37587],{"class":108,"line":9913},[106,37588,34383],{"class":175},[106,37590,37591],{"class":108,"line":9918},[106,37592,34388],{"class":175},[106,37594,37595,37597,37599],{"class":108,"line":16597},[106,37596,34393],{"class":116},[106,37598,34396],{"class":221},[106,37600,30491],{"class":116},[106,37602,37603],{"class":108,"line":16603},[106,37604,34403],{"class":175},[106,37606,37607,37609,37611],{"class":108,"line":16626},[106,37608,34016],{"class":116},[106,37610,162],{"class":112},[106,37612,34412],{"class":116},[106,37614,37615],{"class":108,"line":16632},[106,37616,34417],{"class":175},[106,37618,37619],{"class":108,"line":16655},[106,37620,34422],{"class":116},[106,37622,37623],{"class":108,"line":16669},[106,37624,2392],{"emptyLinePlaceholder":33},[106,37626,37627],{"class":108,"line":16689},[106,37628,34431],{"class":175},[106,37630,37631],{"class":108,"line":16695},[106,37632,34436],{"class":175},[106,37634,37635,37637,37639,37641,37643,37645,37647],{"class":108,"line":16706},[106,37636,31231],{"class":116},[106,37638,162],{"class":112},[106,37640,31238],{"class":221},[106,37642,1696],{"class":112},[106,37644,31243],{"class":116},[106,37646,1693],{"class":112},[106,37648,34113],{"class":221},[106,37650,37651,37653,37655],{"class":108,"line":16729},[106,37652,31283],{"class":116},[106,37654,162],{"class":112},[106,37656,32283],{"class":116},[106,37658,37659],{"class":108,"line":16751},[106,37660,34465],{"class":175},[106,37662,37663],{"class":108,"line":16756},[106,37664,34470],{"class":175},[106,37666,37667,37669,37671,37673,37675,37677,37679,37681,37683,37685,37687,37689,37691,37693,37695,37697,37699,37701,37703,37705,37707,37709,37711],{"class":108,"line":16762},[106,37668,34475],{"class":116},[106,37670,162],{"class":112},[106,37672,1007],{"class":116},[106,37674,34482],{"class":221},[106,37676,495],{"class":116},[106,37678,34487],{"class":221},[106,37680,495],{"class":116},[106,37682,34492],{"class":221},[106,37684,495],{"class":116},[106,37686,34497],{"class":221},[106,37688,495],{"class":116},[106,37690,34502],{"class":221},[106,37692,495],{"class":116},[106,37694,34507],{"class":221},[106,37696,495],{"class":116},[106,37698,34512],{"class":221},[106,37700,495],{"class":116},[106,37702,34517],{"class":221},[106,37704,495],{"class":116},[106,37706,34522],{"class":221},[106,37708,495],{"class":116},[106,37710,34527],{"class":221},[106,37712,33240],{"class":116},[106,37714,37715,37717],{"class":108,"line":16776},[106,37716,34172],{"class":112},[106,37718,32878],{"class":116},[106,37720,37721],{"class":108,"line":16789},[106,37722,34540],{"class":175},[106,37724,37725,37727,37729,37731],{"class":108,"line":16794},[106,37726,3395],{"class":112},[106,37728,34547],{"class":116},[106,37730,26037],{"class":112},[106,37732,34191],{"class":116},[106,37734,37735,37737,37739],{"class":108,"line":16808},[106,37736,32604],{"class":116},[106,37738,162],{"class":112},[106,37740,32609],{"class":116},[106,37742,37743,37745,37747],{"class":108,"line":16813},[106,37744,32619],{"class":116},[106,37746,162],{"class":112},[106,37748,32624],{"class":116},[106,37750,37751],{"class":108,"line":16819},[106,37752,2392],{"emptyLinePlaceholder":33},[106,37754,37755],{"class":108,"line":16824},[106,37756,34576],{"class":175},[106,37758,37759],{"class":108,"line":16838},[106,37760,32869],{"class":116},[106,37762,37763],{"class":108,"line":16843},[106,37764,34585],{"class":175},[106,37766,37767,37769,37771],{"class":108,"line":16848},[106,37768,32654],{"class":116},[106,37770,162],{"class":112},[106,37772,32659],{"class":116},[106,37774,37775],{"class":108,"line":16862},[106,37776,34598],{"class":175},[106,37778,37779,37781,37783,37785,37787,37789,37791],{"class":108,"line":16874},[106,37780,32671],{"class":116},[106,37782,162],{"class":112},[106,37784,32676],{"class":116},[106,37786,32679],{"class":5209},[106,37788,162],{"class":112},[106,37790,334],{"class":165},[106,37792,123],{"class":116},[106,37794,37795],{"class":108,"line":16879},[106,37796,34619],{"class":175},[106,37798,37799,37801,37803],{"class":108,"line":16892},[106,37800,34624],{"class":116},[106,37802,162],{"class":112},[106,37804,34629],{"class":116},[106,37806,37807,37809,37811],{"class":108,"line":16897},[106,37808,34634],{"class":116},[106,37810,162],{"class":112},[106,37812,34639],{"class":116},[106,37814,37815,37817,37819,37821,37823,37825,37827,37829],{"class":108,"line":16902},[106,37816,34644],{"class":165},[106,37818,117],{"class":116},[106,37820,34649],{"class":221},[106,37822,34652],{"class":116},[106,37824,34655],{"class":221},[106,37826,495],{"class":116},[106,37828,34660],{"class":221},[106,37830,34663],{"class":116},[77,37832,37834],{"id":37833},"_22vgg","2.2.VGG",[21991,37836,37838],{"id":37837},"_221原理","2.2.1.原理",[14,37840,37841],{},[23,37842],{"alt":25,"src":37843},"\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,37845,37846],{},[23,37847],{"alt":25,"src":37848},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-016.png",[14,37850,37851],{},[23,37852],{"alt":25,"src":37853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-017.png",[14,37855,37856],{},"参数详细描述：",[14,37858,37859],{},[23,37860],{"alt":25,"src":37861},"\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,37863,37864],{},[23,37865],{"alt":25,"src":37866},"\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,37868,37869],{},[23,37870],{"alt":25,"src":37871},"\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,37873,37874],{},[23,37875],{"alt":25,"src":37876},"\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,37878,37879],{},[23,37880],{"alt":25,"src":37881},"\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",[21991,37883,37885],{"id":37884},"_222代码实现","2.2.2.代码实现",[60,37887,37888],{},[63,37889,37890],{},"网络搭建",[97,37892,37894],{"className":30372,"code":37893,"language":30374,"meta":25,"style":25},"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",[103,37895,37896,37902,37914,37924,37934,37938,37955,37963,37982,37987,37992,38004,38042,38047,38083,38087,38116,38121,38126,38137,38173,38177,38213,38217,38245,38249,38254,38265,38301,38305,38341,38345,38381,38385,38413,38417,38422,38433,38470,38474,38510,38514,38550,38554,38582,38586,38591,38602,38638,38642,38678,38682,38718,38722,38750,38754,38759,38770,38775,38780,38785,38806,38810,38822,38826,38838,38842,38846,38851,38856,38871,38876,38886,38891,38906,38911,38930,38935,38944,38949,38959,38964,38969,38983,38988,39002,39010,39014,39018,39026,39037,39048,39059,39070,39081,39092,39098,39102,39107,39120,39140,39146,39155],{"__ignoreMap":25},[106,37897,37898,37900],{"class":108,"line":109},[106,37899,30386],{"class":112},[106,37901,30389],{"class":116},[106,37903,37904,37906,37909,37911],{"class":108,"line":28},[106,37905,30731],{"class":112},[106,37907,37908],{"class":116}," sympy.core.sympify ",[106,37910,30386],{"class":112},[106,37912,37913],{"class":116}," kernS\n",[106,37915,37916,37918,37920,37922],{"class":108,"line":1172},[106,37917,30731],{"class":112},[106,37919,30734],{"class":116},[106,37921,30386],{"class":112},[106,37923,30739],{"class":116},[106,37925,37926,37928,37930,37932],{"class":108,"line":1187},[106,37927,30731],{"class":112},[106,37929,30751],{"class":116},[106,37931,30386],{"class":112},[106,37933,30756],{"class":116},[106,37935,37936],{"class":108,"line":1193},[106,37937,2392],{"emptyLinePlaceholder":33},[106,37939,37940,37942,37945,37947,37949,37951,37953],{"class":108,"line":1207},[106,37941,14687],{"class":112},[106,37943,37944],{"class":1955}," VGG16",[106,37946,117],{"class":116},[106,37948,30772],{"class":1955},[106,37950,675],{"class":116},[106,37952,30777],{"class":1955},[106,37954,30780],{"class":116},[106,37956,37957,37959,37961],{"class":108,"line":1213},[106,37958,30795],{"class":112},[106,37960,30798],{"class":165},[106,37962,30801],{"class":116},[106,37964,37965,37967,37969,37972,37974,37976,37978,37980],{"class":108,"line":1304},[106,37966,30811],{"class":165},[106,37968,117],{"class":116},[106,37970,37971],{"class":165},"VGG16",[106,37973,12428],{"class":116},[106,37975,30817],{"class":165},[106,37977,30820],{"class":116},[106,37979,30823],{"class":165},[106,37981,1968],{"class":116},[106,37983,37984],{"class":108,"line":1310},[106,37985,37986],{"class":175},"        # 按照块来进行搭建神经网络层,按照序列来写\n",[106,37988,37989],{"class":108,"line":1322},[106,37990,37991],{"class":175},"        # 这里用的是灰度图\n",[106,37993,37994,37996,37999,38001],{"class":108,"line":1604},[106,37995,30839],{"class":165},[106,37997,37998],{"class":116},".block1",[106,38000,162],{"class":112},[106,38002,38003],{"class":116},"nn.Sequential(\n",[106,38005,38006,38009,38011,38013,38015,38017,38019,38021,38023,38025,38027,38029,38031,38033,38035,38037,38039],{"class":108,"line":1609},[106,38007,38008],{"class":116},"            nn.Conv2d(",[106,38010,30850],{"class":5209},[106,38012,162],{"class":112},[106,38014,334],{"class":165},[106,38016,495],{"class":116},[106,38018,30859],{"class":5209},[106,38020,162],{"class":112},[106,38022,320],{"class":165},[106,38024,495],{"class":116},[106,38026,30868],{"class":5209},[106,38028,162],{"class":112},[106,38030,188],{"class":165},[106,38032,495],{"class":116},[106,38034,30877],{"class":5209},[106,38036,162],{"class":112},[106,38038,334],{"class":165},[106,38040,38041],{"class":116},"),\n",[106,38043,38044],{"class":108,"line":1615},[106,38045,38046],{"class":116},"            nn.ReLU(),\n",[106,38048,38049,38051,38053,38055,38057,38059,38061,38063,38065,38067,38069,38071,38073,38075,38077,38079,38081],{"class":108,"line":1620},[106,38050,38008],{"class":116},[106,38052,30850],{"class":5209},[106,38054,162],{"class":112},[106,38056,320],{"class":165},[106,38058,495],{"class":116},[106,38060,30859],{"class":5209},[106,38062,162],{"class":112},[106,38064,320],{"class":165},[106,38066,495],{"class":116},[106,38068,30868],{"class":5209},[106,38070,162],{"class":112},[106,38072,188],{"class":165},[106,38074,495],{"class":116},[106,38076,30877],{"class":5209},[106,38078,162],{"class":112},[106,38080,334],{"class":165},[106,38082,38041],{"class":116},[106,38084,38085],{"class":108,"line":1634},[106,38086,38046],{"class":116},[106,38088,38089,38092,38094,38096,38098,38100,38102,38104,38106,38108,38110,38112,38114],{"class":108,"line":1639},[106,38090,38091],{"class":116},"            nn.MaxPool2d(",[106,38093,30868],{"class":5209},[106,38095,162],{"class":112},[106,38097,194],{"class":165},[106,38099,495],{"class":116},[106,38101,30923],{"class":5209},[106,38103,162],{"class":112},[106,38105,194],{"class":165},[106,38107,495],{"class":116},[106,38109,30877],{"class":5209},[106,38111,162],{"class":112},[106,38113,308],{"class":165},[106,38115,123],{"class":116},[106,38117,38118],{"class":108,"line":1645},[106,38119,38120],{"class":116},"        )\n",[106,38122,38123],{"class":108,"line":1666},[106,38124,38125],{"class":175},"        # 第二层\n",[106,38127,38128,38130,38133,38135],{"class":108,"line":1671},[106,38129,30839],{"class":165},[106,38131,38132],{"class":116},".block2",[106,38134,162],{"class":112},[106,38136,38003],{"class":116},[106,38138,38139,38141,38143,38145,38147,38149,38151,38153,38155,38157,38159,38161,38163,38165,38167,38169,38171],{"class":108,"line":1685},[106,38140,38008],{"class":116},[106,38142,30850],{"class":5209},[106,38144,162],{"class":112},[106,38146,320],{"class":165},[106,38148,495],{"class":116},[106,38150,30859],{"class":5209},[106,38152,162],{"class":112},[106,38154,32064],{"class":165},[106,38156,495],{"class":116},[106,38158,30868],{"class":5209},[106,38160,162],{"class":112},[106,38162,188],{"class":165},[106,38164,495],{"class":116},[106,38166,30877],{"class":5209},[106,38168,162],{"class":112},[106,38170,334],{"class":165},[106,38172,38041],{"class":116},[106,38174,38175],{"class":108,"line":1690},[106,38176,38046],{"class":116},[106,38178,38179,38181,38183,38185,38187,38189,38191,38193,38195,38197,38199,38201,38203,38205,38207,38209,38211],{"class":108,"line":1719},[106,38180,38008],{"class":116},[106,38182,30850],{"class":5209},[106,38184,162],{"class":112},[106,38186,32064],{"class":165},[106,38188,495],{"class":116},[106,38190,30859],{"class":5209},[106,38192,162],{"class":112},[106,38194,32064],{"class":165},[106,38196,495],{"class":116},[106,38198,30868],{"class":5209},[106,38200,162],{"class":112},[106,38202,188],{"class":165},[106,38204,495],{"class":116},[106,38206,30877],{"class":5209},[106,38208,162],{"class":112},[106,38210,334],{"class":165},[106,38212,38041],{"class":116},[106,38214,38215],{"class":108,"line":1724},[106,38216,38046],{"class":116},[106,38218,38219,38221,38223,38225,38227,38229,38231,38233,38235,38237,38239,38241,38243],{"class":108,"line":1741},[106,38220,38091],{"class":116},[106,38222,30868],{"class":5209},[106,38224,162],{"class":112},[106,38226,194],{"class":165},[106,38228,495],{"class":116},[106,38230,30923],{"class":5209},[106,38232,162],{"class":112},[106,38234,194],{"class":165},[106,38236,495],{"class":116},[106,38238,30877],{"class":5209},[106,38240,162],{"class":112},[106,38242,308],{"class":165},[106,38244,123],{"class":116},[106,38246,38247],{"class":108,"line":1746},[106,38248,38120],{"class":116},[106,38250,38251],{"class":108,"line":1751},[106,38252,38253],{"class":175},"        # 第三层\n",[106,38255,38256,38258,38261,38263],{"class":108,"line":1756},[106,38257,30839],{"class":165},[106,38259,38260],{"class":116},".block3",[106,38262,162],{"class":112},[106,38264,38003],{"class":116},[106,38266,38267,38269,38271,38273,38275,38277,38279,38281,38283,38285,38287,38289,38291,38293,38295,38297,38299],{"class":108,"line":1770},[106,38268,38008],{"class":116},[106,38270,30850],{"class":5209},[106,38272,162],{"class":112},[106,38274,32064],{"class":165},[106,38276,495],{"class":116},[106,38278,30859],{"class":5209},[106,38280,162],{"class":112},[106,38282,34864],{"class":165},[106,38284,495],{"class":116},[106,38286,30868],{"class":5209},[106,38288,162],{"class":112},[106,38290,188],{"class":165},[106,38292,495],{"class":116},[106,38294,30877],{"class":5209},[106,38296,162],{"class":112},[106,38298,334],{"class":165},[106,38300,38041],{"class":116},[106,38302,38303],{"class":108,"line":1775},[106,38304,38046],{"class":116},[106,38306,38307,38309,38311,38313,38315,38317,38319,38321,38323,38325,38327,38329,38331,38333,38335,38337,38339],{"class":108,"line":2569},[106,38308,38008],{"class":116},[106,38310,30850],{"class":5209},[106,38312,162],{"class":112},[106,38314,34864],{"class":165},[106,38316,495],{"class":116},[106,38318,30859],{"class":5209},[106,38320,162],{"class":112},[106,38322,34864],{"class":165},[106,38324,495],{"class":116},[106,38326,30868],{"class":5209},[106,38328,162],{"class":112},[106,38330,188],{"class":165},[106,38332,495],{"class":116},[106,38334,30877],{"class":5209},[106,38336,162],{"class":112},[106,38338,334],{"class":165},[106,38340,38041],{"class":116},[106,38342,38343],{"class":108,"line":2583},[106,38344,38046],{"class":116},[106,38346,38347,38349,38351,38353,38355,38357,38359,38361,38363,38365,38367,38369,38371,38373,38375,38377,38379],{"class":108,"line":2591},[106,38348,38008],{"class":116},[106,38350,30850],{"class":5209},[106,38352,162],{"class":112},[106,38354,34864],{"class":165},[106,38356,495],{"class":116},[106,38358,30859],{"class":5209},[106,38360,162],{"class":112},[106,38362,34864],{"class":165},[106,38364,495],{"class":116},[106,38366,30868],{"class":5209},[106,38368,162],{"class":112},[106,38370,188],{"class":165},[106,38372,495],{"class":116},[106,38374,30877],{"class":5209},[106,38376,162],{"class":112},[106,38378,334],{"class":165},[106,38380,38041],{"class":116},[106,38382,38383],{"class":108,"line":2596},[106,38384,38046],{"class":116},[106,38386,38387,38389,38391,38393,38395,38397,38399,38401,38403,38405,38407,38409,38411],{"class":108,"line":2602},[106,38388,38091],{"class":116},[106,38390,30868],{"class":5209},[106,38392,162],{"class":112},[106,38394,194],{"class":165},[106,38396,495],{"class":116},[106,38398,30923],{"class":5209},[106,38400,162],{"class":112},[106,38402,194],{"class":165},[106,38404,495],{"class":116},[106,38406,30877],{"class":5209},[106,38408,162],{"class":112},[106,38410,308],{"class":165},[106,38412,123],{"class":116},[106,38414,38415],{"class":108,"line":2608},[106,38416,38120],{"class":116},[106,38418,38419],{"class":108,"line":2613},[106,38420,38421],{"class":175},"        # 第四层\n",[106,38423,38424,38426,38429,38431],{"class":108,"line":7941},[106,38425,30839],{"class":165},[106,38427,38428],{"class":116},".block4",[106,38430,162],{"class":112},[106,38432,38003],{"class":116},[106,38434,38435,38437,38439,38441,38443,38445,38447,38449,38452,38454,38456,38458,38460,38462,38464,38466,38468],{"class":108,"line":7965},[106,38436,38008],{"class":116},[106,38438,30850],{"class":5209},[106,38440,162],{"class":112},[106,38442,34864],{"class":165},[106,38444,495],{"class":116},[106,38446,30859],{"class":5209},[106,38448,162],{"class":112},[106,38450,38451],{"class":165},"512",[106,38453,495],{"class":116},[106,38455,30868],{"class":5209},[106,38457,162],{"class":112},[106,38459,188],{"class":165},[106,38461,495],{"class":116},[106,38463,30877],{"class":5209},[106,38465,162],{"class":112},[106,38467,334],{"class":165},[106,38469,38041],{"class":116},[106,38471,38472],{"class":108,"line":7970},[106,38473,38046],{"class":116},[106,38475,38476,38478,38480,38482,38484,38486,38488,38490,38492,38494,38496,38498,38500,38502,38504,38506,38508],{"class":108,"line":7976},[106,38477,38008],{"class":116},[106,38479,30850],{"class":5209},[106,38481,162],{"class":112},[106,38483,38451],{"class":165},[106,38485,495],{"class":116},[106,38487,30859],{"class":5209},[106,38489,162],{"class":112},[106,38491,38451],{"class":165},[106,38493,495],{"class":116},[106,38495,30868],{"class":5209},[106,38497,162],{"class":112},[106,38499,188],{"class":165},[106,38501,495],{"class":116},[106,38503,30877],{"class":5209},[106,38505,162],{"class":112},[106,38507,334],{"class":165},[106,38509,38041],{"class":116},[106,38511,38512],{"class":108,"line":8003},[106,38513,38046],{"class":116},[106,38515,38516,38518,38520,38522,38524,38526,38528,38530,38532,38534,38536,38538,38540,38542,38544,38546,38548],{"class":108,"line":8008},[106,38517,38008],{"class":116},[106,38519,30850],{"class":5209},[106,38521,162],{"class":112},[106,38523,38451],{"class":165},[106,38525,495],{"class":116},[106,38527,30859],{"class":5209},[106,38529,162],{"class":112},[106,38531,38451],{"class":165},[106,38533,495],{"class":116},[106,38535,30868],{"class":5209},[106,38537,162],{"class":112},[106,38539,188],{"class":165},[106,38541,495],{"class":116},[106,38543,30877],{"class":5209},[106,38545,162],{"class":112},[106,38547,334],{"class":165},[106,38549,38041],{"class":116},[106,38551,38552],{"class":108,"line":8014},[106,38553,38046],{"class":116},[106,38555,38556,38558,38560,38562,38564,38566,38568,38570,38572,38574,38576,38578,38580],{"class":108,"line":8026},[106,38557,38091],{"class":116},[106,38559,30868],{"class":5209},[106,38561,162],{"class":112},[106,38563,194],{"class":165},[106,38565,495],{"class":116},[106,38567,30923],{"class":5209},[106,38569,162],{"class":112},[106,38571,194],{"class":165},[106,38573,495],{"class":116},[106,38575,30877],{"class":5209},[106,38577,162],{"class":112},[106,38579,308],{"class":165},[106,38581,123],{"class":116},[106,38583,38584],{"class":108,"line":8038},[106,38585,38120],{"class":116},[106,38587,38588],{"class":108,"line":8050},[106,38589,38590],{"class":175},"        # 第五层\n",[106,38592,38593,38595,38598,38600],{"class":108,"line":9709},[106,38594,30839],{"class":165},[106,38596,38597],{"class":116},".block5",[106,38599,162],{"class":112},[106,38601,38003],{"class":116},[106,38603,38604,38606,38608,38610,38612,38614,38616,38618,38620,38622,38624,38626,38628,38630,38632,38634,38636],{"class":108,"line":9734},[106,38605,38008],{"class":116},[106,38607,30850],{"class":5209},[106,38609,162],{"class":112},[106,38611,38451],{"class":165},[106,38613,495],{"class":116},[106,38615,30859],{"class":5209},[106,38617,162],{"class":112},[106,38619,38451],{"class":165},[106,38621,495],{"class":116},[106,38623,30868],{"class":5209},[106,38625,162],{"class":112},[106,38627,188],{"class":165},[106,38629,495],{"class":116},[106,38631,30877],{"class":5209},[106,38633,162],{"class":112},[106,38635,334],{"class":165},[106,38637,38041],{"class":116},[106,38639,38640],{"class":108,"line":9757},[106,38641,38046],{"class":116},[106,38643,38644,38646,38648,38650,38652,38654,38656,38658,38660,38662,38664,38666,38668,38670,38672,38674,38676],{"class":108,"line":9781},[106,38645,38008],{"class":116},[106,38647,30850],{"class":5209},[106,38649,162],{"class":112},[106,38651,38451],{"class":165},[106,38653,495],{"class":116},[106,38655,30859],{"class":5209},[106,38657,162],{"class":112},[106,38659,38451],{"class":165},[106,38661,495],{"class":116},[106,38663,30868],{"class":5209},[106,38665,162],{"class":112},[106,38667,188],{"class":165},[106,38669,495],{"class":116},[106,38671,30877],{"class":5209},[106,38673,162],{"class":112},[106,38675,334],{"class":165},[106,38677,38041],{"class":116},[106,38679,38680],{"class":108,"line":9786},[106,38681,38046],{"class":116},[106,38683,38684,38686,38688,38690,38692,38694,38696,38698,38700,38702,38704,38706,38708,38710,38712,38714,38716],{"class":108,"line":9791},[106,38685,38008],{"class":116},[106,38687,30850],{"class":5209},[106,38689,162],{"class":112},[106,38691,38451],{"class":165},[106,38693,495],{"class":116},[106,38695,30859],{"class":5209},[106,38697,162],{"class":112},[106,38699,38451],{"class":165},[106,38701,495],{"class":116},[106,38703,30868],{"class":5209},[106,38705,162],{"class":112},[106,38707,188],{"class":165},[106,38709,495],{"class":116},[106,38711,30877],{"class":5209},[106,38713,162],{"class":112},[106,38715,334],{"class":165},[106,38717,38041],{"class":116},[106,38719,38720],{"class":108,"line":9796},[106,38721,38046],{"class":116},[106,38723,38724,38726,38728,38730,38732,38734,38736,38738,38740,38742,38744,38746,38748],{"class":108,"line":9805},[106,38725,38091],{"class":116},[106,38727,30868],{"class":5209},[106,38729,162],{"class":112},[106,38731,194],{"class":165},[106,38733,495],{"class":116},[106,38735,30923],{"class":5209},[106,38737,162],{"class":112},[106,38739,194],{"class":165},[106,38741,495],{"class":116},[106,38743,30877],{"class":5209},[106,38745,162],{"class":112},[106,38747,308],{"class":165},[106,38749,123],{"class":116},[106,38751,38752],{"class":108,"line":9810},[106,38753,38120],{"class":116},[106,38755,38756],{"class":108,"line":9816},[106,38757,38758],{"class":175},"        # 全连接层\n",[106,38760,38761,38763,38766,38768],{"class":108,"line":9837},[106,38762,30839],{"class":165},[106,38764,38765],{"class":116},".block6",[106,38767,162],{"class":112},[106,38769,38003],{"class":116},[106,38771,38772],{"class":108,"line":9843},[106,38773,38774],{"class":175},"            # 平展操作\n",[106,38776,38777],{"class":108,"line":9857},[106,38778,38779],{"class":175},"            # 这里为了适应笔记本显存过低4g，然后不进行1000分类，而是进行10分类，将全连接层进行修改\n",[106,38781,38782],{"class":108,"line":9863},[106,38783,38784],{"class":116},"            nn.Flatten(),\n",[106,38786,38787,38790,38792,38794,38796,38798,38800,38802,38804],{"class":108,"line":9890},[106,38788,38789],{"class":116},"            nn.Linear(",[106,38791,486],{"class":165},[106,38793,572],{"class":112},[106,38795,486],{"class":165},[106,38797,572],{"class":112},[106,38799,38451],{"class":165},[106,38801,495],{"class":116},[106,38803,34864],{"class":165},[106,38805,38041],{"class":116},[106,38807,38808],{"class":108,"line":9899},[106,38809,38046],{"class":116},[106,38811,38812,38814,38816,38818,38820],{"class":108,"line":9905},[106,38813,38789],{"class":116},[106,38815,34864],{"class":165},[106,38817,495],{"class":116},[106,38819,32064],{"class":165},[106,38821,38041],{"class":116},[106,38823,38824],{"class":108,"line":9913},[106,38825,38046],{"class":116},[106,38827,38828,38830,38832,38834,38836],{"class":108,"line":9918},[106,38829,38789],{"class":116},[106,38831,32064],{"class":165},[106,38833,495],{"class":116},[106,38835,563],{"class":165},[106,38837,123],{"class":116},[106,38839,38840],{"class":108,"line":16597},[106,38841,38120],{"class":116},[106,38843,38844],{"class":108,"line":16603},[106,38845,2392],{"emptyLinePlaceholder":33},[106,38847,38848],{"class":108,"line":16626},[106,38849,38850],{"class":175},"        # 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[106,38852,38853],{"class":108,"line":16632},[106,38854,38855],{"class":175},"        # 循环遍历模型\n",[106,38857,38858,38860,38863,38865,38868],{"class":108,"line":16655},[106,38859,3395],{"class":112},[106,38861,38862],{"class":116}," m ",[106,38864,26037],{"class":112},[106,38866,38867],{"class":165}," self",[106,38869,38870],{"class":116},".modules():\n",[106,38872,38873],{"class":108,"line":16669},[106,38874,38875],{"class":175},"            # print(m)\n",[106,38877,38878,38880,38883],{"class":108,"line":16689},[106,38879,4634],{"class":112},[106,38881,38882],{"class":165}," isinstance",[106,38884,38885],{"class":116},"(m,nn.Conv2d):\n",[106,38887,38888],{"class":108,"line":16695},[106,38889,38890],{"class":175},"                # 凯明初始化,初始化w,对应的激活函数是relu\n",[106,38892,38893,38896,38899,38901,38904],{"class":108,"line":16706},[106,38894,38895],{"class":116},"                nn.init.kaiming_normal_(m.weight,",[106,38897,38898],{"class":5209},"nonlinearity",[106,38900,162],{"class":112},[106,38902,38903],{"class":221},"'relu'",[106,38905,123],{"class":116},[106,38907,38908],{"class":108,"line":16729},[106,38909,38910],{"class":175},"                # 判断b参数是否存在\n",[106,38912,38913,38916,38919,38922,38925,38928],{"class":108,"line":16751},[106,38914,38915],{"class":112},"                if",[106,38917,38918],{"class":116}," m.bias ",[106,38920,38921],{"class":112},"is",[106,38923,38924],{"class":112}," not",[106,38926,38927],{"class":165}," None",[106,38929,3731],{"class":116},[106,38931,38932],{"class":108,"line":16756},[106,38933,38934],{"class":175},"                    # 如果参数不存在的化初始化b=0\n",[106,38936,38937,38940,38942],{"class":108,"line":16762},[106,38938,38939],{"class":116},"                    nn.init.constant_(m.bias,",[106,38941,308],{"class":165},[106,38943,123],{"class":116},[106,38945,38946],{"class":108,"line":16776},[106,38947,38948],{"class":175},"            # 全连接层初始化\n",[106,38950,38951,38954,38956],{"class":108,"line":16789},[106,38952,38953],{"class":112},"            elif",[106,38955,38882],{"class":165},[106,38957,38958],{"class":116},"(m,nn.Linear):\n",[106,38960,38961],{"class":108,"line":16794},[106,38962,38963],{"class":175},"                # 这个初始化方法是利用的是正太分布的方式\n",[106,38965,38966],{"class":108,"line":16808},[106,38967,38968],{"class":175},"                # 均值为0，方差为0.01\n",[106,38970,38971,38974,38976,38978,38981],{"class":108,"line":16813},[106,38972,38973],{"class":116},"                nn.init.normal_(m.weight,",[106,38975,308],{"class":165},[106,38977,495],{"class":116},[106,38979,38980],{"class":165},"0.01",[106,38982,123],{"class":116},[106,38984,38985],{"class":108,"line":16819},[106,38986,38987],{"class":175},"                # 初始化b参数\n",[106,38989,38990,38992,38994,38996,38998,39000],{"class":108,"line":16824},[106,38991,38915],{"class":112},[106,38993,38918],{"class":116},[106,38995,38921],{"class":112},[106,38997,38924],{"class":112},[106,38999,38927],{"class":165},[106,39001,3731],{"class":116},[106,39003,39004,39006,39008],{"class":108,"line":16838},[106,39005,38939],{"class":116},[106,39007,308],{"class":165},[106,39009,123],{"class":116},[106,39011,39012],{"class":108,"line":16843},[106,39013,2392],{"emptyLinePlaceholder":33},[106,39015,39016],{"class":108,"line":16848},[106,39017,35159],{"class":175},[106,39019,39020,39022,39024],{"class":108,"line":16862},[106,39021,30795],{"class":112},[106,39023,31087],{"class":1955},[106,39025,31090],{"class":116},[106,39027,39028,39030,39032,39034],{"class":108,"line":16874},[106,39029,31095],{"class":116},[106,39031,162],{"class":112},[106,39033,30817],{"class":165},[106,39035,39036],{"class":116},".block1(x)\n",[106,39038,39039,39041,39043,39045],{"class":108,"line":16879},[106,39040,31095],{"class":116},[106,39042,162],{"class":112},[106,39044,30817],{"class":165},[106,39046,39047],{"class":116},".block2(x)\n",[106,39049,39050,39052,39054,39056],{"class":108,"line":16892},[106,39051,31095],{"class":116},[106,39053,162],{"class":112},[106,39055,30817],{"class":165},[106,39057,39058],{"class":116},".block3(x)\n",[106,39060,39061,39063,39065,39067],{"class":108,"line":16897},[106,39062,31095],{"class":116},[106,39064,162],{"class":112},[106,39066,30817],{"class":165},[106,39068,39069],{"class":116},".block4(x)\n",[106,39071,39072,39074,39076,39078],{"class":108,"line":16902},[106,39073,31095],{"class":116},[106,39075,162],{"class":112},[106,39077,30817],{"class":165},[106,39079,39080],{"class":116},".block5(x)\n",[106,39082,39083,39085,39087,39089],{"class":108,"line":16907},[106,39084,31095],{"class":116},[106,39086,162],{"class":112},[106,39088,30817],{"class":165},[106,39090,39091],{"class":116},".block6(x)\n",[106,39093,39094,39096],{"class":108,"line":16920},[106,39095,14745],{"class":112},[106,39097,31203],{"class":116},[106,39099,39100],{"class":108,"line":16925},[106,39101,2392],{"emptyLinePlaceholder":33},[106,39103,39104],{"class":108,"line":32627},[106,39105,39106],{"class":175},"# 验证模型\n",[106,39108,39109,39111,39113,39115,39118],{"class":108,"line":32633},[106,39110,1523],{"class":112},[106,39112,31214],{"class":165},[106,39114,2941],{"class":112},[106,39116,39117],{"class":221},"'__main__'",[106,39119,3731],{"class":116},[106,39121,39122,39124,39126,39128,39130,39132,39134,39136,39138],{"class":108,"line":32639},[106,39123,31231],{"class":116},[106,39125,162],{"class":112},[106,39127,30445],{"class":116},[106,39129,31238],{"class":221},[106,39131,1696],{"class":112},[106,39133,31243],{"class":116},[106,39135,1693],{"class":112},[106,39137,30470],{"class":221},[106,39139,123],{"class":116},[106,39141,39142,39144],{"class":108,"line":32645},[106,39143,31293],{"class":165},[106,39145,30479],{"class":116},[106,39147,39148,39150,39152],{"class":108,"line":32651},[106,39149,31283],{"class":116},[106,39151,162],{"class":112},[106,39153,39154],{"class":116},"VGG16().to(device)\n",[106,39156,39157,39159,39161,39163,39165,39167,39169,39171],{"class":108,"line":32662},[106,39158,31293],{"class":165},[106,39160,31296],{"class":116},[106,39162,334],{"class":165},[106,39164,495],{"class":116},[106,39166,31495],{"class":165},[106,39168,495],{"class":116},[106,39170,31495],{"class":165},[106,39172,31309],{"class":116},[60,39174,39175],{"start":28},[63,39176,39177],{},"训练代码",[14,39179,39180],{},"模型不收敛的原因:①批次过低；②w权重的初始值过大或过小",[14,39182,39183],{},"解决方式:",[14,39185,39186],{},"①权重初始化",[97,39188,39190],{"className":30372,"code":39189,"language":30374,"meta":25,"style":25},"# 权重初始化,保证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",[103,39191,39192,39197,39202,39214,39219,39227,39232,39245,39250,39264,39269,39278,39283,39292,39297,39302,39315,39320,39334],{"__ignoreMap":25},[106,39193,39194],{"class":108,"line":109},[106,39195,39196],{"class":175},"# 权重初始化,保证w不会过大过小导致在训练的时候不收敛\n",[106,39198,39199],{"class":108,"line":28},[106,39200,39201],{"class":175},"# 循环遍历模型\n",[106,39203,39204,39206,39208,39210,39212],{"class":108,"line":1172},[106,39205,3017],{"class":112},[106,39207,38862],{"class":116},[106,39209,26037],{"class":112},[106,39211,38867],{"class":165},[106,39213,38870],{"class":116},[106,39215,39216],{"class":108,"line":1187},[106,39217,39218],{"class":175},"    # print(m)\n",[106,39220,39221,39223,39225],{"class":108,"line":1193},[106,39222,3093],{"class":112},[106,39224,38882],{"class":165},[106,39226,38885],{"class":116},[106,39228,39229],{"class":108,"line":1207},[106,39230,39231],{"class":175},"        # 凯明初始化,初始化w,对应的激活函数是relu\n",[106,39233,39234,39237,39239,39241,39243],{"class":108,"line":1213},[106,39235,39236],{"class":116},"        nn.init.kaiming_normal_(m.weight,",[106,39238,38898],{"class":5209},[106,39240,162],{"class":112},[106,39242,38903],{"class":221},[106,39244,123],{"class":116},[106,39246,39247],{"class":108,"line":1304},[106,39248,39249],{"class":175},"        # 判断b参数是否存在\n",[106,39251,39252,39254,39256,39258,39260,39262],{"class":108,"line":1310},[106,39253,2489],{"class":112},[106,39255,38918],{"class":116},[106,39257,38921],{"class":112},[106,39259,38924],{"class":112},[106,39261,38927],{"class":165},[106,39263,3731],{"class":116},[106,39265,39266],{"class":108,"line":1322},[106,39267,39268],{"class":175},"            # 如果参数不存在的化初始化b=0\n",[106,39270,39271,39274,39276],{"class":108,"line":1604},[106,39272,39273],{"class":116},"            nn.init.constant_(m.bias,",[106,39275,308],{"class":165},[106,39277,123],{"class":116},[106,39279,39280],{"class":108,"line":1609},[106,39281,39282],{"class":175},"    # 全连接层初始化\n",[106,39284,39285,39288,39290],{"class":108,"line":1615},[106,39286,39287],{"class":112},"    elif",[106,39289,38882],{"class":165},[106,39291,38958],{"class":116},[106,39293,39294],{"class":108,"line":1620},[106,39295,39296],{"class":175},"        # 这个初始化方法是利用的是正太分布的方式\n",[106,39298,39299],{"class":108,"line":1634},[106,39300,39301],{"class":175},"        # 均值为0，方差为0.01\n",[106,39303,39304,39307,39309,39311,39313],{"class":108,"line":1639},[106,39305,39306],{"class":116},"        nn.init.normal_(m.weight,",[106,39308,308],{"class":165},[106,39310,495],{"class":116},[106,39312,38980],{"class":165},[106,39314,123],{"class":116},[106,39316,39317],{"class":108,"line":1645},[106,39318,39319],{"class":175},"        # 初始化b参数\n",[106,39321,39322,39324,39326,39328,39330,39332],{"class":108,"line":1666},[106,39323,2489],{"class":112},[106,39325,38918],{"class":116},[106,39327,38921],{"class":112},[106,39329,38924],{"class":112},[106,39331,38927],{"class":165},[106,39333,3731],{"class":116},[106,39335,39336,39338,39340],{"class":108,"line":1671},[106,39337,39273],{"class":116},[106,39339,308],{"class":165},[106,39341,123],{"class":116},[14,39343,39344],{},"②尽可能地增加批次",[14,39346,39347],{},"训练完整代码：",[97,39349,39350],{"className":30372,"code":37893,"language":30374,"meta":25,"style":25},[103,39351,39352,39358,39368,39378,39388,39392,39408,39416,39434,39438,39442,39452,39488,39492,39528,39532,39560,39564,39568,39578,39614,39618,39654,39658,39686,39690,39694,39704,39740,39744,39780,39784,39820,39824,39852,39856,39860,39870,39906,39910,39946,39950,39986,39990,40018,40022,40026,40036,40072,40076,40112,40116,40152,40156,40184,40188,40192,40202,40206,40210,40214,40234,40238,40250,40254,40266,40270,40274,40278,40282,40294,40298,40306,40310,40322,40326,40340,40344,40352,40356,40364,40368,40372,40384,40388,40402,40410,40414,40418,40426,40436,40446,40456,40466,40476,40486,40492,40496,40500,40512,40532,40538,40546],{"__ignoreMap":25},[106,39353,39354,39356],{"class":108,"line":109},[106,39355,30386],{"class":112},[106,39357,30389],{"class":116},[106,39359,39360,39362,39364,39366],{"class":108,"line":28},[106,39361,30731],{"class":112},[106,39363,37908],{"class":116},[106,39365,30386],{"class":112},[106,39367,37913],{"class":116},[106,39369,39370,39372,39374,39376],{"class":108,"line":1172},[106,39371,30731],{"class":112},[106,39373,30734],{"class":116},[106,39375,30386],{"class":112},[106,39377,30739],{"class":116},[106,39379,39380,39382,39384,39386],{"class":108,"line":1187},[106,39381,30731],{"class":112},[106,39383,30751],{"class":116},[106,39385,30386],{"class":112},[106,39387,30756],{"class":116},[106,39389,39390],{"class":108,"line":1193},[106,39391,2392],{"emptyLinePlaceholder":33},[106,39393,39394,39396,39398,39400,39402,39404,39406],{"class":108,"line":1207},[106,39395,14687],{"class":112},[106,39397,37944],{"class":1955},[106,39399,117],{"class":116},[106,39401,30772],{"class":1955},[106,39403,675],{"class":116},[106,39405,30777],{"class":1955},[106,39407,30780],{"class":116},[106,39409,39410,39412,39414],{"class":108,"line":1213},[106,39411,30795],{"class":112},[106,39413,30798],{"class":165},[106,39415,30801],{"class":116},[106,39417,39418,39420,39422,39424,39426,39428,39430,39432],{"class":108,"line":1304},[106,39419,30811],{"class":165},[106,39421,117],{"class":116},[106,39423,37971],{"class":165},[106,39425,12428],{"class":116},[106,39427,30817],{"class":165},[106,39429,30820],{"class":116},[106,39431,30823],{"class":165},[106,39433,1968],{"class":116},[106,39435,39436],{"class":108,"line":1310},[106,39437,37986],{"class":175},[106,39439,39440],{"class":108,"line":1322},[106,39441,37991],{"class":175},[106,39443,39444,39446,39448,39450],{"class":108,"line":1604},[106,39445,30839],{"class":165},[106,39447,37998],{"class":116},[106,39449,162],{"class":112},[106,39451,38003],{"class":116},[106,39453,39454,39456,39458,39460,39462,39464,39466,39468,39470,39472,39474,39476,39478,39480,39482,39484,39486],{"class":108,"line":1609},[106,39455,38008],{"class":116},[106,39457,30850],{"class":5209},[106,39459,162],{"class":112},[106,39461,334],{"class":165},[106,39463,495],{"class":116},[106,39465,30859],{"class":5209},[106,39467,162],{"class":112},[106,39469,320],{"class":165},[106,39471,495],{"class":116},[106,39473,30868],{"class":5209},[106,39475,162],{"class":112},[106,39477,188],{"class":165},[106,39479,495],{"class":116},[106,39481,30877],{"class":5209},[106,39483,162],{"class":112},[106,39485,334],{"class":165},[106,39487,38041],{"class":116},[106,39489,39490],{"class":108,"line":1615},[106,39491,38046],{"class":116},[106,39493,39494,39496,39498,39500,39502,39504,39506,39508,39510,39512,39514,39516,39518,39520,39522,39524,39526],{"class":108,"line":1620},[106,39495,38008],{"class":116},[106,39497,30850],{"class":5209},[106,39499,162],{"class":112},[106,39501,320],{"class":165},[106,39503,495],{"class":116},[106,39505,30859],{"class":5209},[106,39507,162],{"class":112},[106,39509,320],{"class":165},[106,39511,495],{"class":116},[106,39513,30868],{"class":5209},[106,39515,162],{"class":112},[106,39517,188],{"class":165},[106,39519,495],{"class":116},[106,39521,30877],{"class":5209},[106,39523,162],{"class":112},[106,39525,334],{"class":165},[106,39527,38041],{"class":116},[106,39529,39530],{"class":108,"line":1634},[106,39531,38046],{"class":116},[106,39533,39534,39536,39538,39540,39542,39544,39546,39548,39550,39552,39554,39556,39558],{"class":108,"line":1639},[106,39535,38091],{"class":116},[106,39537,30868],{"class":5209},[106,39539,162],{"class":112},[106,39541,194],{"class":165},[106,39543,495],{"class":116},[106,39545,30923],{"class":5209},[106,39547,162],{"class":112},[106,39549,194],{"class":165},[106,39551,495],{"class":116},[106,39553,30877],{"class":5209},[106,39555,162],{"class":112},[106,39557,308],{"class":165},[106,39559,123],{"class":116},[106,39561,39562],{"class":108,"line":1645},[106,39563,38120],{"class":116},[106,39565,39566],{"class":108,"line":1666},[106,39567,38125],{"class":175},[106,39569,39570,39572,39574,39576],{"class":108,"line":1671},[106,39571,30839],{"class":165},[106,39573,38132],{"class":116},[106,39575,162],{"class":112},[106,39577,38003],{"class":116},[106,39579,39580,39582,39584,39586,39588,39590,39592,39594,39596,39598,39600,39602,39604,39606,39608,39610,39612],{"class":108,"line":1685},[106,39581,38008],{"class":116},[106,39583,30850],{"class":5209},[106,39585,162],{"class":112},[106,39587,320],{"class":165},[106,39589,495],{"class":116},[106,39591,30859],{"class":5209},[106,39593,162],{"class":112},[106,39595,32064],{"class":165},[106,39597,495],{"class":116},[106,39599,30868],{"class":5209},[106,39601,162],{"class":112},[106,39603,188],{"class":165},[106,39605,495],{"class":116},[106,39607,30877],{"class":5209},[106,39609,162],{"class":112},[106,39611,334],{"class":165},[106,39613,38041],{"class":116},[106,39615,39616],{"class":108,"line":1690},[106,39617,38046],{"class":116},[106,39619,39620,39622,39624,39626,39628,39630,39632,39634,39636,39638,39640,39642,39644,39646,39648,39650,39652],{"class":108,"line":1719},[106,39621,38008],{"class":116},[106,39623,30850],{"class":5209},[106,39625,162],{"class":112},[106,39627,32064],{"class":165},[106,39629,495],{"class":116},[106,39631,30859],{"class":5209},[106,39633,162],{"class":112},[106,39635,32064],{"class":165},[106,39637,495],{"class":116},[106,39639,30868],{"class":5209},[106,39641,162],{"class":112},[106,39643,188],{"class":165},[106,39645,495],{"class":116},[106,39647,30877],{"class":5209},[106,39649,162],{"class":112},[106,39651,334],{"class":165},[106,39653,38041],{"class":116},[106,39655,39656],{"class":108,"line":1724},[106,39657,38046],{"class":116},[106,39659,39660,39662,39664,39666,39668,39670,39672,39674,39676,39678,39680,39682,39684],{"class":108,"line":1741},[106,39661,38091],{"class":116},[106,39663,30868],{"class":5209},[106,39665,162],{"class":112},[106,39667,194],{"class":165},[106,39669,495],{"class":116},[106,39671,30923],{"class":5209},[106,39673,162],{"class":112},[106,39675,194],{"class":165},[106,39677,495],{"class":116},[106,39679,30877],{"class":5209},[106,39681,162],{"class":112},[106,39683,308],{"class":165},[106,39685,123],{"class":116},[106,39687,39688],{"class":108,"line":1746},[106,39689,38120],{"class":116},[106,39691,39692],{"class":108,"line":1751},[106,39693,38253],{"class":175},[106,39695,39696,39698,39700,39702],{"class":108,"line":1756},[106,39697,30839],{"class":165},[106,39699,38260],{"class":116},[106,39701,162],{"class":112},[106,39703,38003],{"class":116},[106,39705,39706,39708,39710,39712,39714,39716,39718,39720,39722,39724,39726,39728,39730,39732,39734,39736,39738],{"class":108,"line":1770},[106,39707,38008],{"class":116},[106,39709,30850],{"class":5209},[106,39711,162],{"class":112},[106,39713,32064],{"class":165},[106,39715,495],{"class":116},[106,39717,30859],{"class":5209},[106,39719,162],{"class":112},[106,39721,34864],{"class":165},[106,39723,495],{"class":116},[106,39725,30868],{"class":5209},[106,39727,162],{"class":112},[106,39729,188],{"class":165},[106,39731,495],{"class":116},[106,39733,30877],{"class":5209},[106,39735,162],{"class":112},[106,39737,334],{"class":165},[106,39739,38041],{"class":116},[106,39741,39742],{"class":108,"line":1775},[106,39743,38046],{"class":116},[106,39745,39746,39748,39750,39752,39754,39756,39758,39760,39762,39764,39766,39768,39770,39772,39774,39776,39778],{"class":108,"line":2569},[106,39747,38008],{"class":116},[106,39749,30850],{"class":5209},[106,39751,162],{"class":112},[106,39753,34864],{"class":165},[106,39755,495],{"class":116},[106,39757,30859],{"class":5209},[106,39759,162],{"class":112},[106,39761,34864],{"class":165},[106,39763,495],{"class":116},[106,39765,30868],{"class":5209},[106,39767,162],{"class":112},[106,39769,188],{"class":165},[106,39771,495],{"class":116},[106,39773,30877],{"class":5209},[106,39775,162],{"class":112},[106,39777,334],{"class":165},[106,39779,38041],{"class":116},[106,39781,39782],{"class":108,"line":2583},[106,39783,38046],{"class":116},[106,39785,39786,39788,39790,39792,39794,39796,39798,39800,39802,39804,39806,39808,39810,39812,39814,39816,39818],{"class":108,"line":2591},[106,39787,38008],{"class":116},[106,39789,30850],{"class":5209},[106,39791,162],{"class":112},[106,39793,34864],{"class":165},[106,39795,495],{"class":116},[106,39797,30859],{"class":5209},[106,39799,162],{"class":112},[106,39801,34864],{"class":165},[106,39803,495],{"class":116},[106,39805,30868],{"class":5209},[106,39807,162],{"class":112},[106,39809,188],{"class":165},[106,39811,495],{"class":116},[106,39813,30877],{"class":5209},[106,39815,162],{"class":112},[106,39817,334],{"class":165},[106,39819,38041],{"class":116},[106,39821,39822],{"class":108,"line":2596},[106,39823,38046],{"class":116},[106,39825,39826,39828,39830,39832,39834,39836,39838,39840,39842,39844,39846,39848,39850],{"class":108,"line":2602},[106,39827,38091],{"class":116},[106,39829,30868],{"class":5209},[106,39831,162],{"class":112},[106,39833,194],{"class":165},[106,39835,495],{"class":116},[106,39837,30923],{"class":5209},[106,39839,162],{"class":112},[106,39841,194],{"class":165},[106,39843,495],{"class":116},[106,39845,30877],{"class":5209},[106,39847,162],{"class":112},[106,39849,308],{"class":165},[106,39851,123],{"class":116},[106,39853,39854],{"class":108,"line":2608},[106,39855,38120],{"class":116},[106,39857,39858],{"class":108,"line":2613},[106,39859,38421],{"class":175},[106,39861,39862,39864,39866,39868],{"class":108,"line":7941},[106,39863,30839],{"class":165},[106,39865,38428],{"class":116},[106,39867,162],{"class":112},[106,39869,38003],{"class":116},[106,39871,39872,39874,39876,39878,39880,39882,39884,39886,39888,39890,39892,39894,39896,39898,39900,39902,39904],{"class":108,"line":7965},[106,39873,38008],{"class":116},[106,39875,30850],{"class":5209},[106,39877,162],{"class":112},[106,39879,34864],{"class":165},[106,39881,495],{"class":116},[106,39883,30859],{"class":5209},[106,39885,162],{"class":112},[106,39887,38451],{"class":165},[106,39889,495],{"class":116},[106,39891,30868],{"class":5209},[106,39893,162],{"class":112},[106,39895,188],{"class":165},[106,39897,495],{"class":116},[106,39899,30877],{"class":5209},[106,39901,162],{"class":112},[106,39903,334],{"class":165},[106,39905,38041],{"class":116},[106,39907,39908],{"class":108,"line":7970},[106,39909,38046],{"class":116},[106,39911,39912,39914,39916,39918,39920,39922,39924,39926,39928,39930,39932,39934,39936,39938,39940,39942,39944],{"class":108,"line":7976},[106,39913,38008],{"class":116},[106,39915,30850],{"class":5209},[106,39917,162],{"class":112},[106,39919,38451],{"class":165},[106,39921,495],{"class":116},[106,39923,30859],{"class":5209},[106,39925,162],{"class":112},[106,39927,38451],{"class":165},[106,39929,495],{"class":116},[106,39931,30868],{"class":5209},[106,39933,162],{"class":112},[106,39935,188],{"class":165},[106,39937,495],{"class":116},[106,39939,30877],{"class":5209},[106,39941,162],{"class":112},[106,39943,334],{"class":165},[106,39945,38041],{"class":116},[106,39947,39948],{"class":108,"line":8003},[106,39949,38046],{"class":116},[106,39951,39952,39954,39956,39958,39960,39962,39964,39966,39968,39970,39972,39974,39976,39978,39980,39982,39984],{"class":108,"line":8008},[106,39953,38008],{"class":116},[106,39955,30850],{"class":5209},[106,39957,162],{"class":112},[106,39959,38451],{"class":165},[106,39961,495],{"class":116},[106,39963,30859],{"class":5209},[106,39965,162],{"class":112},[106,39967,38451],{"class":165},[106,39969,495],{"class":116},[106,39971,30868],{"class":5209},[106,39973,162],{"class":112},[106,39975,188],{"class":165},[106,39977,495],{"class":116},[106,39979,30877],{"class":5209},[106,39981,162],{"class":112},[106,39983,334],{"class":165},[106,39985,38041],{"class":116},[106,39987,39988],{"class":108,"line":8014},[106,39989,38046],{"class":116},[106,39991,39992,39994,39996,39998,40000,40002,40004,40006,40008,40010,40012,40014,40016],{"class":108,"line":8026},[106,39993,38091],{"class":116},[106,39995,30868],{"class":5209},[106,39997,162],{"class":112},[106,39999,194],{"class":165},[106,40001,495],{"class":116},[106,40003,30923],{"class":5209},[106,40005,162],{"class":112},[106,40007,194],{"class":165},[106,40009,495],{"class":116},[106,40011,30877],{"class":5209},[106,40013,162],{"class":112},[106,40015,308],{"class":165},[106,40017,123],{"class":116},[106,40019,40020],{"class":108,"line":8038},[106,40021,38120],{"class":116},[106,40023,40024],{"class":108,"line":8050},[106,40025,38590],{"class":175},[106,40027,40028,40030,40032,40034],{"class":108,"line":9709},[106,40029,30839],{"class":165},[106,40031,38597],{"class":116},[106,40033,162],{"class":112},[106,40035,38003],{"class":116},[106,40037,40038,40040,40042,40044,40046,40048,40050,40052,40054,40056,40058,40060,40062,40064,40066,40068,40070],{"class":108,"line":9734},[106,40039,38008],{"class":116},[106,40041,30850],{"class":5209},[106,40043,162],{"class":112},[106,40045,38451],{"class":165},[106,40047,495],{"class":116},[106,40049,30859],{"class":5209},[106,40051,162],{"class":112},[106,40053,38451],{"class":165},[106,40055,495],{"class":116},[106,40057,30868],{"class":5209},[106,40059,162],{"class":112},[106,40061,188],{"class":165},[106,40063,495],{"class":116},[106,40065,30877],{"class":5209},[106,40067,162],{"class":112},[106,40069,334],{"class":165},[106,40071,38041],{"class":116},[106,40073,40074],{"class":108,"line":9757},[106,40075,38046],{"class":116},[106,40077,40078,40080,40082,40084,40086,40088,40090,40092,40094,40096,40098,40100,40102,40104,40106,40108,40110],{"class":108,"line":9781},[106,40079,38008],{"class":116},[106,40081,30850],{"class":5209},[106,40083,162],{"class":112},[106,40085,38451],{"class":165},[106,40087,495],{"class":116},[106,40089,30859],{"class":5209},[106,40091,162],{"class":112},[106,40093,38451],{"class":165},[106,40095,495],{"class":116},[106,40097,30868],{"class":5209},[106,40099,162],{"class":112},[106,40101,188],{"class":165},[106,40103,495],{"class":116},[106,40105,30877],{"class":5209},[106,40107,162],{"class":112},[106,40109,334],{"class":165},[106,40111,38041],{"class":116},[106,40113,40114],{"class":108,"line":9786},[106,40115,38046],{"class":116},[106,40117,40118,40120,40122,40124,40126,40128,40130,40132,40134,40136,40138,40140,40142,40144,40146,40148,40150],{"class":108,"line":9791},[106,40119,38008],{"class":116},[106,40121,30850],{"class":5209},[106,40123,162],{"class":112},[106,40125,38451],{"class":165},[106,40127,495],{"class":116},[106,40129,30859],{"class":5209},[106,40131,162],{"class":112},[106,40133,38451],{"class":165},[106,40135,495],{"class":116},[106,40137,30868],{"class":5209},[106,40139,162],{"class":112},[106,40141,188],{"class":165},[106,40143,495],{"class":116},[106,40145,30877],{"class":5209},[106,40147,162],{"class":112},[106,40149,334],{"class":165},[106,40151,38041],{"class":116},[106,40153,40154],{"class":108,"line":9796},[106,40155,38046],{"class":116},[106,40157,40158,40160,40162,40164,40166,40168,40170,40172,40174,40176,40178,40180,40182],{"class":108,"line":9805},[106,40159,38091],{"class":116},[106,40161,30868],{"class":5209},[106,40163,162],{"class":112},[106,40165,194],{"class":165},[106,40167,495],{"class":116},[106,40169,30923],{"class":5209},[106,40171,162],{"class":112},[106,40173,194],{"class":165},[106,40175,495],{"class":116},[106,40177,30877],{"class":5209},[106,40179,162],{"class":112},[106,40181,308],{"class":165},[106,40183,123],{"class":116},[106,40185,40186],{"class":108,"line":9810},[106,40187,38120],{"class":116},[106,40189,40190],{"class":108,"line":9816},[106,40191,38758],{"class":175},[106,40193,40194,40196,40198,40200],{"class":108,"line":9837},[106,40195,30839],{"class":165},[106,40197,38765],{"class":116},[106,40199,162],{"class":112},[106,40201,38003],{"class":116},[106,40203,40204],{"class":108,"line":9843},[106,40205,38774],{"class":175},[106,40207,40208],{"class":108,"line":9857},[106,40209,38779],{"class":175},[106,40211,40212],{"class":108,"line":9863},[106,40213,38784],{"class":116},[106,40215,40216,40218,40220,40222,40224,40226,40228,40230,40232],{"class":108,"line":9890},[106,40217,38789],{"class":116},[106,40219,486],{"class":165},[106,40221,572],{"class":112},[106,40223,486],{"class":165},[106,40225,572],{"class":112},[106,40227,38451],{"class":165},[106,40229,495],{"class":116},[106,40231,34864],{"class":165},[106,40233,38041],{"class":116},[106,40235,40236],{"class":108,"line":9899},[106,40237,38046],{"class":116},[106,40239,40240,40242,40244,40246,40248],{"class":108,"line":9905},[106,40241,38789],{"class":116},[106,40243,34864],{"class":165},[106,40245,495],{"class":116},[106,40247,32064],{"class":165},[106,40249,38041],{"class":116},[106,40251,40252],{"class":108,"line":9913},[106,40253,38046],{"class":116},[106,40255,40256,40258,40260,40262,40264],{"class":108,"line":9918},[106,40257,38789],{"class":116},[106,40259,32064],{"class":165},[106,40261,495],{"class":116},[106,40263,563],{"class":165},[106,40265,123],{"class":116},[106,40267,40268],{"class":108,"line":16597},[106,40269,38120],{"class":116},[106,40271,40272],{"class":108,"line":16603},[106,40273,2392],{"emptyLinePlaceholder":33},[106,40275,40276],{"class":108,"line":16626},[106,40277,38850],{"class":175},[106,40279,40280],{"class":108,"line":16632},[106,40281,38855],{"class":175},[106,40283,40284,40286,40288,40290,40292],{"class":108,"line":16655},[106,40285,3395],{"class":112},[106,40287,38862],{"class":116},[106,40289,26037],{"class":112},[106,40291,38867],{"class":165},[106,40293,38870],{"class":116},[106,40295,40296],{"class":108,"line":16669},[106,40297,38875],{"class":175},[106,40299,40300,40302,40304],{"class":108,"line":16689},[106,40301,4634],{"class":112},[106,40303,38882],{"class":165},[106,40305,38885],{"class":116},[106,40307,40308],{"class":108,"line":16695},[106,40309,38890],{"class":175},[106,40311,40312,40314,40316,40318,40320],{"class":108,"line":16706},[106,40313,38895],{"class":116},[106,40315,38898],{"class":5209},[106,40317,162],{"class":112},[106,40319,38903],{"class":221},[106,40321,123],{"class":116},[106,40323,40324],{"class":108,"line":16729},[106,40325,38910],{"class":175},[106,40327,40328,40330,40332,40334,40336,40338],{"class":108,"line":16751},[106,40329,38915],{"class":112},[106,40331,38918],{"class":116},[106,40333,38921],{"class":112},[106,40335,38924],{"class":112},[106,40337,38927],{"class":165},[106,40339,3731],{"class":116},[106,40341,40342],{"class":108,"line":16756},[106,40343,38934],{"class":175},[106,40345,40346,40348,40350],{"class":108,"line":16762},[106,40347,38939],{"class":116},[106,40349,308],{"class":165},[106,40351,123],{"class":116},[106,40353,40354],{"class":108,"line":16776},[106,40355,38948],{"class":175},[106,40357,40358,40360,40362],{"class":108,"line":16789},[106,40359,38953],{"class":112},[106,40361,38882],{"class":165},[106,40363,38958],{"class":116},[106,40365,40366],{"class":108,"line":16794},[106,40367,38963],{"class":175},[106,40369,40370],{"class":108,"line":16808},[106,40371,38968],{"class":175},[106,40373,40374,40376,40378,40380,40382],{"class":108,"line":16813},[106,40375,38973],{"class":116},[106,40377,308],{"class":165},[106,40379,495],{"class":116},[106,40381,38980],{"class":165},[106,40383,123],{"class":116},[106,40385,40386],{"class":108,"line":16819},[106,40387,38987],{"class":175},[106,40389,40390,40392,40394,40396,40398,40400],{"class":108,"line":16824},[106,40391,38915],{"class":112},[106,40393,38918],{"class":116},[106,40395,38921],{"class":112},[106,40397,38924],{"class":112},[106,40399,38927],{"class":165},[106,40401,3731],{"class":116},[106,40403,40404,40406,40408],{"class":108,"line":16838},[106,40405,38939],{"class":116},[106,40407,308],{"class":165},[106,40409,123],{"class":116},[106,40411,40412],{"class":108,"line":16843},[106,40413,2392],{"emptyLinePlaceholder":33},[106,40415,40416],{"class":108,"line":16848},[106,40417,35159],{"class":175},[106,40419,40420,40422,40424],{"class":108,"line":16862},[106,40421,30795],{"class":112},[106,40423,31087],{"class":1955},[106,40425,31090],{"class":116},[106,40427,40428,40430,40432,40434],{"class":108,"line":16874},[106,40429,31095],{"class":116},[106,40431,162],{"class":112},[106,40433,30817],{"class":165},[106,40435,39036],{"class":116},[106,40437,40438,40440,40442,40444],{"class":108,"line":16879},[106,40439,31095],{"class":116},[106,40441,162],{"class":112},[106,40443,30817],{"class":165},[106,40445,39047],{"class":116},[106,40447,40448,40450,40452,40454],{"class":108,"line":16892},[106,40449,31095],{"class":116},[106,40451,162],{"class":112},[106,40453,30817],{"class":165},[106,40455,39058],{"class":116},[106,40457,40458,40460,40462,40464],{"class":108,"line":16897},[106,40459,31095],{"class":116},[106,40461,162],{"class":112},[106,40463,30817],{"class":165},[106,40465,39069],{"class":116},[106,40467,40468,40470,40472,40474],{"class":108,"line":16902},[106,40469,31095],{"class":116},[106,40471,162],{"class":112},[106,40473,30817],{"class":165},[106,40475,39080],{"class":116},[106,40477,40478,40480,40482,40484],{"class":108,"line":16907},[106,40479,31095],{"class":116},[106,40481,162],{"class":112},[106,40483,30817],{"class":165},[106,40485,39091],{"class":116},[106,40487,40488,40490],{"class":108,"line":16920},[106,40489,14745],{"class":112},[106,40491,31203],{"class":116},[106,40493,40494],{"class":108,"line":16925},[106,40495,2392],{"emptyLinePlaceholder":33},[106,40497,40498],{"class":108,"line":32627},[106,40499,39106],{"class":175},[106,40501,40502,40504,40506,40508,40510],{"class":108,"line":32633},[106,40503,1523],{"class":112},[106,40505,31214],{"class":165},[106,40507,2941],{"class":112},[106,40509,39117],{"class":221},[106,40511,3731],{"class":116},[106,40513,40514,40516,40518,40520,40522,40524,40526,40528,40530],{"class":108,"line":32639},[106,40515,31231],{"class":116},[106,40517,162],{"class":112},[106,40519,30445],{"class":116},[106,40521,31238],{"class":221},[106,40523,1696],{"class":112},[106,40525,31243],{"class":116},[106,40527,1693],{"class":112},[106,40529,30470],{"class":221},[106,40531,123],{"class":116},[106,40533,40534,40536],{"class":108,"line":32645},[106,40535,31293],{"class":165},[106,40537,30479],{"class":116},[106,40539,40540,40542,40544],{"class":108,"line":32651},[106,40541,31283],{"class":116},[106,40543,162],{"class":112},[106,40545,39154],{"class":116},[106,40547,40548,40550,40552,40554,40556,40558,40560,40562],{"class":108,"line":32662},[106,40549,31293],{"class":165},[106,40551,31296],{"class":116},[106,40553,334],{"class":165},[106,40555,495],{"class":116},[106,40557,31495],{"class":165},[106,40559,495],{"class":116},[106,40561,31495],{"class":165},[106,40563,31309],{"class":116},[60,40565,40566],{"start":1172},[63,40567,40568],{},"测试代码",[97,40570,40572],{"className":30372,"code":40571,"language":30374,"meta":25,"style":25},"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",[103,40573,40574,40580,40590,40600,40604,40614,40625,40629,40633,40637,40645,40661,40671,40687,40697,40711,40715,40725,40735,40745,40751,40755,40759,40767,40771,40787,40795,40799,40803,40811,40819,40823,40827,40831,40835,40841,40845,40855,40863,40871,40875,40879,40883,40891,40895,40911,40915,40919,40923,40935,40939,40951,40955,40959,40971,40975,40985,40989,40993,41005,41009,41018,41022,41026,41034,41038,41046,41050,41054,41058,41062,41066,41082,41090,41094,41098,41146,41152,41156,41166,41174,41182,41186,41190,41194,41198,41206,41210,41226,41230,41238,41246],{"__ignoreMap":25},[106,40575,40576,40578],{"class":108,"line":109},[106,40577,30386],{"class":112},[106,40579,30389],{"class":116},[106,40581,40582,40584,40586,40588],{"class":108,"line":28},[106,40583,30386],{"class":112},[106,40585,31409],{"class":116},[106,40587,31377],{"class":112},[106,40589,31414],{"class":116},[106,40591,40592,40594,40596,40598],{"class":108,"line":1172},[106,40593,30731],{"class":112},[106,40595,31392],{"class":116},[106,40597,30386],{"class":112},[106,40599,31397],{"class":116},[106,40601,40602],{"class":108,"line":1187},[106,40603,33916],{"class":175},[106,40605,40606,40608,40610,40612],{"class":108,"line":1193},[106,40607,30731],{"class":112},[106,40609,31362],{"class":116},[106,40611,30386],{"class":112},[106,40613,31367],{"class":116},[106,40615,40616,40618,40620,40622],{"class":108,"line":1207},[106,40617,30731],{"class":112},[106,40619,31908],{"class":116},[106,40621,30386],{"class":112},[106,40623,40624],{"class":165}," VGG16\n",[106,40626,40627],{"class":108,"line":1213},[106,40628,2392],{"emptyLinePlaceholder":33},[106,40630,40631],{"class":108,"line":1304},[106,40632,2392],{"emptyLinePlaceholder":33},[106,40634,40635],{"class":108,"line":1310},[106,40636,33945],{"class":175},[106,40638,40639,40641,40643],{"class":108,"line":1322},[106,40640,31941],{"class":112},[106,40642,33952],{"class":1955},[106,40644,31947],{"class":116},[106,40646,40647,40649,40651,40653,40655,40657,40659],{"class":108,"line":1604},[106,40648,33959],{"class":116},[106,40650,162],{"class":112},[106,40652,31449],{"class":116},[106,40654,31452],{"class":5209},[106,40656,162],{"class":112},[106,40658,31457],{"class":221},[106,40660,31460],{"class":116},[106,40662,40663,40665,40667,40669],{"class":108,"line":1609},[106,40664,33976],{"class":5209},[106,40666,162],{"class":112},[106,40668,33981],{"class":165},[106,40670,31460],{"class":116},[106,40672,40673,40675,40677,40679,40681,40683,40685],{"class":108,"line":1615},[106,40674,33988],{"class":5209},[106,40676,162],{"class":112},[106,40678,31487],{"class":116},[106,40680,31490],{"class":5209},[106,40682,162],{"class":112},[106,40684,31495],{"class":165},[106,40686,31498],{"class":116},[106,40688,40689,40691,40693,40695],{"class":108,"line":1620},[106,40690,34005],{"class":5209},[106,40692,162],{"class":112},[106,40694,31470],{"class":165},[106,40696,123],{"class":116},[106,40698,40699,40701,40703,40705,40707,40709],{"class":108,"line":1634},[106,40700,34016],{"class":116},[106,40702,162],{"class":112},[106,40704,31528],{"class":116},[106,40706,31531],{"class":5209},[106,40708,162],{"class":112},[106,40710,34027],{"class":116},[106,40712,40713],{"class":108,"line":1639},[106,40714,34032],{"class":175},[106,40716,40717,40719,40721,40723],{"class":108,"line":1645},[106,40718,34037],{"class":5209},[106,40720,162],{"class":112},[106,40722,334],{"class":165},[106,40724,31460],{"class":116},[106,40726,40727,40729,40731,40733],{"class":108,"line":1666},[106,40728,34048],{"class":5209},[106,40730,162],{"class":112},[106,40732,31470],{"class":165},[106,40734,31460],{"class":116},[106,40736,40737,40739,40741,40743],{"class":108,"line":1671},[106,40738,34059],{"class":5209},[106,40740,162],{"class":112},[106,40742,308],{"class":165},[106,40744,123],{"class":116},[106,40746,40747,40749],{"class":108,"line":1685},[106,40748,4082],{"class":112},[106,40750,34072],{"class":116},[106,40752,40753],{"class":108,"line":1690},[106,40754,2392],{"emptyLinePlaceholder":33},[106,40756,40757],{"class":108,"line":1719},[106,40758,34081],{"class":175},[106,40760,40761,40763,40765],{"class":108,"line":1724},[106,40762,31941],{"class":112},[106,40764,34088],{"class":1955},[106,40766,34091],{"class":116},[106,40768,40769],{"class":108,"line":1741},[106,40770,34096],{"class":175},[106,40772,40773,40775,40777,40779,40781,40783,40785],{"class":108,"line":1746},[106,40774,31231],{"class":116},[106,40776,162],{"class":112},[106,40778,31238],{"class":221},[106,40780,1696],{"class":112},[106,40782,31243],{"class":116},[106,40784,1693],{"class":112},[106,40786,34113],{"class":221},[106,40788,40789,40791,40793],{"class":108,"line":1751},[106,40790,31283],{"class":116},[106,40792,162],{"class":112},[106,40794,32283],{"class":116},[106,40796,40797],{"class":108,"line":1756},[106,40798,2392],{"emptyLinePlaceholder":33},[106,40800,40801],{"class":108,"line":1770},[106,40802,34130],{"class":175},[106,40804,40805,40807,40809],{"class":108,"line":1775},[106,40806,34135],{"class":116},[106,40808,162],{"class":112},[106,40810,32336],{"class":165},[106,40812,40813,40815,40817],{"class":108,"line":2569},[106,40814,34144],{"class":116},[106,40816,162],{"class":112},[106,40818,3077],{"class":165},[106,40820,40821],{"class":108,"line":2583},[106,40822,2392],{"emptyLinePlaceholder":33},[106,40824,40825],{"class":108,"line":2591},[106,40826,34157],{"class":175},[106,40828,40829],{"class":108,"line":2596},[106,40830,34162],{"class":175},[106,40832,40833],{"class":108,"line":2602},[106,40834,34167],{"class":175},[106,40836,40837,40839],{"class":108,"line":2608},[106,40838,34172],{"class":112},[106,40840,32878],{"class":116},[106,40842,40843],{"class":108,"line":2613},[106,40844,34179],{"class":175},[106,40846,40847,40849,40851,40853],{"class":108,"line":7941},[106,40848,3395],{"class":112},[106,40850,34186],{"class":116},[106,40852,26037],{"class":112},[106,40854,34191],{"class":116},[106,40856,40857,40859,40861],{"class":108,"line":7965},[106,40858,34196],{"class":116},[106,40860,162],{"class":112},[106,40862,34201],{"class":116},[106,40864,40865,40867,40869],{"class":108,"line":7970},[106,40866,34206],{"class":116},[106,40868,162],{"class":112},[106,40870,34211],{"class":116},[106,40872,40873],{"class":108,"line":7976},[106,40874,34216],{"class":175},[106,40876,40877],{"class":108,"line":8003},[106,40878,32869],{"class":116},[106,40880,40881],{"class":108,"line":8008},[106,40882,34225],{"class":175},[106,40884,40885,40887,40889],{"class":108,"line":8014},[106,40886,32654],{"class":116},[106,40888,162],{"class":112},[106,40890,34234],{"class":116},[106,40892,40893],{"class":108,"line":8026},[106,40894,34239],{"class":175},[106,40896,40897,40899,40901,40903,40905,40907,40909],{"class":108,"line":8038},[106,40898,32671],{"class":116},[106,40900,162],{"class":112},[106,40902,32676],{"class":116},[106,40904,32679],{"class":5209},[106,40906,162],{"class":112},[106,40908,334],{"class":165},[106,40910,123],{"class":116},[106,40912,40913],{"class":108,"line":8050},[106,40914,34260],{"class":175},[106,40916,40917],{"class":108,"line":9709},[106,40918,34265],{"class":175},[106,40920,40921],{"class":108,"line":9734},[106,40922,34270],{"class":175},[106,40924,40925,40927,40929,40931,40933],{"class":108,"line":9757},[106,40926,34275],{"class":116},[106,40928,9470],{"class":112},[106,40930,32781],{"class":116},[106,40932,2941],{"class":112},[106,40934,34284],{"class":116},[106,40936,40937],{"class":108,"line":9781},[106,40938,34289],{"class":175},[106,40940,40941,40943,40945,40947,40949],{"class":108,"line":9786},[106,40942,34294],{"class":116},[106,40944,9470],{"class":112},[106,40946,34299],{"class":116},[106,40948,308],{"class":165},[106,40950,123],{"class":116},[106,40952,40953],{"class":108,"line":9791},[106,40954,2392],{"emptyLinePlaceholder":33},[106,40956,40957],{"class":108,"line":9796},[106,40958,34312],{"class":175},[106,40960,40961,40963,40965,40967,40969],{"class":108,"line":9805},[106,40962,34317],{"class":116},[106,40964,162],{"class":112},[106,40966,34322],{"class":116},[106,40968,701],{"class":112},[106,40970,34327],{"class":116},[106,40972,40973],{"class":108,"line":9810},[106,40974,34332],{"class":175},[106,40976,40977,40979,40981,40983],{"class":108,"line":9816},[106,40978,32445],{"class":165},[106,40980,117],{"class":116},[106,40982,34341],{"class":221},[106,40984,34344],{"class":116},[106,40986,40987],{"class":108,"line":9837},[106,40988,2392],{"emptyLinePlaceholder":33},[106,40990,40991],{"class":108,"line":9843},[106,40992,34353],{"class":175},[106,40994,40995,40997,40999,41001,41003],{"class":108,"line":9857},[106,40996,1523],{"class":112},[106,40998,31214],{"class":165},[106,41000,2941],{"class":112},[106,41002,31219],{"class":221},[106,41004,3731],{"class":116},[106,41006,41007],{"class":108,"line":9863},[106,41008,34370],{"class":175},[106,41010,41011,41013,41015],{"class":108,"line":9890},[106,41012,31283],{"class":116},[106,41014,162],{"class":112},[106,41016,41017],{"class":116},"VGG16()\n",[106,41019,41020],{"class":108,"line":9899},[106,41021,34383],{"class":175},[106,41023,41024],{"class":108,"line":9905},[106,41025,34388],{"class":175},[106,41027,41028,41030,41032],{"class":108,"line":9913},[106,41029,34393],{"class":116},[106,41031,34396],{"class":221},[106,41033,30491],{"class":116},[106,41035,41036],{"class":108,"line":9918},[106,41037,34403],{"class":175},[106,41039,41040,41042,41044],{"class":108,"line":16597},[106,41041,34016],{"class":116},[106,41043,162],{"class":112},[106,41045,34412],{"class":116},[106,41047,41048],{"class":108,"line":16603},[106,41049,34417],{"class":175},[106,41051,41052],{"class":108,"line":16626},[106,41053,34422],{"class":116},[106,41055,41056],{"class":108,"line":16632},[106,41057,2392],{"emptyLinePlaceholder":33},[106,41059,41060],{"class":108,"line":16655},[106,41061,34431],{"class":175},[106,41063,41064],{"class":108,"line":16669},[106,41065,34436],{"class":175},[106,41067,41068,41070,41072,41074,41076,41078,41080],{"class":108,"line":16689},[106,41069,31231],{"class":116},[106,41071,162],{"class":112},[106,41073,31238],{"class":221},[106,41075,1696],{"class":112},[106,41077,31243],{"class":116},[106,41079,1693],{"class":112},[106,41081,34113],{"class":221},[106,41083,41084,41086,41088],{"class":108,"line":16695},[106,41085,31283],{"class":116},[106,41087,162],{"class":112},[106,41089,32283],{"class":116},[106,41091,41092],{"class":108,"line":16706},[106,41093,34465],{"class":175},[106,41095,41096],{"class":108,"line":16729},[106,41097,34470],{"class":175},[106,41099,41100,41102,41104,41106,41108,41110,41112,41114,41116,41118,41120,41122,41124,41126,41128,41130,41132,41134,41136,41138,41140,41142,41144],{"class":108,"line":16751},[106,41101,34475],{"class":116},[106,41103,162],{"class":112},[106,41105,1007],{"class":116},[106,41107,34482],{"class":221},[106,41109,495],{"class":116},[106,41111,34487],{"class":221},[106,41113,495],{"class":116},[106,41115,34492],{"class":221},[106,41117,495],{"class":116},[106,41119,34497],{"class":221},[106,41121,495],{"class":116},[106,41123,34502],{"class":221},[106,41125,495],{"class":116},[106,41127,34507],{"class":221},[106,41129,495],{"class":116},[106,41131,34512],{"class":221},[106,41133,495],{"class":116},[106,41135,34517],{"class":221},[106,41137,495],{"class":116},[106,41139,34522],{"class":221},[106,41141,495],{"class":116},[106,41143,34527],{"class":221},[106,41145,33240],{"class":116},[106,41147,41148,41150],{"class":108,"line":16756},[106,41149,34172],{"class":112},[106,41151,32878],{"class":116},[106,41153,41154],{"class":108,"line":16762},[106,41155,34540],{"class":175},[106,41157,41158,41160,41162,41164],{"class":108,"line":16776},[106,41159,3395],{"class":112},[106,41161,34547],{"class":116},[106,41163,26037],{"class":112},[106,41165,34191],{"class":116},[106,41167,41168,41170,41172],{"class":108,"line":16789},[106,41169,32604],{"class":116},[106,41171,162],{"class":112},[106,41173,32609],{"class":116},[106,41175,41176,41178,41180],{"class":108,"line":16794},[106,41177,32619],{"class":116},[106,41179,162],{"class":112},[106,41181,32624],{"class":116},[106,41183,41184],{"class":108,"line":16808},[106,41185,2392],{"emptyLinePlaceholder":33},[106,41187,41188],{"class":108,"line":16813},[106,41189,34576],{"class":175},[106,41191,41192],{"class":108,"line":16819},[106,41193,32869],{"class":116},[106,41195,41196],{"class":108,"line":16824},[106,41197,34585],{"class":175},[106,41199,41200,41202,41204],{"class":108,"line":16838},[106,41201,32654],{"class":116},[106,41203,162],{"class":112},[106,41205,32659],{"class":116},[106,41207,41208],{"class":108,"line":16843},[106,41209,34598],{"class":175},[106,41211,41212,41214,41216,41218,41220,41222,41224],{"class":108,"line":16848},[106,41213,32671],{"class":116},[106,41215,162],{"class":112},[106,41217,32676],{"class":116},[106,41219,32679],{"class":5209},[106,41221,162],{"class":112},[106,41223,334],{"class":165},[106,41225,123],{"class":116},[106,41227,41228],{"class":108,"line":16862},[106,41229,34619],{"class":175},[106,41231,41232,41234,41236],{"class":108,"line":16874},[106,41233,34624],{"class":116},[106,41235,162],{"class":112},[106,41237,34629],{"class":116},[106,41239,41240,41242,41244],{"class":108,"line":16879},[106,41241,34634],{"class":116},[106,41243,162],{"class":112},[106,41245,34639],{"class":116},[106,41247,41248,41250,41252,41254,41256,41258,41260,41262],{"class":108,"line":16892},[106,41249,34644],{"class":165},[106,41251,117],{"class":116},[106,41253,34649],{"class":221},[106,41255,34652],{"class":116},[106,41257,34655],{"class":221},[106,41259,495],{"class":116},[106,41261,34660],{"class":221},[106,41263,34663],{"class":116},[77,41265,41267],{"id":41266},"_23googlenet","2.3.GoogLeNet",[21991,41269,41271],{"id":41270},"_231原理","2.3.1.原理",[60,41273,41274],{},[63,41275,41276],{},"网络结构",[14,41278,41279],{},[23,41280],{"alt":25,"src":41281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-11-03-%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E5%9F%BA%E7%A1%80-023.png",[14,41283,41284],{},"1x1卷积是为了减少通道数（通过填充和步幅来实现的）",[14,41286,41287],{},[23,41288],{"alt":25,"src":41289},"\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,41291,41292],{},[23,41293],{"alt":25,"src":41294},"\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,41296,41297],{},[23,41298],{"alt":25,"src":41299},"\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",[60,41301,41302],{"start":28},[63,41303,41304],{},"1x1卷积的优点",[14,41306,41307],{},[23,41308],{"alt":25,"src":41309},"\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",[60,41311,41312],{"start":1172},[63,41313,41314],{},"全局平均池化层优点",[14,41316,41317],{},[23,41318],{"alt":25,"src":41319},"\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,41321,41322],{},[23,41323],{"alt":25,"src":41324},"\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",[60,41326,41327],{"start":1187},[63,41328,41329],{},"参数详细描述",[14,41331,41332],{},[23,41333],{"alt":25,"src":41334},"\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,41336,41337],{},[23,41338],{"alt":25,"src":41339},"\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,41341,41342],{},[23,41343],{"alt":25,"src":41344},"\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,41346,41347],{},[23,41348],{"alt":25,"src":41349},"\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,41351,41352],{},[23,41353],{"alt":25,"src":41354},"\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,41356,41357],{},[23,41358],{"alt":25,"src":41359},"\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,41361,41362],{},[23,41363],{"alt":25,"src":41364},"\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,41366,41367],{},[23,41368],{"alt":25,"src":41369},"\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,41371,41372],{},[23,41373],{"alt":25,"src":41374},"\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,41376,41377],{},[23,41378],{"alt":25,"src":41379},"\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,41381,41382],{},[23,41383],{"alt":25,"src":41384},"\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,41386,41387],{},[23,41388],{"alt":25,"src":41389},"\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,41391,41392],{},[23,41393],{"alt":25,"src":41394},"\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,41396,41397],{},[23,41398],{"alt":25,"src":41399},"\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,41401,41402],{},[23,41403],{"alt":25,"src":41404},"\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,41406,41407],{},[23,41408],{"alt":25,"src":41409},"\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,41411,41412],{},[23,41413],{"alt":25,"src":41414},"\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,41416,41417],{},[23,41418],{"alt":25,"src":41419},"\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,41421,41422],{},[23,41423],{"alt":25,"src":41424},"\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,41426,41427],{},[23,41428],{"alt":25,"src":41429},"\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,41431,41432],{},[23,41433],{"alt":25,"src":41434},"\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",[21991,41436,41438],{"id":41437},"_232代码实现","2.3.2.代码实现",[60,41440,41441],{},[63,41442,30705],{},[14,41444,41445],{},"根据原理一步一步搭建即可",[97,41447,41449],{"className":30372,"code":41448,"language":30374,"meta":25,"style":25},"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",[103,41450,41451,41457,41467,41477,41481,41498,41507,41522,41532,41537,41570,41575,41612,41659,41664,41700,41747,41752,41757,41792,41824,41828,41836,41852,41876,41901,41922,41927,41942,41946,41950,41955,41972,41977,41986,42001,42012,42056,42060,42088,42092,42103,42131,42135,42172,42176,42204,42208,42219,42255,42287,42315,42319,42330,42364,42396,42428,42461,42495,42523,42527,42538,42571,42603,42617,42621,42634,42638,42643,42655,42663,42685,42690,42695,42700,42705,42710,42715,42729,42737,42746,42759,42774,42783,42787,42795,42806,42817,42828,42839,42850,42856,42860,42865,42877,42897,42906],{"__ignoreMap":25},[106,41452,41453,41455],{"class":108,"line":109},[106,41454,30386],{"class":112},[106,41456,30389],{"class":116},[106,41458,41459,41461,41463,41465],{"class":108,"line":28},[106,41460,30731],{"class":112},[106,41462,30734],{"class":116},[106,41464,30386],{"class":112},[106,41466,30739],{"class":116},[106,41468,41469,41471,41473,41475],{"class":108,"line":1172},[106,41470,30731],{"class":112},[106,41472,30751],{"class":116},[106,41474,30386],{"class":112},[106,41476,30756],{"class":116},[106,41478,41479],{"class":108,"line":1187},[106,41480,2392],{"emptyLinePlaceholder":33},[106,41482,41483,41485,41488,41490,41492,41494,41496],{"class":108,"line":1193},[106,41484,14687],{"class":112},[106,41486,41487],{"class":1955}," Inception",[106,41489,117],{"class":116},[106,41491,30772],{"class":1955},[106,41493,675],{"class":116},[106,41495,30777],{"class":1955},[106,41497,30780],{"class":116},[106,41499,41500,41502,41504],{"class":108,"line":1207},[106,41501,30795],{"class":112},[106,41503,30798],{"class":165},[106,41505,41506],{"class":116},"(self,in_channels,c1,c2,c3,c4):\n",[106,41508,41509,41511,41514,41516,41518,41520],{"class":108,"line":1213},[106,41510,30811],{"class":165},[106,41512,41513],{"class":116},"(Inception,",[106,41515,30817],{"class":165},[106,41517,30820],{"class":116},[106,41519,30823],{"class":165},[106,41521,1968],{"class":116},[106,41523,41524,41526,41528,41530],{"class":108,"line":1304},[106,41525,30839],{"class":165},[106,41527,34765],{"class":116},[106,41529,162],{"class":112},[106,41531,34770],{"class":116},[106,41533,41534],{"class":108,"line":1310},[106,41535,41536],{"class":175},"        # 路线1：定义1*1卷积\n",[106,41538,41539,41541,41544,41546,41548,41550,41552,41555,41557,41559,41562,41564,41566,41568],{"class":108,"line":1322},[106,41540,30839],{"class":165},[106,41542,41543],{"class":116},".p1_1",[106,41545,162],{"class":112},[106,41547,30847],{"class":116},[106,41549,30850],{"class":5209},[106,41551,162],{"class":112},[106,41553,41554],{"class":116},"in_channels,",[106,41556,30859],{"class":5209},[106,41558,162],{"class":112},[106,41560,41561],{"class":116},"c1,",[106,41563,30868],{"class":5209},[106,41565,162],{"class":112},[106,41567,334],{"class":165},[106,41569,123],{"class":116},[106,41571,41572],{"class":108,"line":1604},[106,41573,41574],{"class":175},"        # 路线2：定义1*1卷积和3*3\n",[106,41576,41577,41579,41582,41584,41586,41588,41590,41592,41594,41596,41599,41601,41604,41606,41608,41610],{"class":108,"line":1609},[106,41578,30839],{"class":165},[106,41580,41581],{"class":116},".p2_1",[106,41583,162],{"class":112},[106,41585,30847],{"class":116},[106,41587,30850],{"class":5209},[106,41589,162],{"class":112},[106,41591,41554],{"class":116},[106,41593,30859],{"class":5209},[106,41595,162],{"class":112},[106,41597,41598],{"class":116},"c2[",[106,41600,308],{"class":165},[106,41602,41603],{"class":116},"],",[106,41605,30868],{"class":5209},[106,41607,162],{"class":112},[106,41609,334],{"class":165},[106,41611,123],{"class":116},[106,41613,41614,41616,41619,41621,41623,41625,41627,41629,41631,41633,41635,41637,41639,41641,41643,41645,41647,41649,41651,41653,41655,41657],{"class":108,"line":1615},[106,41615,30839],{"class":165},[106,41617,41618],{"class":116},".p2_2",[106,41620,162],{"class":112},[106,41622,30847],{"class":116},[106,41624,30850],{"class":5209},[106,41626,162],{"class":112},[106,41628,41598],{"class":116},[106,41630,308],{"class":165},[106,41632,41603],{"class":116},[106,41634,30859],{"class":5209},[106,41636,162],{"class":112},[106,41638,41598],{"class":116},[106,41640,334],{"class":165},[106,41642,41603],{"class":116},[106,41644,30868],{"class":5209},[106,41646,162],{"class":112},[106,41648,188],{"class":165},[106,41650,495],{"class":116},[106,41652,30877],{"class":5209},[106,41654,162],{"class":112},[106,41656,334],{"class":165},[106,41658,123],{"class":116},[106,41660,41661],{"class":108,"line":1620},[106,41662,41663],{"class":175},"        # 路线3：定义1*1卷积和5*5\n",[106,41665,41666,41668,41671,41673,41675,41677,41679,41681,41683,41685,41688,41690,41692,41694,41696,41698],{"class":108,"line":1634},[106,41667,30839],{"class":165},[106,41669,41670],{"class":116},".p3_1",[106,41672,162],{"class":112},[106,41674,30847],{"class":116},[106,41676,30850],{"class":5209},[106,41678,162],{"class":112},[106,41680,41554],{"class":116},[106,41682,30859],{"class":5209},[106,41684,162],{"class":112},[106,41686,41687],{"class":116},"c3[",[106,41689,308],{"class":165},[106,41691,41603],{"class":116},[106,41693,30868],{"class":5209},[106,41695,162],{"class":112},[106,41697,334],{"class":165},[106,41699,123],{"class":116},[106,41701,41702,41704,41707,41709,41711,41713,41715,41717,41719,41721,41723,41725,41727,41729,41731,41733,41735,41737,41739,41741,41743,41745],{"class":108,"line":1639},[106,41703,30839],{"class":165},[106,41705,41706],{"class":116},".p3_2",[106,41708,162],{"class":112},[106,41710,30847],{"class":116},[106,41712,30850],{"class":5209},[106,41714,162],{"class":112},[106,41716,41687],{"class":116},[106,41718,308],{"class":165},[106,41720,41603],{"class":116},[106,41722,30859],{"class":5209},[106,41724,162],{"class":112},[106,41726,41687],{"class":116},[106,41728,334],{"class":165},[106,41730,41603],{"class":116},[106,41732,30868],{"class":5209},[106,41734,162],{"class":112},[106,41736,436],{"class":165},[106,41738,495],{"class":116},[106,41740,30877],{"class":5209},[106,41742,162],{"class":112},[106,41744,194],{"class":165},[106,41746,123],{"class":116},[106,41748,41749],{"class":108,"line":1645},[106,41750,41751],{"class":175},"        # 路线4：定义3*3最大池化和1*1卷积\n",[106,41753,41754],{"class":108,"line":1666},[106,41755,41756],{"class":175},"        # 最大池化如果不写步幅的话，默认步幅等于卷积核大小\n",[106,41758,41759,41761,41764,41766,41768,41770,41772,41774,41776,41778,41780,41782,41784,41786,41788,41790],{"class":108,"line":1671},[106,41760,30839],{"class":165},[106,41762,41763],{"class":116},".p4_1",[106,41765,162],{"class":112},[106,41767,34823],{"class":116},[106,41769,30868],{"class":5209},[106,41771,162],{"class":112},[106,41773,188],{"class":165},[106,41775,495],{"class":116},[106,41777,30923],{"class":5209},[106,41779,162],{"class":112},[106,41781,334],{"class":165},[106,41783,495],{"class":116},[106,41785,30877],{"class":5209},[106,41787,162],{"class":112},[106,41789,334],{"class":165},[106,41791,123],{"class":116},[106,41793,41794,41796,41799,41801,41803,41805,41807,41809,41811,41813,41816,41818,41820,41822],{"class":108,"line":1685},[106,41795,30839],{"class":165},[106,41797,41798],{"class":116},".p4_2",[106,41800,162],{"class":112},[106,41802,30847],{"class":116},[106,41804,30850],{"class":5209},[106,41806,162],{"class":112},[106,41808,41554],{"class":116},[106,41810,30859],{"class":5209},[106,41812,162],{"class":112},[106,41814,41815],{"class":116},"c4,",[106,41817,30868],{"class":5209},[106,41819,162],{"class":112},[106,41821,334],{"class":165},[106,41823,123],{"class":116},[106,41825,41826],{"class":108,"line":1690},[106,41827,2392],{"emptyLinePlaceholder":33},[106,41829,41830,41832,41834],{"class":108,"line":1719},[106,41831,30795],{"class":112},[106,41833,31087],{"class":1955},[106,41835,31090],{"class":116},[106,41837,41838,41841,41843,41845,41847,41849],{"class":108,"line":1724},[106,41839,41840],{"class":116},"        p1",[106,41842,162],{"class":112},[106,41844,30817],{"class":165},[106,41846,35178],{"class":116},[106,41848,30817],{"class":165},[106,41850,41851],{"class":116},".p1_1(x))\n",[106,41853,41854,41856,41858,41860,41862,41864,41867,41869,41871,41873],{"class":108,"line":1741},[106,41855,7078],{"class":116},[106,41857,162],{"class":112},[106,41859,30817],{"class":165},[106,41861,35178],{"class":116},[106,41863,30817],{"class":165},[106,41865,41866],{"class":116},".p2_2(",[106,41868,30817],{"class":165},[106,41870,35178],{"class":116},[106,41872,30817],{"class":165},[106,41874,41875],{"class":116},".p2_1(x))))\n",[106,41877,41878,41881,41883,41885,41887,41889,41892,41894,41896,41898],{"class":108,"line":1746},[106,41879,41880],{"class":116},"        p3",[106,41882,162],{"class":112},[106,41884,30817],{"class":165},[106,41886,35178],{"class":116},[106,41888,30817],{"class":165},[106,41890,41891],{"class":116},".p3_2(",[106,41893,30817],{"class":165},[106,41895,35178],{"class":116},[106,41897,30817],{"class":165},[106,41899,41900],{"class":116},".p3_1(x))))\n",[106,41902,41903,41906,41908,41910,41912,41914,41917,41919],{"class":108,"line":1751},[106,41904,41905],{"class":116},"        p4",[106,41907,162],{"class":112},[106,41909,30817],{"class":165},[106,41911,35178],{"class":116},[106,41913,30817],{"class":165},[106,41915,41916],{"class":116},".p4_2(",[106,41918,30817],{"class":165},[106,41920,41921],{"class":116},".p4_1(x)))\n",[106,41923,41924],{"class":108,"line":1756},[106,41925,41926],{"class":175},"        # 在通道维度上连结输出    .cat()函数用于将多个张量在指定维度上进行连接\n",[106,41928,41929,41931,41934,41936,41938,41940],{"class":108,"line":1770},[106,41930,14745],{"class":112},[106,41932,41933],{"class":116}," torch.cat((p1,p2,p3,p4),",[106,41935,32679],{"class":5209},[106,41937,162],{"class":112},[106,41939,334],{"class":165},[106,41941,123],{"class":116},[106,41943,41944],{"class":108,"line":1775},[106,41945,2392],{"emptyLinePlaceholder":33},[106,41947,41948],{"class":108,"line":2569},[106,41949,2392],{"emptyLinePlaceholder":33},[106,41951,41952],{"class":108,"line":2583},[106,41953,41954],{"class":175},"# 搭建GoogLeNet网络\n",[106,41956,41957,41959,41962,41964,41966,41968,41970],{"class":108,"line":2591},[106,41958,14687],{"class":112},[106,41960,41961],{"class":1955}," GoogLeNet",[106,41963,117],{"class":116},[106,41965,30772],{"class":1955},[106,41967,675],{"class":116},[106,41969,30777],{"class":1955},[106,41971,30780],{"class":116},[106,41973,41974],{"class":108,"line":2596},[106,41975,41976],{"class":175},"    # 必须把Inception导入到里边\n",[106,41978,41979,41981,41983],{"class":108,"line":2602},[106,41980,30795],{"class":112},[106,41982,30798],{"class":165},[106,41984,41985],{"class":116},"(self,Inception):\n",[106,41987,41988,41990,41993,41995,41997,41999],{"class":108,"line":2608},[106,41989,30811],{"class":165},[106,41991,41992],{"class":116},"(GoogLeNet,",[106,41994,30817],{"class":165},[106,41996,30820],{"class":116},[106,41998,30823],{"class":165},[106,42000,1968],{"class":116},[106,42002,42003,42005,42008,42010],{"class":108,"line":2613},[106,42004,30839],{"class":165},[106,42006,42007],{"class":116},".b1",[106,42009,162],{"class":112},[106,42011,38003],{"class":116},[106,42013,42014,42016,42018,42020,42022,42024,42026,42028,42030,42032,42034,42036,42038,42040,42042,42044,42046,42048,42050,42052,42054],{"class":108,"line":7941},[106,42015,38008],{"class":116},[106,42017,30850],{"class":5209},[106,42019,162],{"class":112},[106,42021,334],{"class":165},[106,42023,495],{"class":116},[106,42025,30859],{"class":5209},[106,42027,162],{"class":112},[106,42029,320],{"class":165},[106,42031,495],{"class":116},[106,42033,30868],{"class":5209},[106,42035,162],{"class":112},[106,42037,486],{"class":165},[106,42039,495],{"class":116},[106,42041,30923],{"class":5209},[106,42043,162],{"class":112},[106,42045,194],{"class":165},[106,42047,495],{"class":116},[106,42049,30877],{"class":5209},[106,42051,162],{"class":112},[106,42053,188],{"class":165},[106,42055,38041],{"class":116},[106,42057,42058],{"class":108,"line":7965},[106,42059,38046],{"class":116},[106,42061,42062,42064,42066,42068,42070,42072,42074,42076,42078,42080,42082,42084,42086],{"class":108,"line":7970},[106,42063,38091],{"class":116},[106,42065,30868],{"class":5209},[106,42067,162],{"class":112},[106,42069,188],{"class":165},[106,42071,495],{"class":116},[106,42073,30923],{"class":5209},[106,42075,162],{"class":112},[106,42077,194],{"class":165},[106,42079,495],{"class":116},[106,42081,30877],{"class":5209},[106,42083,162],{"class":112},[106,42085,334],{"class":165},[106,42087,123],{"class":116},[106,42089,42090],{"class":108,"line":7976},[106,42091,38120],{"class":116},[106,42093,42094,42096,42099,42101],{"class":108,"line":8003},[106,42095,30839],{"class":165},[106,42097,42098],{"class":116},".b2",[106,42100,162],{"class":112},[106,42102,38003],{"class":116},[106,42104,42105,42107,42109,42111,42113,42115,42117,42119,42121,42123,42125,42127,42129],{"class":108,"line":8008},[106,42106,38008],{"class":116},[106,42108,30850],{"class":5209},[106,42110,162],{"class":112},[106,42112,320],{"class":165},[106,42114,495],{"class":116},[106,42116,30859],{"class":5209},[106,42118,162],{"class":112},[106,42120,320],{"class":165},[106,42122,495],{"class":116},[106,42124,30868],{"class":5209},[106,42126,162],{"class":112},[106,42128,334],{"class":165},[106,42130,38041],{"class":116},[106,42132,42133],{"class":108,"line":8014},[106,42134,38046],{"class":116},[106,42136,42137,42139,42141,42143,42145,42147,42149,42151,42154,42156,42158,42160,42162,42164,42166,42168,42170],{"class":108,"line":8026},[106,42138,38008],{"class":116},[106,42140,30850],{"class":5209},[106,42142,162],{"class":112},[106,42144,320],{"class":165},[106,42146,495],{"class":116},[106,42148,30859],{"class":5209},[106,42150,162],{"class":112},[106,42152,42153],{"class":165},"192",[106,42155,495],{"class":116},[106,42157,30868],{"class":5209},[106,42159,162],{"class":112},[106,42161,188],{"class":165},[106,42163,495],{"class":116},[106,42165,30877],{"class":5209},[106,42167,162],{"class":112},[106,42169,334],{"class":165},[106,42171,38041],{"class":116},[106,42173,42174],{"class":108,"line":8038},[106,42175,38046],{"class":116},[106,42177,42178,42180,42182,42184,42186,42188,42190,42192,42194,42196,42198,42200,42202],{"class":108,"line":8050},[106,42179,38091],{"class":116},[106,42181,30868],{"class":5209},[106,42183,162],{"class":112},[106,42185,188],{"class":165},[106,42187,495],{"class":116},[106,42189,30923],{"class":5209},[106,42191,162],{"class":112},[106,42193,194],{"class":165},[106,42195,495],{"class":116},[106,42197,30877],{"class":5209},[106,42199,162],{"class":112},[106,42201,334],{"class":165},[106,42203,123],{"class":116},[106,42205,42206],{"class":108,"line":9709},[106,42207,38120],{"class":116},[106,42209,42210,42212,42215,42217],{"class":108,"line":9734},[106,42211,30839],{"class":165},[106,42213,42214],{"class":116},".b3",[106,42216,162],{"class":112},[106,42218,38003],{"class":116},[106,42220,42221,42224,42226,42228,42230,42233,42235,42237,42239,42242,42244,42246,42248,42251,42253],{"class":108,"line":9757},[106,42222,42223],{"class":116},"            Inception(",[106,42225,42153],{"class":165},[106,42227,495],{"class":116},[106,42229,320],{"class":165},[106,42231,42232],{"class":116},",(",[106,42234,326],{"class":165},[106,42236,495],{"class":116},[106,42238,32064],{"class":165},[106,42240,42241],{"class":116},"),(",[106,42243,718],{"class":165},[106,42245,495],{"class":116},[106,42247,314],{"class":165},[106,42249,42250],{"class":116},"),",[106,42252,314],{"class":165},[106,42254,38041],{"class":116},[106,42256,42257,42259,42261,42263,42265,42267,42269,42271,42273,42275,42277,42279,42281,42283,42285],{"class":108,"line":9781},[106,42258,42223],{"class":116},[106,42260,34864],{"class":165},[106,42262,495],{"class":116},[106,42264,32064],{"class":165},[106,42266,42232],{"class":116},[106,42268,32064],{"class":165},[106,42270,495],{"class":116},[106,42272,42153],{"class":165},[106,42274,42241],{"class":116},[106,42276,314],{"class":165},[106,42278,495],{"class":116},[106,42280,326],{"class":165},[106,42282,42250],{"class":116},[106,42284,320],{"class":165},[106,42286,38041],{"class":116},[106,42288,42289,42291,42293,42295,42297,42299,42301,42303,42305,42307,42309,42311,42313],{"class":108,"line":9786},[106,42290,38091],{"class":116},[106,42292,30868],{"class":5209},[106,42294,162],{"class":112},[106,42296,188],{"class":165},[106,42298,495],{"class":116},[106,42300,30923],{"class":5209},[106,42302,162],{"class":112},[106,42304,194],{"class":165},[106,42306,495],{"class":116},[106,42308,30877],{"class":5209},[106,42310,162],{"class":112},[106,42312,334],{"class":165},[106,42314,123],{"class":116},[106,42316,42317],{"class":108,"line":9791},[106,42318,38120],{"class":116},[106,42320,42321,42323,42326,42328],{"class":108,"line":9796},[106,42322,30839],{"class":165},[106,42324,42325],{"class":116},".b4",[106,42327,162],{"class":112},[106,42329,38003],{"class":116},[106,42331,42332,42334,42337,42339,42341,42343,42345,42347,42350,42352,42354,42356,42358,42360,42362],{"class":108,"line":9805},[106,42333,42223],{"class":116},[106,42335,42336],{"class":165},"480",[106,42338,495],{"class":116},[106,42340,42153],{"class":165},[106,42342,42232],{"class":116},[106,42344,326],{"class":165},[106,42346,495],{"class":116},[106,42348,42349],{"class":165},"208",[106,42351,42241],{"class":116},[106,42353,718],{"class":165},[106,42355,495],{"class":116},[106,42357,724],{"class":165},[106,42359,42250],{"class":116},[106,42361,320],{"class":165},[106,42363,38041],{"class":116},[106,42365,42366,42368,42370,42372,42374,42376,42378,42380,42382,42384,42386,42388,42390,42392,42394],{"class":108,"line":9810},[106,42367,42223],{"class":116},[106,42369,38451],{"class":165},[106,42371,495],{"class":116},[106,42373,21041],{"class":165},[106,42375,42232],{"class":116},[106,42377,735],{"class":165},[106,42379,495],{"class":116},[106,42381,31495],{"class":165},[106,42383,42241],{"class":116},[106,42385,917],{"class":165},[106,42387,495],{"class":116},[106,42389,320],{"class":165},[106,42391,42250],{"class":116},[106,42393,320],{"class":165},[106,42395,38041],{"class":116},[106,42397,42398,42400,42402,42404,42406,42408,42410,42412,42414,42416,42418,42420,42422,42424,42426],{"class":108,"line":9816},[106,42399,42223],{"class":116},[106,42401,38451],{"class":165},[106,42403,495],{"class":116},[106,42405,32064],{"class":165},[106,42407,42232],{"class":116},[106,42409,32064],{"class":165},[106,42411,495],{"class":116},[106,42413,34864],{"class":165},[106,42415,42241],{"class":116},[106,42417,917],{"class":165},[106,42419,495],{"class":116},[106,42421,320],{"class":165},[106,42423,42250],{"class":116},[106,42425,320],{"class":165},[106,42427,38041],{"class":116},[106,42429,42430,42432,42434,42436,42438,42440,42442,42444,42447,42449,42451,42453,42455,42457,42459],{"class":108,"line":9837},[106,42431,42223],{"class":116},[106,42433,38451],{"class":165},[106,42435,495],{"class":116},[106,42437,735],{"class":165},[106,42439,42232],{"class":116},[106,42441,32064],{"class":165},[106,42443,495],{"class":116},[106,42445,42446],{"class":165},"288",[106,42448,42241],{"class":116},[106,42450,314],{"class":165},[106,42452,495],{"class":116},[106,42454,320],{"class":165},[106,42456,42250],{"class":116},[106,42458,320],{"class":165},[106,42460,38041],{"class":116},[106,42462,42463,42465,42468,42470,42472,42474,42476,42478,42481,42483,42485,42487,42489,42491,42493],{"class":108,"line":9843},[106,42464,42223],{"class":116},[106,42466,42467],{"class":165},"528",[106,42469,495],{"class":116},[106,42471,34864],{"class":165},[106,42473,42232],{"class":116},[106,42475,21041],{"class":165},[106,42477,495],{"class":116},[106,42479,42480],{"class":165},"320",[106,42482,42241],{"class":116},[106,42484,314],{"class":165},[106,42486,495],{"class":116},[106,42488,32064],{"class":165},[106,42490,42250],{"class":116},[106,42492,32064],{"class":165},[106,42494,38041],{"class":116},[106,42496,42497,42499,42501,42503,42505,42507,42509,42511,42513,42515,42517,42519,42521],{"class":108,"line":9857},[106,42498,38091],{"class":116},[106,42500,30868],{"class":5209},[106,42502,162],{"class":112},[106,42504,188],{"class":165},[106,42506,495],{"class":116},[106,42508,30923],{"class":5209},[106,42510,162],{"class":112},[106,42512,194],{"class":165},[106,42514,495],{"class":116},[106,42516,30877],{"class":5209},[106,42518,162],{"class":112},[106,42520,334],{"class":165},[106,42522,123],{"class":116},[106,42524,42525],{"class":108,"line":9863},[106,42526,38120],{"class":116},[106,42528,42529,42531,42534,42536],{"class":108,"line":9890},[106,42530,30839],{"class":165},[106,42532,42533],{"class":116},".b5",[106,42535,162],{"class":112},[106,42537,38003],{"class":116},[106,42539,42540,42542,42545,42547,42549,42551,42553,42555,42557,42559,42561,42563,42565,42567,42569],{"class":108,"line":9899},[106,42541,42223],{"class":116},[106,42543,42544],{"class":165},"832",[106,42546,495],{"class":116},[106,42548,34864],{"class":165},[106,42550,42232],{"class":116},[106,42552,21041],{"class":165},[106,42554,495],{"class":116},[106,42556,42480],{"class":165},[106,42558,42241],{"class":116},[106,42560,314],{"class":165},[106,42562,495],{"class":116},[106,42564,32064],{"class":165},[106,42566,42250],{"class":116},[106,42568,32064],{"class":165},[106,42570,38041],{"class":116},[106,42572,42573,42575,42577,42579,42581,42583,42585,42587,42589,42591,42593,42595,42597,42599,42601],{"class":108,"line":9905},[106,42574,42223],{"class":116},[106,42576,42544],{"class":165},[106,42578,495],{"class":116},[106,42580,34934],{"class":165},[106,42582,42232],{"class":116},[106,42584,42153],{"class":165},[106,42586,495],{"class":116},[106,42588,34934],{"class":165},[106,42590,42241],{"class":116},[106,42592,724],{"class":165},[106,42594,495],{"class":116},[106,42596,32064],{"class":165},[106,42598,42250],{"class":116},[106,42600,32064],{"class":165},[106,42602,38041],{"class":116},[106,42604,42605,42608,42610,42612,42614],{"class":108,"line":9913},[106,42606,42607],{"class":116},"            nn.AdaptiveAvgPool2d((",[106,42609,334],{"class":165},[106,42611,495],{"class":116},[106,42613,334],{"class":165},[106,42615,42616],{"class":116},")),\n",[106,42618,42619],{"class":108,"line":9918},[106,42620,38784],{"class":116},[106,42622,42623,42625,42628,42630,42632],{"class":108,"line":16597},[106,42624,38789],{"class":116},[106,42626,42627],{"class":165},"1024",[106,42629,495],{"class":116},[106,42631,563],{"class":165},[106,42633,123],{"class":116},[106,42635,42636],{"class":108,"line":16603},[106,42637,38120],{"class":116},[106,42639,42640],{"class":108,"line":16626},[106,42641,42642],{"class":175},"        # 对模型参数初始化\n",[106,42644,42645,42647,42649,42651,42653],{"class":108,"line":16632},[106,42646,3395],{"class":112},[106,42648,38862],{"class":116},[106,42650,26037],{"class":112},[106,42652,38867],{"class":165},[106,42654,38870],{"class":116},[106,42656,42657,42659,42661],{"class":108,"line":16655},[106,42658,4634],{"class":112},[106,42660,38882],{"class":165},[106,42662,38885],{"class":116},[106,42664,42665,42667,42670,42672,42675,42677,42679,42681,42683],{"class":108,"line":16669},[106,42666,38895],{"class":116},[106,42668,42669],{"class":5209},"mode",[106,42671,162],{"class":112},[106,42673,42674],{"class":221},"'fan_out'",[106,42676,495],{"class":116},[106,42678,38898],{"class":5209},[106,42680,162],{"class":112},[106,42682,38903],{"class":221},[106,42684,123],{"class":116},[106,42686,42687],{"class":108,"line":16689},[106,42688,42689],{"class":175},"                # ① m.weight要初始化的权重（比如Conv2d或Linear的权重矩阵）。\n",[106,42691,42692],{"class":108,"line":16695},[106,42693,42694],{"class":175},"                # ② mode = 'fan_out'决定使用的fan值：\n",[106,42696,42697],{"class":108,"line":16706},[106,42698,42699],{"class":175},"                # fan_in：输入通道数 × kernel大小（用于保持前向传播稳定）\n",[106,42701,42702],{"class":108,"line":16729},[106,42703,42704],{"class":175},"                # fan_out：输出通道数 × kernel大小（用于保持反向传播稳定）\n",[106,42706,42707],{"class":108,"line":16751},[106,42708,42709],{"class":175},"                # fan_out常用于残差网络ResNet，因为让反向传播更平稳。\n",[106,42711,42712],{"class":108,"line":16756},[106,42713,42714],{"class":175},"                # ③ nonlinearity = 'relu'告诉PyTorch你后面用的是ReLU，它会自动使用ReLU对应的gain系数\n",[106,42716,42717,42719,42721,42723,42725,42727],{"class":108,"line":16762},[106,42718,38915],{"class":112},[106,42720,38918],{"class":116},[106,42722,38921],{"class":112},[106,42724,38924],{"class":112},[106,42726,38927],{"class":165},[106,42728,3731],{"class":116},[106,42730,42731,42733,42735],{"class":108,"line":16776},[106,42732,38939],{"class":116},[106,42734,308],{"class":165},[106,42736,123],{"class":116},[106,42738,42739,42742,42744],{"class":108,"line":16789},[106,42740,42741],{"class":112},"                elif",[106,42743,38882],{"class":165},[106,42745,38958],{"class":116},[106,42747,42748,42751,42753,42755,42757],{"class":108,"line":16794},[106,42749,42750],{"class":116},"                    nn.init.normal_(m.weight,",[106,42752,308],{"class":165},[106,42754,495],{"class":116},[106,42756,38980],{"class":165},[106,42758,123],{"class":116},[106,42760,42761,42764,42766,42768,42770,42772],{"class":108,"line":16808},[106,42762,42763],{"class":112},"                    if",[106,42765,38918],{"class":116},[106,42767,38921],{"class":112},[106,42769,38924],{"class":112},[106,42771,38927],{"class":165},[106,42773,3731],{"class":116},[106,42775,42776,42779,42781],{"class":108,"line":16813},[106,42777,42778],{"class":116},"                        nn.init.constant_(m.bias,",[106,42780,308],{"class":165},[106,42782,123],{"class":116},[106,42784,42785],{"class":108,"line":16819},[106,42786,35159],{"class":175},[106,42788,42789,42791,42793],{"class":108,"line":16824},[106,42790,30795],{"class":112},[106,42792,31087],{"class":1955},[106,42794,31090],{"class":116},[106,42796,42797,42799,42801,42803],{"class":108,"line":16838},[106,42798,31095],{"class":116},[106,42800,162],{"class":112},[106,42802,30817],{"class":165},[106,42804,42805],{"class":116},".b1(x)\n",[106,42807,42808,42810,42812,42814],{"class":108,"line":16843},[106,42809,31095],{"class":116},[106,42811,162],{"class":112},[106,42813,30817],{"class":165},[106,42815,42816],{"class":116},".b2(x)\n",[106,42818,42819,42821,42823,42825],{"class":108,"line":16848},[106,42820,31095],{"class":116},[106,42822,162],{"class":112},[106,42824,30817],{"class":165},[106,42826,42827],{"class":116},".b3(x)\n",[106,42829,42830,42832,42834,42836],{"class":108,"line":16862},[106,42831,31095],{"class":116},[106,42833,162],{"class":112},[106,42835,30817],{"class":165},[106,42837,42838],{"class":116},".b4(x)\n",[106,42840,42841,42843,42845,42847],{"class":108,"line":16874},[106,42842,31095],{"class":116},[106,42844,162],{"class":112},[106,42846,30817],{"class":165},[106,42848,42849],{"class":116},".b5(x)\n",[106,42851,42852,42854],{"class":108,"line":16879},[106,42853,14745],{"class":112},[106,42855,31203],{"class":116},[106,42857,42858],{"class":108,"line":16892},[106,42859,2392],{"emptyLinePlaceholder":33},[106,42861,42862],{"class":108,"line":16897},[106,42863,42864],{"class":175},"# 模型展示\n",[106,42866,42867,42869,42871,42873,42875],{"class":108,"line":16902},[106,42868,1523],{"class":112},[106,42870,31214],{"class":165},[106,42872,2941],{"class":112},[106,42874,31219],{"class":221},[106,42876,3731],{"class":116},[106,42878,42879,42881,42883,42885,42887,42889,42891,42893,42895],{"class":108,"line":16907},[106,42880,31231],{"class":116},[106,42882,162],{"class":112},[106,42884,30445],{"class":116},[106,42886,31238],{"class":221},[106,42888,1696],{"class":112},[106,42890,31243],{"class":116},[106,42892,1693],{"class":112},[106,42894,30470],{"class":221},[106,42896,123],{"class":116},[106,42898,42899,42901,42903],{"class":108,"line":16920},[106,42900,31283],{"class":116},[106,42902,162],{"class":112},[106,42904,42905],{"class":116},"GoogLeNet(Inception).to(device)\n",[106,42907,42908,42910,42912,42914,42916,42918,42920,42922],{"class":108,"line":16925},[106,42909,31293],{"class":165},[106,42911,31296],{"class":116},[106,42913,334],{"class":165},[106,42915,495],{"class":116},[106,42917,31495],{"class":165},[106,42919,495],{"class":116},[106,42921,31495],{"class":165},[106,42923,31309],{"class":116},[60,42925,42926],{"start":28},[63,42927,39177],{},[97,42929,42931],{"className":30372,"code":42930,"language":30374,"meta":25,"style":25},"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",[103,42932,42933,42939,42945,42955,42961,42971,42981,42991,43001,43011,43015,43026,43036,43040,43044,43048,43056,43068,43078,43094,43104,43136,43150,43160,43170,43174,43184,43198,43208,43218,43228,43234,43238,43242,43246,43250,43254,43262,43282,43286,43290,43294,43298,43302,43318,43322,43326,43334,43338,43342,43350,43354,43358,43362,43370,43374,43378,43382,43386,43394,43398,43406,43410,43418,43422,43430,43434,43442,43446,43450,43458,43462,43466,43470,43482,43506,43520,43524,43528,43532,43540,43544,43552,43556,43564,43568,43576,43580,43588,43592,43600,43604,43616,43620,43628,43632,43640,43644,43648,43652,43656,43664,43668,43684,43688,43696,43700,43704,43708,43712,43716,43720,43724,43740,43744,43756,43760,43772,43776,43788,43792,43800,43804,43812,43816,43820,43824,43830,43834,43842,43846,43862,43866,43874,43878,43894,43906,43910,43922,43926,43930,43938,43942,43946,43954,43958,43966,43970,43978,43982,43986,44028,44070,44074,44078,44094,44098,44114,44118,44122,44130,44134,44138,44150,44188,44192,44196,44204,44208,44222,44232,44238,44244,44250,44256,44260,44264,44270,44274,44278,44286,44290,44308,44312,44316,44320,44336,44340,44344,44348,44352,44356,44376,44396,44400,44404,44408,44416,44424,44428,44444,44464,44484,44488,44492,44500,44508,44512,44516,44520,44532,44536,44546,44554,44571],{"__ignoreMap":25},[106,42934,42935,42937],{"class":108,"line":109},[106,42936,30386],{"class":112},[106,42938,31816],{"class":116},[106,42940,42941,42943],{"class":108,"line":28},[106,42942,30386],{"class":112},[106,42944,31823],{"class":116},[106,42946,42947,42949,42951,42953],{"class":108,"line":1172},[106,42948,30386],{"class":112},[106,42950,31834],{"class":116},[106,42952,31377],{"class":112},[106,42954,31839],{"class":116},[106,42956,42957,42959],{"class":108,"line":1187},[106,42958,30386],{"class":112},[106,42960,30389],{"class":116},[106,42962,42963,42965,42967,42969],{"class":108,"line":1193},[106,42964,30731],{"class":112},[106,42966,31409],{"class":116},[106,42968,30386],{"class":112},[106,42970,31856],{"class":116},[106,42972,42973,42975,42977,42979],{"class":108,"line":1207},[106,42974,30731],{"class":112},[106,42976,31362],{"class":116},[106,42978,30386],{"class":112},[106,42980,31367],{"class":116},[106,42982,42983,42985,42987,42989],{"class":108,"line":1213},[106,42984,30731],{"class":112},[106,42986,31392],{"class":116},[106,42988,30386],{"class":112},[106,42990,31397],{"class":116},[106,42992,42993,42995,42997,42999],{"class":108,"line":1304},[106,42994,30386],{"class":112},[106,42996,31409],{"class":116},[106,42998,31377],{"class":112},[106,43000,31414],{"class":116},[106,43002,43003,43005,43007,43009],{"class":108,"line":1310},[106,43004,30386],{"class":112},[106,43006,31426],{"class":116},[106,43008,31377],{"class":112},[106,43010,31431],{"class":116},[106,43012,43013],{"class":108,"line":1322},[106,43014,31901],{"class":175},[106,43016,43017,43019,43021,43023],{"class":108,"line":1604},[106,43018,30731],{"class":112},[106,43020,31908],{"class":116},[106,43022,30386],{"class":112},[106,43024,43025],{"class":116}," GoogLeNet, Inception\n",[106,43027,43028,43030,43032,43034],{"class":108,"line":1609},[106,43029,30731],{"class":112},[106,43031,30734],{"class":116},[106,43033,30386],{"class":112},[106,43035,30739],{"class":116},[106,43037,43038],{"class":108,"line":1615},[106,43039,2392],{"emptyLinePlaceholder":33},[106,43041,43042],{"class":108,"line":1620},[106,43043,2392],{"emptyLinePlaceholder":33},[106,43045,43046],{"class":108,"line":1634},[106,43047,31936],{"class":175},[106,43049,43050,43052,43054],{"class":108,"line":1639},[106,43051,31941],{"class":112},[106,43053,31944],{"class":1955},[106,43055,31947],{"class":116},[106,43057,43058,43060,43062,43064,43066],{"class":108,"line":1645},[106,43059,31952],{"class":116},[106,43061,162],{"class":112},[106,43063,31449],{"class":116},[106,43065,31457],{"class":221},[106,43067,31460],{"class":116},[106,43069,43070,43072,43074,43076],{"class":108,"line":1666},[106,43071,31965],{"class":5209},[106,43073,162],{"class":112},[106,43075,31470],{"class":165},[106,43077,31460],{"class":116},[106,43079,43080,43082,43084,43086,43088,43090,43092],{"class":108,"line":1671},[106,43081,31976],{"class":5209},[106,43083,162],{"class":112},[106,43085,31487],{"class":116},[106,43087,31490],{"class":5209},[106,43089,162],{"class":112},[106,43091,35443],{"class":165},[106,43093,31498],{"class":116},[106,43095,43096,43098,43100,43102],{"class":108,"line":1685},[106,43097,31993],{"class":5209},[106,43099,162],{"class":112},[106,43101,31470],{"class":165},[106,43103,123],{"class":116},[106,43105,43106,43108,43110,43112,43114,43116,43118,43120,43122,43124,43126,43128,43130,43132,43134],{"class":108,"line":1690},[106,43107,32004],{"class":116},[106,43109,162],{"class":112},[106,43111,32009],{"class":116},[106,43113,32012],{"class":165},[106,43115,117],{"class":116},[106,43117,32017],{"class":165},[106,43119,572],{"class":112},[106,43121,7351],{"class":165},[106,43123,32024],{"class":116},[106,43125,32012],{"class":165},[106,43127,117],{"class":116},[106,43129,32031],{"class":165},[106,43131,572],{"class":112},[106,43133,7351],{"class":165},[106,43135,32038],{"class":116},[106,43137,43138,43140,43142,43144,43146,43148],{"class":108,"line":1719},[106,43139,32043],{"class":116},[106,43141,162],{"class":112},[106,43143,32048],{"class":116},[106,43145,31531],{"class":5209},[106,43147,162],{"class":112},[106,43149,31536],{"class":116},[106,43151,43152,43154,43156,43158],{"class":108,"line":1724},[106,43153,32059],{"class":5209},[106,43155,162],{"class":112},[106,43157,314],{"class":165},[106,43159,31460],{"class":116},[106,43161,43162,43164,43166,43168],{"class":108,"line":1741},[106,43163,32071],{"class":5209},[106,43165,162],{"class":112},[106,43167,31470],{"class":165},[106,43169,31460],{"class":116},[106,43171,43172],{"class":108,"line":1746},[106,43173,32082],{"class":175},[106,43175,43176,43178,43180,43182],{"class":108,"line":1751},[106,43177,32087],{"class":5209},[106,43179,162],{"class":112},[106,43181,512],{"class":165},[106,43183,123],{"class":116},[106,43185,43186,43188,43190,43192,43194,43196],{"class":108,"line":1756},[106,43187,32098],{"class":116},[106,43189,162],{"class":112},[106,43191,31528],{"class":116},[106,43193,31531],{"class":5209},[106,43195,162],{"class":112},[106,43197,32109],{"class":116},[106,43199,43200,43202,43204,43206],{"class":108,"line":1770},[106,43201,32114],{"class":5209},[106,43203,162],{"class":112},[106,43205,314],{"class":165},[106,43207,31460],{"class":116},[106,43209,43210,43212,43214,43216],{"class":108,"line":1775},[106,43211,32125],{"class":5209},[106,43213,162],{"class":112},[106,43215,31470],{"class":165},[106,43217,31460],{"class":116},[106,43219,43220,43222,43224,43226],{"class":108,"line":2569},[106,43221,32136],{"class":5209},[106,43223,162],{"class":112},[106,43225,512],{"class":165},[106,43227,123],{"class":116},[106,43229,43230,43232],{"class":108,"line":2583},[106,43231,4082],{"class":112},[106,43233,32149],{"class":116},[106,43235,43236],{"class":108,"line":2591},[106,43237,2392],{"emptyLinePlaceholder":33},[106,43239,43240],{"class":108,"line":2596},[106,43241,32158],{"class":175},[106,43243,43244],{"class":108,"line":2602},[106,43245,32163],{"class":175},[106,43247,43248],{"class":108,"line":2608},[106,43249,2392],{"emptyLinePlaceholder":33},[106,43251,43252],{"class":108,"line":2613},[106,43253,32172],{"class":175},[106,43255,43256,43258,43260],{"class":108,"line":7941},[106,43257,31941],{"class":112},[106,43259,32179],{"class":1955},[106,43261,32182],{"class":116},[106,43263,43264,43266,43268,43270,43272,43274,43276,43278,43280],{"class":108,"line":7965},[106,43265,31231],{"class":116},[106,43267,162],{"class":112},[106,43269,30445],{"class":116},[106,43271,31238],{"class":221},[106,43273,1696],{"class":112},[106,43275,31243],{"class":116},[106,43277,1693],{"class":112},[106,43279,32201],{"class":221},[106,43281,123],{"class":116},[106,43283,43284],{"class":108,"line":7970},[106,43285,2392],{"emptyLinePlaceholder":33},[106,43287,43288],{"class":108,"line":7976},[106,43289,2392],{"emptyLinePlaceholder":33},[106,43291,43292],{"class":108,"line":8003},[106,43293,32216],{"class":175},[106,43295,43296],{"class":108,"line":8008},[106,43297,32221],{"class":175},[106,43299,43300],{"class":108,"line":8014},[106,43301,32226],{"class":175},[106,43303,43304,43306,43308,43310,43312,43314,43316],{"class":108,"line":8026},[106,43305,32231],{"class":116},[106,43307,162],{"class":112},[106,43309,32236],{"class":116},[106,43311,32239],{"class":5209},[106,43313,162],{"class":112},[106,43315,32244],{"class":165},[106,43317,123],{"class":116},[106,43319,43320],{"class":108,"line":8038},[106,43321,2392],{"emptyLinePlaceholder":33},[106,43323,43324],{"class":108,"line":8050},[106,43325,32255],{"class":175},[106,43327,43328,43330,43332],{"class":108,"line":9709},[106,43329,32260],{"class":116},[106,43331,162],{"class":112},[106,43333,32265],{"class":116},[106,43335,43336],{"class":108,"line":9734},[106,43337,2392],{"emptyLinePlaceholder":33},[106,43339,43340],{"class":108,"line":9757},[106,43341,32274],{"class":175},[106,43343,43344,43346,43348],{"class":108,"line":9781},[106,43345,31283],{"class":116},[106,43347,162],{"class":112},[106,43349,32283],{"class":116},[106,43351,43352],{"class":108,"line":9786},[106,43353,32288],{"class":175},[106,43355,43356],{"class":108,"line":9791},[106,43357,32293],{"class":175},[106,43359,43360],{"class":108,"line":9796},[106,43361,32298],{"class":175},[106,43363,43364,43366,43368],{"class":108,"line":9805},[106,43365,32303],{"class":116},[106,43367,162],{"class":112},[106,43369,32308],{"class":116},[106,43371,43372],{"class":108,"line":9810},[106,43373,2392],{"emptyLinePlaceholder":33},[106,43375,43376],{"class":108,"line":9816},[106,43377,2392],{"emptyLinePlaceholder":33},[106,43379,43380],{"class":108,"line":9837},[106,43381,32321],{"class":175},[106,43383,43384],{"class":108,"line":9843},[106,43385,32326],{"class":175},[106,43387,43388,43390,43392],{"class":108,"line":9857},[106,43389,32331],{"class":116},[106,43391,162],{"class":112},[106,43393,32336],{"class":165},[106,43395,43396],{"class":108,"line":9863},[106,43397,32341],{"class":175},[106,43399,43400,43402,43404],{"class":108,"line":9890},[106,43401,32346],{"class":116},[106,43403,162],{"class":112},[106,43405,32351],{"class":116},[106,43407,43408],{"class":108,"line":9899},[106,43409,32356],{"class":175},[106,43411,43412,43414,43416],{"class":108,"line":9905},[106,43413,32361],{"class":116},[106,43415,162],{"class":112},[106,43417,32351],{"class":116},[106,43419,43420],{"class":108,"line":9913},[106,43421,32370],{"class":175},[106,43423,43424,43426,43428],{"class":108,"line":9918},[106,43425,32375],{"class":116},[106,43427,162],{"class":112},[106,43429,32351],{"class":116},[106,43431,43432],{"class":108,"line":16597},[106,43433,32384],{"class":175},[106,43435,43436,43438,43440],{"class":108,"line":16603},[106,43437,32389],{"class":116},[106,43439,162],{"class":112},[106,43441,32351],{"class":116},[106,43443,43444],{"class":108,"line":16626},[106,43445,2392],{"emptyLinePlaceholder":33},[106,43447,43448],{"class":108,"line":16632},[106,43449,32402],{"class":175},[106,43451,43452,43454,43456],{"class":108,"line":16655},[106,43453,32407],{"class":116},[106,43455,162],{"class":112},[106,43457,32412],{"class":116},[106,43459,43460],{"class":108,"line":16669},[106,43461,2392],{"emptyLinePlaceholder":33},[106,43463,43464],{"class":108,"line":16689},[106,43465,2392],{"emptyLinePlaceholder":33},[106,43467,43468],{"class":108,"line":16695},[106,43469,32425],{"class":175},[106,43471,43472,43474,43476,43478,43480],{"class":108,"line":16706},[106,43473,3193],{"class":112},[106,43475,32432],{"class":116},[106,43477,26037],{"class":112},[106,43479,32437],{"class":165},[106,43481,32440],{"class":116},[106,43483,43484,43486,43488,43490,43492,43494,43496,43498,43500,43502,43504],{"class":108,"line":16729},[106,43485,32445],{"class":165},[106,43487,117],{"class":116},[106,43489,32450],{"class":221},[106,43491,32453],{"class":165},[106,43493,701],{"class":221},[106,43495,32453],{"class":165},[106,43497,368],{"class":221},[106,43499,32462],{"class":116},[106,43501,649],{"class":112},[106,43503,334],{"class":165},[106,43505,30491],{"class":116},[106,43507,43508,43510,43512,43514,43516,43518],{"class":108,"line":16751},[106,43509,32445],{"class":165},[106,43511,117],{"class":116},[106,43513,32477],{"class":221},[106,43515,572],{"class":112},[106,43517,563],{"class":165},[106,43519,123],{"class":116},[106,43521,43522],{"class":108,"line":16756},[106,43523,2392],{"emptyLinePlaceholder":33},[106,43525,43526],{"class":108,"line":16762},[106,43527,32492],{"class":175},[106,43529,43530],{"class":108,"line":16776},[106,43531,32497],{"class":175},[106,43533,43534,43536,43538],{"class":108,"line":16789},[106,43535,32502],{"class":116},[106,43537,162],{"class":112},[106,43539,32336],{"class":165},[106,43541,43542],{"class":108,"line":16794},[106,43543,32511],{"class":175},[106,43545,43546,43548,43550],{"class":108,"line":16808},[106,43547,32516],{"class":116},[106,43549,162],{"class":112},[106,43551,3077],{"class":165},[106,43553,43554],{"class":108,"line":16813},[106,43555,32525],{"class":175},[106,43557,43558,43560,43562],{"class":108,"line":16819},[106,43559,32530],{"class":116},[106,43561,162],{"class":112},[106,43563,32336],{"class":165},[106,43565,43566],{"class":108,"line":16824},[106,43567,32539],{"class":175},[106,43569,43570,43572,43574],{"class":108,"line":16838},[106,43571,32544],{"class":116},[106,43573,162],{"class":112},[106,43575,3077],{"class":165},[106,43577,43578],{"class":108,"line":16843},[106,43579,32553],{"class":175},[106,43581,43582,43584,43586],{"class":108,"line":16848},[106,43583,32558],{"class":116},[106,43585,162],{"class":112},[106,43587,3077],{"class":165},[106,43589,43590],{"class":108,"line":16862},[106,43591,32567],{"class":175},[106,43593,43594,43596,43598],{"class":108,"line":16874},[106,43595,32572],{"class":116},[106,43597,162],{"class":112},[106,43599,3077],{"class":165},[106,43601,43602],{"class":108,"line":16879},[106,43603,32581],{"class":175},[106,43605,43606,43608,43610,43612,43614],{"class":108,"line":16892},[106,43607,3395],{"class":112},[106,43609,31595],{"class":116},[106,43611,26037],{"class":112},[106,43613,31600],{"class":165},[106,43615,32594],{"class":116},[106,43617,43618],{"class":108,"line":16897},[106,43619,32599],{"class":175},[106,43621,43622,43624,43626],{"class":108,"line":16902},[106,43623,32604],{"class":116},[106,43625,162],{"class":112},[106,43627,32609],{"class":116},[106,43629,43630],{"class":108,"line":16907},[106,43631,32614],{"class":175},[106,43633,43634,43636,43638],{"class":108,"line":16920},[106,43635,32619],{"class":116},[106,43637,162],{"class":112},[106,43639,32624],{"class":116},[106,43641,43642],{"class":108,"line":16925},[106,43643,32630],{"class":175},[106,43645,43646],{"class":108,"line":32627},[106,43647,32636],{"class":116},[106,43649,43650],{"class":108,"line":32633},[106,43651,32642],{"class":175},[106,43653,43654],{"class":108,"line":32639},[106,43655,32648],{"class":175},[106,43657,43658,43660,43662],{"class":108,"line":32645},[106,43659,32654],{"class":116},[106,43661,162],{"class":112},[106,43663,32659],{"class":116},[106,43665,43666],{"class":108,"line":32651},[106,43667,32665],{"class":175},[106,43669,43670,43672,43674,43676,43678,43680,43682],{"class":108,"line":32662},[106,43671,32671],{"class":116},[106,43673,162],{"class":112},[106,43675,32676],{"class":116},[106,43677,32679],{"class":5209},[106,43679,162],{"class":112},[106,43681,334],{"class":165},[106,43683,123],{"class":116},[106,43685,43686],{"class":108,"line":32668},[106,43687,32691],{"class":175},[106,43689,43690,43692,43694],{"class":108,"line":32688},[106,43691,32697],{"class":116},[106,43693,162],{"class":112},[106,43695,32702],{"class":116},[106,43697,43698],{"class":108,"line":32694},[106,43699,32708],{"class":175},[106,43701,43702],{"class":108,"line":32705},[106,43703,32714],{"class":116},[106,43705,43706],{"class":108,"line":32711},[106,43707,32720],{"class":175},[106,43709,43710],{"class":108,"line":32717},[106,43711,32726],{"class":116},[106,43713,43714],{"class":108,"line":32723},[106,43715,32732],{"class":175},[106,43717,43718],{"class":108,"line":32729},[106,43719,32738],{"class":116},[106,43721,43722],{"class":108,"line":32735},[106,43723,32744],{"class":175},[106,43725,43726,43728,43730,43732,43734,43736,43738],{"class":108,"line":32741},[106,43727,32750],{"class":116},[106,43729,9470],{"class":112},[106,43731,32755],{"class":116},[106,43733,572],{"class":112},[106,43735,32760],{"class":116},[106,43737,308],{"class":165},[106,43739,123],{"class":116},[106,43741,43742],{"class":108,"line":32747},[106,43743,32770],{"class":175},[106,43745,43746,43748,43750,43752,43754],{"class":108,"line":32767},[106,43747,32776],{"class":116},[106,43749,9470],{"class":112},[106,43751,32781],{"class":116},[106,43753,2941],{"class":112},[106,43755,32786],{"class":116},[106,43757,43758],{"class":108,"line":32773},[106,43759,32792],{"class":175},[106,43761,43762,43764,43766,43768,43770],{"class":108,"line":32789},[106,43763,32798],{"class":116},[106,43765,9470],{"class":112},[106,43767,32760],{"class":116},[106,43769,308],{"class":165},[106,43771,123],{"class":116},[106,43773,43774],{"class":108,"line":32795},[106,43775,32812],{"class":175},[106,43777,43778,43780,43782,43784,43786],{"class":108,"line":32809},[106,43779,3395],{"class":112},[106,43781,32820],{"class":116},[106,43783,26037],{"class":112},[106,43785,31600],{"class":165},[106,43787,32827],{"class":116},[106,43789,43790],{"class":108,"line":32815},[106,43791,32833],{"class":175},[106,43793,43794,43796,43798],{"class":108,"line":32830},[106,43795,32604],{"class":116},[106,43797,162],{"class":112},[106,43799,32609],{"class":116},[106,43801,43802],{"class":108,"line":32836},[106,43803,32848],{"class":175},[106,43805,43806,43808,43810],{"class":108,"line":32845},[106,43807,32619],{"class":116},[106,43809,162],{"class":112},[106,43811,32624],{"class":116},[106,43813,43814],{"class":108,"line":32851},[106,43815,32863],{"class":175},[106,43817,43818],{"class":108,"line":32860},[106,43819,32869],{"class":116},[106,43821,43822],{"class":108,"line":32866},[106,43823,36350],{"class":175},[106,43825,43826,43828],{"class":108,"line":32872},[106,43827,32875],{"class":112},[106,43829,32878],{"class":116},[106,43831,43832],{"class":108,"line":32881},[106,43833,32884],{"class":175},[106,43835,43836,43838,43840],{"class":108,"line":32887},[106,43837,36365],{"class":116},[106,43839,162],{"class":112},[106,43841,32659],{"class":116},[106,43843,43844],{"class":108,"line":32898},[106,43845,32901],{"class":175},[106,43847,43848,43850,43852,43854,43856,43858,43860],{"class":108,"line":32904},[106,43849,36378],{"class":116},[106,43851,162],{"class":112},[106,43853,32676],{"class":116},[106,43855,32679],{"class":5209},[106,43857,162],{"class":112},[106,43859,334],{"class":165},[106,43861,123],{"class":116},[106,43863,43864],{"class":108,"line":32923},[106,43865,32926],{"class":175},[106,43867,43868,43870,43872],{"class":108,"line":32929},[106,43869,36399],{"class":116},[106,43871,162],{"class":112},[106,43873,32702],{"class":116},[106,43875,43876],{"class":108,"line":32940},[106,43877,32943],{"class":175},[106,43879,43880,43882,43884,43886,43888,43890,43892],{"class":108,"line":32946},[106,43881,36412],{"class":116},[106,43883,9470],{"class":112},[106,43885,36417],{"class":116},[106,43887,572],{"class":112},[106,43889,32760],{"class":116},[106,43891,308],{"class":165},[106,43893,123],{"class":116},[106,43895,43896,43898,43900,43902,43904],{"class":108,"line":32966},[106,43897,36430],{"class":116},[106,43899,9470],{"class":112},[106,43901,32781],{"class":116},[106,43903,2941],{"class":112},[106,43905,32786],{"class":116},[106,43907,43908],{"class":108,"line":32982},[106,43909,36443],{"class":175},[106,43911,43912,43914,43916,43918,43920],{"class":108,"line":32988},[106,43913,36448],{"class":116},[106,43915,9470],{"class":112},[106,43917,32760],{"class":116},[106,43919,308],{"class":165},[106,43921,123],{"class":116},[106,43923,43924],{"class":108,"line":33002},[106,43925,33005],{"class":175},[106,43927,43928],{"class":108,"line":33008},[106,43929,33011],{"class":175},[106,43931,43932,43934,43936],{"class":108,"line":33014},[106,43933,33017],{"class":116},[106,43935,701],{"class":112},[106,43937,33022],{"class":116},[106,43939,43940],{"class":108,"line":33025},[106,43941,33028],{"class":175},[106,43943,43944],{"class":108,"line":33031},[106,43945,33034],{"class":175},[106,43947,43948,43950,43952],{"class":108,"line":33037},[106,43949,33040],{"class":116},[106,43951,701],{"class":112},[106,43953,33022],{"class":116},[106,43955,43956],{"class":108,"line":33047},[106,43957,33050],{"class":175},[106,43959,43960,43962,43964],{"class":108,"line":33053},[106,43961,33056],{"class":116},[106,43963,701],{"class":112},[106,43965,33061],{"class":116},[106,43967,43968],{"class":108,"line":33064},[106,43969,33067],{"class":175},[106,43971,43972,43974,43976],{"class":108,"line":33070},[106,43973,33073],{"class":116},[106,43975,701],{"class":112},[106,43977,33061],{"class":116},[106,43979,43980],{"class":108,"line":33080},[106,43981,2392],{"emptyLinePlaceholder":33},[106,43983,43984],{"class":108,"line":33085},[106,43985,33088],{"class":175},[106,43987,43988,43990,43992,43994,43996,43998,44000,44002,44004,44006,44008,44010,44012,44014,44016,44018,44020,44022,44024,44026],{"class":108,"line":33091},[106,43989,32445],{"class":165},[106,43991,117],{"class":116},[106,43993,3584],{"class":221},[106,43995,32453],{"class":165},[106,43997,33102],{"class":221},[106,43999,1013],{"class":165},[106,44001,33107],{"class":112},[106,44003,1063],{"class":165},[106,44005,33112],{"class":221},[106,44007,1013],{"class":165},[106,44009,33107],{"class":112},[106,44011,1063],{"class":165},[106,44013,3584],{"class":221},[106,44015,33123],{"class":116},[106,44017,649],{"class":112},[106,44019,334],{"class":165},[106,44021,33130],{"class":116},[106,44023,649],{"class":112},[106,44025,334],{"class":165},[106,44027,33137],{"class":116},[106,44029,44030,44032,44034,44036,44038,44040,44042,44044,44046,44048,44050,44052,44054,44056,44058,44060,44062,44064,44066,44068],{"class":108,"line":33140},[106,44031,32445],{"class":165},[106,44033,117],{"class":116},[106,44035,3584],{"class":221},[106,44037,32453],{"class":165},[106,44039,33151],{"class":221},[106,44041,1013],{"class":165},[106,44043,33107],{"class":112},[106,44045,1063],{"class":165},[106,44047,33160],{"class":221},[106,44049,1013],{"class":165},[106,44051,33107],{"class":112},[106,44053,1063],{"class":165},[106,44055,3584],{"class":221},[106,44057,33171],{"class":116},[106,44059,649],{"class":112},[106,44061,334],{"class":165},[106,44063,33178],{"class":116},[106,44065,649],{"class":112},[106,44067,334],{"class":165},[106,44069,33137],{"class":116},[106,44071,44072],{"class":108,"line":33187},[106,44073,2392],{"emptyLinePlaceholder":33},[106,44075,44076],{"class":108,"line":33192},[106,44077,33195],{"class":175},[106,44079,44080,44082,44084,44086,44088,44090,44092],{"class":108,"line":33198},[106,44081,2489],{"class":112},[106,44083,33203],{"class":116},[106,44085,649],{"class":112},[106,44087,334],{"class":165},[106,44089,1057],{"class":116},[106,44091,1077],{"class":112},[106,44093,33214],{"class":116},[106,44095,44096],{"class":108,"line":33217},[106,44097,33220],{"class":175},[106,44099,44100,44102,44104,44106,44108,44110,44112],{"class":108,"line":33223},[106,44101,33226],{"class":116},[106,44103,156],{"class":165},[106,44105,162],{"class":112},[106,44107,33233],{"class":116},[106,44109,649],{"class":112},[106,44111,334],{"class":165},[106,44113,33240],{"class":116},[106,44115,44116],{"class":108,"line":33243},[106,44117,33246],{"class":175},[106,44119,44120],{"class":108,"line":33249},[106,44121,33252],{"class":175},[106,44123,44124,44126,44128],{"class":108,"line":33255},[106,44125,33258],{"class":116},[106,44127,162],{"class":112},[106,44129,32308],{"class":116},[106,44131,44132],{"class":108,"line":33265},[106,44133,2392],{"emptyLinePlaceholder":33},[106,44135,44136],{"class":108,"line":33270},[106,44137,33273],{"class":175},[106,44139,44140,44142,44144,44146,44148],{"class":108,"line":33276},[106,44141,33279],{"class":116},[106,44143,162],{"class":112},[106,44145,33284],{"class":116},[106,44147,649],{"class":112},[106,44149,33289],{"class":116},[106,44151,44152,44154,44156,44158,44160,44162,44164,44166,44168,44170,44172,44174,44176,44178,44180,44182,44184,44186],{"class":108,"line":33292},[106,44153,32445],{"class":165},[106,44155,117],{"class":116},[106,44157,33299],{"class":221},[106,44159,1013],{"class":165},[106,44161,33304],{"class":112},[106,44163,1063],{"class":165},[106,44165,661],{"class":221},[106,44167,1013],{"class":165},[106,44169,33304],{"class":112},[106,44171,1063],{"class":165},[106,44173,33317],{"class":221},[106,44175,33320],{"class":116},[106,44177,33323],{"class":112},[106,44179,1024],{"class":165},[106,44181,33328],{"class":116},[106,44183,445],{"class":112},[106,44185,1024],{"class":165},[106,44187,30491],{"class":116},[106,44189,44190],{"class":108,"line":33337},[106,44191,36727],{"class":175},[106,44193,44194],{"class":108,"line":33343},[106,44195,36732],{"class":175},[106,44197,44198,44200,44202],{"class":108,"line":33349},[106,44199,36737],{"class":116},[106,44201,33361],{"class":221},[106,44203,123],{"class":116},[106,44205,44206],{"class":108,"line":33355},[106,44207,33381],{"class":175},[106,44209,44210,44212,44214,44216,44218,44220],{"class":108,"line":33366},[106,44211,33387],{"class":116},[106,44213,162],{"class":112},[106,44215,33392],{"class":116},[106,44217,33395],{"class":5209},[106,44219,162],{"class":112},[106,44221,1538],{"class":116},[106,44223,44224,44226,44228,44230],{"class":108,"line":33372},[106,44225,33405],{"class":221},[106,44227,976],{"class":116},[106,44229,33410],{"class":165},[106,44231,33413],{"class":116},[106,44233,44234,44236],{"class":108,"line":33378},[106,44235,33419],{"class":221},[106,44237,33422],{"class":116},[106,44239,44240,44242],{"class":108,"line":33384},[106,44241,33428],{"class":221},[106,44243,33431],{"class":116},[106,44245,44246,44248],{"class":108,"line":33402},[106,44247,33437],{"class":221},[106,44249,33440],{"class":116},[106,44251,44252,44254],{"class":108,"line":33416},[106,44253,33446],{"class":221},[106,44255,33449],{"class":116},[106,44257,44258],{"class":108,"line":33425},[106,44259,33455],{"class":116},[106,44261,44262],{"class":108,"line":33434},[106,44263,33461],{"class":175},[106,44265,44266,44268],{"class":108,"line":33443},[106,44267,4082],{"class":112},[106,44269,33469],{"class":116},[106,44271,44272],{"class":108,"line":33452},[106,44273,2392],{"emptyLinePlaceholder":33},[106,44275,44276],{"class":108,"line":33458},[106,44277,33480],{"class":175},[106,44279,44280,44282,44284],{"class":108,"line":33464},[106,44281,31941],{"class":112},[106,44283,33488],{"class":1955},[106,44285,33491],{"class":116},[106,44287,44288],{"class":108,"line":33472},[106,44289,33497],{"class":175},[106,44291,44292,44294,44296,44298,44300,44302,44304,44306],{"class":108,"line":33477},[106,44293,33503],{"class":116},[106,44295,31687],{"class":5209},[106,44297,162],{"class":112},[106,44299,117],{"class":116},[106,44301,615],{"class":165},[106,44303,495],{"class":116},[106,44305,410],{"class":165},[106,44307,30491],{"class":116},[106,44309,44310],{"class":108,"line":33483},[106,44311,33523],{"class":175},[106,44313,44314],{"class":108,"line":33494},[106,44315,33529],{"class":175},[106,44317,44318],{"class":108,"line":33500},[106,44319,33535],{"class":175},[106,44321,44322,44324,44326,44328,44330,44332,44334],{"class":108,"line":33520},[106,44323,31721],{"class":116},[106,44325,334],{"class":165},[106,44327,495],{"class":116},[106,44329,194],{"class":165},[106,44331,495],{"class":116},[106,44333,334],{"class":165},[106,44335,123],{"class":116},[106,44337,44338],{"class":108,"line":33526},[106,44339,33558],{"class":175},[106,44341,44342],{"class":108,"line":33532},[106,44343,33564],{"class":175},[106,44345,44346],{"class":108,"line":33538},[106,44347,33570],{"class":175},[106,44349,44350],{"class":108,"line":33555},[106,44351,33576],{"class":175},[106,44353,44354],{"class":108,"line":33561},[106,44355,33582],{"class":175},[106,44357,44358,44360,44362,44364,44366,44368,44370,44372,44374],{"class":108,"line":33567},[106,44359,33588],{"class":116},[106,44361,33591],{"class":221},[106,44363,33594],{"class":116},[106,44365,33597],{"class":221},[106,44367,495],{"class":116},[106,44369,33602],{"class":5209},[106,44371,162],{"class":112},[106,44373,33607],{"class":221},[106,44375,123],{"class":116},[106,44377,44378,44380,44382,44384,44386,44388,44390,44392,44394],{"class":108,"line":33573},[106,44379,33588],{"class":116},[106,44381,33591],{"class":221},[106,44383,33619],{"class":116},[106,44385,33622],{"class":221},[106,44387,495],{"class":116},[106,44389,33602],{"class":5209},[106,44391,162],{"class":112},[106,44393,33631],{"class":221},[106,44395,123],{"class":116},[106,44397,44398],{"class":108,"line":33579},[106,44399,33639],{"class":175},[106,44401,44402],{"class":108,"line":33585},[106,44403,33645],{"class":116},[106,44405,44406],{"class":108,"line":33612},[106,44407,33651],{"class":175},[106,44409,44410,44412,44414],{"class":108,"line":33636},[106,44411,33657],{"class":116},[106,44413,33660],{"class":221},[106,44415,123],{"class":116},[106,44417,44418,44420,44422],{"class":108,"line":33642},[106,44419,33668],{"class":116},[106,44421,33671],{"class":221},[106,44423,123],{"class":116},[106,44425,44426],{"class":108,"line":33648},[106,44427,33679],{"class":175},[106,44429,44430,44432,44434,44436,44438,44440,44442],{"class":108,"line":33654},[106,44431,31721],{"class":116},[106,44433,334],{"class":165},[106,44435,495],{"class":116},[106,44437,194],{"class":165},[106,44439,495],{"class":116},[106,44441,194],{"class":165},[106,44443,123],{"class":116},[106,44445,44446,44448,44450,44452,44454,44456,44458,44460,44462],{"class":108,"line":33665},[106,44447,33588],{"class":116},[106,44449,33591],{"class":221},[106,44451,33706],{"class":116},[106,44453,33597],{"class":221},[106,44455,495],{"class":116},[106,44457,33602],{"class":5209},[106,44459,162],{"class":112},[106,44461,33717],{"class":221},[106,44463,123],{"class":116},[106,44465,44466,44468,44470,44472,44474,44476,44478,44480,44482],{"class":108,"line":33676},[106,44467,33588],{"class":116},[106,44469,33591],{"class":221},[106,44471,33729],{"class":116},[106,44473,33622],{"class":221},[106,44475,495],{"class":116},[106,44477,33602],{"class":5209},[106,44479,162],{"class":112},[106,44481,33740],{"class":221},[106,44483,123],{"class":116},[106,44485,44486],{"class":108,"line":33682},[106,44487,33748],{"class":175},[106,44489,44490],{"class":108,"line":33699},[106,44491,33645],{"class":116},[106,44493,44494,44496,44498],{"class":108,"line":33722},[106,44495,33657],{"class":116},[106,44497,33591],{"class":221},[106,44499,123],{"class":116},[106,44501,44502,44504,44506],{"class":108,"line":33745},[106,44503,33668],{"class":116},[106,44505,33770],{"class":221},[106,44507,123],{"class":116},[106,44509,44510],{"class":108,"line":33751},[106,44511,33778],{"class":116},[106,44513,44514],{"class":108,"line":33756},[106,44515,2392],{"emptyLinePlaceholder":33},[106,44517,44518],{"class":108,"line":33765},[106,44519,33789],{"class":175},[106,44521,44522,44524,44526,44528,44530],{"class":108,"line":33775},[106,44523,1523],{"class":112},[106,44525,31214],{"class":165},[106,44527,2941],{"class":112},[106,44529,31219],{"class":221},[106,44531,3731],{"class":116},[106,44533,44534],{"class":108,"line":33781},[106,44535,33808],{"class":175},[106,44537,44538,44541,44543],{"class":108,"line":33786},[106,44539,44540],{"class":116},"    GoogLeNet",[106,44542,162],{"class":112},[106,44544,44545],{"class":116},"GoogLeNet(Inception)\n",[106,44547,44548,44550,44552],{"class":108,"line":33792},[106,44549,33825],{"class":116},[106,44551,162],{"class":112},[106,44553,33830],{"class":116},[106,44555,44556,44558,44560,44563,44565,44567,44569],{"class":108,"line":33805},[106,44557,33387],{"class":116},[106,44559,162],{"class":112},[106,44561,44562],{"class":116},"train_model_process(GoogLeNet,train_dataloader,val_dataloader,",[106,44564,33843],{"class":5209},[106,44566,162],{"class":112},[106,44568,1068],{"class":165},[106,44570,123],{"class":116},[106,44572,44573],{"class":108,"line":33811},[106,44574,33855],{"class":116},[60,44576,44577],{"start":1172},[63,44578,40568],{},[97,44580,44582],{"className":30372,"code":44581,"language":30374,"meta":25,"style":25},"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",[103,44583,44584,44590,44600,44610,44614,44624,44635,44639,44643,44647,44655,44671,44681,44697,44707,44721,44725,44735,44745,44755,44761,44765,44769,44777,44781,44797,44805,44809,44813,44821,44829,44833,44837,44841,44845,44851,44855,44865,44873,44881,44885,44889,44893,44901,44905,44921,44925,44929,44933,44945,44949,44961,44965,44969,44981,44985,44995,44999,45003,45015,45019,45027,45031,45035,45043,45047,45055,45059,45063,45067,45071,45075,45091,45099,45103,45107,45155,45161,45165,45175,45183,45191,45195,45199,45203,45207,45215,45219,45235,45239,45247,45255],{"__ignoreMap":25},[106,44585,44586,44588],{"class":108,"line":109},[106,44587,30386],{"class":112},[106,44589,30389],{"class":116},[106,44591,44592,44594,44596,44598],{"class":108,"line":28},[106,44593,30386],{"class":112},[106,44595,31409],{"class":116},[106,44597,31377],{"class":112},[106,44599,31414],{"class":116},[106,44601,44602,44604,44606,44608],{"class":108,"line":1172},[106,44603,30731],{"class":112},[106,44605,31392],{"class":116},[106,44607,30386],{"class":112},[106,44609,31397],{"class":116},[106,44611,44612],{"class":108,"line":1187},[106,44613,33916],{"class":175},[106,44615,44616,44618,44620,44622],{"class":108,"line":1193},[106,44617,30731],{"class":112},[106,44619,31362],{"class":116},[106,44621,30386],{"class":112},[106,44623,31367],{"class":116},[106,44625,44626,44628,44630,44632],{"class":108,"line":1207},[106,44627,30731],{"class":112},[106,44629,31908],{"class":116},[106,44631,30386],{"class":112},[106,44633,44634],{"class":116}," GoogLeNet,Inception\n",[106,44636,44637],{"class":108,"line":1213},[106,44638,2392],{"emptyLinePlaceholder":33},[106,44640,44641],{"class":108,"line":1304},[106,44642,2392],{"emptyLinePlaceholder":33},[106,44644,44645],{"class":108,"line":1310},[106,44646,33945],{"class":175},[106,44648,44649,44651,44653],{"class":108,"line":1322},[106,44650,31941],{"class":112},[106,44652,33952],{"class":1955},[106,44654,31947],{"class":116},[106,44656,44657,44659,44661,44663,44665,44667,44669],{"class":108,"line":1604},[106,44658,33959],{"class":116},[106,44660,162],{"class":112},[106,44662,31449],{"class":116},[106,44664,31452],{"class":5209},[106,44666,162],{"class":112},[106,44668,31457],{"class":221},[106,44670,31460],{"class":116},[106,44672,44673,44675,44677,44679],{"class":108,"line":1609},[106,44674,33976],{"class":5209},[106,44676,162],{"class":112},[106,44678,33981],{"class":165},[106,44680,31460],{"class":116},[106,44682,44683,44685,44687,44689,44691,44693,44695],{"class":108,"line":1615},[106,44684,33988],{"class":5209},[106,44686,162],{"class":112},[106,44688,31487],{"class":116},[106,44690,31490],{"class":5209},[106,44692,162],{"class":112},[106,44694,35443],{"class":165},[106,44696,31498],{"class":116},[106,44698,44699,44701,44703,44705],{"class":108,"line":1620},[106,44700,34005],{"class":5209},[106,44702,162],{"class":112},[106,44704,31470],{"class":165},[106,44706,123],{"class":116},[106,44708,44709,44711,44713,44715,44717,44719],{"class":108,"line":1634},[106,44710,34016],{"class":116},[106,44712,162],{"class":112},[106,44714,31528],{"class":116},[106,44716,31531],{"class":5209},[106,44718,162],{"class":112},[106,44720,34027],{"class":116},[106,44722,44723],{"class":108,"line":1639},[106,44724,34032],{"class":175},[106,44726,44727,44729,44731,44733],{"class":108,"line":1645},[106,44728,34037],{"class":5209},[106,44730,162],{"class":112},[106,44732,334],{"class":165},[106,44734,31460],{"class":116},[106,44736,44737,44739,44741,44743],{"class":108,"line":1666},[106,44738,34048],{"class":5209},[106,44740,162],{"class":112},[106,44742,31470],{"class":165},[106,44744,31460],{"class":116},[106,44746,44747,44749,44751,44753],{"class":108,"line":1671},[106,44748,34059],{"class":5209},[106,44750,162],{"class":112},[106,44752,308],{"class":165},[106,44754,123],{"class":116},[106,44756,44757,44759],{"class":108,"line":1685},[106,44758,4082],{"class":112},[106,44760,34072],{"class":116},[106,44762,44763],{"class":108,"line":1690},[106,44764,2392],{"emptyLinePlaceholder":33},[106,44766,44767],{"class":108,"line":1719},[106,44768,34081],{"class":175},[106,44770,44771,44773,44775],{"class":108,"line":1724},[106,44772,31941],{"class":112},[106,44774,34088],{"class":1955},[106,44776,34091],{"class":116},[106,44778,44779],{"class":108,"line":1741},[106,44780,34096],{"class":175},[106,44782,44783,44785,44787,44789,44791,44793,44795],{"class":108,"line":1746},[106,44784,31231],{"class":116},[106,44786,162],{"class":112},[106,44788,31238],{"class":221},[106,44790,1696],{"class":112},[106,44792,31243],{"class":116},[106,44794,1693],{"class":112},[106,44796,34113],{"class":221},[106,44798,44799,44801,44803],{"class":108,"line":1751},[106,44800,31283],{"class":116},[106,44802,162],{"class":112},[106,44804,32283],{"class":116},[106,44806,44807],{"class":108,"line":1756},[106,44808,2392],{"emptyLinePlaceholder":33},[106,44810,44811],{"class":108,"line":1770},[106,44812,34130],{"class":175},[106,44814,44815,44817,44819],{"class":108,"line":1775},[106,44816,34135],{"class":116},[106,44818,162],{"class":112},[106,44820,32336],{"class":165},[106,44822,44823,44825,44827],{"class":108,"line":2569},[106,44824,34144],{"class":116},[106,44826,162],{"class":112},[106,44828,3077],{"class":165},[106,44830,44831],{"class":108,"line":2583},[106,44832,2392],{"emptyLinePlaceholder":33},[106,44834,44835],{"class":108,"line":2591},[106,44836,34157],{"class":175},[106,44838,44839],{"class":108,"line":2596},[106,44840,34162],{"class":175},[106,44842,44843],{"class":108,"line":2602},[106,44844,34167],{"class":175},[106,44846,44847,44849],{"class":108,"line":2608},[106,44848,34172],{"class":112},[106,44850,32878],{"class":116},[106,44852,44853],{"class":108,"line":2613},[106,44854,34179],{"class":175},[106,44856,44857,44859,44861,44863],{"class":108,"line":7941},[106,44858,3395],{"class":112},[106,44860,34186],{"class":116},[106,44862,26037],{"class":112},[106,44864,34191],{"class":116},[106,44866,44867,44869,44871],{"class":108,"line":7965},[106,44868,34196],{"class":116},[106,44870,162],{"class":112},[106,44872,34201],{"class":116},[106,44874,44875,44877,44879],{"class":108,"line":7970},[106,44876,34206],{"class":116},[106,44878,162],{"class":112},[106,44880,34211],{"class":116},[106,44882,44883],{"class":108,"line":7976},[106,44884,34216],{"class":175},[106,44886,44887],{"class":108,"line":8003},[106,44888,32869],{"class":116},[106,44890,44891],{"class":108,"line":8008},[106,44892,34225],{"class":175},[106,44894,44895,44897,44899],{"class":108,"line":8014},[106,44896,32654],{"class":116},[106,44898,162],{"class":112},[106,44900,34234],{"class":116},[106,44902,44903],{"class":108,"line":8026},[106,44904,34239],{"class":175},[106,44906,44907,44909,44911,44913,44915,44917,44919],{"class":108,"line":8038},[106,44908,32671],{"class":116},[106,44910,162],{"class":112},[106,44912,32676],{"class":116},[106,44914,32679],{"class":5209},[106,44916,162],{"class":112},[106,44918,334],{"class":165},[106,44920,123],{"class":116},[106,44922,44923],{"class":108,"line":8050},[106,44924,34260],{"class":175},[106,44926,44927],{"class":108,"line":9709},[106,44928,34265],{"class":175},[106,44930,44931],{"class":108,"line":9734},[106,44932,34270],{"class":175},[106,44934,44935,44937,44939,44941,44943],{"class":108,"line":9757},[106,44936,34275],{"class":116},[106,44938,9470],{"class":112},[106,44940,32781],{"class":116},[106,44942,2941],{"class":112},[106,44944,34284],{"class":116},[106,44946,44947],{"class":108,"line":9781},[106,44948,34289],{"class":175},[106,44950,44951,44953,44955,44957,44959],{"class":108,"line":9786},[106,44952,34294],{"class":116},[106,44954,9470],{"class":112},[106,44956,34299],{"class":116},[106,44958,308],{"class":165},[106,44960,123],{"class":116},[106,44962,44963],{"class":108,"line":9791},[106,44964,2392],{"emptyLinePlaceholder":33},[106,44966,44967],{"class":108,"line":9796},[106,44968,34312],{"class":175},[106,44970,44971,44973,44975,44977,44979],{"class":108,"line":9805},[106,44972,34317],{"class":116},[106,44974,162],{"class":112},[106,44976,34322],{"class":116},[106,44978,701],{"class":112},[106,44980,34327],{"class":116},[106,44982,44983],{"class":108,"line":9810},[106,44984,34332],{"class":175},[106,44986,44987,44989,44991,44993],{"class":108,"line":9816},[106,44988,32445],{"class":165},[106,44990,117],{"class":116},[106,44992,34341],{"class":221},[106,44994,34344],{"class":116},[106,44996,44997],{"class":108,"line":9837},[106,44998,2392],{"emptyLinePlaceholder":33},[106,45000,45001],{"class":108,"line":9843},[106,45002,34353],{"class":175},[106,45004,45005,45007,45009,45011,45013],{"class":108,"line":9857},[106,45006,1523],{"class":112},[106,45008,31214],{"class":165},[106,45010,2941],{"class":112},[106,45012,31219],{"class":221},[106,45014,3731],{"class":116},[106,45016,45017],{"class":108,"line":9863},[106,45018,34370],{"class":175},[106,45020,45021,45023,45025],{"class":108,"line":9890},[106,45022,31283],{"class":116},[106,45024,162],{"class":112},[106,45026,44545],{"class":116},[106,45028,45029],{"class":108,"line":9899},[106,45030,34383],{"class":175},[106,45032,45033],{"class":108,"line":9905},[106,45034,34388],{"class":175},[106,45036,45037,45039,45041],{"class":108,"line":9913},[106,45038,34393],{"class":116},[106,45040,34396],{"class":221},[106,45042,30491],{"class":116},[106,45044,45045],{"class":108,"line":9918},[106,45046,34403],{"class":175},[106,45048,45049,45051,45053],{"class":108,"line":16597},[106,45050,34016],{"class":116},[106,45052,162],{"class":112},[106,45054,34412],{"class":116},[106,45056,45057],{"class":108,"line":16603},[106,45058,34417],{"class":175},[106,45060,45061],{"class":108,"line":16626},[106,45062,34422],{"class":116},[106,45064,45065],{"class":108,"line":16632},[106,45066,2392],{"emptyLinePlaceholder":33},[106,45068,45069],{"class":108,"line":16655},[106,45070,34431],{"class":175},[106,45072,45073],{"class":108,"line":16669},[106,45074,34436],{"class":175},[106,45076,45077,45079,45081,45083,45085,45087,45089],{"class":108,"line":16689},[106,45078,31231],{"class":116},[106,45080,162],{"class":112},[106,45082,31238],{"class":221},[106,45084,1696],{"class":112},[106,45086,31243],{"class":116},[106,45088,1693],{"class":112},[106,45090,34113],{"class":221},[106,45092,45093,45095,45097],{"class":108,"line":16695},[106,45094,31283],{"class":116},[106,45096,162],{"class":112},[106,45098,32283],{"class":116},[106,45100,45101],{"class":108,"line":16706},[106,45102,34465],{"class":175},[106,45104,45105],{"class":108,"line":16729},[106,45106,34470],{"class":175},[106,45108,45109,45111,45113,45115,45117,45119,45121,45123,45125,45127,45129,45131,45133,45135,45137,45139,45141,45143,45145,45147,45149,45151,45153],{"class":108,"line":16751},[106,45110,34475],{"class":116},[106,45112,162],{"class":112},[106,45114,1007],{"class":116},[106,45116,34482],{"class":221},[106,45118,495],{"class":116},[106,45120,34487],{"class":221},[106,45122,495],{"class":116},[106,45124,34492],{"class":221},[106,45126,495],{"class":116},[106,45128,34497],{"class":221},[106,45130,495],{"class":116},[106,45132,34502],{"class":221},[106,45134,495],{"class":116},[106,45136,34507],{"class":221},[106,45138,495],{"class":116},[106,45140,34512],{"class":221},[106,45142,495],{"class":116},[106,45144,34517],{"class":221},[106,45146,495],{"class":116},[106,45148,34522],{"class":221},[106,45150,495],{"class":116},[106,45152,34527],{"class":221},[106,45154,33240],{"class":116},[106,45156,45157,45159],{"class":108,"line":16756},[106,45158,34172],{"class":112},[106,45160,32878],{"class":116},[106,45162,45163],{"class":108,"line":16762},[106,45164,34540],{"class":175},[106,45166,45167,45169,45171,45173],{"class":108,"line":16776},[106,45168,3395],{"class":112},[106,45170,34547],{"class":116},[106,45172,26037],{"class":112},[106,45174,34191],{"class":116},[106,45176,45177,45179,45181],{"class":108,"line":16789},[106,45178,32604],{"class":116},[106,45180,162],{"class":112},[106,45182,32609],{"class":116},[106,45184,45185,45187,45189],{"class":108,"line":16794},[106,45186,32619],{"class":116},[106,45188,162],{"class":112},[106,45190,32624],{"class":116},[106,45192,45193],{"class":108,"line":16808},[106,45194,2392],{"emptyLinePlaceholder":33},[106,45196,45197],{"class":108,"line":16813},[106,45198,34576],{"class":175},[106,45200,45201],{"class":108,"line":16819},[106,45202,32869],{"class":116},[106,45204,45205],{"class":108,"line":16824},[106,45206,34585],{"class":175},[106,45208,45209,45211,45213],{"class":108,"line":16838},[106,45210,32654],{"class":116},[106,45212,162],{"class":112},[106,45214,32659],{"class":116},[106,45216,45217],{"class":108,"line":16843},[106,45218,34598],{"class":175},[106,45220,45221,45223,45225,45227,45229,45231,45233],{"class":108,"line":16848},[106,45222,32671],{"class":116},[106,45224,162],{"class":112},[106,45226,32676],{"class":116},[106,45228,32679],{"class":5209},[106,45230,162],{"class":112},[106,45232,334],{"class":165},[106,45234,123],{"class":116},[106,45236,45237],{"class":108,"line":16862},[106,45238,34619],{"class":175},[106,45240,45241,45243,45245],{"class":108,"line":16874},[106,45242,34624],{"class":116},[106,45244,162],{"class":112},[106,45246,34629],{"class":116},[106,45248,45249,45251,45253],{"class":108,"line":16879},[106,45250,34634],{"class":116},[106,45252,162],{"class":112},[106,45254,34639],{"class":116},[106,45256,45257,45259,45261,45263,45265,45267,45269,45271],{"class":108,"line":16892},[106,45258,34644],{"class":165},[106,45260,117],{"class":116},[106,45262,34649],{"class":221},[106,45264,34652],{"class":116},[106,45266,34655],{"class":221},[106,45268,495],{"class":116},[106,45270,34660],{"class":221},[106,45272,34663],{"class":116},[77,45274,45276],{"id":45275},"_24训练自己的数据集","2.4.训练自己的数据集",[14,45278,45279],{},"猫狗分类任务",[14,45281,45282],{},"划分数据集和验证集",[97,45284,45286],{"className":30372,"code":45285,"language":30374,"meta":25,"style":25},"# 创建脚本，用于划分数据集和验证集\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",[103,45287,45288,45293,45300,45305,45316,45323,45327,45337,45351,45360,45364,45369,45379,45399,45403,45408,45418,45429,45442,45446,45451,45460,45470,45481,45485,45490,45500,45504,45509,45514,45519,45524,45529,45533,45543,45570,45583,45595,45622,45627,45632,45646,45651,45663,45678,45693,45701,45705,45710,45716,45728,45741,45746,45751,45756,45806,45812,45816],{"__ignoreMap":25},[106,45289,45290],{"class":108,"line":109},[106,45291,45292],{"class":175},"# 创建脚本，用于划分数据集和验证集\n",[106,45294,45295,45297],{"class":108,"line":28},[106,45296,30386],{"class":112},[106,45298,45299],{"class":116}," os\n",[106,45301,45302],{"class":108,"line":1172},[106,45303,45304],{"class":175},"# shutil 是 Python 标准库里的一个模块，主要用于高级文件操作，比如复制文件、移动文件、删除目录等\n",[106,45306,45307,45309,45312,45314],{"class":108,"line":1187},[106,45308,30731],{"class":112},[106,45310,45311],{"class":116}," shutil ",[106,45313,30386],{"class":112},[106,45315,31816],{"class":116},[106,45317,45318,45320],{"class":108,"line":1193},[106,45319,30386],{"class":112},[106,45321,45322],{"class":116}," random\n",[106,45324,45325],{"class":108,"line":1207},[106,45326,2392],{"emptyLinePlaceholder":33},[106,45328,45329,45331,45334],{"class":108,"line":1213},[106,45330,31941],{"class":112},[106,45332,45333],{"class":1955}," mkfile",[106,45335,45336],{"class":116},"(file):\n",[106,45338,45339,45341,45343,45346,45349],{"class":108,"line":1304},[106,45340,3093],{"class":112},[106,45342,38924],{"class":112},[106,45344,45345],{"class":116}," os.path.exists(",[106,45347,45348],{"class":5209},"file",[106,45350,30780],{"class":116},[106,45352,45353,45356,45358],{"class":108,"line":1310},[106,45354,45355],{"class":116},"        os.makedirs(",[106,45357,45348],{"class":5209},[106,45359,123],{"class":116},[106,45361,45362],{"class":108,"line":1322},[106,45363,2392],{"emptyLinePlaceholder":33},[106,45365,45366],{"class":108,"line":1604},[106,45367,45368],{"class":175},"# 获取data文件夹下所有文件夹名（即需要分类的类名）\n",[106,45370,45371,45374,45376],{"class":108,"line":1609},[106,45372,45373],{"class":116},"file_path",[106,45375,162],{"class":112},[106,45377,45378],{"class":221},"'data_cat_dog'\n",[106,45380,45381,45384,45386,45389,45391,45394,45396],{"class":108,"line":1615},[106,45382,45383],{"class":116},"flower_class",[106,45385,162],{"class":112},[106,45387,45388],{"class":116},"[cla ",[106,45390,3017],{"class":112},[106,45392,45393],{"class":116}," cla ",[106,45395,26037],{"class":112},[106,45397,45398],{"class":116}," os.listdir(file_path)]\n",[106,45400,45401],{"class":108,"line":1620},[106,45402,2392],{"emptyLinePlaceholder":33},[106,45404,45405],{"class":108,"line":1634},[106,45406,45407],{"class":175},"# 创建训练集train文件夹\n",[106,45409,45410,45413,45416],{"class":108,"line":1639},[106,45411,45412],{"class":116},"mkfile(",[106,45414,45415],{"class":221},"'data\u002Ftrain'",[106,45417,123],{"class":116},[106,45419,45420,45422,45424,45426],{"class":108,"line":1645},[106,45421,3017],{"class":112},[106,45423,45393],{"class":116},[106,45425,26037],{"class":112},[106,45427,45428],{"class":116}," flower_class:\n",[106,45430,45431,45434,45437,45439],{"class":108,"line":1666},[106,45432,45433],{"class":116},"    mkfile(",[106,45435,45436],{"class":221},"'data\u002Ftrain\u002F'",[106,45438,598],{"class":112},[106,45440,45441],{"class":116},"cla)\n",[106,45443,45444],{"class":108,"line":1671},[106,45445,2392],{"emptyLinePlaceholder":33},[106,45447,45448],{"class":108,"line":1685},[106,45449,45450],{"class":175},"# 创建验证集val文件夹\n",[106,45452,45453,45455,45458],{"class":108,"line":1690},[106,45454,45412],{"class":116},[106,45456,45457],{"class":221},"'data\u002Ftest'",[106,45459,123],{"class":116},[106,45461,45462,45464,45466,45468],{"class":108,"line":1719},[106,45463,3017],{"class":112},[106,45465,45393],{"class":116},[106,45467,26037],{"class":112},[106,45469,45428],{"class":116},[106,45471,45472,45474,45477,45479],{"class":108,"line":1724},[106,45473,45433],{"class":116},[106,45475,45476],{"class":221},"'data\u002Ftest\u002F'",[106,45478,598],{"class":112},[106,45480,45441],{"class":116},[106,45482,45483],{"class":108,"line":1741},[106,45484,2392],{"emptyLinePlaceholder":33},[106,45486,45487],{"class":108,"line":1746},[106,45488,45489],{"class":175},"# 划分比例，训练集：测试集=9：1\n",[106,45491,45492,45495,45497],{"class":108,"line":1751},[106,45493,45494],{"class":116},"split_rate",[106,45496,162],{"class":112},[106,45498,45499],{"class":165},"0.1\n",[106,45501,45502],{"class":108,"line":1756},[106,45503,2392],{"emptyLinePlaceholder":33},[106,45505,45506],{"class":108,"line":1770},[106,45507,45508],{"class":175},"# 遍历所有类别的全部图像并按比例分成训练集和验证集\n",[106,45510,45511],{"class":108,"line":1775},[106,45512,45513],{"class":175},"# cla_path：当前类别的原始图片路径\n",[106,45515,45516],{"class":108,"line":2569},[106,45517,45518],{"class":175},"# images：当前类别下所有图片的文件名列表\n",[106,45520,45521],{"class":108,"line":2583},[106,45522,45523],{"class":175},"# num：该类别图片总数\n",[106,45525,45526],{"class":108,"line":2591},[106,45527,45528],{"class":175},"# eval_index：从 images 随机抽取 10% 的图片作为验证集\n",[106,45530,45531],{"class":108,"line":2596},[106,45532,2392],{"emptyLinePlaceholder":33},[106,45534,45535,45537,45539,45541],{"class":108,"line":2602},[106,45536,3017],{"class":112},[106,45538,45393],{"class":116},[106,45540,26037],{"class":112},[106,45542,45428],{"class":116},[106,45544,45545,45548,45550,45553,45555,45558,45561,45563,45565,45567],{"class":108,"line":2608},[106,45546,45547],{"class":116},"    cla_path ",[106,45549,162],{"class":112},[106,45551,45552],{"class":116}," file_path ",[106,45554,598],{"class":112},[106,45556,45557],{"class":221}," '\u002F'",[106,45559,45560],{"class":112}," +",[106,45562,45393],{"class":116},[106,45564,598],{"class":112},[106,45566,45557],{"class":221},[106,45568,45569],{"class":175},"  # 某一类别的子目录\n",[106,45571,45572,45575,45577,45580],{"class":108,"line":2613},[106,45573,45574],{"class":116},"    images ",[106,45576,162],{"class":112},[106,45578,45579],{"class":116}," os.listdir(cla_path)  ",[106,45581,45582],{"class":175},"# iamges 列表存储了该目录下所有图像的名称\n",[106,45584,45585,45588,45590,45592],{"class":108,"line":7941},[106,45586,45587],{"class":116},"    num ",[106,45589,162],{"class":112},[106,45591,7324],{"class":165},[106,45593,45594],{"class":116},"(images)\n",[106,45596,45597,45600,45602,45605,45607,45609,45611,45614,45616,45619],{"class":108,"line":7965},[106,45598,45599],{"class":116},"    eval_index ",[106,45601,162],{"class":112},[106,45603,45604],{"class":116}," random.sample(images, ",[106,45606,610],{"class":5209},[106,45608,162],{"class":112},[106,45610,120],{"class":165},[106,45612,45613],{"class":116},"(num ",[106,45615,572],{"class":112},[106,45617,45618],{"class":116}," split_rate))  ",[106,45620,45621],{"class":175},"# 从images列表中随机抽取 k 个图像名称\n",[106,45623,45624],{"class":108,"line":7970},[106,45625,45626],{"class":175},"    # 遍历该类别下的所有图片\n",[106,45628,45629],{"class":108,"line":7976},[106,45630,45631],{"class":175},"    # 如果图片在eval_index中，则复制到验证集对应目录，否则复制到训练集对应目录\n",[106,45633,45634,45636,45639,45641,45643],{"class":108,"line":8003},[106,45635,3193],{"class":112},[106,45637,45638],{"class":116}," index, image ",[106,45640,26037],{"class":112},[106,45642,31600],{"class":165},[106,45644,45645],{"class":116},"(images):\n",[106,45647,45648],{"class":108,"line":8008},[106,45649,45650],{"class":175},"        # eval_index 中保存验证集val的图像名称\n",[106,45652,45653,45655,45658,45660],{"class":108,"line":8014},[106,45654,2489],{"class":112},[106,45656,45657],{"class":116}," image ",[106,45659,26037],{"class":112},[106,45661,45662],{"class":116}," eval_index:\n",[106,45664,45665,45668,45670,45673,45675],{"class":108,"line":8026},[106,45666,45667],{"class":116},"            image_path ",[106,45669,162],{"class":112},[106,45671,45672],{"class":116}," cla_path ",[106,45674,598],{"class":112},[106,45676,45677],{"class":116}," image\n",[106,45679,45680,45683,45685,45688,45690],{"class":108,"line":8038},[106,45681,45682],{"class":116},"            new_path ",[106,45684,162],{"class":112},[106,45686,45687],{"class":221}," 'data\u002Ftest\u002F'",[106,45689,45560],{"class":112},[106,45691,45692],{"class":116}," cla\n",[106,45694,45695,45698],{"class":108,"line":8050},[106,45696,45697],{"class":116},"            copy(image_path, new_path)  ",[106,45699,45700],{"class":175},"# 将选中的图像复制到新路径\n",[106,45702,45703],{"class":108,"line":9709},[106,45704,2392],{"emptyLinePlaceholder":33},[106,45706,45707],{"class":108,"line":9734},[106,45708,45709],{"class":175},"        # 其余的图像保存在训练集train中\n",[106,45711,45712,45714],{"class":108,"line":9757},[106,45713,2526],{"class":112},[106,45715,3731],{"class":116},[106,45717,45718,45720,45722,45724,45726],{"class":108,"line":9781},[106,45719,45667],{"class":116},[106,45721,162],{"class":112},[106,45723,45672],{"class":116},[106,45725,598],{"class":112},[106,45727,45677],{"class":116},[106,45729,45730,45732,45734,45737,45739],{"class":108,"line":9786},[106,45731,45682],{"class":116},[106,45733,162],{"class":112},[106,45735,45736],{"class":221}," 'data\u002Ftrain\u002F'",[106,45738,45560],{"class":112},[106,45740,45692],{"class":116},[106,45742,45743],{"class":108,"line":9791},[106,45744,45745],{"class":116},"            copy(image_path, new_path)\n",[106,45747,45748],{"class":108,"line":9796},[106,45749,45750],{"class":175},"            # 打印进度条信息\n",[106,45752,45753],{"class":108,"line":9805},[106,45754,45755],{"class":175},"            # \\r用于在同一行刷新。end = \"\"避免换行，每次刷新同一行显示进度\n",[106,45757,45758,45760,45762,45764,45767,45769,45771,45774,45776,45778,45780,45783,45786,45788,45790,45793,45796,45798,45800,45803],{"class":108,"line":9810},[106,45759,32445],{"class":165},[106,45761,117],{"class":116},[106,45763,368],{"class":221},[106,45765,45766],{"class":165},"\\r",[106,45768,1007],{"class":221},[106,45770,32453],{"class":165},[106,45772,45773],{"class":221},"] processing [",[106,45775,32453],{"class":165},[106,45777,701],{"class":221},[106,45779,32453],{"class":165},[106,45781,45782],{"class":221},"]\"",[106,45784,45785],{"class":116},".format(cla, index ",[106,45787,598],{"class":112},[106,45789,25112],{"class":165},[106,45791,45792],{"class":116},", num), ",[106,45794,45795],{"class":5209},"end",[106,45797,162],{"class":112},[106,45799,7645],{"class":221},[106,45801,45802],{"class":116},")  ",[106,45804,45805],{"class":175},"# processing bar\n",[106,45807,45808,45810],{"class":108,"line":9816},[106,45809,31293],{"class":165},[106,45811,1968],{"class":116},[106,45813,45814],{"class":108,"line":9837},[106,45815,2392],{"emptyLinePlaceholder":33},[106,45817,45818,45820,45822,45825],{"class":108,"line":9843},[106,45819,30409],{"class":165},[106,45821,117],{"class":116},[106,45823,45824],{"class":221},"\"processing done!\"",[106,45826,123],{"class":116},[14,45828,45829],{},"这里使用的是GoogLeNet模型来实现猫狗分类的",[21991,45831,45833],{"id":45832},"_242模型代码","2.4.2.模型代码",[14,45835,45836],{},"这里数据集中彩色图片，是三通道的数据，所以将模型中的输入通道改为3",[97,45838,45840],{"className":30372,"code":45839,"language":30374,"meta":25,"style":25},"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",[103,45841,45842,45848,45858,45868,45872,45888,45896,45910,45920,45924,45954,45958,45992,46038,46042,46076,46122,46126,46130,46164,46194,46198,46206,46220,46242,46264,46282,46286,46300,46304,46308,46324,46328,46336,46350,46360,46404,46408,46436,46440,46450,46478,46482,46518,46522,46550,46554,46564,46596,46628,46656,46660,46670,46702,46734,46766,46798,46830,46858,46862,46872,46904,46936,46948,46952,46964,46968,46972,46984,46992,47012,47016,47020,47024,47028,47032,47036,47050,47058,47066,47078,47092,47100,47104,47112,47122,47132,47142,47152,47162,47168,47172,47176,47188,47208,47216],{"__ignoreMap":25},[106,45843,45844,45846],{"class":108,"line":109},[106,45845,30386],{"class":112},[106,45847,30389],{"class":116},[106,45849,45850,45852,45854,45856],{"class":108,"line":28},[106,45851,30731],{"class":112},[106,45853,30734],{"class":116},[106,45855,30386],{"class":112},[106,45857,30739],{"class":116},[106,45859,45860,45862,45864,45866],{"class":108,"line":1172},[106,45861,30731],{"class":112},[106,45863,30751],{"class":116},[106,45865,30386],{"class":112},[106,45867,30756],{"class":116},[106,45869,45870],{"class":108,"line":1187},[106,45871,2392],{"emptyLinePlaceholder":33},[106,45873,45874,45876,45878,45880,45882,45884,45886],{"class":108,"line":1193},[106,45875,14687],{"class":112},[106,45877,41487],{"class":1955},[106,45879,117],{"class":116},[106,45881,30772],{"class":1955},[106,45883,675],{"class":116},[106,45885,30777],{"class":1955},[106,45887,30780],{"class":116},[106,45889,45890,45892,45894],{"class":108,"line":1207},[106,45891,30795],{"class":112},[106,45893,30798],{"class":165},[106,45895,41506],{"class":116},[106,45897,45898,45900,45902,45904,45906,45908],{"class":108,"line":1213},[106,45899,30811],{"class":165},[106,45901,41513],{"class":116},[106,45903,30817],{"class":165},[106,45905,30820],{"class":116},[106,45907,30823],{"class":165},[106,45909,1968],{"class":116},[106,45911,45912,45914,45916,45918],{"class":108,"line":1304},[106,45913,30839],{"class":165},[106,45915,34765],{"class":116},[106,45917,162],{"class":112},[106,45919,34770],{"class":116},[106,45921,45922],{"class":108,"line":1310},[106,45923,41536],{"class":175},[106,45925,45926,45928,45930,45932,45934,45936,45938,45940,45942,45944,45946,45948,45950,45952],{"class":108,"line":1322},[106,45927,30839],{"class":165},[106,45929,41543],{"class":116},[106,45931,162],{"class":112},[106,45933,30847],{"class":116},[106,45935,30850],{"class":5209},[106,45937,162],{"class":112},[106,45939,41554],{"class":116},[106,45941,30859],{"class":5209},[106,45943,162],{"class":112},[106,45945,41561],{"class":116},[106,45947,30868],{"class":5209},[106,45949,162],{"class":112},[106,45951,334],{"class":165},[106,45953,123],{"class":116},[106,45955,45956],{"class":108,"line":1604},[106,45957,41574],{"class":175},[106,45959,45960,45962,45964,45966,45968,45970,45972,45974,45976,45978,45980,45982,45984,45986,45988,45990],{"class":108,"line":1609},[106,45961,30839],{"class":165},[106,45963,41581],{"class":116},[106,45965,162],{"class":112},[106,45967,30847],{"class":116},[106,45969,30850],{"class":5209},[106,45971,162],{"class":112},[106,45973,41554],{"class":116},[106,45975,30859],{"class":5209},[106,45977,162],{"class":112},[106,45979,41598],{"class":116},[106,45981,308],{"class":165},[106,45983,41603],{"class":116},[106,45985,30868],{"class":5209},[106,45987,162],{"class":112},[106,45989,334],{"class":165},[106,45991,123],{"class":116},[106,45993,45994,45996,45998,46000,46002,46004,46006,46008,46010,46012,46014,46016,46018,46020,46022,46024,46026,46028,46030,46032,46034,46036],{"class":108,"line":1615},[106,45995,30839],{"class":165},[106,45997,41618],{"class":116},[106,45999,162],{"class":112},[106,46001,30847],{"class":116},[106,46003,30850],{"class":5209},[106,46005,162],{"class":112},[106,46007,41598],{"class":116},[106,46009,308],{"class":165},[106,46011,41603],{"class":116},[106,46013,30859],{"class":5209},[106,46015,162],{"class":112},[106,46017,41598],{"class":116},[106,46019,334],{"class":165},[106,46021,41603],{"class":116},[106,46023,30868],{"class":5209},[106,46025,162],{"class":112},[106,46027,188],{"class":165},[106,46029,495],{"class":116},[106,46031,30877],{"class":5209},[106,46033,162],{"class":112},[106,46035,334],{"class":165},[106,46037,123],{"class":116},[106,46039,46040],{"class":108,"line":1620},[106,46041,41663],{"class":175},[106,46043,46044,46046,46048,46050,46052,46054,46056,46058,46060,46062,46064,46066,46068,46070,46072,46074],{"class":108,"line":1634},[106,46045,30839],{"class":165},[106,46047,41670],{"class":116},[106,46049,162],{"class":112},[106,46051,30847],{"class":116},[106,46053,30850],{"class":5209},[106,46055,162],{"class":112},[106,46057,41554],{"class":116},[106,46059,30859],{"class":5209},[106,46061,162],{"class":112},[106,46063,41687],{"class":116},[106,46065,308],{"class":165},[106,46067,41603],{"class":116},[106,46069,30868],{"class":5209},[106,46071,162],{"class":112},[106,46073,334],{"class":165},[106,46075,123],{"class":116},[106,46077,46078,46080,46082,46084,46086,46088,46090,46092,46094,46096,46098,46100,46102,46104,46106,46108,46110,46112,46114,46116,46118,46120],{"class":108,"line":1639},[106,46079,30839],{"class":165},[106,46081,41706],{"class":116},[106,46083,162],{"class":112},[106,46085,30847],{"class":116},[106,46087,30850],{"class":5209},[106,46089,162],{"class":112},[106,46091,41687],{"class":116},[106,46093,308],{"class":165},[106,46095,41603],{"class":116},[106,46097,30859],{"class":5209},[106,46099,162],{"class":112},[106,46101,41687],{"class":116},[106,46103,334],{"class":165},[106,46105,41603],{"class":116},[106,46107,30868],{"class":5209},[106,46109,162],{"class":112},[106,46111,436],{"class":165},[106,46113,495],{"class":116},[106,46115,30877],{"class":5209},[106,46117,162],{"class":112},[106,46119,194],{"class":165},[106,46121,123],{"class":116},[106,46123,46124],{"class":108,"line":1645},[106,46125,41751],{"class":175},[106,46127,46128],{"class":108,"line":1666},[106,46129,41756],{"class":175},[106,46131,46132,46134,46136,46138,46140,46142,46144,46146,46148,46150,46152,46154,46156,46158,46160,46162],{"class":108,"line":1671},[106,46133,30839],{"class":165},[106,46135,41763],{"class":116},[106,46137,162],{"class":112},[106,46139,34823],{"class":116},[106,46141,30868],{"class":5209},[106,46143,162],{"class":112},[106,46145,188],{"class":165},[106,46147,495],{"class":116},[106,46149,30923],{"class":5209},[106,46151,162],{"class":112},[106,46153,334],{"class":165},[106,46155,495],{"class":116},[106,46157,30877],{"class":5209},[106,46159,162],{"class":112},[106,46161,334],{"class":165},[106,46163,123],{"class":116},[106,46165,46166,46168,46170,46172,46174,46176,46178,46180,46182,46184,46186,46188,46190,46192],{"class":108,"line":1685},[106,46167,30839],{"class":165},[106,46169,41798],{"class":116},[106,46171,162],{"class":112},[106,46173,30847],{"class":116},[106,46175,30850],{"class":5209},[106,46177,162],{"class":112},[106,46179,41554],{"class":116},[106,46181,30859],{"class":5209},[106,46183,162],{"class":112},[106,46185,41815],{"class":116},[106,46187,30868],{"class":5209},[106,46189,162],{"class":112},[106,46191,334],{"class":165},[106,46193,123],{"class":116},[106,46195,46196],{"class":108,"line":1690},[106,46197,2392],{"emptyLinePlaceholder":33},[106,46199,46200,46202,46204],{"class":108,"line":1719},[106,46201,30795],{"class":112},[106,46203,31087],{"class":1955},[106,46205,31090],{"class":116},[106,46207,46208,46210,46212,46214,46216,46218],{"class":108,"line":1724},[106,46209,41840],{"class":116},[106,46211,162],{"class":112},[106,46213,30817],{"class":165},[106,46215,35178],{"class":116},[106,46217,30817],{"class":165},[106,46219,41851],{"class":116},[106,46221,46222,46224,46226,46228,46230,46232,46234,46236,46238,46240],{"class":108,"line":1741},[106,46223,7078],{"class":116},[106,46225,162],{"class":112},[106,46227,30817],{"class":165},[106,46229,35178],{"class":116},[106,46231,30817],{"class":165},[106,46233,41866],{"class":116},[106,46235,30817],{"class":165},[106,46237,35178],{"class":116},[106,46239,30817],{"class":165},[106,46241,41875],{"class":116},[106,46243,46244,46246,46248,46250,46252,46254,46256,46258,46260,46262],{"class":108,"line":1746},[106,46245,41880],{"class":116},[106,46247,162],{"class":112},[106,46249,30817],{"class":165},[106,46251,35178],{"class":116},[106,46253,30817],{"class":165},[106,46255,41891],{"class":116},[106,46257,30817],{"class":165},[106,46259,35178],{"class":116},[106,46261,30817],{"class":165},[106,46263,41900],{"class":116},[106,46265,46266,46268,46270,46272,46274,46276,46278,46280],{"class":108,"line":1751},[106,46267,41905],{"class":116},[106,46269,162],{"class":112},[106,46271,30817],{"class":165},[106,46273,35178],{"class":116},[106,46275,30817],{"class":165},[106,46277,41916],{"class":116},[106,46279,30817],{"class":165},[106,46281,41921],{"class":116},[106,46283,46284],{"class":108,"line":1756},[106,46285,41926],{"class":175},[106,46287,46288,46290,46292,46294,46296,46298],{"class":108,"line":1770},[106,46289,14745],{"class":112},[106,46291,41933],{"class":116},[106,46293,32679],{"class":5209},[106,46295,162],{"class":112},[106,46297,334],{"class":165},[106,46299,123],{"class":116},[106,46301,46302],{"class":108,"line":1775},[106,46303,2392],{"emptyLinePlaceholder":33},[106,46305,46306],{"class":108,"line":2569},[106,46307,41954],{"class":175},[106,46309,46310,46312,46314,46316,46318,46320,46322],{"class":108,"line":2583},[106,46311,14687],{"class":112},[106,46313,41961],{"class":1955},[106,46315,117],{"class":116},[106,46317,30772],{"class":1955},[106,46319,675],{"class":116},[106,46321,30777],{"class":1955},[106,46323,30780],{"class":116},[106,46325,46326],{"class":108,"line":2591},[106,46327,41976],{"class":175},[106,46329,46330,46332,46334],{"class":108,"line":2596},[106,46331,30795],{"class":112},[106,46333,30798],{"class":165},[106,46335,41985],{"class":116},[106,46337,46338,46340,46342,46344,46346,46348],{"class":108,"line":2602},[106,46339,30811],{"class":165},[106,46341,41992],{"class":116},[106,46343,30817],{"class":165},[106,46345,30820],{"class":116},[106,46347,30823],{"class":165},[106,46349,1968],{"class":116},[106,46351,46352,46354,46356,46358],{"class":108,"line":2608},[106,46353,30839],{"class":165},[106,46355,42007],{"class":116},[106,46357,162],{"class":112},[106,46359,38003],{"class":116},[106,46361,46362,46364,46366,46368,46370,46372,46374,46376,46378,46380,46382,46384,46386,46388,46390,46392,46394,46396,46398,46400,46402],{"class":108,"line":2613},[106,46363,38008],{"class":116},[106,46365,30850],{"class":5209},[106,46367,162],{"class":112},[106,46369,188],{"class":165},[106,46371,495],{"class":116},[106,46373,30859],{"class":5209},[106,46375,162],{"class":112},[106,46377,320],{"class":165},[106,46379,495],{"class":116},[106,46381,30868],{"class":5209},[106,46383,162],{"class":112},[106,46385,486],{"class":165},[106,46387,495],{"class":116},[106,46389,30923],{"class":5209},[106,46391,162],{"class":112},[106,46393,194],{"class":165},[106,46395,495],{"class":116},[106,46397,30877],{"class":5209},[106,46399,162],{"class":112},[106,46401,188],{"class":165},[106,46403,38041],{"class":116},[106,46405,46406],{"class":108,"line":7941},[106,46407,38046],{"class":116},[106,46409,46410,46412,46414,46416,46418,46420,46422,46424,46426,46428,46430,46432,46434],{"class":108,"line":7965},[106,46411,38091],{"class":116},[106,46413,30868],{"class":5209},[106,46415,162],{"class":112},[106,46417,188],{"class":165},[106,46419,495],{"class":116},[106,46421,30923],{"class":5209},[106,46423,162],{"class":112},[106,46425,194],{"class":165},[106,46427,495],{"class":116},[106,46429,30877],{"class":5209},[106,46431,162],{"class":112},[106,46433,334],{"class":165},[106,46435,123],{"class":116},[106,46437,46438],{"class":108,"line":7970},[106,46439,38120],{"class":116},[106,46441,46442,46444,46446,46448],{"class":108,"line":7976},[106,46443,30839],{"class":165},[106,46445,42098],{"class":116},[106,46447,162],{"class":112},[106,46449,38003],{"class":116},[106,46451,46452,46454,46456,46458,46460,46462,46464,46466,46468,46470,46472,46474,46476],{"class":108,"line":8003},[106,46453,38008],{"class":116},[106,46455,30850],{"class":5209},[106,46457,162],{"class":112},[106,46459,320],{"class":165},[106,46461,495],{"class":116},[106,46463,30859],{"class":5209},[106,46465,162],{"class":112},[106,46467,320],{"class":165},[106,46469,495],{"class":116},[106,46471,30868],{"class":5209},[106,46473,162],{"class":112},[106,46475,334],{"class":165},[106,46477,38041],{"class":116},[106,46479,46480],{"class":108,"line":8008},[106,46481,38046],{"class":116},[106,46483,46484,46486,46488,46490,46492,46494,46496,46498,46500,46502,46504,46506,46508,46510,46512,46514,46516],{"class":108,"line":8014},[106,46485,38008],{"class":116},[106,46487,30850],{"class":5209},[106,46489,162],{"class":112},[106,46491,320],{"class":165},[106,46493,495],{"class":116},[106,46495,30859],{"class":5209},[106,46497,162],{"class":112},[106,46499,42153],{"class":165},[106,46501,495],{"class":116},[106,46503,30868],{"class":5209},[106,46505,162],{"class":112},[106,46507,188],{"class":165},[106,46509,495],{"class":116},[106,46511,30877],{"class":5209},[106,46513,162],{"class":112},[106,46515,334],{"class":165},[106,46517,38041],{"class":116},[106,46519,46520],{"class":108,"line":8026},[106,46521,38046],{"class":116},[106,46523,46524,46526,46528,46530,46532,46534,46536,46538,46540,46542,46544,46546,46548],{"class":108,"line":8038},[106,46525,38091],{"class":116},[106,46527,30868],{"class":5209},[106,46529,162],{"class":112},[106,46531,188],{"class":165},[106,46533,495],{"class":116},[106,46535,30923],{"class":5209},[106,46537,162],{"class":112},[106,46539,194],{"class":165},[106,46541,495],{"class":116},[106,46543,30877],{"class":5209},[106,46545,162],{"class":112},[106,46547,334],{"class":165},[106,46549,123],{"class":116},[106,46551,46552],{"class":108,"line":8050},[106,46553,38120],{"class":116},[106,46555,46556,46558,46560,46562],{"class":108,"line":9709},[106,46557,30839],{"class":165},[106,46559,42214],{"class":116},[106,46561,162],{"class":112},[106,46563,38003],{"class":116},[106,46565,46566,46568,46570,46572,46574,46576,46578,46580,46582,46584,46586,46588,46590,46592,46594],{"class":108,"line":9734},[106,46567,42223],{"class":116},[106,46569,42153],{"class":165},[106,46571,495],{"class":116},[106,46573,320],{"class":165},[106,46575,42232],{"class":116},[106,46577,326],{"class":165},[106,46579,495],{"class":116},[106,46581,32064],{"class":165},[106,46583,42241],{"class":116},[106,46585,718],{"class":165},[106,46587,495],{"class":116},[106,46589,314],{"class":165},[106,46591,42250],{"class":116},[106,46593,314],{"class":165},[106,46595,38041],{"class":116},[106,46597,46598,46600,46602,46604,46606,46608,46610,46612,46614,46616,46618,46620,46622,46624,46626],{"class":108,"line":9757},[106,46599,42223],{"class":116},[106,46601,34864],{"class":165},[106,46603,495],{"class":116},[106,46605,32064],{"class":165},[106,46607,42232],{"class":116},[106,46609,32064],{"class":165},[106,46611,495],{"class":116},[106,46613,42153],{"class":165},[106,46615,42241],{"class":116},[106,46617,314],{"class":165},[106,46619,495],{"class":116},[106,46621,326],{"class":165},[106,46623,42250],{"class":116},[106,46625,320],{"class":165},[106,46627,38041],{"class":116},[106,46629,46630,46632,46634,46636,46638,46640,46642,46644,46646,46648,46650,46652,46654],{"class":108,"line":9781},[106,46631,38091],{"class":116},[106,46633,30868],{"class":5209},[106,46635,162],{"class":112},[106,46637,188],{"class":165},[106,46639,495],{"class":116},[106,46641,30923],{"class":5209},[106,46643,162],{"class":112},[106,46645,194],{"class":165},[106,46647,495],{"class":116},[106,46649,30877],{"class":5209},[106,46651,162],{"class":112},[106,46653,334],{"class":165},[106,46655,123],{"class":116},[106,46657,46658],{"class":108,"line":9786},[106,46659,38120],{"class":116},[106,46661,46662,46664,46666,46668],{"class":108,"line":9791},[106,46663,30839],{"class":165},[106,46665,42325],{"class":116},[106,46667,162],{"class":112},[106,46669,38003],{"class":116},[106,46671,46672,46674,46676,46678,46680,46682,46684,46686,46688,46690,46692,46694,46696,46698,46700],{"class":108,"line":9796},[106,46673,42223],{"class":116},[106,46675,42336],{"class":165},[106,46677,495],{"class":116},[106,46679,42153],{"class":165},[106,46681,42232],{"class":116},[106,46683,326],{"class":165},[106,46685,495],{"class":116},[106,46687,42349],{"class":165},[106,46689,42241],{"class":116},[106,46691,718],{"class":165},[106,46693,495],{"class":116},[106,46695,724],{"class":165},[106,46697,42250],{"class":116},[106,46699,320],{"class":165},[106,46701,38041],{"class":116},[106,46703,46704,46706,46708,46710,46712,46714,46716,46718,46720,46722,46724,46726,46728,46730,46732],{"class":108,"line":9805},[106,46705,42223],{"class":116},[106,46707,38451],{"class":165},[106,46709,495],{"class":116},[106,46711,21041],{"class":165},[106,46713,42232],{"class":116},[106,46715,735],{"class":165},[106,46717,495],{"class":116},[106,46719,31495],{"class":165},[106,46721,42241],{"class":116},[106,46723,917],{"class":165},[106,46725,495],{"class":116},[106,46727,320],{"class":165},[106,46729,42250],{"class":116},[106,46731,320],{"class":165},[106,46733,38041],{"class":116},[106,46735,46736,46738,46740,46742,46744,46746,46748,46750,46752,46754,46756,46758,46760,46762,46764],{"class":108,"line":9810},[106,46737,42223],{"class":116},[106,46739,38451],{"class":165},[106,46741,495],{"class":116},[106,46743,32064],{"class":165},[106,46745,42232],{"class":116},[106,46747,32064],{"class":165},[106,46749,495],{"class":116},[106,46751,34864],{"class":165},[106,46753,42241],{"class":116},[106,46755,917],{"class":165},[106,46757,495],{"class":116},[106,46759,320],{"class":165},[106,46761,42250],{"class":116},[106,46763,320],{"class":165},[106,46765,38041],{"class":116},[106,46767,46768,46770,46772,46774,46776,46778,46780,46782,46784,46786,46788,46790,46792,46794,46796],{"class":108,"line":9816},[106,46769,42223],{"class":116},[106,46771,38451],{"class":165},[106,46773,495],{"class":116},[106,46775,735],{"class":165},[106,46777,42232],{"class":116},[106,46779,32064],{"class":165},[106,46781,495],{"class":116},[106,46783,42446],{"class":165},[106,46785,42241],{"class":116},[106,46787,314],{"class":165},[106,46789,495],{"class":116},[106,46791,320],{"class":165},[106,46793,42250],{"class":116},[106,46795,320],{"class":165},[106,46797,38041],{"class":116},[106,46799,46800,46802,46804,46806,46808,46810,46812,46814,46816,46818,46820,46822,46824,46826,46828],{"class":108,"line":9837},[106,46801,42223],{"class":116},[106,46803,42467],{"class":165},[106,46805,495],{"class":116},[106,46807,34864],{"class":165},[106,46809,42232],{"class":116},[106,46811,21041],{"class":165},[106,46813,495],{"class":116},[106,46815,42480],{"class":165},[106,46817,42241],{"class":116},[106,46819,314],{"class":165},[106,46821,495],{"class":116},[106,46823,32064],{"class":165},[106,46825,42250],{"class":116},[106,46827,32064],{"class":165},[106,46829,38041],{"class":116},[106,46831,46832,46834,46836,46838,46840,46842,46844,46846,46848,46850,46852,46854,46856],{"class":108,"line":9843},[106,46833,38091],{"class":116},[106,46835,30868],{"class":5209},[106,46837,162],{"class":112},[106,46839,188],{"class":165},[106,46841,495],{"class":116},[106,46843,30923],{"class":5209},[106,46845,162],{"class":112},[106,46847,194],{"class":165},[106,46849,495],{"class":116},[106,46851,30877],{"class":5209},[106,46853,162],{"class":112},[106,46855,334],{"class":165},[106,46857,123],{"class":116},[106,46859,46860],{"class":108,"line":9857},[106,46861,38120],{"class":116},[106,46863,46864,46866,46868,46870],{"class":108,"line":9863},[106,46865,30839],{"class":165},[106,46867,42533],{"class":116},[106,46869,162],{"class":112},[106,46871,38003],{"class":116},[106,46873,46874,46876,46878,46880,46882,46884,46886,46888,46890,46892,46894,46896,46898,46900,46902],{"class":108,"line":9890},[106,46875,42223],{"class":116},[106,46877,42544],{"class":165},[106,46879,495],{"class":116},[106,46881,34864],{"class":165},[106,46883,42232],{"class":116},[106,46885,21041],{"class":165},[106,46887,495],{"class":116},[106,46889,42480],{"class":165},[106,46891,42241],{"class":116},[106,46893,314],{"class":165},[106,46895,495],{"class":116},[106,46897,32064],{"class":165},[106,46899,42250],{"class":116},[106,46901,32064],{"class":165},[106,46903,38041],{"class":116},[106,46905,46906,46908,46910,46912,46914,46916,46918,46920,46922,46924,46926,46928,46930,46932,46934],{"class":108,"line":9899},[106,46907,42223],{"class":116},[106,46909,42544],{"class":165},[106,46911,495],{"class":116},[106,46913,34934],{"class":165},[106,46915,42232],{"class":116},[106,46917,42153],{"class":165},[106,46919,495],{"class":116},[106,46921,34934],{"class":165},[106,46923,42241],{"class":116},[106,46925,724],{"class":165},[106,46927,495],{"class":116},[106,46929,32064],{"class":165},[106,46931,42250],{"class":116},[106,46933,32064],{"class":165},[106,46935,38041],{"class":116},[106,46937,46938,46940,46942,46944,46946],{"class":108,"line":9905},[106,46939,42607],{"class":116},[106,46941,334],{"class":165},[106,46943,495],{"class":116},[106,46945,334],{"class":165},[106,46947,42616],{"class":116},[106,46949,46950],{"class":108,"line":9913},[106,46951,38784],{"class":116},[106,46953,46954,46956,46958,46960,46962],{"class":108,"line":9918},[106,46955,38789],{"class":116},[106,46957,42627],{"class":165},[106,46959,495],{"class":116},[106,46961,194],{"class":165},[106,46963,123],{"class":116},[106,46965,46966],{"class":108,"line":16597},[106,46967,38120],{"class":116},[106,46969,46970],{"class":108,"line":16603},[106,46971,42642],{"class":175},[106,46973,46974,46976,46978,46980,46982],{"class":108,"line":16626},[106,46975,3395],{"class":112},[106,46977,38862],{"class":116},[106,46979,26037],{"class":112},[106,46981,38867],{"class":165},[106,46983,38870],{"class":116},[106,46985,46986,46988,46990],{"class":108,"line":16632},[106,46987,4634],{"class":112},[106,46989,38882],{"class":165},[106,46991,38885],{"class":116},[106,46993,46994,46996,46998,47000,47002,47004,47006,47008,47010],{"class":108,"line":16655},[106,46995,38895],{"class":116},[106,46997,42669],{"class":5209},[106,46999,162],{"class":112},[106,47001,42674],{"class":221},[106,47003,495],{"class":116},[106,47005,38898],{"class":5209},[106,47007,162],{"class":112},[106,47009,38903],{"class":221},[106,47011,123],{"class":116},[106,47013,47014],{"class":108,"line":16669},[106,47015,42689],{"class":175},[106,47017,47018],{"class":108,"line":16689},[106,47019,42694],{"class":175},[106,47021,47022],{"class":108,"line":16695},[106,47023,42699],{"class":175},[106,47025,47026],{"class":108,"line":16706},[106,47027,42704],{"class":175},[106,47029,47030],{"class":108,"line":16729},[106,47031,42709],{"class":175},[106,47033,47034],{"class":108,"line":16751},[106,47035,42714],{"class":175},[106,47037,47038,47040,47042,47044,47046,47048],{"class":108,"line":16756},[106,47039,38915],{"class":112},[106,47041,38918],{"class":116},[106,47043,38921],{"class":112},[106,47045,38924],{"class":112},[106,47047,38927],{"class":165},[106,47049,3731],{"class":116},[106,47051,47052,47054,47056],{"class":108,"line":16762},[106,47053,38939],{"class":116},[106,47055,308],{"class":165},[106,47057,123],{"class":116},[106,47059,47060,47062,47064],{"class":108,"line":16776},[106,47061,42741],{"class":112},[106,47063,38882],{"class":165},[106,47065,38958],{"class":116},[106,47067,47068,47070,47072,47074,47076],{"class":108,"line":16789},[106,47069,42750],{"class":116},[106,47071,308],{"class":165},[106,47073,495],{"class":116},[106,47075,38980],{"class":165},[106,47077,123],{"class":116},[106,47079,47080,47082,47084,47086,47088,47090],{"class":108,"line":16794},[106,47081,42763],{"class":112},[106,47083,38918],{"class":116},[106,47085,38921],{"class":112},[106,47087,38924],{"class":112},[106,47089,38927],{"class":165},[106,47091,3731],{"class":116},[106,47093,47094,47096,47098],{"class":108,"line":16808},[106,47095,42778],{"class":116},[106,47097,308],{"class":165},[106,47099,123],{"class":116},[106,47101,47102],{"class":108,"line":16813},[106,47103,35159],{"class":175},[106,47105,47106,47108,47110],{"class":108,"line":16819},[106,47107,30795],{"class":112},[106,47109,31087],{"class":1955},[106,47111,31090],{"class":116},[106,47113,47114,47116,47118,47120],{"class":108,"line":16824},[106,47115,31095],{"class":116},[106,47117,162],{"class":112},[106,47119,30817],{"class":165},[106,47121,42805],{"class":116},[106,47123,47124,47126,47128,47130],{"class":108,"line":16838},[106,47125,31095],{"class":116},[106,47127,162],{"class":112},[106,47129,30817],{"class":165},[106,47131,42816],{"class":116},[106,47133,47134,47136,47138,47140],{"class":108,"line":16843},[106,47135,31095],{"class":116},[106,47137,162],{"class":112},[106,47139,30817],{"class":165},[106,47141,42827],{"class":116},[106,47143,47144,47146,47148,47150],{"class":108,"line":16848},[106,47145,31095],{"class":116},[106,47147,162],{"class":112},[106,47149,30817],{"class":165},[106,47151,42838],{"class":116},[106,47153,47154,47156,47158,47160],{"class":108,"line":16862},[106,47155,31095],{"class":116},[106,47157,162],{"class":112},[106,47159,30817],{"class":165},[106,47161,42849],{"class":116},[106,47163,47164,47166],{"class":108,"line":16874},[106,47165,14745],{"class":112},[106,47167,31203],{"class":116},[106,47169,47170],{"class":108,"line":16879},[106,47171,2392],{"emptyLinePlaceholder":33},[106,47173,47174],{"class":108,"line":16892},[106,47175,42864],{"class":175},[106,47177,47178,47180,47182,47184,47186],{"class":108,"line":16897},[106,47179,1523],{"class":112},[106,47181,31214],{"class":165},[106,47183,2941],{"class":112},[106,47185,31219],{"class":221},[106,47187,3731],{"class":116},[106,47189,47190,47192,47194,47196,47198,47200,47202,47204,47206],{"class":108,"line":16902},[106,47191,31231],{"class":116},[106,47193,162],{"class":112},[106,47195,30445],{"class":116},[106,47197,31238],{"class":221},[106,47199,1696],{"class":112},[106,47201,31243],{"class":116},[106,47203,1693],{"class":112},[106,47205,30470],{"class":221},[106,47207,123],{"class":116},[106,47209,47210,47212,47214],{"class":108,"line":16907},[106,47211,31283],{"class":116},[106,47213,162],{"class":112},[106,47215,42905],{"class":116},[106,47217,47218,47220,47222,47224,47226,47228,47230,47232],{"class":108,"line":16920},[106,47219,31293],{"class":165},[106,47221,31296],{"class":116},[106,47223,334],{"class":165},[106,47225,495],{"class":116},[106,47227,31495],{"class":165},[106,47229,495],{"class":116},[106,47231,31495],{"class":165},[106,47233,31309],{"class":116},[21991,47235,47237],{"id":47236},"_242训练代码包含预处理","2.4.2.训练代码（包含预处理）",[14,47239,47240],{},"计算图片的均值与方差，用于训练中归一化处理操作",[97,47242,47244],{"className":30372,"code":47243,"language":30374,"meta":25,"style":25},"# 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",[103,47245,47246,47251,47264,47269,47275,47280,47290,47294,47299,47309,47313,47318,47328,47345,47349,47354,47366,47378,47409,47418,47428,47438,47442,47447,47462,47466,47471,47476,47481,47491,47496,47521,47525,47530,47545,47549,47562,47566,47571,47576,47581,47586,47591,47601,47611,47634,47642,47650,47658,47662,47674,47678,47683,47687,47691,47698,47718,47742,47749,47763,47768,47773,47777,47791,47795,47807],{"__ignoreMap":25},[106,47247,47248],{"class":108,"line":109},[106,47249,47250],{"class":175},"# PIL（Python Imaging Library）里的 Image 用来读取图片\n",[106,47252,47253,47255,47258,47261],{"class":108,"line":28},[106,47254,30731],{"class":112},[106,47256,47257],{"class":165}," PIL",[106,47259,47260],{"class":112}," import",[106,47262,47263],{"class":116}," Image\n",[106,47265,47266],{"class":108,"line":1172},[106,47267,47268],{"class":175},"# os 用来处理文件夹和文件路径\n",[106,47270,47271,47273],{"class":108,"line":1187},[106,47272,30386],{"class":112},[106,47274,45299],{"class":116},[106,47276,47277],{"class":108,"line":1193},[106,47278,47279],{"class":175},"# numpy 是科学计算库，用于做矩阵运算（这里用来处理图片像素）\n",[106,47281,47282,47284,47286,47288],{"class":108,"line":1207},[106,47283,30386],{"class":112},[106,47285,31374],{"class":116},[106,47287,31377],{"class":112},[106,47289,31380],{"class":116},[106,47291,47292],{"class":108,"line":1213},[106,47293,2392],{"emptyLinePlaceholder":33},[106,47295,47296],{"class":108,"line":1304},[106,47297,47298],{"class":175},"# 文件夹路径，包含所有图片文件\n",[106,47300,47301,47304,47306],{"class":108,"line":1310},[106,47302,47303],{"class":116},"folder_path ",[106,47305,162],{"class":112},[106,47307,47308],{"class":221}," 'data_cat_dog'\n",[106,47310,47311],{"class":108,"line":1322},[106,47312,2392],{"emptyLinePlaceholder":33},[106,47314,47315],{"class":108,"line":1604},[106,47316,47317],{"class":175},"# 初始化累积变量\n",[106,47319,47320,47323,47325],{"class":108,"line":1609},[106,47321,47322],{"class":116},"total_pixels ",[106,47324,162],{"class":112},[106,47326,47327],{"class":165}," 0\n",[106,47329,47330,47333,47335,47338,47340,47342],{"class":108,"line":1615},[106,47331,47332],{"class":116},"sum_normalized_pixel_values ",[106,47334,162],{"class":112},[106,47336,47337],{"class":116}," np.zeros(",[106,47339,188],{"class":165},[106,47341,45802],{"class":116},[106,47343,47344],{"class":175},"# 如果是RGB图像，需要三个通道的均值和方差\n",[106,47346,47347],{"class":108,"line":1620},[106,47348,2392],{"emptyLinePlaceholder":33},[106,47350,47351],{"class":108,"line":1634},[106,47352,47353],{"class":175},"# 遍历文件夹中的图片文件\n",[106,47355,47356,47358,47361,47363],{"class":108,"line":1639},[106,47357,3017],{"class":112},[106,47359,47360],{"class":116}," root, dirs, files ",[106,47362,26037],{"class":112},[106,47364,47365],{"class":116}," os.walk(folder_path):\n",[106,47367,47368,47370,47373,47375],{"class":108,"line":1645},[106,47369,3193],{"class":112},[106,47371,47372],{"class":116}," filename ",[106,47374,26037],{"class":112},[106,47376,47377],{"class":116}," files:\n",[106,47379,47380,47382,47385,47388,47390,47393,47395,47398,47400,47403,47406],{"class":108,"line":1666},[106,47381,2489],{"class":112},[106,47383,47384],{"class":116}," filename.endswith((",[106,47386,47387],{"class":221},"'.jpg'",[106,47389,12428],{"class":116},[106,47391,47392],{"class":221},"'.jpeg'",[106,47394,12428],{"class":116},[106,47396,47397],{"class":221},"'.png'",[106,47399,12428],{"class":116},[106,47401,47402],{"class":221},"'.bmp'",[106,47404,47405],{"class":116},")):  ",[106,47407,47408],{"class":175},"# 可根据实际情况添加其他格式\n",[106,47410,47411,47413,47415],{"class":108,"line":1671},[106,47412,45667],{"class":116},[106,47414,162],{"class":112},[106,47416,47417],{"class":116}," os.path.join(root, filename)\n",[106,47419,47420,47423,47425],{"class":108,"line":1685},[106,47421,47422],{"class":116},"            image ",[106,47424,162],{"class":112},[106,47426,47427],{"class":116}," Image.open(image_path)\n",[106,47429,47430,47433,47435],{"class":108,"line":1690},[106,47431,47432],{"class":116},"            image_array ",[106,47434,162],{"class":112},[106,47436,47437],{"class":116}," np.array(image)\n",[106,47439,47440],{"class":108,"line":1719},[106,47441,2392],{"emptyLinePlaceholder":33},[106,47443,47444],{"class":108,"line":1724},[106,47445,47446],{"class":175},"            # 归一化像素值到0-1之间\n",[106,47448,47449,47452,47454,47457,47459],{"class":108,"line":1741},[106,47450,47451],{"class":116},"            normalized_image_array ",[106,47453,162],{"class":112},[106,47455,47456],{"class":116}," image_array ",[106,47458,701],{"class":112},[106,47460,47461],{"class":165}," 255.0\n",[106,47463,47464],{"class":108,"line":1746},[106,47465,2392],{"emptyLinePlaceholder":33},[106,47467,47468],{"class":108,"line":1751},[106,47469,47470],{"class":175},"            # print(image_path)\n",[106,47472,47473],{"class":108,"line":1756},[106,47474,47475],{"class":175},"            # print(normalized_image_array.shape)\n",[106,47477,47478],{"class":108,"line":1770},[106,47479,47480],{"class":175},"            # 累积归一化后的像素值和像素数量\n",[106,47482,47483,47486,47488],{"class":108,"line":1775},[106,47484,47485],{"class":116},"            total_pixels ",[106,47487,9470],{"class":112},[106,47489,47490],{"class":116}," normalized_image_array.size\n",[106,47492,47493],{"class":108,"line":2569},[106,47494,47495],{"class":175},"            # 是把图片在高度和宽度方向求和，得到每个通道的总和（RGB 三个通道分别求）\n",[106,47497,47498,47501,47503,47506,47509,47511,47513,47515,47517,47519],{"class":108,"line":2583},[106,47499,47500],{"class":116},"            sum_normalized_pixel_values ",[106,47502,9470],{"class":112},[106,47504,47505],{"class":116}," np.sum(normalized_image_array, ",[106,47507,47508],{"class":5209},"axis",[106,47510,162],{"class":112},[106,47512,117],{"class":116},[106,47514,308],{"class":165},[106,47516,12428],{"class":116},[106,47518,334],{"class":165},[106,47520,30491],{"class":116},[106,47522,47523],{"class":108,"line":2591},[106,47524,2392],{"emptyLinePlaceholder":33},[106,47526,47527],{"class":108,"line":2596},[106,47528,47529],{"class":175},"# 用像素总和\u002F像素总数 就得到每个通道的均值\n",[106,47531,47532,47535,47537,47540,47542],{"class":108,"line":2602},[106,47533,47534],{"class":116},"mean ",[106,47536,162],{"class":112},[106,47538,47539],{"class":116}," sum_normalized_pixel_values ",[106,47541,701],{"class":112},[106,47543,47544],{"class":116}," total_pixels\n",[106,47546,47547],{"class":108,"line":2608},[106,47548,2392],{"emptyLinePlaceholder":33},[106,47550,47551,47554,47556,47558,47560],{"class":108,"line":2613},[106,47552,47553],{"class":116},"sum_squared_diff ",[106,47555,162],{"class":112},[106,47557,47337],{"class":116},[106,47559,188],{"class":165},[106,47561,123],{"class":116},[106,47563,47564],{"class":108,"line":7941},[106,47565,2392],{"emptyLinePlaceholder":33},[106,47567,47568],{"class":108,"line":7965},[106,47569,47570],{"class":175},"# os.walk(folder_path)：遍历文件夹里所有文件和子文件夹\n",[106,47572,47573],{"class":108,"line":7970},[106,47574,47575],{"class":175},"# filename.endswith(...)：只选择图片文件（jpg\u002Fpng\u002Fbmp）\n",[106,47577,47578],{"class":108,"line":7976},[106,47579,47580],{"class":175},"# os.path.join(root, filename)：得到每张图片的完整路径\n",[106,47582,47583],{"class":108,"line":8003},[106,47584,47585],{"class":175},"# Image.open(image_path)：打开图片\n",[106,47587,47588],{"class":108,"line":8008},[106,47589,47590],{"class":175},"# np.array(image)：把图片转成 numpy 数组，形状一般是 (高度, 宽度, 3)\n",[106,47592,47593,47595,47597,47599],{"class":108,"line":8014},[106,47594,3017],{"class":112},[106,47596,47360],{"class":116},[106,47598,26037],{"class":112},[106,47600,47365],{"class":116},[106,47602,47603,47605,47607,47609],{"class":108,"line":8026},[106,47604,3193],{"class":112},[106,47606,47372],{"class":116},[106,47608,26037],{"class":112},[106,47610,47377],{"class":116},[106,47612,47613,47615,47617,47619,47621,47623,47625,47627,47629,47631],{"class":108,"line":8038},[106,47614,2489],{"class":112},[106,47616,47384],{"class":116},[106,47618,47387],{"class":221},[106,47620,12428],{"class":116},[106,47622,47392],{"class":221},[106,47624,12428],{"class":116},[106,47626,47397],{"class":221},[106,47628,12428],{"class":116},[106,47630,47402],{"class":221},[106,47632,47633],{"class":116},")):\n",[106,47635,47636,47638,47640],{"class":108,"line":8050},[106,47637,45667],{"class":116},[106,47639,162],{"class":112},[106,47641,47417],{"class":116},[106,47643,47644,47646,47648],{"class":108,"line":9709},[106,47645,47422],{"class":116},[106,47647,162],{"class":112},[106,47649,47427],{"class":116},[106,47651,47652,47654,47656],{"class":108,"line":9734},[106,47653,47432],{"class":116},[106,47655,162],{"class":112},[106,47657,47437],{"class":116},[106,47659,47660],{"class":108,"line":9757},[106,47661,47446],{"class":175},[106,47663,47664,47666,47668,47670,47672],{"class":108,"line":9781},[106,47665,47451],{"class":116},[106,47667,162],{"class":112},[106,47669,47456],{"class":116},[106,47671,701],{"class":112},[106,47673,47461],{"class":165},[106,47675,47676],{"class":108,"line":9786},[106,47677,47475],{"class":175},[106,47679,47680],{"class":108,"line":9791},[106,47681,47682],{"class":175},"            # print(mean.shape)\n",[106,47684,47685],{"class":108,"line":9796},[106,47686,47470],{"class":175},[106,47688,47689],{"class":108,"line":9805},[106,47690,2392],{"emptyLinePlaceholder":33},[106,47692,47693,47696],{"class":108,"line":9810},[106,47694,47695],{"class":112},"            try",[106,47697,3731],{"class":116},[106,47699,47700,47703,47705,47708,47710,47713,47715],{"class":108,"line":9816},[106,47701,47702],{"class":116},"                diff ",[106,47704,162],{"class":112},[106,47706,47707],{"class":116}," (normalized_image_array ",[106,47709,649],{"class":112},[106,47711,47712],{"class":116}," mean) ",[106,47714,10654],{"class":112},[106,47716,47717],{"class":165}," 2\n",[106,47719,47720,47723,47725,47728,47730,47732,47734,47736,47738,47740],{"class":108,"line":9837},[106,47721,47722],{"class":116},"                sum_squared_diff ",[106,47724,9470],{"class":112},[106,47726,47727],{"class":116}," np.sum(diff, ",[106,47729,47508],{"class":5209},[106,47731,162],{"class":112},[106,47733,117],{"class":116},[106,47735,308],{"class":165},[106,47737,12428],{"class":116},[106,47739,334],{"class":165},[106,47741,30491],{"class":116},[106,47743,47744,47747],{"class":108,"line":9843},[106,47745,47746],{"class":112},"            except",[106,47748,3731],{"class":116},[106,47750,47751,47754,47756,47758,47761],{"class":108,"line":9857},[106,47752,47753],{"class":165},"                print",[106,47755,117],{"class":116},[106,47757,169],{"class":112},[106,47759,47760],{"class":221},"\"捕获到自定义异常\"",[106,47762,123],{"class":116},[106,47764,47765],{"class":108,"line":9863},[106,47766,47767],{"class":175},"            # diff = (normalized_image_array - mean) ** 2\n",[106,47769,47770],{"class":108,"line":9890},[106,47771,47772],{"class":175},"            # sum_squared_diff += np.sum(diff, axis=(0, 1))\n",[106,47774,47775],{"class":108,"line":9899},[106,47776,2392],{"emptyLinePlaceholder":33},[106,47778,47779,47782,47784,47787,47789],{"class":108,"line":9905},[106,47780,47781],{"class":116},"variance ",[106,47783,162],{"class":112},[106,47785,47786],{"class":116}," sum_squared_diff ",[106,47788,701],{"class":112},[106,47790,47544],{"class":116},[106,47792,47793],{"class":108,"line":9913},[106,47794,2392],{"emptyLinePlaceholder":33},[106,47796,47797,47799,47801,47804],{"class":108,"line":9918},[106,47798,30409],{"class":165},[106,47800,117],{"class":116},[106,47802,47803],{"class":221},"\"Mean:\"",[106,47805,47806],{"class":116},", mean)\n",[106,47808,47809,47811,47813,47816],{"class":108,"line":16597},[106,47810,30409],{"class":165},[106,47812,117],{"class":116},[106,47814,47815],{"class":221},"\"Variance:\"",[106,47817,47818],{"class":116},", variance)\n",[97,47820,47822],{"className":30372,"code":47821,"language":30374,"meta":25,"style":25},"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",[103,47823,47824,47830,47836,47846,47852,47862,47876,47886,47896,47906,47910,47920,47930,47934,47938,47946,47951,47956,47975,47979,47984,47989,47994,47999,48040,48045,48055,48060,48073,48078,48083,48088,48093,48098,48102,48107,48112,48134,48138,48170,48184,48194,48204,48208,48218,48232,48242,48252,48262,48268,48272,48276,48280,48284,48288,48296,48316,48320,48324,48328,48332,48348,48352,48356,48364,48368,48372,48380,48384,48388,48392,48400,48404,48408,48412,48420,48424,48432,48436,48444,48448,48456,48460,48468,48472,48476,48484,48488,48492,48504,48528,48542,48546,48550,48554,48562,48566,48574,48578,48586,48590,48598,48602,48610,48614,48622,48626,48638,48642,48650,48654,48662,48666,48670,48674,48678,48686,48690,48706,48710,48718,48722,48726,48730,48734,48738,48742,48746,48762,48766,48778,48782,48794,48798,48810,48814,48822,48826,48834,48838,48842,48846,48852,48856,48864,48868,48884,48888,48896,48900,48916,48928,48932,48944,48948,48952,48960,48964,48968,48976,48980,48988,48992,49000,49004,49008,49050,49092,49096,49100,49116,49120,49136,49140,49144,49152,49156,49160,49172,49210,49214,49218,49226,49230,49244,49254,49260,49266,49272,49278,49282,49286,49292,49296,49300,49308,49312,49330,49334,49338,49342,49358,49362,49366,49370,49374,49378,49398,49418,49422,49426,49430,49438,49446,49450,49466,49486,49506,49510,49515,49524,49533,49538,49543,49548,49561,49566,49575,49584,49601],{"__ignoreMap":25},[106,47825,47826,47828],{"class":108,"line":109},[106,47827,30386],{"class":112},[106,47829,31816],{"class":116},[106,47831,47832,47834],{"class":108,"line":28},[106,47833,30386],{"class":112},[106,47835,31823],{"class":116},[106,47837,47838,47840,47842,47844],{"class":108,"line":1172},[106,47839,30386],{"class":112},[106,47841,31834],{"class":116},[106,47843,31377],{"class":112},[106,47845,31839],{"class":116},[106,47847,47848,47850],{"class":108,"line":1187},[106,47849,30386],{"class":112},[106,47851,30389],{"class":116},[106,47853,47854,47856,47858,47860],{"class":108,"line":1193},[106,47855,30731],{"class":112},[106,47857,31409],{"class":116},[106,47859,30386],{"class":112},[106,47861,31856],{"class":116},[106,47863,47864,47866,47868,47870,47873],{"class":108,"line":1207},[106,47865,30731],{"class":112},[106,47867,31362],{"class":116},[106,47869,30386],{"class":112},[106,47871,47872],{"class":116}," ImageFolder ",[106,47874,47875],{"class":175},"# 导入图像数据集,可以直接读取文件夹中的数据,并划分标签 \n",[106,47877,47878,47880,47882,47884],{"class":108,"line":1213},[106,47879,30731],{"class":112},[106,47881,31392],{"class":116},[106,47883,30386],{"class":112},[106,47885,31397],{"class":116},[106,47887,47888,47890,47892,47894],{"class":108,"line":1304},[106,47889,30386],{"class":112},[106,47891,31409],{"class":116},[106,47893,31377],{"class":112},[106,47895,31414],{"class":116},[106,47897,47898,47900,47902,47904],{"class":108,"line":1310},[106,47899,30386],{"class":112},[106,47901,31426],{"class":116},[106,47903,31377],{"class":112},[106,47905,31431],{"class":116},[106,47907,47908],{"class":108,"line":1322},[106,47909,31901],{"class":175},[106,47911,47912,47914,47916,47918],{"class":108,"line":1604},[106,47913,30731],{"class":112},[106,47915,31908],{"class":116},[106,47917,30386],{"class":112},[106,47919,43025],{"class":116},[106,47921,47922,47924,47926,47928],{"class":108,"line":1609},[106,47923,30731],{"class":112},[106,47925,30734],{"class":116},[106,47927,30386],{"class":112},[106,47929,30739],{"class":116},[106,47931,47932],{"class":108,"line":1615},[106,47933,2392],{"emptyLinePlaceholder":33},[106,47935,47936],{"class":108,"line":1620},[106,47937,31936],{"class":175},[106,47939,47940,47942,47944],{"class":108,"line":1634},[106,47941,31941],{"class":112},[106,47943,31944],{"class":1955},[106,47945,31947],{"class":116},[106,47947,47948],{"class":108,"line":1639},[106,47949,47950],{"class":175},"    # 导入自己的数据集，并进行数据处理\n",[106,47952,47953],{"class":108,"line":1645},[106,47954,47955],{"class":175},"    # 定义数据集的路径\n",[106,47957,47958,47961,47963,47965,47967,47969,47973],{"class":108,"line":1666},[106,47959,47960],{"class":165},"    ROOT_PATH",[106,47962,162],{"class":112},[106,47964,787],{"class":112},[106,47966,368],{"class":221},[106,47968,675],{"class":165},[106,47970,47972],{"class":47971},"sA_wV","\u002Fdata\u002Ftrain",[106,47974,25127],{"class":221},[106,47976,47977],{"class":108,"line":1671},[106,47978,2392],{"emptyLinePlaceholder":33},[106,47980,47981],{"class":108,"line":1685},[106,47982,47983],{"class":175},"    # 定义归一化方法\n",[106,47985,47986],{"class":108,"line":1690},[106,47987,47988],{"class":175},"    # 这里需要先计算一下数据集的均值和方差\n",[106,47990,47991],{"class":108,"line":1719},[106,47992,47993],{"class":175},"    #  mean_std.py 文件可以计算出均值和方差,然后把结果填入下面的 Normalize() 中\n",[106,47995,47996],{"class":108,"line":1724},[106,47997,47998],{"class":175},"    # 第一个参数是均值，第二个参数是方差\n",[106,48000,48001,48004,48006,48009,48012,48014,48017,48019,48022,48025,48028,48030,48033,48035,48038],{"class":108,"line":1741},[106,48002,48003],{"class":116},"    normalize",[106,48005,162],{"class":112},[106,48007,48008],{"class":116},"transforms.Normalize([",[106,48010,48011],{"class":165},"0.162",[106,48013,495],{"class":116},[106,48015,48016],{"class":165},"0.151",[106,48018,495],{"class":116},[106,48020,48021],{"class":165},"0.138",[106,48023,48024],{"class":116},"],[",[106,48026,48027],{"class":165},"0.058",[106,48029,495],{"class":116},[106,48031,48032],{"class":165},"0.052",[106,48034,495],{"class":116},[106,48036,48037],{"class":165},"0.048",[106,48039,4649],{"class":116},[106,48041,48042],{"class":108,"line":1746},[106,48043,48044],{"class":175},"    # 定义数据集处理方法变量\n",[106,48046,48047,48050,48052],{"class":108,"line":1751},[106,48048,48049],{"class":116},"    train_transform",[106,48051,162],{"class":112},[106,48053,48054],{"class":116},"transforms.Compose([\n",[106,48056,48057],{"class":108,"line":1756},[106,48058,48059],{"class":175},"        # 调整图像大小为224*224\n",[106,48061,48062,48065,48067,48069,48071],{"class":108,"line":1770},[106,48063,48064],{"class":116},"        transforms.Resize((",[106,48066,31495],{"class":165},[106,48068,495],{"class":116},[106,48070,31495],{"class":165},[106,48072,42616],{"class":116},[106,48074,48075],{"class":108,"line":1775},[106,48076,48077],{"class":175},"        # 将图像转换为张量\n",[106,48079,48080],{"class":108,"line":2569},[106,48081,48082],{"class":116},"        transforms.ToTensor(),\n",[106,48084,48085],{"class":108,"line":2583},[106,48086,48087],{"class":116},"        normalize])\n",[106,48089,48090],{"class":108,"line":2591},[106,48091,48092],{"class":175},"    # 在进行转换tensor时,会将像素值归一化到[0,1]之间\n",[106,48094,48095],{"class":108,"line":2596},[106,48096,48097],{"class":175},"    # 但是没有进行均值方差归一化处理,需要进行均值方差归一化处理，使归一化后的数据符合标准正态分布\n",[106,48099,48100],{"class":108,"line":2602},[106,48101,2392],{"emptyLinePlaceholder":33},[106,48103,48104],{"class":108,"line":2608},[106,48105,48106],{"class":175},"    # 加载数据集\n",[106,48108,48109],{"class":108,"line":2613},[106,48110,48111],{"class":175},"    # 传入数据集路径与处理方法\n",[106,48113,48114,48116,48118,48121,48124,48126,48129,48131],{"class":108,"line":7941},[106,48115,31952],{"class":116},[106,48117,162],{"class":112},[106,48119,48120],{"class":116},"ImageFolder(",[106,48122,48123],{"class":165},"ROOT_PATH",[106,48125,495],{"class":116},[106,48127,48128],{"class":5209},"transform",[106,48130,162],{"class":112},[106,48132,48133],{"class":116},"train_transform)\n",[106,48135,48136],{"class":108,"line":7965},[106,48137,2392],{"emptyLinePlaceholder":33},[106,48139,48140,48142,48144,48146,48148,48150,48152,48154,48156,48158,48160,48162,48164,48166,48168],{"class":108,"line":7970},[106,48141,32004],{"class":116},[106,48143,162],{"class":112},[106,48145,32009],{"class":116},[106,48147,32012],{"class":165},[106,48149,117],{"class":116},[106,48151,32017],{"class":165},[106,48153,572],{"class":112},[106,48155,7351],{"class":165},[106,48157,32024],{"class":116},[106,48159,32012],{"class":165},[106,48161,117],{"class":116},[106,48163,32031],{"class":165},[106,48165,572],{"class":112},[106,48167,7351],{"class":165},[106,48169,32038],{"class":116},[106,48171,48172,48174,48176,48178,48180,48182],{"class":108,"line":7976},[106,48173,32043],{"class":116},[106,48175,162],{"class":112},[106,48177,32048],{"class":116},[106,48179,31531],{"class":5209},[106,48181,162],{"class":112},[106,48183,31536],{"class":116},[106,48185,48186,48188,48190,48192],{"class":108,"line":8003},[106,48187,32059],{"class":5209},[106,48189,162],{"class":112},[106,48191,314],{"class":165},[106,48193,31460],{"class":116},[106,48195,48196,48198,48200,48202],{"class":108,"line":8008},[106,48197,32071],{"class":5209},[106,48199,162],{"class":112},[106,48201,31470],{"class":165},[106,48203,31460],{"class":116},[106,48205,48206],{"class":108,"line":8014},[106,48207,32082],{"class":175},[106,48209,48210,48212,48214,48216],{"class":108,"line":8026},[106,48211,32087],{"class":5209},[106,48213,162],{"class":112},[106,48215,512],{"class":165},[106,48217,123],{"class":116},[106,48219,48220,48222,48224,48226,48228,48230],{"class":108,"line":8038},[106,48221,32098],{"class":116},[106,48223,162],{"class":112},[106,48225,31528],{"class":116},[106,48227,31531],{"class":5209},[106,48229,162],{"class":112},[106,48231,32109],{"class":116},[106,48233,48234,48236,48238,48240],{"class":108,"line":8050},[106,48235,32114],{"class":5209},[106,48237,162],{"class":112},[106,48239,314],{"class":165},[106,48241,31460],{"class":116},[106,48243,48244,48246,48248,48250],{"class":108,"line":9709},[106,48245,32125],{"class":5209},[106,48247,162],{"class":112},[106,48249,31470],{"class":165},[106,48251,31460],{"class":116},[106,48253,48254,48256,48258,48260],{"class":108,"line":9734},[106,48255,32136],{"class":5209},[106,48257,162],{"class":112},[106,48259,512],{"class":165},[106,48261,123],{"class":116},[106,48263,48264,48266],{"class":108,"line":9757},[106,48265,4082],{"class":112},[106,48267,32149],{"class":116},[106,48269,48270],{"class":108,"line":9781},[106,48271,2392],{"emptyLinePlaceholder":33},[106,48273,48274],{"class":108,"line":9786},[106,48275,32158],{"class":175},[106,48277,48278],{"class":108,"line":9791},[106,48279,32163],{"class":175},[106,48281,48282],{"class":108,"line":9796},[106,48283,2392],{"emptyLinePlaceholder":33},[106,48285,48286],{"class":108,"line":9805},[106,48287,32172],{"class":175},[106,48289,48290,48292,48294],{"class":108,"line":9810},[106,48291,31941],{"class":112},[106,48293,32179],{"class":1955},[106,48295,32182],{"class":116},[106,48297,48298,48300,48302,48304,48306,48308,48310,48312,48314],{"class":108,"line":9816},[106,48299,31231],{"class":116},[106,48301,162],{"class":112},[106,48303,30445],{"class":116},[106,48305,31238],{"class":221},[106,48307,1696],{"class":112},[106,48309,31243],{"class":116},[106,48311,1693],{"class":112},[106,48313,32201],{"class":221},[106,48315,123],{"class":116},[106,48317,48318],{"class":108,"line":9837},[106,48319,2392],{"emptyLinePlaceholder":33},[106,48321,48322],{"class":108,"line":9843},[106,48323,32216],{"class":175},[106,48325,48326],{"class":108,"line":9857},[106,48327,32221],{"class":175},[106,48329,48330],{"class":108,"line":9863},[106,48331,32226],{"class":175},[106,48333,48334,48336,48338,48340,48342,48344,48346],{"class":108,"line":9890},[106,48335,32231],{"class":116},[106,48337,162],{"class":112},[106,48339,32236],{"class":116},[106,48341,32239],{"class":5209},[106,48343,162],{"class":112},[106,48345,32244],{"class":165},[106,48347,123],{"class":116},[106,48349,48350],{"class":108,"line":9899},[106,48351,2392],{"emptyLinePlaceholder":33},[106,48353,48354],{"class":108,"line":9905},[106,48355,32255],{"class":175},[106,48357,48358,48360,48362],{"class":108,"line":9913},[106,48359,32260],{"class":116},[106,48361,162],{"class":112},[106,48363,32265],{"class":116},[106,48365,48366],{"class":108,"line":9918},[106,48367,2392],{"emptyLinePlaceholder":33},[106,48369,48370],{"class":108,"line":16597},[106,48371,32274],{"class":175},[106,48373,48374,48376,48378],{"class":108,"line":16603},[106,48375,31283],{"class":116},[106,48377,162],{"class":112},[106,48379,32283],{"class":116},[106,48381,48382],{"class":108,"line":16626},[106,48383,32288],{"class":175},[106,48385,48386],{"class":108,"line":16632},[106,48387,32293],{"class":175},[106,48389,48390],{"class":108,"line":16655},[106,48391,32298],{"class":175},[106,48393,48394,48396,48398],{"class":108,"line":16669},[106,48395,32303],{"class":116},[106,48397,162],{"class":112},[106,48399,32308],{"class":116},[106,48401,48402],{"class":108,"line":16689},[106,48403,2392],{"emptyLinePlaceholder":33},[106,48405,48406],{"class":108,"line":16695},[106,48407,32321],{"class":175},[106,48409,48410],{"class":108,"line":16706},[106,48411,32326],{"class":175},[106,48413,48414,48416,48418],{"class":108,"line":16729},[106,48415,32331],{"class":116},[106,48417,162],{"class":112},[106,48419,32336],{"class":165},[106,48421,48422],{"class":108,"line":16751},[106,48423,32341],{"class":175},[106,48425,48426,48428,48430],{"class":108,"line":16756},[106,48427,32346],{"class":116},[106,48429,162],{"class":112},[106,48431,32351],{"class":116},[106,48433,48434],{"class":108,"line":16762},[106,48435,32356],{"class":175},[106,48437,48438,48440,48442],{"class":108,"line":16776},[106,48439,32361],{"class":116},[106,48441,162],{"class":112},[106,48443,32351],{"class":116},[106,48445,48446],{"class":108,"line":16789},[106,48447,32370],{"class":175},[106,48449,48450,48452,48454],{"class":108,"line":16794},[106,48451,32375],{"class":116},[106,48453,162],{"class":112},[106,48455,32351],{"class":116},[106,48457,48458],{"class":108,"line":16808},[106,48459,32384],{"class":175},[106,48461,48462,48464,48466],{"class":108,"line":16813},[106,48463,32389],{"class":116},[106,48465,162],{"class":112},[106,48467,32351],{"class":116},[106,48469,48470],{"class":108,"line":16819},[106,48471,2392],{"emptyLinePlaceholder":33},[106,48473,48474],{"class":108,"line":16824},[106,48475,32402],{"class":175},[106,48477,48478,48480,48482],{"class":108,"line":16838},[106,48479,32407],{"class":116},[106,48481,162],{"class":112},[106,48483,32412],{"class":116},[106,48485,48486],{"class":108,"line":16843},[106,48487,2392],{"emptyLinePlaceholder":33},[106,48489,48490],{"class":108,"line":16848},[106,48491,32425],{"class":175},[106,48493,48494,48496,48498,48500,48502],{"class":108,"line":16862},[106,48495,3193],{"class":112},[106,48497,32432],{"class":116},[106,48499,26037],{"class":112},[106,48501,32437],{"class":165},[106,48503,32440],{"class":116},[106,48505,48506,48508,48510,48512,48514,48516,48518,48520,48522,48524,48526],{"class":108,"line":16874},[106,48507,32445],{"class":165},[106,48509,117],{"class":116},[106,48511,32450],{"class":221},[106,48513,32453],{"class":165},[106,48515,701],{"class":221},[106,48517,32453],{"class":165},[106,48519,368],{"class":221},[106,48521,32462],{"class":116},[106,48523,649],{"class":112},[106,48525,334],{"class":165},[106,48527,30491],{"class":116},[106,48529,48530,48532,48534,48536,48538,48540],{"class":108,"line":16879},[106,48531,32445],{"class":165},[106,48533,117],{"class":116},[106,48535,32477],{"class":221},[106,48537,572],{"class":112},[106,48539,563],{"class":165},[106,48541,123],{"class":116},[106,48543,48544],{"class":108,"line":16892},[106,48545,2392],{"emptyLinePlaceholder":33},[106,48547,48548],{"class":108,"line":16897},[106,48549,32492],{"class":175},[106,48551,48552],{"class":108,"line":16902},[106,48553,32497],{"class":175},[106,48555,48556,48558,48560],{"class":108,"line":16907},[106,48557,32502],{"class":116},[106,48559,162],{"class":112},[106,48561,32336],{"class":165},[106,48563,48564],{"class":108,"line":16920},[106,48565,32511],{"class":175},[106,48567,48568,48570,48572],{"class":108,"line":16925},[106,48569,32516],{"class":116},[106,48571,162],{"class":112},[106,48573,3077],{"class":165},[106,48575,48576],{"class":108,"line":32627},[106,48577,32525],{"class":175},[106,48579,48580,48582,48584],{"class":108,"line":32633},[106,48581,32530],{"class":116},[106,48583,162],{"class":112},[106,48585,32336],{"class":165},[106,48587,48588],{"class":108,"line":32639},[106,48589,32539],{"class":175},[106,48591,48592,48594,48596],{"class":108,"line":32645},[106,48593,32544],{"class":116},[106,48595,162],{"class":112},[106,48597,3077],{"class":165},[106,48599,48600],{"class":108,"line":32651},[106,48601,32553],{"class":175},[106,48603,48604,48606,48608],{"class":108,"line":32662},[106,48605,32558],{"class":116},[106,48607,162],{"class":112},[106,48609,3077],{"class":165},[106,48611,48612],{"class":108,"line":32668},[106,48613,32567],{"class":175},[106,48615,48616,48618,48620],{"class":108,"line":32688},[106,48617,32572],{"class":116},[106,48619,162],{"class":112},[106,48621,3077],{"class":165},[106,48623,48624],{"class":108,"line":32694},[106,48625,32581],{"class":175},[106,48627,48628,48630,48632,48634,48636],{"class":108,"line":32705},[106,48629,3395],{"class":112},[106,48631,31595],{"class":116},[106,48633,26037],{"class":112},[106,48635,31600],{"class":165},[106,48637,32594],{"class":116},[106,48639,48640],{"class":108,"line":32711},[106,48641,32599],{"class":175},[106,48643,48644,48646,48648],{"class":108,"line":32717},[106,48645,32604],{"class":116},[106,48647,162],{"class":112},[106,48649,32609],{"class":116},[106,48651,48652],{"class":108,"line":32723},[106,48653,32614],{"class":175},[106,48655,48656,48658,48660],{"class":108,"line":32729},[106,48657,32619],{"class":116},[106,48659,162],{"class":112},[106,48661,32624],{"class":116},[106,48663,48664],{"class":108,"line":32735},[106,48665,32630],{"class":175},[106,48667,48668],{"class":108,"line":32741},[106,48669,32636],{"class":116},[106,48671,48672],{"class":108,"line":32747},[106,48673,32642],{"class":175},[106,48675,48676],{"class":108,"line":32767},[106,48677,32648],{"class":175},[106,48679,48680,48682,48684],{"class":108,"line":32773},[106,48681,32654],{"class":116},[106,48683,162],{"class":112},[106,48685,32659],{"class":116},[106,48687,48688],{"class":108,"line":32789},[106,48689,32665],{"class":175},[106,48691,48692,48694,48696,48698,48700,48702,48704],{"class":108,"line":32795},[106,48693,32671],{"class":116},[106,48695,162],{"class":112},[106,48697,32676],{"class":116},[106,48699,32679],{"class":5209},[106,48701,162],{"class":112},[106,48703,334],{"class":165},[106,48705,123],{"class":116},[106,48707,48708],{"class":108,"line":32809},[106,48709,32691],{"class":175},[106,48711,48712,48714,48716],{"class":108,"line":32815},[106,48713,32697],{"class":116},[106,48715,162],{"class":112},[106,48717,32702],{"class":116},[106,48719,48720],{"class":108,"line":32830},[106,48721,32708],{"class":175},[106,48723,48724],{"class":108,"line":32836},[106,48725,32714],{"class":116},[106,48727,48728],{"class":108,"line":32845},[106,48729,32720],{"class":175},[106,48731,48732],{"class":108,"line":32851},[106,48733,32726],{"class":116},[106,48735,48736],{"class":108,"line":32860},[106,48737,32732],{"class":175},[106,48739,48740],{"class":108,"line":32866},[106,48741,32738],{"class":116},[106,48743,48744],{"class":108,"line":32872},[106,48745,32744],{"class":175},[106,48747,48748,48750,48752,48754,48756,48758,48760],{"class":108,"line":32881},[106,48749,32750],{"class":116},[106,48751,9470],{"class":112},[106,48753,32755],{"class":116},[106,48755,572],{"class":112},[106,48757,32760],{"class":116},[106,48759,308],{"class":165},[106,48761,123],{"class":116},[106,48763,48764],{"class":108,"line":32887},[106,48765,32770],{"class":175},[106,48767,48768,48770,48772,48774,48776],{"class":108,"line":32898},[106,48769,32776],{"class":116},[106,48771,9470],{"class":112},[106,48773,32781],{"class":116},[106,48775,2941],{"class":112},[106,48777,32786],{"class":116},[106,48779,48780],{"class":108,"line":32904},[106,48781,32792],{"class":175},[106,48783,48784,48786,48788,48790,48792],{"class":108,"line":32923},[106,48785,32798],{"class":116},[106,48787,9470],{"class":112},[106,48789,32760],{"class":116},[106,48791,308],{"class":165},[106,48793,123],{"class":116},[106,48795,48796],{"class":108,"line":32929},[106,48797,32812],{"class":175},[106,48799,48800,48802,48804,48806,48808],{"class":108,"line":32940},[106,48801,3395],{"class":112},[106,48803,32820],{"class":116},[106,48805,26037],{"class":112},[106,48807,31600],{"class":165},[106,48809,32827],{"class":116},[106,48811,48812],{"class":108,"line":32946},[106,48813,32833],{"class":175},[106,48815,48816,48818,48820],{"class":108,"line":32966},[106,48817,32604],{"class":116},[106,48819,162],{"class":112},[106,48821,32609],{"class":116},[106,48823,48824],{"class":108,"line":32982},[106,48825,32848],{"class":175},[106,48827,48828,48830,48832],{"class":108,"line":32988},[106,48829,32619],{"class":116},[106,48831,162],{"class":112},[106,48833,32624],{"class":116},[106,48835,48836],{"class":108,"line":33002},[106,48837,32863],{"class":175},[106,48839,48840],{"class":108,"line":33008},[106,48841,32869],{"class":116},[106,48843,48844],{"class":108,"line":33014},[106,48845,36350],{"class":175},[106,48847,48848,48850],{"class":108,"line":33025},[106,48849,32875],{"class":112},[106,48851,32878],{"class":116},[106,48853,48854],{"class":108,"line":33031},[106,48855,32884],{"class":175},[106,48857,48858,48860,48862],{"class":108,"line":33037},[106,48859,36365],{"class":116},[106,48861,162],{"class":112},[106,48863,32659],{"class":116},[106,48865,48866],{"class":108,"line":33047},[106,48867,32901],{"class":175},[106,48869,48870,48872,48874,48876,48878,48880,48882],{"class":108,"line":33053},[106,48871,36378],{"class":116},[106,48873,162],{"class":112},[106,48875,32676],{"class":116},[106,48877,32679],{"class":5209},[106,48879,162],{"class":112},[106,48881,334],{"class":165},[106,48883,123],{"class":116},[106,48885,48886],{"class":108,"line":33064},[106,48887,32926],{"class":175},[106,48889,48890,48892,48894],{"class":108,"line":33070},[106,48891,36399],{"class":116},[106,48893,162],{"class":112},[106,48895,32702],{"class":116},[106,48897,48898],{"class":108,"line":33080},[106,48899,32943],{"class":175},[106,48901,48902,48904,48906,48908,48910,48912,48914],{"class":108,"line":33085},[106,48903,36412],{"class":116},[106,48905,9470],{"class":112},[106,48907,36417],{"class":116},[106,48909,572],{"class":112},[106,48911,32760],{"class":116},[106,48913,308],{"class":165},[106,48915,123],{"class":116},[106,48917,48918,48920,48922,48924,48926],{"class":108,"line":33091},[106,48919,36430],{"class":116},[106,48921,9470],{"class":112},[106,48923,32781],{"class":116},[106,48925,2941],{"class":112},[106,48927,32786],{"class":116},[106,48929,48930],{"class":108,"line":33140},[106,48931,36443],{"class":175},[106,48933,48934,48936,48938,48940,48942],{"class":108,"line":33187},[106,48935,36448],{"class":116},[106,48937,9470],{"class":112},[106,48939,32760],{"class":116},[106,48941,308],{"class":165},[106,48943,123],{"class":116},[106,48945,48946],{"class":108,"line":33192},[106,48947,33005],{"class":175},[106,48949,48950],{"class":108,"line":33198},[106,48951,33011],{"class":175},[106,48953,48954,48956,48958],{"class":108,"line":33217},[106,48955,33017],{"class":116},[106,48957,701],{"class":112},[106,48959,33022],{"class":116},[106,48961,48962],{"class":108,"line":33223},[106,48963,33028],{"class":175},[106,48965,48966],{"class":108,"line":33243},[106,48967,33034],{"class":175},[106,48969,48970,48972,48974],{"class":108,"line":33249},[106,48971,33040],{"class":116},[106,48973,701],{"class":112},[106,48975,33022],{"class":116},[106,48977,48978],{"class":108,"line":33255},[106,48979,33050],{"class":175},[106,48981,48982,48984,48986],{"class":108,"line":33265},[106,48983,33056],{"class":116},[106,48985,701],{"class":112},[106,48987,33061],{"class":116},[106,48989,48990],{"class":108,"line":33270},[106,48991,33067],{"class":175},[106,48993,48994,48996,48998],{"class":108,"line":33276},[106,48995,33073],{"class":116},[106,48997,701],{"class":112},[106,48999,33061],{"class":116},[106,49001,49002],{"class":108,"line":33292},[106,49003,2392],{"emptyLinePlaceholder":33},[106,49005,49006],{"class":108,"line":33337},[106,49007,33088],{"class":175},[106,49009,49010,49012,49014,49016,49018,49020,49022,49024,49026,49028,49030,49032,49034,49036,49038,49040,49042,49044,49046,49048],{"class":108,"line":33343},[106,49011,32445],{"class":165},[106,49013,117],{"class":116},[106,49015,3584],{"class":221},[106,49017,32453],{"class":165},[106,49019,33102],{"class":221},[106,49021,1013],{"class":165},[106,49023,33107],{"class":112},[106,49025,1063],{"class":165},[106,49027,33112],{"class":221},[106,49029,1013],{"class":165},[106,49031,33107],{"class":112},[106,49033,1063],{"class":165},[106,49035,3584],{"class":221},[106,49037,33123],{"class":116},[106,49039,649],{"class":112},[106,49041,334],{"class":165},[106,49043,33130],{"class":116},[106,49045,649],{"class":112},[106,49047,334],{"class":165},[106,49049,33137],{"class":116},[106,49051,49052,49054,49056,49058,49060,49062,49064,49066,49068,49070,49072,49074,49076,49078,49080,49082,49084,49086,49088,49090],{"class":108,"line":33349},[106,49053,32445],{"class":165},[106,49055,117],{"class":116},[106,49057,3584],{"class":221},[106,49059,32453],{"class":165},[106,49061,33151],{"class":221},[106,49063,1013],{"class":165},[106,49065,33107],{"class":112},[106,49067,1063],{"class":165},[106,49069,33160],{"class":221},[106,49071,1013],{"class":165},[106,49073,33107],{"class":112},[106,49075,1063],{"class":165},[106,49077,3584],{"class":221},[106,49079,33171],{"class":116},[106,49081,649],{"class":112},[106,49083,334],{"class":165},[106,49085,33178],{"class":116},[106,49087,649],{"class":112},[106,49089,334],{"class":165},[106,49091,33137],{"class":116},[106,49093,49094],{"class":108,"line":33355},[106,49095,2392],{"emptyLinePlaceholder":33},[106,49097,49098],{"class":108,"line":33366},[106,49099,33195],{"class":175},[106,49101,49102,49104,49106,49108,49110,49112,49114],{"class":108,"line":33372},[106,49103,2489],{"class":112},[106,49105,33203],{"class":116},[106,49107,649],{"class":112},[106,49109,334],{"class":165},[106,49111,1057],{"class":116},[106,49113,1077],{"class":112},[106,49115,33214],{"class":116},[106,49117,49118],{"class":108,"line":33378},[106,49119,33220],{"class":175},[106,49121,49122,49124,49126,49128,49130,49132,49134],{"class":108,"line":33384},[106,49123,33226],{"class":116},[106,49125,156],{"class":165},[106,49127,162],{"class":112},[106,49129,33233],{"class":116},[106,49131,649],{"class":112},[106,49133,334],{"class":165},[106,49135,33240],{"class":116},[106,49137,49138],{"class":108,"line":33402},[106,49139,33246],{"class":175},[106,49141,49142],{"class":108,"line":33416},[106,49143,33252],{"class":175},[106,49145,49146,49148,49150],{"class":108,"line":33425},[106,49147,33258],{"class":116},[106,49149,162],{"class":112},[106,49151,32308],{"class":116},[106,49153,49154],{"class":108,"line":33434},[106,49155,2392],{"emptyLinePlaceholder":33},[106,49157,49158],{"class":108,"line":33443},[106,49159,33273],{"class":175},[106,49161,49162,49164,49166,49168,49170],{"class":108,"line":33452},[106,49163,33279],{"class":116},[106,49165,162],{"class":112},[106,49167,33284],{"class":116},[106,49169,649],{"class":112},[106,49171,33289],{"class":116},[106,49173,49174,49176,49178,49180,49182,49184,49186,49188,49190,49192,49194,49196,49198,49200,49202,49204,49206,49208],{"class":108,"line":33458},[106,49175,32445],{"class":165},[106,49177,117],{"class":116},[106,49179,33299],{"class":221},[106,49181,1013],{"class":165},[106,49183,33304],{"class":112},[106,49185,1063],{"class":165},[106,49187,661],{"class":221},[106,49189,1013],{"class":165},[106,49191,33304],{"class":112},[106,49193,1063],{"class":165},[106,49195,33317],{"class":221},[106,49197,33320],{"class":116},[106,49199,33323],{"class":112},[106,49201,1024],{"class":165},[106,49203,33328],{"class":116},[106,49205,445],{"class":112},[106,49207,1024],{"class":165},[106,49209,30491],{"class":116},[106,49211,49212],{"class":108,"line":33464},[106,49213,36727],{"class":175},[106,49215,49216],{"class":108,"line":33472},[106,49217,36732],{"class":175},[106,49219,49220,49222,49224],{"class":108,"line":33477},[106,49221,36737],{"class":116},[106,49223,33361],{"class":221},[106,49225,123],{"class":116},[106,49227,49228],{"class":108,"line":33483},[106,49229,33381],{"class":175},[106,49231,49232,49234,49236,49238,49240,49242],{"class":108,"line":33494},[106,49233,33387],{"class":116},[106,49235,162],{"class":112},[106,49237,33392],{"class":116},[106,49239,33395],{"class":5209},[106,49241,162],{"class":112},[106,49243,1538],{"class":116},[106,49245,49246,49248,49250,49252],{"class":108,"line":33500},[106,49247,33405],{"class":221},[106,49249,976],{"class":116},[106,49251,33410],{"class":165},[106,49253,33413],{"class":116},[106,49255,49256,49258],{"class":108,"line":33520},[106,49257,33419],{"class":221},[106,49259,33422],{"class":116},[106,49261,49262,49264],{"class":108,"line":33526},[106,49263,33428],{"class":221},[106,49265,33431],{"class":116},[106,49267,49268,49270],{"class":108,"line":33532},[106,49269,33437],{"class":221},[106,49271,33440],{"class":116},[106,49273,49274,49276],{"class":108,"line":33538},[106,49275,33446],{"class":221},[106,49277,33449],{"class":116},[106,49279,49280],{"class":108,"line":33555},[106,49281,33455],{"class":116},[106,49283,49284],{"class":108,"line":33561},[106,49285,33461],{"class":175},[106,49287,49288,49290],{"class":108,"line":33567},[106,49289,4082],{"class":112},[106,49291,33469],{"class":116},[106,49293,49294],{"class":108,"line":33573},[106,49295,2392],{"emptyLinePlaceholder":33},[106,49297,49298],{"class":108,"line":33579},[106,49299,33480],{"class":175},[106,49301,49302,49304,49306],{"class":108,"line":33585},[106,49303,31941],{"class":112},[106,49305,33488],{"class":1955},[106,49307,33491],{"class":116},[106,49309,49310],{"class":108,"line":33612},[106,49311,33497],{"class":175},[106,49313,49314,49316,49318,49320,49322,49324,49326,49328],{"class":108,"line":33636},[106,49315,33503],{"class":116},[106,49317,31687],{"class":5209},[106,49319,162],{"class":112},[106,49321,117],{"class":116},[106,49323,615],{"class":165},[106,49325,495],{"class":116},[106,49327,410],{"class":165},[106,49329,30491],{"class":116},[106,49331,49332],{"class":108,"line":33642},[106,49333,33523],{"class":175},[106,49335,49336],{"class":108,"line":33648},[106,49337,33529],{"class":175},[106,49339,49340],{"class":108,"line":33654},[106,49341,33535],{"class":175},[106,49343,49344,49346,49348,49350,49352,49354,49356],{"class":108,"line":33665},[106,49345,31721],{"class":116},[106,49347,334],{"class":165},[106,49349,495],{"class":116},[106,49351,194],{"class":165},[106,49353,495],{"class":116},[106,49355,334],{"class":165},[106,49357,123],{"class":116},[106,49359,49360],{"class":108,"line":33676},[106,49361,33558],{"class":175},[106,49363,49364],{"class":108,"line":33682},[106,49365,33564],{"class":175},[106,49367,49368],{"class":108,"line":33699},[106,49369,33570],{"class":175},[106,49371,49372],{"class":108,"line":33722},[106,49373,33576],{"class":175},[106,49375,49376],{"class":108,"line":33745},[106,49377,33582],{"class":175},[106,49379,49380,49382,49384,49386,49388,49390,49392,49394,49396],{"class":108,"line":33751},[106,49381,33588],{"class":116},[106,49383,33591],{"class":221},[106,49385,33594],{"class":116},[106,49387,33597],{"class":221},[106,49389,495],{"class":116},[106,49391,33602],{"class":5209},[106,49393,162],{"class":112},[106,49395,33607],{"class":221},[106,49397,123],{"class":116},[106,49399,49400,49402,49404,49406,49408,49410,49412,49414,49416],{"class":108,"line":33756},[106,49401,33588],{"class":116},[106,49403,33591],{"class":221},[106,49405,33619],{"class":116},[106,49407,33622],{"class":221},[106,49409,495],{"class":116},[106,49411,33602],{"class":5209},[106,49413,162],{"class":112},[106,49415,33631],{"class":221},[106,49417,123],{"class":116},[106,49419,49420],{"class":108,"line":33765},[106,49421,33639],{"class":175},[106,49423,49424],{"class":108,"line":33775},[106,49425,33645],{"class":116},[106,49427,49428],{"class":108,"line":33781},[106,49429,33651],{"class":175},[106,49431,49432,49434,49436],{"class":108,"line":33786},[106,49433,33657],{"class":116},[106,49435,33660],{"class":221},[106,49437,123],{"class":116},[106,49439,49440,49442,49444],{"class":108,"line":33792},[106,49441,33668],{"class":116},[106,49443,33671],{"class":221},[106,49445,123],{"class":116},[106,49447,49448],{"class":108,"line":33805},[106,49449,33679],{"class":175},[106,49451,49452,49454,49456,49458,49460,49462,49464],{"class":108,"line":33811},[106,49453,31721],{"class":116},[106,49455,334],{"class":165},[106,49457,495],{"class":116},[106,49459,194],{"class":165},[106,49461,495],{"class":116},[106,49463,194],{"class":165},[106,49465,123],{"class":116},[106,49467,49468,49470,49472,49474,49476,49478,49480,49482,49484],{"class":108,"line":33822},[106,49469,33588],{"class":116},[106,49471,33591],{"class":221},[106,49473,33706],{"class":116},[106,49475,33597],{"class":221},[106,49477,495],{"class":116},[106,49479,33602],{"class":5209},[106,49481,162],{"class":112},[106,49483,33717],{"class":221},[106,49485,123],{"class":116},[106,49487,49488,49490,49492,49494,49496,49498,49500,49502,49504],{"class":108,"line":33833},[106,49489,33588],{"class":116},[106,49491,33591],{"class":221},[106,49493,33729],{"class":116},[106,49495,33622],{"class":221},[106,49497,495],{"class":116},[106,49499,33602],{"class":5209},[106,49501,162],{"class":112},[106,49503,33740],{"class":221},[106,49505,123],{"class":116},[106,49507,49508],{"class":108,"line":33852},[106,49509,33748],{"class":175},[106,49511,49513],{"class":108,"line":49512},219,[106,49514,33645],{"class":116},[106,49516,49518,49520,49522],{"class":108,"line":49517},220,[106,49519,33657],{"class":116},[106,49521,33591],{"class":221},[106,49523,123],{"class":116},[106,49525,49527,49529,49531],{"class":108,"line":49526},221,[106,49528,33668],{"class":116},[106,49530,33770],{"class":221},[106,49532,123],{"class":116},[106,49534,49536],{"class":108,"line":49535},222,[106,49537,33778],{"class":116},[106,49539,49541],{"class":108,"line":49540},223,[106,49542,2392],{"emptyLinePlaceholder":33},[106,49544,49546],{"class":108,"line":49545},224,[106,49547,33789],{"class":175},[106,49549,49551,49553,49555,49557,49559],{"class":108,"line":49550},225,[106,49552,1523],{"class":112},[106,49554,31214],{"class":165},[106,49556,2941],{"class":112},[106,49558,31219],{"class":221},[106,49560,3731],{"class":116},[106,49562,49564],{"class":108,"line":49563},226,[106,49565,33808],{"class":175},[106,49567,49569,49571,49573],{"class":108,"line":49568},227,[106,49570,44540],{"class":116},[106,49572,162],{"class":112},[106,49574,44545],{"class":116},[106,49576,49578,49580,49582],{"class":108,"line":49577},228,[106,49579,33825],{"class":116},[106,49581,162],{"class":112},[106,49583,33830],{"class":116},[106,49585,49587,49589,49591,49593,49595,49597,49599],{"class":108,"line":49586},229,[106,49588,33387],{"class":116},[106,49590,162],{"class":112},[106,49592,44562],{"class":116},[106,49594,33843],{"class":5209},[106,49596,162],{"class":112},[106,49598,1024],{"class":165},[106,49600,123],{"class":116},[106,49602,49604],{"class":108,"line":49603},230,[106,49605,33855],{"class":116},[21991,49607,49609],{"id":49608},"_242测试代码","2.4.2.测试代码",[14,49611,49612],{},"使用测试集进行测试与推理",[97,49614,49616],{"className":30372,"code":49615,"language":30374,"meta":25,"style":25},"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",[103,49617,49618,49624,49634,49644,49655,49665,49669,49673,49681,49686,49690,49707,49711,49715,49719,49723,49727,49759,49763,49771,49775,49787,49791,49795,49799,49803,49807,49811,49815,49819,49837,49851,49855,49865,49875,49885,49891,49895,49899,49907,49911,49927,49935,49939,49943,49951,49959,49963,49967,49971,49975,49981,49985,49995,50003,50011,50015,50019,50023,50031,50035,50051,50055,50059,50063,50075,50079,50091,50095,50099,50111,50115,50125,50129,50133,50145,50149,50157,50161,50165,50173,50177,50185,50189,50193,50197,50201,50205,50221,50229,50233,50237,50255,50261,50265,50275,50283,50291,50295,50299,50303,50307,50315,50319,50335,50339,50347,50355],{"__ignoreMap":25},[106,49619,49620,49622],{"class":108,"line":109},[106,49621,30386],{"class":112},[106,49623,30389],{"class":116},[106,49625,49626,49628,49630,49632],{"class":108,"line":28},[106,49627,30386],{"class":112},[106,49629,31409],{"class":116},[106,49631,31377],{"class":112},[106,49633,31414],{"class":116},[106,49635,49636,49638,49640,49642],{"class":108,"line":1172},[106,49637,30731],{"class":112},[106,49639,31392],{"class":116},[106,49641,30386],{"class":112},[106,49643,31397],{"class":116},[106,49645,49646,49648,49650,49652],{"class":108,"line":1187},[106,49647,30731],{"class":112},[106,49649,31362],{"class":116},[106,49651,30386],{"class":112},[106,49653,49654],{"class":116}," ImageFolder\n",[106,49656,49657,49659,49661,49663],{"class":108,"line":1193},[106,49658,30731],{"class":112},[106,49660,31908],{"class":116},[106,49662,30386],{"class":112},[106,49664,44634],{"class":116},[106,49666,49667],{"class":108,"line":1207},[106,49668,2392],{"emptyLinePlaceholder":33},[106,49670,49671],{"class":108,"line":1213},[106,49672,33945],{"class":175},[106,49674,49675,49677,49679],{"class":108,"line":1304},[106,49676,31941],{"class":112},[106,49678,33952],{"class":1955},[106,49680,31947],{"class":116},[106,49682,49683],{"class":108,"line":1310},[106,49684,49685],{"class":175},"   # 导入自己的数据集，并进行数据处理\n",[106,49687,49688],{"class":108,"line":1322},[106,49689,47955],{"class":175},[106,49691,49692,49694,49696,49698,49700,49702,49705],{"class":108,"line":1604},[106,49693,47960],{"class":165},[106,49695,162],{"class":112},[106,49697,787],{"class":112},[106,49699,368],{"class":221},[106,49701,675],{"class":165},[106,49703,49704],{"class":47971},"\u002Fdata\u002Ftest",[106,49706,25127],{"class":221},[106,49708,49709],{"class":108,"line":1609},[106,49710,2392],{"emptyLinePlaceholder":33},[106,49712,49713],{"class":108,"line":1615},[106,49714,47983],{"class":175},[106,49716,49717],{"class":108,"line":1620},[106,49718,47988],{"class":175},[106,49720,49721],{"class":108,"line":1634},[106,49722,47993],{"class":175},[106,49724,49725],{"class":108,"line":1639},[106,49726,47998],{"class":175},[106,49728,49729,49731,49733,49735,49737,49739,49741,49743,49745,49747,49749,49751,49753,49755,49757],{"class":108,"line":1645},[106,49730,48003],{"class":116},[106,49732,162],{"class":112},[106,49734,48008],{"class":116},[106,49736,48011],{"class":165},[106,49738,495],{"class":116},[106,49740,48016],{"class":165},[106,49742,495],{"class":116},[106,49744,48021],{"class":165},[106,49746,48024],{"class":116},[106,49748,48027],{"class":165},[106,49750,495],{"class":116},[106,49752,48032],{"class":165},[106,49754,495],{"class":116},[106,49756,48037],{"class":165},[106,49758,4649],{"class":116},[106,49760,49761],{"class":108,"line":1666},[106,49762,48044],{"class":175},[106,49764,49765,49767,49769],{"class":108,"line":1671},[106,49766,48049],{"class":116},[106,49768,162],{"class":112},[106,49770,48054],{"class":116},[106,49772,49773],{"class":108,"line":1685},[106,49774,48059],{"class":175},[106,49776,49777,49779,49781,49783,49785],{"class":108,"line":1690},[106,49778,48064],{"class":116},[106,49780,31495],{"class":165},[106,49782,495],{"class":116},[106,49784,31495],{"class":165},[106,49786,42616],{"class":116},[106,49788,49789],{"class":108,"line":1719},[106,49790,48077],{"class":175},[106,49792,49793],{"class":108,"line":1724},[106,49794,48082],{"class":116},[106,49796,49797],{"class":108,"line":1741},[106,49798,48087],{"class":116},[106,49800,49801],{"class":108,"line":1746},[106,49802,48092],{"class":175},[106,49804,49805],{"class":108,"line":1751},[106,49806,48097],{"class":175},[106,49808,49809],{"class":108,"line":1756},[106,49810,2392],{"emptyLinePlaceholder":33},[106,49812,49813],{"class":108,"line":1770},[106,49814,48106],{"class":175},[106,49816,49817],{"class":108,"line":1775},[106,49818,48111],{"class":175},[106,49820,49821,49823,49825,49827,49829,49831,49833,49835],{"class":108,"line":2569},[106,49822,33959],{"class":116},[106,49824,162],{"class":112},[106,49826,48120],{"class":116},[106,49828,48123],{"class":165},[106,49830,495],{"class":116},[106,49832,48128],{"class":5209},[106,49834,162],{"class":112},[106,49836,48133],{"class":116},[106,49838,49839,49841,49843,49845,49847,49849],{"class":108,"line":2583},[106,49840,34016],{"class":116},[106,49842,162],{"class":112},[106,49844,31528],{"class":116},[106,49846,31531],{"class":5209},[106,49848,162],{"class":112},[106,49850,34027],{"class":116},[106,49852,49853],{"class":108,"line":2591},[106,49854,34032],{"class":175},[106,49856,49857,49859,49861,49863],{"class":108,"line":2596},[106,49858,34037],{"class":5209},[106,49860,162],{"class":112},[106,49862,334],{"class":165},[106,49864,31460],{"class":116},[106,49866,49867,49869,49871,49873],{"class":108,"line":2602},[106,49868,34048],{"class":5209},[106,49870,162],{"class":112},[106,49872,31470],{"class":165},[106,49874,31460],{"class":116},[106,49876,49877,49879,49881,49883],{"class":108,"line":2608},[106,49878,34059],{"class":5209},[106,49880,162],{"class":112},[106,49882,308],{"class":165},[106,49884,123],{"class":116},[106,49886,49887,49889],{"class":108,"line":2613},[106,49888,4082],{"class":112},[106,49890,34072],{"class":116},[106,49892,49893],{"class":108,"line":7941},[106,49894,2392],{"emptyLinePlaceholder":33},[106,49896,49897],{"class":108,"line":7965},[106,49898,34081],{"class":175},[106,49900,49901,49903,49905],{"class":108,"line":7970},[106,49902,31941],{"class":112},[106,49904,34088],{"class":1955},[106,49906,34091],{"class":116},[106,49908,49909],{"class":108,"line":7976},[106,49910,34096],{"class":175},[106,49912,49913,49915,49917,49919,49921,49923,49925],{"class":108,"line":8003},[106,49914,31231],{"class":116},[106,49916,162],{"class":112},[106,49918,31238],{"class":221},[106,49920,1696],{"class":112},[106,49922,31243],{"class":116},[106,49924,1693],{"class":112},[106,49926,34113],{"class":221},[106,49928,49929,49931,49933],{"class":108,"line":8008},[106,49930,31283],{"class":116},[106,49932,162],{"class":112},[106,49934,32283],{"class":116},[106,49936,49937],{"class":108,"line":8014},[106,49938,2392],{"emptyLinePlaceholder":33},[106,49940,49941],{"class":108,"line":8026},[106,49942,34130],{"class":175},[106,49944,49945,49947,49949],{"class":108,"line":8038},[106,49946,34135],{"class":116},[106,49948,162],{"class":112},[106,49950,32336],{"class":165},[106,49952,49953,49955,49957],{"class":108,"line":8050},[106,49954,34144],{"class":116},[106,49956,162],{"class":112},[106,49958,3077],{"class":165},[106,49960,49961],{"class":108,"line":9709},[106,49962,2392],{"emptyLinePlaceholder":33},[106,49964,49965],{"class":108,"line":9734},[106,49966,34157],{"class":175},[106,49968,49969],{"class":108,"line":9757},[106,49970,34162],{"class":175},[106,49972,49973],{"class":108,"line":9781},[106,49974,34167],{"class":175},[106,49976,49977,49979],{"class":108,"line":9786},[106,49978,34172],{"class":112},[106,49980,32878],{"class":116},[106,49982,49983],{"class":108,"line":9791},[106,49984,34179],{"class":175},[106,49986,49987,49989,49991,49993],{"class":108,"line":9796},[106,49988,3395],{"class":112},[106,49990,34186],{"class":116},[106,49992,26037],{"class":112},[106,49994,34191],{"class":116},[106,49996,49997,49999,50001],{"class":108,"line":9805},[106,49998,34196],{"class":116},[106,50000,162],{"class":112},[106,50002,34201],{"class":116},[106,50004,50005,50007,50009],{"class":108,"line":9810},[106,50006,34206],{"class":116},[106,50008,162],{"class":112},[106,50010,34211],{"class":116},[106,50012,50013],{"class":108,"line":9816},[106,50014,34216],{"class":175},[106,50016,50017],{"class":108,"line":9837},[106,50018,32869],{"class":116},[106,50020,50021],{"class":108,"line":9843},[106,50022,34225],{"class":175},[106,50024,50025,50027,50029],{"class":108,"line":9857},[106,50026,32654],{"class":116},[106,50028,162],{"class":112},[106,50030,34234],{"class":116},[106,50032,50033],{"class":108,"line":9863},[106,50034,34239],{"class":175},[106,50036,50037,50039,50041,50043,50045,50047,50049],{"class":108,"line":9890},[106,50038,32671],{"class":116},[106,50040,162],{"class":112},[106,50042,32676],{"class":116},[106,50044,32679],{"class":5209},[106,50046,162],{"class":112},[106,50048,334],{"class":165},[106,50050,123],{"class":116},[106,50052,50053],{"class":108,"line":9899},[106,50054,34260],{"class":175},[106,50056,50057],{"class":108,"line":9905},[106,50058,34265],{"class":175},[106,50060,50061],{"class":108,"line":9913},[106,50062,34270],{"class":175},[106,50064,50065,50067,50069,50071,50073],{"class":108,"line":9918},[106,50066,34275],{"class":116},[106,50068,9470],{"class":112},[106,50070,32781],{"class":116},[106,50072,2941],{"class":112},[106,50074,34284],{"class":116},[106,50076,50077],{"class":108,"line":16597},[106,50078,34289],{"class":175},[106,50080,50081,50083,50085,50087,50089],{"class":108,"line":16603},[106,50082,34294],{"class":116},[106,50084,9470],{"class":112},[106,50086,34299],{"class":116},[106,50088,308],{"class":165},[106,50090,123],{"class":116},[106,50092,50093],{"class":108,"line":16626},[106,50094,2392],{"emptyLinePlaceholder":33},[106,50096,50097],{"class":108,"line":16632},[106,50098,34312],{"class":175},[106,50100,50101,50103,50105,50107,50109],{"class":108,"line":16655},[106,50102,34317],{"class":116},[106,50104,162],{"class":112},[106,50106,34322],{"class":116},[106,50108,701],{"class":112},[106,50110,34327],{"class":116},[106,50112,50113],{"class":108,"line":16669},[106,50114,34332],{"class":175},[106,50116,50117,50119,50121,50123],{"class":108,"line":16689},[106,50118,32445],{"class":165},[106,50120,117],{"class":116},[106,50122,34341],{"class":221},[106,50124,34344],{"class":116},[106,50126,50127],{"class":108,"line":16695},[106,50128,2392],{"emptyLinePlaceholder":33},[106,50130,50131],{"class":108,"line":16706},[106,50132,34353],{"class":175},[106,50134,50135,50137,50139,50141,50143],{"class":108,"line":16729},[106,50136,1523],{"class":112},[106,50138,31214],{"class":165},[106,50140,2941],{"class":112},[106,50142,31219],{"class":221},[106,50144,3731],{"class":116},[106,50146,50147],{"class":108,"line":16751},[106,50148,34370],{"class":175},[106,50150,50151,50153,50155],{"class":108,"line":16756},[106,50152,31283],{"class":116},[106,50154,162],{"class":112},[106,50156,44545],{"class":116},[106,50158,50159],{"class":108,"line":16762},[106,50160,34383],{"class":175},[106,50162,50163],{"class":108,"line":16776},[106,50164,34388],{"class":175},[106,50166,50167,50169,50171],{"class":108,"line":16789},[106,50168,34393],{"class":116},[106,50170,34396],{"class":221},[106,50172,30491],{"class":116},[106,50174,50175],{"class":108,"line":16794},[106,50176,34403],{"class":175},[106,50178,50179,50181,50183],{"class":108,"line":16808},[106,50180,34016],{"class":116},[106,50182,162],{"class":112},[106,50184,34412],{"class":116},[106,50186,50187],{"class":108,"line":16813},[106,50188,34417],{"class":175},[106,50190,50191],{"class":108,"line":16819},[106,50192,34422],{"class":116},[106,50194,50195],{"class":108,"line":16824},[106,50196,2392],{"emptyLinePlaceholder":33},[106,50198,50199],{"class":108,"line":16838},[106,50200,34431],{"class":175},[106,50202,50203],{"class":108,"line":16843},[106,50204,34436],{"class":175},[106,50206,50207,50209,50211,50213,50215,50217,50219],{"class":108,"line":16848},[106,50208,31231],{"class":116},[106,50210,162],{"class":112},[106,50212,31238],{"class":221},[106,50214,1696],{"class":112},[106,50216,31243],{"class":116},[106,50218,1693],{"class":112},[106,50220,34113],{"class":221},[106,50222,50223,50225,50227],{"class":108,"line":16862},[106,50224,31283],{"class":116},[106,50226,162],{"class":112},[106,50228,32283],{"class":116},[106,50230,50231],{"class":108,"line":16874},[106,50232,34465],{"class":175},[106,50234,50235],{"class":108,"line":16879},[106,50236,34470],{"class":175},[106,50238,50239,50241,50243,50245,50248,50250,50253],{"class":108,"line":16892},[106,50240,34475],{"class":116},[106,50242,162],{"class":112},[106,50244,1007],{"class":116},[106,50246,50247],{"class":221},"'猫'",[106,50249,495],{"class":116},[106,50251,50252],{"class":221},"'狗'",[106,50254,33240],{"class":116},[106,50256,50257,50259],{"class":108,"line":16897},[106,50258,34172],{"class":112},[106,50260,32878],{"class":116},[106,50262,50263],{"class":108,"line":16902},[106,50264,34540],{"class":175},[106,50266,50267,50269,50271,50273],{"class":108,"line":16907},[106,50268,3395],{"class":112},[106,50270,34547],{"class":116},[106,50272,26037],{"class":112},[106,50274,34191],{"class":116},[106,50276,50277,50279,50281],{"class":108,"line":16920},[106,50278,32604],{"class":116},[106,50280,162],{"class":112},[106,50282,32609],{"class":116},[106,50284,50285,50287,50289],{"class":108,"line":16925},[106,50286,32619],{"class":116},[106,50288,162],{"class":112},[106,50290,32624],{"class":116},[106,50292,50293],{"class":108,"line":32627},[106,50294,2392],{"emptyLinePlaceholder":33},[106,50296,50297],{"class":108,"line":32633},[106,50298,34576],{"class":175},[106,50300,50301],{"class":108,"line":32639},[106,50302,32869],{"class":116},[106,50304,50305],{"class":108,"line":32645},[106,50306,34585],{"class":175},[106,50308,50309,50311,50313],{"class":108,"line":32651},[106,50310,32654],{"class":116},[106,50312,162],{"class":112},[106,50314,32659],{"class":116},[106,50316,50317],{"class":108,"line":32662},[106,50318,34598],{"class":175},[106,50320,50321,50323,50325,50327,50329,50331,50333],{"class":108,"line":32668},[106,50322,32671],{"class":116},[106,50324,162],{"class":112},[106,50326,32676],{"class":116},[106,50328,32679],{"class":5209},[106,50330,162],{"class":112},[106,50332,334],{"class":165},[106,50334,123],{"class":116},[106,50336,50337],{"class":108,"line":32688},[106,50338,34619],{"class":175},[106,50340,50341,50343,50345],{"class":108,"line":32694},[106,50342,34624],{"class":116},[106,50344,162],{"class":112},[106,50346,34629],{"class":116},[106,50348,50349,50351,50353],{"class":108,"line":32705},[106,50350,34634],{"class":116},[106,50352,162],{"class":112},[106,50354,34639],{"class":116},[106,50356,50357,50359,50361,50363,50365,50367,50369,50371],{"class":108,"line":32711},[106,50358,34644],{"class":165},[106,50360,117],{"class":116},[106,50362,34649],{"class":221},[106,50364,34652],{"class":116},[106,50366,34655],{"class":221},[106,50368,495],{"class":116},[106,50370,34660],{"class":221},[106,50372,34663],{"class":116},[5119,50374,50375],{},"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":25,"searchDepth":28,"depth":28,"links":50377},[50378,50379,50380,50381],{"id":30585,"depth":1172,"text":30586},{"id":37833,"depth":1172,"text":37834},{"id":41266,"depth":1172,"text":41267},{"id":45275,"depth":1172,"text":45276},{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch2",{"title":30577,"description":30},"wiki\u002F2025-11-03-cnn基础\u002Fch2-经典神经网络","Bxs5UQ86zdlE-CO6G4Yv0d8SCjaTflxjZXwosV5BYw0",{"id":50388,"title":50389,"body":50390,"description":30,"extension":31,"meta":50397,"navigation":33,"path":50398,"seo":50399,"stem":50400,"__hash__":50401},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习.md","3.yolo模型学习",{"type":7,"value":50391,"toc":50395},[50392],[10,50393,50389],{"id":50394},"_3yolo模型学习",{"title":25,"searchDepth":28,"depth":28,"links":50396},[],{},"\u002Fwiki\u002F2025-11-03-cnn\u002Fch3-yolo",{"title":50389,"description":30},"wiki\u002F2025-11-03-cnn基础\u002Fch3-yolo模型学习","up9SfBhaIIBLUfBuXgY3nFD9vRIUbWF1AanknFvugPQ",{"id":50403,"title":50404,"body":50405,"description":50412,"extension":31,"meta":50413,"navigation":33,"path":50415,"seo":50416,"stem":50417,"__hash__":50418},"wiki\u002Fwiki\u002F2025-11-03-cnn基础\u002Findex.md","CNN基础",{"type":7,"value":50406,"toc":50410},[50407],[14,50408,50409],{},"yolo模型还未补充",{"title":25,"searchDepth":28,"depth":28,"links":50411},[],"深度学习学习",{"category":50414},"深度学习","\u002Fwiki\u002F2025-11-03-cnn",{"title":50404,"description":50412},"wiki\u002F2025-11-03-cnn基础\u002Findex","jomiRepUEk1d2yEd-72Mm5lgO1UAsmOClqiKKJLBiIE",{"id":50420,"title":50421,"body":50422,"description":30,"extension":31,"meta":50447,"navigation":33,"path":50448,"seo":50449,"stem":50450,"__hash__":50451},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch1-工具.md","1.工具",{"type":7,"value":50423,"toc":50445},[50424,50427,50430,50435,50442],[10,50425,50421],{"id":50426},"_1工具",[14,50428,50429],{},"提示错误插件：有问题会提前报错",[14,50431,50432],{},[23,50433],{"alt":25,"src":50434},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-001.png",[14,50436,50437],{},[355,50438,50441],{"href":50439,"rel":50440},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F%E5%89%8D%E7%AB%AF%E8%B5%84%E6%96%99%E6%90%9C%E9%9B%86%E5%BF%85%E5%A4%87%E7%BD%91%E7%AB%99",[23858],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002F前端资料搜集必备网站",[14,50443,50444],{},"alt键加上下箭头可以实现语句的移动",{"title":25,"searchDepth":28,"depth":28,"links":50446},[],{},"\u002Fwiki\u002F2025-09-02-js\u002Fch1",{"title":50421,"description":30},"wiki\u002F2025-09-02-JS学习\u002Fch1-工具","ahoJ9ydgi0wuLgmhEUjAoGpyZKNS_IeMsqe-jPF9xx4",{"id":50453,"title":50454,"body":50455,"description":30,"extension":31,"meta":53319,"navigation":33,"path":53320,"seo":53321,"stem":53322,"__hash__":53323},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch2-基础语法.md","2.基础语法",{"type":7,"value":50456,"toc":53270},[50457,50460,50464,50468,50473,50476,50481,50485,50492,50497,50504,50509,50516,50521,50525,50530,50533,50537,50542,50546,50551,50554,50557,50560,50563,50566,50569,50572,50575,50580,50585,50590,50594,50597,50600,50604,50609,50612,50620,50625,50642,50650,50655,50660,50665,50670,50675,50678,50683,50688,50692,50701,50706,50711,50715,50720,50723,50727,50732,50740,50745,50750,50753,50758,50763,50768,50771,50774,50777,50782,50787,50790,50795,50798,50803,50806,50809,50812,50817,50820,50823,50838,50843,50848,50853,50856,50859,50862,50876,50879,50884,50889,50892,50895,50898,50901,50904,50907,50910,50914,50918,50923,50927,50930,50935,50940,50943,50948,50951,50955,50960,50963,50966,50969,50972,50975,50978,50981,50984,50987,50991,50996,51001,51006,51009,51012,51016,51021,51024,51028,51031,51034,51039,51042,51045,51049,51053,51056,51061,51066,51069,51098,51103,51108,51113,51118,51122,51127,51131,51136,51139,51143,51147,51152,51156,51161,51166,51170,51175,51178,51180,51183,51188,51192,51197,51201,51205,51210,51215,51220,51225,51229,51234,51239,51244,51247,51250,51255,51258,51263,51268,51273,51278,51282,52089,52093,52436,52441,52444,52447,52450,52453,52456,52459,52462,52465,52467,52470,52472,52475,52479,52484,52487,52490,52493,52497,52502,52507,52527,52530,52534,52539,52544,52561,52565,52594,52598,52620,52622,52661,52669,52675,52679,52682,52685,52690,52695,52698,52701,52704,52709,52714,52717,52720,52723,52726,52729,52732,52735,52738,52741,52744,52747,52749,52752,52755,52758,52761,52764,52767,52770,52773,52777,52782,52785,52790,52793,52796,52799,52802,52805,52808,52811,52813,52816,52819,52822,52825,52828,52831,52835,52838,52847,52850,52855,52858,52863,52866,52869,52872,52875,52878,52881,52884,52888,52892,52895,52898,52903,52908,52913,52917,52922,52927,52930,52933,52936,52939,52942,52947,52950,52955,52957,52962,52965,52969,52974,52977,52980,52985,52989,52992,52997,53000,53003,53032,53037,53040,53043,53046,53049,53052,53056,53059,53145,53149,53152,53157,53162,53169,53172,53175,53178,53181,53184,53189,53194,53197,53200,53203,53206,53209,53212,53215,53218,53221,53223,53226,53230,53235,53240,53245,53248,53253,53258,53261,53264,53267],[10,50458,50454],{"id":50459},"_2基础语法",[48,50461,50463],{"id":50462},"_21-js的使用基本介绍","2.1 js的使用基本介绍",[77,50465,50467],{"id":50466},"_211-js组成","2.1.1 js组成",[60,50469,50470],{},[63,50471,50472],{},"js是编程语言，html和css不是编程语言，是标记语言",[14,50474,50475],{},"js组成：ECMAScript(JavaScript语言基础)和Web APIs(由DOM页面文档对象模型和BOM浏览器对象模型)",[60,50477,50478],{"start":28},[63,50479,50480],{},"JavaScript 程序不能独立运行，它需要被嵌入 HTML 中，然后浏览器才能执行 JavaScript 代码",[77,50482,50484],{"id":50483},"_212-js书写位置","2.1.2 js书写位置",[60,50486,50487],{},[63,50488,50489],{},[266,50490,50491],{},"内部 JavaScript",[14,50493,50494],{},[23,50495],{"alt":25,"src":50496},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-002.png",[60,50498,50499],{"start":28},[63,50500,50501],{},[266,50502,50503],{},"外部 JavaScript",[14,50505,50506],{},[23,50507],{"alt":25,"src":50508},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-003.png",[60,50510,50511],{"start":1172},[63,50512,50513],{},[266,50514,50515],{},"内联 JavaScript",[14,50517,50518],{},[23,50519],{"alt":25,"src":50520},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-004.png",[77,50522,50524],{"id":50523},"_213-javascript注释","2.1.3 JavaScript注释",[14,50526,50527],{},[23,50528],{"alt":25,"src":50529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-005.png",[14,50531,50532],{},"alt+shift+a一定要记住！",[77,50534,50536],{"id":50535},"_214-javascript结束符","2.1.4 JavaScript结束符",[14,50538,50539],{},[23,50540],{"alt":25,"src":50541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-006.png",[77,50543,50545],{"id":50544},"_2115-javascript-输入输出语法","21.1.5 JavaScript 输入输出语法",[60,50547,50548],{},[63,50549,50550],{},"输出语法：",[14,50552,50553],{},"①document.write('要出的内容')",[14,50555,50556],{},"向body内输出内容；",[14,50558,50559],{},"如果输出的内容写的是标签，也会被解析cheng",[14,50561,50562],{},"②alert('要出的内容')",[14,50564,50565],{},"页面弹出警告对话框",[14,50567,50568],{},"③console.log('控制台打印')",[14,50570,50571],{},"控制台输出语法，程序员调试使用",[14,50573,50574],{},"输入log就行，自动生成：",[14,50576,50577],{},[23,50578],{"alt":25,"src":50579},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-007.png",[60,50581,50582],{"start":28},[63,50583,50584],{},"输入语法：",[14,50586,50587],{},[23,50588],{"alt":25,"src":50589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-008.png",[77,50591,50593],{"id":50592},"_2116-字面量","21.1.6 字面量",[14,50595,50596],{},"在计算机科学中，字面量（literal）是在计算机中描述 事\u002F物",[14,50598,50599],{},"例如：18 是一个数字字面量；'pink' 是一个字符串字面量",[48,50601,50603],{"id":50602},"_22-变量","2.2 变量",[60,50605,50606],{},[63,50607,50608],{},"变量声明",[14,50610,50611],{},"let 变量名",[1124,50613,50614,50617],{},[63,50615,50616],{},"声明变量有两部分组成：声明关键字 变量名（也叫标识符）",[63,50618,50619],{},"let 即关键字 (let: 允许、许可、让、要)，所谓关键字是系统提供的专门用来声明（定义）变量的词语",[60,50621,50622],{"start":28},[63,50623,50624],{},"变量赋值",[97,50626,50630],{"className":50627,"code":50628,"language":50629,"meta":25,"style":25},"language-html shiki shiki-themes github-light github-dark","let age\nage=18 \n","html",[103,50631,50632,50637],{"__ignoreMap":25},[106,50633,50634],{"class":108,"line":109},[106,50635,50636],{"class":116},"let age\n",[106,50638,50639],{"class":108,"line":28},[106,50640,50641],{"class":116},"age=18\n",[60,50643,50644,50647],{"start":1172},[63,50645,50646],{},"连这些（变量的初始化）：let age=18",[63,50648,50649],{},"更新变量",[14,50651,50652],{},[23,50653],{"alt":25,"src":50654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-009.png",[60,50656,50657],{"start":1193},[63,50658,50659],{},"声明多个变量",[14,50661,50662],{},[23,50663],{"alt":25,"src":50664},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-010.png",[60,50666,50667],{"start":1207},[63,50668,50669],{},"变量命名规则与规范",[14,50671,50672],{},[23,50673],{"alt":25,"src":50674},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-011.png",[14,50676,50677],{},"遵守小驼峰！",[60,50679,50680],{"start":1213},[63,50681,50682],{},"变量拓展-let和var的区别",[14,50684,50685],{},[23,50686],{"alt":25,"src":50687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-012.png",[48,50689,50691],{"id":50690},"_23-数组","2.3 数组",[97,50693,50695],{"className":50627,"code":50694,"language":50629,"meta":25,"style":25},"let arr = []\n",[103,50696,50697],{"__ignoreMap":25},[106,50698,50699],{"class":108,"line":109},[106,50700,50694],{"class":116},[14,50702,50703],{},[23,50704],{"alt":25,"src":50705},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-013.png",[14,50707,50708],{},[23,50709],{"alt":25,"src":50710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-014.png",[48,50712,50714],{"id":50713},"_24-常量","2.4 常量",[14,50716,50717],{},[23,50718],{"alt":25,"src":50719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-015.png",[14,50721,50722],{},"const — 类似于 let ，但是变量的值无法被修改",[48,50724,50726],{"id":50725},"_25-数据类型","2.5 数据类型",[14,50728,50729],{},[23,50730],{"alt":25,"src":50731},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-016.png",[60,50733,50734,50737],{},[63,50735,50736],{},"js是一门弱数据类型的语言，只要是数字就是数字型语言",[63,50738,50739],{},"算数运算符：",[14,50741,50742],{},[23,50743],{"alt":25,"src":50744},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-017.png",[60,50746,50747],{"start":1172},[63,50748,50749],{},"数字类型（Number）",[14,50751,50752],{},"JavaScript 中的正数、负数、小数等 统一称为 数字类型",[14,50754,50755],{},[23,50756],{"alt":25,"src":50757},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-018.png",[60,50759,50760],{"start":1187},[63,50761,50762],{},"字符串类型（string）",[14,50764,50765],{},[23,50766],{"alt":25,"src":50767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-019.png",[14,50769,50770],{},"反引号也是可以使用的",[14,50772,50773],{},"➕：数字相加，字符相连，只要有字符串就可以与其他进行相加",[14,50775,50776],{},"例如：document.write(\"我今年\"+age+\"岁\")",[60,50778,50779],{"start":1193},[63,50780,50781],{},"模板字符串",[14,50783,50784],{},[23,50785],{"alt":25,"src":50786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-020.png",[14,50788,50789],{},"类似于python的字符串格式化",[60,50791,50792],{"start":1207},[63,50793,50794],{},"布尔类型",[14,50796,50797],{},"true 和 false",[60,50799,50800],{"start":1213},[63,50801,50802],{},"未定义类型（underfined）",[14,50804,50805],{},"表示没有赋值",[14,50807,50808],{},"未定义类型是比较特殊的类型，只有一个值undefined",[14,50810,50811],{},"只声明变量，不赋值的情况下，变量的默认值为 undefined，一般很少【直接】为某个变量赋值为 undefined",[60,50813,50814],{"start":1304},[63,50815,50816],{},"null（空类型）",[14,50818,50819],{},"JavaScript 中的 null 仅仅是一个代表“无”、“空”或“值未知”的特殊值",[14,50821,50822],{},"赋值了，但是内容为空",[97,50824,50826],{"className":50627,"code":50825,"language":50629,"meta":25,"style":25},"typeof null\n输出的是'object'，是一个对象数据类型\n",[103,50827,50828,50833],{"__ignoreMap":25},[106,50829,50830],{"class":108,"line":109},[106,50831,50832],{"class":116},"typeof null\n",[106,50834,50835],{"class":108,"line":28},[106,50836,50837],{"class":116},"输出的是'object'，是一个对象数据类型\n",[60,50839,50840],{"start":1310},[63,50841,50842],{},"控制台检测数据类型",[14,50844,50845],{},[23,50846],{"alt":25,"src":50847},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-021.png",[60,50849,50850],{"start":1322},[63,50851,50852],{},"类型转换",[14,50854,50855],{},"prompt输入的内容都是字符串字面量，还有html时的表单（input啥的输入的也是字符串字面量）",[14,50857,50858],{},"转换方式：隐式转换和显示转换",[14,50860,50861],{},"①隐式转换",[1124,50863,50864,50867,50870,50873],{},[63,50865,50866],{},"号两边只要有一个是字符串，都会把另外一个转成字符串",[63,50868,50869],{},"除了+以外的算术运算符 比如 - * \u002F 等都会把数据转成数字类型（只要有数字就会把另一个转化成数字字面变量）",[63,50871,50872],{},"加号作为正号解析可以转换成数字型：console.log(+'123')不再是字符串类型，是数字类型为123",[63,50874,50875],{},"任何数据和字符串相加结果都是字符串",[14,50877,50878],{},"②显示转换",[14,50880,50881],{},[23,50882],{"alt":25,"src":50883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-022.png",[14,50885,50886],{},[23,50887],{"alt":25,"src":50888},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-023.png",[14,50890,50891],{},"在输入的时候要用好隐式转换，简单写起来",[14,50893,50894],{},"let num = +prompt(’请输入数字：‘)",[14,50896,50897],{},"  parseInt与parseFloat是只取前边的数字，如果前边有字母，是无法进行识别后边的数字的，会显示NaN，表示错误",[14,50899,50900],{},"console.log(parseInt('12.333px'))",[14,50902,50903],{},"输出为：12",[14,50905,50906],{},"console.log(parseInt('a'a'a12.333px'))",[14,50908,50909],{},"输出：NaN",[48,50911,50913],{"id":50912},"_26-运算符","2.6 运算符",[77,50915,50917],{"id":50916},"_261-赋值运算符","2.6.1 赋值运算符",[14,50919,50920],{},[23,50921],{"alt":25,"src":50922},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-024.png",[77,50924,50926],{"id":50925},"_262-一元运算符","2.6.2 一元运算符",[14,50928,50929],{},"众多的 JavaScript 的运算符可以根据所需表达式的个数，分为一元运算符、二元运算符、三元运算符，就看需要几个数来操作，例如+需要两个数才能相加，所以叫做二元运算符，正负号的话就是一元运算符",[14,50931,50932],{},[23,50933],{"alt":25,"src":50934},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-025.png",[14,50936,50937],{},[23,50938],{"alt":25,"src":50939},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-026.png",[14,50941,50942],{},"两者的区别：",[14,50944,50945],{},[23,50946],{"alt":25,"src":50947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-027.png",[14,50949,50950],{},"前置先自加；后置后加，代码执行完之后再加",[77,50952,50954],{"id":50953},"_263-比较运算符","2.6.3 比较运算符",[14,50956,50957],{},[23,50958],{"alt":25,"src":50959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-028.png",[14,50961,50962],{},"比较运算符也有隐式转换",[14,50964,50965],{},"console.log(2 == '2')输出为true，只判断值，==含有隐式转换，前边是数字字面量的情况下，会将字符串转化为数字字面量",[14,50967,50968],{},"console.log(2==='2')输出false，===全等，会判断值和数据类型，需要全部一样才为true",[14,50970,50971],{},"要使用三等，开发的时候",[14,50973,50974],{},"NaN不等于任何人，包括它自己",[14,50976,50977],{},"小数在进行运算的时候它会先把自己转化为整数，然后最后再除以放大的数变回原来：例如：0.5+0.2：它是0.5*10+0.2*10=7",[14,50979,50980],{},"7\u002F10=0.7",[14,50982,50983],{},"最后：0.5+0.2=0.7",[14,50985,50986],{},"字符串比较，比较的是字符对应的ASCII码",[77,50988,50990],{"id":50989},"_264-逻辑运算符","2.6.4 逻辑运算符",[14,50992,50993],{},[23,50994],{"alt":25,"src":50995},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-029.png",[14,50997,50998],{},[23,50999],{"alt":25,"src":51000},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-030.png",[14,51002,51003],{},[23,51004],{"alt":25,"src":51005},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-031.png",[14,51007,51008],{},"上述题目选D",[14,51010,51011],{},"与真2假1；或真1假2",[77,51013,51015],{"id":51014},"_265-运算符优先级","2.6.5 运算符优先级",[14,51017,51018],{},[23,51019],{"alt":25,"src":51020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-032.png",[14,51022,51023],{},"先算逻辑与，后算逻辑或",[48,51025,51027],{"id":51026},"_27-语句","2.7 语句",[14,51029,51030],{},"表达式：是可以被求值的代码，会有结果给我们",[14,51032,51033],{},"语句：语句是可以被执行的代码，例如prompt()",[14,51035,51036],{},[23,51037],{"alt":25,"src":51038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-033.png",[14,51040,51041],{},"因为表达式可被求值，所以它可以写在赋值语句的右侧。",[14,51043,51044],{},"而语句不一定有值，所以比如 alert() for和break 等语句就不能被用于赋值。",[77,51046,51048],{"id":51047},"_271-分支语句","2.7.1 分支语句",[21991,51050,51052],{"id":51051},"_2711-if分支语句","2.7.1.1 if分支语句",[14,51054,51055],{},"if语句单行简单的话，可以不写{}，写在一行就行",[60,51057,51058],{},[63,51059,51060],{},"单分支语句",[14,51062,51063],{},[23,51064],{"alt":25,"src":51065},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-034.png",[14,51067,51068],{},"除了0，所有数字都为真",[97,51070,51072],{"className":50627,"code":51071,"language":50629,"meta":25,"style":25},"if（0) {\n    let a=1\n    alert(typeof a)\n}\n不输出，括号为假\n",[103,51073,51074,51079,51084,51089,51093],{"__ignoreMap":25},[106,51075,51076],{"class":108,"line":109},[106,51077,51078],{"class":116},"if（0) {\n",[106,51080,51081],{"class":108,"line":28},[106,51082,51083],{"class":116},"    let a=1\n",[106,51085,51086],{"class":108,"line":1172},[106,51087,51088],{"class":116},"    alert(typeof a)\n",[106,51090,51091],{"class":108,"line":1187},[106,51092,1557],{"class":116},[106,51094,51095],{"class":108,"line":1193},[106,51096,51097],{"class":116},"不输出，括号为假\n",[60,51099,51100],{"start":28},[63,51101,51102],{},"双分支语句",[14,51104,51105],{},[23,51106],{"alt":25,"src":51107},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-035.png",[60,51109,51110],{"start":1172},[63,51111,51112],{},"多分支语句",[14,51114,51115],{},[23,51116],{"alt":25,"src":51117},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-036.png",[21991,51119,51121],{"id":51120},"_2712-三元运算符","2.7.1.2 三元运算符",[14,51123,51124],{},[23,51125],{"alt":25,"src":51126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-037.png",[21991,51128,51130],{"id":51129},"_2713-switch语句","2.7.1.3 switch语句",[14,51132,51133],{},[23,51134],{"alt":25,"src":51135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-038.png",[14,51137,51138],{},"如果不写break，在匹配成功之后，输出完这个匹配内容后，switch语句就失效了，他会把后边的内容也全部输出",[77,51140,51142],{"id":51141},"_272-循环语句","2.7.2 循环语句",[21991,51144,51146],{"id":51145},"_2721-断点演示","2.7.2.1 断点演示",[14,51148,51149],{},[23,51150],{"alt":25,"src":51151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-039.png",[21991,51153,51155],{"id":51154},"_2722-while循环","2.7.2.2 while循环",[14,51157,51158],{},[23,51159],{"alt":25,"src":51160},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-040.png",[14,51162,51163],{},[23,51164],{"alt":25,"src":51165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-041.png",[21991,51167,51169],{"id":51168},"_2723-for循环","2.7.2.3 for循环",[14,51171,51172],{},[23,51173],{"alt":25,"src":51174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-042.png",[14,51176,51177],{},"for(;;) {",[14,51179,1063],{},[14,51181,51182],{},"表示无限循环",[14,51184,51185],{},[23,51186],{"alt":25,"src":51187},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-043.png",[21991,51189,51191],{"id":51190},"_2724-循环的退出","2.7.2.4 循环的退出",[14,51193,51194],{},[23,51195],{"alt":25,"src":51196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-044.png",[48,51198,51200],{"id":51199},"_28-数组","2.8 数组",[77,51202,51204],{"id":51203},"_281-基础认识","2.8.1 基础认识",[14,51206,51207],{},[23,51208],{"alt":25,"src":51209},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-045.png",[14,51211,51212],{},[23,51213],{"alt":25,"src":51214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-046.png",[14,51216,51217],{},[23,51218],{"alt":25,"src":51219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-047.png",[14,51221,51222],{},[23,51223],{"alt":25,"src":51224},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-048.png",[77,51226,51228],{"id":51227},"_282-操作数组","2.8.2 操作数组",[14,51230,51231],{},[23,51232],{"alt":25,"src":51233},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-049.png",[60,51235,51236],{},[63,51237,51238],{},"添加元素",[14,51240,51241],{},[23,51242],{"alt":25,"src":51243},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-050.png",[14,51245,51246],{},"console.log(arr.push('green'))",[14,51248,51249],{},"输出结果：为新数组的长度",[14,51251,51252],{},[23,51253],{"alt":25,"src":51254},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-051.png",[14,51256,51257],{},"push用的非常多，一定要记住",[60,51259,51260],{},[63,51261,51262],{},"删除元素",[14,51264,51265],{},[23,51266],{"alt":25,"src":51267},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-052.png",[14,51269,51270],{},[23,51271],{"alt":25,"src":51272},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-053.png",[14,51274,51275],{},[23,51276],{"alt":25,"src":51277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-054.png",[77,51279,51281],{"id":51280},"_283-根据数据生成柱形图","2.8.3 根据数据生成柱形图",[97,51283,51285],{"className":50627,"code":51284,"language":50629,"meta":25,"style":25},"\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",[103,51286,51287,51302,51318,51322,51331,51349,51373,51395,51409,51417,51424,51436,51447,51451,51455,51462,51474,51489,51502,51521,51538,51553,51565,51577,51589,51593,51597,51608,51618,51630,51642,51654,51665,51669,51673,51685,51689,51703,51707,51711,51722,51736,51748,51762,51766,51775,51784,51788,51797,51801,51810,51815,51820,51833,51861,51866,51871,51896,51901,51905,51910,51915,51930,51934,51939,51969,51981,51997,52013,52027,52032,52039,52043,52048,52061,52069,52077,52081],{"__ignoreMap":25},[106,51288,51289,51292,51296,51299],{"class":108,"line":109},[106,51290,51291],{"class":116},"\u003C!",[106,51293,51295],{"class":51294},"s9eBZ","DOCTYPE",[106,51297,51298],{"class":1955}," html",[106,51300,51301],{"class":116},">\n",[106,51303,51304,51306,51308,51311,51313,51316],{"class":108,"line":28},[106,51305,1027],{"class":116},[106,51307,50629],{"class":51294},[106,51309,51310],{"class":1955}," lang",[106,51312,162],{"class":116},[106,51314,51315],{"class":221},"\"en\"",[106,51317,51301],{"class":116},[106,51319,51320],{"class":108,"line":1172},[106,51321,2392],{"emptyLinePlaceholder":33},[106,51323,51324,51326,51329],{"class":108,"line":1187},[106,51325,1027],{"class":116},[106,51327,51328],{"class":51294},"head",[106,51330,51301],{"class":116},[106,51332,51333,51336,51339,51342,51344,51347],{"class":108,"line":1193},[106,51334,51335],{"class":116},"    \u003C",[106,51337,51338],{"class":51294},"meta",[106,51340,51341],{"class":1955}," charset",[106,51343,162],{"class":116},[106,51345,51346],{"class":221},"\"UTF-8\"",[106,51348,51301],{"class":116},[106,51350,51351,51353,51355,51358,51360,51363,51366,51368,51371],{"class":108,"line":1207},[106,51352,51335],{"class":116},[106,51354,51338],{"class":51294},[106,51356,51357],{"class":1955}," http-equiv",[106,51359,162],{"class":116},[106,51361,51362],{"class":221},"\"X-UA-Compatible\"",[106,51364,51365],{"class":1955}," content",[106,51367,162],{"class":116},[106,51369,51370],{"class":221},"\"IE=edge\"",[106,51372,51301],{"class":116},[106,51374,51375,51377,51379,51381,51383,51386,51388,51390,51393],{"class":108,"line":1213},[106,51376,51335],{"class":116},[106,51378,51338],{"class":51294},[106,51380,14913],{"class":1955},[106,51382,162],{"class":116},[106,51384,51385],{"class":221},"\"viewport\"",[106,51387,51365],{"class":1955},[106,51389,162],{"class":116},[106,51391,51392],{"class":221},"\"width=device-width, initial-scale=1.0\"",[106,51394,51301],{"class":116},[106,51396,51397,51399,51402,51405,51407],{"class":108,"line":1304},[106,51398,51335],{"class":116},[106,51400,51401],{"class":51294},"title",[106,51403,51404],{"class":116},">Document\u003C\u002F",[106,51406,51401],{"class":51294},[106,51408,51301],{"class":116},[106,51410,51411,51413,51415],{"class":108,"line":1310},[106,51412,51335],{"class":116},[106,51414,5119],{"class":51294},[106,51416,51301],{"class":116},[106,51418,51419,51422],{"class":108,"line":1322},[106,51420,51421],{"class":51294},"        *",[106,51423,15565],{"class":116},[106,51425,51426,51429,51432,51434],{"class":108,"line":1604},[106,51427,51428],{"class":165},"            margin",[106,51430,51431],{"class":116},": ",[106,51433,308],{"class":165},[106,51435,1283],{"class":116},[106,51437,51438,51441,51443,51445],{"class":108,"line":1609},[106,51439,51440],{"class":165},"            padding",[106,51442,51431],{"class":116},[106,51444,308],{"class":165},[106,51446,1283],{"class":116},[106,51448,51449],{"class":108,"line":1615},[106,51450,2521],{"class":116},[106,51452,51453],{"class":108,"line":1620},[106,51454,2392],{"emptyLinePlaceholder":33},[106,51456,51457,51460],{"class":108,"line":1634},[106,51458,51459],{"class":1955},"        .box",[106,51461,15565],{"class":116},[106,51463,51464,51467,51469,51472],{"class":108,"line":1639},[106,51465,51466],{"class":165},"            display",[106,51468,51431],{"class":116},[106,51470,51471],{"class":165},"flex",[106,51473,1283],{"class":116},[106,51475,51476,51479,51481,51484,51487],{"class":108,"line":1645},[106,51477,51478],{"class":165},"            width",[106,51480,51431],{"class":116},[106,51482,51483],{"class":165},"700",[106,51485,51486],{"class":112},"px",[106,51488,1283],{"class":116},[106,51490,51491,51494,51496,51498,51500],{"class":108,"line":1666},[106,51492,51493],{"class":165},"            height",[106,51495,51431],{"class":116},[106,51497,3965],{"class":165},[106,51499,51486],{"class":112},[106,51501,1283],{"class":116},[106,51503,51504,51507,51509,51511,51513,51516,51519],{"class":108,"line":1671},[106,51505,51506],{"class":165},"            border-left",[106,51508,51431],{"class":116},[106,51510,334],{"class":165},[106,51512,51486],{"class":112},[106,51514,51515],{"class":165}," solid",[106,51517,51518],{"class":165}," pink",[106,51520,1283],{"class":116},[106,51522,51523,51526,51528,51530,51532,51534,51536],{"class":108,"line":1685},[106,51524,51525],{"class":165},"            border-bottom",[106,51527,51431],{"class":116},[106,51529,334],{"class":165},[106,51531,51486],{"class":112},[106,51533,51515],{"class":165},[106,51535,51518],{"class":165},[106,51537,1283],{"class":116},[106,51539,51540,51542,51544,51546,51548,51551],{"class":108,"line":1690},[106,51541,51428],{"class":165},[106,51543,51431],{"class":116},[106,51545,773],{"class":165},[106,51547,51486],{"class":112},[106,51549,51550],{"class":165}," auto",[106,51552,1283],{"class":116},[106,51554,51555,51558,51560,51563],{"class":108,"line":1719},[106,51556,51557],{"class":165},"            justify-content",[106,51559,51431],{"class":116},[106,51561,51562],{"class":165},"space-around",[106,51564,1283],{"class":116},[106,51566,51567,51570,51572,51575],{"class":108,"line":1724},[106,51568,51569],{"class":165},"            align-items",[106,51571,51431],{"class":116},[106,51573,51574],{"class":165},"flex-end",[106,51576,1283],{"class":116},[106,51578,51579,51582,51584,51587],{"class":108,"line":1741},[106,51580,51581],{"class":165},"            text-align",[106,51583,51431],{"class":116},[106,51585,51586],{"class":165},"center",[106,51588,1283],{"class":116},[106,51590,51591],{"class":108,"line":1746},[106,51592,2521],{"class":116},[106,51594,51595],{"class":108,"line":1751},[106,51596,2392],{"emptyLinePlaceholder":33},[106,51598,51599,51601,51603,51606],{"class":108,"line":1756},[106,51600,51459],{"class":1955},[106,51602,1077],{"class":112},[106,51604,51605],{"class":51294},"div",[106,51607,15565],{"class":116},[106,51609,51610,51612,51614,51616],{"class":108,"line":1770},[106,51611,51466],{"class":165},[106,51613,51431],{"class":116},[106,51615,51471],{"class":165},[106,51617,1283],{"class":116},[106,51619,51620,51622,51624,51626,51628],{"class":108,"line":1775},[106,51621,51478],{"class":165},[106,51623,51431],{"class":116},[106,51625,773],{"class":165},[106,51627,51486],{"class":112},[106,51629,1283],{"class":116},[106,51631,51632,51635,51637,51640],{"class":108,"line":2569},[106,51633,51634],{"class":165},"            background-color",[106,51636,51431],{"class":116},[106,51638,51639],{"class":165},"pink",[106,51641,1283],{"class":116},[106,51643,51644,51647,51649,51652],{"class":108,"line":2583},[106,51645,51646],{"class":165},"            flex-direction",[106,51648,51431],{"class":116},[106,51650,51651],{"class":165},"column",[106,51653,1283],{"class":116},[106,51655,51656,51658,51660,51663],{"class":108,"line":2591},[106,51657,51557],{"class":165},[106,51659,51431],{"class":116},[106,51661,51662],{"class":165},"space-between",[106,51664,1283],{"class":116},[106,51666,51667],{"class":108,"line":2596},[106,51668,2521],{"class":116},[106,51670,51671],{"class":108,"line":2602},[106,51672,2392],{"emptyLinePlaceholder":33},[106,51674,51675,51677,51680,51683],{"class":108,"line":2608},[106,51676,51459],{"class":1955},[106,51678,51679],{"class":51294}," div",[106,51681,51682],{"class":51294}," span",[106,51684,15565],{"class":116},[106,51686,51687],{"class":108,"line":2613},[106,51688,2392],{"emptyLinePlaceholder":33},[106,51690,51691,51694,51696,51699,51701],{"class":108,"line":7941},[106,51692,51693],{"class":165},"            margin-top",[106,51695,51431],{"class":116},[106,51697,51698],{"class":165},"-20",[106,51700,51486],{"class":112},[106,51702,1283],{"class":116},[106,51704,51705],{"class":108,"line":7965},[106,51706,2521],{"class":116},[106,51708,51709],{"class":108,"line":7970},[106,51710,2392],{"emptyLinePlaceholder":33},[106,51712,51713,51715,51717,51720],{"class":108,"line":7976},[106,51714,51459],{"class":1955},[106,51716,51679],{"class":51294},[106,51718,51719],{"class":51294}," h4",[106,51721,15565],{"class":116},[106,51723,51724,51727,51729,51732,51734],{"class":108,"line":8003},[106,51725,51726],{"class":165},"            margin-bottom",[106,51728,51431],{"class":116},[106,51730,51731],{"class":165},"-35",[106,51733,51486],{"class":112},[106,51735,1283],{"class":116},[106,51737,51738,51740,51742,51744,51746],{"class":108,"line":8008},[106,51739,51478],{"class":165},[106,51741,51431],{"class":116},[106,51743,473],{"class":165},[106,51745,51486],{"class":112},[106,51747,1283],{"class":116},[106,51749,51750,51753,51755,51758,51760],{"class":108,"line":8014},[106,51751,51752],{"class":165},"            margin-left",[106,51754,51431],{"class":116},[106,51756,51757],{"class":165},"-10",[106,51759,51486],{"class":112},[106,51761,1283],{"class":116},[106,51763,51764],{"class":108,"line":8026},[106,51765,2521],{"class":116},[106,51767,51768,51771,51773],{"class":108,"line":8038},[106,51769,51770],{"class":116},"    \u003C\u002F",[106,51772,5119],{"class":51294},[106,51774,51301],{"class":116},[106,51776,51777,51780,51782],{"class":108,"line":8050},[106,51778,51779],{"class":116},"\u003C\u002F",[106,51781,51328],{"class":51294},[106,51783,51301],{"class":116},[106,51785,51786],{"class":108,"line":9709},[106,51787,2392],{"emptyLinePlaceholder":33},[106,51789,51790,51792,51795],{"class":108,"line":9734},[106,51791,1027],{"class":116},[106,51793,51794],{"class":51294},"body",[106,51796,51301],{"class":116},[106,51798,51799],{"class":108,"line":9757},[106,51800,2392],{"emptyLinePlaceholder":33},[106,51802,51803,51805,51808],{"class":108,"line":9781},[106,51804,51335],{"class":116},[106,51806,51807],{"class":51294},"script",[106,51809,51301],{"class":116},[106,51811,51812],{"class":108,"line":9786},[106,51813,51814],{"class":175},"        \u002F\u002F 1. 四次弹框效果\n",[106,51816,51817],{"class":108,"line":9791},[106,51818,51819],{"class":175},"        \u002F\u002F 声明一个新的数组\n",[106,51821,51822,51825,51828,51830],{"class":108,"line":9796},[106,51823,51824],{"class":112},"        let",[106,51826,51827],{"class":116}," arr ",[106,51829,162],{"class":112},[106,51831,51832],{"class":116}," []\n",[106,51834,51835,51837,51839,51842,51844,51846,51848,51850,51852,51855,51857,51859],{"class":108,"line":9805},[106,51836,3395],{"class":112},[106,51838,1650],{"class":116},[106,51840,51841],{"class":112},"let",[106,51843,9431],{"class":116},[106,51845,162],{"class":112},[106,51847,25112],{"class":165},[106,51849,9438],{"class":116},[106,51851,1580],{"class":112},[106,51853,51854],{"class":165}," 4",[106,51856,3206],{"class":116},[106,51858,2284],{"class":112},[106,51860,12435],{"class":116},[106,51862,51863],{"class":108,"line":9810},[106,51864,51865],{"class":175},"            \u002F\u002F let num = prompt(`请输入第${i}季度的数据:`)\n",[106,51867,51868],{"class":108,"line":9816},[106,51869,51870],{"class":175},"            \u002F\u002F arr.push(num)\n",[106,51872,51873,51876,51879,51881,51884,51886,51889,51891,51894],{"class":108,"line":9837},[106,51874,51875],{"class":116},"            arr.",[106,51877,51878],{"class":1955},"push",[106,51880,117],{"class":116},[106,51882,51883],{"class":1955},"prompt",[106,51885,117],{"class":116},[106,51887,51888],{"class":221},"`请输入第${",[106,51890,558],{"class":116},[106,51892,51893],{"class":221},"}季度的数据:`",[106,51895,30491],{"class":116},[106,51897,51898],{"class":108,"line":9843},[106,51899,51900],{"class":175},"            \u002F\u002F push记得加小括号，不是等号赋值的形式\n",[106,51902,51903],{"class":108,"line":9857},[106,51904,2521],{"class":116},[106,51906,51907],{"class":108,"line":9863},[106,51908,51909],{"class":175},"        \u002F\u002F console.log(arr)  ['123','135','345','234']\n",[106,51911,51912],{"class":108,"line":9890},[106,51913,51914],{"class":175},"        \u002F\u002F 盒子开头\n",[106,51916,51917,51920,51923,51925,51928],{"class":108,"line":9899},[106,51918,51919],{"class":116},"        document.",[106,51921,51922],{"class":1955},"write",[106,51924,117],{"class":116},[106,51926,51927],{"class":221},"` \u003Cdiv class=\"box\">`",[106,51929,123],{"class":116},[106,51931,51932],{"class":108,"line":9905},[106,51933,2392],{"emptyLinePlaceholder":33},[106,51935,51936],{"class":108,"line":9913},[106,51937,51938],{"class":175},"        \u002F\u002F 盒子中间 利用循环的形式  跟数组有关系\n",[106,51940,51941,51943,51945,51947,51949,51951,51953,51955,51957,51960,51963,51965,51967],{"class":108,"line":9918},[106,51942,3395],{"class":112},[106,51944,1650],{"class":116},[106,51946,51841],{"class":112},[106,51948,9431],{"class":116},[106,51950,162],{"class":112},[106,51952,4085],{"class":165},[106,51954,9438],{"class":116},[106,51956,1027],{"class":112},[106,51958,51959],{"class":116}," arr.",[106,51961,51962],{"class":165},"length",[106,51964,3206],{"class":116},[106,51966,2284],{"class":112},[106,51968,12435],{"class":116},[106,51970,51971,51974,51976,51978],{"class":108,"line":16597},[106,51972,51973],{"class":116},"            document.",[106,51975,51922],{"class":1955},[106,51977,117],{"class":116},[106,51979,51980],{"class":221},"`\n",[106,51982,51983,51986,51988,51990,51992,51994],{"class":108,"line":16603},[106,51984,51985],{"class":221},"              \u003Cdiv style=\"height: ${",[106,51987,3872],{"class":116},[106,51989,1007],{"class":221},[106,51991,558],{"class":116},[106,51993,1057],{"class":221},[106,51995,51996],{"class":221},"}px;\">\n",[106,51998,51999,52002,52004,52006,52008,52010],{"class":108,"line":16626},[106,52000,52001],{"class":221},"                \u003Cspan>${",[106,52003,3872],{"class":116},[106,52005,1007],{"class":221},[106,52007,558],{"class":116},[106,52009,1057],{"class":221},[106,52011,52012],{"class":221},"}\u003C\u002Fspan>\n",[106,52014,52015,52018,52020,52022,52024],{"class":108,"line":16632},[106,52016,52017],{"class":221},"                \u003Ch4>第${",[106,52019,558],{"class":116},[106,52021,45560],{"class":112},[106,52023,25112],{"class":165},[106,52025,52026],{"class":221},"}季度\u003C\u002Fh4>\n",[106,52028,52029],{"class":108,"line":16655},[106,52030,52031],{"class":221},"              \u003C\u002Fdiv>          \n",[106,52033,52034,52037],{"class":108,"line":16669},[106,52035,52036],{"class":221},"            `",[106,52038,123],{"class":116},[106,52040,52041],{"class":108,"line":16689},[106,52042,2521],{"class":116},[106,52044,52045],{"class":108,"line":16695},[106,52046,52047],{"class":175},"        \u002F\u002F 盒子结尾\n",[106,52049,52050,52052,52054,52056,52059],{"class":108,"line":16706},[106,52051,51919],{"class":116},[106,52053,51922],{"class":1955},[106,52055,117],{"class":116},[106,52057,52058],{"class":221},"` \u003C\u002Fdiv>`",[106,52060,123],{"class":116},[106,52062,52063,52065,52067],{"class":108,"line":16729},[106,52064,51770],{"class":116},[106,52066,51807],{"class":51294},[106,52068,51301],{"class":116},[106,52070,52071,52073,52075],{"class":108,"line":16751},[106,52072,51779],{"class":116},[106,52074,51794],{"class":51294},[106,52076,51301],{"class":116},[106,52078,52079],{"class":108,"line":16756},[106,52080,2392],{"emptyLinePlaceholder":33},[106,52082,52083,52085,52087],{"class":108,"line":16762},[106,52084,51779],{"class":116},[106,52086,50629],{"class":51294},[106,52088,51301],{"class":116},[77,52090,52092],{"id":52091},"_284-冒泡排序","2.8.4 冒泡排序",[97,52094,52096],{"className":50627,"code":52095,"language":50629,"meta":25,"style":25},"\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",[103,52097,52098,52108,52122,52126,52134,52149,52169,52181,52189,52193,52201,52209,52241,52274,52311,52316,52335,52340,52353,52368,52384,52388,52393,52397,52407,52416,52424,52428],{"__ignoreMap":25},[106,52099,52100,52102,52104,52106],{"class":108,"line":109},[106,52101,51291],{"class":116},[106,52103,51295],{"class":51294},[106,52105,51298],{"class":1955},[106,52107,51301],{"class":116},[106,52109,52110,52112,52114,52116,52118,52120],{"class":108,"line":28},[106,52111,1027],{"class":116},[106,52113,50629],{"class":51294},[106,52115,51310],{"class":1955},[106,52117,162],{"class":116},[106,52119,51315],{"class":221},[106,52121,51301],{"class":116},[106,52123,52124],{"class":108,"line":1172},[106,52125,2392],{"emptyLinePlaceholder":33},[106,52127,52128,52130,52132],{"class":108,"line":1187},[106,52129,1027],{"class":116},[106,52131,51328],{"class":51294},[106,52133,51301],{"class":116},[106,52135,52136,52139,52141,52143,52145,52147],{"class":108,"line":1193},[106,52137,52138],{"class":116},"  \u003C",[106,52140,51338],{"class":51294},[106,52142,51341],{"class":1955},[106,52144,162],{"class":116},[106,52146,51346],{"class":221},[106,52148,51301],{"class":116},[106,52150,52151,52153,52155,52157,52159,52161,52163,52165,52167],{"class":108,"line":1207},[106,52152,52138],{"class":116},[106,52154,51338],{"class":51294},[106,52156,14913],{"class":1955},[106,52158,162],{"class":116},[106,52160,51385],{"class":221},[106,52162,51365],{"class":1955},[106,52164,162],{"class":116},[106,52166,51392],{"class":221},[106,52168,51301],{"class":116},[106,52170,52171,52173,52175,52177,52179],{"class":108,"line":1213},[106,52172,52138],{"class":116},[106,52174,51401],{"class":51294},[106,52176,51404],{"class":116},[106,52178,51401],{"class":51294},[106,52180,51301],{"class":116},[106,52182,52183,52185,52187],{"class":108,"line":1304},[106,52184,51779],{"class":116},[106,52186,51328],{"class":51294},[106,52188,51301],{"class":116},[106,52190,52191],{"class":108,"line":1310},[106,52192,2392],{"emptyLinePlaceholder":33},[106,52194,52195,52197,52199],{"class":108,"line":1322},[106,52196,1027],{"class":116},[106,52198,51794],{"class":51294},[106,52200,51301],{"class":116},[106,52202,52203,52205,52207],{"class":108,"line":1604},[106,52204,52138],{"class":116},[106,52206,51807],{"class":51294},[106,52208,51301],{"class":116},[106,52210,52211,52214,52216,52218,52221,52223,52225,52227,52229,52231,52233,52235,52237,52239],{"class":108,"line":1609},[106,52212,52213],{"class":112},"    let",[106,52215,51827],{"class":116},[106,52217,162],{"class":112},[106,52219,52220],{"class":116}," [",[106,52222,436],{"class":165},[106,52224,12428],{"class":116},[106,52226,410],{"class":165},[106,52228,12428],{"class":116},[106,52230,188],{"class":165},[106,52232,12428],{"class":116},[106,52234,194],{"class":165},[106,52236,12428],{"class":116},[106,52238,334],{"class":165},[106,52240,33240],{"class":116},[106,52242,52243,52245,52247,52249,52251,52253,52255,52257,52259,52261,52263,52266,52268,52270,52272],{"class":108,"line":1615},[106,52244,3193],{"class":112},[106,52246,1650],{"class":116},[106,52248,51841],{"class":112},[106,52250,9431],{"class":116},[106,52252,162],{"class":112},[106,52254,4085],{"class":165},[106,52256,9438],{"class":116},[106,52258,1027],{"class":112},[106,52260,51959],{"class":116},[106,52262,51962],{"class":165},[106,52264,52265],{"class":112}," -",[106,52267,25112],{"class":165},[106,52269,3206],{"class":116},[106,52271,2284],{"class":112},[106,52273,12435],{"class":116},[106,52275,52276,52279,52281,52283,52285,52287,52289,52291,52293,52295,52297,52299,52301,52303,52305,52307,52309],{"class":108,"line":1620},[106,52277,52278],{"class":112},"      for",[106,52280,1650],{"class":116},[106,52282,51841],{"class":112},[106,52284,9493],{"class":116},[106,52286,162],{"class":112},[106,52288,4085],{"class":165},[106,52290,9500],{"class":116},[106,52292,1027],{"class":112},[106,52294,51959],{"class":116},[106,52296,51962],{"class":165},[106,52298,52265],{"class":112},[106,52300,9431],{"class":116},[106,52302,649],{"class":112},[106,52304,25112],{"class":165},[106,52306,9507],{"class":116},[106,52308,2284],{"class":112},[106,52310,12435],{"class":116},[106,52312,52313],{"class":108,"line":1634},[106,52314,52315],{"class":175},"        \u002F\u002F 开始交换,但是前提 第一个数大于第二个数才会进行交换\n",[106,52317,52318,52320,52323,52325,52328,52330,52332],{"class":108,"line":1639},[106,52319,2489],{"class":112},[106,52321,52322],{"class":116}," (arr[j] ",[106,52324,1077],{"class":112},[106,52326,52327],{"class":116}," arr[j ",[106,52329,598],{"class":112},[106,52331,25112],{"class":165},[106,52333,52334],{"class":116},"]) {\n",[106,52336,52337],{"class":108,"line":1645},[106,52338,52339],{"class":175},"          \u002F\u002F 交换两个变量\n",[106,52341,52342,52345,52348,52350],{"class":108,"line":1666},[106,52343,52344],{"class":112},"          let",[106,52346,52347],{"class":116}," tmp ",[106,52349,162],{"class":112},[106,52351,52352],{"class":116}," arr[j]\n",[106,52354,52355,52358,52360,52362,52364,52366],{"class":108,"line":1671},[106,52356,52357],{"class":116},"          arr[j] ",[106,52359,162],{"class":112},[106,52361,52327],{"class":116},[106,52363,598],{"class":112},[106,52365,25112],{"class":165},[106,52367,33240],{"class":116},[106,52369,52370,52373,52375,52377,52379,52381],{"class":108,"line":1685},[106,52371,52372],{"class":116},"          arr[j ",[106,52374,598],{"class":112},[106,52376,25112],{"class":165},[106,52378,4435],{"class":116},[106,52380,162],{"class":112},[106,52382,52383],{"class":116}," tmp\n",[106,52385,52386],{"class":108,"line":1690},[106,52387,2521],{"class":116},[106,52389,52390],{"class":108,"line":1719},[106,52391,52392],{"class":116},"      }\n",[106,52394,52395],{"class":108,"line":1724},[106,52396,2179],{"class":116},[106,52398,52399,52402,52404],{"class":108,"line":1741},[106,52400,52401],{"class":116},"    document.",[106,52403,51922],{"class":1955},[106,52405,52406],{"class":116},"(arr)\n",[106,52408,52409,52412,52414],{"class":108,"line":1746},[106,52410,52411],{"class":116},"  \u003C\u002F",[106,52413,51807],{"class":51294},[106,52415,51301],{"class":116},[106,52417,52418,52420,52422],{"class":108,"line":1751},[106,52419,51779],{"class":116},[106,52421,51794],{"class":51294},[106,52423,51301],{"class":116},[106,52425,52426],{"class":108,"line":1756},[106,52427,2392],{"emptyLinePlaceholder":33},[106,52429,52430,52432,52434],{"class":108,"line":1770},[106,52431,51779],{"class":116},[106,52433,50629],{"class":51294},[106,52435,51301],{"class":116},[14,52437,52438],{},[23,52439],{"alt":25,"src":52440},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-055.png",[14,52442,52443],{},"实际开发中我们使用的是函数：sort()，默认按照升序",[14,52445,52446],{},"let arr = [4, 2, 5, 1, 3]",[14,52448,52449],{},"\u002F\u002F 1.升序排列写法",[14,52451,52452],{},"arr.sort(function (a, b) {",[14,52454,52455],{},"return a - b",[14,52457,52458],{},"})",[14,52460,52461],{},"console.log(arr) \u002F\u002F [1, 2, 3, 4, 5]",[14,52463,52464],{},"\u002F\u002F 降序排列写法",[14,52466,52452],{},[14,52468,52469],{},"return b - a",[14,52471,52458],{},[14,52473,52474],{},"console.log(arr) \u002F\u002F [5, 4, 3, 2, 1]",[48,52476,52478],{"id":52477},"_29-函数","2.9 函数",[14,52480,52481],{},[23,52482],{"alt":25,"src":52483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-056.png",[14,52485,52486],{},"（）是调用的意思，为了区分哪个函数，所以前边加上函数名，因此函数的调用：函数名()",[14,52488,52489],{},"函数的声明用function",[14,52491,52492],{},"函数里边可以嵌套函数",[77,52494,52496],{"id":52495},"_291-函数传参","2.9.1 函数传参",[14,52498,52499],{},[23,52500],{"alt":25,"src":52501},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-057.png",[14,52503,52504],{},[23,52505],{"alt":25,"src":52506},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-058.png",[1124,52508,52509,52512,52515,52518,52521,52524],{},[63,52510,52511],{},"形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）",[63,52513,52514],{},"实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）",[63,52516,52517],{},"形参可以理解为是在这个函数内声明的变量（比如 num1 = 10）实参可以理解为是给这个变量赋值",[63,52519,52520],{},"开发中尽量保持形参和实参个数一致",[63,52522,52523],{},"我们曾经使用过的 alert('打印'), parseInt('11'), Number('11') 本质上都是函数调用的传参",[63,52525,52526],{},"形参只在函数中有用，所以不需要进行声明这个变量",[14,52528,52529],{},"可以给形参初始值，此时函数调用的时候，不放实参这个函数也可以使用，不会报错；默认值只会在缺少实参参数传递时 才会被执行，所以有参数会优先执行传递过来的实参, 否则默认为undefined",[77,52531,52533],{"id":52532},"_292-函数的返回值","2.9.2 函数的返回值",[14,52535,52536],{},[23,52537],{"alt":25,"src":52538},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-059.png",[14,52540,52541],{},[23,52542],{"alt":25,"src":52543},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-060.png",[1124,52545,52546,52549,52552,52555,52558],{},[63,52547,52548],{},"在函数体中使用 return 关键字能将内部的执行结果交给函数外部使用",[63,52550,52551],{},"return 后面代码不会再被执行，会立即结束当前函数，所以 return 后面的数据不要换行写，return要写在函数的最下边",[63,52553,52554],{},"return函数可以没有 return，这种情况函数默认返回值为 undefined",[63,52556,52557],{},"返回多个值时使用数组，让它返回数组，就能将多个值返回",[63,52559,52560],{},"断点调试:进入函数内部看执行过程F11",[77,52562,52564],{"id":52563},"_293-参数个数不同情况","2.9.3 参数个数不同情况",[97,52566,52568],{"className":50627,"code":52567,"language":50629,"meta":25,"style":25},"    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",[103,52569,52570,52575,52580,52584,52589],{"__ignoreMap":25},[106,52571,52572],{"class":108,"line":109},[106,52573,52574],{"class":116},"    function fn(a, b) {\n",[106,52576,52577],{"class":108,"line":28},[106,52578,52579],{"class":116},"      console.log(a + b);\n",[106,52581,52582],{"class":108,"line":1172},[106,52583,2179],{"class":116},[106,52585,52586],{"class":108,"line":1187},[106,52587,52588],{"class":116},"    fn(1, 2, 3)输出3，最后一个参数没人接，不要\n",[106,52590,52591],{"class":108,"line":1193},[106,52592,52593],{"class":116},"    fn(1)输出NaN，第二个值undefined,1+undefined=NaN,计算错误\n",[77,52595,52597],{"id":52596},"_294-作用域","2.9.4 作用域",[1124,52599,52600,52606,52611,52614,52617],{},[63,52601,52602,52603],{},"一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名字的 ",[266,52604,52605],{},"作用域",[63,52607,52608],{},[266,52609,52610],{},"作用域的使用提高了程序逻辑的局部性，增强了程序的可靠性，减少了名字冲突",[63,52612,52613],{},"分为全局作用域和局部作用域；全局作用域的变量叫作全局变量，局部作用域的变量叫作局部变量，也称为函数作用域，函数内部有效",[63,52615,52616],{},"函数内部可以直接所使用全局变量",[63,52618,52619],{},"如果函数内部，变量没有声明，直接赋值，也当全局变量看，但是强烈不推荐，但是需要先调用函数才可以输出函数内部的变量",[14,52621,14626],{},[97,52623,52625],{"className":50627,"code":52624,"language":50629,"meta":25,"style":25},"    function fun() {\n      num = 10\n    }\n    fun()\n    console.log(num)\n   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[103,52626,52627,52632,52637,52641,52646,52651,52656],{"__ignoreMap":25},[106,52628,52629],{"class":108,"line":109},[106,52630,52631],{"class":116},"    function fun() {\n",[106,52633,52634],{"class":108,"line":28},[106,52635,52636],{"class":116},"      num = 10\n",[106,52638,52639],{"class":108,"line":1172},[106,52640,2179],{"class":116},[106,52642,52643],{"class":108,"line":1187},[106,52644,52645],{"class":116},"    fun()\n",[106,52647,52648],{"class":108,"line":1193},[106,52649,52650],{"class":116},"    console.log(num)\n",[106,52652,52653],{"class":108,"line":1207},[106,52654,52655],{"class":116},"   会输出10，如果不调用函数，直接就报错，尽量不要用这种方法，如果此时我在函数的上方写了\n",[106,52657,52658],{"class":108,"line":1213},[106,52659,52660],{"class":116},"   let num=20,则num的值会被覆盖，这样值就乱了，这样是不对的！\n",[1124,52662,52663,52666],{},[63,52664,52665],{},"函数内部的形参可以看做是局部变量",[63,52667,52668],{},"不同作用域变量可以重名；相同作用域变量不可以重名",[14,52670,52671,52672],{},"变量访问原则： ",[266,52673,52674],{},"在能够访问到的情况下 先局部， 局部没有在找全局",[77,52676,52678],{"id":52677},"_295-匿名函数","2.9.5 匿名函数",[14,52680,52681],{},"函数可以分为具名函数和匿名函数",[14,52683,52684],{},"匿名函数是指没有名字的函数，它是无法直接使用的，使用的两种方式：",[60,52686,52687],{},[63,52688,52689],{},"函数表达式",[14,52691,52692],{},[23,52693],{"alt":25,"src":52694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-061.png",[14,52696,52697],{},"里边也可以写参数",[14,52699,52700],{},"具名函数调用位置可以随意调整；",[14,52702,52703],{},"匿名函数函数表达式形式只能在声明后才可以使用",[60,52705,52706],{"start":28},[63,52707,52708],{},"立即执行函数",[14,52710,52711],{},[23,52712],{"alt":25,"src":52713},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-062.png",[14,52715,52716],{},"直接执行函数，不需要再调用！！！本质它已经调用了",[14,52718,52719],{},"写法：两个小括号，然后在第一个小括号中写function",[14,52721,52722],{},"(function () {})();",[14,52724,52725],{},"不要落下最后的;",[14,52727,52728],{},"立即执行函数必须要加;",[14,52730,52731],{},"分号写前写后都没问题",[14,52733,52734],{},"写前：",[14,52736,52737],{},"(function() {})()",[14,52739,52740],{},";(function () {})();",[14,52742,52743],{},"写后:",[14,52745,52746],{},"(function() {})();",[14,52748,52722],{},[14,52750,52751],{},"可以这样理解：最后一个小括号实质是调用前边的函数，为了保证前边的函数正常进行又给其套了一层括号，最后括号里边的数为实参，function后面的参数为形参",[14,52753,52754],{},"还有一种写法：",[14,52756,52757],{},"(function(){}());",[14,52759,52760],{},"或者:",[14,52762,52763],{},"!function(){}();",[14,52765,52766],{},"立即执行函数有时候也是可以加名字的：",[14,52768,52769],{},"(function flexible(window,document) {}(window,document));",[14,52771,52772],{},"省一些调用方法",[77,52774,52776],{"id":52775},"_296-逻辑中断","2.9.6 逻辑中断!!!",[14,52778,52779],{},[23,52780],{"alt":25,"src":52781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-063.png",[14,52783,52784],{},"这样就不用非得给x,y初始化了",[14,52786,52787],{},[23,52788],{"alt":25,"src":52789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-064.png",[14,52791,52792],{},"代码执行时先看左边",[14,52794,52795],{},"例如：console.log(false && 3+5)",[14,52797,52798],{},"&&逻辑与遇假则假，当执行左边为假时就不执行右边了，所以输出false",[14,52800,52801],{},"&&都是真时，就返回最后一个真值",[14,52803,52804],{},"console.log(11 && 22)",[14,52806,52807],{},"输出22",[14,52809,52810],{},"逻辑与：遇真则真",[14,52812,14626],{},[14,52814,52815],{},"let age=1",[14,52817,52818],{},"console.log(11 || age++)",[14,52820,52821],{},"不执行后边的age++，先执行左边11为真，就是真，就直接结束语句了，输出11",[14,52823,52824],{},"console.log(11 || 22)",[14,52826,52827],{},"||逻辑或遇到真就直接输出，输出结果为11",[14,52829,52830],{},"||如果都是假的话，就取最后一个假的值了",[77,52832,52834],{"id":52833},"_297-转换为boolean型","2.9.7 转换为Boolean型",[14,52836,52837],{},"显示转换：",[14,52839,52840,52843,52844],{},[266,52841,52842],{},"记忆","： ",[266,52845,52846],{},"‘’ 、0、undefined、null、false、NaN 转换为布尔值后都是false, 其余则为 true",[14,52848,52849],{},"空字符串为假，其他字符串全为真",[14,52851,52852],{},[23,52853],{"alt":25,"src":52854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-065.png",[14,52856,52857],{},"隐式转换：",[14,52859,52860],{},[23,52861],{"alt":25,"src":52862},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-066.png",[14,52864,52865],{},"隐式转换:",[14,52867,52868],{},"null+3=3",[14,52870,52871],{},"undefined+3=NaN",[14,52873,52874],{},"null==undefined 输出true,他两个都当0看",[14,52876,52877],{},"null===undefined 输出false",[14,52879,52880],{},"undefined做任何操作都是NaN",[14,52882,52883],{},"NaN不等于NaN，NaN表示计算错误",[48,52885,52887],{"id":52886},"_210-对象","2.10 对象",[77,52889,52891],{"id":52890},"_2101-对象的介绍","2.10.1 对象的介绍",[14,52893,52894],{},"对象也是一种数据类型，里边的数据是无序的",[14,52896,52897],{},"对象由属性和方法组成",[14,52899,52900],{},[23,52901],{"alt":25,"src":52902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-067.png",[14,52904,52905],{},[23,52906],{"alt":25,"src":52907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-068.png",[14,52909,52910],{},[23,52911],{"alt":25,"src":52912},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-069.png",[77,52914,52916],{"id":52915},"_2102-对象属性","2.10.2 对象属性",[14,52918,52919],{},[23,52920],{"alt":25,"src":52921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-070.png",[60,52923,52924],{},[63,52925,52926],{},"查询对象",[14,52928,52929],{},"对象名.属性 goods.uname",[14,52931,52932],{},"属性名中带有字符串时采用：对象名['属性名'] goods['uname']",[14,52934,52935],{},"不带字符串的属性名也可以使用 对象名['属性名']",[14,52937,52938],{},"[]语法里面的值如果不添加引号 默认会当成变量解析",[14,52940,52941],{},"总结：点后面的属性名一定不要加引号；[] 里面的属性名一定加引号(单引双引都🆗)",[60,52943,52944],{"start":28},[63,52945,52946],{},"重新赋值",[14,52948,52949],{},"对象名.属性=新值",[60,52951,52952],{"start":1172},[63,52953,52954],{},"增加新数据",[14,52956,52949],{},[60,52958,52959],{"start":1187},[63,52960,52961],{},"删除对象中的属性",[14,52963,52964],{},"delete 对象名.属性",[77,52966,52968],{"id":52967},"_2103-对象方法","2.10.3 对象方法",[14,52970,52971],{},[23,52972],{"alt":25,"src":52973},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-071.png",[14,52975,52976],{},"后边跟的是匿名函数",[14,52978,52979],{},"对象外面的叫函数；对象内部的叫方法",[14,52981,52982],{},[23,52983],{"alt":25,"src":52984},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-072.png",[77,52986,52988],{"id":52987},"_2104-遍历对象","2.10.4 遍历对象",[14,52990,52991],{},"理解为加括号的python字典遍历",[14,52993,52994],{},[23,52995],{"alt":25,"src":52996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-073.png",[14,52998,52999],{},"k是字符串类型",[14,53001,53002],{},"用for in可以实现对数组的遍历工作，但是k为字符串，我们在遍历的时候需要用到数组的下标，下表是数组字面量，不应该为字符串，所以我们不要使用for in来遍历字典，正常for循环遍历就可以",[97,53004,53006],{"className":50627,"code":53005,"language":50629,"meta":25,"style":25},"   let arr = [1, 2, 3]\n    for (let k in arr) {\n      console.log(k)\n      console.log(arr[k])\n    }\n",[103,53007,53008,53013,53018,53023,53028],{"__ignoreMap":25},[106,53009,53010],{"class":108,"line":109},[106,53011,53012],{"class":116},"   let arr = [1, 2, 3]\n",[106,53014,53015],{"class":108,"line":28},[106,53016,53017],{"class":116},"    for (let k in arr) {\n",[106,53019,53020],{"class":108,"line":1172},[106,53021,53022],{"class":116},"      console.log(k)\n",[106,53024,53025],{"class":108,"line":1187},[106,53026,53027],{"class":116},"      console.log(arr[k])\n",[106,53029,53030],{"class":108,"line":1193},[106,53031,2179],{"class":116},[14,53033,53034],{},[23,53035],{"alt":25,"src":53036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-074.png",[14,53038,53039],{},"数字型控制台输出颜色偏蓝，字符串型控制台打印是黑色的",[14,53041,53042],{},"for in 用来遍历对象 k这个写啥也行，习惯使用key或k",[14,53044,53045],{},"for in 得到的k是属性名",[51807,53047,53048],{},"\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,53050,53051],{},"k是字符串，不可以进行pink.k，这是不对的，k是带引号的属性名，点k的话，对象中就没有这个属性名了，所以得到的是undefined，无法准确遍历",[77,53053,53055],{"id":53054},"_2105-遍历数组对象","2.10.5 遍历数组对象、",[14,53057,53058],{},"数组中放对象信息",[97,53060,53064],{"className":53061,"code":53062,"language":53063,"meta":25,"style":25},"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",[103,53065,53066,53074,53079,53084,53089,53094,53099,53104,53109,53114,53119,53124,53129,53133,53137],{"__ignoreMap":25},[106,53067,53068,53070,53072],{"class":108,"line":109},[106,53069,1027],{"class":116},[106,53071,51807],{"class":51294},[106,53073,51301],{"class":116},[106,53075,53076],{"class":108,"line":28},[106,53077,53078],{"class":116},"    let students = [\n",[106,53080,53081],{"class":108,"line":1172},[106,53082,53083],{"class":116},"      { name: '小明', age: 18, gender: '男', hometown: '河北省' },\n",[106,53085,53086],{"class":108,"line":1187},[106,53087,53088],{"class":116},"      { name: '小红', age: 19, gender: '女', hometown: '河南省' },\n",[106,53090,53091],{"class":108,"line":1193},[106,53092,53093],{"class":116},"      { name: '小刚', age: 17, gender: '男', hometown: '山西省' },\n",[106,53095,53096],{"class":108,"line":1207},[106,53097,53098],{"class":116},"      { name: '小丽', age: 18, gender: '女', hometown: '山东省' }\n",[106,53100,53101],{"class":108,"line":1213},[106,53102,53103],{"class":116},"    ]\n",[106,53105,53106],{"class":108,"line":1304},[106,53107,53108],{"class":116},"    for (let i = 0; i \u003C students.length; i++) {\n",[106,53110,53111],{"class":108,"line":1310},[106,53112,53113],{"class":116},"      for (let k in students[i]) {\n",[106,53115,53116],{"class":108,"line":1322},[106,53117,53118],{"class":116},"        console.log(`输出第${i + 1}个同学的${k}:${students[i][k]}`)\n",[106,53120,53121],{"class":108,"line":1604},[106,53122,53123],{"class":116},"        \u002F\u002F输出每个人的名字：\n",[106,53125,53126],{"class":108,"line":1609},[106,53127,53128],{"class":116},"        \u002F\u002Fconsole.log(students[i].name)\n",[106,53130,53131],{"class":108,"line":1615},[106,53132,52392],{"class":116},[106,53134,53135],{"class":108,"line":1620},[106,53136,2179],{"class":116},[106,53138,53139,53141,53143],{"class":108,"line":1634},[106,53140,52411],{"class":116},[106,53142,51807],{"class":51294},[106,53144,51301],{"class":116},[77,53146,53148],{"id":53147},"_2106-内置对象","2.10.6 内置对象",[14,53150,53151],{},"JavaScript内部提供的对象，包含各种属性和方法给开发者调用，例如document.write()",[60,53153,53154],{},[63,53155,53156],{},"数学对象Math",[14,53158,53159],{},[23,53160],{"alt":25,"src":53161},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-075.png",[14,53163,53164],{},[355,53165,53168],{"href":53166,"rel":53167},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FMath",[23858],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fen-US\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FMath",[14,53170,53171],{},"联想：parseInt转换为整数型，与floor相似，输入小数的数字，只取最小值",[14,53173,53174],{},"两者区别是parseInt可以传入字符串，会去掉后边的字符串，只留前边的数字",[14,53176,53177],{},"数组不可以使用Math中的max,min来求最大值与最小值",[14,53179,53180],{},"null是一个空对象，可以认为：null类似于let obj={}",[14,53182,53183],{},"null属于对象数据类型",[60,53185,53186],{"start":28},[63,53187,53188],{},"生成任意范围随机数",[14,53190,53191],{},[23,53192],{"alt":25,"src":53193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-076.png",[14,53195,53196],{},"这里加1是想取到右边的部分，因为它是左闭右开，第一个是[0,11），永远取不到11",[14,53198,53199],{},"乘以几就取不到几",[14,53201,53202],{},"取数组中的随机元素：",[14,53204,53205],{},"let arr = ['red', 'green', 'blue']",[14,53207,53208],{},"let random = Math.floor(Math.random() * arr.length)",[14,53210,53211],{},"console.log(arr[random])",[14,53213,53214],{},"这个函数得到的是全闭区间",[14,53216,53217],{},"function getRandom(N, M) {",[14,53219,53220],{},"return Math.floor(Math.random() * (M - N + 1)) + N",[14,53222,1063],{},[14,53224,53225],{},"console.log(getRandom(4, 8))",[77,53227,53229],{"id":53228},"_2107-基本数据类型和引用数据类型","2.10.7 基本数据类型和引用数据类型",[14,53231,53232],{},[23,53233],{"alt":25,"src":53234},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-077.png",[14,53236,53237],{},[23,53238],{"alt":25,"src":53239},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-078.png",[14,53241,53242],{},[23,53243],{"alt":25,"src":53244},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-079.png",[14,53246,53247],{},"简单数据类型是直接把值放在了栈中，复杂数据类型是将值的地址放在栈中，值放在堆中，通过地址得到存放的内容",[14,53249,53250],{},[23,53251],{"alt":25,"src":53252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-080.png",[14,53254,53255],{},[23,53256],{"alt":25,"src":53257},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-081.png",[14,53259,53260],{},"所有复杂数据类型都存放在堆中，将它内容的地址存放在栈中",[14,53262,53263],{},"简单数据类型是深拷贝，复杂数据类型是浅拷贝",[14,53265,53266],{},"js实际是没有堆栈的，这里是为了方便理解，在ts中有堆栈，ts与js百分之80是相同的",[5119,53268,53269],{},"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":25,"searchDepth":28,"depth":28,"links":53271},[53272,53280,53281,53282,53283,53284,53291,53295,53301,53310],{"id":50462,"depth":28,"text":50463,"children":53273},[53274,53275,53276,53277,53278,53279],{"id":50466,"depth":1172,"text":50467},{"id":50483,"depth":1172,"text":50484},{"id":50523,"depth":1172,"text":50524},{"id":50535,"depth":1172,"text":50536},{"id":50544,"depth":1172,"text":50545},{"id":50592,"depth":1172,"text":50593},{"id":50602,"depth":28,"text":50603},{"id":50690,"depth":28,"text":50691},{"id":50713,"depth":28,"text":50714},{"id":50725,"depth":28,"text":50726},{"id":50912,"depth":28,"text":50913,"children":53285},[53286,53287,53288,53289,53290],{"id":50916,"depth":1172,"text":50917},{"id":50925,"depth":1172,"text":50926},{"id":50953,"depth":1172,"text":50954},{"id":50989,"depth":1172,"text":50990},{"id":51014,"depth":1172,"text":51015},{"id":51026,"depth":28,"text":51027,"children":53292},[53293,53294],{"id":51047,"depth":1172,"text":51048},{"id":51141,"depth":1172,"text":51142},{"id":51199,"depth":28,"text":51200,"children":53296},[53297,53298,53299,53300],{"id":51203,"depth":1172,"text":51204},{"id":51227,"depth":1172,"text":51228},{"id":51280,"depth":1172,"text":51281},{"id":52091,"depth":1172,"text":52092},{"id":52477,"depth":28,"text":52478,"children":53302},[53303,53304,53305,53306,53307,53308,53309],{"id":52495,"depth":1172,"text":52496},{"id":52532,"depth":1172,"text":52533},{"id":52563,"depth":1172,"text":52564},{"id":52596,"depth":1172,"text":52597},{"id":52677,"depth":1172,"text":52678},{"id":52775,"depth":1172,"text":52776},{"id":52833,"depth":1172,"text":52834},{"id":52886,"depth":28,"text":52887,"children":53311},[53312,53313,53314,53315,53316,53317,53318],{"id":52890,"depth":1172,"text":52891},{"id":52915,"depth":1172,"text":52916},{"id":52967,"depth":1172,"text":52968},{"id":52987,"depth":1172,"text":52988},{"id":53054,"depth":1172,"text":53055},{"id":53147,"depth":1172,"text":53148},{"id":53228,"depth":1172,"text":53229},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch2",{"title":50454,"description":30},"wiki\u002F2025-09-02-JS学习\u002Fch2-基础语法","rK6tHUmvUvisqc9Yrr_XipbUmuD7o7U3t6tcvliyB7c",{"id":53325,"title":53326,"body":53327,"description":30,"extension":31,"meta":76667,"navigation":33,"path":76668,"seo":76669,"stem":76670,"__hash__":76671},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs.md","3.Web APIs",{"type":7,"value":53328,"toc":76607},[53329,53332,53335,53338,53343,53346,53349,53352,53356,53360,53366,53371,53379,53386,53389,53393,53398,53403,53408,53411,53414,53425,53428,53432,53435,53438,53443,53448,53453,53456,53459,53551,53554,53559,53562,53567,53570,53573,53578,53581,53586,53590,53593,53607,53611,53616,53619,53622,53626,53631,53634,53638,53642,53647,53651,53656,53659,53662,53665,53668,53671,53674,53679,53684,53712,53715,53718,53721,53726,53729,53732,53735,53738,53742,53771,53775,53780,53785,53788,53791,53794,53799,53914,53919,53924,54085,54090,54093,54097,54102,54107,54110,54113,54116,54119,54122,54125,54128,54131,54134,54137,54140,54143,54146,54149,54151,54154,54157,54160,54165,54169,54566,54569,54575,54579,54584,55866,55871,55874,55877,55880,55885,57081,57085,57091,57096,57099,57104,57109,57113,57117,57122,57125,57130,57133,57136,57140,58048,58051,58055,58276,58279,58282,58285,58511,58514,58738,58741,58745,58750,58753,58756,58984,58987,59020,59023,59027,59032,59036,59039,59042,59045,59048,59051,59054,59057,59062,60342,60346,60349,61442,61446,61449,61452,61455,61458,61462,61465,61468,61470,61478,62959,62963,62966,62969,62972,63181,63184,63188,63192,63197,63202,63205,63208,63213,63217,63222,63225,63334,63338,63343,63348,63351,63354,63358,63363,63368,63373,63376,63379,63390,63393,63398,63403,63406,63409,63482,63486,63491,63494,63496,63507,63511,63516,64842,64845,64848,64851,64853,64856,64859,64862,64865,64868,64871,64874,64877,64880,64883,64886,64889,64891,64893,64896,64900,65994,65997,66000,66016,66030,66033,66038,66044,66049,66053,66057,66062,66066,66071,66513,66518,66521,66525,66530,66533,66536,66540,66545,66549,66554,66559,66563,66568,66573,66576,66581,66586,66590,66595,66600,66704,66707,66711,66716,67082,67085,67088,67091,67094,67097,67100,67103,67106,68402,68406,68411,68416,68419,68422,68425,68428,68430,68435,68440,68443,68447,68452,68457,68462,68465,68468,68471,68474,68477,68482,68485,68489,68494,68499,68503,68508,68511,68516,68519,68522,68525,68528,68531,68536,68539,68542,68545,68548,68552,68557,68560,68564,68569,68572,68575,68579,68608,68611,68615,68619,68624,68628,68633,68636,68639,68642,68645,68648,68651,68654,68657,68660,68663,68666,68669,68672,68675,68679,68684,68689,68692,68696,68700,68705,68708,68712,68715,68718,68723,68728,68733,68738,68743,68746,68749,68754,68759,68763,68768,68771,68776,68779,68782,68785,68788,68793,68796,68805,68809,68814,68817,68820,68824,68827,68832,68836,68839,68845,68851,68855,68881,68884,70445,70448,70944,70947,70952,70957,70962,70966,70971,70976,70981,70985,70990,70993,70996,70999,71002,71006,71009,71014,71017,71022,71026,71031,71034,71039,71044,71049,71052,71055,71060,71065,71068,71071,71075,71078,71083,71086,71091,71094,71099,71104,71109,71112,71117,71182,71185,71196,71200,71205,71377,71381,71386,71389,71392,71395,71399,71410,71414,71417,71422,71427,71430,71433,71436,71439,71442,71444,71447,71450,71453,71458,71461,71466,71469,71473,71476,71479,71493,71497,71500,71555,71560,71563,71566,71571,71574,71578,71583,71713,71717,71722,71727,71808,71813,71817,71820,71825,71830,71836,71839,71842,71845,71849,71854,71857,71868,71872,71889,74936,74940,74943,74946,74949,74970,74974,74977,74985,74988,74993,74996,74999,75004,75009,75013,75034,75038,75043,75046,75049,75052,75055,75059,75064,75067,75071,75076,75079,75084,75087,75092,75095,75100,76303,76307,76312,76315,76320,76604],[10,53330,53326],{"id":53331},"_3web-apis",[14,53333,53334],{},"尽量使用const，因为绝大多数定义的变量基本上它的值都不会再改变",[14,53336,53337],{},"实际开发中的思路：有了变量先给const，如果发现它后面是要被修改的，再改为let",[14,53339,53340],{},[23,53341],{"alt":25,"src":53342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-082.png",[14,53344,53345],{},"此时arr.push(3),给数组添加新的元素，这个元素加添加到堆中了，地址还是那个地址，因此这里的使用const来声明是没有问题的。如果此时接着写arr=[4,5,6]，此时这个就是一个新的数组，存到堆中的位置与之前那个是不同的，在栈中存了新地址，所以此时就会报错，就是不对的，如果想这样干，只能使用let来声明变量。const声明的是常量",[14,53347,53348],{},"建议数组和对象使用 const 来声明",[14,53350,53351],{},"Web APIs分为DoM(页面文档对象模型)和BoM(浏览器对象模型)",[48,53353,53355],{"id":53354},"_31-dom文档对象模型","3.1 Dom(文档对象模型)",[77,53357,53359],{"id":53358},"非常重要window是整个窗口html是dom树的根节点document代表了整个html中所有内容代表整个html页面dom树","非常重要：window是整个窗口；html是DOM树的根节点；document代表了整个html中所有内容，代表整个HTML页面（DOM树）",[14,53361,53362,53365],{},[103,53363,53364],{},"document"," = HTML 文件解析后的对象化表示；",[14,53367,53368,53370],{},[103,53369,53364],{}," ≠ HTML 文件本身",[14,53372,53373,53378],{},[266,53374,53375],{},[103,53376,53377],{},"window"," = 窗口对象，代表浏览器的这个标签页\u002F容器",[14,53380,53381,53385],{},[266,53382,53383],{},[103,53384,53364],{}," ：容器里的内容，代表当前加载的网页（DOM）",[14,53387,53388],{},"document实际上为window.document的简写",[77,53390,53392],{"id":53391},"_311-关于dom的基础知识","3.1.1 关于DoM的基础知识",[14,53394,53395],{},[23,53396],{"alt":25,"src":53397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-083.png",[14,53399,53400],{},[23,53401],{"alt":25,"src":53402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-084.png",[14,53404,53405],{},[23,53406],{"alt":25,"src":53407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-085.png",[14,53409,53410],{},"console.dir()",[14,53412,53413],{},"dir用来打印对象",[1124,53415,53416,53419,53422],{},[63,53417,53418],{},"任何一个标签，都是一个对象",[63,53420,53421],{},"也就是说这些标签在HTML中就是一个标签，但是在js的DoM中从HTML获取过来就是对象，叫作DoM对象",[63,53423,53424],{},"在DoM中最大的对象是document对象，它提供的方法是用来访问和操作网页内容的，document是整个网页中最大的对象，它存放了页面的所有元素！",[14,53426,53427],{},"DoM对象可以理解为就是标签元素，在html中就是标签，修饰的时候使用的是css，在js中就是对象，通过对对象的属性进行修改来实现对标签的修饰",[77,53429,53431],{"id":53430},"_312-获取dom对象","3.1.2 获取DoM对象",[14,53433,53434],{},"css是通过选择器的方式来获取标签，对标签的样式进行修饰的",[14,53436,53437],{},"获取DoM元素现在主要是通过css选择器的方式来获取，必须牢记这一方法！！！",[14,53439,53440],{},[266,53441,53442],{},"查找元素DOM元素就是利用 JS 选择页面中标签元素",[60,53444,53445],{},[63,53446,53447],{},"利用CSS选择器来获取标签元素",[14,53449,53450],{},[23,53451],{"alt":25,"src":53452},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-086.png",[14,53454,53455],{},"里边的选择器必须必须加引号！！！",[14,53457,53458],{},"只选择第一个元素",[97,53460,53462],{"className":53061,"code":53461,"language":53063,"meta":25,"style":25},"\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",[103,53463,53464,53472,53493,53512,53520,53525,53530,53535,53543],{"__ignoreMap":25},[106,53465,53466,53468,53470],{"class":108,"line":109},[106,53467,1027],{"class":116},[106,53469,51794],{"class":51294},[106,53471,51301],{"class":116},[106,53473,53474,53476,53478,53481,53483,53486,53489,53491],{"class":108,"line":28},[106,53475,52138],{"class":116},[106,53477,51605],{"class":51294},[106,53479,53480],{"class":1955}," class",[106,53482,162],{"class":116},[106,53484,53485],{"class":221},"\"box\"",[106,53487,53488],{"class":116},">123\u003C\u002F",[106,53490,51605],{"class":51294},[106,53492,51301],{"class":116},[106,53494,53495,53497,53499,53501,53503,53505,53508,53510],{"class":108,"line":1172},[106,53496,52138],{"class":116},[106,53498,51605],{"class":51294},[106,53500,53480],{"class":1955},[106,53502,162],{"class":116},[106,53504,53485],{"class":221},[106,53506,53507],{"class":116},">456\u003C\u002F",[106,53509,51605],{"class":51294},[106,53511,51301],{"class":116},[106,53513,53514,53516,53518],{"class":108,"line":1187},[106,53515,52138],{"class":116},[106,53517,51807],{"class":51294},[106,53519,51301],{"class":116},[106,53521,53522],{"class":108,"line":1193},[106,53523,53524],{"class":116},"    \u002F\u002F 1.获取匹配的第一个元素\n",[106,53526,53527],{"class":108,"line":1207},[106,53528,53529],{"class":116},"    const box = document.querySelector('div')\n",[106,53531,53532],{"class":108,"line":1213},[106,53533,53534],{"class":116},"    console.dir(box)\n",[106,53536,53537,53539,53541],{"class":108,"line":1304},[106,53538,52411],{"class":116},[106,53540,51807],{"class":51294},[106,53542,51301],{"class":116},[106,53544,53545,53547,53549],{"class":108,"line":1310},[106,53546,51779],{"class":116},[106,53548,51794],{"class":51294},[106,53550,51301],{"class":116},[14,53552,53553],{},"只选123，不选456",[14,53555,53556],{},[23,53557],{"alt":25,"src":53558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-087.png",[14,53560,53561],{},"返回的是一个数组的集合，不能对其进行直接修改",[14,53563,53564],{},[23,53565],{"alt":25,"src":53566},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-088.png",[14,53568,53569],{},"单个标签也可以使用querySelectAll()来获取，直接通过索引号就可以使用这个元素",[14,53571,53572],{},"querySelect()的调用对象是它的父亲，并不一定用document来进行调用",[60,53574,53575],{"start":28},[63,53576,53577],{},"其他方法来获取标签元素",[14,53579,53580],{},"不要使用，还是使用css法获取DoM的元素的方法就行，下面的方法认识就ok",[14,53582,53583],{},[23,53584],{"alt":25,"src":53585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-089.png",[77,53587,53589],{"id":53588},"_313-操作元素的内容","3.1.3 操作元素的内容",[14,53591,53592],{},"设置修改DOM元素内容有两种方式：",[1124,53594,53595,53598,53601,53604],{},[63,53596,53597],{},"元素.innerText=''",[63,53599,53600],{},"元素.innerHTML=''",[63,53602,53603],{},"不写字符串输出数字也是可以的",[63,53605,53606],{},"元素.innerHtml=1",[21991,53608,53610],{"id":53609},"_3131-innertext","3.1.3.1 innerText",[14,53612,53613],{},[23,53614],{"alt":25,"src":53615},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-090.png",[14,53617,53618],{},"思路：实现了修改盒子中的内容！",[14,53620,53621],{},"它只显示纯文本，不解析标签",[21991,53623,53625],{"id":53624},"_3132-innerhtml","3.1.3.2 innerHTML",[14,53627,53628],{},[23,53629],{"alt":25,"src":53630},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-091.png",[14,53632,53633],{},"相比于innerText，他的强大之处在于可以解析标签",[77,53635,53637],{"id":53636},"_314-操作元素属性","3.1.4 操作元素属性",[21991,53639,53641],{"id":53640},"_3141-操作元素常用属性","3.1.4.1 操作元素常用属性",[14,53643,53644],{},[23,53645],{"alt":25,"src":53646},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-092.png",[21991,53648,53650],{"id":53649},"_3142-操作元素样式属性","3.1.4.2 操作元素样式属性",[14,53652,53653],{},[23,53654],{"alt":25,"src":53655},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-093.png",[14,53657,53658],{},"后边跟的是字符串，必须加引号，然后单位也不要忘记",[14,53660,53661],{},"div.style.backgroundColor = 'hotpink'",[14,53663,53664],{},"如果按照css的写法，-表示减，就会出错",[14,53666,53667],{},"body元素不需要再获取，直接用就行！！！！！！",[14,53669,53670],{},"如果使用的是body标签，它是网页写标签部分的唯一标签，所以对body来说可以不用获取他的DOM对象，直接使用document.body.style来进行修改样式",[14,53672,53673],{},"通过该方式来修改css样式，解析之后生成的是行内样式，行内样式的权重高于内部样式，权重非常高，所以可以覆盖原有样式",[14,53675,53676],{},[23,53677],{"alt":25,"src":53678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-094.png",[14,53680,53681],{},[23,53682],{"alt":25,"src":53683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-095.png",[60,53685,53686,53689,53692,53695,53698,53701],{},[63,53687,53688],{},"className这个方式就是修改很多样式的时候来使用的！",[63,53690,53691],{},"常常用于一个动作特效，比如轮播图点下边按钮才动",[63,53693,53694],{},"这个只能添加类名，前边已经有classNmae，就不需要加点了，只写类名就ok!",[63,53696,53697],{},"className为属性名，如果还用class的话就导致与关键字冲突",[63,53699,53700],{},"通过操作类名来修改css时，一定要看看这个标签是否原本就有类名，如果不要之前的样式，写上div.classNmae=‘box’后会覆盖之前的nav，就是给对象中的属性改值了，就是如果要的话就写成div.className='nav box'",[63,53702,53703,53704,53709],{},"解析标签的时候就变为了",[51605,53705],{"className":53706},[53707,53708],"nav","box",[53710,53711],"br",{},[14,53713,53714],{},"例子：",[51605,53716],{"className":53717},[53707],[51807,53719,53720],{},"\n\nconst div = document.querySelector('div')\n\ndiv.className = 'box'\n\n",[14,53722,53723],{},[23,53724],{"alt":25,"src":53725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-096.png",[14,53727,53728],{},"追加和删除类名用classList",[14,53730,53731],{},"常用于类似于开关的操作",[14,53733,53734],{},"toggle,切换一个类名意思就是：有就删掉，没有就加上（指的是盒子中是否有这个类名，不是说css中有没有这个类名，css中肯定得写类名的，不写那还要操作类控制css干嘛）",[14,53736,53737],{},"4.classList.contains()看看有没有包含某个类，如果有则返回true，没有则返回false",[21991,53739,53741],{"id":53740},"_3143-牢记点","3.1.4.3 牢记点",[60,53743,53744,53747,53750,53753,53756,53759,53762,53765,53768],{},[63,53745,53746],{},"获取对象时在不忘记双引号的同时加上类选择器前的.；id选择器前的#",[63,53748,53749],{},"使用style属性操作css时不要忘记引号",[63,53751,53752],{},"使用className或者classList时也不要忘记引号",[63,53754,53755],{},"修改标签内容，也就是获取后的对象（浏览器根据html生成的js对象），通过innerText和innerHTML来实现，只不过innerText不能识别标签，innerHTML可以识别标签",[63,53757,53758],{},"获取后的标签就是一个对象，其中包含了非常多的属性值和方法，const xxx=document.querySelector('.nav')，这个xxx就是一个常量，起啥名也行，一般写成这个盒子的名或者原有类名，赋值给这个常量后，就变成对象，className等就是这个类（元素）下的方法",[63,53760,53761],{},"body就这么一个元素，所以可以对它不获取，来xiu'ga",[63,53763,53764],{},"若： let arr=['1','2',3] arr[0]=1",[63,53766,53767],{},"如果一个对象第一个属性值为‘1’，则获取该对象的属性值就是这个1",[63,53769,53770],{},"上述说明了输出对象和数组中字符串的时候是不带引号的，在修改对象属性值的时候必须加字符串必须加引号，不然中文会报错，计算机不会认为这是字符串，但是将这个字符串对应的数组加下标的方式给他，就不要加字符串了，它本身就是字符串呀这个元素",[77,53772,53774],{"id":53773},"_315-操作表单元素","3.1.5 操作表单元素",[60,53776,53777],{},[63,53778,53779],{},"天生的属性",[14,53781,53782],{},[23,53783],{"alt":25,"src":53784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-097.png",[14,53786,53787],{},"innerHTML可以得到元素的内容 username.innerHTML,但是仅限于普通元素，表单不是通过它来进行获取的，得到表单内容用value,但是button比较特殊,它是双标签,要使用.innerHTML来获取,使用.value是无法获取的",[14,53789,53790],{},"console.log(username.innerHTML) 获取一般元素的值，对表单元素来说输出的是空，啥也没有，无法读取内容，修改内容是 username.innerHTML='修改的值'",[14,53792,53793],{},"console.log(username.value) 获取表单值 修改表单元素的值：username.value='修改的值'",[14,53795,53796],{},[23,53797],{"alt":25,"src":53798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-098.png",[97,53800,53802],{"className":50627,"code":53801,"language":50629,"meta":25,"style":25},"在复选框中如果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",[103,53803,53804,53809,53841,53846,53851,53856,53861,53865,53870,53875,53892,53904,53909],{"__ignoreMap":25},[106,53805,53806],{"class":108,"line":109},[106,53807,53808],{"class":116},"在复选框中如果checked='checked',则可以在表单元素中只写一个checked\n",[106,53810,53811,53813,53816,53819,53821,53824,53826,53828,53830,53832,53834,53836,53839],{"class":108,"line":28},[106,53812,1027],{"class":116},[106,53814,53815],{"class":51294},"input",[106,53817,53818],{"class":1955}," type",[106,53820,162],{"class":116},[106,53822,53823],{"class":221},"\"checkbox\"",[106,53825,14913],{"class":1955},[106,53827,162],{"class":116},[106,53829,7645],{"class":221},[106,53831,14952],{"class":1955},[106,53833,162],{"class":116},[106,53835,7645],{"class":221},[106,53837,53838],{"class":1955}," checked",[106,53840,51301],{"class":116},[106,53842,53843],{"class":108,"line":1172},[106,53844,53845],{"class":116},"不选的话：\n",[106,53847,53848],{"class":108,"line":1187},[106,53849,53850],{"class":116},"const input = document.querySelector('input')\n",[106,53852,53853],{"class":108,"line":1193},[106,53854,53855],{"class":116},"input.checked=false\n",[106,53857,53858],{"class":108,"line":1207},[106,53859,53860],{"class":116},"这里写'true'也对，但是不要这样写，字符串只有空时为假，这里有隐式转换，就正常写布尔值就行\n",[106,53862,53863],{"class":108,"line":1213},[106,53864,2392],{"emptyLinePlaceholder":33},[106,53866,53867],{"class":108,"line":1304},[106,53868,53869],{"class":116},"禁用按钮：\n",[106,53871,53872],{"class":108,"line":1310},[106,53873,53874],{"class":116},"它的属性值disabled='disabled'这样可以进行，属性与值相等，就只写一个属性值就行\n",[106,53876,53877,53879,53882,53885,53888,53890],{"class":108,"line":1322},[106,53878,1027],{"class":116},[106,53880,53881],{"class":51294},"button",[106,53883,53884],{"class":1955}," disabled",[106,53886,53887],{"class":116},">点击\u003C\u002F",[106,53889,53881],{"class":51294},[106,53891,51301],{"class":116},[106,53893,53894,53896,53898,53900,53902],{"class":108,"line":1604},[106,53895,1027],{"class":116},[106,53897,53881],{"class":51294},[106,53899,53887],{"class":116},[106,53901,53881],{"class":51294},[106,53903,51301],{"class":116},[106,53905,53906],{"class":108,"line":1609},[106,53907,53908],{"class":116},"const bt = document.querySelector('button')\n",[106,53910,53911],{"class":108,"line":1615},[106,53912,53913],{"class":116},"bt.disabled = false\n",[60,53915,53916],{"start":28},[63,53917,53918],{},"自定义属性",[14,53920,53921],{},[23,53922],{"alt":25,"src":53923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-099.png",[97,53925,53927],{"className":53061,"code":53926,"language":53063,"meta":25,"style":25},"\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",[103,53928,53929,53937,53965,53984,54003,54022,54041,54049,54054,54059,54064,54069,54077],{"__ignoreMap":25},[106,53930,53931,53933,53935],{"class":108,"line":109},[106,53932,1027],{"class":116},[106,53934,51794],{"class":51294},[106,53936,51301],{"class":116},[106,53938,53939,53941,53943,53946,53948,53950,53953,53955,53958,53961,53963],{"class":108,"line":28},[106,53940,52138],{"class":116},[106,53942,51605],{"class":51294},[106,53944,53945],{"class":1955}," data-id",[106,53947,162],{"class":116},[106,53949,3670],{"class":221},[106,53951,53952],{"class":1955}," data-spm",[106,53954,162],{"class":116},[106,53956,53957],{"class":221},"\"我不知道\"",[106,53959,53960],{"class":116},">1\u003C\u002F",[106,53962,51605],{"class":51294},[106,53964,51301],{"class":116},[106,53966,53967,53969,53971,53973,53975,53977,53980,53982],{"class":108,"line":1172},[106,53968,52138],{"class":116},[106,53970,51605],{"class":51294},[106,53972,53945],{"class":1955},[106,53974,162],{"class":116},[106,53976,3693],{"class":221},[106,53978,53979],{"class":116},">2\u003C\u002F",[106,53981,51605],{"class":51294},[106,53983,51301],{"class":116},[106,53985,53986,53988,53990,53992,53994,53996,53999,54001],{"class":108,"line":1187},[106,53987,52138],{"class":116},[106,53989,51605],{"class":51294},[106,53991,53945],{"class":1955},[106,53993,162],{"class":116},[106,53995,3706],{"class":221},[106,53997,53998],{"class":116},">3\u003C\u002F",[106,54000,51605],{"class":51294},[106,54002,51301],{"class":116},[106,54004,54005,54007,54009,54011,54013,54015,54018,54020],{"class":108,"line":1193},[106,54006,52138],{"class":116},[106,54008,51605],{"class":51294},[106,54010,53945],{"class":1955},[106,54012,162],{"class":116},[106,54014,3719],{"class":221},[106,54016,54017],{"class":116},">4\u003C\u002F",[106,54019,51605],{"class":51294},[106,54021,51301],{"class":116},[106,54023,54024,54026,54028,54030,54032,54034,54037,54039],{"class":108,"line":1207},[106,54025,52138],{"class":116},[106,54027,51605],{"class":51294},[106,54029,53945],{"class":1955},[106,54031,162],{"class":116},[106,54033,3740],{"class":221},[106,54035,54036],{"class":116},">5\u003C\u002F",[106,54038,51605],{"class":51294},[106,54040,51301],{"class":116},[106,54042,54043,54045,54047],{"class":108,"line":1213},[106,54044,52138],{"class":116},[106,54046,51807],{"class":51294},[106,54048,51301],{"class":116},[106,54050,54051],{"class":108,"line":1304},[106,54052,54053],{"class":116},"    const one = document.querySelector('div')\n",[106,54055,54056],{"class":108,"line":1310},[106,54057,54058],{"class":116},"    console.log(one.dataset)\n",[106,54060,54061],{"class":108,"line":1322},[106,54062,54063],{"class":116},"    console.log(one.dataset.id)\n",[106,54065,54066],{"class":108,"line":1604},[106,54067,54068],{"class":116},"    console.log(one.dataset.spm)\n",[106,54070,54071,54073,54075],{"class":108,"line":1609},[106,54072,52411],{"class":116},[106,54074,51807],{"class":51294},[106,54076,51301],{"class":116},[106,54078,54079,54081,54083],{"class":108,"line":1615},[106,54080,51779],{"class":116},[106,54082,51794],{"class":51294},[106,54084,51301],{"class":116},[14,54086,54087],{},[23,54088],{"alt":25,"src":54089},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-100.png",[14,54091,54092],{},"document.querySelector选择的是第一个对象（元素）",[77,54094,54096],{"id":54095},"_316-定时器-间歇函数","3.1.6 定时器-间歇函数",[14,54098,54099],{},[23,54100],{"alt":25,"src":54101},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-101.png",[14,54103,54104],{},[23,54105],{"alt":25,"src":54106},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-102.png",[14,54108,54109],{},"定时器返回的是数字，表示第几个定时器，每个定时器的都是独一无二的，表示的是第几个定时器：",[51807,54111,54112],{},"\n\nfunction fn() {\n\n   document.write(1)\n\n   }\n\nlet n = setInterval(fn, 1000)\n\n   console.log(n)\n\n",[14,54114,54115],{},"此时输出结果为1，每1000毫秒输出一个1，若：",[51807,54117,54118],{},"\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,54120,54121],{},"此时输出结果就是2，每1秒输出两个1（因为前边还有一个执行输出1的定时器，两个一起作用在浏览器就每秒输出11）",[14,54123,54124],{},"当个执行时输出前有一秒的空窗期，当经过setInterval时，如果间隔时间为1000，它就是过了一秒钟才去调用函数，他不是立即执行的函数，跟后边的间隔时间有关",[14,54126,54127],{},"单位为毫秒！！！",[14,54129,54130],{},"可以搭配匿名函数来用！！！",[14,54132,54133],{},"setInterval(function () {",[14,54135,54136],{},"alert('两秒执行一次')",[14,54138,54139],{},"}, 2000)",[14,54141,54142],{},"如果有名函数的话，就不要在函数名的后边加小括号，小括号表示调用这个函数",[14,54144,54145],{},"function fn() {",[14,54147,54148],{},"document.write(1)",[14,54150,1063],{},[14,54152,54153],{},"setInterval(fn, 1000)",[14,54155,54156],{},"如果函数名后边非得加括号的话，就将这个函数再加个引号，但是尽量不要用这种方式",[14,54158,54159],{},"setInterval('fn()', 1000)",[14,54161,54162],{},[23,54163],{"alt":25,"src":54164},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-103.png",[21991,54166,54168],{"id":54167},"_3161-阅读注册协议","3.1.6.1 阅读注册协议",[97,54170,54172],{"className":50627,"code":54171,"language":50629,"meta":25,"style":25},"\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",[103,54173,54174,54184,54198,54202,54210,54224,54244,54256,54264,54268,54276,54313,54318,54323,54328,54336,54344,54366,54374,54379,54401,54406,54411,54422,54427,54447,54455,54470,54485,54496,54501,54511,54521,54525,54534,54538,54546,54554,54558],{"__ignoreMap":25},[106,54175,54176,54178,54180,54182],{"class":108,"line":109},[106,54177,51291],{"class":116},[106,54179,51295],{"class":51294},[106,54181,51298],{"class":1955},[106,54183,51301],{"class":116},[106,54185,54186,54188,54190,54192,54194,54196],{"class":108,"line":28},[106,54187,1027],{"class":116},[106,54189,50629],{"class":51294},[106,54191,51310],{"class":1955},[106,54193,162],{"class":116},[106,54195,51315],{"class":221},[106,54197,51301],{"class":116},[106,54199,54200],{"class":108,"line":1172},[106,54201,2392],{"emptyLinePlaceholder":33},[106,54203,54204,54206,54208],{"class":108,"line":1187},[106,54205,1027],{"class":116},[106,54207,51328],{"class":51294},[106,54209,51301],{"class":116},[106,54211,54212,54214,54216,54218,54220,54222],{"class":108,"line":1193},[106,54213,52138],{"class":116},[106,54215,51338],{"class":51294},[106,54217,51341],{"class":1955},[106,54219,162],{"class":116},[106,54221,51346],{"class":221},[106,54223,51301],{"class":116},[106,54225,54226,54228,54230,54232,54234,54236,54238,54240,54242],{"class":108,"line":1207},[106,54227,52138],{"class":116},[106,54229,51338],{"class":51294},[106,54231,14913],{"class":1955},[106,54233,162],{"class":116},[106,54235,51385],{"class":221},[106,54237,51365],{"class":1955},[106,54239,162],{"class":116},[106,54241,51392],{"class":221},[106,54243,51301],{"class":116},[106,54245,54246,54248,54250,54252,54254],{"class":108,"line":1213},[106,54247,52138],{"class":116},[106,54249,51401],{"class":51294},[106,54251,51404],{"class":116},[106,54253,51401],{"class":51294},[106,54255,51301],{"class":116},[106,54257,54258,54260,54262],{"class":108,"line":1304},[106,54259,51779],{"class":116},[106,54261,51328],{"class":51294},[106,54263,51301],{"class":116},[106,54265,54266],{"class":108,"line":1310},[106,54267,2392],{"emptyLinePlaceholder":33},[106,54269,54270,54272,54274],{"class":108,"line":1322},[106,54271,1027],{"class":116},[106,54273,51794],{"class":51294},[106,54275,51301],{"class":116},[106,54277,54278,54280,54283,54285,54287,54289,54291,54293,54295,54298,54300,54303,54306,54308,54311],{"class":108,"line":1604},[106,54279,52138],{"class":116},[106,54281,54282],{"class":51294},"textarea",[106,54284,14913],{"class":1955},[106,54286,162],{"class":116},[106,54288,7645],{"class":221},[106,54290,14952],{"class":1955},[106,54292,162],{"class":116},[106,54294,7645],{"class":221},[106,54296,54297],{"class":1955}," cols",[106,54299,162],{"class":116},[106,54301,54302],{"class":221},"\"30\"",[106,54304,54305],{"class":1955}," rows",[106,54307,162],{"class":116},[106,54309,54310],{"class":221},"\"10\"",[106,54312,51301],{"class":116},[106,54314,54315],{"class":108,"line":1609},[106,54316,54317],{"class":116},"        用户注册协议\n",[106,54319,54320],{"class":108,"line":1615},[106,54321,54322],{"class":116},"        欢迎注册成为京东用户！在您注册过程中，您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议，请您务必仔细阅读、充分理解协议中的条款内容后再点击同意（尤其是以粗体或下划线标识的条款，因为这些条款可能会明确您应履行的义务或对您的权利有所限制）。\n",[106,54324,54325],{"class":108,"line":1620},[106,54326,54327],{"class":116},"        【请您注意】如果您不同意以下协议全部或任何条款约定，请您停止注册。您停止注册后将仅可以浏览我们的商品信息但无法享受我们的产品或服务。如您按照注册流程提示填写信息，阅读并点击同意上述协议且完成全部注册流程后，即表示您已充分阅读、理解并接受协议的全部内容，并表明您同意我们可以依据协议内容来处理您的个人信息，并同意我们将您的订单信息共享给为完成此订单所必须的第三方合作方（详情查看\n",[106,54329,54330,54332,54334],{"class":108,"line":1634},[106,54331,51770],{"class":116},[106,54333,54282],{"class":51294},[106,54335,51301],{"class":116},[106,54337,54338,54340,54342],{"class":108,"line":1639},[106,54339,52138],{"class":116},[106,54341,53710],{"class":51294},[106,54343,51301],{"class":116},[106,54345,54346,54348,54350,54352,54354,54357,54359,54362,54364],{"class":108,"line":1645},[106,54347,52138],{"class":116},[106,54349,53881],{"class":51294},[106,54351,53480],{"class":1955},[106,54353,162],{"class":116},[106,54355,54356],{"class":221},"\"btn\"",[106,54358,53884],{"class":1955},[106,54360,54361],{"class":116},">我已经阅读用户协议(5)\u003C\u002F",[106,54363,53881],{"class":51294},[106,54365,51301],{"class":116},[106,54367,54368,54370,54372],{"class":108,"line":1666},[106,54369,52138],{"class":116},[106,54371,51807],{"class":51294},[106,54373,51301],{"class":116},[106,54375,54376],{"class":108,"line":1671},[106,54377,54378],{"class":175},"    \u002F\u002F 1. 获取元素\n",[106,54380,54381,54383,54386,54388,54391,54394,54396,54399],{"class":108,"line":1685},[106,54382,11214],{"class":112},[106,54384,54385],{"class":165}," btn",[106,54387,13557],{"class":112},[106,54389,54390],{"class":116}," document.",[106,54392,54393],{"class":1955},"querySelector",[106,54395,117],{"class":116},[106,54397,54398],{"class":221},"'.btn'",[106,54400,123],{"class":116},[106,54402,54403],{"class":108,"line":1690},[106,54404,54405],{"class":175},"    \u002F\u002F console.log(btn.innerHTML)  butto按钮特殊用innerHTML\n",[106,54407,54408],{"class":108,"line":1719},[106,54409,54410],{"class":175},"    \u002F\u002F 2. 倒计时\n",[106,54412,54413,54415,54417,54419],{"class":108,"line":1724},[106,54414,52213],{"class":112},[106,54416,9431],{"class":116},[106,54418,162],{"class":112},[106,54420,54421],{"class":165}," 5\n",[106,54423,54424],{"class":108,"line":1741},[106,54425,54426],{"class":175},"    \u002F\u002F 2.1 开启定时器\n",[106,54428,54429,54431,54434,54436,54439,54441,54444],{"class":108,"line":1746},[106,54430,52213],{"class":112},[106,54432,54433],{"class":116}," n ",[106,54435,162],{"class":112},[106,54437,54438],{"class":1955}," setInterval",[106,54440,117],{"class":116},[106,54442,54443],{"class":112},"function",[106,54445,54446],{"class":116}," () {\n",[106,54448,54449,54452],{"class":108,"line":1751},[106,54450,54451],{"class":116},"      i",[106,54453,54454],{"class":112},"--\n",[106,54456,54457,54460,54462,54465,54467],{"class":108,"line":1756},[106,54458,54459],{"class":116},"      btn.innerHTML ",[106,54461,162],{"class":112},[106,54463,54464],{"class":221}," `我已经阅读用户协议(${",[106,54466,558],{"class":116},[106,54468,54469],{"class":221},"})`\n",[106,54471,54472,54475,54478,54481,54483],{"class":108,"line":1770},[106,54473,54474],{"class":112},"      if",[106,54476,54477],{"class":116}," (i ",[106,54479,54480],{"class":112},"===",[106,54482,4085],{"class":165},[106,54484,12435],{"class":116},[106,54486,54487,54490,54493],{"class":108,"line":1775},[106,54488,54489],{"class":1955},"        clearInterval",[106,54491,54492],{"class":116},"(n)  ",[106,54494,54495],{"class":175},"\u002F\u002F 关闭定时器\n",[106,54497,54498],{"class":108,"line":2569},[106,54499,54500],{"class":175},"        \u002F\u002F 定时器停了，我就可以开按钮\n",[106,54502,54503,54506,54508],{"class":108,"line":2583},[106,54504,54505],{"class":116},"        btn.disabled ",[106,54507,162],{"class":112},[106,54509,54510],{"class":165}," false\n",[106,54512,54513,54516,54518],{"class":108,"line":2591},[106,54514,54515],{"class":116},"        btn.innerHTML ",[106,54517,162],{"class":112},[106,54519,54520],{"class":221}," '同意'\n",[106,54522,54523],{"class":108,"line":2596},[106,54524,52392],{"class":116},[106,54526,54527,54530,54532],{"class":108,"line":2602},[106,54528,54529],{"class":116},"    }, ",[106,54531,6403],{"class":165},[106,54533,123],{"class":116},[106,54535,54536],{"class":108,"line":2608},[106,54537,2392],{"emptyLinePlaceholder":33},[106,54539,54540,54542,54544],{"class":108,"line":2613},[106,54541,52411],{"class":116},[106,54543,51807],{"class":51294},[106,54545,51301],{"class":116},[106,54547,54548,54550,54552],{"class":108,"line":7941},[106,54549,51779],{"class":116},[106,54551,51794],{"class":51294},[106,54553,51301],{"class":116},[106,54555,54556],{"class":108,"line":7965},[106,54557,2392],{"emptyLinePlaceholder":33},[106,54559,54560,54562,54564],{"class":108,"line":7970},[106,54561,51779],{"class":116},[106,54563,50629],{"class":51294},[106,54565,51301],{"class":116},[14,54567,54568],{},"不要一直想着用死循环,避免死循环",[14,54570,54571,54574],{},[103,54572,54573],{},"定时器本身就是循环",",就直接在匿名函数中写就欧克了,不要再去写循环了,尤其死循环!!!",[21991,54576,54578],{"id":54577},"_3162-轮播图定时版","3.1.6.2 轮播图定时版",[60,54580,54581],{},[63,54582,54583],{},"法1",[97,54585,54587],{"className":50627,"code":54586,"language":50629,"meta":25,"style":25},"\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",[103,54588,54589,54599,54613,54617,54625,54639,54659,54671,54679,54685,54696,54707,54711,54715,54722,54734,54738,54742,54749,54761,54775,54788,54802,54806,54810,54817,54828,54839,54850,54862,54874,54886,54890,54894,54902,54912,54925,54937,54950,54954,54958,54965,54975,54987,54999,55010,55021,55031,55043,55055,55059,55063,55072,55084,55096,55124,55137,55141,55145,55152,55163,55167,55175,55183,55187,55195,55209,55224,55248,55256,55271,55284,55292,55313,55325,55337,55349,55361,55373,55385,55397,55406,55414,55422,55430,55442,55465,55484,55503,55522,55541,55560,55579,55599,55603,55623,55642,55662,55683,55694,55711,55721,55731,55741,55746,55751,55756,55761,55786,55799,55803,55826,55830,55838,55846,55854,55858],{"__ignoreMap":25},[106,54590,54591,54593,54595,54597],{"class":108,"line":109},[106,54592,51291],{"class":116},[106,54594,51295],{"class":51294},[106,54596,51298],{"class":1955},[106,54598,51301],{"class":116},[106,54600,54601,54603,54605,54607,54609,54611],{"class":108,"line":28},[106,54602,1027],{"class":116},[106,54604,50629],{"class":51294},[106,54606,51310],{"class":1955},[106,54608,162],{"class":116},[106,54610,51315],{"class":221},[106,54612,51301],{"class":116},[106,54614,54615],{"class":108,"line":1172},[106,54616,2392],{"emptyLinePlaceholder":33},[106,54618,54619,54621,54623],{"class":108,"line":1187},[106,54620,1027],{"class":116},[106,54622,51328],{"class":51294},[106,54624,51301],{"class":116},[106,54626,54627,54629,54631,54633,54635,54637],{"class":108,"line":1193},[106,54628,52138],{"class":116},[106,54630,51338],{"class":51294},[106,54632,51341],{"class":1955},[106,54634,162],{"class":116},[106,54636,51346],{"class":221},[106,54638,51301],{"class":116},[106,54640,54641,54643,54645,54647,54649,54651,54653,54655,54657],{"class":108,"line":1207},[106,54642,52138],{"class":116},[106,54644,51338],{"class":51294},[106,54646,14913],{"class":1955},[106,54648,162],{"class":116},[106,54650,51385],{"class":221},[106,54652,51365],{"class":1955},[106,54654,162],{"class":116},[106,54656,51392],{"class":221},[106,54658,51301],{"class":116},[106,54660,54661,54663,54665,54667,54669],{"class":108,"line":1213},[106,54662,52138],{"class":116},[106,54664,51401],{"class":51294},[106,54666,51404],{"class":116},[106,54668,51401],{"class":51294},[106,54670,51301],{"class":116},[106,54672,54673,54675,54677],{"class":108,"line":1304},[106,54674,52138],{"class":116},[106,54676,5119],{"class":51294},[106,54678,51301],{"class":116},[106,54680,54681,54683],{"class":108,"line":1310},[106,54682,6396],{"class":51294},[106,54684,15565],{"class":116},[106,54686,54687,54690,54692,54694],{"class":108,"line":1322},[106,54688,54689],{"class":165},"      padding",[106,54691,51431],{"class":116},[106,54693,308],{"class":165},[106,54695,1283],{"class":116},[106,54697,54698,54701,54703,54705],{"class":108,"line":1604},[106,54699,54700],{"class":165},"      margin",[106,54702,51431],{"class":116},[106,54704,308],{"class":165},[106,54706,1283],{"class":116},[106,54708,54709],{"class":108,"line":1609},[106,54710,2179],{"class":116},[106,54712,54713],{"class":108,"line":1615},[106,54714,2392],{"emptyLinePlaceholder":33},[106,54716,54717,54720],{"class":108,"line":1620},[106,54718,54719],{"class":51294},"    li",[106,54721,15565],{"class":116},[106,54723,54724,54727,54729,54732],{"class":108,"line":1634},[106,54725,54726],{"class":165},"      list-style",[106,54728,51431],{"class":116},[106,54730,54731],{"class":165},"none",[106,54733,1283],{"class":116},[106,54735,54736],{"class":108,"line":1639},[106,54737,2179],{"class":116},[106,54739,54740],{"class":108,"line":1645},[106,54741,2392],{"emptyLinePlaceholder":33},[106,54743,54744,54747],{"class":108,"line":1666},[106,54745,54746],{"class":1955},"    .box",[106,54748,15565],{"class":116},[106,54750,54751,54754,54756,54759],{"class":108,"line":1671},[106,54752,54753],{"class":165},"      position",[106,54755,51431],{"class":116},[106,54757,54758],{"class":165},"relative",[106,54760,1283],{"class":116},[106,54762,54763,54766,54768,54771,54773],{"class":108,"line":1685},[106,54764,54765],{"class":165},"      width",[106,54767,51431],{"class":116},[106,54769,54770],{"class":165},"976",[106,54772,51486],{"class":112},[106,54774,1283],{"class":116},[106,54776,54777,54780,54782,54784,54786],{"class":108,"line":1690},[106,54778,54779],{"class":165},"      height",[106,54781,51431],{"class":116},[106,54783,1531],{"class":165},[106,54785,51486],{"class":112},[106,54787,1283],{"class":116},[106,54789,54790,54792,54794,54796,54798,54800],{"class":108,"line":1719},[106,54791,54700],{"class":165},[106,54793,51431],{"class":116},[106,54795,428],{"class":165},[106,54797,51486],{"class":112},[106,54799,51550],{"class":165},[106,54801,1283],{"class":116},[106,54803,54804],{"class":108,"line":1724},[106,54805,2179],{"class":116},[106,54807,54808],{"class":108,"line":1741},[106,54809,2392],{"emptyLinePlaceholder":33},[106,54811,54812,54815],{"class":108,"line":1746},[106,54813,54814],{"class":1955},"    .slider-footer",[106,54816,15565],{"class":116},[106,54818,54819,54821,54823,54826],{"class":108,"line":1751},[106,54820,54753],{"class":165},[106,54822,51431],{"class":116},[106,54824,54825],{"class":165},"absolute",[106,54827,1283],{"class":116},[106,54829,54830,54833,54835,54837],{"class":108,"line":1756},[106,54831,54832],{"class":165},"      left",[106,54834,51431],{"class":116},[106,54836,308],{"class":165},[106,54838,1283],{"class":116},[106,54840,54841,54844,54846,54848],{"class":108,"line":1770},[106,54842,54843],{"class":165},"      bottom",[106,54845,51431],{"class":116},[106,54847,308],{"class":165},[106,54849,1283],{"class":116},[106,54851,54852,54854,54856,54858,54860],{"class":108,"line":1775},[106,54853,54765],{"class":165},[106,54855,51431],{"class":116},[106,54857,428],{"class":165},[106,54859,445],{"class":112},[106,54861,1283],{"class":116},[106,54863,54864,54866,54868,54870,54872],{"class":108,"line":2569},[106,54865,54779],{"class":165},[106,54867,51431],{"class":116},[106,54869,692],{"class":165},[106,54871,445],{"class":112},[106,54873,1283],{"class":116},[106,54875,54876,54879,54881,54884],{"class":108,"line":2583},[106,54877,54878],{"class":165},"      background-color",[106,54880,51431],{"class":116},[106,54882,54883],{"class":165},"skyblue",[106,54885,1283],{"class":116},[106,54887,54888],{"class":108,"line":2591},[106,54889,2179],{"class":116},[106,54891,54892],{"class":108,"line":2596},[106,54893,2392],{"emptyLinePlaceholder":33},[106,54895,54896,54898,54900],{"class":108,"line":2602},[106,54897,54814],{"class":1955},[106,54899,6818],{"class":51294},[106,54901,15565],{"class":116},[106,54903,54904,54906,54908,54910],{"class":108,"line":2608},[106,54905,54753],{"class":165},[106,54907,51431],{"class":116},[106,54909,54825],{"class":165},[106,54911,1283],{"class":116},[106,54913,54914,54917,54919,54921,54923],{"class":108,"line":2613},[106,54915,54916],{"class":165},"      font-size",[106,54918,51431],{"class":116},[106,54920,1018],{"class":165},[106,54922,51486],{"class":112},[106,54924,1283],{"class":116},[106,54926,54927,54929,54931,54933,54935],{"class":108,"line":7941},[106,54928,54832],{"class":165},[106,54930,51431],{"class":116},[106,54932,817],{"class":165},[106,54934,51486],{"class":112},[106,54936,1283],{"class":116},[106,54938,54939,54942,54944,54946,54948],{"class":108,"line":7965},[106,54940,54941],{"class":165},"      top",[106,54943,51431],{"class":116},[106,54945,436],{"class":165},[106,54947,51486],{"class":112},[106,54949,1283],{"class":116},[106,54951,54952],{"class":108,"line":7970},[106,54953,2179],{"class":116},[106,54955,54956],{"class":108,"line":7976},[106,54957,2392],{"emptyLinePlaceholder":33},[106,54959,54960,54963],{"class":108,"line":8003},[106,54961,54962],{"class":51294},"    ul",[106,54964,15565],{"class":116},[106,54966,54967,54969,54971,54973],{"class":108,"line":8008},[106,54968,54753],{"class":165},[106,54970,51431],{"class":116},[106,54972,54825],{"class":165},[106,54974,1283],{"class":116},[106,54976,54977,54979,54981,54983,54985],{"class":108,"line":8014},[106,54978,54941],{"class":165},[106,54980,51431],{"class":116},[106,54982,898],{"class":165},[106,54984,51486],{"class":112},[106,54986,1283],{"class":116},[106,54988,54989,54991,54993,54995,54997],{"class":108,"line":8026},[106,54990,54832],{"class":165},[106,54992,51431],{"class":116},[106,54994,817],{"class":165},[106,54996,51486],{"class":112},[106,54998,1283],{"class":116},[106,55000,55001,55004,55006,55008],{"class":108,"line":8038},[106,55002,55003],{"class":165},"      display",[106,55005,51431],{"class":116},[106,55007,51471],{"class":165},[106,55009,1283],{"class":116},[106,55011,55012,55015,55017,55019],{"class":108,"line":8050},[106,55013,55014],{"class":165},"      justify-content",[106,55016,51431],{"class":116},[106,55018,51662],{"class":165},[106,55020,1283],{"class":116},[106,55022,55023,55025,55027,55029],{"class":108,"line":9709},[106,55024,54753],{"class":165},[106,55026,51431],{"class":116},[106,55028,54825],{"class":165},[106,55030,1283],{"class":116},[106,55032,55033,55035,55037,55039,55041],{"class":108,"line":9734},[106,55034,54765],{"class":165},[106,55036,51431],{"class":116},[106,55038,3984],{"class":165},[106,55040,51486],{"class":112},[106,55042,1283],{"class":116},[106,55044,55045,55047,55049,55051,55053],{"class":108,"line":9757},[106,55046,54779],{"class":165},[106,55048,51431],{"class":116},[106,55050,817],{"class":165},[106,55052,51486],{"class":112},[106,55054,1283],{"class":116},[106,55056,55057],{"class":108,"line":9781},[106,55058,2179],{"class":116},[106,55060,55061],{"class":108,"line":9786},[106,55062,2392],{"emptyLinePlaceholder":33},[106,55064,55065,55067,55070],{"class":108,"line":9791},[106,55066,54962],{"class":51294},[106,55068,55069],{"class":51294}," li",[106,55071,15565],{"class":116},[106,55073,55074,55076,55078,55080,55082],{"class":108,"line":9796},[106,55075,54765],{"class":165},[106,55077,51431],{"class":116},[106,55079,817],{"class":165},[106,55081,51486],{"class":112},[106,55083,1283],{"class":116},[106,55085,55086,55088,55090,55092,55094],{"class":108,"line":9805},[106,55087,54779],{"class":165},[106,55089,51431],{"class":116},[106,55091,817],{"class":165},[106,55093,51486],{"class":112},[106,55095,1283],{"class":116},[106,55097,55098,55100,55102,55105,55107,55109,55111,55113,55115,55117,55119,55122],{"class":108,"line":9810},[106,55099,54878],{"class":165},[106,55101,51431],{"class":116},[106,55103,55104],{"class":165},"rgba",[106,55106,117],{"class":116},[106,55108,308],{"class":165},[106,55110,12428],{"class":116},[106,55112,308],{"class":165},[106,55114,12428],{"class":116},[106,55116,308],{"class":165},[106,55118,12428],{"class":116},[106,55120,55121],{"class":165},".4",[106,55123,2711],{"class":116},[106,55125,55126,55129,55131,55133,55135],{"class":108,"line":9816},[106,55127,55128],{"class":165},"      border-radius",[106,55130,51431],{"class":116},[106,55132,563],{"class":165},[106,55134,51486],{"class":112},[106,55136,1283],{"class":116},[106,55138,55139],{"class":108,"line":9837},[106,55140,2179],{"class":116},[106,55142,55143],{"class":108,"line":9843},[106,55144,2392],{"emptyLinePlaceholder":33},[106,55146,55147,55150],{"class":108,"line":9857},[106,55148,55149],{"class":1955},"    .activate",[106,55151,15565],{"class":116},[106,55153,55154,55156,55158,55161],{"class":108,"line":9863},[106,55155,54878],{"class":165},[106,55157,51431],{"class":116},[106,55159,55160],{"class":165},"#f7f7f7",[106,55162,1283],{"class":116},[106,55164,55165],{"class":108,"line":9890},[106,55166,2179],{"class":116},[106,55168,55169,55171,55173],{"class":108,"line":9899},[106,55170,52411],{"class":116},[106,55172,5119],{"class":51294},[106,55174,51301],{"class":116},[106,55176,55177,55179,55181],{"class":108,"line":9905},[106,55178,51779],{"class":116},[106,55180,51328],{"class":51294},[106,55182,51301],{"class":116},[106,55184,55185],{"class":108,"line":9913},[106,55186,2392],{"emptyLinePlaceholder":33},[106,55188,55189,55191,55193],{"class":108,"line":9918},[106,55190,1027],{"class":116},[106,55192,51794],{"class":51294},[106,55194,51301],{"class":116},[106,55196,55197,55199,55201,55203,55205,55207],{"class":108,"line":16597},[106,55198,52138],{"class":116},[106,55200,51605],{"class":51294},[106,55202,53480],{"class":1955},[106,55204,162],{"class":116},[106,55206,53485],{"class":221},[106,55208,51301],{"class":116},[106,55210,55211,55213,55215,55217,55219,55222],{"class":108,"line":16603},[106,55212,51335],{"class":116},[106,55214,51605],{"class":51294},[106,55216,53480],{"class":1955},[106,55218,162],{"class":116},[106,55220,55221],{"class":221},"\"slider-wrapper\"",[106,55223,51301],{"class":116},[106,55225,55226,55229,55231,55234,55236,55239,55242,55244,55246],{"class":108,"line":16626},[106,55227,55228],{"class":116},"      \u003C",[106,55230,23],{"class":51294},[106,55232,55233],{"class":1955}," src",[106,55235,162],{"class":116},[106,55237,55238],{"class":221},"\"....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[106,55240,55241],{"class":1955}," alt",[106,55243,162],{"class":116},[106,55245,7645],{"class":221},[106,55247,51301],{"class":116},[106,55249,55250,55252,55254],{"class":108,"line":16632},[106,55251,51770],{"class":116},[106,55253,51605],{"class":51294},[106,55255,51301],{"class":116},[106,55257,55258,55260,55262,55264,55266,55269],{"class":108,"line":16655},[106,55259,51335],{"class":116},[106,55261,51605],{"class":51294},[106,55263,53480],{"class":1955},[106,55265,162],{"class":116},[106,55267,55268],{"class":221},"\"slider-footer\"",[106,55270,51301],{"class":116},[106,55272,55273,55275,55277,55280,55282],{"class":108,"line":16669},[106,55274,55228],{"class":116},[106,55276,14],{"class":51294},[106,55278,55279],{"class":116},">对人类来说会不会太超前了?\u003C\u002F",[106,55281,14],{"class":51294},[106,55283,51301],{"class":116},[106,55285,55286,55288,55290],{"class":108,"line":16689},[106,55287,55228],{"class":116},[106,55289,1124],{"class":51294},[106,55291,51301],{"class":116},[106,55293,55294,55297,55299,55301,55303,55306,55309,55311],{"class":108,"line":16695},[106,55295,55296],{"class":116},"        \u003C",[106,55298,63],{"class":51294},[106,55300,53480],{"class":1955},[106,55302,162],{"class":116},[106,55304,55305],{"class":221},"\"activate\"",[106,55307,55308],{"class":116},">\u003C\u002F",[106,55310,63],{"class":51294},[106,55312,51301],{"class":116},[106,55314,55315,55317,55319,55321,55323],{"class":108,"line":16706},[106,55316,55296],{"class":116},[106,55318,63],{"class":51294},[106,55320,55308],{"class":116},[106,55322,63],{"class":51294},[106,55324,51301],{"class":116},[106,55326,55327,55329,55331,55333,55335],{"class":108,"line":16729},[106,55328,55296],{"class":116},[106,55330,63],{"class":51294},[106,55332,55308],{"class":116},[106,55334,63],{"class":51294},[106,55336,51301],{"class":116},[106,55338,55339,55341,55343,55345,55347],{"class":108,"line":16751},[106,55340,55296],{"class":116},[106,55342,63],{"class":51294},[106,55344,55308],{"class":116},[106,55346,63],{"class":51294},[106,55348,51301],{"class":116},[106,55350,55351,55353,55355,55357,55359],{"class":108,"line":16756},[106,55352,55296],{"class":116},[106,55354,63],{"class":51294},[106,55356,55308],{"class":116},[106,55358,63],{"class":51294},[106,55360,51301],{"class":116},[106,55362,55363,55365,55367,55369,55371],{"class":108,"line":16762},[106,55364,55296],{"class":116},[106,55366,63],{"class":51294},[106,55368,55308],{"class":116},[106,55370,63],{"class":51294},[106,55372,51301],{"class":116},[106,55374,55375,55377,55379,55381,55383],{"class":108,"line":16776},[106,55376,55296],{"class":116},[106,55378,63],{"class":51294},[106,55380,55308],{"class":116},[106,55382,63],{"class":51294},[106,55384,51301],{"class":116},[106,55386,55387,55389,55391,55393,55395],{"class":108,"line":16789},[106,55388,55296],{"class":116},[106,55390,63],{"class":51294},[106,55392,55308],{"class":116},[106,55394,63],{"class":51294},[106,55396,51301],{"class":116},[106,55398,55399,55402,55404],{"class":108,"line":16794},[106,55400,55401],{"class":116},"      \u003C\u002F",[106,55403,1124],{"class":51294},[106,55405,51301],{"class":116},[106,55407,55408,55410,55412],{"class":108,"line":16808},[106,55409,51770],{"class":116},[106,55411,51605],{"class":51294},[106,55413,51301],{"class":116},[106,55415,55416,55418,55420],{"class":108,"line":16813},[106,55417,52411],{"class":116},[106,55419,51605],{"class":51294},[106,55421,51301],{"class":116},[106,55423,55424,55426,55428],{"class":108,"line":16819},[106,55425,52138],{"class":116},[106,55427,51807],{"class":51294},[106,55429,51301],{"class":116},[106,55431,55432,55434,55437,55439],{"class":108,"line":16824},[106,55433,11214],{"class":112},[106,55435,55436],{"class":165}," arrImage",[106,55438,13557],{"class":112},[106,55440,55441],{"class":116}," [\n",[106,55443,55444,55447,55450,55453,55456,55459,55462],{"class":108,"line":16838},[106,55445,55446],{"class":116},"      { url: ",[106,55448,55449],{"class":221},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg'",[106,55451,55452],{"class":116},", title: ",[106,55454,55455],{"class":221},"'对人类来说会不会太超前了?'",[106,55457,55458],{"class":116},", color: ",[106,55460,55461],{"class":221},"'rgba(100,67,68)'",[106,55463,55464],{"class":116}," },\n",[106,55466,55467,55469,55472,55474,55477,55479,55482],{"class":108,"line":16843},[106,55468,55446],{"class":116},[106,55470,55471],{"class":221},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg'",[106,55473,55452],{"class":116},[106,55475,55476],{"class":221},"'开启剑与雪的黑暗传说!'",[106,55478,55458],{"class":116},[106,55480,55481],{"class":221},"'rgba(43,35,26)'",[106,55483,55464],{"class":116},[106,55485,55486,55488,55491,55493,55496,55498,55501],{"class":108,"line":16848},[106,55487,55446],{"class":116},[106,55489,55490],{"class":221},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg'",[106,55492,55452],{"class":116},[106,55494,55495],{"class":221},"'真正的jo厨出现了!'",[106,55497,55458],{"class":116},[106,55499,55500],{"class":221},"'rgba(36,31,33)'",[106,55502,55464],{"class":116},[106,55504,55505,55507,55510,55512,55515,55517,55520],{"class":108,"line":16862},[106,55506,55446],{"class":116},[106,55508,55509],{"class":221},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg'",[106,55511,55452],{"class":116},[106,55513,55514],{"class":221},"'李玉刚:让世界通过b站看到东方大国文化'",[106,55516,55458],{"class":116},[106,55518,55519],{"class":221},"'rgba(139,98,66)'",[106,55521,55464],{"class":116},[106,55523,55524,55526,55529,55531,55534,55536,55539],{"class":108,"line":16874},[106,55525,55446],{"class":116},[106,55527,55528],{"class":221},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg'",[106,55530,55452],{"class":116},[106,55532,55533],{"class":221},"'快来分享你的寒假日常吧'",[106,55535,55458],{"class":116},[106,55537,55538],{"class":221},"'rgba(67,90,92)'",[106,55540,55464],{"class":116},[106,55542,55543,55545,55548,55550,55553,55555,55558],{"class":108,"line":16879},[106,55544,55446],{"class":116},[106,55546,55547],{"class":221},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg'",[106,55549,55452],{"class":116},[106,55551,55552],{"class":221},"'哔哩哔哩小年YEAR'",[106,55554,55458],{"class":116},[106,55556,55557],{"class":221},"'rgba(166,131,143)'",[106,55559,55464],{"class":116},[106,55561,55562,55564,55567,55569,55572,55574,55577],{"class":108,"line":16892},[106,55563,55446],{"class":116},[106,55565,55566],{"class":221},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg'",[106,55568,55452],{"class":116},[106,55570,55571],{"class":221},"'一站式解决你的电脑配置问题'",[106,55573,55458],{"class":116},[106,55575,55576],{"class":221},"'rgba(53,29,25)'",[106,55578,55464],{"class":116},[106,55580,55581,55583,55586,55588,55591,55593,55596],{"class":108,"line":16897},[106,55582,55446],{"class":116},[106,55584,55585],{"class":221},"'....\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg'",[106,55587,55452],{"class":116},[106,55589,55590],{"class":221},"'谁不想和小猫咪贴贴呢?'",[106,55592,55458],{"class":116},[106,55594,55595],{"class":221},"'rgba(99,72,114)'",[106,55597,55598],{"class":116}," }\n",[106,55600,55601],{"class":108,"line":16902},[106,55602,53103],{"class":116},[106,55604,55605,55607,55610,55612,55614,55616,55618,55621],{"class":108,"line":16907},[106,55606,11214],{"class":112},[106,55608,55609],{"class":165}," img",[106,55611,13557],{"class":112},[106,55613,54390],{"class":116},[106,55615,54393],{"class":1955},[106,55617,117],{"class":116},[106,55619,55620],{"class":221},"'.slider-wrapper img'",[106,55622,123],{"class":116},[106,55624,55625,55627,55629,55631,55633,55635,55637,55640],{"class":108,"line":16920},[106,55626,11214],{"class":112},[106,55628,6818],{"class":165},[106,55630,13557],{"class":112},[106,55632,54390],{"class":116},[106,55634,54393],{"class":1955},[106,55636,117],{"class":116},[106,55638,55639],{"class":221},"'.slider-footer p'",[106,55641,123],{"class":116},[106,55643,55644,55646,55649,55651,55653,55655,55657,55660],{"class":108,"line":16925},[106,55645,11214],{"class":112},[106,55647,55648],{"class":165}," color",[106,55650,13557],{"class":112},[106,55652,54390],{"class":116},[106,55654,54393],{"class":1955},[106,55656,117],{"class":116},[106,55658,55659],{"class":221},"'.slider-footer'",[106,55661,123],{"class":116},[106,55663,55664,55666,55669,55671,55673,55676,55678,55681],{"class":108,"line":32627},[106,55665,11214],{"class":112},[106,55667,55668],{"class":165}," lis",[106,55670,13557],{"class":112},[106,55672,54390],{"class":116},[106,55674,55675],{"class":1955},"querySelectorAll",[106,55677,117],{"class":116},[106,55679,55680],{"class":221},"'.slider-footer ul li'",[106,55682,123],{"class":116},[106,55684,55685,55687,55689,55691],{"class":108,"line":32633},[106,55686,52213],{"class":112},[106,55688,9431],{"class":116},[106,55690,162],{"class":112},[106,55692,55693],{"class":165}," 1\n",[106,55695,55696,55698,55701,55703,55705,55707,55709],{"class":108,"line":32639},[106,55697,52213],{"class":112},[106,55699,55700],{"class":116}," timer ",[106,55702,162],{"class":112},[106,55704,54438],{"class":1955},[106,55706,117],{"class":116},[106,55708,54443],{"class":112},[106,55710,54446],{"class":116},[106,55712,55713,55716,55718],{"class":108,"line":32645},[106,55714,55715],{"class":116},"      img.src ",[106,55717,162],{"class":112},[106,55719,55720],{"class":116}," arrImage[i].url\n",[106,55722,55723,55726,55728],{"class":108,"line":32651},[106,55724,55725],{"class":116},"      p.innerHTML ",[106,55727,162],{"class":112},[106,55729,55730],{"class":116}," arrImage[i].title\n",[106,55732,55733,55736,55738],{"class":108,"line":32662},[106,55734,55735],{"class":116},"      color.style.backgroundColor ",[106,55737,162],{"class":112},[106,55739,55740],{"class":116}," arrImage[i].color\n",[106,55742,55743],{"class":108,"line":32668},[106,55744,55745],{"class":175},"      \u002F\u002F let li = document.querySelector(`.slider-footer ul li:nth-child(${i + 1})`)\n",[106,55747,55748],{"class":108,"line":32688},[106,55749,55750],{"class":175},"      \u002F\u002F li.classList.add('activate')\n",[106,55752,55753],{"class":108,"line":32694},[106,55754,55755],{"class":175},"      \u002F\u002F lis[i + 1].classList.add('activate')\n",[106,55757,55758],{"class":108,"line":32705},[106,55759,55760],{"class":175},"      \u002F\u002F lis[i].classList.remove('activate')\n",[106,55762,55763,55766,55768,55770,55773,55776,55779,55781,55784],{"class":108,"line":32711},[106,55764,55765],{"class":116},"      document.",[106,55767,54393],{"class":1955},[106,55769,117],{"class":116},[106,55771,55772],{"class":221},"'.activate'",[106,55774,55775],{"class":116},")?.classList.",[106,55777,55778],{"class":1955},"toggle",[106,55780,117],{"class":116},[106,55782,55783],{"class":221},"'activate'",[106,55785,123],{"class":116},[106,55787,55788,55791,55793,55795,55797],{"class":108,"line":32717},[106,55789,55790],{"class":116},"      lis[i].classList.",[106,55792,5327],{"class":1955},[106,55794,117],{"class":116},[106,55796,55783],{"class":221},[106,55798,123],{"class":116},[106,55800,55801],{"class":108,"line":32723},[106,55802,2392],{"emptyLinePlaceholder":33},[106,55804,55805,55808,55810,55812,55814,55816,55818,55820,55823],{"class":108,"line":32729},[106,55806,55807],{"class":116},"      i ",[106,55809,162],{"class":112},[106,55811,54477],{"class":116},[106,55813,598],{"class":112},[106,55815,25112],{"class":165},[106,55817,13707],{"class":116},[106,55819,445],{"class":112},[106,55821,55822],{"class":116}," arrImage.",[106,55824,55825],{"class":165},"length\n",[106,55827,55828],{"class":108,"line":32735},[106,55829,2392],{"emptyLinePlaceholder":33},[106,55831,55832,55834,55836],{"class":108,"line":32741},[106,55833,54529],{"class":116},[106,55835,6403],{"class":165},[106,55837,123],{"class":116},[106,55839,55840,55842,55844],{"class":108,"line":32747},[106,55841,52411],{"class":116},[106,55843,51807],{"class":51294},[106,55845,51301],{"class":116},[106,55847,55848,55850,55852],{"class":108,"line":32767},[106,55849,51779],{"class":116},[106,55851,51794],{"class":51294},[106,55853,51301],{"class":116},[106,55855,55856],{"class":108,"line":32773},[106,55857,2392],{"emptyLinePlaceholder":33},[106,55859,55860,55862,55864],{"class":108,"line":32789},[106,55861,51779],{"class":116},[106,55863,50629],{"class":51294},[106,55865,51301],{"class":116},[14,55867,55868],{},[23,55869],{"alt":25,"src":55870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-104.png",[14,55872,55873],{},"?.就是短路保护,确保输出正常进行",[14,55875,55876],{},"不要忘记取余%,有时候可以用",[14,55878,55879],{},"相同部分可以封装成函数,然后调用这部分就可以!!!",[60,55881,55882],{"start":28},[63,55883,55884],{},"法2",[97,55886,55888],{"className":50627,"code":55887,"language":50629,"meta":25,"style":25},"\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",[103,55889,55890,55900,55914,55918,55926,55940,55960,55972,55980,55986,55996,56006,56010,56014,56020,56030,56034,56038,56044,56054,56066,56078,56092,56096,56100,56106,56116,56126,56136,56148,56160,56170,56174,56178,56186,56196,56208,56220,56232,56236,56240,56246,56256,56268,56280,56290,56300,56310,56322,56334,56338,56342,56350,56362,56374,56400,56412,56416,56420,56426,56436,56440,56448,56456,56460,56468,56482,56496,56516,56524,56538,56550,56558,56576,56588,56600,56612,56624,56636,56648,56660,56668,56676,56684,56692,56703,56719,56735,56751,56767,56783,56799,56815,56831,56835,56840,56858,56876,56886,56891,56896,56907,56913,56928,56937,56941,56946,56955,56960,56969,56974,56979,56984,57007,57037,57041,57049,57053,57061,57069,57073],{"__ignoreMap":25},[106,55891,55892,55894,55896,55898],{"class":108,"line":109},[106,55893,51291],{"class":116},[106,55895,51295],{"class":51294},[106,55897,51298],{"class":1955},[106,55899,51301],{"class":116},[106,55901,55902,55904,55906,55908,55910,55912],{"class":108,"line":28},[106,55903,1027],{"class":116},[106,55905,50629],{"class":51294},[106,55907,51310],{"class":1955},[106,55909,162],{"class":116},[106,55911,51315],{"class":221},[106,55913,51301],{"class":116},[106,55915,55916],{"class":108,"line":1172},[106,55917,2392],{"emptyLinePlaceholder":33},[106,55919,55920,55922,55924],{"class":108,"line":1187},[106,55921,1027],{"class":116},[106,55923,51328],{"class":51294},[106,55925,51301],{"class":116},[106,55927,55928,55930,55932,55934,55936,55938],{"class":108,"line":1193},[106,55929,52138],{"class":116},[106,55931,51338],{"class":51294},[106,55933,51341],{"class":1955},[106,55935,162],{"class":116},[106,55937,51346],{"class":221},[106,55939,51301],{"class":116},[106,55941,55942,55944,55946,55948,55950,55952,55954,55956,55958],{"class":108,"line":1207},[106,55943,52138],{"class":116},[106,55945,51338],{"class":51294},[106,55947,14913],{"class":1955},[106,55949,162],{"class":116},[106,55951,51385],{"class":221},[106,55953,51365],{"class":1955},[106,55955,162],{"class":116},[106,55957,51392],{"class":221},[106,55959,51301],{"class":116},[106,55961,55962,55964,55966,55968,55970],{"class":108,"line":1213},[106,55963,52138],{"class":116},[106,55965,51401],{"class":51294},[106,55967,51404],{"class":116},[106,55969,51401],{"class":51294},[106,55971,51301],{"class":116},[106,55973,55974,55976,55978],{"class":108,"line":1304},[106,55975,52138],{"class":116},[106,55977,5119],{"class":51294},[106,55979,51301],{"class":116},[106,55981,55982,55984],{"class":108,"line":1310},[106,55983,6396],{"class":51294},[106,55985,15565],{"class":116},[106,55987,55988,55990,55992,55994],{"class":108,"line":1322},[106,55989,54689],{"class":165},[106,55991,51431],{"class":116},[106,55993,308],{"class":165},[106,55995,1283],{"class":116},[106,55997,55998,56000,56002,56004],{"class":108,"line":1604},[106,55999,54700],{"class":165},[106,56001,51431],{"class":116},[106,56003,308],{"class":165},[106,56005,1283],{"class":116},[106,56007,56008],{"class":108,"line":1609},[106,56009,2179],{"class":116},[106,56011,56012],{"class":108,"line":1615},[106,56013,2392],{"emptyLinePlaceholder":33},[106,56015,56016,56018],{"class":108,"line":1620},[106,56017,54719],{"class":51294},[106,56019,15565],{"class":116},[106,56021,56022,56024,56026,56028],{"class":108,"line":1634},[106,56023,54726],{"class":165},[106,56025,51431],{"class":116},[106,56027,54731],{"class":165},[106,56029,1283],{"class":116},[106,56031,56032],{"class":108,"line":1639},[106,56033,2179],{"class":116},[106,56035,56036],{"class":108,"line":1645},[106,56037,2392],{"emptyLinePlaceholder":33},[106,56039,56040,56042],{"class":108,"line":1666},[106,56041,54746],{"class":1955},[106,56043,15565],{"class":116},[106,56045,56046,56048,56050,56052],{"class":108,"line":1671},[106,56047,54753],{"class":165},[106,56049,51431],{"class":116},[106,56051,54758],{"class":165},[106,56053,1283],{"class":116},[106,56055,56056,56058,56060,56062,56064],{"class":108,"line":1685},[106,56057,54765],{"class":165},[106,56059,51431],{"class":116},[106,56061,54770],{"class":165},[106,56063,51486],{"class":112},[106,56065,1283],{"class":116},[106,56067,56068,56070,56072,56074,56076],{"class":108,"line":1690},[106,56069,54779],{"class":165},[106,56071,51431],{"class":116},[106,56073,1531],{"class":165},[106,56075,51486],{"class":112},[106,56077,1283],{"class":116},[106,56079,56080,56082,56084,56086,56088,56090],{"class":108,"line":1719},[106,56081,54700],{"class":165},[106,56083,51431],{"class":116},[106,56085,428],{"class":165},[106,56087,51486],{"class":112},[106,56089,51550],{"class":165},[106,56091,1283],{"class":116},[106,56093,56094],{"class":108,"line":1724},[106,56095,2179],{"class":116},[106,56097,56098],{"class":108,"line":1741},[106,56099,2392],{"emptyLinePlaceholder":33},[106,56101,56102,56104],{"class":108,"line":1746},[106,56103,54814],{"class":1955},[106,56105,15565],{"class":116},[106,56107,56108,56110,56112,56114],{"class":108,"line":1751},[106,56109,54753],{"class":165},[106,56111,51431],{"class":116},[106,56113,54825],{"class":165},[106,56115,1283],{"class":116},[106,56117,56118,56120,56122,56124],{"class":108,"line":1756},[106,56119,54832],{"class":165},[106,56121,51431],{"class":116},[106,56123,308],{"class":165},[106,56125,1283],{"class":116},[106,56127,56128,56130,56132,56134],{"class":108,"line":1770},[106,56129,54843],{"class":165},[106,56131,51431],{"class":116},[106,56133,308],{"class":165},[106,56135,1283],{"class":116},[106,56137,56138,56140,56142,56144,56146],{"class":108,"line":1775},[106,56139,54765],{"class":165},[106,56141,51431],{"class":116},[106,56143,428],{"class":165},[106,56145,445],{"class":112},[106,56147,1283],{"class":116},[106,56149,56150,56152,56154,56156,56158],{"class":108,"line":2569},[106,56151,54779],{"class":165},[106,56153,51431],{"class":116},[106,56155,692],{"class":165},[106,56157,445],{"class":112},[106,56159,1283],{"class":116},[106,56161,56162,56164,56166,56168],{"class":108,"line":2583},[106,56163,54878],{"class":165},[106,56165,51431],{"class":116},[106,56167,54883],{"class":165},[106,56169,1283],{"class":116},[106,56171,56172],{"class":108,"line":2591},[106,56173,2179],{"class":116},[106,56175,56176],{"class":108,"line":2596},[106,56177,2392],{"emptyLinePlaceholder":33},[106,56179,56180,56182,56184],{"class":108,"line":2602},[106,56181,54814],{"class":1955},[106,56183,6818],{"class":51294},[106,56185,15565],{"class":116},[106,56187,56188,56190,56192,56194],{"class":108,"line":2608},[106,56189,54753],{"class":165},[106,56191,51431],{"class":116},[106,56193,54825],{"class":165},[106,56195,1283],{"class":116},[106,56197,56198,56200,56202,56204,56206],{"class":108,"line":2613},[106,56199,54916],{"class":165},[106,56201,51431],{"class":116},[106,56203,1018],{"class":165},[106,56205,51486],{"class":112},[106,56207,1283],{"class":116},[106,56209,56210,56212,56214,56216,56218],{"class":108,"line":7941},[106,56211,54832],{"class":165},[106,56213,51431],{"class":116},[106,56215,817],{"class":165},[106,56217,51486],{"class":112},[106,56219,1283],{"class":116},[106,56221,56222,56224,56226,56228,56230],{"class":108,"line":7965},[106,56223,54941],{"class":165},[106,56225,51431],{"class":116},[106,56227,436],{"class":165},[106,56229,51486],{"class":112},[106,56231,1283],{"class":116},[106,56233,56234],{"class":108,"line":7970},[106,56235,2179],{"class":116},[106,56237,56238],{"class":108,"line":7976},[106,56239,2392],{"emptyLinePlaceholder":33},[106,56241,56242,56244],{"class":108,"line":8003},[106,56243,54962],{"class":51294},[106,56245,15565],{"class":116},[106,56247,56248,56250,56252,56254],{"class":108,"line":8008},[106,56249,54753],{"class":165},[106,56251,51431],{"class":116},[106,56253,54825],{"class":165},[106,56255,1283],{"class":116},[106,56257,56258,56260,56262,56264,56266],{"class":108,"line":8014},[106,56259,54941],{"class":165},[106,56261,51431],{"class":116},[106,56263,898],{"class":165},[106,56265,51486],{"class":112},[106,56267,1283],{"class":116},[106,56269,56270,56272,56274,56276,56278],{"class":108,"line":8026},[106,56271,54832],{"class":165},[106,56273,51431],{"class":116},[106,56275,817],{"class":165},[106,56277,51486],{"class":112},[106,56279,1283],{"class":116},[106,56281,56282,56284,56286,56288],{"class":108,"line":8038},[106,56283,55003],{"class":165},[106,56285,51431],{"class":116},[106,56287,51471],{"class":165},[106,56289,1283],{"class":116},[106,56291,56292,56294,56296,56298],{"class":108,"line":8050},[106,56293,55014],{"class":165},[106,56295,51431],{"class":116},[106,56297,51662],{"class":165},[106,56299,1283],{"class":116},[106,56301,56302,56304,56306,56308],{"class":108,"line":9709},[106,56303,54753],{"class":165},[106,56305,51431],{"class":116},[106,56307,54825],{"class":165},[106,56309,1283],{"class":116},[106,56311,56312,56314,56316,56318,56320],{"class":108,"line":9734},[106,56313,54765],{"class":165},[106,56315,51431],{"class":116},[106,56317,3984],{"class":165},[106,56319,51486],{"class":112},[106,56321,1283],{"class":116},[106,56323,56324,56326,56328,56330,56332],{"class":108,"line":9757},[106,56325,54779],{"class":165},[106,56327,51431],{"class":116},[106,56329,817],{"class":165},[106,56331,51486],{"class":112},[106,56333,1283],{"class":116},[106,56335,56336],{"class":108,"line":9781},[106,56337,2179],{"class":116},[106,56339,56340],{"class":108,"line":9786},[106,56341,2392],{"emptyLinePlaceholder":33},[106,56343,56344,56346,56348],{"class":108,"line":9791},[106,56345,54962],{"class":51294},[106,56347,55069],{"class":51294},[106,56349,15565],{"class":116},[106,56351,56352,56354,56356,56358,56360],{"class":108,"line":9796},[106,56353,54765],{"class":165},[106,56355,51431],{"class":116},[106,56357,817],{"class":165},[106,56359,51486],{"class":112},[106,56361,1283],{"class":116},[106,56363,56364,56366,56368,56370,56372],{"class":108,"line":9805},[106,56365,54779],{"class":165},[106,56367,51431],{"class":116},[106,56369,817],{"class":165},[106,56371,51486],{"class":112},[106,56373,1283],{"class":116},[106,56375,56376,56378,56380,56382,56384,56386,56388,56390,56392,56394,56396,56398],{"class":108,"line":9810},[106,56377,54878],{"class":165},[106,56379,51431],{"class":116},[106,56381,55104],{"class":165},[106,56383,117],{"class":116},[106,56385,308],{"class":165},[106,56387,12428],{"class":116},[106,56389,308],{"class":165},[106,56391,12428],{"class":116},[106,56393,308],{"class":165},[106,56395,12428],{"class":116},[106,56397,55121],{"class":165},[106,56399,2711],{"class":116},[106,56401,56402,56404,56406,56408,56410],{"class":108,"line":9816},[106,56403,55128],{"class":165},[106,56405,51431],{"class":116},[106,56407,563],{"class":165},[106,56409,51486],{"class":112},[106,56411,1283],{"class":116},[106,56413,56414],{"class":108,"line":9837},[106,56415,2179],{"class":116},[106,56417,56418],{"class":108,"line":9843},[106,56419,2392],{"emptyLinePlaceholder":33},[106,56421,56422,56424],{"class":108,"line":9857},[106,56423,55149],{"class":1955},[106,56425,15565],{"class":116},[106,56427,56428,56430,56432,56434],{"class":108,"line":9863},[106,56429,54878],{"class":165},[106,56431,51431],{"class":116},[106,56433,55160],{"class":165},[106,56435,1283],{"class":116},[106,56437,56438],{"class":108,"line":9890},[106,56439,2179],{"class":116},[106,56441,56442,56444,56446],{"class":108,"line":9899},[106,56443,52411],{"class":116},[106,56445,5119],{"class":51294},[106,56447,51301],{"class":116},[106,56449,56450,56452,56454],{"class":108,"line":9905},[106,56451,51779],{"class":116},[106,56453,51328],{"class":51294},[106,56455,51301],{"class":116},[106,56457,56458],{"class":108,"line":9913},[106,56459,2392],{"emptyLinePlaceholder":33},[106,56461,56462,56464,56466],{"class":108,"line":9918},[106,56463,1027],{"class":116},[106,56465,51794],{"class":51294},[106,56467,51301],{"class":116},[106,56469,56470,56472,56474,56476,56478,56480],{"class":108,"line":16597},[106,56471,52138],{"class":116},[106,56473,51605],{"class":51294},[106,56475,53480],{"class":1955},[106,56477,162],{"class":116},[106,56479,53485],{"class":221},[106,56481,51301],{"class":116},[106,56483,56484,56486,56488,56490,56492,56494],{"class":108,"line":16603},[106,56485,51335],{"class":116},[106,56487,51605],{"class":51294},[106,56489,53480],{"class":1955},[106,56491,162],{"class":116},[106,56493,55221],{"class":221},[106,56495,51301],{"class":116},[106,56497,56498,56500,56502,56504,56506,56508,56510,56512,56514],{"class":108,"line":16626},[106,56499,55228],{"class":116},[106,56501,23],{"class":51294},[106,56503,55233],{"class":1955},[106,56505,162],{"class":116},[106,56507,55238],{"class":221},[106,56509,55241],{"class":1955},[106,56511,162],{"class":116},[106,56513,7645],{"class":221},[106,56515,51301],{"class":116},[106,56517,56518,56520,56522],{"class":108,"line":16632},[106,56519,51770],{"class":116},[106,56521,51605],{"class":51294},[106,56523,51301],{"class":116},[106,56525,56526,56528,56530,56532,56534,56536],{"class":108,"line":16655},[106,56527,51335],{"class":116},[106,56529,51605],{"class":51294},[106,56531,53480],{"class":1955},[106,56533,162],{"class":116},[106,56535,55268],{"class":221},[106,56537,51301],{"class":116},[106,56539,56540,56542,56544,56546,56548],{"class":108,"line":16669},[106,56541,55228],{"class":116},[106,56543,14],{"class":51294},[106,56545,55279],{"class":116},[106,56547,14],{"class":51294},[106,56549,51301],{"class":116},[106,56551,56552,56554,56556],{"class":108,"line":16689},[106,56553,55228],{"class":116},[106,56555,1124],{"class":51294},[106,56557,51301],{"class":116},[106,56559,56560,56562,56564,56566,56568,56570,56572,56574],{"class":108,"line":16695},[106,56561,55296],{"class":116},[106,56563,63],{"class":51294},[106,56565,53480],{"class":1955},[106,56567,162],{"class":116},[106,56569,55305],{"class":221},[106,56571,55308],{"class":116},[106,56573,63],{"class":51294},[106,56575,51301],{"class":116},[106,56577,56578,56580,56582,56584,56586],{"class":108,"line":16706},[106,56579,55296],{"class":116},[106,56581,63],{"class":51294},[106,56583,55308],{"class":116},[106,56585,63],{"class":51294},[106,56587,51301],{"class":116},[106,56589,56590,56592,56594,56596,56598],{"class":108,"line":16729},[106,56591,55296],{"class":116},[106,56593,63],{"class":51294},[106,56595,55308],{"class":116},[106,56597,63],{"class":51294},[106,56599,51301],{"class":116},[106,56601,56602,56604,56606,56608,56610],{"class":108,"line":16751},[106,56603,55296],{"class":116},[106,56605,63],{"class":51294},[106,56607,55308],{"class":116},[106,56609,63],{"class":51294},[106,56611,51301],{"class":116},[106,56613,56614,56616,56618,56620,56622],{"class":108,"line":16756},[106,56615,55296],{"class":116},[106,56617,63],{"class":51294},[106,56619,55308],{"class":116},[106,56621,63],{"class":51294},[106,56623,51301],{"class":116},[106,56625,56626,56628,56630,56632,56634],{"class":108,"line":16762},[106,56627,55296],{"class":116},[106,56629,63],{"class":51294},[106,56631,55308],{"class":116},[106,56633,63],{"class":51294},[106,56635,51301],{"class":116},[106,56637,56638,56640,56642,56644,56646],{"class":108,"line":16776},[106,56639,55296],{"class":116},[106,56641,63],{"class":51294},[106,56643,55308],{"class":116},[106,56645,63],{"class":51294},[106,56647,51301],{"class":116},[106,56649,56650,56652,56654,56656,56658],{"class":108,"line":16789},[106,56651,55296],{"class":116},[106,56653,63],{"class":51294},[106,56655,55308],{"class":116},[106,56657,63],{"class":51294},[106,56659,51301],{"class":116},[106,56661,56662,56664,56666],{"class":108,"line":16794},[106,56663,55401],{"class":116},[106,56665,1124],{"class":51294},[106,56667,51301],{"class":116},[106,56669,56670,56672,56674],{"class":108,"line":16808},[106,56671,51770],{"class":116},[106,56673,51605],{"class":51294},[106,56675,51301],{"class":116},[106,56677,56678,56680,56682],{"class":108,"line":16813},[106,56679,52411],{"class":116},[106,56681,51605],{"class":51294},[106,56683,51301],{"class":116},[106,56685,56686,56688,56690],{"class":108,"line":16819},[106,56687,52138],{"class":116},[106,56689,51807],{"class":51294},[106,56691,51301],{"class":116},[106,56693,56694,56696,56699,56701],{"class":108,"line":16824},[106,56695,11214],{"class":112},[106,56697,56698],{"class":165}," sliderData",[106,56700,13557],{"class":112},[106,56702,55441],{"class":116},[106,56704,56705,56707,56709,56711,56713,56715,56717],{"class":108,"line":16838},[106,56706,55446],{"class":116},[106,56708,55449],{"class":221},[106,56710,55452],{"class":116},[106,56712,55455],{"class":221},[106,56714,55458],{"class":116},[106,56716,55461],{"class":221},[106,56718,55464],{"class":116},[106,56720,56721,56723,56725,56727,56729,56731,56733],{"class":108,"line":16843},[106,56722,55446],{"class":116},[106,56724,55471],{"class":221},[106,56726,55452],{"class":116},[106,56728,55476],{"class":221},[106,56730,55458],{"class":116},[106,56732,55481],{"class":221},[106,56734,55464],{"class":116},[106,56736,56737,56739,56741,56743,56745,56747,56749],{"class":108,"line":16848},[106,56738,55446],{"class":116},[106,56740,55490],{"class":221},[106,56742,55452],{"class":116},[106,56744,55495],{"class":221},[106,56746,55458],{"class":116},[106,56748,55500],{"class":221},[106,56750,55464],{"class":116},[106,56752,56753,56755,56757,56759,56761,56763,56765],{"class":108,"line":16862},[106,56754,55446],{"class":116},[106,56756,55509],{"class":221},[106,56758,55452],{"class":116},[106,56760,55514],{"class":221},[106,56762,55458],{"class":116},[106,56764,55519],{"class":221},[106,56766,55464],{"class":116},[106,56768,56769,56771,56773,56775,56777,56779,56781],{"class":108,"line":16874},[106,56770,55446],{"class":116},[106,56772,55528],{"class":221},[106,56774,55452],{"class":116},[106,56776,55533],{"class":221},[106,56778,55458],{"class":116},[106,56780,55538],{"class":221},[106,56782,55464],{"class":116},[106,56784,56785,56787,56789,56791,56793,56795,56797],{"class":108,"line":16879},[106,56786,55446],{"class":116},[106,56788,55547],{"class":221},[106,56790,55452],{"class":116},[106,56792,55552],{"class":221},[106,56794,55458],{"class":116},[106,56796,55557],{"class":221},[106,56798,55464],{"class":116},[106,56800,56801,56803,56805,56807,56809,56811,56813],{"class":108,"line":16892},[106,56802,55446],{"class":116},[106,56804,55566],{"class":221},[106,56806,55452],{"class":116},[106,56808,55571],{"class":221},[106,56810,55458],{"class":116},[106,56812,55576],{"class":221},[106,56814,55464],{"class":116},[106,56816,56817,56819,56821,56823,56825,56827,56829],{"class":108,"line":16897},[106,56818,55446],{"class":116},[106,56820,55585],{"class":221},[106,56822,55452],{"class":116},[106,56824,55590],{"class":221},[106,56826,55458],{"class":116},[106,56828,55595],{"class":221},[106,56830,55598],{"class":116},[106,56832,56833],{"class":108,"line":16902},[106,56834,53103],{"class":116},[106,56836,56837],{"class":108,"line":16907},[106,56838,56839],{"class":175},"    \u002F\u002F 1.获取元素\n",[106,56841,56842,56844,56846,56848,56850,56852,56854,56856],{"class":108,"line":16920},[106,56843,11214],{"class":112},[106,56845,55609],{"class":165},[106,56847,13557],{"class":112},[106,56849,54390],{"class":116},[106,56851,54393],{"class":1955},[106,56853,117],{"class":116},[106,56855,55620],{"class":221},[106,56857,123],{"class":116},[106,56859,56860,56862,56864,56866,56868,56870,56872,56874],{"class":108,"line":16925},[106,56861,11214],{"class":112},[106,56863,6818],{"class":165},[106,56865,13557],{"class":112},[106,56867,54390],{"class":116},[106,56869,54393],{"class":1955},[106,56871,117],{"class":116},[106,56873,55639],{"class":221},[106,56875,123],{"class":116},[106,56877,56878,56880,56882,56884],{"class":108,"line":32627},[106,56879,52213],{"class":112},[106,56881,9431],{"class":116},[106,56883,162],{"class":112},[106,56885,47327],{"class":165},[106,56887,56888],{"class":108,"line":32633},[106,56889,56890],{"class":175},"    \u002F\u002F 2.开启定时器\n",[106,56892,56893],{"class":108,"line":32639},[106,56894,56895],{"class":175},"    \u002F\u002F console.log(sliderData[i]) 拿到对应对象了\n",[106,56897,56898,56901,56903,56905],{"class":108,"line":32645},[106,56899,56900],{"class":1955},"    setInterval",[106,56902,117],{"class":116},[106,56904,54443],{"class":112},[106,56906,54446],{"class":116},[106,56908,56909,56911],{"class":108,"line":32651},[106,56910,54451],{"class":116},[106,56912,2694],{"class":112},[106,56914,56915,56917,56919,56921,56924,56926],{"class":108,"line":32662},[106,56916,54474],{"class":112},[106,56918,54477],{"class":116},[106,56920,1702],{"class":112},[106,56922,56923],{"class":116}," sliderData.",[106,56925,51962],{"class":165},[106,56927,12435],{"class":116},[106,56929,56930,56933,56935],{"class":108,"line":32668},[106,56931,56932],{"class":116},"        i ",[106,56934,162],{"class":112},[106,56936,47327],{"class":165},[106,56938,56939],{"class":108,"line":32688},[106,56940,52392],{"class":116},[106,56942,56943],{"class":108,"line":32694},[106,56944,56945],{"class":175},"      \u002F\u002F 更换图片路径\n",[106,56947,56948,56950,56952],{"class":108,"line":32705},[106,56949,55715],{"class":116},[106,56951,162],{"class":112},[106,56953,56954],{"class":116}," sliderData[i].url\n",[106,56956,56957],{"class":108,"line":32711},[106,56958,56959],{"class":175},"      \u002F\u002F 把文字写到p里面\n",[106,56961,56962,56964,56966],{"class":108,"line":32717},[106,56963,55725],{"class":116},[106,56965,162],{"class":112},[106,56967,56968],{"class":116}," sliderData[i].title\n",[106,56970,56971],{"class":108,"line":32723},[106,56972,56973],{"class":175},"      \u002F\u002F 小圆点\n",[106,56975,56976],{"class":108,"line":32729},[106,56977,56978],{"class":175},"      \u002F\u002F 先删除以前的active\n",[106,56980,56981],{"class":108,"line":32735},[106,56982,56983],{"class":175},"      \u002F\u002F 只让当前li添加active\n",[106,56985,56986,56988,56990,56992,56995,56998,57001,57003,57005],{"class":108,"line":32741},[106,56987,55765],{"class":116},[106,56989,54393],{"class":1955},[106,56991,117],{"class":116},[106,56993,56994],{"class":221},"'.slider-footer .activate'",[106,56996,56997],{"class":116},").classList.",[106,56999,57000],{"class":1955},"remove",[106,57002,117],{"class":116},[106,57004,55783],{"class":221},[106,57006,123],{"class":116},[106,57008,57009,57011,57013,57015,57018,57020,57022,57024,57027,57029,57031,57033,57035],{"class":108,"line":32747},[106,57010,55765],{"class":116},[106,57012,54393],{"class":1955},[106,57014,117],{"class":116},[106,57016,57017],{"class":221},"`.slider-footer ul li:nth-child(${",[106,57019,558],{"class":116},[106,57021,45560],{"class":112},[106,57023,25112],{"class":165},[106,57025,57026],{"class":221},"})`",[106,57028,56997],{"class":116},[106,57030,5327],{"class":1955},[106,57032,117],{"class":116},[106,57034,55783],{"class":221},[106,57036,123],{"class":116},[106,57038,57039],{"class":108,"line":32767},[106,57040,2392],{"emptyLinePlaceholder":33},[106,57042,57043,57045,57047],{"class":108,"line":32773},[106,57044,54529],{"class":116},[106,57046,6403],{"class":165},[106,57048,123],{"class":116},[106,57050,57051],{"class":108,"line":32789},[106,57052,2392],{"emptyLinePlaceholder":33},[106,57054,57055,57057,57059],{"class":108,"line":32795},[106,57056,52411],{"class":116},[106,57058,51807],{"class":51294},[106,57060,51301],{"class":116},[106,57062,57063,57065,57067],{"class":108,"line":32809},[106,57064,51779],{"class":116},[106,57066,51794],{"class":51294},[106,57068,51301],{"class":116},[106,57070,57071],{"class":108,"line":32815},[106,57072,2392],{"emptyLinePlaceholder":33},[106,57074,57075,57077,57079],{"class":108,"line":32830},[106,57076,51779],{"class":116},[106,57078,50629],{"class":51294},[106,57080,51301],{"class":116},[77,57082,57084],{"id":57083},"_317-重要知识点","3.1.7 重要知识点",[14,57086,57087,57088],{},"浏览器在渲染文本时， ",[266,57089,57090],{},"没有空格或换行符就没有“断行点”",[14,57092,57093],{},[23,57094],{"alt":25,"src":57095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-105.png",[14,57097,57098],{},"让一些文字一直在浏览器打印输出的话，如果没有空格，就一直在浏览器一行内打印；当加上空格后，在浏览器一行内打印不开时就自动换行",[14,57100,57101],{},[23,57102],{"alt":25,"src":57103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-106.png",[14,57105,57106],{},[23,57107],{"alt":25,"src":57108},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-107.png",[48,57110,57112],{"id":57111},"_32-dom事件基础","3.2 DOM事件基础",[77,57114,57116],{"id":57115},"_321-事件监听","3.2.1 事件监听",[14,57118,57119],{},[23,57120],{"alt":25,"src":57121},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-108.png",[14,57123,57124],{},"事件监听有响应的发生",[14,57126,57127],{},[23,57128],{"alt":25,"src":57129},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-109.png",[14,57131,57132],{},"不会立即执行,跟定时器差不多,定时器是经过了间隔时间再输出;定时器是当经历事件触发之后才会执行",[14,57134,57135],{},"对于有名函数,要执行的函数名后边不要加()",[77,57137,57139],{"id":57138},"_322-随机点名案例","3.2.2 随机点名案例",[97,57141,57143],{"className":50627,"code":57142,"language":50629,"meta":25,"style":25},"\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",[103,57144,57145,57155,57169,57173,57181,57195,57215,57227,57235,57241,57251,57261,57265,57269,57276,57287,57291,57295,57301,57313,57327,57337,57349,57362,57366,57370,57377,57381,57394,57406,57418,57422,57426,57430,57437,57447,57451,57455,57464,57476,57488,57503,57507,57515,57523,57527,57535,57548,57562,57575,57595,57603,57618,57638,57658,57666,57670,57678,57683,57719,57739,57744,57763,57768,57779,57784,57795,57800,57819,57834,57839,57865,57875,57884,57889,57905,57910,57915,57920,57935,57939,57943,57948,57967,57984,57992,57997,58012,58016,58020,58028,58036,58040],{"__ignoreMap":25},[106,57146,57147,57149,57151,57153],{"class":108,"line":109},[106,57148,51291],{"class":116},[106,57150,51295],{"class":51294},[106,57152,51298],{"class":1955},[106,57154,51301],{"class":116},[106,57156,57157,57159,57161,57163,57165,57167],{"class":108,"line":28},[106,57158,1027],{"class":116},[106,57160,50629],{"class":51294},[106,57162,51310],{"class":1955},[106,57164,162],{"class":116},[106,57166,51315],{"class":221},[106,57168,51301],{"class":116},[106,57170,57171],{"class":108,"line":1172},[106,57172,2392],{"emptyLinePlaceholder":33},[106,57174,57175,57177,57179],{"class":108,"line":1187},[106,57176,1027],{"class":116},[106,57178,51328],{"class":51294},[106,57180,51301],{"class":116},[106,57182,57183,57185,57187,57189,57191,57193],{"class":108,"line":1193},[106,57184,52138],{"class":116},[106,57186,51338],{"class":51294},[106,57188,51341],{"class":1955},[106,57190,162],{"class":116},[106,57192,51346],{"class":221},[106,57194,51301],{"class":116},[106,57196,57197,57199,57201,57203,57205,57207,57209,57211,57213],{"class":108,"line":1207},[106,57198,52138],{"class":116},[106,57200,51338],{"class":51294},[106,57202,14913],{"class":1955},[106,57204,162],{"class":116},[106,57206,51385],{"class":221},[106,57208,51365],{"class":1955},[106,57210,162],{"class":116},[106,57212,51392],{"class":221},[106,57214,51301],{"class":116},[106,57216,57217,57219,57221,57223,57225],{"class":108,"line":1213},[106,57218,52138],{"class":116},[106,57220,51401],{"class":51294},[106,57222,51404],{"class":116},[106,57224,51401],{"class":51294},[106,57226,51301],{"class":116},[106,57228,57229,57231,57233],{"class":108,"line":1304},[106,57230,52138],{"class":116},[106,57232,5119],{"class":51294},[106,57234,51301],{"class":116},[106,57236,57237,57239],{"class":108,"line":1310},[106,57238,6396],{"class":51294},[106,57240,15565],{"class":116},[106,57242,57243,57245,57247,57249],{"class":108,"line":1322},[106,57244,54700],{"class":165},[106,57246,51431],{"class":116},[106,57248,308],{"class":165},[106,57250,1283],{"class":116},[106,57252,57253,57255,57257,57259],{"class":108,"line":1604},[106,57254,54689],{"class":165},[106,57256,51431],{"class":116},[106,57258,308],{"class":165},[106,57260,1283],{"class":116},[106,57262,57263],{"class":108,"line":1609},[106,57264,2179],{"class":116},[106,57266,57267],{"class":108,"line":1615},[106,57268,2392],{"emptyLinePlaceholder":33},[106,57270,57271,57274],{"class":108,"line":1620},[106,57272,57273],{"class":51294},"    h2",[106,57275,15565],{"class":116},[106,57277,57278,57281,57283,57285],{"class":108,"line":1634},[106,57279,57280],{"class":165},"      text-align",[106,57282,51431],{"class":116},[106,57284,51586],{"class":165},[106,57286,1283],{"class":116},[106,57288,57289],{"class":108,"line":1639},[106,57290,2179],{"class":116},[106,57292,57293],{"class":108,"line":1645},[106,57294,2392],{"emptyLinePlaceholder":33},[106,57296,57297,57299],{"class":108,"line":1666},[106,57298,54746],{"class":1955},[106,57300,15565],{"class":116},[106,57302,57303,57305,57307,57309,57311],{"class":108,"line":1671},[106,57304,54765],{"class":165},[106,57306,51431],{"class":116},[106,57308,1531],{"class":165},[106,57310,51486],{"class":112},[106,57312,1283],{"class":116},[106,57314,57315,57317,57319,57321,57323,57325],{"class":108,"line":1685},[106,57316,54700],{"class":165},[106,57318,51431],{"class":116},[106,57320,773],{"class":165},[106,57322,51486],{"class":112},[106,57324,51550],{"class":165},[106,57326,1283],{"class":116},[106,57328,57329,57331,57333,57335],{"class":108,"line":1690},[106,57330,55003],{"class":165},[106,57332,51431],{"class":116},[106,57334,51471],{"class":165},[106,57336,1283],{"class":116},[106,57338,57339,57341,57343,57345,57347],{"class":108,"line":1719},[106,57340,54916],{"class":165},[106,57342,51431],{"class":116},[106,57344,942],{"class":165},[106,57346,51486],{"class":112},[106,57348,1283],{"class":116},[106,57350,57351,57354,57356,57358,57360],{"class":108,"line":1724},[106,57352,57353],{"class":165},"      line-height",[106,57355,51431],{"class":116},[106,57357,518],{"class":165},[106,57359,51486],{"class":112},[106,57361,1283],{"class":116},[106,57363,57364],{"class":108,"line":1741},[106,57365,2179],{"class":116},[106,57367,57368],{"class":108,"line":1746},[106,57369,2392],{"emptyLinePlaceholder":33},[106,57371,57372,57375],{"class":108,"line":1751},[106,57373,57374],{"class":1955},"    .qs",[106,57376,15565],{"class":116},[106,57378,57379],{"class":108,"line":1756},[106,57380,2392],{"emptyLinePlaceholder":33},[106,57382,57383,57385,57387,57390,57392],{"class":108,"line":1770},[106,57384,54765],{"class":165},[106,57386,51431],{"class":116},[106,57388,57389],{"class":165},"450",[106,57391,51486],{"class":112},[106,57393,1283],{"class":116},[106,57395,57396,57398,57400,57402,57404],{"class":108,"line":1775},[106,57397,54779],{"class":165},[106,57399,51431],{"class":116},[106,57401,518],{"class":165},[106,57403,51486],{"class":112},[106,57405,1283],{"class":116},[106,57407,57408,57411,57413,57416],{"class":108,"line":2569},[106,57409,57410],{"class":165},"      color",[106,57412,51431],{"class":116},[106,57414,57415],{"class":165},"red",[106,57417,1283],{"class":116},[106,57419,57420],{"class":108,"line":2583},[106,57421,2392],{"emptyLinePlaceholder":33},[106,57423,57424],{"class":108,"line":2591},[106,57425,2179],{"class":116},[106,57427,57428],{"class":108,"line":2596},[106,57429,2392],{"emptyLinePlaceholder":33},[106,57431,57432,57435],{"class":108,"line":2602},[106,57433,57434],{"class":1955},"    .btns",[106,57436,15565],{"class":116},[106,57438,57439,57441,57443,57445],{"class":108,"line":2608},[106,57440,57280],{"class":165},[106,57442,51431],{"class":116},[106,57444,51586],{"class":165},[106,57446,1283],{"class":116},[106,57448,57449],{"class":108,"line":2613},[106,57450,2179],{"class":116},[106,57452,57453],{"class":108,"line":7941},[106,57454,2392],{"emptyLinePlaceholder":33},[106,57456,57457,57459,57462],{"class":108,"line":7965},[106,57458,57434],{"class":1955},[106,57460,57461],{"class":51294}," button",[106,57463,15565],{"class":116},[106,57465,57466,57468,57470,57472,57474],{"class":108,"line":7970},[106,57467,54765],{"class":165},[106,57469,51431],{"class":116},[106,57471,934],{"class":165},[106,57473,51486],{"class":112},[106,57475,1283],{"class":116},[106,57477,57478,57480,57482,57484,57486],{"class":108,"line":7976},[106,57479,54779],{"class":165},[106,57481,51431],{"class":116},[106,57483,390],{"class":165},[106,57485,51486],{"class":112},[106,57487,1283],{"class":116},[106,57489,57490,57492,57494,57496,57499,57501],{"class":108,"line":8003},[106,57491,54700],{"class":165},[106,57493,51431],{"class":116},[106,57495,308],{"class":165},[106,57497,57498],{"class":165}," 50",[106,57500,51486],{"class":112},[106,57502,1283],{"class":116},[106,57504,57505],{"class":108,"line":8008},[106,57506,2179],{"class":116},[106,57508,57509,57511,57513],{"class":108,"line":8014},[106,57510,52411],{"class":116},[106,57512,5119],{"class":51294},[106,57514,51301],{"class":116},[106,57516,57517,57519,57521],{"class":108,"line":8026},[106,57518,51779],{"class":116},[106,57520,51328],{"class":51294},[106,57522,51301],{"class":116},[106,57524,57525],{"class":108,"line":8038},[106,57526,2392],{"emptyLinePlaceholder":33},[106,57528,57529,57531,57533],{"class":108,"line":8050},[106,57530,1027],{"class":116},[106,57532,51794],{"class":51294},[106,57534,51301],{"class":116},[106,57536,57537,57539,57541,57544,57546],{"class":108,"line":9709},[106,57538,52138],{"class":116},[106,57540,48],{"class":51294},[106,57542,57543],{"class":116},">随机点名\u003C\u002F",[106,57545,48],{"class":51294},[106,57547,51301],{"class":116},[106,57549,57550,57552,57554,57556,57558,57560],{"class":108,"line":9734},[106,57551,52138],{"class":116},[106,57553,51605],{"class":51294},[106,57555,53480],{"class":1955},[106,57557,162],{"class":116},[106,57559,53485],{"class":221},[106,57561,51301],{"class":116},[106,57563,57564,57566,57568,57571,57573],{"class":108,"line":9757},[106,57565,51335],{"class":116},[106,57567,106],{"class":51294},[106,57569,57570],{"class":116},">名字是：\u003C\u002F",[106,57572,106],{"class":51294},[106,57574,51301],{"class":116},[106,57576,57577,57579,57581,57583,57585,57588,57591,57593],{"class":108,"line":9781},[106,57578,51335],{"class":116},[106,57580,51605],{"class":51294},[106,57582,53480],{"class":1955},[106,57584,162],{"class":116},[106,57586,57587],{"class":221},"\"qs\"",[106,57589,57590],{"class":116},">这里显示姓名\u003C\u002F",[106,57592,51605],{"class":51294},[106,57594,51301],{"class":116},[106,57596,57597,57599,57601],{"class":108,"line":9786},[106,57598,52411],{"class":116},[106,57600,51605],{"class":51294},[106,57602,51301],{"class":116},[106,57604,57605,57607,57609,57611,57613,57616],{"class":108,"line":9791},[106,57606,52138],{"class":116},[106,57608,51605],{"class":51294},[106,57610,53480],{"class":1955},[106,57612,162],{"class":116},[106,57614,57615],{"class":221},"\"btns\"",[106,57617,51301],{"class":116},[106,57619,57620,57622,57624,57626,57628,57631,57634,57636],{"class":108,"line":9796},[106,57621,51335],{"class":116},[106,57623,53881],{"class":51294},[106,57625,53480],{"class":1955},[106,57627,162],{"class":116},[106,57629,57630],{"class":221},"\"start\"",[106,57632,57633],{"class":116},">开始\u003C\u002F",[106,57635,53881],{"class":51294},[106,57637,51301],{"class":116},[106,57639,57640,57642,57644,57646,57648,57651,57654,57656],{"class":108,"line":9805},[106,57641,51335],{"class":116},[106,57643,53881],{"class":51294},[106,57645,53480],{"class":1955},[106,57647,162],{"class":116},[106,57649,57650],{"class":221},"\"end\"",[106,57652,57653],{"class":116},">结束\u003C\u002F",[106,57655,53881],{"class":51294},[106,57657,51301],{"class":116},[106,57659,57660,57662,57664],{"class":108,"line":9810},[106,57661,52411],{"class":116},[106,57663,51605],{"class":51294},[106,57665,51301],{"class":116},[106,57667,57668],{"class":108,"line":9816},[106,57669,2392],{"emptyLinePlaceholder":33},[106,57671,57672,57674,57676],{"class":108,"line":9837},[106,57673,52138],{"class":116},[106,57675,51807],{"class":51294},[106,57677,51301],{"class":116},[106,57679,57680],{"class":108,"line":9843},[106,57681,57682],{"class":175},"    \u002F\u002F 数据数组\n",[106,57684,57685,57687,57690,57692,57694,57697,57699,57702,57704,57707,57709,57712,57714,57717],{"class":108,"line":9857},[106,57686,11214],{"class":112},[106,57688,57689],{"class":165}," arr",[106,57691,13557],{"class":112},[106,57693,52220],{"class":116},[106,57695,57696],{"class":221},"'马超'",[106,57698,12428],{"class":116},[106,57700,57701],{"class":221},"'黄忠'",[106,57703,12428],{"class":116},[106,57705,57706],{"class":221},"'赵云'",[106,57708,12428],{"class":116},[106,57710,57711],{"class":221},"'关羽'",[106,57713,12428],{"class":116},[106,57715,57716],{"class":221},"'张飞'",[106,57718,33240],{"class":116},[106,57720,57721,57723,57726,57728,57730,57732,57734,57737],{"class":108,"line":9863},[106,57722,11214],{"class":112},[106,57724,57725],{"class":165}," qs",[106,57727,13557],{"class":112},[106,57729,54390],{"class":116},[106,57731,54393],{"class":1955},[106,57733,117],{"class":116},[106,57735,57736],{"class":221},"'.qs'",[106,57738,123],{"class":116},[106,57740,57741],{"class":108,"line":9890},[106,57742,57743],{"class":175},"    \u002F\u002F 1.业务1.开始按钮模块\n",[106,57745,57746,57748,57750,57752,57754,57756,57758,57761],{"class":108,"line":9899},[106,57747,11214],{"class":112},[106,57749,4176],{"class":165},[106,57751,13557],{"class":112},[106,57753,54390],{"class":116},[106,57755,54393],{"class":1955},[106,57757,117],{"class":116},[106,57759,57760],{"class":221},"'.start'",[106,57762,123],{"class":116},[106,57764,57765],{"class":108,"line":9905},[106,57766,57767],{"class":175},"    \u002F\u002F 定义全局变量, 如果在函数里边的话就是局部变量, 另一个函数无法使用\n",[106,57769,57770,57772,57775,57777],{"class":108,"line":9913},[106,57771,52213],{"class":112},[106,57773,57774],{"class":116}," timerId ",[106,57776,162],{"class":112},[106,57778,47327],{"class":165},[106,57780,57781],{"class":108,"line":9918},[106,57782,57783],{"class":175},"    \u002F\u002F 随机号要全局变量\n",[106,57785,57786,57788,57791,57793],{"class":108,"line":16597},[106,57787,52213],{"class":112},[106,57789,57790],{"class":116}," random ",[106,57792,162],{"class":112},[106,57794,47327],{"class":165},[106,57796,57797],{"class":108,"line":16603},[106,57798,57799],{"class":175},"    \u002F\u002F 1.1 添加点击事件\n",[106,57801,57802,57805,57808,57810,57813,57815,57817],{"class":108,"line":16626},[106,57803,57804],{"class":116},"    start.",[106,57806,57807],{"class":1955},"addEventListener",[106,57809,117],{"class":116},[106,57811,57812],{"class":221},"'click'",[106,57814,12428],{"class":116},[106,57816,54443],{"class":112},[106,57818,54446],{"class":116},[106,57820,57821,57824,57826,57828,57830,57832],{"class":108,"line":16632},[106,57822,57823],{"class":116},"      timerId ",[106,57825,162],{"class":112},[106,57827,54438],{"class":1955},[106,57829,117],{"class":116},[106,57831,54443],{"class":112},[106,57833,54446],{"class":116},[106,57835,57836],{"class":108,"line":16655},[106,57837,57838],{"class":175},"        \u002F\u002F 随机数\n",[106,57840,57841,57844,57846,57849,57852,57855,57857,57859,57861,57863],{"class":108,"line":16669},[106,57842,57843],{"class":116},"        random ",[106,57845,162],{"class":112},[106,57847,57848],{"class":1955}," parseInt",[106,57850,57851],{"class":116},"(Math.",[106,57853,57854],{"class":1955},"random",[106,57856,13043],{"class":116},[106,57858,572],{"class":112},[106,57860,51959],{"class":116},[106,57862,51962],{"class":165},[106,57864,123],{"class":116},[106,57866,57867,57870,57872],{"class":108,"line":16689},[106,57868,57869],{"class":116},"        qs.innerHTML ",[106,57871,162],{"class":112},[106,57873,57874],{"class":116}," arr[random]\n",[106,57876,57877,57880,57882],{"class":108,"line":16695},[106,57878,57879],{"class":116},"      }, ",[106,57881,390],{"class":165},[106,57883,123],{"class":116},[106,57885,57886],{"class":108,"line":16706},[106,57887,57888],{"class":175},"      \u002F\u002F 如果数组里面只有一个值了, 不需要抽取了, 让两个按钮禁用就可以\n",[106,57890,57891,57893,57896,57898,57901,57903],{"class":108,"line":16729},[106,57892,54474],{"class":112},[106,57894,57895],{"class":116}," (arr.",[106,57897,51962],{"class":165},[106,57899,57900],{"class":112}," ===",[106,57902,25112],{"class":165},[106,57904,12435],{"class":116},[106,57906,57907],{"class":108,"line":16751},[106,57908,57909],{"class":175},"        \u002F\u002F start.disabled = true\n",[106,57911,57912],{"class":108,"line":16756},[106,57913,57914],{"class":175},"        \u002F\u002F end.disabled = true\n",[106,57916,57917],{"class":108,"line":16762},[106,57918,57919],{"class":175},"        \u002F\u002F 可以合起来写\n",[106,57921,57922,57925,57927,57930,57932],{"class":108,"line":16776},[106,57923,57924],{"class":116},"        start.disabled ",[106,57926,162],{"class":112},[106,57928,57929],{"class":116}," end.disabled ",[106,57931,162],{"class":112},[106,57933,57934],{"class":165}," true\n",[106,57936,57937],{"class":108,"line":16789},[106,57938,52392],{"class":116},[106,57940,57941],{"class":108,"line":16794},[106,57942,33455],{"class":116},[106,57944,57945],{"class":108,"line":16808},[106,57946,57947],{"class":175},"    \u002F\u002F 1.2 关闭按钮模块\n",[106,57949,57950,57952,57954,57956,57958,57960,57962,57965],{"class":108,"line":16813},[106,57951,11214],{"class":112},[106,57953,4192],{"class":165},[106,57955,13557],{"class":112},[106,57957,54390],{"class":116},[106,57959,54393],{"class":1955},[106,57961,117],{"class":116},[106,57963,57964],{"class":221},"'.end'",[106,57966,123],{"class":116},[106,57968,57969,57972,57974,57976,57978,57980,57982],{"class":108,"line":16819},[106,57970,57971],{"class":116},"    end.",[106,57973,57807],{"class":1955},[106,57975,117],{"class":116},[106,57977,57812],{"class":221},[106,57979,12428],{"class":116},[106,57981,54443],{"class":112},[106,57983,54446],{"class":116},[106,57985,57986,57989],{"class":108,"line":16824},[106,57987,57988],{"class":1955},"      clearInterval",[106,57990,57991],{"class":116},"(timerId)\n",[106,57993,57994],{"class":108,"line":16838},[106,57995,57996],{"class":175},"      \u002F\u002F 结束了.可以删除掉当前抽取的那个数组元素\n",[106,57998,57999,58002,58005,58008,58010],{"class":108,"line":16843},[106,58000,58001],{"class":116},"      arr.",[106,58003,58004],{"class":1955},"splice",[106,58006,58007],{"class":116},"(random, ",[106,58009,334],{"class":165},[106,58011,123],{"class":116},[106,58013,58014],{"class":108,"line":16848},[106,58015,33455],{"class":116},[106,58017,58018],{"class":108,"line":16862},[106,58019,2392],{"emptyLinePlaceholder":33},[106,58021,58022,58024,58026],{"class":108,"line":16874},[106,58023,52411],{"class":116},[106,58025,51807],{"class":51294},[106,58027,51301],{"class":116},[106,58029,58030,58032,58034],{"class":108,"line":16879},[106,58031,51779],{"class":116},[106,58033,51794],{"class":51294},[106,58035,51301],{"class":116},[106,58037,58038],{"class":108,"line":16892},[106,58039,2392],{"emptyLinePlaceholder":33},[106,58041,58042,58044,58046],{"class":108,"line":16897},[106,58043,51779],{"class":116},[106,58045,50629],{"class":51294},[106,58047,51301],{"class":116},[14,58049,58050],{},"函数中声明的变量是局部作用变量,另一个函数是无法使用的,想使用的话,就将这个变量改为全局变量",[77,58052,58054],{"id":58053},"_323-垃圾回收机制","3.2.3 垃圾回收机制",[97,58056,58058],{"className":50627,"code":58057,"language":50629,"meta":25,"style":25},"\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",[103,58059,58060,58070,58084,58088,58096,58110,58130,58142,58150,58154,58162,58174,58182,58201,58218,58234,58244,58248,58256,58264,58268],{"__ignoreMap":25},[106,58061,58062,58064,58066,58068],{"class":108,"line":109},[106,58063,51291],{"class":116},[106,58065,51295],{"class":51294},[106,58067,51298],{"class":1955},[106,58069,51301],{"class":116},[106,58071,58072,58074,58076,58078,58080,58082],{"class":108,"line":28},[106,58073,1027],{"class":116},[106,58075,50629],{"class":51294},[106,58077,51310],{"class":1955},[106,58079,162],{"class":116},[106,58081,51315],{"class":221},[106,58083,51301],{"class":116},[106,58085,58086],{"class":108,"line":1172},[106,58087,2392],{"emptyLinePlaceholder":33},[106,58089,58090,58092,58094],{"class":108,"line":1187},[106,58091,1027],{"class":116},[106,58093,51328],{"class":51294},[106,58095,51301],{"class":116},[106,58097,58098,58100,58102,58104,58106,58108],{"class":108,"line":1193},[106,58099,52138],{"class":116},[106,58101,51338],{"class":51294},[106,58103,51341],{"class":1955},[106,58105,162],{"class":116},[106,58107,51346],{"class":221},[106,58109,51301],{"class":116},[106,58111,58112,58114,58116,58118,58120,58122,58124,58126,58128],{"class":108,"line":1207},[106,58113,52138],{"class":116},[106,58115,51338],{"class":51294},[106,58117,14913],{"class":1955},[106,58119,162],{"class":116},[106,58121,51385],{"class":221},[106,58123,51365],{"class":1955},[106,58125,162],{"class":116},[106,58127,51392],{"class":221},[106,58129,51301],{"class":116},[106,58131,58132,58134,58136,58138,58140],{"class":108,"line":1213},[106,58133,52138],{"class":116},[106,58135,51401],{"class":51294},[106,58137,51404],{"class":116},[106,58139,51401],{"class":51294},[106,58141,51301],{"class":116},[106,58143,58144,58146,58148],{"class":108,"line":1304},[106,58145,51779],{"class":116},[106,58147,51328],{"class":51294},[106,58149,51301],{"class":116},[106,58151,58152],{"class":108,"line":1310},[106,58153,2392],{"emptyLinePlaceholder":33},[106,58155,58156,58158,58160],{"class":108,"line":1322},[106,58157,1027],{"class":116},[106,58159,51794],{"class":51294},[106,58161,51301],{"class":116},[106,58163,58164,58166,58168,58170,58172],{"class":108,"line":1604},[106,58165,52138],{"class":116},[106,58167,53881],{"class":51294},[106,58169,53887],{"class":116},[106,58171,53881],{"class":51294},[106,58173,51301],{"class":116},[106,58175,58176,58178,58180],{"class":108,"line":1609},[106,58177,52138],{"class":116},[106,58179,51807],{"class":51294},[106,58181,51301],{"class":116},[106,58183,58184,58186,58188,58190,58192,58194,58196,58199],{"class":108,"line":1615},[106,58185,11214],{"class":112},[106,58187,54385],{"class":165},[106,58189,13557],{"class":112},[106,58191,54390],{"class":116},[106,58193,54393],{"class":1955},[106,58195,117],{"class":116},[106,58197,58198],{"class":221},"'button'",[106,58200,123],{"class":116},[106,58202,58203,58206,58208,58210,58212,58214,58216],{"class":108,"line":1620},[106,58204,58205],{"class":116},"    btn.",[106,58207,57807],{"class":1955},[106,58209,117],{"class":116},[106,58211,57812],{"class":221},[106,58213,12428],{"class":116},[106,58215,54443],{"class":112},[106,58217,54446],{"class":116},[106,58219,58220,58223,58225,58227,58230,58232],{"class":108,"line":1634},[106,58221,58222],{"class":112},"      const",[106,58224,2232],{"class":165},[106,58226,13557],{"class":112},[106,58228,58229],{"class":116}," Math.",[106,58231,57854],{"class":1955},[106,58233,1968],{"class":116},[106,58235,58236,58239,58242],{"class":108,"line":1639},[106,58237,58238],{"class":116},"      console.",[106,58240,58241],{"class":1955},"log",[106,58243,130],{"class":116},[106,58245,58246],{"class":108,"line":1645},[106,58247,33455],{"class":116},[106,58249,58250,58252,58254],{"class":108,"line":1666},[106,58251,52411],{"class":116},[106,58253,51807],{"class":51294},[106,58255,51301],{"class":116},[106,58257,58258,58260,58262],{"class":108,"line":1671},[106,58259,51779],{"class":116},[106,58261,51794],{"class":51294},[106,58263,51301],{"class":116},[106,58265,58266],{"class":108,"line":1685},[106,58267,2392],{"emptyLinePlaceholder":33},[106,58269,58270,58272,58274],{"class":108,"line":1690},[106,58271,51779],{"class":116},[106,58273,50629],{"class":51294},[106,58275,51301],{"class":116},[14,58277,58278],{},"当对按钮进行点击事件,就会执行函数,执行完之后这个变量就没用了,js有自动回收机制,相当于把这两行代码给删除了,当再次点击时,会创立一个新的变量出来,这个新变量与之前的那个是不同的,之前那个压根就没了,被回了,所以写const没事",[14,58280,58281],{},"常量不可以重新赋值",[14,58283,58284],{},"函数内部的变量和定义的常量在函数执行之后会有垃圾回收机制",[97,58286,58288],{"className":50627,"code":58287,"language":50629,"meta":25,"style":25},"\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",[103,58289,58290,58300,58314,58318,58326,58340,58360,58372,58380,58384,58392,58404,58412,58423,58441,58457,58471,58479,58483,58491,58499,58503],{"__ignoreMap":25},[106,58291,58292,58294,58296,58298],{"class":108,"line":109},[106,58293,51291],{"class":116},[106,58295,51295],{"class":51294},[106,58297,51298],{"class":1955},[106,58299,51301],{"class":116},[106,58301,58302,58304,58306,58308,58310,58312],{"class":108,"line":28},[106,58303,1027],{"class":116},[106,58305,50629],{"class":51294},[106,58307,51310],{"class":1955},[106,58309,162],{"class":116},[106,58311,51315],{"class":221},[106,58313,51301],{"class":116},[106,58315,58316],{"class":108,"line":1172},[106,58317,2392],{"emptyLinePlaceholder":33},[106,58319,58320,58322,58324],{"class":108,"line":1187},[106,58321,1027],{"class":116},[106,58323,51328],{"class":51294},[106,58325,51301],{"class":116},[106,58327,58328,58330,58332,58334,58336,58338],{"class":108,"line":1193},[106,58329,52138],{"class":116},[106,58331,51338],{"class":51294},[106,58333,51341],{"class":1955},[106,58335,162],{"class":116},[106,58337,51346],{"class":221},[106,58339,51301],{"class":116},[106,58341,58342,58344,58346,58348,58350,58352,58354,58356,58358],{"class":108,"line":1207},[106,58343,52138],{"class":116},[106,58345,51338],{"class":51294},[106,58347,14913],{"class":1955},[106,58349,162],{"class":116},[106,58351,51385],{"class":221},[106,58353,51365],{"class":1955},[106,58355,162],{"class":116},[106,58357,51392],{"class":221},[106,58359,51301],{"class":116},[106,58361,58362,58364,58366,58368,58370],{"class":108,"line":1213},[106,58363,52138],{"class":116},[106,58365,51401],{"class":51294},[106,58367,51404],{"class":116},[106,58369,51401],{"class":51294},[106,58371,51301],{"class":116},[106,58373,58374,58376,58378],{"class":108,"line":1304},[106,58375,51779],{"class":116},[106,58377,51328],{"class":51294},[106,58379,51301],{"class":116},[106,58381,58382],{"class":108,"line":1310},[106,58383,2392],{"emptyLinePlaceholder":33},[106,58385,58386,58388,58390],{"class":108,"line":1322},[106,58387,1027],{"class":116},[106,58389,51794],{"class":51294},[106,58391,51301],{"class":116},[106,58393,58394,58396,58398,58400,58402],{"class":108,"line":1604},[106,58395,52138],{"class":116},[106,58397,53881],{"class":51294},[106,58399,53887],{"class":116},[106,58401,53881],{"class":51294},[106,58403,51301],{"class":116},[106,58405,58406,58408,58410],{"class":108,"line":1609},[106,58407,52138],{"class":116},[106,58409,51807],{"class":51294},[106,58411,51301],{"class":116},[106,58413,58414,58416,58418,58420],{"class":108,"line":1615},[106,58415,11214],{"class":112},[106,58417,2232],{"class":165},[106,58419,13557],{"class":112},[106,58421,58422],{"class":165}," 10\n",[106,58424,58425,58427,58429,58431,58433,58435,58437,58439],{"class":108,"line":1620},[106,58426,11214],{"class":112},[106,58428,54385],{"class":165},[106,58430,13557],{"class":112},[106,58432,54390],{"class":116},[106,58434,54393],{"class":1955},[106,58436,117],{"class":116},[106,58438,58198],{"class":221},[106,58440,123],{"class":116},[106,58442,58443,58445,58447,58449,58451,58453,58455],{"class":108,"line":1634},[106,58444,58205],{"class":116},[106,58446,57807],{"class":1955},[106,58448,117],{"class":116},[106,58450,57812],{"class":221},[106,58452,12428],{"class":116},[106,58454,54443],{"class":112},[106,58456,54446],{"class":116},[106,58458,58459,58461,58463,58465,58467,58469],{"class":108,"line":1639},[106,58460,58222],{"class":112},[106,58462,2232],{"class":165},[106,58464,13557],{"class":112},[106,58466,58229],{"class":116},[106,58468,57854],{"class":1955},[106,58470,1968],{"class":116},[106,58472,58473,58475,58477],{"class":108,"line":1645},[106,58474,58238],{"class":116},[106,58476,58241],{"class":1955},[106,58478,130],{"class":116},[106,58480,58481],{"class":108,"line":1666},[106,58482,33455],{"class":116},[106,58484,58485,58487,58489],{"class":108,"line":1671},[106,58486,52411],{"class":116},[106,58488,51807],{"class":51294},[106,58490,51301],{"class":116},[106,58492,58493,58495,58497],{"class":108,"line":1685},[106,58494,51779],{"class":116},[106,58496,51794],{"class":51294},[106,58498,51301],{"class":116},[106,58500,58501],{"class":108,"line":1690},[106,58502,2392],{"emptyLinePlaceholder":33},[106,58504,58505,58507,58509],{"class":108,"line":1719},[106,58506,51779],{"class":116},[106,58508,50629],{"class":51294},[106,58510,51301],{"class":116},[14,58512,58513],{},"不会报错,num所述的作用域不同,一个在全局作用域,一个在局部作用域",[97,58515,58517],{"className":50627,"code":58516,"language":50629,"meta":25,"style":25},"\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",[103,58518,58519,58529,58543,58547,58555,58569,58589,58601,58609,58613,58621,58633,58641,58651,58669,58685,58698,58706,58710,58718,58726,58730],{"__ignoreMap":25},[106,58520,58521,58523,58525,58527],{"class":108,"line":109},[106,58522,51291],{"class":116},[106,58524,51295],{"class":51294},[106,58526,51298],{"class":1955},[106,58528,51301],{"class":116},[106,58530,58531,58533,58535,58537,58539,58541],{"class":108,"line":28},[106,58532,1027],{"class":116},[106,58534,50629],{"class":51294},[106,58536,51310],{"class":1955},[106,58538,162],{"class":116},[106,58540,51315],{"class":221},[106,58542,51301],{"class":116},[106,58544,58545],{"class":108,"line":1172},[106,58546,2392],{"emptyLinePlaceholder":33},[106,58548,58549,58551,58553],{"class":108,"line":1187},[106,58550,1027],{"class":116},[106,58552,51328],{"class":51294},[106,58554,51301],{"class":116},[106,58556,58557,58559,58561,58563,58565,58567],{"class":108,"line":1193},[106,58558,52138],{"class":116},[106,58560,51338],{"class":51294},[106,58562,51341],{"class":1955},[106,58564,162],{"class":116},[106,58566,51346],{"class":221},[106,58568,51301],{"class":116},[106,58570,58571,58573,58575,58577,58579,58581,58583,58585,58587],{"class":108,"line":1207},[106,58572,52138],{"class":116},[106,58574,51338],{"class":51294},[106,58576,14913],{"class":1955},[106,58578,162],{"class":116},[106,58580,51385],{"class":221},[106,58582,51365],{"class":1955},[106,58584,162],{"class":116},[106,58586,51392],{"class":221},[106,58588,51301],{"class":116},[106,58590,58591,58593,58595,58597,58599],{"class":108,"line":1213},[106,58592,52138],{"class":116},[106,58594,51401],{"class":51294},[106,58596,51404],{"class":116},[106,58598,51401],{"class":51294},[106,58600,51301],{"class":116},[106,58602,58603,58605,58607],{"class":108,"line":1304},[106,58604,51779],{"class":116},[106,58606,51328],{"class":51294},[106,58608,51301],{"class":116},[106,58610,58611],{"class":108,"line":1310},[106,58612,2392],{"emptyLinePlaceholder":33},[106,58614,58615,58617,58619],{"class":108,"line":1322},[106,58616,1027],{"class":116},[106,58618,51794],{"class":51294},[106,58620,51301],{"class":116},[106,58622,58623,58625,58627,58629,58631],{"class":108,"line":1604},[106,58624,52138],{"class":116},[106,58626,53881],{"class":51294},[106,58628,53887],{"class":116},[106,58630,53881],{"class":51294},[106,58632,51301],{"class":116},[106,58634,58635,58637,58639],{"class":108,"line":1609},[106,58636,52138],{"class":116},[106,58638,51807],{"class":51294},[106,58640,51301],{"class":116},[106,58642,58643,58645,58647,58649],{"class":108,"line":1615},[106,58644,11214],{"class":112},[106,58646,2232],{"class":165},[106,58648,13557],{"class":112},[106,58650,58422],{"class":165},[106,58652,58653,58655,58657,58659,58661,58663,58665,58667],{"class":108,"line":1620},[106,58654,11214],{"class":112},[106,58656,54385],{"class":165},[106,58658,13557],{"class":112},[106,58660,54390],{"class":116},[106,58662,54393],{"class":1955},[106,58664,117],{"class":116},[106,58666,58198],{"class":221},[106,58668,123],{"class":116},[106,58670,58671,58673,58675,58677,58679,58681,58683],{"class":108,"line":1634},[106,58672,58205],{"class":116},[106,58674,57807],{"class":1955},[106,58676,117],{"class":116},[106,58678,57812],{"class":221},[106,58680,12428],{"class":116},[106,58682,54443],{"class":112},[106,58684,54446],{"class":116},[106,58686,58687,58690,58692,58694,58696],{"class":108,"line":1639},[106,58688,58689],{"class":116},"      num ",[106,58691,162],{"class":112},[106,58693,58229],{"class":116},[106,58695,57854],{"class":1955},[106,58697,1968],{"class":116},[106,58699,58700,58702,58704],{"class":108,"line":1645},[106,58701,58238],{"class":116},[106,58703,58241],{"class":1955},[106,58705,130],{"class":116},[106,58707,58708],{"class":108,"line":1666},[106,58709,33455],{"class":116},[106,58711,58712,58714,58716],{"class":108,"line":1671},[106,58713,52411],{"class":116},[106,58715,51807],{"class":51294},[106,58717,51301],{"class":116},[106,58719,58720,58722,58724],{"class":108,"line":1685},[106,58721,51779],{"class":116},[106,58723,51794],{"class":51294},[106,58725,51301],{"class":116},[106,58727,58728],{"class":108,"line":1690},[106,58729,2392],{"emptyLinePlaceholder":33},[106,58731,58732,58734,58736],{"class":108,"line":1719},[106,58733,51779],{"class":116},[106,58735,50629],{"class":51294},[106,58737,51301],{"class":116},[14,58739,58740],{},"此时报错,对全局重新赋值,肯定不对,出错!!!",[77,58742,58744],{"id":58743},"_324-事件监听版本","3.2.4 事件监听版本",[14,58746,58747],{},[23,58748],{"alt":25,"src":58749},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-110.png",[14,58751,58752],{},"DOM L0和DOM L1都是用的:事件源.on事件=function(){}",[14,58754,58755],{},"这种方式会覆盖前边的事件监听:",[97,58757,58759],{"className":50627,"code":58758,"language":50629,"meta":25,"style":25},"\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",[103,58760,58761,58771,58785,58789,58797,58811,58831,58843,58851,58855,58863,58875,58883,58901,58915,58926,58930,58942,58952,58956,58964,58972,58976],{"__ignoreMap":25},[106,58762,58763,58765,58767,58769],{"class":108,"line":109},[106,58764,51291],{"class":116},[106,58766,51295],{"class":51294},[106,58768,51298],{"class":1955},[106,58770,51301],{"class":116},[106,58772,58773,58775,58777,58779,58781,58783],{"class":108,"line":28},[106,58774,1027],{"class":116},[106,58776,50629],{"class":51294},[106,58778,51310],{"class":1955},[106,58780,162],{"class":116},[106,58782,51315],{"class":221},[106,58784,51301],{"class":116},[106,58786,58787],{"class":108,"line":1172},[106,58788,2392],{"emptyLinePlaceholder":33},[106,58790,58791,58793,58795],{"class":108,"line":1187},[106,58792,1027],{"class":116},[106,58794,51328],{"class":51294},[106,58796,51301],{"class":116},[106,58798,58799,58801,58803,58805,58807,58809],{"class":108,"line":1193},[106,58800,52138],{"class":116},[106,58802,51338],{"class":51294},[106,58804,51341],{"class":1955},[106,58806,162],{"class":116},[106,58808,51346],{"class":221},[106,58810,51301],{"class":116},[106,58812,58813,58815,58817,58819,58821,58823,58825,58827,58829],{"class":108,"line":1207},[106,58814,52138],{"class":116},[106,58816,51338],{"class":51294},[106,58818,14913],{"class":1955},[106,58820,162],{"class":116},[106,58822,51385],{"class":221},[106,58824,51365],{"class":1955},[106,58826,162],{"class":116},[106,58828,51392],{"class":221},[106,58830,51301],{"class":116},[106,58832,58833,58835,58837,58839,58841],{"class":108,"line":1213},[106,58834,52138],{"class":116},[106,58836,51401],{"class":51294},[106,58838,51404],{"class":116},[106,58840,51401],{"class":51294},[106,58842,51301],{"class":116},[106,58844,58845,58847,58849],{"class":108,"line":1304},[106,58846,51779],{"class":116},[106,58848,51328],{"class":51294},[106,58850,51301],{"class":116},[106,58852,58853],{"class":108,"line":1310},[106,58854,2392],{"emptyLinePlaceholder":33},[106,58856,58857,58859,58861],{"class":108,"line":1322},[106,58858,1027],{"class":116},[106,58860,51794],{"class":51294},[106,58862,51301],{"class":116},[106,58864,58865,58867,58869,58871,58873],{"class":108,"line":1604},[106,58866,52138],{"class":116},[106,58868,53881],{"class":51294},[106,58870,53887],{"class":116},[106,58872,53881],{"class":51294},[106,58874,51301],{"class":116},[106,58876,58877,58879,58881],{"class":108,"line":1609},[106,58878,52138],{"class":116},[106,58880,51807],{"class":51294},[106,58882,51301],{"class":116},[106,58884,58885,58887,58889,58891,58893,58895,58897,58899],{"class":108,"line":1615},[106,58886,11214],{"class":112},[106,58888,54385],{"class":165},[106,58890,13557],{"class":112},[106,58892,54390],{"class":116},[106,58894,54393],{"class":1955},[106,58896,117],{"class":116},[106,58898,58198],{"class":221},[106,58900,123],{"class":116},[106,58902,58903,58905,58908,58910,58913],{"class":108,"line":1620},[106,58904,58205],{"class":116},[106,58906,58907],{"class":1955},"onclick",[106,58909,13557],{"class":112},[106,58911,58912],{"class":112}," function",[106,58914,54446],{"class":116},[106,58916,58917,58920,58922,58924],{"class":108,"line":1634},[106,58918,58919],{"class":1955},"      alert",[106,58921,117],{"class":116},[106,58923,589],{"class":165},[106,58925,123],{"class":116},[106,58927,58928],{"class":108,"line":1639},[106,58929,2179],{"class":116},[106,58931,58932,58934,58936,58938,58940],{"class":108,"line":1645},[106,58933,58205],{"class":116},[106,58935,58907],{"class":1955},[106,58937,13557],{"class":112},[106,58939,58912],{"class":112},[106,58941,54446],{"class":116},[106,58943,58944,58946,58948,58950],{"class":108,"line":1666},[106,58945,58919],{"class":1955},[106,58947,117],{"class":116},[106,58949,867],{"class":165},[106,58951,123],{"class":116},[106,58953,58954],{"class":108,"line":1671},[106,58955,2179],{"class":116},[106,58957,58958,58960,58962],{"class":108,"line":1685},[106,58959,52411],{"class":116},[106,58961,51807],{"class":51294},[106,58963,51301],{"class":116},[106,58965,58966,58968,58970],{"class":108,"line":1690},[106,58967,51779],{"class":116},[106,58969,51794],{"class":51294},[106,58971,51301],{"class":116},[106,58973,58974],{"class":108,"line":1719},[106,58975,2392],{"emptyLinePlaceholder":33},[106,58977,58978,58980,58982],{"class":108,"line":1724},[106,58979,51779],{"class":116},[106,58981,50629],{"class":51294},[106,58983,51301],{"class":116},[14,58985,58986],{},"只要点击就输出结果为22,前边11被覆盖了",[97,58988,58990],{"className":50627,"code":58989,"language":50629,"meta":25,"style":25},"  btn.addEventListener('click', function () {\n      alert(11)\n    })\n    btn.addEventListener('click', function () {\n      alert(22)\n    })\n",[103,58991,58992,58997,59002,59006,59011,59016],{"__ignoreMap":25},[106,58993,58994],{"class":108,"line":109},[106,58995,58996],{"class":116},"  btn.addEventListener('click', function () {\n",[106,58998,58999],{"class":108,"line":28},[106,59000,59001],{"class":116},"      alert(11)\n",[106,59003,59004],{"class":108,"line":1172},[106,59005,33455],{"class":116},[106,59007,59008],{"class":108,"line":1187},[106,59009,59010],{"class":116},"    btn.addEventListener('click', function () {\n",[106,59012,59013],{"class":108,"line":1193},[106,59014,59015],{"class":116},"      alert(22)\n",[106,59017,59018],{"class":108,"line":1207},[106,59019,33455],{"class":116},[14,59021,59022],{},"点击第一次输出11,第二次点击为22",[77,59024,59026],{"id":59025},"_325-事件类型","3.2.5 事件类型",[14,59028,59029],{},[23,59030],{"alt":25,"src":59031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-111.png",[21991,59033,59035],{"id":59034},"_3251-鼠标事件","3.2.5.1 鼠标事件",[14,59037,59038],{},"补充知识:",[14,59040,59041],{},"轮播图自动播放模块,可以使用",[14,59043,59044],{},"let timerId = setInterval(function () {",[14,59046,59047],{},"\u002F\u002F 利用js自动调用点击事件 click() 一定加小括号调用函数",[14,59049,59050],{},"用js方法模拟进行点击事件,click必须加()",[14,59052,59053],{},"next.click()",[14,59055,59056],{},"}, 1000)",[14,59058,59059],{},[23,59060],{"alt":25,"src":59061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-112.png",[97,59063,59065],{"className":53061,"code":59064,"language":53063,"meta":25,"style":25},"\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",[103,59066,59067,59071,59081,59095,59099,59107,59122,59142,59162,59175,59183,59188,59193,59197,59201,59206,59211,59216,59221,59225,59229,59234,59239,59244,59248,59252,59257,59261,59266,59271,59275,59279,59284,59289,59294,59299,59304,59308,59312,59317,59322,59327,59332,59337,59341,59345,59350,59355,59360,59365,59370,59375,59380,59385,59390,59395,59399,59403,59408,59413,59417,59421,59426,59431,59435,59440,59445,59449,59453,59458,59462,59467,59472,59476,59481,59485,59489,59494,59499,59504,59509,59514,59519,59524,59528,59532,59536,59541,59546,59551,59556,59560,59568,59576,59580,59588,59603,59617,59638,59646,59660,59673,59688,59707,59719,59731,59743,59755,59767,59779,59791,59799,59814,59838,59862,59870,59878,59886,59894,59899,59904,59909,59914,59919,59924,59929,59934,59939,59944,59948,59953,59958,59963,59968,59973,59978,59983,59988,59993,59997,60002,60007,60012,60017,60022,60027,60032,60037,60042,60047,60052,60057,60061,60065,60070,60075,60080,60084,60089,60094,60099,60104,60109,60113,60118,60122,60126,60130,60134,60138,60142,60147,60152,60157,60162,60167,60172,60177,60182,60187,60191,60195,60200,60205,60210,60215,60220,60224,60229,60234,60239,60244,60249,60254,60258,60262,60267,60271,60276,60280,60285,60290,60295,60300,60305,60310,60314,60322,60330,60334],{"__ignoreMap":25},[106,59068,59069],{"class":108,"line":109},[106,59070,2392],{"emptyLinePlaceholder":33},[106,59072,59073,59075,59077,59079],{"class":108,"line":28},[106,59074,51291],{"class":116},[106,59076,51295],{"class":112},[106,59078,51298],{"class":165},[106,59080,51301],{"class":116},[106,59082,59083,59085,59087,59089,59091,59093],{"class":108,"line":1172},[106,59084,1027],{"class":116},[106,59086,50629],{"class":51294},[106,59088,51310],{"class":1955},[106,59090,162],{"class":116},[106,59092,51315],{"class":221},[106,59094,51301],{"class":116},[106,59096,59097],{"class":108,"line":1187},[106,59098,2392],{"emptyLinePlaceholder":33},[106,59100,59101,59103,59105],{"class":108,"line":1193},[106,59102,1027],{"class":116},[106,59104,51328],{"class":51294},[106,59106,51301],{"class":116},[106,59108,59109,59111,59113,59115,59117,59119],{"class":108,"line":1207},[106,59110,52138],{"class":116},[106,59112,51338],{"class":51294},[106,59114,51341],{"class":1955},[106,59116,162],{"class":116},[106,59118,51346],{"class":221},[106,59120,59121],{"class":116}," \u002F>\n",[106,59123,59124,59126,59128,59130,59132,59134,59136,59138,59140],{"class":108,"line":1213},[106,59125,52138],{"class":116},[106,59127,51338],{"class":51294},[106,59129,51357],{"class":1955},[106,59131,162],{"class":116},[106,59133,51362],{"class":221},[106,59135,51365],{"class":1955},[106,59137,162],{"class":116},[106,59139,51370],{"class":221},[106,59141,59121],{"class":116},[106,59143,59144,59146,59148,59150,59152,59154,59156,59158,59160],{"class":108,"line":1304},[106,59145,52138],{"class":116},[106,59147,51338],{"class":51294},[106,59149,14913],{"class":1955},[106,59151,162],{"class":116},[106,59153,51385],{"class":221},[106,59155,51365],{"class":1955},[106,59157,162],{"class":116},[106,59159,51392],{"class":221},[106,59161,59121],{"class":116},[106,59163,59164,59166,59168,59171,59173],{"class":108,"line":1310},[106,59165,52138],{"class":116},[106,59167,51401],{"class":51294},[106,59169,59170],{"class":116},">轮播图点击切换\u003C\u002F",[106,59172,51401],{"class":51294},[106,59174,51301],{"class":116},[106,59176,59177,59179,59181],{"class":108,"line":1322},[106,59178,52138],{"class":116},[106,59180,5119],{"class":51294},[106,59182,51301],{"class":116},[106,59184,59185],{"class":108,"line":1604},[106,59186,59187],{"class":116},"    * {\n",[106,59189,59190],{"class":108,"line":1609},[106,59191,59192],{"class":116},"      box-sizing: border-box;\n",[106,59194,59195],{"class":108,"line":1615},[106,59196,2179],{"class":116},[106,59198,59199],{"class":108,"line":1620},[106,59200,2392],{"emptyLinePlaceholder":33},[106,59202,59203],{"class":108,"line":1634},[106,59204,59205],{"class":116},"    .slider {\n",[106,59207,59208],{"class":108,"line":1639},[106,59209,59210],{"class":116},"      width: 560px;\n",[106,59212,59213],{"class":108,"line":1645},[106,59214,59215],{"class":116},"      height: 400px;\n",[106,59217,59218],{"class":108,"line":1666},[106,59219,59220],{"class":116},"      overflow: hidden;\n",[106,59222,59223],{"class":108,"line":1671},[106,59224,2179],{"class":116},[106,59226,59227],{"class":108,"line":1685},[106,59228,2392],{"emptyLinePlaceholder":33},[106,59230,59231],{"class":108,"line":1690},[106,59232,59233],{"class":116},"    .slider-wrapper {\n",[106,59235,59236],{"class":108,"line":1719},[106,59237,59238],{"class":116},"      width: 100%;\n",[106,59240,59241],{"class":108,"line":1724},[106,59242,59243],{"class":116},"      height: 320px;\n",[106,59245,59246],{"class":108,"line":1741},[106,59247,2179],{"class":116},[106,59249,59250],{"class":108,"line":1746},[106,59251,2392],{"emptyLinePlaceholder":33},[106,59253,59254],{"class":108,"line":1751},[106,59255,59256],{"class":116},"    .slider-wrapper img {\n",[106,59258,59259],{"class":108,"line":1756},[106,59260,59238],{"class":116},[106,59262,59263],{"class":108,"line":1770},[106,59264,59265],{"class":116},"      height: 100%;\n",[106,59267,59268],{"class":108,"line":1775},[106,59269,59270],{"class":116},"      display: block;\n",[106,59272,59273],{"class":108,"line":2569},[106,59274,2179],{"class":116},[106,59276,59277],{"class":108,"line":2583},[106,59278,2392],{"emptyLinePlaceholder":33},[106,59280,59281],{"class":108,"line":2591},[106,59282,59283],{"class":116},"    .slider-footer {\n",[106,59285,59286],{"class":108,"line":2596},[106,59287,59288],{"class":116},"      height: 80px;\n",[106,59290,59291],{"class":108,"line":2602},[106,59292,59293],{"class":116},"      background-color: rgb(100, 67, 68);\n",[106,59295,59296],{"class":108,"line":2608},[106,59297,59298],{"class":116},"      padding: 12px 12px 0 12px;\n",[106,59300,59301],{"class":108,"line":2613},[106,59302,59303],{"class":116},"      position: relative;\n",[106,59305,59306],{"class":108,"line":7941},[106,59307,2179],{"class":116},[106,59309,59310],{"class":108,"line":7965},[106,59311,2392],{"emptyLinePlaceholder":33},[106,59313,59314],{"class":108,"line":7970},[106,59315,59316],{"class":116},"    .slider-footer .toggle {\n",[106,59318,59319],{"class":108,"line":7976},[106,59320,59321],{"class":116},"      position: absolute;\n",[106,59323,59324],{"class":108,"line":8003},[106,59325,59326],{"class":116},"      right: 0;\n",[106,59328,59329],{"class":108,"line":8008},[106,59330,59331],{"class":116},"      top: 12px;\n",[106,59333,59334],{"class":108,"line":8014},[106,59335,59336],{"class":116},"      display: flex;\n",[106,59338,59339],{"class":108,"line":8026},[106,59340,2179],{"class":116},[106,59342,59343],{"class":108,"line":8038},[106,59344,2392],{"emptyLinePlaceholder":33},[106,59346,59347],{"class":108,"line":8050},[106,59348,59349],{"class":116},"    .slider-footer .toggle button {\n",[106,59351,59352],{"class":108,"line":9709},[106,59353,59354],{"class":116},"      margin-right: 12px;\n",[106,59356,59357],{"class":108,"line":9734},[106,59358,59359],{"class":116},"      width: 28px;\n",[106,59361,59362],{"class":108,"line":9757},[106,59363,59364],{"class":116},"      height: 28px;\n",[106,59366,59367],{"class":108,"line":9781},[106,59368,59369],{"class":116},"      appearance: none;\n",[106,59371,59372],{"class":108,"line":9786},[106,59373,59374],{"class":116},"      border: none;\n",[106,59376,59377],{"class":108,"line":9791},[106,59378,59379],{"class":116},"      background: rgba(255, 255, 255, 0.1);\n",[106,59381,59382],{"class":108,"line":9796},[106,59383,59384],{"class":116},"      color: #fff;\n",[106,59386,59387],{"class":108,"line":9805},[106,59388,59389],{"class":116},"      border-radius: 4px;\n",[106,59391,59392],{"class":108,"line":9810},[106,59393,59394],{"class":116},"      cursor: pointer;\n",[106,59396,59397],{"class":108,"line":9816},[106,59398,2179],{"class":116},[106,59400,59401],{"class":108,"line":9837},[106,59402,2392],{"emptyLinePlaceholder":33},[106,59404,59405],{"class":108,"line":9843},[106,59406,59407],{"class":116},"    .slider-footer .toggle button:hover {\n",[106,59409,59410],{"class":108,"line":9857},[106,59411,59412],{"class":116},"      background: rgba(255, 255, 255, 0.2);\n",[106,59414,59415],{"class":108,"line":9863},[106,59416,2179],{"class":116},[106,59418,59419],{"class":108,"line":9890},[106,59420,2392],{"emptyLinePlaceholder":33},[106,59422,59423],{"class":108,"line":9899},[106,59424,59425],{"class":116},"    .slider-footer p {\n",[106,59427,59428],{"class":108,"line":9905},[106,59429,59430],{"class":116},"      margin: 0;\n",[106,59432,59433],{"class":108,"line":9913},[106,59434,59384],{"class":116},[106,59436,59437],{"class":108,"line":9918},[106,59438,59439],{"class":116},"      font-size: 18px;\n",[106,59441,59442],{"class":108,"line":16597},[106,59443,59444],{"class":116},"      margin-bottom: 10px;\n",[106,59446,59447],{"class":108,"line":16603},[106,59448,2179],{"class":116},[106,59450,59451],{"class":108,"line":16626},[106,59452,2392],{"emptyLinePlaceholder":33},[106,59454,59455],{"class":108,"line":16632},[106,59456,59457],{"class":116},"    .slider-indicator {\n",[106,59459,59460],{"class":108,"line":16655},[106,59461,59430],{"class":116},[106,59463,59464],{"class":108,"line":16669},[106,59465,59466],{"class":116},"      padding: 0;\n",[106,59468,59469],{"class":108,"line":16689},[106,59470,59471],{"class":116},"      list-style: none;\n",[106,59473,59474],{"class":108,"line":16695},[106,59475,59336],{"class":116},[106,59477,59478],{"class":108,"line":16706},[106,59479,59480],{"class":116},"      align-items: center;\n",[106,59482,59483],{"class":108,"line":16729},[106,59484,2179],{"class":116},[106,59486,59487],{"class":108,"line":16751},[106,59488,2392],{"emptyLinePlaceholder":33},[106,59490,59491],{"class":108,"line":16756},[106,59492,59493],{"class":116},"    .slider-indicator li {\n",[106,59495,59496],{"class":108,"line":16762},[106,59497,59498],{"class":116},"      width: 8px;\n",[106,59500,59501],{"class":108,"line":16776},[106,59502,59503],{"class":116},"      height: 8px;\n",[106,59505,59506],{"class":108,"line":16789},[106,59507,59508],{"class":116},"      margin: 4px;\n",[106,59510,59511],{"class":108,"line":16794},[106,59512,59513],{"class":116},"      border-radius: 50%;\n",[106,59515,59516],{"class":108,"line":16808},[106,59517,59518],{"class":116},"      background: #fff;\n",[106,59520,59521],{"class":108,"line":16813},[106,59522,59523],{"class":116},"      opacity: 0.4;\n",[106,59525,59526],{"class":108,"line":16819},[106,59527,59394],{"class":116},[106,59529,59530],{"class":108,"line":16824},[106,59531,2179],{"class":116},[106,59533,59534],{"class":108,"line":16838},[106,59535,2392],{"emptyLinePlaceholder":33},[106,59537,59538],{"class":108,"line":16843},[106,59539,59540],{"class":116},"    .slider-indicator li.active {\n",[106,59542,59543],{"class":108,"line":16848},[106,59544,59545],{"class":116},"      width: 12px;\n",[106,59547,59548],{"class":108,"line":16862},[106,59549,59550],{"class":116},"      height: 12px;\n",[106,59552,59553],{"class":108,"line":16874},[106,59554,59555],{"class":116},"      opacity: 1;\n",[106,59557,59558],{"class":108,"line":16879},[106,59559,2179],{"class":116},[106,59561,59562,59564,59566],{"class":108,"line":16892},[106,59563,52411],{"class":116},[106,59565,5119],{"class":51294},[106,59567,51301],{"class":116},[106,59569,59570,59572,59574],{"class":108,"line":16897},[106,59571,51779],{"class":116},[106,59573,51328],{"class":51294},[106,59575,51301],{"class":116},[106,59577,59578],{"class":108,"line":16902},[106,59579,2392],{"emptyLinePlaceholder":33},[106,59581,59582,59584,59586],{"class":108,"line":16907},[106,59583,1027],{"class":116},[106,59585,51794],{"class":51294},[106,59587,51301],{"class":116},[106,59589,59590,59592,59594,59596,59598,59601],{"class":108,"line":16920},[106,59591,52138],{"class":116},[106,59593,51605],{"class":51294},[106,59595,53480],{"class":1955},[106,59597,162],{"class":116},[106,59599,59600],{"class":221},"\"slider\"",[106,59602,51301],{"class":116},[106,59604,59605,59607,59609,59611,59613,59615],{"class":108,"line":16925},[106,59606,51335],{"class":116},[106,59608,51605],{"class":51294},[106,59610,53480],{"class":1955},[106,59612,162],{"class":116},[106,59614,55221],{"class":221},[106,59616,51301],{"class":116},[106,59618,59619,59621,59623,59625,59627,59630,59632,59634,59636],{"class":108,"line":32627},[106,59620,55228],{"class":116},[106,59622,23],{"class":51294},[106,59624,55233],{"class":1955},[106,59626,162],{"class":116},[106,59628,59629],{"class":221},"\"...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg\"",[106,59631,55241],{"class":1955},[106,59633,162],{"class":116},[106,59635,7645],{"class":221},[106,59637,59121],{"class":116},[106,59639,59640,59642,59644],{"class":108,"line":32633},[106,59641,51770],{"class":116},[106,59643,51605],{"class":51294},[106,59645,51301],{"class":116},[106,59647,59648,59650,59652,59654,59656,59658],{"class":108,"line":32639},[106,59649,51335],{"class":116},[106,59651,51605],{"class":51294},[106,59653,53480],{"class":1955},[106,59655,162],{"class":116},[106,59657,55268],{"class":221},[106,59659,51301],{"class":116},[106,59661,59662,59664,59666,59669,59671],{"class":108,"line":32645},[106,59663,55228],{"class":116},[106,59665,14],{"class":51294},[106,59667,59668],{"class":116},">对人类来说会不会太超前了？\u003C\u002F",[106,59670,14],{"class":51294},[106,59672,51301],{"class":116},[106,59674,59675,59677,59679,59681,59683,59686],{"class":108,"line":32651},[106,59676,55228],{"class":116},[106,59678,1124],{"class":51294},[106,59680,53480],{"class":1955},[106,59682,162],{"class":116},[106,59684,59685],{"class":221},"\"slider-indicator\"",[106,59687,51301],{"class":116},[106,59689,59690,59692,59694,59696,59698,59701,59703,59705],{"class":108,"line":32662},[106,59691,55296],{"class":116},[106,59693,63],{"class":51294},[106,59695,53480],{"class":1955},[106,59697,162],{"class":116},[106,59699,59700],{"class":221},"\"active\"",[106,59702,55308],{"class":116},[106,59704,63],{"class":51294},[106,59706,51301],{"class":116},[106,59708,59709,59711,59713,59715,59717],{"class":108,"line":32668},[106,59710,55296],{"class":116},[106,59712,63],{"class":51294},[106,59714,55308],{"class":116},[106,59716,63],{"class":51294},[106,59718,51301],{"class":116},[106,59720,59721,59723,59725,59727,59729],{"class":108,"line":32688},[106,59722,55296],{"class":116},[106,59724,63],{"class":51294},[106,59726,55308],{"class":116},[106,59728,63],{"class":51294},[106,59730,51301],{"class":116},[106,59732,59733,59735,59737,59739,59741],{"class":108,"line":32694},[106,59734,55296],{"class":116},[106,59736,63],{"class":51294},[106,59738,55308],{"class":116},[106,59740,63],{"class":51294},[106,59742,51301],{"class":116},[106,59744,59745,59747,59749,59751,59753],{"class":108,"line":32705},[106,59746,55296],{"class":116},[106,59748,63],{"class":51294},[106,59750,55308],{"class":116},[106,59752,63],{"class":51294},[106,59754,51301],{"class":116},[106,59756,59757,59759,59761,59763,59765],{"class":108,"line":32711},[106,59758,55296],{"class":116},[106,59760,63],{"class":51294},[106,59762,55308],{"class":116},[106,59764,63],{"class":51294},[106,59766,51301],{"class":116},[106,59768,59769,59771,59773,59775,59777],{"class":108,"line":32717},[106,59770,55296],{"class":116},[106,59772,63],{"class":51294},[106,59774,55308],{"class":116},[106,59776,63],{"class":51294},[106,59778,51301],{"class":116},[106,59780,59781,59783,59785,59787,59789],{"class":108,"line":32723},[106,59782,55296],{"class":116},[106,59784,63],{"class":51294},[106,59786,55308],{"class":116},[106,59788,63],{"class":51294},[106,59790,51301],{"class":116},[106,59792,59793,59795,59797],{"class":108,"line":32729},[106,59794,55401],{"class":116},[106,59796,1124],{"class":51294},[106,59798,51301],{"class":116},[106,59800,59801,59803,59805,59807,59809,59812],{"class":108,"line":32735},[106,59802,55228],{"class":116},[106,59804,51605],{"class":51294},[106,59806,53480],{"class":1955},[106,59808,162],{"class":116},[106,59810,59811],{"class":221},"\"toggle\"",[106,59813,51301],{"class":116},[106,59815,59816,59818,59820,59822,59824,59827,59829,59832,59834,59836],{"class":108,"line":32741},[106,59817,55296],{"class":116},[106,59819,53881],{"class":51294},[106,59821,53480],{"class":1955},[106,59823,162],{"class":116},[106,59825,59826],{"class":221},"\"prev\"",[106,59828,1077],{"class":116},[106,59830,59831],{"class":165},"&lt;",[106,59833,51779],{"class":116},[106,59835,53881],{"class":51294},[106,59837,51301],{"class":116},[106,59839,59840,59842,59844,59846,59848,59851,59853,59856,59858,59860],{"class":108,"line":32747},[106,59841,55296],{"class":116},[106,59843,53881],{"class":51294},[106,59845,53480],{"class":1955},[106,59847,162],{"class":116},[106,59849,59850],{"class":221},"\"next\"",[106,59852,1077],{"class":116},[106,59854,59855],{"class":165},"&gt;",[106,59857,51779],{"class":116},[106,59859,53881],{"class":51294},[106,59861,51301],{"class":116},[106,59863,59864,59866,59868],{"class":108,"line":32767},[106,59865,55401],{"class":116},[106,59867,51605],{"class":51294},[106,59869,51301],{"class":116},[106,59871,59872,59874,59876],{"class":108,"line":32773},[106,59873,51770],{"class":116},[106,59875,51605],{"class":51294},[106,59877,51301],{"class":116},[106,59879,59880,59882,59884],{"class":108,"line":32789},[106,59881,52411],{"class":116},[106,59883,51605],{"class":51294},[106,59885,51301],{"class":116},[106,59887,59888,59890,59892],{"class":108,"line":32795},[106,59889,52138],{"class":116},[106,59891,51807],{"class":51294},[106,59893,51301],{"class":116},[106,59895,59896],{"class":108,"line":32809},[106,59897,59898],{"class":116},"    \u002F\u002F 1. 初始数据\n",[106,59900,59901],{"class":108,"line":32815},[106,59902,59903],{"class":116},"    const data = [\n",[106,59905,59906],{"class":108,"line":32830},[106,59907,59908],{"class":116},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider01.jpg', title: '对人类来说会不会太超前了？', color: 'rgb(100, 67, 68)' },\n",[106,59910,59911],{"class":108,"line":32836},[106,59912,59913],{"class":116},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider02.jpg', title: '开启剑与雪的黑暗传说！', color: 'rgb(43, 35, 26)' },\n",[106,59915,59916],{"class":108,"line":32845},[106,59917,59918],{"class":116},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider03.jpg', title: '真正的jo厨出现了！', color: 'rgb(36, 31, 33)' },\n",[106,59920,59921],{"class":108,"line":32851},[106,59922,59923],{"class":116},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider04.jpg', title: '李玉刚：让世界通过B站看到东方大国文化', color: 'rgb(139, 98, 66)' },\n",[106,59925,59926],{"class":108,"line":32860},[106,59927,59928],{"class":116},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider05.jpg', title: '快来分享你的寒假日常吧~', color: 'rgb(67, 90, 92)' },\n",[106,59930,59931],{"class":108,"line":32866},[106,59932,59933],{"class":116},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider06.jpg', title: '哔哩哔哩小年YEAH', color: 'rgb(166, 131, 143)' },\n",[106,59935,59936],{"class":108,"line":32872},[106,59937,59938],{"class":116},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider07.jpg', title: '一站式解决你的电脑配置问题！！！', color: 'rgb(53, 29, 25)' },\n",[106,59940,59941],{"class":108,"line":32881},[106,59942,59943],{"class":116},"      { url: '...\u002F..\u002Fpublic\u002Fimages\u002Fslider08.jpg', title: '谁不想和小猫咪贴贴呢！', color: 'rgb(99, 72, 114)' },\n",[106,59945,59946],{"class":108,"line":32887},[106,59947,53103],{"class":116},[106,59949,59950],{"class":108,"line":32898},[106,59951,59952],{"class":116},"    \u002F\u002F 获取元素\n",[106,59954,59955],{"class":108,"line":32904},[106,59956,59957],{"class":116},"    const img = document.querySelector('.slider-wrapper img')\n",[106,59959,59960],{"class":108,"line":32923},[106,59961,59962],{"class":116},"    const p = document.querySelector('.slider-footer p')\n",[106,59964,59965],{"class":108,"line":32929},[106,59966,59967],{"class":116},"    const footer = document.querySelector('.slider-footer')\n",[106,59969,59970],{"class":108,"line":32940},[106,59971,59972],{"class":116},"    \u002F\u002F 1. 右按钮业务\n",[106,59974,59975],{"class":108,"line":32946},[106,59976,59977],{"class":116},"    \u002F\u002F 1.1 获取右侧按钮 \n",[106,59979,59980],{"class":108,"line":32966},[106,59981,59982],{"class":116},"    const next = document.querySelector('.next')\n",[106,59984,59985],{"class":108,"line":32982},[106,59986,59987],{"class":116},"    let i = 0  \u002F\u002F 信号量 控制播放图片张数\n",[106,59989,59990],{"class":108,"line":32988},[106,59991,59992],{"class":116},"    \u002F\u002F 1.2 注册点击事件\n",[106,59994,59995],{"class":108,"line":33002},[106,59996,2392],{"emptyLinePlaceholder":33},[106,59998,59999],{"class":108,"line":33008},[106,60000,60001],{"class":116},"    next.addEventListener('click', function () {\n",[106,60003,60004],{"class":108,"line":33014},[106,60005,60006],{"class":116},"      \u002F\u002F console.log(11)\n",[106,60008,60009],{"class":108,"line":33025},[106,60010,60011],{"class":116},"      i++\n",[106,60013,60014],{"class":108,"line":33031},[106,60015,60016],{"class":116},"      \u002F\u002F 1.6判断条件  如果大于8 就复原为 0\n",[106,60018,60019],{"class":108,"line":33037},[106,60020,60021],{"class":116},"      \u002F\u002F if (i >= 8) {\n",[106,60023,60024],{"class":108,"line":33047},[106,60025,60026],{"class":116},"      \u002F\u002F   i = 0\n",[106,60028,60029],{"class":108,"line":33053},[106,60030,60031],{"class":116},"      \u002F\u002F }\n",[106,60033,60034],{"class":108,"line":33064},[106,60035,60036],{"class":116},"      i = i >= data.length ? 0 : i\n",[106,60038,60039],{"class":108,"line":33070},[106,60040,60041],{"class":116},"      \u002F\u002F 1.3 得到对应的对象\n",[106,60043,60044],{"class":108,"line":33080},[106,60045,60046],{"class":116},"      \u002F\u002F console.log(data[i])\n",[106,60048,60049],{"class":108,"line":33085},[106,60050,60051],{"class":116},"      \u002F\u002F 调用函数\n",[106,60053,60054],{"class":108,"line":33091},[106,60055,60056],{"class":116},"      toggle()\n",[106,60058,60059],{"class":108,"line":33140},[106,60060,33455],{"class":116},[106,60062,60063],{"class":108,"line":33187},[106,60064,2392],{"emptyLinePlaceholder":33},[106,60066,60067],{"class":108,"line":33192},[106,60068,60069],{"class":116},"    \u002F\u002F 2. 左侧按钮业务\n",[106,60071,60072],{"class":108,"line":33198},[106,60073,60074],{"class":116},"    \u002F\u002F 2.1 获取左侧按钮 \n",[106,60076,60077],{"class":108,"line":33217},[106,60078,60079],{"class":116},"    const prev = document.querySelector('.prev')\n",[106,60081,60082],{"class":108,"line":33223},[106,60083,59992],{"class":116},[106,60085,60086],{"class":108,"line":33243},[106,60087,60088],{"class":116},"    prev.addEventListener('click', function () {\n",[106,60090,60091],{"class":108,"line":33249},[106,60092,60093],{"class":116},"      i--\n",[106,60095,60096],{"class":108,"line":33255},[106,60097,60098],{"class":116},"      \u002F\u002F 判断条件  如果小于0  则爬到最后一张图片索引号是 7\n",[106,60100,60101],{"class":108,"line":33265},[106,60102,60103],{"class":116},"      \u002F\u002F if (i \u003C 0) {\n",[106,60105,60106],{"class":108,"line":33270},[106,60107,60108],{"class":116},"      \u002F\u002F   i = 7\n",[106,60110,60111],{"class":108,"line":33276},[106,60112,60031],{"class":116},[106,60114,60115],{"class":108,"line":33292},[106,60116,60117],{"class":116},"      i = i \u003C 0 ? data.length - 1 : i\n",[106,60119,60120],{"class":108,"line":33337},[106,60121,60041],{"class":116},[106,60123,60124],{"class":108,"line":33343},[106,60125,60046],{"class":116},[106,60127,60128],{"class":108,"line":33349},[106,60129,60051],{"class":116},[106,60131,60132],{"class":108,"line":33355},[106,60133,60056],{"class":116},[106,60135,60136],{"class":108,"line":33366},[106,60137,33455],{"class":116},[106,60139,60140],{"class":108,"line":33372},[106,60141,2392],{"emptyLinePlaceholder":33},[106,60143,60144],{"class":108,"line":33378},[106,60145,60146],{"class":116},"    \u002F\u002F 声明一个渲染的函数作为复用\n",[106,60148,60149],{"class":108,"line":33384},[106,60150,60151],{"class":116},"    function toggle() {\n",[106,60153,60154],{"class":108,"line":33402},[106,60155,60156],{"class":116},"      \u002F\u002F 1.4 渲染对应的数据\n",[106,60158,60159],{"class":108,"line":33416},[106,60160,60161],{"class":116},"      img.src = data[i].url\n",[106,60163,60164],{"class":108,"line":33425},[106,60165,60166],{"class":116},"      p.innerHTML = data[i].title\n",[106,60168,60169],{"class":108,"line":33434},[106,60170,60171],{"class":116},"      footer.style.backgroundColor = data[i].color\n",[106,60173,60174],{"class":108,"line":33443},[106,60175,60176],{"class":116},"      \u002F\u002F 1.5 更换小圆点    先移除原来的类名， 当前li再添加 这个 类名\n",[106,60178,60179],{"class":108,"line":33452},[106,60180,60181],{"class":116},"      document.querySelector('.slider-indicator .active').classList.remove('active')\n",[106,60183,60184],{"class":108,"line":33458},[106,60185,60186],{"class":116},"      document.querySelector(`.slider-indicator li:nth-child(${i + 1})`).classList.add('active')\n",[106,60188,60189],{"class":108,"line":33464},[106,60190,2179],{"class":116},[106,60192,60193],{"class":108,"line":33472},[106,60194,2392],{"emptyLinePlaceholder":33},[106,60196,60197],{"class":108,"line":33477},[106,60198,60199],{"class":116},"    \u002F\u002F 3. 自动播放模块\n",[106,60201,60202],{"class":108,"line":33483},[106,60203,60204],{"class":116},"    let timerId = setInterval(function () {\n",[106,60206,60207],{"class":108,"line":33494},[106,60208,60209],{"class":116},"      \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[106,60211,60212],{"class":108,"line":33500},[106,60213,60214],{"class":116},"      next.click()\n",[106,60216,60217],{"class":108,"line":33520},[106,60218,60219],{"class":116},"    }, 1000)\n",[106,60221,60222],{"class":108,"line":33526},[106,60223,2392],{"emptyLinePlaceholder":33},[106,60225,60226],{"class":108,"line":33532},[106,60227,60228],{"class":116},"    \u002F\u002F 4. 鼠标经过大盒子，停止定时器\n",[106,60230,60231],{"class":108,"line":33538},[106,60232,60233],{"class":116},"    const slider = document.querySelector('.slider')\n",[106,60235,60236],{"class":108,"line":33555},[106,60237,60238],{"class":116},"    \u002F\u002F 注册事件\n",[106,60240,60241],{"class":108,"line":33561},[106,60242,60243],{"class":116},"    slider.addEventListener('mouseenter', function () {\n",[106,60245,60246],{"class":108,"line":33567},[106,60247,60248],{"class":116},"      \u002F\u002F 停止定时器\n",[106,60250,60251],{"class":108,"line":33573},[106,60252,60253],{"class":116},"      clearInterval(timerId)\n",[106,60255,60256],{"class":108,"line":33579},[106,60257,33455],{"class":116},[106,60259,60260],{"class":108,"line":33585},[106,60261,2392],{"emptyLinePlaceholder":33},[106,60263,60264],{"class":108,"line":33612},[106,60265,60266],{"class":116},"    \u002F\u002F 5. 鼠标离开大盒子，开启定时器\n",[106,60268,60269],{"class":108,"line":33636},[106,60270,60238],{"class":116},[106,60272,60273],{"class":108,"line":33642},[106,60274,60275],{"class":116},"    slider.addEventListener('mouseleave', function () {\n",[106,60277,60278],{"class":108,"line":33648},[106,60279,60248],{"class":116},[106,60281,60282],{"class":108,"line":33654},[106,60283,60284],{"class":116},"      if (timerId) clearInterval(timerId)\n",[106,60286,60287],{"class":108,"line":33665},[106,60288,60289],{"class":116},"      \u002F\u002F 开启定时器\n",[106,60291,60292],{"class":108,"line":33676},[106,60293,60294],{"class":116},"      timerId = setInterval(function () {\n",[106,60296,60297],{"class":108,"line":33682},[106,60298,60299],{"class":116},"        \u002F\u002F 利用js自动调用点击事件  click()  一定加小括号调用函数\n",[106,60301,60302],{"class":108,"line":33699},[106,60303,60304],{"class":116},"        next.click()\n",[106,60306,60307],{"class":108,"line":33722},[106,60308,60309],{"class":116},"      }, 1000)\n",[106,60311,60312],{"class":108,"line":33745},[106,60313,33455],{"class":116},[106,60315,60316,60318,60320],{"class":108,"line":33751},[106,60317,52411],{"class":116},[106,60319,51807],{"class":51294},[106,60321,51301],{"class":116},[106,60323,60324,60326,60328],{"class":108,"line":33756},[106,60325,51779],{"class":116},[106,60327,51794],{"class":51294},[106,60329,51301],{"class":116},[106,60331,60332],{"class":108,"line":33765},[106,60333,2392],{"emptyLinePlaceholder":33},[106,60335,60336,60338,60340],{"class":108,"line":33775},[106,60337,51779],{"class":116},[106,60339,50629],{"class":51294},[106,60341,51301],{"class":116},[21991,60343,60345],{"id":60344},"_3252-焦点事件","3.2.5.2 焦点事件",[14,60347,60348],{},"小米搜索框案例：",[97,60350,60352],{"className":50627,"code":60351,"language":50629,"meta":25,"style":25},"\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",[103,60353,60354,60364,60378,60382,60390,60404,60424,60444,60456,60464,60470,60480,60490,60502,60506,60510,60517,60521,60532,60536,60540,60547,60558,60571,60585,60589,60593,60602,60614,60626,60640,60653,60666,60684,60695,60699,60703,60712,60729,60733,60737,60744,60754,60764,60775,60788,60800,60816,60827,60839,60843,60847,60855,60866,60883,60895,60907,60918,60922,60926,60937,60948,60952,60960,60964,60972,60976,60984,60999,61022,61037,61068,61095,61122,61149,61176,61203,61230,61239,61247,61255,61260,61280,61300,61305,61310,61328,61333,61343,61348,61362,61367,61372,61389,61398,61410,61414,61422,61430,61434],{"__ignoreMap":25},[106,60355,60356,60358,60360,60362],{"class":108,"line":109},[106,60357,51291],{"class":116},[106,60359,51295],{"class":51294},[106,60361,51298],{"class":1955},[106,60363,51301],{"class":116},[106,60365,60366,60368,60370,60372,60374,60376],{"class":108,"line":28},[106,60367,1027],{"class":116},[106,60369,50629],{"class":51294},[106,60371,51310],{"class":1955},[106,60373,162],{"class":116},[106,60375,51315],{"class":221},[106,60377,51301],{"class":116},[106,60379,60380],{"class":108,"line":1172},[106,60381,2392],{"emptyLinePlaceholder":33},[106,60383,60384,60386,60388],{"class":108,"line":1187},[106,60385,1027],{"class":116},[106,60387,51328],{"class":51294},[106,60389,51301],{"class":116},[106,60391,60392,60394,60396,60398,60400,60402],{"class":108,"line":1193},[106,60393,51335],{"class":116},[106,60395,51338],{"class":51294},[106,60397,51341],{"class":1955},[106,60399,162],{"class":116},[106,60401,51346],{"class":221},[106,60403,51301],{"class":116},[106,60405,60406,60408,60410,60412,60414,60416,60418,60420,60422],{"class":108,"line":1207},[106,60407,51335],{"class":116},[106,60409,51338],{"class":51294},[106,60411,51357],{"class":1955},[106,60413,162],{"class":116},[106,60415,51362],{"class":221},[106,60417,51365],{"class":1955},[106,60419,162],{"class":116},[106,60421,51370],{"class":221},[106,60423,51301],{"class":116},[106,60425,60426,60428,60430,60432,60434,60436,60438,60440,60442],{"class":108,"line":1213},[106,60427,51335],{"class":116},[106,60429,51338],{"class":51294},[106,60431,14913],{"class":1955},[106,60433,162],{"class":116},[106,60435,51385],{"class":221},[106,60437,51365],{"class":1955},[106,60439,162],{"class":116},[106,60441,51392],{"class":221},[106,60443,51301],{"class":116},[106,60445,60446,60448,60450,60452,60454],{"class":108,"line":1304},[106,60447,51335],{"class":116},[106,60449,51401],{"class":51294},[106,60451,51404],{"class":116},[106,60453,51401],{"class":51294},[106,60455,51301],{"class":116},[106,60457,60458,60460,60462],{"class":108,"line":1310},[106,60459,51335],{"class":116},[106,60461,5119],{"class":51294},[106,60463,51301],{"class":116},[106,60465,60466,60468],{"class":108,"line":1322},[106,60467,51421],{"class":51294},[106,60469,15565],{"class":116},[106,60471,60472,60474,60476,60478],{"class":108,"line":1604},[106,60473,51428],{"class":165},[106,60475,51431],{"class":116},[106,60477,308],{"class":165},[106,60479,1283],{"class":116},[106,60481,60482,60484,60486,60488],{"class":108,"line":1609},[106,60483,51440],{"class":165},[106,60485,51431],{"class":116},[106,60487,308],{"class":165},[106,60489,1283],{"class":116},[106,60491,60492,60495,60497,60500],{"class":108,"line":1615},[106,60493,60494],{"class":165},"            box-sizing",[106,60496,51431],{"class":116},[106,60498,60499],{"class":165},"border-box",[106,60501,1283],{"class":116},[106,60503,60504],{"class":108,"line":1620},[106,60505,2521],{"class":116},[106,60507,60508],{"class":108,"line":1634},[106,60509,2392],{"emptyLinePlaceholder":33},[106,60511,60512,60515],{"class":108,"line":1639},[106,60513,60514],{"class":51294},"        ul",[106,60516,15565],{"class":116},[106,60518,60519],{"class":108,"line":1645},[106,60520,2392],{"emptyLinePlaceholder":33},[106,60522,60523,60526,60528,60530],{"class":108,"line":1666},[106,60524,60525],{"class":165},"            list-style",[106,60527,51431],{"class":116},[106,60529,54731],{"class":165},[106,60531,1283],{"class":116},[106,60533,60534],{"class":108,"line":1671},[106,60535,2521],{"class":116},[106,60537,60538],{"class":108,"line":1685},[106,60539,2392],{"emptyLinePlaceholder":33},[106,60541,60542,60545],{"class":108,"line":1690},[106,60543,60544],{"class":1955},"        .mi",[106,60546,15565],{"class":116},[106,60548,60549,60552,60554,60556],{"class":108,"line":1719},[106,60550,60551],{"class":165},"            position",[106,60553,51431],{"class":116},[106,60555,54758],{"class":165},[106,60557,1283],{"class":116},[106,60559,60560,60562,60564,60567,60569],{"class":108,"line":1724},[106,60561,51478],{"class":165},[106,60563,51431],{"class":116},[106,60565,60566],{"class":165},"223",[106,60568,51486],{"class":112},[106,60570,1283],{"class":116},[106,60572,60573,60575,60577,60579,60581,60583],{"class":108,"line":1741},[106,60574,51428],{"class":165},[106,60576,51431],{"class":116},[106,60578,428],{"class":165},[106,60580,51486],{"class":112},[106,60582,51550],{"class":165},[106,60584,1283],{"class":116},[106,60586,60587],{"class":108,"line":1746},[106,60588,2521],{"class":116},[106,60590,60591],{"class":108,"line":1751},[106,60592,2392],{"emptyLinePlaceholder":33},[106,60594,60595,60597,60600],{"class":108,"line":1756},[106,60596,60544],{"class":1955},[106,60598,60599],{"class":51294}," input",[106,60601,15565],{"class":116},[106,60603,60604,60606,60608,60610,60612],{"class":108,"line":1770},[106,60605,51478],{"class":165},[106,60607,51431],{"class":116},[106,60609,60566],{"class":165},[106,60611,51486],{"class":112},[106,60613,1283],{"class":116},[106,60615,60616,60618,60620,60622,60624],{"class":108,"line":1775},[106,60617,51493],{"class":165},[106,60619,51431],{"class":116},[106,60621,724],{"class":165},[106,60623,51486],{"class":112},[106,60625,1283],{"class":116},[106,60627,60628,60630,60632,60634,60636,60638],{"class":108,"line":2569},[106,60629,51440],{"class":165},[106,60631,51431],{"class":116},[106,60633,308],{"class":165},[106,60635,2030],{"class":165},[106,60637,51486],{"class":112},[106,60639,1283],{"class":116},[106,60641,60642,60645,60647,60649,60651],{"class":108,"line":2583},[106,60643,60644],{"class":165},"            font-size",[106,60646,51431],{"class":116},[106,60648,666],{"class":165},[106,60650,51486],{"class":112},[106,60652,1283],{"class":116},[106,60654,60655,60658,60660,60662,60664],{"class":108,"line":2591},[106,60656,60657],{"class":165},"            line-height",[106,60659,51431],{"class":116},[106,60661,724],{"class":165},[106,60663,51486],{"class":112},[106,60665,1283],{"class":116},[106,60667,60668,60671,60673,60675,60677,60679,60682],{"class":108,"line":2596},[106,60669,60670],{"class":165},"            border",[106,60672,51431],{"class":116},[106,60674,334],{"class":165},[106,60676,51486],{"class":112},[106,60678,51515],{"class":165},[106,60680,60681],{"class":165}," #e0e0e0",[106,60683,1283],{"class":116},[106,60685,60686,60689,60691,60693],{"class":108,"line":2602},[106,60687,60688],{"class":165},"            outline",[106,60690,51431],{"class":116},[106,60692,54731],{"class":165},[106,60694,1283],{"class":116},[106,60696,60697],{"class":108,"line":2608},[106,60698,2521],{"class":116},[106,60700,60701],{"class":108,"line":2613},[106,60702,2392],{"emptyLinePlaceholder":33},[106,60704,60705,60707,60710],{"class":108,"line":7941},[106,60706,60544],{"class":1955},[106,60708,60709],{"class":1955}," .search",[106,60711,15565],{"class":116},[106,60713,60714,60716,60718,60720,60722,60724,60727],{"class":108,"line":7965},[106,60715,60670],{"class":165},[106,60717,51431],{"class":116},[106,60719,334],{"class":165},[106,60721,51486],{"class":112},[106,60723,51515],{"class":165},[106,60725,60726],{"class":165}," #ff6700",[106,60728,1283],{"class":116},[106,60730,60731],{"class":108,"line":7970},[106,60732,2521],{"class":116},[106,60734,60735],{"class":108,"line":7976},[106,60736,2392],{"emptyLinePlaceholder":33},[106,60738,60739,60742],{"class":108,"line":8003},[106,60740,60741],{"class":1955},"        .result-list",[106,60743,15565],{"class":116},[106,60745,60746,60748,60750,60752],{"class":108,"line":8008},[106,60747,51466],{"class":165},[106,60749,51431],{"class":116},[106,60751,54731],{"class":165},[106,60753,1283],{"class":116},[106,60755,60756,60758,60760,60762],{"class":108,"line":8014},[106,60757,60551],{"class":165},[106,60759,51431],{"class":116},[106,60761,54825],{"class":165},[106,60763,1283],{"class":116},[106,60765,60766,60769,60771,60773],{"class":108,"line":8026},[106,60767,60768],{"class":165},"            left",[106,60770,51431],{"class":116},[106,60772,308],{"class":165},[106,60774,1283],{"class":116},[106,60776,60777,60780,60782,60784,60786],{"class":108,"line":8038},[106,60778,60779],{"class":165},"            top",[106,60781,51431],{"class":116},[106,60783,724],{"class":165},[106,60785,51486],{"class":112},[106,60787,1283],{"class":116},[106,60789,60790,60792,60794,60796,60798],{"class":108,"line":8050},[106,60791,51478],{"class":165},[106,60793,51431],{"class":116},[106,60795,60566],{"class":165},[106,60797,51486],{"class":112},[106,60799,1283],{"class":116},[106,60801,60802,60804,60806,60808,60810,60812,60814],{"class":108,"line":9709},[106,60803,60670],{"class":165},[106,60805,51431],{"class":116},[106,60807,334],{"class":165},[106,60809,51486],{"class":112},[106,60811,51515],{"class":165},[106,60813,60726],{"class":165},[106,60815,1283],{"class":116},[106,60817,60818,60821,60823,60825],{"class":108,"line":9734},[106,60819,60820],{"class":165},"            border-top",[106,60822,51431],{"class":116},[106,60824,308],{"class":165},[106,60826,1283],{"class":116},[106,60828,60829,60832,60834,60837],{"class":108,"line":9757},[106,60830,60831],{"class":165},"            background",[106,60833,51431],{"class":116},[106,60835,60836],{"class":165},"#fff",[106,60838,1283],{"class":116},[106,60840,60841],{"class":108,"line":9781},[106,60842,2521],{"class":116},[106,60844,60845],{"class":108,"line":9786},[106,60846,2392],{"emptyLinePlaceholder":33},[106,60848,60849,60851,60853],{"class":108,"line":9791},[106,60850,60741],{"class":1955},[106,60852,1391],{"class":51294},[106,60854,15565],{"class":116},[106,60856,60857,60859,60861,60864],{"class":108,"line":9796},[106,60858,51466],{"class":165},[106,60860,51431],{"class":116},[106,60862,60863],{"class":165},"block",[106,60865,1283],{"class":116},[106,60867,60868,60870,60872,60874,60876,60879,60881],{"class":108,"line":9805},[106,60869,51440],{"class":165},[106,60871,51431],{"class":116},[106,60873,461],{"class":165},[106,60875,51486],{"class":112},[106,60877,60878],{"class":165}," 15",[106,60880,51486],{"class":112},[106,60882,1283],{"class":116},[106,60884,60885,60887,60889,60891,60893],{"class":108,"line":9810},[106,60886,60644],{"class":165},[106,60888,51431],{"class":116},[106,60890,615],{"class":165},[106,60892,51486],{"class":112},[106,60894,1283],{"class":116},[106,60896,60897,60900,60902,60905],{"class":108,"line":9816},[106,60898,60899],{"class":165},"            color",[106,60901,51431],{"class":116},[106,60903,60904],{"class":165},"#424242",[106,60906,1283],{"class":116},[106,60908,60909,60912,60914,60916],{"class":108,"line":9837},[106,60910,60911],{"class":165},"            text-decoration",[106,60913,51431],{"class":116},[106,60915,54731],{"class":165},[106,60917,1283],{"class":116},[106,60919,60920],{"class":108,"line":9843},[106,60921,2521],{"class":116},[106,60923,60924],{"class":108,"line":9857},[106,60925,2392],{"emptyLinePlaceholder":33},[106,60927,60928,60930,60932,60935],{"class":108,"line":9863},[106,60929,60741],{"class":1955},[106,60931,1391],{"class":51294},[106,60933,60934],{"class":1955},":hover",[106,60936,15565],{"class":116},[106,60938,60939,60941,60943,60946],{"class":108,"line":9890},[106,60940,51634],{"class":165},[106,60942,51431],{"class":116},[106,60944,60945],{"class":165},"#eee",[106,60947,1283],{"class":116},[106,60949,60950],{"class":108,"line":9899},[106,60951,2521],{"class":116},[106,60953,60954,60956,60958],{"class":108,"line":9905},[106,60955,51770],{"class":116},[106,60957,5119],{"class":51294},[106,60959,51301],{"class":116},[106,60961,60962],{"class":108,"line":9913},[106,60963,2392],{"emptyLinePlaceholder":33},[106,60965,60966,60968,60970],{"class":108,"line":9918},[106,60967,51779],{"class":116},[106,60969,51328],{"class":51294},[106,60971,51301],{"class":116},[106,60973,60974],{"class":108,"line":16597},[106,60975,2392],{"emptyLinePlaceholder":33},[106,60977,60978,60980,60982],{"class":108,"line":16603},[106,60979,1027],{"class":116},[106,60981,51794],{"class":51294},[106,60983,51301],{"class":116},[106,60985,60986,60988,60990,60992,60994,60997],{"class":108,"line":16626},[106,60987,51335],{"class":116},[106,60989,51605],{"class":51294},[106,60991,53480],{"class":1955},[106,60993,162],{"class":116},[106,60995,60996],{"class":221},"\"mi\"",[106,60998,51301],{"class":116},[106,61000,61001,61003,61005,61007,61009,61012,61015,61017,61020],{"class":108,"line":16632},[106,61002,55296],{"class":116},[106,61004,53815],{"class":51294},[106,61006,53818],{"class":1955},[106,61008,162],{"class":116},[106,61010,61011],{"class":221},"\"search\"",[106,61013,61014],{"class":1955}," placeholder",[106,61016,162],{"class":116},[106,61018,61019],{"class":221},"\"小米笔记本\"",[106,61021,51301],{"class":116},[106,61023,61024,61026,61028,61030,61032,61035],{"class":108,"line":16655},[106,61025,55296],{"class":116},[106,61027,1124],{"class":51294},[106,61029,53480],{"class":1955},[106,61031,162],{"class":116},[106,61033,61034],{"class":221},"\"result-list\"",[106,61036,51301],{"class":116},[106,61038,61039,61042,61044,61047,61049,61052,61054,61057,61060,61062,61064,61066],{"class":108,"line":16669},[106,61040,61041],{"class":116},"            \u003C",[106,61043,63],{"class":51294},[106,61045,61046],{"class":116},">\u003C",[106,61048,355],{"class":51294},[106,61050,61051],{"class":1955}," href",[106,61053,162],{"class":116},[106,61055,61056],{"class":221},"\"#\"",[106,61058,61059],{"class":116},">全部商品\u003C\u002F",[106,61061,355],{"class":51294},[106,61063,55308],{"class":116},[106,61065,63],{"class":51294},[106,61067,51301],{"class":116},[106,61069,61070,61072,61074,61076,61078,61080,61082,61084,61087,61089,61091,61093],{"class":108,"line":16689},[106,61071,61041],{"class":116},[106,61073,63],{"class":51294},[106,61075,61046],{"class":116},[106,61077,355],{"class":51294},[106,61079,61051],{"class":1955},[106,61081,162],{"class":116},[106,61083,61056],{"class":221},[106,61085,61086],{"class":116},">小米11\u003C\u002F",[106,61088,355],{"class":51294},[106,61090,55308],{"class":116},[106,61092,63],{"class":51294},[106,61094,51301],{"class":116},[106,61096,61097,61099,61101,61103,61105,61107,61109,61111,61114,61116,61118,61120],{"class":108,"line":16695},[106,61098,61041],{"class":116},[106,61100,63],{"class":51294},[106,61102,61046],{"class":116},[106,61104,355],{"class":51294},[106,61106,61051],{"class":1955},[106,61108,162],{"class":116},[106,61110,61056],{"class":221},[106,61112,61113],{"class":116},">小米10S\u003C\u002F",[106,61115,355],{"class":51294},[106,61117,55308],{"class":116},[106,61119,63],{"class":51294},[106,61121,51301],{"class":116},[106,61123,61124,61126,61128,61130,61132,61134,61136,61138,61141,61143,61145,61147],{"class":108,"line":16706},[106,61125,61041],{"class":116},[106,61127,63],{"class":51294},[106,61129,61046],{"class":116},[106,61131,355],{"class":51294},[106,61133,61051],{"class":1955},[106,61135,162],{"class":116},[106,61137,61056],{"class":221},[106,61139,61140],{"class":116},">小米笔记本\u003C\u002F",[106,61142,355],{"class":51294},[106,61144,55308],{"class":116},[106,61146,63],{"class":51294},[106,61148,51301],{"class":116},[106,61150,61151,61153,61155,61157,61159,61161,61163,61165,61168,61170,61172,61174],{"class":108,"line":16729},[106,61152,61041],{"class":116},[106,61154,63],{"class":51294},[106,61156,61046],{"class":116},[106,61158,355],{"class":51294},[106,61160,61051],{"class":1955},[106,61162,162],{"class":116},[106,61164,61056],{"class":221},[106,61166,61167],{"class":116},">小米手机\u003C\u002F",[106,61169,355],{"class":51294},[106,61171,55308],{"class":116},[106,61173,63],{"class":51294},[106,61175,51301],{"class":116},[106,61177,61178,61180,61182,61184,61186,61188,61190,61192,61195,61197,61199,61201],{"class":108,"line":16751},[106,61179,61041],{"class":116},[106,61181,63],{"class":51294},[106,61183,61046],{"class":116},[106,61185,355],{"class":51294},[106,61187,61051],{"class":1955},[106,61189,162],{"class":116},[106,61191,61056],{"class":221},[106,61193,61194],{"class":116},">黑鲨4\u003C\u002F",[106,61196,355],{"class":51294},[106,61198,55308],{"class":116},[106,61200,63],{"class":51294},[106,61202,51301],{"class":116},[106,61204,61205,61207,61209,61211,61213,61215,61217,61219,61222,61224,61226,61228],{"class":108,"line":16756},[106,61206,61041],{"class":116},[106,61208,63],{"class":51294},[106,61210,61046],{"class":116},[106,61212,355],{"class":51294},[106,61214,61051],{"class":1955},[106,61216,162],{"class":116},[106,61218,61056],{"class":221},[106,61220,61221],{"class":116},">空调\u003C\u002F",[106,61223,355],{"class":51294},[106,61225,55308],{"class":116},[106,61227,63],{"class":51294},[106,61229,51301],{"class":116},[106,61231,61232,61235,61237],{"class":108,"line":16762},[106,61233,61234],{"class":116},"        \u003C\u002F",[106,61236,1124],{"class":51294},[106,61238,51301],{"class":116},[106,61240,61241,61243,61245],{"class":108,"line":16776},[106,61242,51770],{"class":116},[106,61244,51605],{"class":51294},[106,61246,51301],{"class":116},[106,61248,61249,61251,61253],{"class":108,"line":16789},[106,61250,51335],{"class":116},[106,61252,51807],{"class":51294},[106,61254,51301],{"class":116},[106,61256,61257],{"class":108,"line":16794},[106,61258,61259],{"class":175},"        \u002F\u002F 1. 获取元素\n",[106,61261,61262,61265,61267,61269,61271,61273,61275,61278],{"class":108,"line":16808},[106,61263,61264],{"class":112},"        const",[106,61266,60599],{"class":165},[106,61268,13557],{"class":112},[106,61270,54390],{"class":116},[106,61272,54393],{"class":1955},[106,61274,117],{"class":116},[106,61276,61277],{"class":221},"'[type=search]'",[106,61279,123],{"class":116},[106,61281,61282,61284,61287,61289,61291,61293,61295,61298],{"class":108,"line":16813},[106,61283,61264],{"class":112},[106,61285,61286],{"class":165}," ul",[106,61288,13557],{"class":112},[106,61290,54390],{"class":116},[106,61292,54393],{"class":1955},[106,61294,117],{"class":116},[106,61296,61297],{"class":221},"'.result-list'",[106,61299,123],{"class":116},[106,61301,61302],{"class":108,"line":16819},[106,61303,61304],{"class":175},"        \u002F\u002F console.log(input)\n",[106,61306,61307],{"class":108,"line":16824},[106,61308,61309],{"class":175},"        \u002F\u002F 2. 监听事件 获得焦点\n",[106,61311,61312,61315,61317,61319,61322,61324,61326],{"class":108,"line":16838},[106,61313,61314],{"class":116},"        input.",[106,61316,57807],{"class":1955},[106,61318,117],{"class":116},[106,61320,61321],{"class":221},"'focus'",[106,61323,12428],{"class":116},[106,61325,54443],{"class":112},[106,61327,54446],{"class":116},[106,61329,61330],{"class":108,"line":16843},[106,61331,61332],{"class":175},"            \u002F\u002F ul显示\n",[106,61334,61335,61338,61340],{"class":108,"line":16848},[106,61336,61337],{"class":116},"            ul.style.display ",[106,61339,162],{"class":112},[106,61341,61342],{"class":221}," 'block'\n",[106,61344,61345],{"class":108,"line":16862},[106,61346,61347],{"class":175},"            \u002F\u002F 添加一个带有颜色边框的类名\n",[106,61349,61350,61353,61355,61357,61360],{"class":108,"line":16874},[106,61351,61352],{"class":116},"            input.classList.",[106,61354,5327],{"class":1955},[106,61356,117],{"class":116},[106,61358,61359],{"class":221},"'search'",[106,61361,123],{"class":116},[106,61363,61364],{"class":108,"line":16879},[106,61365,61366],{"class":116},"        })\n",[106,61368,61369],{"class":108,"line":16892},[106,61370,61371],{"class":175},"        \u002F\u002F 3. 监听事件 失去焦点\n",[106,61373,61374,61376,61378,61380,61383,61385,61387],{"class":108,"line":16897},[106,61375,61314],{"class":116},[106,61377,57807],{"class":1955},[106,61379,117],{"class":116},[106,61381,61382],{"class":221},"'blur'",[106,61384,12428],{"class":116},[106,61386,54443],{"class":112},[106,61388,54446],{"class":116},[106,61390,61391,61393,61395],{"class":108,"line":16902},[106,61392,61337],{"class":116},[106,61394,162],{"class":112},[106,61396,61397],{"class":221}," 'none'\n",[106,61399,61400,61402,61404,61406,61408],{"class":108,"line":16907},[106,61401,61352],{"class":116},[106,61403,57000],{"class":1955},[106,61405,117],{"class":116},[106,61407,61359],{"class":221},[106,61409,123],{"class":116},[106,61411,61412],{"class":108,"line":16920},[106,61413,61366],{"class":116},[106,61415,61416,61418,61420],{"class":108,"line":16925},[106,61417,51770],{"class":116},[106,61419,51807],{"class":51294},[106,61421,51301],{"class":116},[106,61423,61424,61426,61428],{"class":108,"line":32627},[106,61425,51779],{"class":116},[106,61427,51794],{"class":51294},[106,61429,51301],{"class":116},[106,61431,61432],{"class":108,"line":32633},[106,61433,2392],{"emptyLinePlaceholder":33},[106,61435,61436,61438,61440],{"class":108,"line":32639},[106,61437,51779],{"class":116},[106,61439,50629],{"class":51294},[106,61441,51301],{"class":116},[21991,61443,61445],{"id":61444},"_3253-键盘事件","3.2.5.3 键盘事件",[14,61447,61448],{},"评论字数统计案例",[14,61450,61451],{},"补充知识点：点击表单元素，获得焦点时盒子变大，可以使用focus伪类选择器",[14,61453,61454],{},"牢记focus伪类选择器",[51338,61456],{"charSet":61457},"UTF-8",[51338,61459],{"name":61460,"content":61461},"viewport","width=device-width, initial-scale=1.0",[51401,61463,61464],{},"Document",[5119,61466,61467],{},"\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",[53815,61469],{"type":5180},[1124,61471,61472,61475],{},[63,61473,61474],{},"键盘事件代码，显示可以使用opacity样式属性，通过透明度的形式实现盒子或者文字显示和隐藏，相比于disabled来说显示效果更好一些，一定要学会使用",[63,61476,61477],{},"一定要用好placeholder，它是表单元素的属性值，表示提示文本",[97,61479,61481],{"className":50627,"code":61480,"language":50629,"meta":25,"style":25},"\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",[103,61482,61483,61493,61507,61511,61519,61533,61553,61573,61586,61594,61601,61614,61628,61638,61648,61652,61656,61663,61675,61687,61699,61711,61740,61753,61757,61761,61770,61781,61793,61804,61815,61827,61838,61850,61866,61878,61882,61886,61897,61908,61918,61930,61934,61938,61946,61957,61967,61978,61990,62003,62015,62027,62031,62035,62044,62056,62067,62080,62091,62105,62109,62113,62120,62132,62144,62154,62158,62162,62171,62183,62193,62197,62201,62212,62222,62241,62254,62258,62262,62272,62282,62286,62290,62301,62312,62324,62336,62340,62344,62355,62366,62380,62384,62388,62399,62409,62421,62425,62433,62441,62445,62453,62468,62487,62527,62540,62548,62562,62582,62590,62605,62628,62646,62661,62681,62701,62721,62729,62737,62745,62753,62773,62793,62798,62815,62824,62828,62833,62849,62857,62861,62866,62883,62888,62913,62917,62921,62926,62931,62939,62947,62951],{"__ignoreMap":25},[106,61484,61485,61487,61489,61491],{"class":108,"line":109},[106,61486,51291],{"class":116},[106,61488,51295],{"class":51294},[106,61490,51298],{"class":1955},[106,61492,51301],{"class":116},[106,61494,61495,61497,61499,61501,61503,61505],{"class":108,"line":28},[106,61496,1027],{"class":116},[106,61498,50629],{"class":51294},[106,61500,51310],{"class":1955},[106,61502,162],{"class":116},[106,61504,51315],{"class":221},[106,61506,51301],{"class":116},[106,61508,61509],{"class":108,"line":1172},[106,61510,2392],{"emptyLinePlaceholder":33},[106,61512,61513,61515,61517],{"class":108,"line":1187},[106,61514,1027],{"class":116},[106,61516,51328],{"class":51294},[106,61518,51301],{"class":116},[106,61520,61521,61523,61525,61527,61529,61531],{"class":108,"line":1193},[106,61522,52138],{"class":116},[106,61524,51338],{"class":51294},[106,61526,51341],{"class":1955},[106,61528,162],{"class":116},[106,61530,51346],{"class":221},[106,61532,51301],{"class":116},[106,61534,61535,61537,61539,61541,61543,61545,61547,61549,61551],{"class":108,"line":1207},[106,61536,52138],{"class":116},[106,61538,51338],{"class":51294},[106,61540,51357],{"class":1955},[106,61542,162],{"class":116},[106,61544,51362],{"class":221},[106,61546,51365],{"class":1955},[106,61548,162],{"class":116},[106,61550,51370],{"class":221},[106,61552,51301],{"class":116},[106,61554,61555,61557,61559,61561,61563,61565,61567,61569,61571],{"class":108,"line":1213},[106,61556,52138],{"class":116},[106,61558,51338],{"class":51294},[106,61560,14913],{"class":1955},[106,61562,162],{"class":116},[106,61564,51385],{"class":221},[106,61566,51365],{"class":1955},[106,61568,162],{"class":116},[106,61570,51392],{"class":221},[106,61572,51301],{"class":116},[106,61574,61575,61577,61579,61582,61584],{"class":108,"line":1304},[106,61576,52138],{"class":116},[106,61578,51401],{"class":51294},[106,61580,61581],{"class":116},">评论回车发布\u003C\u002F",[106,61583,51401],{"class":51294},[106,61585,51301],{"class":116},[106,61587,61588,61590,61592],{"class":108,"line":1310},[106,61589,52138],{"class":116},[106,61591,5119],{"class":51294},[106,61593,51301],{"class":116},[106,61595,61596,61599],{"class":108,"line":1322},[106,61597,61598],{"class":1955},"    .wrapper",[106,61600,15565],{"class":116},[106,61602,61603,61606,61608,61610,61612],{"class":108,"line":1604},[106,61604,61605],{"class":165},"      min-width",[106,61607,51431],{"class":116},[106,61609,3979],{"class":165},[106,61611,51486],{"class":112},[106,61613,1283],{"class":116},[106,61615,61616,61619,61621,61624,61626],{"class":108,"line":1609},[106,61617,61618],{"class":165},"      max-width",[106,61620,51431],{"class":116},[106,61622,61623],{"class":165},"800",[106,61625,51486],{"class":112},[106,61627,1283],{"class":116},[106,61629,61630,61632,61634,61636],{"class":108,"line":1615},[106,61631,55003],{"class":165},[106,61633,51431],{"class":116},[106,61635,51471],{"class":165},[106,61637,1283],{"class":116},[106,61639,61640,61642,61644,61646],{"class":108,"line":1620},[106,61641,55014],{"class":165},[106,61643,51431],{"class":116},[106,61645,51574],{"class":165},[106,61647,1283],{"class":116},[106,61649,61650],{"class":108,"line":1634},[106,61651,2179],{"class":116},[106,61653,61654],{"class":108,"line":1639},[106,61655,2392],{"emptyLinePlaceholder":33},[106,61657,61658,61661],{"class":108,"line":1645},[106,61659,61660],{"class":1955},"    .avatar",[106,61662,15565],{"class":116},[106,61664,61665,61667,61669,61671,61673],{"class":108,"line":1666},[106,61666,54765],{"class":165},[106,61668,51431],{"class":116},[106,61670,724],{"class":165},[106,61672,51486],{"class":112},[106,61674,1283],{"class":116},[106,61676,61677,61679,61681,61683,61685],{"class":108,"line":1671},[106,61678,54779],{"class":165},[106,61680,51431],{"class":116},[106,61682,724],{"class":165},[106,61684,51486],{"class":112},[106,61686,1283],{"class":116},[106,61688,61689,61691,61693,61695,61697],{"class":108,"line":1685},[106,61690,55128],{"class":165},[106,61692,51431],{"class":116},[106,61694,773],{"class":165},[106,61696,445],{"class":112},[106,61698,1283],{"class":116},[106,61700,61701,61704,61706,61709],{"class":108,"line":1690},[106,61702,61703],{"class":165},"      overflow",[106,61705,51431],{"class":116},[106,61707,61708],{"class":165},"hidden",[106,61710,1283],{"class":116},[106,61712,61713,61716,61718,61721,61723,61726,61728,61731,61733,61735,61738],{"class":108,"line":1719},[106,61714,61715],{"class":165},"      background",[106,61717,51431],{"class":116},[106,61719,61720],{"class":165},"url",[106,61722,117],{"class":116},[106,61724,61725],{"class":5209},"...\u002F..\u002Fpublic\u002Fimages\u002Favatar.jpg",[106,61727,13707],{"class":116},[106,61729,61730],{"class":165},"no-repeat",[106,61732,17137],{"class":165},[106,61734,24972],{"class":116},[106,61736,61737],{"class":165},"cover",[106,61739,1283],{"class":116},[106,61741,61742,61745,61747,61749,61751],{"class":108,"line":1724},[106,61743,61744],{"class":165},"      margin-right",[106,61746,51431],{"class":116},[106,61748,817],{"class":165},[106,61750,51486],{"class":112},[106,61752,1283],{"class":116},[106,61754,61755],{"class":108,"line":1741},[106,61756,2179],{"class":116},[106,61758,61759],{"class":108,"line":1746},[106,61760,2392],{"emptyLinePlaceholder":33},[106,61762,61763,61765,61768],{"class":108,"line":1751},[106,61764,61598],{"class":1955},[106,61766,61767],{"class":51294}," textarea",[106,61769,15565],{"class":116},[106,61771,61772,61775,61777,61779],{"class":108,"line":1756},[106,61773,61774],{"class":165},"      outline",[106,61776,51431],{"class":116},[106,61778,54731],{"class":165},[106,61780,1283],{"class":116},[106,61782,61783,61786,61788,61791],{"class":108,"line":1770},[106,61784,61785],{"class":165},"      border-color",[106,61787,51431],{"class":116},[106,61789,61790],{"class":165},"transparent",[106,61792,1283],{"class":116},[106,61794,61795,61798,61800,61802],{"class":108,"line":1775},[106,61796,61797],{"class":165},"      resize",[106,61799,51431],{"class":116},[106,61801,54731],{"class":165},[106,61803,1283],{"class":116},[106,61805,61806,61808,61810,61813],{"class":108,"line":2569},[106,61807,61715],{"class":165},[106,61809,51431],{"class":116},[106,61811,61812],{"class":165},"#f5f5f5",[106,61814,1283],{"class":116},[106,61816,61817,61819,61821,61823,61825],{"class":108,"line":2583},[106,61818,55128],{"class":165},[106,61820,51431],{"class":116},[106,61822,410],{"class":165},[106,61824,51486],{"class":112},[106,61826,1283],{"class":116},[106,61828,61829,61832,61834,61836],{"class":108,"line":2591},[106,61830,61831],{"class":165},"      flex",[106,61833,51431],{"class":116},[106,61835,334],{"class":165},[106,61837,1283],{"class":116},[106,61839,61840,61842,61844,61846,61848],{"class":108,"line":2596},[106,61841,54689],{"class":165},[106,61843,51431],{"class":116},[106,61845,563],{"class":165},[106,61847,51486],{"class":112},[106,61849,1283],{"class":116},[106,61851,61852,61855,61857,61859,61862,61864],{"class":108,"line":2602},[106,61853,61854],{"class":165},"      transition",[106,61856,51431],{"class":116},[106,61858,28115],{"class":165},[106,61860,61861],{"class":165}," 0.5",[106,61863,812],{"class":112},[106,61865,1283],{"class":116},[106,61867,61868,61870,61872,61874,61876],{"class":108,"line":2608},[106,61869,54779],{"class":165},[106,61871,51431],{"class":116},[106,61873,1068],{"class":165},[106,61875,51486],{"class":112},[106,61877,1283],{"class":116},[106,61879,61880],{"class":108,"line":2613},[106,61881,2179],{"class":116},[106,61883,61884],{"class":108,"line":7941},[106,61885,2392],{"emptyLinePlaceholder":33},[106,61887,61888,61890,61892,61895],{"class":108,"line":7965},[106,61889,61598],{"class":1955},[106,61891,61767],{"class":51294},[106,61893,61894],{"class":1955},":focus",[106,61896,15565],{"class":116},[106,61898,61899,61901,61903,61906],{"class":108,"line":7970},[106,61900,61785],{"class":165},[106,61902,51431],{"class":116},[106,61904,61905],{"class":165},"#e4e4e4",[106,61907,1283],{"class":116},[106,61909,61910,61912,61914,61916],{"class":108,"line":7976},[106,61911,61715],{"class":165},[106,61913,51431],{"class":116},[106,61915,60836],{"class":165},[106,61917,1283],{"class":116},[106,61919,61920,61922,61924,61926,61928],{"class":108,"line":8003},[106,61921,54779],{"class":165},[106,61923,51431],{"class":116},[106,61925,773],{"class":165},[106,61927,51486],{"class":112},[106,61929,1283],{"class":116},[106,61931,61932],{"class":108,"line":8008},[106,61933,2179],{"class":116},[106,61935,61936],{"class":108,"line":8014},[106,61937,2392],{"emptyLinePlaceholder":33},[106,61939,61940,61942,61944],{"class":108,"line":8026},[106,61941,61598],{"class":1955},[106,61943,57461],{"class":51294},[106,61945,15565],{"class":116},[106,61947,61948,61950,61952,61955],{"class":108,"line":8038},[106,61949,61715],{"class":165},[106,61951,51431],{"class":116},[106,61953,61954],{"class":165},"#00aeec",[106,61956,1283],{"class":116},[106,61958,61959,61961,61963,61965],{"class":108,"line":8050},[106,61960,57410],{"class":165},[106,61962,51431],{"class":116},[106,61964,60836],{"class":165},[106,61966,1283],{"class":116},[106,61968,61969,61972,61974,61976],{"class":108,"line":9709},[106,61970,61971],{"class":165},"      border",[106,61973,51431],{"class":116},[106,61975,54731],{"class":165},[106,61977,1283],{"class":116},[106,61979,61980,61982,61984,61986,61988],{"class":108,"line":9734},[106,61981,55128],{"class":165},[106,61983,51431],{"class":116},[106,61985,410],{"class":165},[106,61987,51486],{"class":112},[106,61989,1283],{"class":116},[106,61991,61992,61995,61997,61999,62001],{"class":108,"line":9757},[106,61993,61994],{"class":165},"      margin-left",[106,61996,51431],{"class":116},[106,61998,563],{"class":165},[106,62000,51486],{"class":112},[106,62002,1283],{"class":116},[106,62004,62005,62007,62009,62011,62013],{"class":108,"line":9781},[106,62006,54765],{"class":165},[106,62008,51431],{"class":116},[106,62010,473],{"class":165},[106,62012,51486],{"class":112},[106,62014,1283],{"class":116},[106,62016,62017,62020,62022,62025],{"class":108,"line":9786},[106,62018,62019],{"class":165},"      cursor",[106,62021,51431],{"class":116},[106,62023,62024],{"class":165},"pointer",[106,62026,1283],{"class":116},[106,62028,62029],{"class":108,"line":9791},[106,62030,2179],{"class":116},[106,62032,62033],{"class":108,"line":9796},[106,62034,2392],{"emptyLinePlaceholder":33},[106,62036,62037,62039,62042],{"class":108,"line":9805},[106,62038,61598],{"class":1955},[106,62040,62041],{"class":1955}," .total",[106,62043,15565],{"class":116},[106,62045,62046,62048,62050,62052,62054],{"class":108,"line":9810},[106,62047,61744],{"class":165},[106,62049,51431],{"class":116},[106,62051,729],{"class":165},[106,62053,51486],{"class":112},[106,62055,1283],{"class":116},[106,62057,62058,62060,62062,62065],{"class":108,"line":9816},[106,62059,57410],{"class":165},[106,62061,51431],{"class":116},[106,62063,62064],{"class":165},"#999",[106,62066,1283],{"class":116},[106,62068,62069,62072,62074,62076,62078],{"class":108,"line":9837},[106,62070,62071],{"class":165},"      margin-top",[106,62073,51431],{"class":116},[106,62075,436],{"class":165},[106,62077,51486],{"class":112},[106,62079,1283],{"class":116},[106,62081,62082,62085,62087,62089],{"class":108,"line":9843},[106,62083,62084],{"class":165},"      opacity",[106,62086,51431],{"class":116},[106,62088,308],{"class":165},[106,62090,1283],{"class":116},[106,62092,62093,62095,62097,62099,62101,62103],{"class":108,"line":9857},[106,62094,61854],{"class":165},[106,62096,51431],{"class":116},[106,62098,28115],{"class":165},[106,62100,61861],{"class":165},[106,62102,812],{"class":112},[106,62104,1283],{"class":116},[106,62106,62107],{"class":108,"line":9863},[106,62108,2179],{"class":116},[106,62110,62111],{"class":108,"line":9890},[106,62112,2392],{"emptyLinePlaceholder":33},[106,62114,62115,62118],{"class":108,"line":9899},[106,62116,62117],{"class":1955},"    .list",[106,62119,15565],{"class":116},[106,62121,62122,62124,62126,62128,62130],{"class":108,"line":9905},[106,62123,61605],{"class":165},[106,62125,51431],{"class":116},[106,62127,3979],{"class":165},[106,62129,51486],{"class":112},[106,62131,1283],{"class":116},[106,62133,62134,62136,62138,62140,62142],{"class":108,"line":9913},[106,62135,61618],{"class":165},[106,62137,51431],{"class":116},[106,62139,61623],{"class":165},[106,62141,51486],{"class":112},[106,62143,1283],{"class":116},[106,62145,62146,62148,62150,62152],{"class":108,"line":9918},[106,62147,55003],{"class":165},[106,62149,51431],{"class":116},[106,62151,51471],{"class":165},[106,62153,1283],{"class":116},[106,62155,62156],{"class":108,"line":16597},[106,62157,2179],{"class":116},[106,62159,62160],{"class":108,"line":16603},[106,62161,2392],{"emptyLinePlaceholder":33},[106,62163,62164,62166,62169],{"class":108,"line":16626},[106,62165,62117],{"class":1955},[106,62167,62168],{"class":1955}," .item",[106,62170,15565],{"class":116},[106,62172,62173,62175,62177,62179,62181],{"class":108,"line":16632},[106,62174,54765],{"class":165},[106,62176,51431],{"class":116},[106,62178,428],{"class":165},[106,62180,445],{"class":112},[106,62182,1283],{"class":116},[106,62184,62185,62187,62189,62191],{"class":108,"line":16655},[106,62186,55003],{"class":165},[106,62188,51431],{"class":116},[106,62190,51471],{"class":165},[106,62192,1283],{"class":116},[106,62194,62195],{"class":108,"line":16669},[106,62196,2179],{"class":116},[106,62198,62199],{"class":108,"line":16689},[106,62200,2392],{"emptyLinePlaceholder":33},[106,62202,62203,62205,62207,62210],{"class":108,"line":16695},[106,62204,62117],{"class":1955},[106,62206,62168],{"class":1955},[106,62208,62209],{"class":1955}," .info",[106,62211,15565],{"class":116},[106,62213,62214,62216,62218,62220],{"class":108,"line":16706},[106,62215,61831],{"class":165},[106,62217,51431],{"class":116},[106,62219,334],{"class":165},[106,62221,1283],{"class":116},[106,62223,62224,62227,62229,62231,62233,62236,62239],{"class":108,"line":16729},[106,62225,62226],{"class":165},"      border-bottom",[106,62228,51431],{"class":116},[106,62230,334],{"class":165},[106,62232,51486],{"class":112},[106,62234,62235],{"class":165}," dashed",[106,62237,62238],{"class":165}," #e4e4e4",[106,62240,1283],{"class":116},[106,62242,62243,62246,62248,62250,62252],{"class":108,"line":16751},[106,62244,62245],{"class":165},"      padding-bottom",[106,62247,51431],{"class":116},[106,62249,563],{"class":165},[106,62251,51486],{"class":112},[106,62253,1283],{"class":116},[106,62255,62256],{"class":108,"line":16756},[106,62257,2179],{"class":116},[106,62259,62260],{"class":108,"line":16762},[106,62261,2392],{"emptyLinePlaceholder":33},[106,62263,62264,62266,62268,62270],{"class":108,"line":16776},[106,62265,62117],{"class":1955},[106,62267,62168],{"class":1955},[106,62269,6818],{"class":51294},[106,62271,15565],{"class":116},[106,62273,62274,62276,62278,62280],{"class":108,"line":16789},[106,62275,54700],{"class":165},[106,62277,51431],{"class":116},[106,62279,308],{"class":165},[106,62281,1283],{"class":116},[106,62283,62284],{"class":108,"line":16794},[106,62285,2179],{"class":116},[106,62287,62288],{"class":108,"line":16808},[106,62289,2392],{"emptyLinePlaceholder":33},[106,62291,62292,62294,62296,62299],{"class":108,"line":16813},[106,62293,62117],{"class":1955},[106,62295,62168],{"class":1955},[106,62297,62298],{"class":1955}," .name",[106,62300,15565],{"class":116},[106,62302,62303,62305,62307,62310],{"class":108,"line":16819},[106,62304,57410],{"class":165},[106,62306,51431],{"class":116},[106,62308,62309],{"class":165},"#FB7299",[106,62311,1283],{"class":116},[106,62313,62314,62316,62318,62320,62322],{"class":108,"line":16824},[106,62315,54916],{"class":165},[106,62317,51431],{"class":116},[106,62319,666],{"class":165},[106,62321,51486],{"class":112},[106,62323,1283],{"class":116},[106,62325,62326,62329,62331,62334],{"class":108,"line":16838},[106,62327,62328],{"class":165},"      font-weight",[106,62330,51431],{"class":116},[106,62332,62333],{"class":165},"bold",[106,62335,1283],{"class":116},[106,62337,62338],{"class":108,"line":16843},[106,62339,2179],{"class":116},[106,62341,62342],{"class":108,"line":16848},[106,62343,2392],{"emptyLinePlaceholder":33},[106,62345,62346,62348,62350,62353],{"class":108,"line":16862},[106,62347,62117],{"class":1955},[106,62349,62168],{"class":1955},[106,62351,62352],{"class":1955}," .text",[106,62354,15565],{"class":116},[106,62356,62357,62359,62361,62364],{"class":108,"line":16874},[106,62358,57410],{"class":165},[106,62360,51431],{"class":116},[106,62362,62363],{"class":165},"#333",[106,62365,1283],{"class":116},[106,62367,62368,62370,62372,62374,62376,62378],{"class":108,"line":16879},[106,62369,54689],{"class":165},[106,62371,51431],{"class":116},[106,62373,563],{"class":165},[106,62375,51486],{"class":112},[106,62377,4085],{"class":165},[106,62379,1283],{"class":116},[106,62381,62382],{"class":108,"line":16892},[106,62383,2179],{"class":116},[106,62385,62386],{"class":108,"line":16897},[106,62387,2392],{"emptyLinePlaceholder":33},[106,62389,62390,62392,62394,62397],{"class":108,"line":16902},[106,62391,62117],{"class":1955},[106,62393,62168],{"class":1955},[106,62395,62396],{"class":1955}," .time",[106,62398,15565],{"class":116},[106,62400,62401,62403,62405,62407],{"class":108,"line":16907},[106,62402,57410],{"class":165},[106,62404,51431],{"class":116},[106,62406,62064],{"class":165},[106,62408,1283],{"class":116},[106,62410,62411,62413,62415,62417,62419],{"class":108,"line":16920},[106,62412,54916],{"class":165},[106,62414,51431],{"class":116},[106,62416,615],{"class":165},[106,62418,51486],{"class":112},[106,62420,1283],{"class":116},[106,62422,62423],{"class":108,"line":16925},[106,62424,2179],{"class":116},[106,62426,62427,62429,62431],{"class":108,"line":32627},[106,62428,52411],{"class":116},[106,62430,5119],{"class":51294},[106,62432,51301],{"class":116},[106,62434,62435,62437,62439],{"class":108,"line":32633},[106,62436,51779],{"class":116},[106,62438,51328],{"class":51294},[106,62440,51301],{"class":116},[106,62442,62443],{"class":108,"line":32639},[106,62444,2392],{"emptyLinePlaceholder":33},[106,62446,62447,62449,62451],{"class":108,"line":32645},[106,62448,1027],{"class":116},[106,62450,51794],{"class":51294},[106,62452,51301],{"class":116},[106,62454,62455,62457,62459,62461,62463,62466],{"class":108,"line":32651},[106,62456,52138],{"class":116},[106,62458,51605],{"class":51294},[106,62460,53480],{"class":1955},[106,62462,162],{"class":116},[106,62464,62465],{"class":221},"\"wrapper\"",[106,62467,51301],{"class":116},[106,62469,62470,62472,62474,62476,62478,62481,62483,62485],{"class":108,"line":32662},[106,62471,51335],{"class":116},[106,62473,558],{"class":51294},[106,62475,53480],{"class":1955},[106,62477,162],{"class":116},[106,62479,62480],{"class":221},"\"avatar\"",[106,62482,55308],{"class":116},[106,62484,558],{"class":51294},[106,62486,51301],{"class":116},[106,62488,62489,62491,62493,62495,62497,62500,62502,62504,62507,62509,62511,62513,62516,62518,62521,62523,62525],{"class":108,"line":32668},[106,62490,51335],{"class":116},[106,62492,54282],{"class":51294},[106,62494,14952],{"class":1955},[106,62496,162],{"class":116},[106,62498,62499],{"class":221},"\"tx\"",[106,62501,61014],{"class":1955},[106,62503,162],{"class":116},[106,62505,62506],{"class":221},"\"发一条友善的评论\"",[106,62508,54305],{"class":1955},[106,62510,162],{"class":116},[106,62512,3693],{"class":221},[106,62514,62515],{"class":1955}," maxlength",[106,62517,162],{"class":116},[106,62519,62520],{"class":221},"\"200\"",[106,62522,55308],{"class":116},[106,62524,54282],{"class":51294},[106,62526,51301],{"class":116},[106,62528,62529,62531,62533,62536,62538],{"class":108,"line":32688},[106,62530,51335],{"class":116},[106,62532,53881],{"class":51294},[106,62534,62535],{"class":116},">发布\u003C\u002F",[106,62537,53881],{"class":51294},[106,62539,51301],{"class":116},[106,62541,62542,62544,62546],{"class":108,"line":32694},[106,62543,52411],{"class":116},[106,62545,51605],{"class":51294},[106,62547,51301],{"class":116},[106,62549,62550,62552,62554,62556,62558,62560],{"class":108,"line":32705},[106,62551,52138],{"class":116},[106,62553,51605],{"class":51294},[106,62555,53480],{"class":1955},[106,62557,162],{"class":116},[106,62559,62465],{"class":221},[106,62561,51301],{"class":116},[106,62563,62564,62566,62568,62570,62572,62575,62578,62580],{"class":108,"line":32711},[106,62565,51335],{"class":116},[106,62567,106],{"class":51294},[106,62569,53480],{"class":1955},[106,62571,162],{"class":116},[106,62573,62574],{"class":221},"\"total\"",[106,62576,62577],{"class":116},">0\u002F200字\u003C\u002F",[106,62579,106],{"class":51294},[106,62581,51301],{"class":116},[106,62583,62584,62586,62588],{"class":108,"line":32717},[106,62585,52411],{"class":116},[106,62587,51605],{"class":51294},[106,62589,51301],{"class":116},[106,62591,62592,62594,62596,62598,62600,62603],{"class":108,"line":32723},[106,62593,52138],{"class":116},[106,62595,51605],{"class":51294},[106,62597,53480],{"class":1955},[106,62599,162],{"class":116},[106,62601,62602],{"class":221},"\"list\"",[106,62604,51301],{"class":116},[106,62606,62607,62609,62611,62613,62615,62618,62621,62623,62626],{"class":108,"line":32729},[106,62608,51335],{"class":116},[106,62610,51605],{"class":51294},[106,62612,53480],{"class":1955},[106,62614,162],{"class":116},[106,62616,62617],{"class":221},"\"item\"",[106,62619,62620],{"class":1955}," style",[106,62622,162],{"class":116},[106,62624,62625],{"class":221},"\"display: none;\"",[106,62627,51301],{"class":116},[106,62629,62630,62632,62634,62636,62638,62640,62642,62644],{"class":108,"line":32735},[106,62631,55228],{"class":116},[106,62633,558],{"class":51294},[106,62635,53480],{"class":1955},[106,62637,162],{"class":116},[106,62639,62480],{"class":221},[106,62641,55308],{"class":116},[106,62643,558],{"class":51294},[106,62645,51301],{"class":116},[106,62647,62648,62650,62652,62654,62656,62659],{"class":108,"line":32741},[106,62649,55228],{"class":116},[106,62651,51605],{"class":51294},[106,62653,53480],{"class":1955},[106,62655,162],{"class":116},[106,62657,62658],{"class":221},"\"info\"",[106,62660,51301],{"class":116},[106,62662,62663,62665,62667,62669,62671,62674,62677,62679],{"class":108,"line":32747},[106,62664,55296],{"class":116},[106,62666,14],{"class":51294},[106,62668,53480],{"class":1955},[106,62670,162],{"class":116},[106,62672,62673],{"class":221},"\"name\"",[106,62675,62676],{"class":116},">清风徐来\u003C\u002F",[106,62678,14],{"class":51294},[106,62680,51301],{"class":116},[106,62682,62683,62685,62687,62689,62691,62694,62697,62699],{"class":108,"line":32767},[106,62684,55296],{"class":116},[106,62686,14],{"class":51294},[106,62688,53480],{"class":1955},[106,62690,162],{"class":116},[106,62692,62693],{"class":221},"\"text\"",[106,62695,62696],{"class":116},">大家都辛苦啦，感谢各位大大的努力，能圆满完成真是太好了[笑哭][支持]\u003C\u002F",[106,62698,14],{"class":51294},[106,62700,51301],{"class":116},[106,62702,62703,62705,62707,62709,62711,62714,62717,62719],{"class":108,"line":32773},[106,62704,55296],{"class":116},[106,62706,14],{"class":51294},[106,62708,53480],{"class":1955},[106,62710,162],{"class":116},[106,62712,62713],{"class":221},"\"time\"",[106,62715,62716],{"class":116},">2022-10-10 20:29:21\u003C\u002F",[106,62718,14],{"class":51294},[106,62720,51301],{"class":116},[106,62722,62723,62725,62727],{"class":108,"line":32789},[106,62724,55401],{"class":116},[106,62726,51605],{"class":51294},[106,62728,51301],{"class":116},[106,62730,62731,62733,62735],{"class":108,"line":32795},[106,62732,51770],{"class":116},[106,62734,51605],{"class":51294},[106,62736,51301],{"class":116},[106,62738,62739,62741,62743],{"class":108,"line":32809},[106,62740,52411],{"class":116},[106,62742,51605],{"class":51294},[106,62744,51301],{"class":116},[106,62746,62747,62749,62751],{"class":108,"line":32815},[106,62748,52138],{"class":116},[106,62750,51807],{"class":51294},[106,62752,51301],{"class":116},[106,62754,62755,62757,62760,62762,62764,62766,62768,62771],{"class":108,"line":32830},[106,62756,11214],{"class":112},[106,62758,62759],{"class":165}," tx",[106,62761,13557],{"class":112},[106,62763,54390],{"class":116},[106,62765,54393],{"class":1955},[106,62767,117],{"class":116},[106,62769,62770],{"class":221},"'#tx'",[106,62772,123],{"class":116},[106,62774,62775,62777,62780,62782,62784,62786,62788,62791],{"class":108,"line":32836},[106,62776,11214],{"class":112},[106,62778,62779],{"class":165}," total",[106,62781,13557],{"class":112},[106,62783,54390],{"class":116},[106,62785,54393],{"class":1955},[106,62787,117],{"class":116},[106,62789,62790],{"class":221},"'.total'",[106,62792,123],{"class":116},[106,62794,62795],{"class":108,"line":32845},[106,62796,62797],{"class":175},"    \u002F\u002F 1. 当我们文本域获得了焦点，就让 total 显示出来\n",[106,62799,62800,62803,62805,62807,62809,62811,62813],{"class":108,"line":32851},[106,62801,62802],{"class":116},"    tx.",[106,62804,57807],{"class":1955},[106,62806,117],{"class":116},[106,62808,61321],{"class":221},[106,62810,12428],{"class":116},[106,62812,54443],{"class":112},[106,62814,54446],{"class":116},[106,62816,62817,62820,62822],{"class":108,"line":32860},[106,62818,62819],{"class":116},"      total.style.opacity ",[106,62821,162],{"class":112},[106,62823,55693],{"class":165},[106,62825,62826],{"class":108,"line":32866},[106,62827,33455],{"class":116},[106,62829,62830],{"class":108,"line":32872},[106,62831,62832],{"class":175},"    \u002F\u002F 2. 当我们文本域失去了焦点，就让 total 隐藏出来\n",[106,62834,62835,62837,62839,62841,62843,62845,62847],{"class":108,"line":32881},[106,62836,62802],{"class":116},[106,62838,57807],{"class":1955},[106,62840,117],{"class":116},[106,62842,61382],{"class":221},[106,62844,12428],{"class":116},[106,62846,54443],{"class":112},[106,62848,54446],{"class":116},[106,62850,62851,62853,62855],{"class":108,"line":32887},[106,62852,62819],{"class":116},[106,62854,162],{"class":112},[106,62856,47327],{"class":165},[106,62858,62859],{"class":108,"line":32898},[106,62860,33455],{"class":116},[106,62862,62863],{"class":108,"line":32904},[106,62864,62865],{"class":175},"    \u002F\u002F 3. 检测用户输入\n",[106,62867,62868,62870,62872,62874,62877,62879,62881],{"class":108,"line":32923},[106,62869,62802],{"class":116},[106,62871,57807],{"class":1955},[106,62873,117],{"class":116},[106,62875,62876],{"class":221},"'input'",[106,62878,12428],{"class":116},[106,62880,54443],{"class":112},[106,62882,54446],{"class":116},[106,62884,62885],{"class":108,"line":32929},[106,62886,62887],{"class":175},"      \u002F\u002F console.log(tx.value.length)  得到输入的长度\n",[106,62889,62890,62893,62895,62898,62901,62903,62906,62908,62910],{"class":108,"line":32940},[106,62891,62892],{"class":116},"      total.innerHTML ",[106,62894,162],{"class":112},[106,62896,62897],{"class":221}," `${",[106,62899,62900],{"class":116},"tx",[106,62902,675],{"class":221},[106,62904,62905],{"class":116},"value",[106,62907,675],{"class":221},[106,62909,51962],{"class":165},[106,62911,62912],{"class":221},"}\u002F200字`\n",[106,62914,62915],{"class":108,"line":32946},[106,62916,33455],{"class":116},[106,62918,62919],{"class":108,"line":32966},[106,62920,2392],{"emptyLinePlaceholder":33},[106,62922,62923],{"class":108,"line":32982},[106,62924,62925],{"class":175},"    \u002F\u002F const str = 'andy'\n",[106,62927,62928],{"class":108,"line":32988},[106,62929,62930],{"class":175},"    \u002F\u002F console.log(str.length)\n",[106,62932,62933,62935,62937],{"class":108,"line":33002},[106,62934,52411],{"class":116},[106,62936,51807],{"class":51294},[106,62938,51301],{"class":116},[106,62940,62941,62943,62945],{"class":108,"line":33008},[106,62942,51779],{"class":116},[106,62944,51794],{"class":51294},[106,62946,51301],{"class":116},[106,62948,62949],{"class":108,"line":33014},[106,62950,2392],{"emptyLinePlaceholder":33},[106,62952,62953,62955,62957],{"class":108,"line":33025},[106,62954,51779],{"class":116},[106,62956,50629],{"class":51294},[106,62958,51301],{"class":116},[21991,62960,62962],{"id":62961},"_3254-change事件","3.2.5.4 change事件",[14,62964,62965],{},"在输入框中，获得焦点，不输入任何内容，再失去焦点，则会不会触发事件，函数不会执行",[14,62967,62968],{},"第一次要输入内容时，获得焦点，输入内容，失去焦点，函数执行",[14,62970,62971],{},"后边如果获得焦点不输入任何内容，表单里的内容只要不变，函数就不会去执行",[97,62973,62975],{"className":50627,"code":62974,"language":50629,"meta":25,"style":25},"\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",[103,62976,62977,62987,63001,63005,63013,63027,63047,63059,63067,63071,63079,63093,63101,63119,63137,63149,63153,63161,63169,63173],{"__ignoreMap":25},[106,62978,62979,62981,62983,62985],{"class":108,"line":109},[106,62980,51291],{"class":116},[106,62982,51295],{"class":51294},[106,62984,51298],{"class":1955},[106,62986,51301],{"class":116},[106,62988,62989,62991,62993,62995,62997,62999],{"class":108,"line":28},[106,62990,1027],{"class":116},[106,62992,50629],{"class":51294},[106,62994,51310],{"class":1955},[106,62996,162],{"class":116},[106,62998,51315],{"class":221},[106,63000,51301],{"class":116},[106,63002,63003],{"class":108,"line":1172},[106,63004,2392],{"emptyLinePlaceholder":33},[106,63006,63007,63009,63011],{"class":108,"line":1187},[106,63008,1027],{"class":116},[106,63010,51328],{"class":51294},[106,63012,51301],{"class":116},[106,63014,63015,63017,63019,63021,63023,63025],{"class":108,"line":1193},[106,63016,52138],{"class":116},[106,63018,51338],{"class":51294},[106,63020,51341],{"class":1955},[106,63022,162],{"class":116},[106,63024,51346],{"class":221},[106,63026,51301],{"class":116},[106,63028,63029,63031,63033,63035,63037,63039,63041,63043,63045],{"class":108,"line":1207},[106,63030,52138],{"class":116},[106,63032,51338],{"class":51294},[106,63034,14913],{"class":1955},[106,63036,162],{"class":116},[106,63038,51385],{"class":221},[106,63040,51365],{"class":1955},[106,63042,162],{"class":116},[106,63044,51392],{"class":221},[106,63046,51301],{"class":116},[106,63048,63049,63051,63053,63055,63057],{"class":108,"line":1213},[106,63050,52138],{"class":116},[106,63052,51401],{"class":51294},[106,63054,51404],{"class":116},[106,63056,51401],{"class":51294},[106,63058,51301],{"class":116},[106,63060,63061,63063,63065],{"class":108,"line":1304},[106,63062,51779],{"class":116},[106,63064,51328],{"class":51294},[106,63066,51301],{"class":116},[106,63068,63069],{"class":108,"line":1310},[106,63070,2392],{"emptyLinePlaceholder":33},[106,63072,63073,63075,63077],{"class":108,"line":1322},[106,63074,1027],{"class":116},[106,63076,51794],{"class":51294},[106,63078,51301],{"class":116},[106,63080,63081,63083,63085,63087,63089,63091],{"class":108,"line":1604},[106,63082,52138],{"class":116},[106,63084,53815],{"class":51294},[106,63086,53818],{"class":1955},[106,63088,162],{"class":116},[106,63090,62693],{"class":221},[106,63092,51301],{"class":116},[106,63094,63095,63097,63099],{"class":108,"line":1609},[106,63096,52138],{"class":116},[106,63098,51807],{"class":51294},[106,63100,51301],{"class":116},[106,63102,63103,63105,63107,63109,63111,63113,63115,63117],{"class":108,"line":1615},[106,63104,11214],{"class":112},[106,63106,60599],{"class":165},[106,63108,13557],{"class":112},[106,63110,54390],{"class":116},[106,63112,54393],{"class":1955},[106,63114,117],{"class":116},[106,63116,62876],{"class":221},[106,63118,123],{"class":116},[106,63120,63121,63124,63126,63128,63131,63133,63135],{"class":108,"line":1620},[106,63122,63123],{"class":116},"    input.",[106,63125,57807],{"class":1955},[106,63127,117],{"class":116},[106,63129,63130],{"class":221},"'change'",[106,63132,12428],{"class":116},[106,63134,54443],{"class":112},[106,63136,54446],{"class":116},[106,63138,63139,63141,63143,63145,63147],{"class":108,"line":1634},[106,63140,58238],{"class":116},[106,63142,58241],{"class":1955},[106,63144,117],{"class":116},[106,63146,710],{"class":165},[106,63148,123],{"class":116},[106,63150,63151],{"class":108,"line":1639},[106,63152,33455],{"class":116},[106,63154,63155,63157,63159],{"class":108,"line":1645},[106,63156,52411],{"class":116},[106,63158,51807],{"class":51294},[106,63160,51301],{"class":116},[106,63162,63163,63165,63167],{"class":108,"line":1666},[106,63164,51779],{"class":116},[106,63166,51794],{"class":51294},[106,63168,51301],{"class":116},[106,63170,63171],{"class":108,"line":1671},[106,63172,2392],{"emptyLinePlaceholder":33},[106,63174,63175,63177,63179],{"class":108,"line":1685},[106,63176,51779],{"class":116},[106,63178,50629],{"class":51294},[106,63180,51301],{"class":116},[14,63182,63183],{},"总结：内容发生改变才回去触发",[77,63185,63187],{"id":63186},"_326-事件对象","3.2.6 事件对象",[21991,63189,63191],{"id":63190},"_3261-事件对象的介绍","3.2.6.1 事件对象的介绍",[14,63193,63194],{},[23,63195],{"alt":25,"src":63196},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-113.png",[14,63198,63199],{},[23,63200],{"alt":25,"src":63201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-114.png",[14,63203,63204],{},"点击一次，就输出了事件对象，它是个对象",[14,63206,63207],{},"只有事件监听中里边的执行函数括号里边的内容才是事件对象，其他的函数后边括号中的变量是一个形参",[14,63209,63210],{},[23,63211],{"alt":25,"src":63212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-115.png",[21991,63214,63216],{"id":63215},"_3262-事件对象的属性","3.2.6.2 事件对象的属性",[14,63218,63219],{},[23,63220],{"alt":25,"src":63221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-116.png",[14,63223,63224],{},"实现按特殊字符才是实现打印输出效果：",[97,63226,63228],{"className":53061,"code":63227,"language":53063,"meta":25,"style":25},"\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",[103,63229,63230,63238,63243,63257,63265,63270,63275,63280,63285,63290,63295,63300,63305,63310,63314,63318,63326],{"__ignoreMap":25},[106,63231,63232,63234,63236],{"class":108,"line":109},[106,63233,1027],{"class":116},[106,63235,51794],{"class":51294},[106,63237,51301],{"class":116},[106,63239,63240],{"class":108,"line":28},[106,63241,63242],{"class":175},"  \u003C!-- \u003Cbutton>点击\u003C\u002Fbutton> -->\n",[106,63244,63245,63247,63249,63251,63253,63255],{"class":108,"line":1172},[106,63246,52138],{"class":116},[106,63248,53815],{"class":51294},[106,63250,53818],{"class":1955},[106,63252,162],{"class":116},[106,63254,62693],{"class":221},[106,63256,51301],{"class":116},[106,63258,63259,63261,63263],{"class":108,"line":1187},[106,63260,52138],{"class":116},[106,63262,51807],{"class":51294},[106,63264,51301],{"class":116},[106,63266,63267],{"class":108,"line":1193},[106,63268,63269],{"class":116},"    \u002F\u002F const btn = document.querySelector('button')\n",[106,63271,63272],{"class":108,"line":1207},[106,63273,63274],{"class":116},"    \u002F\u002F btn.addEventListener('click', function (e) {\n",[106,63276,63277],{"class":108,"line":1213},[106,63278,63279],{"class":116},"    \u002F\u002F   console.log(e);\n",[106,63281,63282],{"class":108,"line":1304},[106,63283,63284],{"class":116},"    \u002F\u002F })\n",[106,63286,63287],{"class":108,"line":1310},[106,63288,63289],{"class":116},"    \u002F\u002F 按回车键才进行触发这个事件的话一定要使用事件对象\n",[106,63291,63292],{"class":108,"line":1322},[106,63293,63294],{"class":116},"    const input = document.querySelector('input')\n",[106,63296,63297],{"class":108,"line":1604},[106,63298,63299],{"class":116},"    input.addEventListener('keyup', function (e) {\n",[106,63301,63302],{"class":108,"line":1609},[106,63303,63304],{"class":116},"      if (e.key === 'Enter') {\n",[106,63306,63307],{"class":108,"line":1615},[106,63308,63309],{"class":116},"        console.log('我按下了回车键')\n",[106,63311,63312],{"class":108,"line":1620},[106,63313,52392],{"class":116},[106,63315,63316],{"class":108,"line":1634},[106,63317,33455],{"class":116},[106,63319,63320,63322,63324],{"class":108,"line":1639},[106,63321,52411],{"class":116},[106,63323,51807],{"class":51294},[106,63325,51301],{"class":116},[106,63327,63328,63330,63332],{"class":108,"line":1645},[106,63329,51779],{"class":116},[106,63331,51794],{"class":51294},[106,63333,51301],{"class":116},[21991,63335,63337],{"id":63336},"_3263-trim方法","3.2.6.3 trim方法",[14,63339,63340],{},[23,63341],{"alt":25,"src":63342},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-117.png",[14,63344,63345],{},[23,63346],{"alt":25,"src":63347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-118.png",[14,63349,63350],{},"打印输出出现了空格，可以去除两侧的空格，不会去除左右的空格",[14,63352,63353],{},"str.trim()",[77,63355,63357],{"id":63356},"_327-环境对象","3.2.7 环境对象",[14,63359,63360],{},[23,63361],{"alt":25,"src":63362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-119.png",[14,63364,63365],{},[23,63366],{"alt":25,"src":63367},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-120.png",[14,63369,63370],{},[23,63371],{"alt":25,"src":63372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-121.png",[14,63374,63375],{},"实际函数调用是window.fn()",[14,63377,63378],{},"普通函数里面this指向的是window",[1124,63380,63381,63384,63387],{},[63,63382,63383],{},"在普通函数下，this指向的是window",[63,63385,63386],{},"在事件监听中this指向的是调用者，例如下面的开关，this指向的是button",[63,63388,63389],{},"箭头函数没有this",[14,63391,63392],{},"粗略记法就是：谁调用，this就指向谁",[14,63394,63395],{},[23,63396],{"alt":25,"src":63397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-122.png",[14,63399,63400],{},[23,63401],{"alt":25,"src":63402},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-123.png",[14,63404,63405],{},"这里button调用的这个执行函数，所以this就是button，this就表示它自己",[14,63407,63408],{},"this的用处，点击按钮，按钮自己的字变为粉色：",[97,63410,63412],{"className":53061,"code":63411,"language":53063,"meta":25,"style":25},"\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",[103,63413,63414,63422,63434,63442,63447,63452,63457,63462,63466,63474],{"__ignoreMap":25},[106,63415,63416,63418,63420],{"class":108,"line":109},[106,63417,1027],{"class":116},[106,63419,51794],{"class":51294},[106,63421,51301],{"class":116},[106,63423,63424,63426,63428,63430,63432],{"class":108,"line":28},[106,63425,52138],{"class":116},[106,63427,53881],{"class":51294},[106,63429,53887],{"class":116},[106,63431,53881],{"class":51294},[106,63433,51301],{"class":116},[106,63435,63436,63438,63440],{"class":108,"line":1172},[106,63437,52138],{"class":116},[106,63439,51807],{"class":51294},[106,63441,51301],{"class":116},[106,63443,63444],{"class":108,"line":1187},[106,63445,63446],{"class":116},"    const button = document.querySelector('button')\n",[106,63448,63449],{"class":108,"line":1193},[106,63450,63451],{"class":116},"    button.addEventListener('click', function () {\n",[106,63453,63454],{"class":108,"line":1207},[106,63455,63456],{"class":116},"      \u002F\u002F console.log(this);\n",[106,63458,63459],{"class":108,"line":1213},[106,63460,63461],{"class":116},"      this.style.color = 'pink'\n",[106,63463,63464],{"class":108,"line":1304},[106,63465,33455],{"class":116},[106,63467,63468,63470,63472],{"class":108,"line":1310},[106,63469,52411],{"class":116},[106,63471,51807],{"class":51294},[106,63473,51301],{"class":116},[106,63475,63476,63478,63480],{"class":108,"line":1322},[106,63477,51779],{"class":116},[106,63479,51794],{"class":51294},[106,63481,51301],{"class":116},[77,63483,63485],{"id":63484},"_328-回调函数","3.2.8 回调函数",[14,63487,63488],{},[23,63489],{"alt":25,"src":63490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-124.png",[14,63492,63493],{},"定时器本身就是个函数，fn函数作为参数传递给了这个定时器这个函数，过了一秒钟就调用这个函数，fn就是回调函数",[14,63495,11325],{},[1124,63497,63498,63501,63504],{},[63,63499,63500],{},"把函数当做另外一个函数的参数传递，这个函数就叫回调函数",[63,63502,63503],{},"回调函数本质还是函数，只不过把它当成参数使用",[63,63505,63506],{},"使用匿名函数做为回调函数比较常见",[77,63508,63510],{"id":63509},"_329-tab栏切换","3.2.9 tab栏切换",[14,63512,63513],{},[23,63514],{"alt":25,"src":63515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-125.png",[97,63517,63519],{"className":50627,"code":63518,"language":50629,"meta":25,"style":25},"\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",[103,63520,63521,63531,63545,63549,63557,63571,63591,63611,63624,63632,63638,63648,63658,63662,63666,63673,63686,63699,63711,63727,63731,63735,63742,63754,63766,63778,63788,63798,63802,63806,63815,63827,63838,63850,63854,63858,63866,63876,63886,63896,63900,63904,63914,63928,63940,63944,63948,63960,63971,63988,63998,64002,64006,64021,64032,64042,64046,64050,64057,64072,64076,64080,64088,64098,64102,64106,64115,64125,64129,64137,64145,64149,64157,64172,64187,64200,64208,64242,64269,64296,64323,64350,64358,64366,64381,64418,64453,64488,64523,64558,64566,64574,64582,64587,64592,64612,64617,64646,64651,64656,64674,64679,64684,64689,64711,64716,64732,64736,64741,64746,64767,64772,64801,64805,64810,64814,64822,64830,64834],{"__ignoreMap":25},[106,63522,63523,63525,63527,63529],{"class":108,"line":109},[106,63524,51291],{"class":116},[106,63526,51295],{"class":51294},[106,63528,51298],{"class":1955},[106,63530,51301],{"class":116},[106,63532,63533,63535,63537,63539,63541,63543],{"class":108,"line":28},[106,63534,1027],{"class":116},[106,63536,50629],{"class":51294},[106,63538,51310],{"class":1955},[106,63540,162],{"class":116},[106,63542,51315],{"class":221},[106,63544,51301],{"class":116},[106,63546,63547],{"class":108,"line":1172},[106,63548,2392],{"emptyLinePlaceholder":33},[106,63550,63551,63553,63555],{"class":108,"line":1187},[106,63552,1027],{"class":116},[106,63554,51328],{"class":51294},[106,63556,51301],{"class":116},[106,63558,63559,63561,63563,63565,63567,63569],{"class":108,"line":1193},[106,63560,52138],{"class":116},[106,63562,51338],{"class":51294},[106,63564,51341],{"class":1955},[106,63566,162],{"class":116},[106,63568,51346],{"class":221},[106,63570,59121],{"class":116},[106,63572,63573,63575,63577,63579,63581,63583,63585,63587,63589],{"class":108,"line":1207},[106,63574,52138],{"class":116},[106,63576,51338],{"class":51294},[106,63578,51357],{"class":1955},[106,63580,162],{"class":116},[106,63582,51362],{"class":221},[106,63584,51365],{"class":1955},[106,63586,162],{"class":116},[106,63588,51370],{"class":221},[106,63590,59121],{"class":116},[106,63592,63593,63595,63597,63599,63601,63603,63605,63607,63609],{"class":108,"line":1213},[106,63594,52138],{"class":116},[106,63596,51338],{"class":51294},[106,63598,14913],{"class":1955},[106,63600,162],{"class":116},[106,63602,51385],{"class":221},[106,63604,51365],{"class":1955},[106,63606,162],{"class":116},[106,63608,51392],{"class":221},[106,63610,59121],{"class":116},[106,63612,63613,63615,63617,63620,63622],{"class":108,"line":1304},[106,63614,52138],{"class":116},[106,63616,51401],{"class":51294},[106,63618,63619],{"class":116},">tab栏切换\u003C\u002F",[106,63621,51401],{"class":51294},[106,63623,51301],{"class":116},[106,63625,63626,63628,63630],{"class":108,"line":1310},[106,63627,52138],{"class":116},[106,63629,5119],{"class":51294},[106,63631,51301],{"class":116},[106,63633,63634,63636],{"class":108,"line":1322},[106,63635,6396],{"class":51294},[106,63637,15565],{"class":116},[106,63639,63640,63642,63644,63646],{"class":108,"line":1604},[106,63641,54700],{"class":165},[106,63643,51431],{"class":116},[106,63645,308],{"class":165},[106,63647,1283],{"class":116},[106,63649,63650,63652,63654,63656],{"class":108,"line":1609},[106,63651,54689],{"class":165},[106,63653,51431],{"class":116},[106,63655,308],{"class":165},[106,63657,1283],{"class":116},[106,63659,63660],{"class":108,"line":1615},[106,63661,2179],{"class":116},[106,63663,63664],{"class":108,"line":1620},[106,63665,2392],{"emptyLinePlaceholder":33},[106,63667,63668,63671],{"class":108,"line":1634},[106,63669,63670],{"class":1955},"    .tab",[106,63672,15565],{"class":116},[106,63674,63675,63677,63679,63682,63684],{"class":108,"line":1639},[106,63676,54765],{"class":165},[106,63678,51431],{"class":116},[106,63680,63681],{"class":165},"590",[106,63683,51486],{"class":112},[106,63685,1283],{"class":116},[106,63687,63688,63690,63692,63695,63697],{"class":108,"line":1645},[106,63689,54779],{"class":165},[106,63691,51431],{"class":116},[106,63693,63694],{"class":165},"340",[106,63696,51486],{"class":112},[106,63698,1283],{"class":116},[106,63700,63701,63703,63705,63707,63709],{"class":108,"line":1666},[106,63702,54700],{"class":165},[106,63704,51431],{"class":116},[106,63706,817],{"class":165},[106,63708,51486],{"class":112},[106,63710,1283],{"class":116},[106,63712,63713,63715,63717,63719,63721,63723,63725],{"class":108,"line":1671},[106,63714,61971],{"class":165},[106,63716,51431],{"class":116},[106,63718,334],{"class":165},[106,63720,51486],{"class":112},[106,63722,51515],{"class":165},[106,63724,62238],{"class":165},[106,63726,1283],{"class":116},[106,63728,63729],{"class":108,"line":1685},[106,63730,2179],{"class":116},[106,63732,63733],{"class":108,"line":1690},[106,63734,2392],{"emptyLinePlaceholder":33},[106,63736,63737,63740],{"class":108,"line":1719},[106,63738,63739],{"class":1955},"    .tab-nav",[106,63741,15565],{"class":116},[106,63743,63744,63746,63748,63750,63752],{"class":108,"line":1724},[106,63745,54765],{"class":165},[106,63747,51431],{"class":116},[106,63749,428],{"class":165},[106,63751,445],{"class":112},[106,63753,1283],{"class":116},[106,63755,63756,63758,63760,63762,63764],{"class":108,"line":1741},[106,63757,54779],{"class":165},[106,63759,51431],{"class":116},[106,63761,1024],{"class":165},[106,63763,51486],{"class":112},[106,63765,1283],{"class":116},[106,63767,63768,63770,63772,63774,63776],{"class":108,"line":1746},[106,63769,57353],{"class":165},[106,63771,51431],{"class":116},[106,63773,1024],{"class":165},[106,63775,51486],{"class":112},[106,63777,1283],{"class":116},[106,63779,63780,63782,63784,63786],{"class":108,"line":1751},[106,63781,55003],{"class":165},[106,63783,51431],{"class":116},[106,63785,51471],{"class":165},[106,63787,1283],{"class":116},[106,63789,63790,63792,63794,63796],{"class":108,"line":1756},[106,63791,55014],{"class":165},[106,63793,51431],{"class":116},[106,63795,51662],{"class":165},[106,63797,1283],{"class":116},[106,63799,63800],{"class":108,"line":1770},[106,63801,2179],{"class":116},[106,63803,63804],{"class":108,"line":1775},[106,63805,2392],{"emptyLinePlaceholder":33},[106,63807,63808,63810,63813],{"class":108,"line":2569},[106,63809,63739],{"class":1955},[106,63811,63812],{"class":51294}," h3",[106,63814,15565],{"class":116},[106,63816,63817,63819,63821,63823,63825],{"class":108,"line":2583},[106,63818,54916],{"class":165},[106,63820,51431],{"class":116},[106,63822,917],{"class":165},[106,63824,51486],{"class":112},[106,63826,1283],{"class":116},[106,63828,63829,63831,63833,63836],{"class":108,"line":2591},[106,63830,62328],{"class":165},[106,63832,51431],{"class":116},[106,63834,63835],{"class":165},"normal",[106,63837,1283],{"class":116},[106,63839,63840,63842,63844,63846,63848],{"class":108,"line":2596},[106,63841,61994],{"class":165},[106,63843,51431],{"class":116},[106,63845,817],{"class":165},[106,63847,51486],{"class":112},[106,63849,1283],{"class":116},[106,63851,63852],{"class":108,"line":2602},[106,63853,2179],{"class":116},[106,63855,63856],{"class":108,"line":2608},[106,63857,2392],{"emptyLinePlaceholder":33},[106,63859,63860,63862,63864],{"class":108,"line":2613},[106,63861,63739],{"class":1955},[106,63863,61286],{"class":51294},[106,63865,15565],{"class":116},[106,63867,63868,63870,63872,63874],{"class":108,"line":7941},[106,63869,54726],{"class":165},[106,63871,51431],{"class":116},[106,63873,54731],{"class":165},[106,63875,1283],{"class":116},[106,63877,63878,63880,63882,63884],{"class":108,"line":7965},[106,63879,55003],{"class":165},[106,63881,51431],{"class":116},[106,63883,51471],{"class":165},[106,63885,1283],{"class":116},[106,63887,63888,63890,63892,63894],{"class":108,"line":7970},[106,63889,55014],{"class":165},[106,63891,51431],{"class":116},[106,63893,51574],{"class":165},[106,63895,1283],{"class":116},[106,63897,63898],{"class":108,"line":7976},[106,63899,2179],{"class":116},[106,63901,63902],{"class":108,"line":8003},[106,63903,2392],{"emptyLinePlaceholder":33},[106,63905,63906,63908,63910,63912],{"class":108,"line":8008},[106,63907,63739],{"class":1955},[106,63909,61286],{"class":51294},[106,63911,55069],{"class":51294},[106,63913,15565],{"class":116},[106,63915,63916,63918,63920,63922,63924,63926],{"class":108,"line":8014},[106,63917,54700],{"class":165},[106,63919,51431],{"class":116},[106,63921,308],{"class":165},[106,63923,8943],{"class":165},[106,63925,51486],{"class":112},[106,63927,1283],{"class":116},[106,63929,63930,63932,63934,63936,63938],{"class":108,"line":8026},[106,63931,54916],{"class":165},[106,63933,51431],{"class":116},[106,63935,666],{"class":165},[106,63937,51486],{"class":112},[106,63939,1283],{"class":116},[106,63941,63942],{"class":108,"line":8038},[106,63943,2179],{"class":116},[106,63945,63946],{"class":108,"line":8050},[106,63947,2392],{"emptyLinePlaceholder":33},[106,63949,63950,63952,63954,63956,63958],{"class":108,"line":9709},[106,63951,63739],{"class":1955},[106,63953,61286],{"class":51294},[106,63955,55069],{"class":51294},[106,63957,1391],{"class":51294},[106,63959,15565],{"class":116},[106,63961,63962,63965,63967,63969],{"class":108,"line":9734},[106,63963,63964],{"class":165},"      text-decoration",[106,63966,51431],{"class":116},[106,63968,54731],{"class":165},[106,63970,1283],{"class":116},[106,63972,63973,63975,63977,63979,63981,63983,63986],{"class":108,"line":9757},[106,63974,62226],{"class":165},[106,63976,51431],{"class":116},[106,63978,194],{"class":165},[106,63980,51486],{"class":112},[106,63982,51515],{"class":165},[106,63984,63985],{"class":165}," transparent",[106,63987,1283],{"class":116},[106,63989,63990,63992,63994,63996],{"class":108,"line":9781},[106,63991,57410],{"class":165},[106,63993,51431],{"class":116},[106,63995,62363],{"class":165},[106,63997,1283],{"class":116},[106,63999,64000],{"class":108,"line":9786},[106,64001,2179],{"class":116},[106,64003,64004],{"class":108,"line":9791},[106,64005,2392],{"emptyLinePlaceholder":33},[106,64007,64008,64010,64012,64014,64016,64019],{"class":108,"line":9796},[106,64009,63739],{"class":1955},[106,64011,61286],{"class":51294},[106,64013,55069],{"class":51294},[106,64015,1391],{"class":51294},[106,64017,64018],{"class":1955},".active",[106,64020,15565],{"class":116},[106,64022,64023,64025,64027,64030],{"class":108,"line":9805},[106,64024,61785],{"class":165},[106,64026,51431],{"class":116},[106,64028,64029],{"class":165},"#e1251b",[106,64031,1283],{"class":116},[106,64033,64034,64036,64038,64040],{"class":108,"line":9810},[106,64035,57410],{"class":165},[106,64037,51431],{"class":116},[106,64039,64029],{"class":165},[106,64041,1283],{"class":116},[106,64043,64044],{"class":108,"line":9816},[106,64045,2179],{"class":116},[106,64047,64048],{"class":108,"line":9837},[106,64049,2392],{"emptyLinePlaceholder":33},[106,64051,64052,64055],{"class":108,"line":9843},[106,64053,64054],{"class":1955},"    .tab-content",[106,64056,15565],{"class":116},[106,64058,64059,64061,64063,64065,64068,64070],{"class":108,"line":9857},[106,64060,54689],{"class":165},[106,64062,51431],{"class":116},[106,64064,308],{"class":165},[106,64066,64067],{"class":165}," 16",[106,64069,51486],{"class":112},[106,64071,1283],{"class":116},[106,64073,64074],{"class":108,"line":9863},[106,64075,2179],{"class":116},[106,64077,64078],{"class":108,"line":9890},[106,64079,2392],{"emptyLinePlaceholder":33},[106,64081,64082,64084,64086],{"class":108,"line":9899},[106,64083,64054],{"class":1955},[106,64085,62168],{"class":1955},[106,64087,15565],{"class":116},[106,64089,64090,64092,64094,64096],{"class":108,"line":9905},[106,64091,55003],{"class":165},[106,64093,51431],{"class":116},[106,64095,54731],{"class":165},[106,64097,1283],{"class":116},[106,64099,64100],{"class":108,"line":9913},[106,64101,2179],{"class":116},[106,64103,64104],{"class":108,"line":9918},[106,64105,2392],{"emptyLinePlaceholder":33},[106,64107,64108,64110,64113],{"class":108,"line":16597},[106,64109,64054],{"class":1955},[106,64111,64112],{"class":1955}," .item.active",[106,64114,15565],{"class":116},[106,64116,64117,64119,64121,64123],{"class":108,"line":16603},[106,64118,55003],{"class":165},[106,64120,51431],{"class":116},[106,64122,60863],{"class":165},[106,64124,1283],{"class":116},[106,64126,64127],{"class":108,"line":16626},[106,64128,2179],{"class":116},[106,64130,64131,64133,64135],{"class":108,"line":16632},[106,64132,52411],{"class":116},[106,64134,5119],{"class":51294},[106,64136,51301],{"class":116},[106,64138,64139,64141,64143],{"class":108,"line":16655},[106,64140,51779],{"class":116},[106,64142,51328],{"class":51294},[106,64144,51301],{"class":116},[106,64146,64147],{"class":108,"line":16669},[106,64148,2392],{"emptyLinePlaceholder":33},[106,64150,64151,64153,64155],{"class":108,"line":16689},[106,64152,1027],{"class":116},[106,64154,51794],{"class":51294},[106,64156,51301],{"class":116},[106,64158,64159,64161,64163,64165,64167,64170],{"class":108,"line":16695},[106,64160,52138],{"class":116},[106,64162,51605],{"class":51294},[106,64164,53480],{"class":1955},[106,64166,162],{"class":116},[106,64168,64169],{"class":221},"\"tab\"",[106,64171,51301],{"class":116},[106,64173,64174,64176,64178,64180,64182,64185],{"class":108,"line":16706},[106,64175,51335],{"class":116},[106,64177,51605],{"class":51294},[106,64179,53480],{"class":1955},[106,64181,162],{"class":116},[106,64183,64184],{"class":221},"\"tab-nav\"",[106,64186,51301],{"class":116},[106,64188,64189,64191,64193,64196,64198],{"class":108,"line":16729},[106,64190,55228],{"class":116},[106,64192,77],{"class":51294},[106,64194,64195],{"class":116},">每日特价\u003C\u002F",[106,64197,77],{"class":51294},[106,64199,51301],{"class":116},[106,64201,64202,64204,64206],{"class":108,"line":16751},[106,64203,55228],{"class":116},[106,64205,1124],{"class":51294},[106,64207,51301],{"class":116},[106,64209,64210,64212,64214,64216,64218,64220,64222,64224,64226,64228,64231,64234,64236,64238,64240],{"class":108,"line":16756},[106,64211,55296],{"class":116},[106,64213,63],{"class":51294},[106,64215,61046],{"class":116},[106,64217,355],{"class":51294},[106,64219,53480],{"class":1955},[106,64221,162],{"class":116},[106,64223,59700],{"class":221},[106,64225,61051],{"class":1955},[106,64227,162],{"class":116},[106,64229,64230],{"class":221},"\"javascript:;\"",[106,64232,64233],{"class":116},">精选\u003C\u002F",[106,64235,355],{"class":51294},[106,64237,55308],{"class":116},[106,64239,63],{"class":51294},[106,64241,51301],{"class":116},[106,64243,64244,64246,64248,64250,64252,64254,64256,64258,64261,64263,64265,64267],{"class":108,"line":16762},[106,64245,55296],{"class":116},[106,64247,63],{"class":51294},[106,64249,61046],{"class":116},[106,64251,355],{"class":51294},[106,64253,61051],{"class":1955},[106,64255,162],{"class":116},[106,64257,64230],{"class":221},[106,64259,64260],{"class":116},">美食\u003C\u002F",[106,64262,355],{"class":51294},[106,64264,55308],{"class":116},[106,64266,63],{"class":51294},[106,64268,51301],{"class":116},[106,64270,64271,64273,64275,64277,64279,64281,64283,64285,64288,64290,64292,64294],{"class":108,"line":16776},[106,64272,55296],{"class":116},[106,64274,63],{"class":51294},[106,64276,61046],{"class":116},[106,64278,355],{"class":51294},[106,64280,61051],{"class":1955},[106,64282,162],{"class":116},[106,64284,64230],{"class":221},[106,64286,64287],{"class":116},">百货\u003C\u002F",[106,64289,355],{"class":51294},[106,64291,55308],{"class":116},[106,64293,63],{"class":51294},[106,64295,51301],{"class":116},[106,64297,64298,64300,64302,64304,64306,64308,64310,64312,64315,64317,64319,64321],{"class":108,"line":16789},[106,64299,55296],{"class":116},[106,64301,63],{"class":51294},[106,64303,61046],{"class":116},[106,64305,355],{"class":51294},[106,64307,61051],{"class":1955},[106,64309,162],{"class":116},[106,64311,64230],{"class":221},[106,64313,64314],{"class":116},">个护\u003C\u002F",[106,64316,355],{"class":51294},[106,64318,55308],{"class":116},[106,64320,63],{"class":51294},[106,64322,51301],{"class":116},[106,64324,64325,64327,64329,64331,64333,64335,64337,64339,64342,64344,64346,64348],{"class":108,"line":16794},[106,64326,55296],{"class":116},[106,64328,63],{"class":51294},[106,64330,61046],{"class":116},[106,64332,355],{"class":51294},[106,64334,61051],{"class":1955},[106,64336,162],{"class":116},[106,64338,64230],{"class":221},[106,64340,64341],{"class":116},">预告\u003C\u002F",[106,64343,355],{"class":51294},[106,64345,55308],{"class":116},[106,64347,63],{"class":51294},[106,64349,51301],{"class":116},[106,64351,64352,64354,64356],{"class":108,"line":16808},[106,64353,55401],{"class":116},[106,64355,1124],{"class":51294},[106,64357,51301],{"class":116},[106,64359,64360,64362,64364],{"class":108,"line":16813},[106,64361,51770],{"class":116},[106,64363,51605],{"class":51294},[106,64365,51301],{"class":116},[106,64367,64368,64370,64372,64374,64376,64379],{"class":108,"line":16819},[106,64369,51335],{"class":116},[106,64371,51605],{"class":51294},[106,64373,53480],{"class":1955},[106,64375,162],{"class":116},[106,64377,64378],{"class":221},"\"tab-content\"",[106,64380,51301],{"class":116},[106,64382,64383,64385,64387,64389,64391,64394,64396,64398,64400,64402,64405,64407,64409,64411,64414,64416],{"class":108,"line":16824},[106,64384,55228],{"class":116},[106,64386,51605],{"class":51294},[106,64388,53480],{"class":1955},[106,64390,162],{"class":116},[106,64392,64393],{"class":221},"\"item active\"",[106,64395,61046],{"class":116},[106,64397,23],{"class":51294},[106,64399,55233],{"class":1955},[106,64401,162],{"class":116},[106,64403,64404],{"class":221},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab00.png\"",[106,64406,55241],{"class":1955},[106,64408,162],{"class":116},[106,64410,7645],{"class":221},[106,64412,64413],{"class":116}," \u002F>\u003C\u002F",[106,64415,51605],{"class":51294},[106,64417,51301],{"class":116},[106,64419,64420,64422,64424,64426,64428,64430,64432,64434,64436,64438,64441,64443,64445,64447,64449,64451],{"class":108,"line":16838},[106,64421,55228],{"class":116},[106,64423,51605],{"class":51294},[106,64425,53480],{"class":1955},[106,64427,162],{"class":116},[106,64429,62617],{"class":221},[106,64431,61046],{"class":116},[106,64433,23],{"class":51294},[106,64435,55233],{"class":1955},[106,64437,162],{"class":116},[106,64439,64440],{"class":221},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab01.png\"",[106,64442,55241],{"class":1955},[106,64444,162],{"class":116},[106,64446,7645],{"class":221},[106,64448,64413],{"class":116},[106,64450,51605],{"class":51294},[106,64452,51301],{"class":116},[106,64454,64455,64457,64459,64461,64463,64465,64467,64469,64471,64473,64476,64478,64480,64482,64484,64486],{"class":108,"line":16843},[106,64456,55228],{"class":116},[106,64458,51605],{"class":51294},[106,64460,53480],{"class":1955},[106,64462,162],{"class":116},[106,64464,62617],{"class":221},[106,64466,61046],{"class":116},[106,64468,23],{"class":51294},[106,64470,55233],{"class":1955},[106,64472,162],{"class":116},[106,64474,64475],{"class":221},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab02.png\"",[106,64477,55241],{"class":1955},[106,64479,162],{"class":116},[106,64481,7645],{"class":221},[106,64483,64413],{"class":116},[106,64485,51605],{"class":51294},[106,64487,51301],{"class":116},[106,64489,64490,64492,64494,64496,64498,64500,64502,64504,64506,64508,64511,64513,64515,64517,64519,64521],{"class":108,"line":16848},[106,64491,55228],{"class":116},[106,64493,51605],{"class":51294},[106,64495,53480],{"class":1955},[106,64497,162],{"class":116},[106,64499,62617],{"class":221},[106,64501,61046],{"class":116},[106,64503,23],{"class":51294},[106,64505,55233],{"class":1955},[106,64507,162],{"class":116},[106,64509,64510],{"class":221},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab03.png\"",[106,64512,55241],{"class":1955},[106,64514,162],{"class":116},[106,64516,7645],{"class":221},[106,64518,64413],{"class":116},[106,64520,51605],{"class":51294},[106,64522,51301],{"class":116},[106,64524,64525,64527,64529,64531,64533,64535,64537,64539,64541,64543,64546,64548,64550,64552,64554,64556],{"class":108,"line":16862},[106,64526,55228],{"class":116},[106,64528,51605],{"class":51294},[106,64530,53480],{"class":1955},[106,64532,162],{"class":116},[106,64534,62617],{"class":221},[106,64536,61046],{"class":116},[106,64538,23],{"class":51294},[106,64540,55233],{"class":1955},[106,64542,162],{"class":116},[106,64544,64545],{"class":221},"\"....\u002F..\u002Fpublic\u002Fimages\u002Ftab04.png\"",[106,64547,55241],{"class":1955},[106,64549,162],{"class":116},[106,64551,7645],{"class":221},[106,64553,64413],{"class":116},[106,64555,51605],{"class":51294},[106,64557,51301],{"class":116},[106,64559,64560,64562,64564],{"class":108,"line":16874},[106,64561,51770],{"class":116},[106,64563,51605],{"class":51294},[106,64565,51301],{"class":116},[106,64567,64568,64570,64572],{"class":108,"line":16879},[106,64569,52411],{"class":116},[106,64571,51605],{"class":51294},[106,64573,51301],{"class":116},[106,64575,64576,64578,64580],{"class":108,"line":16892},[106,64577,52138],{"class":116},[106,64579,51807],{"class":51294},[106,64581,51301],{"class":116},[106,64583,64584],{"class":108,"line":16897},[106,64585,64586],{"class":175},"    \u002F\u002F 1. a 模块制作 要给 5个链接绑定鼠标经过事件\n",[106,64588,64589],{"class":108,"line":16902},[106,64590,64591],{"class":175},"    \u002F\u002F 1.1 获取 a 元素 \n",[106,64593,64594,64596,64599,64601,64603,64605,64607,64610],{"class":108,"line":16907},[106,64595,11214],{"class":112},[106,64597,64598],{"class":165}," as",[106,64600,13557],{"class":112},[106,64602,54390],{"class":116},[106,64604,55675],{"class":1955},[106,64606,117],{"class":116},[106,64608,64609],{"class":221},"'.tab-nav a'",[106,64611,123],{"class":116},[106,64613,64614],{"class":108,"line":16920},[106,64615,64616],{"class":175},"    \u002F\u002F console.log(as) \n",[106,64618,64619,64621,64623,64625,64627,64629,64631,64633,64635,64638,64640,64642,64644],{"class":108,"line":16925},[106,64620,3193],{"class":112},[106,64622,1650],{"class":116},[106,64624,51841],{"class":112},[106,64626,9431],{"class":116},[106,64628,162],{"class":112},[106,64630,4085],{"class":165},[106,64632,9438],{"class":116},[106,64634,1027],{"class":112},[106,64636,64637],{"class":116}," as.",[106,64639,51962],{"class":165},[106,64641,3206],{"class":116},[106,64643,2284],{"class":112},[106,64645,12435],{"class":116},[106,64647,64648],{"class":108,"line":32627},[106,64649,64650],{"class":175},"      \u002F\u002F console.log(as[i])\n",[106,64652,64653],{"class":108,"line":32633},[106,64654,64655],{"class":175},"      \u002F\u002F 要给 5个链接绑定鼠标经过事件\n",[106,64657,64658,64661,64663,64665,64668,64670,64672],{"class":108,"line":32639},[106,64659,64660],{"class":116},"      as[i].",[106,64662,57807],{"class":1955},[106,64664,117],{"class":116},[106,64666,64667],{"class":221},"'mouseenter'",[106,64669,12428],{"class":116},[106,64671,54443],{"class":112},[106,64673,54446],{"class":116},[106,64675,64676],{"class":108,"line":32645},[106,64677,64678],{"class":175},"        \u002F\u002F console.log('鼠标经过')\n",[106,64680,64681],{"class":108,"line":32651},[106,64682,64683],{"class":175},"        \u002F\u002F 排他思想  \n",[106,64685,64686],{"class":108,"line":32662},[106,64687,64688],{"class":175},"        \u002F\u002F 干掉别人 移除类active\n",[106,64690,64691,64693,64695,64697,64700,64702,64704,64706,64709],{"class":108,"line":32668},[106,64692,51919],{"class":116},[106,64694,54393],{"class":1955},[106,64696,117],{"class":116},[106,64698,64699],{"class":221},"'.tab-nav .active'",[106,64701,56997],{"class":116},[106,64703,57000],{"class":1955},[106,64705,117],{"class":116},[106,64707,64708],{"class":221},"'active'",[106,64710,123],{"class":116},[106,64712,64713],{"class":108,"line":32688},[106,64714,64715],{"class":175},"        \u002F\u002F 我登基 我添加类 active  this 当前的那个 a \n",[106,64717,64718,64721,64724,64726,64728,64730],{"class":108,"line":32694},[106,64719,64720],{"class":165},"        this",[106,64722,64723],{"class":116},".classList.",[106,64725,5327],{"class":1955},[106,64727,117],{"class":116},[106,64729,64708],{"class":221},[106,64731,123],{"class":116},[106,64733,64734],{"class":108,"line":32705},[106,64735,2392],{"emptyLinePlaceholder":33},[106,64737,64738],{"class":108,"line":32711},[106,64739,64740],{"class":175},"        \u002F\u002F 下面5个大盒子 一一对应  .item \n",[106,64742,64743],{"class":108,"line":32717},[106,64744,64745],{"class":175},"        \u002F\u002F 干掉别人\n",[106,64747,64748,64750,64752,64754,64757,64759,64761,64763,64765],{"class":108,"line":32723},[106,64749,51919],{"class":116},[106,64751,54393],{"class":1955},[106,64753,117],{"class":116},[106,64755,64756],{"class":221},"'.tab-content .active'",[106,64758,56997],{"class":116},[106,64760,57000],{"class":1955},[106,64762,117],{"class":116},[106,64764,64708],{"class":221},[106,64766,123],{"class":116},[106,64768,64769],{"class":108,"line":32729},[106,64770,64771],{"class":175},"        \u002F\u002F 对应序号的那个 item 显示 添加 active 类\n",[106,64773,64774,64776,64778,64780,64783,64785,64787,64789,64791,64793,64795,64797,64799],{"class":108,"line":32735},[106,64775,51919],{"class":116},[106,64777,54393],{"class":1955},[106,64779,117],{"class":116},[106,64781,64782],{"class":221},"`.tab-content .item:nth-child(${",[106,64784,558],{"class":116},[106,64786,45560],{"class":112},[106,64788,25112],{"class":165},[106,64790,57026],{"class":221},[106,64792,56997],{"class":116},[106,64794,5327],{"class":1955},[106,64796,117],{"class":116},[106,64798,64708],{"class":221},[106,64800,123],{"class":116},[106,64802,64803],{"class":108,"line":32741},[106,64804,2392],{"emptyLinePlaceholder":33},[106,64806,64807],{"class":108,"line":32747},[106,64808,64809],{"class":116},"      })\n",[106,64811,64812],{"class":108,"line":32767},[106,64813,2179],{"class":116},[106,64815,64816,64818,64820],{"class":108,"line":32773},[106,64817,52411],{"class":116},[106,64819,51807],{"class":51294},[106,64821,51301],{"class":116},[106,64823,64824,64826,64828],{"class":108,"line":32789},[106,64825,51779],{"class":116},[106,64827,51794],{"class":51294},[106,64829,51301],{"class":116},[106,64831,64832],{"class":108,"line":32795},[106,64833,2392],{"emptyLinePlaceholder":33},[106,64835,64836,64838,64840],{"class":108,"line":32809},[106,64837,51779],{"class":116},[106,64839,50629],{"class":51294},[106,64841,51301],{"class":116},[14,64843,64844],{},"总结：不要忘记this，还有tab栏优先考虑使用循环！！！",[14,64846,64847],{},"在监听事件中，this指向的就是他的调用者",[14,64849,64850],{},"补充：如果刚开始是没有active选中的，可以进行.active(使用这个类)的对象元素的获取，如果没有就是null，空为假，然后就可以进行if语句的判断，如果假的话就不用执行删除，真的话就删除，然后再添加active这个类就可以！",[14,64852,53714],{},[14,64854,64855],{},"(function () {",[14,64857,64858],{},"const list = document.querySelector('.xtx-elevator-list')",[14,64860,64861],{},"list.addEventListener('click', function (e) {",[14,64863,64864],{},"if (e.target.tagName === 'A') {",[14,64866,64867],{},"\u002F\u002F 排他思想",[14,64869,64870],{},"\u002F\u002F 在不知道有么有active这个类的情况下不能上来就删除",[14,64872,64873],{},"const old = document.querySelector('.xtx-elevator-list .active')",[14,64875,64876],{},"\u002F\u002F console.log(old);",[14,64878,64879],{},"\u002F\u002F 判断",[14,64881,64882],{},"\u002F\u002F 没有的话old=null，空为假，就不执行后边的操作",[14,64884,64885],{},"if (old) old.classList.remove('active')",[14,64887,64888],{},"e.target.classList.add('active')",[14,64890,1063],{},[14,64892,52458],{},[14,64894,64895],{},"})();",[77,64897,64899],{"id":64898},"_3210-按钮全选或反选案例","3.2.10 按钮全选或反选案例",[97,64901,64903],{"className":50627,"code":64902,"language":50629,"meta":25,"style":25},"\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",[103,64904,64905,64915,64919,64927,64931,64945,64959,64971,64979,64985,64995,65005,65009,65013,65020,65032,65043,65060,65073,65087,65097,65101,65105,65112,65123,65141,65151,65163,65167,65171,65178,65195,65206,65218,65222,65226,65233,65245,65249,65257,65265,65269,65277,65285,65293,65308,65352,65360,65373,65386,65399,65407,65415,65423,65451,65459,65471,65484,65497,65505,65513,65521,65547,65555,65568,65580,65593,65601,65609,65617,65643,65651,65664,65676,65689,65697,65705,65713,65718,65738,65743,65763,65768,65785,65790,65798,65803,65832,65845,65849,65853,65858,65862,65890,65895,65912,65917,65922,65927,65932,65958,65962,65966,65974,65982,65986],{"__ignoreMap":25},[106,64906,64907,64909,64911,64913],{"class":108,"line":109},[106,64908,51291],{"class":116},[106,64910,51295],{"class":51294},[106,64912,51298],{"class":1955},[106,64914,51301],{"class":116},[106,64916,64917],{"class":108,"line":28},[106,64918,2392],{"emptyLinePlaceholder":33},[106,64920,64921,64923,64925],{"class":108,"line":1172},[106,64922,1027],{"class":116},[106,64924,50629],{"class":51294},[106,64926,51301],{"class":116},[106,64928,64929],{"class":108,"line":1187},[106,64930,2392],{"emptyLinePlaceholder":33},[106,64932,64933,64935,64937,64939,64941,64943],{"class":108,"line":1193},[106,64934,1027],{"class":116},[106,64936,51328],{"class":51294},[106,64938,51310],{"class":1955},[106,64940,162],{"class":116},[106,64942,51315],{"class":221},[106,64944,51301],{"class":116},[106,64946,64947,64949,64951,64953,64955,64957],{"class":108,"line":1207},[106,64948,52138],{"class":116},[106,64950,51338],{"class":51294},[106,64952,51341],{"class":1955},[106,64954,162],{"class":116},[106,64956,51346],{"class":221},[106,64958,51301],{"class":116},[106,64960,64961,64963,64965,64967,64969],{"class":108,"line":1213},[106,64962,52138],{"class":116},[106,64964,51401],{"class":51294},[106,64966,55308],{"class":116},[106,64968,51401],{"class":51294},[106,64970,51301],{"class":116},[106,64972,64973,64975,64977],{"class":108,"line":1304},[106,64974,52138],{"class":116},[106,64976,5119],{"class":51294},[106,64978,51301],{"class":116},[106,64980,64981,64983],{"class":108,"line":1310},[106,64982,6396],{"class":51294},[106,64984,15565],{"class":116},[106,64986,64987,64989,64991,64993],{"class":108,"line":1322},[106,64988,54700],{"class":165},[106,64990,51431],{"class":116},[106,64992,308],{"class":165},[106,64994,1283],{"class":116},[106,64996,64997,64999,65001,65003],{"class":108,"line":1604},[106,64998,54689],{"class":165},[106,65000,51431],{"class":116},[106,65002,308],{"class":165},[106,65004,1283],{"class":116},[106,65006,65007],{"class":108,"line":1609},[106,65008,2179],{"class":116},[106,65010,65011],{"class":108,"line":1615},[106,65012,2392],{"emptyLinePlaceholder":33},[106,65014,65015,65018],{"class":108,"line":1620},[106,65016,65017],{"class":51294},"    table",[106,65019,15565],{"class":116},[106,65021,65022,65025,65027,65030],{"class":108,"line":1634},[106,65023,65024],{"class":165},"      border-collapse",[106,65026,51431],{"class":116},[106,65028,65029],{"class":165},"collapse",[106,65031,1283],{"class":116},[106,65033,65034,65037,65039,65041],{"class":108,"line":1639},[106,65035,65036],{"class":165},"      border-spacing",[106,65038,51431],{"class":116},[106,65040,308],{"class":165},[106,65042,1283],{"class":116},[106,65044,65045,65047,65049,65051,65053,65055,65058],{"class":108,"line":1645},[106,65046,61971],{"class":165},[106,65048,51431],{"class":116},[106,65050,334],{"class":165},[106,65052,51486],{"class":112},[106,65054,51515],{"class":165},[106,65056,65057],{"class":165}," #c0c0c0",[106,65059,1283],{"class":116},[106,65061,65062,65064,65066,65069,65071],{"class":108,"line":1666},[106,65063,54765],{"class":165},[106,65065,51431],{"class":116},[106,65067,65068],{"class":165},"500",[106,65070,51486],{"class":112},[106,65072,1283],{"class":116},[106,65074,65075,65077,65079,65081,65083,65085],{"class":108,"line":1671},[106,65076,54700],{"class":165},[106,65078,51431],{"class":116},[106,65080,428],{"class":165},[106,65082,51486],{"class":112},[106,65084,51550],{"class":165},[106,65086,1283],{"class":116},[106,65088,65089,65091,65093,65095],{"class":108,"line":1685},[106,65090,57280],{"class":165},[106,65092,51431],{"class":116},[106,65094,51586],{"class":165},[106,65096,1283],{"class":116},[106,65098,65099],{"class":108,"line":1690},[106,65100,2179],{"class":116},[106,65102,65103],{"class":108,"line":1719},[106,65104,2392],{"emptyLinePlaceholder":33},[106,65106,65107,65110],{"class":108,"line":1724},[106,65108,65109],{"class":51294},"    th",[106,65111,15565],{"class":116},[106,65113,65114,65116,65118,65121],{"class":108,"line":1741},[106,65115,54878],{"class":165},[106,65117,51431],{"class":116},[106,65119,65120],{"class":165},"#09c",[106,65122,1283],{"class":116},[106,65124,65125,65128,65130,65132,65134,65136,65139],{"class":108,"line":1746},[106,65126,65127],{"class":165},"      font",[106,65129,51431],{"class":116},[106,65131,62333],{"class":165},[106,65133,64067],{"class":165},[106,65135,51486],{"class":112},[106,65137,65138],{"class":221}," \"微软雅黑\"",[106,65140,1283],{"class":116},[106,65142,65143,65145,65147,65149],{"class":108,"line":1751},[106,65144,57410],{"class":165},[106,65146,51431],{"class":116},[106,65148,60836],{"class":165},[106,65150,1283],{"class":116},[106,65152,65153,65155,65157,65159,65161],{"class":108,"line":1756},[106,65154,54779],{"class":165},[106,65156,51431],{"class":116},[106,65158,917],{"class":165},[106,65160,51486],{"class":112},[106,65162,1283],{"class":116},[106,65164,65165],{"class":108,"line":1770},[106,65166,2179],{"class":116},[106,65168,65169],{"class":108,"line":1775},[106,65170,2392],{"emptyLinePlaceholder":33},[106,65172,65173,65176],{"class":108,"line":2569},[106,65174,65175],{"class":51294},"    td",[106,65177,15565],{"class":116},[106,65179,65180,65182,65184,65186,65188,65190,65193],{"class":108,"line":2583},[106,65181,61971],{"class":165},[106,65183,51431],{"class":116},[106,65185,334],{"class":165},[106,65187,51486],{"class":112},[106,65189,51515],{"class":165},[106,65191,65192],{"class":165}," #d0d0d0",[106,65194,1283],{"class":116},[106,65196,65197,65199,65201,65204],{"class":108,"line":2591},[106,65198,57410],{"class":165},[106,65200,51431],{"class":116},[106,65202,65203],{"class":165},"#404060",[106,65205,1283],{"class":116},[106,65207,65208,65210,65212,65214,65216],{"class":108,"line":2596},[106,65209,54689],{"class":165},[106,65211,51431],{"class":116},[106,65213,563],{"class":165},[106,65215,51486],{"class":112},[106,65217,1283],{"class":116},[106,65219,65220],{"class":108,"line":2602},[106,65221,2179],{"class":116},[106,65223,65224],{"class":108,"line":2608},[106,65225,2392],{"emptyLinePlaceholder":33},[106,65227,65228,65231],{"class":108,"line":2613},[106,65229,65230],{"class":1955},"    .allCheck",[106,65232,15565],{"class":116},[106,65234,65235,65237,65239,65241,65243],{"class":108,"line":7941},[106,65236,54765],{"class":165},[106,65238,51431],{"class":116},[106,65240,729],{"class":165},[106,65242,51486],{"class":112},[106,65244,1283],{"class":116},[106,65246,65247],{"class":108,"line":7965},[106,65248,2179],{"class":116},[106,65250,65251,65253,65255],{"class":108,"line":7970},[106,65252,52411],{"class":116},[106,65254,5119],{"class":51294},[106,65256,51301],{"class":116},[106,65258,65259,65261,65263],{"class":108,"line":7976},[106,65260,51779],{"class":116},[106,65262,51328],{"class":51294},[106,65264,51301],{"class":116},[106,65266,65267],{"class":108,"line":8003},[106,65268,2392],{"emptyLinePlaceholder":33},[106,65270,65271,65273,65275],{"class":108,"line":8008},[106,65272,1027],{"class":116},[106,65274,51794],{"class":51294},[106,65276,51301],{"class":116},[106,65278,65279,65281,65283],{"class":108,"line":8014},[106,65280,52138],{"class":116},[106,65282,254],{"class":51294},[106,65284,51301],{"class":116},[106,65286,65287,65289,65291],{"class":108,"line":8026},[106,65288,51335],{"class":116},[106,65290,260],{"class":51294},[106,65292,51301],{"class":116},[106,65294,65295,65297,65299,65301,65303,65306],{"class":108,"line":8038},[106,65296,55228],{"class":116},[106,65298,263],{"class":51294},[106,65300,53480],{"class":1955},[106,65302,162],{"class":116},[106,65304,65305],{"class":221},"\"allCheck\"",[106,65307,51301],{"class":116},[106,65309,65310,65312,65314,65316,65318,65320,65322,65324,65326,65328,65330,65333,65336,65338,65340,65342,65345,65348,65350],{"class":108,"line":8050},[106,65311,55296],{"class":116},[106,65313,53815],{"class":51294},[106,65315,53818],{"class":1955},[106,65317,162],{"class":116},[106,65319,53823],{"class":221},[106,65321,14913],{"class":1955},[106,65323,162],{"class":116},[106,65325,7645],{"class":221},[106,65327,14952],{"class":1955},[106,65329,162],{"class":116},[106,65331,65332],{"class":221},"\"checkAll\"",[106,65334,65335],{"class":116},"> \u003C",[106,65337,106],{"class":51294},[106,65339,53480],{"class":1955},[106,65341,162],{"class":116},[106,65343,65344],{"class":221},"\"all\"",[106,65346,65347],{"class":116},">全选\u003C\u002F",[106,65349,106],{"class":51294},[106,65351,51301],{"class":116},[106,65353,65354,65356,65358],{"class":108,"line":9709},[106,65355,55401],{"class":116},[106,65357,263],{"class":51294},[106,65359,51301],{"class":116},[106,65361,65362,65364,65366,65369,65371],{"class":108,"line":9734},[106,65363,55228],{"class":116},[106,65365,263],{"class":51294},[106,65367,65368],{"class":116},">商品\u003C\u002F",[106,65370,263],{"class":51294},[106,65372,51301],{"class":116},[106,65374,65375,65377,65379,65382,65384],{"class":108,"line":9757},[106,65376,55228],{"class":116},[106,65378,263],{"class":51294},[106,65380,65381],{"class":116},">商家\u003C\u002F",[106,65383,263],{"class":51294},[106,65385,51301],{"class":116},[106,65387,65388,65390,65392,65395,65397],{"class":108,"line":9781},[106,65389,55228],{"class":116},[106,65391,263],{"class":51294},[106,65393,65394],{"class":116},">价格\u003C\u002F",[106,65396,263],{"class":51294},[106,65398,51301],{"class":116},[106,65400,65401,65403,65405],{"class":108,"line":9786},[106,65402,51770],{"class":116},[106,65404,260],{"class":51294},[106,65406,51301],{"class":116},[106,65408,65409,65411,65413],{"class":108,"line":9791},[106,65410,51335],{"class":116},[106,65412,260],{"class":51294},[106,65414,51301],{"class":116},[106,65416,65417,65419,65421],{"class":108,"line":9796},[106,65418,55228],{"class":116},[106,65420,306],{"class":51294},[106,65422,51301],{"class":116},[106,65424,65425,65427,65429,65431,65433,65435,65437,65439,65442,65444,65446,65449],{"class":108,"line":9805},[106,65426,55296],{"class":116},[106,65428,53815],{"class":51294},[106,65430,53818],{"class":1955},[106,65432,162],{"class":116},[106,65434,53823],{"class":221},[106,65436,14913],{"class":1955},[106,65438,162],{"class":116},[106,65440,65441],{"class":221},"\"check\"",[106,65443,53480],{"class":1955},[106,65445,162],{"class":116},[106,65447,65448],{"class":221},"\"ck\"",[106,65450,51301],{"class":116},[106,65452,65453,65455,65457],{"class":108,"line":9810},[106,65454,55401],{"class":116},[106,65456,306],{"class":51294},[106,65458,51301],{"class":116},[106,65460,65461,65463,65465,65467,65469],{"class":108,"line":9816},[106,65462,55228],{"class":116},[106,65464,306],{"class":51294},[106,65466,61167],{"class":116},[106,65468,306],{"class":51294},[106,65470,51301],{"class":116},[106,65472,65473,65475,65477,65480,65482],{"class":108,"line":9837},[106,65474,55228],{"class":116},[106,65476,306],{"class":51294},[106,65478,65479],{"class":116},">小米\u003C\u002F",[106,65481,306],{"class":51294},[106,65483,51301],{"class":116},[106,65485,65486,65488,65490,65493,65495],{"class":108,"line":9843},[106,65487,55228],{"class":116},[106,65489,306],{"class":51294},[106,65491,65492],{"class":116},">￥1999\u003C\u002F",[106,65494,306],{"class":51294},[106,65496,51301],{"class":116},[106,65498,65499,65501,65503],{"class":108,"line":9857},[106,65500,51770],{"class":116},[106,65502,260],{"class":51294},[106,65504,51301],{"class":116},[106,65506,65507,65509,65511],{"class":108,"line":9863},[106,65508,51335],{"class":116},[106,65510,260],{"class":51294},[106,65512,51301],{"class":116},[106,65514,65515,65517,65519],{"class":108,"line":9890},[106,65516,55228],{"class":116},[106,65518,306],{"class":51294},[106,65520,51301],{"class":116},[106,65522,65523,65525,65527,65529,65531,65533,65535,65537,65539,65541,65543,65545],{"class":108,"line":9899},[106,65524,55296],{"class":116},[106,65526,53815],{"class":51294},[106,65528,53818],{"class":1955},[106,65530,162],{"class":116},[106,65532,53823],{"class":221},[106,65534,14913],{"class":1955},[106,65536,162],{"class":116},[106,65538,65441],{"class":221},[106,65540,53480],{"class":1955},[106,65542,162],{"class":116},[106,65544,65448],{"class":221},[106,65546,51301],{"class":116},[106,65548,65549,65551,65553],{"class":108,"line":9905},[106,65550,55401],{"class":116},[106,65552,306],{"class":51294},[106,65554,51301],{"class":116},[106,65556,65557,65559,65561,65564,65566],{"class":108,"line":9913},[106,65558,55228],{"class":116},[106,65560,306],{"class":51294},[106,65562,65563],{"class":116},">小米净水器\u003C\u002F",[106,65565,306],{"class":51294},[106,65567,51301],{"class":116},[106,65569,65570,65572,65574,65576,65578],{"class":108,"line":9918},[106,65571,55228],{"class":116},[106,65573,306],{"class":51294},[106,65575,65479],{"class":116},[106,65577,306],{"class":51294},[106,65579,51301],{"class":116},[106,65581,65582,65584,65586,65589,65591],{"class":108,"line":16597},[106,65583,55228],{"class":116},[106,65585,306],{"class":51294},[106,65587,65588],{"class":116},">￥4999\u003C\u002F",[106,65590,306],{"class":51294},[106,65592,51301],{"class":116},[106,65594,65595,65597,65599],{"class":108,"line":16603},[106,65596,51770],{"class":116},[106,65598,260],{"class":51294},[106,65600,51301],{"class":116},[106,65602,65603,65605,65607],{"class":108,"line":16626},[106,65604,51335],{"class":116},[106,65606,260],{"class":51294},[106,65608,51301],{"class":116},[106,65610,65611,65613,65615],{"class":108,"line":16632},[106,65612,55228],{"class":116},[106,65614,306],{"class":51294},[106,65616,51301],{"class":116},[106,65618,65619,65621,65623,65625,65627,65629,65631,65633,65635,65637,65639,65641],{"class":108,"line":16655},[106,65620,55296],{"class":116},[106,65622,53815],{"class":51294},[106,65624,53818],{"class":1955},[106,65626,162],{"class":116},[106,65628,53823],{"class":221},[106,65630,14913],{"class":1955},[106,65632,162],{"class":116},[106,65634,65441],{"class":221},[106,65636,53480],{"class":1955},[106,65638,162],{"class":116},[106,65640,65448],{"class":221},[106,65642,51301],{"class":116},[106,65644,65645,65647,65649],{"class":108,"line":16669},[106,65646,55401],{"class":116},[106,65648,306],{"class":51294},[106,65650,51301],{"class":116},[106,65652,65653,65655,65657,65660,65662],{"class":108,"line":16689},[106,65654,55228],{"class":116},[106,65656,306],{"class":51294},[106,65658,65659],{"class":116},">小米电视\u003C\u002F",[106,65661,306],{"class":51294},[106,65663,51301],{"class":116},[106,65665,65666,65668,65670,65672,65674],{"class":108,"line":16695},[106,65667,55228],{"class":116},[106,65669,306],{"class":51294},[106,65671,65479],{"class":116},[106,65673,306],{"class":51294},[106,65675,51301],{"class":116},[106,65677,65678,65680,65682,65685,65687],{"class":108,"line":16706},[106,65679,55228],{"class":116},[106,65681,306],{"class":51294},[106,65683,65684],{"class":116},">￥5999\u003C\u002F",[106,65686,306],{"class":51294},[106,65688,51301],{"class":116},[106,65690,65691,65693,65695],{"class":108,"line":16729},[106,65692,51770],{"class":116},[106,65694,260],{"class":51294},[106,65696,51301],{"class":116},[106,65698,65699,65701,65703],{"class":108,"line":16751},[106,65700,52411],{"class":116},[106,65702,254],{"class":51294},[106,65704,51301],{"class":116},[106,65706,65707,65709,65711],{"class":108,"line":16756},[106,65708,52138],{"class":116},[106,65710,51807],{"class":51294},[106,65712,51301],{"class":116},[106,65714,65715],{"class":108,"line":16762},[106,65716,65717],{"class":175},"    \u002F\u002F 1. 获取大复选框\n",[106,65719,65720,65722,65725,65727,65729,65731,65733,65736],{"class":108,"line":16776},[106,65721,11214],{"class":112},[106,65723,65724],{"class":165}," checkAll",[106,65726,13557],{"class":112},[106,65728,54390],{"class":116},[106,65730,54393],{"class":1955},[106,65732,117],{"class":116},[106,65734,65735],{"class":221},"'#checkAll'",[106,65737,123],{"class":116},[106,65739,65740],{"class":108,"line":16789},[106,65741,65742],{"class":175},"    \u002F\u002F 2. 获取所有的小复选框\n",[106,65744,65745,65747,65750,65752,65754,65756,65758,65761],{"class":108,"line":16794},[106,65746,11214],{"class":112},[106,65748,65749],{"class":165}," cks",[106,65751,13557],{"class":112},[106,65753,54390],{"class":116},[106,65755,55675],{"class":1955},[106,65757,117],{"class":116},[106,65759,65760],{"class":221},"'.ck'",[106,65762,123],{"class":116},[106,65764,65765],{"class":108,"line":16808},[106,65766,65767],{"class":175},"    \u002F\u002F 3. 点击大复选框  注册事件\n",[106,65769,65770,65773,65775,65777,65779,65781,65783],{"class":108,"line":16813},[106,65771,65772],{"class":116},"    checkAll.",[106,65774,57807],{"class":1955},[106,65776,117],{"class":116},[106,65778,57812],{"class":221},[106,65780,12428],{"class":116},[106,65782,54443],{"class":112},[106,65784,54446],{"class":116},[106,65786,65787],{"class":108,"line":16819},[106,65788,65789],{"class":175},"      \u002F\u002F 得到当前大复选框的选中状态\n",[106,65791,65792,65795],{"class":108,"line":16824},[106,65793,65794],{"class":175},"      \u002F\u002F console.log(checkAll.checked)",[106,65796,65797],{"class":175},"  \u002F\u002F 得到 是 true 或者是 false\n",[106,65799,65800],{"class":108,"line":16838},[106,65801,65802],{"class":175},"      \u002F\u002F 4. 遍历所有的小复选框 让小复选框的checked  =  大复选框的 checked\n",[106,65804,65805,65807,65809,65811,65813,65815,65817,65819,65821,65824,65826,65828,65830],{"class":108,"line":16843},[106,65806,52278],{"class":112},[106,65808,1650],{"class":116},[106,65810,51841],{"class":112},[106,65812,9431],{"class":116},[106,65814,162],{"class":112},[106,65816,4085],{"class":165},[106,65818,9438],{"class":116},[106,65820,1027],{"class":112},[106,65822,65823],{"class":116}," cks.",[106,65825,51962],{"class":165},[106,65827,3206],{"class":116},[106,65829,2284],{"class":112},[106,65831,12435],{"class":116},[106,65833,65834,65837,65839,65842],{"class":108,"line":16848},[106,65835,65836],{"class":116},"        cks[i].checked ",[106,65838,162],{"class":112},[106,65840,65841],{"class":165}," this",[106,65843,65844],{"class":116},".checked\n",[106,65846,65847],{"class":108,"line":16862},[106,65848,52392],{"class":116},[106,65850,65851],{"class":108,"line":16874},[106,65852,33455],{"class":116},[106,65854,65855],{"class":108,"line":16879},[106,65856,65857],{"class":175},"    \u002F\u002F 5. 小复选框控制大复选框\n",[106,65859,65860],{"class":108,"line":16892},[106,65861,2392],{"emptyLinePlaceholder":33},[106,65863,65864,65866,65868,65870,65872,65874,65876,65878,65880,65882,65884,65886,65888],{"class":108,"line":16897},[106,65865,3193],{"class":112},[106,65867,1650],{"class":116},[106,65869,51841],{"class":112},[106,65871,9431],{"class":116},[106,65873,162],{"class":112},[106,65875,4085],{"class":165},[106,65877,9438],{"class":116},[106,65879,1027],{"class":112},[106,65881,65823],{"class":116},[106,65883,51962],{"class":165},[106,65885,3206],{"class":116},[106,65887,2284],{"class":112},[106,65889,12435],{"class":116},[106,65891,65892],{"class":108,"line":16902},[106,65893,65894],{"class":175},"      \u002F\u002F 5.1 给所有的小复选框添加点击事件\n",[106,65896,65897,65900,65902,65904,65906,65908,65910],{"class":108,"line":16907},[106,65898,65899],{"class":116},"      cks[i].",[106,65901,57807],{"class":1955},[106,65903,117],{"class":116},[106,65905,57812],{"class":221},[106,65907,12428],{"class":116},[106,65909,54443],{"class":112},[106,65911,54446],{"class":116},[106,65913,65914],{"class":108,"line":16920},[106,65915,65916],{"class":175},"        \u002F\u002F 判断选中的小复选框个数 是不是等于  总的小复选框个数\n",[106,65918,65919],{"class":108,"line":16925},[106,65920,65921],{"class":175},"        \u002F\u002F 一定要写到点击里面，因为每次要获得最新的个数\n",[106,65923,65924],{"class":108,"line":32627},[106,65925,65926],{"class":175},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length)\n",[106,65928,65929],{"class":108,"line":32633},[106,65930,65931],{"class":175},"        \u002F\u002F console.log(document.querySelectorAll('.ck:checked').length === cks.length)\n",[106,65933,65934,65937,65939,65941,65943,65945,65948,65950,65952,65954,65956],{"class":108,"line":32639},[106,65935,65936],{"class":116},"        checkAll.checked ",[106,65938,162],{"class":112},[106,65940,54390],{"class":116},[106,65942,55675],{"class":1955},[106,65944,117],{"class":116},[106,65946,65947],{"class":221},"'.ck:checked'",[106,65949,30820],{"class":116},[106,65951,51962],{"class":165},[106,65953,57900],{"class":112},[106,65955,65823],{"class":116},[106,65957,55825],{"class":165},[106,65959,65960],{"class":108,"line":32645},[106,65961,64809],{"class":116},[106,65963,65964],{"class":108,"line":32651},[106,65965,2179],{"class":116},[106,65967,65968,65970,65972],{"class":108,"line":32662},[106,65969,52411],{"class":116},[106,65971,51807],{"class":51294},[106,65973,51301],{"class":116},[106,65975,65976,65978,65980],{"class":108,"line":32668},[106,65977,51779],{"class":116},[106,65979,51794],{"class":51294},[106,65981,51301],{"class":116},[106,65983,65984],{"class":108,"line":32688},[106,65985,2392],{"emptyLinePlaceholder":33},[106,65987,65988,65990,65992],{"class":108,"line":32694},[106,65989,51779],{"class":116},[106,65991,50629],{"class":51294},[106,65993,51301],{"class":116},[14,65995,65996],{},"一定要懂思路，反选做不出来去了解布尔值！！！",[14,65998,65999],{},"用好之间比较得到的布尔值！！！",[14,66001,66002,66003,66006,66007,1650,66010,701,66012,66015],{},"在 JS 里访问的时候，",[103,66004,66005],{},"checkbox.checked"," 是一个 ",[266,66008,66009],{},"布尔值",[103,66011,1355],{},[103,66013,66014],{},"false",")，不是字符串，也就是说js通过这个属性值可以实现对复选按钮选择与否的控制",[14,66017,66018,66019,66022,66023],{},"HTML 的 ",[103,66020,66021],{},"checked=\"checked\""," 只是 ",[266,66024,66025,66026,66029],{},"初始值；JS 的 ",[103,66027,66028],{},".checked"," 表示当前实时状态，值是个布尔值，是true和false",[14,66031,66032],{},"：checked是一个伪类选择器",[14,66034,66035],{},[23,66036],{"alt":25,"src":66037},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-126.png",[14,66039,66040,66043],{},[66041,66042],"checked",{},"是一个伪类选择器，这个伪类选择器是对被勾选的复选框的样式进行处理",[14,66045,66046],{},[23,66047],{"alt":25,"src":66048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-127.png",[48,66050,66052],{"id":66051},"_33-dom事件进阶","3.3 DOM事件进阶",[77,66054,66056],{"id":66055},"_331-事件流","3.3.1 事件流",[14,66058,66059],{},[23,66060],{"alt":25,"src":66061},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-128.png",[21991,66063,66065],{"id":66064},"_3311-事件捕获","3.3.1.1 事件捕获",[14,66067,66068],{},[23,66069],{"alt":25,"src":66070},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-129.png",[97,66072,66074],{"className":50627,"code":66073,"language":50629,"meta":25,"style":25},"\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",[103,66075,66076,66086,66100,66104,66112,66126,66146,66158,66166,66173,66185,66197,66207,66211,66215,66222,66234,66246,66256,66260,66268,66276,66280,66288,66303,66322,66330,66338,66358,66378,66394,66405,66413,66430,66441,66449,66466,66477,66485,66493,66501,66505],{"__ignoreMap":25},[106,66077,66078,66080,66082,66084],{"class":108,"line":109},[106,66079,51291],{"class":116},[106,66081,51295],{"class":51294},[106,66083,51298],{"class":1955},[106,66085,51301],{"class":116},[106,66087,66088,66090,66092,66094,66096,66098],{"class":108,"line":28},[106,66089,1027],{"class":116},[106,66091,50629],{"class":51294},[106,66093,51310],{"class":1955},[106,66095,162],{"class":116},[106,66097,51315],{"class":221},[106,66099,51301],{"class":116},[106,66101,66102],{"class":108,"line":1172},[106,66103,2392],{"emptyLinePlaceholder":33},[106,66105,66106,66108,66110],{"class":108,"line":1187},[106,66107,1027],{"class":116},[106,66109,51328],{"class":51294},[106,66111,51301],{"class":116},[106,66113,66114,66116,66118,66120,66122,66124],{"class":108,"line":1193},[106,66115,52138],{"class":116},[106,66117,51338],{"class":51294},[106,66119,51341],{"class":1955},[106,66121,162],{"class":116},[106,66123,51346],{"class":221},[106,66125,51301],{"class":116},[106,66127,66128,66130,66132,66134,66136,66138,66140,66142,66144],{"class":108,"line":1207},[106,66129,52138],{"class":116},[106,66131,51338],{"class":51294},[106,66133,14913],{"class":1955},[106,66135,162],{"class":116},[106,66137,51385],{"class":221},[106,66139,51365],{"class":1955},[106,66141,162],{"class":116},[106,66143,51392],{"class":221},[106,66145,51301],{"class":116},[106,66147,66148,66150,66152,66154,66156],{"class":108,"line":1213},[106,66149,52138],{"class":116},[106,66151,51401],{"class":51294},[106,66153,51404],{"class":116},[106,66155,51401],{"class":51294},[106,66157,51301],{"class":116},[106,66159,66160,66162,66164],{"class":108,"line":1304},[106,66161,52138],{"class":116},[106,66163,5119],{"class":51294},[106,66165,51301],{"class":116},[106,66167,66168,66171],{"class":108,"line":1310},[106,66169,66170],{"class":1955},"    .father",[106,66172,15565],{"class":116},[106,66174,66175,66177,66179,66181,66183],{"class":108,"line":1322},[106,66176,54765],{"class":165},[106,66178,51431],{"class":116},[106,66180,65068],{"class":165},[106,66182,51486],{"class":112},[106,66184,1283],{"class":116},[106,66186,66187,66189,66191,66193,66195],{"class":108,"line":1604},[106,66188,54779],{"class":165},[106,66190,51431],{"class":116},[106,66192,65068],{"class":165},[106,66194,51486],{"class":112},[106,66196,1283],{"class":116},[106,66198,66199,66201,66203,66205],{"class":108,"line":1609},[106,66200,54878],{"class":165},[106,66202,51431],{"class":116},[106,66204,51639],{"class":165},[106,66206,1283],{"class":116},[106,66208,66209],{"class":108,"line":1615},[106,66210,2179],{"class":116},[106,66212,66213],{"class":108,"line":1620},[106,66214,2392],{"emptyLinePlaceholder":33},[106,66216,66217,66220],{"class":108,"line":1634},[106,66218,66219],{"class":1955},"    .son",[106,66221,15565],{"class":116},[106,66223,66224,66226,66228,66230,66232],{"class":108,"line":1639},[106,66225,54765],{"class":165},[106,66227,51431],{"class":116},[106,66229,1714],{"class":165},[106,66231,51486],{"class":112},[106,66233,1283],{"class":116},[106,66235,66236,66238,66240,66242,66244],{"class":108,"line":1645},[106,66237,54779],{"class":165},[106,66239,51431],{"class":116},[106,66241,1714],{"class":165},[106,66243,51486],{"class":112},[106,66245,1283],{"class":116},[106,66247,66248,66250,66252,66254],{"class":108,"line":1666},[106,66249,54878],{"class":165},[106,66251,51431],{"class":116},[106,66253,54883],{"class":165},[106,66255,1283],{"class":116},[106,66257,66258],{"class":108,"line":1671},[106,66259,2179],{"class":116},[106,66261,66262,66264,66266],{"class":108,"line":1685},[106,66263,52411],{"class":116},[106,66265,5119],{"class":51294},[106,66267,51301],{"class":116},[106,66269,66270,66272,66274],{"class":108,"line":1690},[106,66271,51779],{"class":116},[106,66273,51328],{"class":51294},[106,66275,51301],{"class":116},[106,66277,66278],{"class":108,"line":1719},[106,66279,2392],{"emptyLinePlaceholder":33},[106,66281,66282,66284,66286],{"class":108,"line":1724},[106,66283,1027],{"class":116},[106,66285,51794],{"class":51294},[106,66287,51301],{"class":116},[106,66289,66290,66292,66294,66296,66298,66301],{"class":108,"line":1741},[106,66291,52138],{"class":116},[106,66293,51605],{"class":51294},[106,66295,53480],{"class":1955},[106,66297,162],{"class":116},[106,66299,66300],{"class":221},"\"father\"",[106,66302,51301],{"class":116},[106,66304,66305,66307,66309,66311,66313,66316,66318,66320],{"class":108,"line":1746},[106,66306,51335],{"class":116},[106,66308,51605],{"class":51294},[106,66310,53480],{"class":1955},[106,66312,162],{"class":116},[106,66314,66315],{"class":221},"\"son\"",[106,66317,55308],{"class":116},[106,66319,51605],{"class":51294},[106,66321,51301],{"class":116},[106,66323,66324,66326,66328],{"class":108,"line":1751},[106,66325,52411],{"class":116},[106,66327,51605],{"class":51294},[106,66329,51301],{"class":116},[106,66331,66332,66334,66336],{"class":108,"line":1756},[106,66333,52138],{"class":116},[106,66335,51807],{"class":51294},[106,66337,51301],{"class":116},[106,66339,66340,66342,66345,66347,66349,66351,66353,66356],{"class":108,"line":1770},[106,66341,11214],{"class":112},[106,66343,66344],{"class":165}," fa",[106,66346,13557],{"class":112},[106,66348,54390],{"class":116},[106,66350,54393],{"class":1955},[106,66352,117],{"class":116},[106,66354,66355],{"class":221},"'.father'",[106,66357,123],{"class":116},[106,66359,66360,66362,66365,66367,66369,66371,66373,66376],{"class":108,"line":1775},[106,66361,11214],{"class":112},[106,66363,66364],{"class":165}," son",[106,66366,13557],{"class":112},[106,66368,54390],{"class":116},[106,66370,54393],{"class":1955},[106,66372,117],{"class":116},[106,66374,66375],{"class":221},"'.son'",[106,66377,123],{"class":116},[106,66379,66380,66382,66384,66386,66388,66390,66392],{"class":108,"line":2569},[106,66381,52401],{"class":116},[106,66383,57807],{"class":1955},[106,66385,117],{"class":116},[106,66387,57812],{"class":221},[106,66389,12428],{"class":116},[106,66391,54443],{"class":112},[106,66393,54446],{"class":116},[106,66395,66396,66398,66400,66403],{"class":108,"line":2583},[106,66397,58919],{"class":1955},[106,66399,117],{"class":116},[106,66401,66402],{"class":221},"'woshiu1'",[106,66404,123],{"class":116},[106,66406,66407,66409,66411],{"class":108,"line":2591},[106,66408,54529],{"class":116},[106,66410,1355],{"class":165},[106,66412,123],{"class":116},[106,66414,66415,66418,66420,66422,66424,66426,66428],{"class":108,"line":2596},[106,66416,66417],{"class":116},"    fa.",[106,66419,57807],{"class":1955},[106,66421,117],{"class":116},[106,66423,57812],{"class":221},[106,66425,12428],{"class":116},[106,66427,54443],{"class":112},[106,66429,54446],{"class":116},[106,66431,66432,66434,66436,66439],{"class":108,"line":2602},[106,66433,58919],{"class":1955},[106,66435,117],{"class":116},[106,66437,66438],{"class":221},"'1'",[106,66440,123],{"class":116},[106,66442,66443,66445,66447],{"class":108,"line":2608},[106,66444,54529],{"class":116},[106,66446,1355],{"class":165},[106,66448,123],{"class":116},[106,66450,66451,66454,66456,66458,66460,66462,66464],{"class":108,"line":2613},[106,66452,66453],{"class":116},"    son.",[106,66455,57807],{"class":1955},[106,66457,117],{"class":116},[106,66459,57812],{"class":221},[106,66461,12428],{"class":116},[106,66463,54443],{"class":112},[106,66465,54446],{"class":116},[106,66467,66468,66470,66472,66475],{"class":108,"line":7941},[106,66469,58919],{"class":1955},[106,66471,117],{"class":116},[106,66473,66474],{"class":221},"'2'",[106,66476,123],{"class":116},[106,66478,66479,66481,66483],{"class":108,"line":7965},[106,66480,54529],{"class":116},[106,66482,1355],{"class":165},[106,66484,123],{"class":116},[106,66486,66487,66489,66491],{"class":108,"line":7970},[106,66488,52411],{"class":116},[106,66490,51807],{"class":51294},[106,66492,51301],{"class":116},[106,66494,66495,66497,66499],{"class":108,"line":7976},[106,66496,51779],{"class":116},[106,66498,51794],{"class":51294},[106,66500,51301],{"class":116},[106,66502,66503],{"class":108,"line":8003},[106,66504,2392],{"emptyLinePlaceholder":33},[106,66506,66507,66509,66511],{"class":108,"line":8008},[106,66508,51779],{"class":116},[106,66510,50629],{"class":51294},[106,66512,51301],{"class":116},[14,66514,66515],{},[23,66516],{"alt":25,"src":66517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-130.png",[14,66519,66520],{},"点击小盒子，先从最大盒子开始执行，先弹出woshiu1，再弹出1，最后弹出2；点击粉色盒子：先弹出woshiu1，再弹出1；点击浏览器其他区域，弹出woshiu1，捕获就是从最大对象（元素）开始往下找",[21991,66522,66524],{"id":66523},"_3312-事件冒泡","3.3.1.2 事件冒泡",[14,66526,66527],{},[23,66528],{"alt":25,"src":66529},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-131.png",[14,66531,66532],{},"反着来",[14,66534,66535],{},"注意是同名事件，比如都是‘click’",[21991,66537,66539],{"id":66538},"_3313-阻止冒泡","3.3.1.3 阻止冒泡",[14,66541,66542],{},[23,66543],{"alt":25,"src":66544},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-132.png",[21991,66546,66548],{"id":66547},"_3314-解绑事件","3.3.1.4 解绑事件",[14,66550,66551],{},[23,66552],{"alt":25,"src":66553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-133.png",[14,66555,66556],{},[23,66557],{"alt":25,"src":66558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-134.png",[21991,66560,66562],{"id":66561},"_3315-事件类型和注册事件的区别","3.3.1.5 事件类型和注册事件的区别",[60,66564,66565],{},[63,66566,66567],{},"事件类型的区别",[14,66569,66570],{},[23,66571],{"alt":25,"src":66572},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-135.png",[14,66574,66575],{},"mouseover有冒泡，如果想实现鼠标经过有冒泡效果，就不要使用mouseenter,用mouseover",[60,66577,66578],{"start":28},[63,66579,66580],{},"注册事件的区别",[14,66582,66583],{},[23,66584],{"alt":25,"src":66585},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-136.png",[21991,66587,66589],{"id":66588},"_3316-阻止冒泡","3.3.1.6 阻止冒泡",[14,66591,66592],{},[23,66593],{"alt":25,"src":66594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-137.png",[14,66596,66597],{},[23,66598],{"alt":25,"src":66599},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-138.png",[97,66601,66603],{"className":53061,"code":66602,"language":53063,"meta":25,"style":25},"\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",[103,66604,66605,66613,66630,66653,66661,66666,66671,66676,66680,66688,66696],{"__ignoreMap":25},[106,66606,66607,66609,66611],{"class":108,"line":109},[106,66608,1027],{"class":116},[106,66610,51794],{"class":51294},[106,66612,51301],{"class":116},[106,66614,66615,66617,66620,66623,66625,66628],{"class":108,"line":28},[106,66616,52138],{"class":116},[106,66618,66619],{"class":51294},"form",[106,66621,66622],{"class":1955}," action",[106,66624,162],{"class":116},[106,66626,66627],{"class":221},"\"http:\u002F\u002Fwww.itcast.cn\"",[106,66629,51301],{"class":116},[106,66631,66632,66634,66636,66638,66640,66643,66646,66648,66651],{"class":108,"line":1172},[106,66633,51335],{"class":116},[106,66635,53815],{"class":51294},[106,66637,53818],{"class":1955},[106,66639,162],{"class":116},[106,66641,66642],{"class":221},"\"submit\"",[106,66644,66645],{"class":1955}," value",[106,66647,162],{"class":116},[106,66649,66650],{"class":221},"\"免费注册\"",[106,66652,51301],{"class":116},[106,66654,66655,66657,66659],{"class":108,"line":1187},[106,66656,51335],{"class":116},[106,66658,51807],{"class":51294},[106,66660,51301],{"class":116},[106,66662,66663],{"class":108,"line":1193},[106,66664,66665],{"class":116},"      const form = document.querySelector('form')\n",[106,66667,66668],{"class":108,"line":1207},[106,66669,66670],{"class":116},"      form.addEventListener('submit', function (e) {\n",[106,66672,66673],{"class":108,"line":1213},[106,66674,66675],{"class":116},"        e.preventDefault()\n",[106,66677,66678],{"class":108,"line":1304},[106,66679,64809],{"class":116},[106,66681,66682,66684,66686],{"class":108,"line":1310},[106,66683,51770],{"class":116},[106,66685,51807],{"class":51294},[106,66687,51301],{"class":116},[106,66689,66690,66692,66694],{"class":108,"line":1322},[106,66691,52411],{"class":116},[106,66693,66619],{"class":51294},[106,66695,51301],{"class":116},[106,66697,66698,66700,66702],{"class":108,"line":1604},[106,66699,51779],{"class":116},[106,66701,51794],{"class":51294},[106,66703,51301],{"class":116},[14,66705,66706],{},"点击不在跳转！！！",[77,66708,66710],{"id":66709},"_332-事件委托","3.3.2 事件委托",[14,66712,66713],{},[23,66714],{"alt":25,"src":66715},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-139.png",[97,66717,66719],{"className":50627,"code":66718,"language":50629,"meta":25,"style":25},"\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",[103,66720,66721,66731,66745,66749,66757,66771,66791,66803,66811,66815,66823,66831,66843,66855,66867,66879,66891,66904,66912,66920,66925,66944,66965,66970,66975,66980,66985,66994,66998,67008,67012,67017,67022,67036,67046,67050,67054,67062,67070,67074],{"__ignoreMap":25},[106,66722,66723,66725,66727,66729],{"class":108,"line":109},[106,66724,51291],{"class":116},[106,66726,51295],{"class":51294},[106,66728,51298],{"class":1955},[106,66730,51301],{"class":116},[106,66732,66733,66735,66737,66739,66741,66743],{"class":108,"line":28},[106,66734,1027],{"class":116},[106,66736,50629],{"class":51294},[106,66738,51310],{"class":1955},[106,66740,162],{"class":116},[106,66742,51315],{"class":221},[106,66744,51301],{"class":116},[106,66746,66747],{"class":108,"line":1172},[106,66748,2392],{"emptyLinePlaceholder":33},[106,66750,66751,66753,66755],{"class":108,"line":1187},[106,66752,1027],{"class":116},[106,66754,51328],{"class":51294},[106,66756,51301],{"class":116},[106,66758,66759,66761,66763,66765,66767,66769],{"class":108,"line":1193},[106,66760,52138],{"class":116},[106,66762,51338],{"class":51294},[106,66764,51341],{"class":1955},[106,66766,162],{"class":116},[106,66768,51346],{"class":221},[106,66770,51301],{"class":116},[106,66772,66773,66775,66777,66779,66781,66783,66785,66787,66789],{"class":108,"line":1207},[106,66774,52138],{"class":116},[106,66776,51338],{"class":51294},[106,66778,14913],{"class":1955},[106,66780,162],{"class":116},[106,66782,51385],{"class":221},[106,66784,51365],{"class":1955},[106,66786,162],{"class":116},[106,66788,51392],{"class":221},[106,66790,51301],{"class":116},[106,66792,66793,66795,66797,66799,66801],{"class":108,"line":1213},[106,66794,52138],{"class":116},[106,66796,51401],{"class":51294},[106,66798,51404],{"class":116},[106,66800,51401],{"class":51294},[106,66802,51301],{"class":116},[106,66804,66805,66807,66809],{"class":108,"line":1304},[106,66806,51779],{"class":116},[106,66808,51328],{"class":51294},[106,66810,51301],{"class":116},[106,66812,66813],{"class":108,"line":1310},[106,66814,2392],{"emptyLinePlaceholder":33},[106,66816,66817,66819,66821],{"class":108,"line":1322},[106,66818,1027],{"class":116},[106,66820,51794],{"class":51294},[106,66822,51301],{"class":116},[106,66824,66825,66827,66829],{"class":108,"line":1604},[106,66826,52138],{"class":116},[106,66828,1124],{"class":51294},[106,66830,51301],{"class":116},[106,66832,66833,66835,66837,66839,66841],{"class":108,"line":1609},[106,66834,51335],{"class":116},[106,66836,63],{"class":51294},[106,66838,53960],{"class":116},[106,66840,63],{"class":51294},[106,66842,51301],{"class":116},[106,66844,66845,66847,66849,66851,66853],{"class":108,"line":1615},[106,66846,51335],{"class":116},[106,66848,63],{"class":51294},[106,66850,53979],{"class":116},[106,66852,63],{"class":51294},[106,66854,51301],{"class":116},[106,66856,66857,66859,66861,66863,66865],{"class":108,"line":1620},[106,66858,51335],{"class":116},[106,66860,63],{"class":51294},[106,66862,53998],{"class":116},[106,66864,63],{"class":51294},[106,66866,51301],{"class":116},[106,66868,66869,66871,66873,66875,66877],{"class":108,"line":1634},[106,66870,51335],{"class":116},[106,66872,63],{"class":51294},[106,66874,54017],{"class":116},[106,66876,63],{"class":51294},[106,66878,51301],{"class":116},[106,66880,66881,66883,66885,66887,66889],{"class":108,"line":1639},[106,66882,51335],{"class":116},[106,66884,63],{"class":51294},[106,66886,54036],{"class":116},[106,66888,63],{"class":51294},[106,66890,51301],{"class":116},[106,66892,66893,66895,66897,66900,66902],{"class":108,"line":1645},[106,66894,51335],{"class":116},[106,66896,14],{"class":51294},[106,66898,66899],{"class":116},">我不需要变色\u003C\u002F",[106,66901,14],{"class":51294},[106,66903,51301],{"class":116},[106,66905,66906,66908,66910],{"class":108,"line":1666},[106,66907,52411],{"class":116},[106,66909,1124],{"class":51294},[106,66911,51301],{"class":116},[106,66913,66914,66916,66918],{"class":108,"line":1671},[106,66915,52138],{"class":116},[106,66917,51807],{"class":51294},[106,66919,51301],{"class":116},[106,66921,66922],{"class":108,"line":1685},[106,66923,66924],{"class":175},"    \u002F\u002F 点击每个li，当前文字变为红色\n",[106,66926,66927,66929,66931,66933,66935,66937,66939,66942],{"class":108,"line":1690},[106,66928,11214],{"class":112},[106,66930,61286],{"class":165},[106,66932,13557],{"class":112},[106,66934,54390],{"class":116},[106,66936,54393],{"class":1955},[106,66938,117],{"class":116},[106,66940,66941],{"class":221},"'ul'",[106,66943,123],{"class":116},[106,66945,66946,66949,66951,66953,66955,66957,66959,66961,66963],{"class":108,"line":1719},[106,66947,66948],{"class":116},"    ul.",[106,66950,57807],{"class":1955},[106,66952,117],{"class":116},[106,66954,57812],{"class":221},[106,66956,12428],{"class":116},[106,66958,54443],{"class":112},[106,66960,1650],{"class":116},[106,66962,191],{"class":5209},[106,66964,12435],{"class":116},[106,66966,66967],{"class":108,"line":1724},[106,66968,66969],{"class":175},"      \u002F\u002F alert(1)\n",[106,66971,66972],{"class":108,"line":1741},[106,66973,66974],{"class":175},"      \u002F\u002F e.target就是我们点击的对象\n",[106,66976,66977],{"class":108,"line":1746},[106,66978,66979],{"class":175},"      \u002F\u002F 当点击时会获得事件对象，事件对象下面target属性中里边就是li\n",[106,66981,66982],{"class":108,"line":1751},[106,66983,66984],{"class":175},"      \u002F\u002F e.target.style.color = 'red'\n",[106,66986,66987,66989,66991],{"class":108,"line":1756},[106,66988,58238],{"class":116},[106,66990,58241],{"class":1955},[106,66992,66993],{"class":116},"(e)\n",[106,66995,66996],{"class":108,"line":1770},[106,66997,2392],{"emptyLinePlaceholder":33},[106,66999,67000,67002,67005],{"class":108,"line":1775},[106,67001,58238],{"class":116},[106,67003,67004],{"class":1955},"dir",[106,67006,67007],{"class":116},"(e.target)\n",[106,67009,67010],{"class":108,"line":2569},[106,67011,2392],{"emptyLinePlaceholder":33},[106,67013,67014],{"class":108,"line":2583},[106,67015,67016],{"class":175},"      \u002F\u002F 我们需求，我们只有点击li才会变色\n",[106,67018,67019],{"class":108,"line":2591},[106,67020,67021],{"class":175},"      \u002F\u002F 通过tagName来进行判断\n",[106,67023,67024,67026,67029,67031,67034],{"class":108,"line":2596},[106,67025,54474],{"class":112},[106,67027,67028],{"class":116}," (e.target.tagName ",[106,67030,54480],{"class":112},[106,67032,67033],{"class":221}," 'LI'",[106,67035,12435],{"class":116},[106,67037,67038,67041,67043],{"class":108,"line":2602},[106,67039,67040],{"class":116},"        e.target.style.color ",[106,67042,162],{"class":112},[106,67044,67045],{"class":221}," 'red'\n",[106,67047,67048],{"class":108,"line":2608},[106,67049,52392],{"class":116},[106,67051,67052],{"class":108,"line":2613},[106,67053,33455],{"class":116},[106,67055,67056,67058,67060],{"class":108,"line":7941},[106,67057,52411],{"class":116},[106,67059,51807],{"class":51294},[106,67061,51301],{"class":116},[106,67063,67064,67066,67068],{"class":108,"line":7965},[106,67065,51779],{"class":116},[106,67067,51794],{"class":51294},[106,67069,51301],{"class":116},[106,67071,67072],{"class":108,"line":7970},[106,67073,2392],{"emptyLinePlaceholder":33},[106,67075,67076,67078,67080],{"class":108,"line":7976},[106,67077,51779],{"class":116},[106,67079,50629],{"class":51294},[106,67081,51301],{"class":116},[14,67083,67084],{},"当进行点击时，会获得事件对象的信息，这个对象中有一个属性为target，里边存放了点击的那个对象，然后target中又有属性值为tagName为所点击对象的名字，如果只想点击确定的对象实现某功能的话，就可以使用tagName来进行判断，对于p标签，只有点击p标签的时候执行效果，使用的是",[14,67086,67087],{},"if(e.target.ragName==='P') {}",[14,67089,67090],{},"一定要大写，可能写源码的人为了区分跟获取的p对象，才必须得大写",[14,67092,67093],{},"通过事件委托的方式实现tab栏切换改造：",[14,67095,67096],{},"一定要记住自定义属性！！！！！！",[14,67098,67099],{},"自定义属性内容都存放在了dataset这个属性中了，也就是获取值的时候就得",[14,67101,67102],{},"id是自定义的属性名",[14,67104,67105],{},"dataset.id 获取的是后面自定义属性的内容（标号），这些内容是个字符串，如果需要的是数字的话可以用parseint()，优先用隐式转换，直接在前加个+就ok",[97,67107,67109],{"className":50627,"code":67108,"language":50629,"meta":25,"style":25},"\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",[103,67110,67111,67121,67135,67139,67147,67161,67181,67201,67213,67221,67227,67237,67247,67251,67255,67261,67273,67285,67297,67313,67317,67321,67327,67339,67351,67363,67373,67383,67387,67391,67399,67411,67421,67433,67437,67441,67449,67459,67469,67479,67483,67487,67497,67511,67523,67527,67531,67543,67553,67569,67579,67583,67587,67601,67611,67621,67625,67629,67635,67649,67653,67657,67665,67675,67679,67683,67692,67702,67706,67714,67722,67726,67734,67748,67762,67774,67782,67821,67853,67885,67917,67949,67957,67965,67979,68013,68047,68081,68115,68149,68157,68165,68173,68178,68183,68202,68207,68227,68235,68240,68253,68274,68287,68291,68296,68301,68314,68334,68362,68366,68370,68374,68382,68390,68394],{"__ignoreMap":25},[106,67112,67113,67115,67117,67119],{"class":108,"line":109},[106,67114,51291],{"class":116},[106,67116,51295],{"class":51294},[106,67118,51298],{"class":1955},[106,67120,51301],{"class":116},[106,67122,67123,67125,67127,67129,67131,67133],{"class":108,"line":28},[106,67124,1027],{"class":116},[106,67126,50629],{"class":51294},[106,67128,51310],{"class":1955},[106,67130,162],{"class":116},[106,67132,51315],{"class":221},[106,67134,51301],{"class":116},[106,67136,67137],{"class":108,"line":1172},[106,67138,2392],{"emptyLinePlaceholder":33},[106,67140,67141,67143,67145],{"class":108,"line":1187},[106,67142,1027],{"class":116},[106,67144,51328],{"class":51294},[106,67146,51301],{"class":116},[106,67148,67149,67151,67153,67155,67157,67159],{"class":108,"line":1193},[106,67150,52138],{"class":116},[106,67152,51338],{"class":51294},[106,67154,51341],{"class":1955},[106,67156,162],{"class":116},[106,67158,51346],{"class":221},[106,67160,59121],{"class":116},[106,67162,67163,67165,67167,67169,67171,67173,67175,67177,67179],{"class":108,"line":1207},[106,67164,52138],{"class":116},[106,67166,51338],{"class":51294},[106,67168,51357],{"class":1955},[106,67170,162],{"class":116},[106,67172,51362],{"class":221},[106,67174,51365],{"class":1955},[106,67176,162],{"class":116},[106,67178,51370],{"class":221},[106,67180,59121],{"class":116},[106,67182,67183,67185,67187,67189,67191,67193,67195,67197,67199],{"class":108,"line":1213},[106,67184,52138],{"class":116},[106,67186,51338],{"class":51294},[106,67188,14913],{"class":1955},[106,67190,162],{"class":116},[106,67192,51385],{"class":221},[106,67194,51365],{"class":1955},[106,67196,162],{"class":116},[106,67198,51392],{"class":221},[106,67200,59121],{"class":116},[106,67202,67203,67205,67207,67209,67211],{"class":108,"line":1304},[106,67204,52138],{"class":116},[106,67206,51401],{"class":51294},[106,67208,63619],{"class":116},[106,67210,51401],{"class":51294},[106,67212,51301],{"class":116},[106,67214,67215,67217,67219],{"class":108,"line":1310},[106,67216,52138],{"class":116},[106,67218,5119],{"class":51294},[106,67220,51301],{"class":116},[106,67222,67223,67225],{"class":108,"line":1322},[106,67224,6396],{"class":51294},[106,67226,15565],{"class":116},[106,67228,67229,67231,67233,67235],{"class":108,"line":1604},[106,67230,54700],{"class":165},[106,67232,51431],{"class":116},[106,67234,308],{"class":165},[106,67236,1283],{"class":116},[106,67238,67239,67241,67243,67245],{"class":108,"line":1609},[106,67240,54689],{"class":165},[106,67242,51431],{"class":116},[106,67244,308],{"class":165},[106,67246,1283],{"class":116},[106,67248,67249],{"class":108,"line":1615},[106,67250,2179],{"class":116},[106,67252,67253],{"class":108,"line":1620},[106,67254,2392],{"emptyLinePlaceholder":33},[106,67256,67257,67259],{"class":108,"line":1634},[106,67258,63670],{"class":1955},[106,67260,15565],{"class":116},[106,67262,67263,67265,67267,67269,67271],{"class":108,"line":1639},[106,67264,54765],{"class":165},[106,67266,51431],{"class":116},[106,67268,63681],{"class":165},[106,67270,51486],{"class":112},[106,67272,1283],{"class":116},[106,67274,67275,67277,67279,67281,67283],{"class":108,"line":1645},[106,67276,54779],{"class":165},[106,67278,51431],{"class":116},[106,67280,63694],{"class":165},[106,67282,51486],{"class":112},[106,67284,1283],{"class":116},[106,67286,67287,67289,67291,67293,67295],{"class":108,"line":1666},[106,67288,54700],{"class":165},[106,67290,51431],{"class":116},[106,67292,817],{"class":165},[106,67294,51486],{"class":112},[106,67296,1283],{"class":116},[106,67298,67299,67301,67303,67305,67307,67309,67311],{"class":108,"line":1671},[106,67300,61971],{"class":165},[106,67302,51431],{"class":116},[106,67304,334],{"class":165},[106,67306,51486],{"class":112},[106,67308,51515],{"class":165},[106,67310,62238],{"class":165},[106,67312,1283],{"class":116},[106,67314,67315],{"class":108,"line":1685},[106,67316,2179],{"class":116},[106,67318,67319],{"class":108,"line":1690},[106,67320,2392],{"emptyLinePlaceholder":33},[106,67322,67323,67325],{"class":108,"line":1719},[106,67324,63739],{"class":1955},[106,67326,15565],{"class":116},[106,67328,67329,67331,67333,67335,67337],{"class":108,"line":1724},[106,67330,54765],{"class":165},[106,67332,51431],{"class":116},[106,67334,428],{"class":165},[106,67336,445],{"class":112},[106,67338,1283],{"class":116},[106,67340,67341,67343,67345,67347,67349],{"class":108,"line":1741},[106,67342,54779],{"class":165},[106,67344,51431],{"class":116},[106,67346,1024],{"class":165},[106,67348,51486],{"class":112},[106,67350,1283],{"class":116},[106,67352,67353,67355,67357,67359,67361],{"class":108,"line":1746},[106,67354,57353],{"class":165},[106,67356,51431],{"class":116},[106,67358,1024],{"class":165},[106,67360,51486],{"class":112},[106,67362,1283],{"class":116},[106,67364,67365,67367,67369,67371],{"class":108,"line":1751},[106,67366,55003],{"class":165},[106,67368,51431],{"class":116},[106,67370,51471],{"class":165},[106,67372,1283],{"class":116},[106,67374,67375,67377,67379,67381],{"class":108,"line":1756},[106,67376,55014],{"class":165},[106,67378,51431],{"class":116},[106,67380,51662],{"class":165},[106,67382,1283],{"class":116},[106,67384,67385],{"class":108,"line":1770},[106,67386,2179],{"class":116},[106,67388,67389],{"class":108,"line":1775},[106,67390,2392],{"emptyLinePlaceholder":33},[106,67392,67393,67395,67397],{"class":108,"line":2569},[106,67394,63739],{"class":1955},[106,67396,63812],{"class":51294},[106,67398,15565],{"class":116},[106,67400,67401,67403,67405,67407,67409],{"class":108,"line":2583},[106,67402,54916],{"class":165},[106,67404,51431],{"class":116},[106,67406,917],{"class":165},[106,67408,51486],{"class":112},[106,67410,1283],{"class":116},[106,67412,67413,67415,67417,67419],{"class":108,"line":2591},[106,67414,62328],{"class":165},[106,67416,51431],{"class":116},[106,67418,63835],{"class":165},[106,67420,1283],{"class":116},[106,67422,67423,67425,67427,67429,67431],{"class":108,"line":2596},[106,67424,61994],{"class":165},[106,67426,51431],{"class":116},[106,67428,817],{"class":165},[106,67430,51486],{"class":112},[106,67432,1283],{"class":116},[106,67434,67435],{"class":108,"line":2602},[106,67436,2179],{"class":116},[106,67438,67439],{"class":108,"line":2608},[106,67440,2392],{"emptyLinePlaceholder":33},[106,67442,67443,67445,67447],{"class":108,"line":2613},[106,67444,63739],{"class":1955},[106,67446,61286],{"class":51294},[106,67448,15565],{"class":116},[106,67450,67451,67453,67455,67457],{"class":108,"line":7941},[106,67452,54726],{"class":165},[106,67454,51431],{"class":116},[106,67456,54731],{"class":165},[106,67458,1283],{"class":116},[106,67460,67461,67463,67465,67467],{"class":108,"line":7965},[106,67462,55003],{"class":165},[106,67464,51431],{"class":116},[106,67466,51471],{"class":165},[106,67468,1283],{"class":116},[106,67470,67471,67473,67475,67477],{"class":108,"line":7970},[106,67472,55014],{"class":165},[106,67474,51431],{"class":116},[106,67476,51574],{"class":165},[106,67478,1283],{"class":116},[106,67480,67481],{"class":108,"line":7976},[106,67482,2179],{"class":116},[106,67484,67485],{"class":108,"line":8003},[106,67486,2392],{"emptyLinePlaceholder":33},[106,67488,67489,67491,67493,67495],{"class":108,"line":8008},[106,67490,63739],{"class":1955},[106,67492,61286],{"class":51294},[106,67494,55069],{"class":51294},[106,67496,15565],{"class":116},[106,67498,67499,67501,67503,67505,67507,67509],{"class":108,"line":8014},[106,67500,54700],{"class":165},[106,67502,51431],{"class":116},[106,67504,308],{"class":165},[106,67506,8943],{"class":165},[106,67508,51486],{"class":112},[106,67510,1283],{"class":116},[106,67512,67513,67515,67517,67519,67521],{"class":108,"line":8026},[106,67514,54916],{"class":165},[106,67516,51431],{"class":116},[106,67518,666],{"class":165},[106,67520,51486],{"class":112},[106,67522,1283],{"class":116},[106,67524,67525],{"class":108,"line":8038},[106,67526,2179],{"class":116},[106,67528,67529],{"class":108,"line":8050},[106,67530,2392],{"emptyLinePlaceholder":33},[106,67532,67533,67535,67537,67539,67541],{"class":108,"line":9709},[106,67534,63739],{"class":1955},[106,67536,61286],{"class":51294},[106,67538,55069],{"class":51294},[106,67540,1391],{"class":51294},[106,67542,15565],{"class":116},[106,67544,67545,67547,67549,67551],{"class":108,"line":9734},[106,67546,63964],{"class":165},[106,67548,51431],{"class":116},[106,67550,54731],{"class":165},[106,67552,1283],{"class":116},[106,67554,67555,67557,67559,67561,67563,67565,67567],{"class":108,"line":9757},[106,67556,62226],{"class":165},[106,67558,51431],{"class":116},[106,67560,194],{"class":165},[106,67562,51486],{"class":112},[106,67564,51515],{"class":165},[106,67566,63985],{"class":165},[106,67568,1283],{"class":116},[106,67570,67571,67573,67575,67577],{"class":108,"line":9781},[106,67572,57410],{"class":165},[106,67574,51431],{"class":116},[106,67576,62363],{"class":165},[106,67578,1283],{"class":116},[106,67580,67581],{"class":108,"line":9786},[106,67582,2179],{"class":116},[106,67584,67585],{"class":108,"line":9791},[106,67586,2392],{"emptyLinePlaceholder":33},[106,67588,67589,67591,67593,67595,67597,67599],{"class":108,"line":9796},[106,67590,63739],{"class":1955},[106,67592,61286],{"class":51294},[106,67594,55069],{"class":51294},[106,67596,1391],{"class":51294},[106,67598,64018],{"class":1955},[106,67600,15565],{"class":116},[106,67602,67603,67605,67607,67609],{"class":108,"line":9805},[106,67604,61785],{"class":165},[106,67606,51431],{"class":116},[106,67608,64029],{"class":165},[106,67610,1283],{"class":116},[106,67612,67613,67615,67617,67619],{"class":108,"line":9810},[106,67614,57410],{"class":165},[106,67616,51431],{"class":116},[106,67618,64029],{"class":165},[106,67620,1283],{"class":116},[106,67622,67623],{"class":108,"line":9816},[106,67624,2179],{"class":116},[106,67626,67627],{"class":108,"line":9837},[106,67628,2392],{"emptyLinePlaceholder":33},[106,67630,67631,67633],{"class":108,"line":9843},[106,67632,64054],{"class":1955},[106,67634,15565],{"class":116},[106,67636,67637,67639,67641,67643,67645,67647],{"class":108,"line":9857},[106,67638,54689],{"class":165},[106,67640,51431],{"class":116},[106,67642,308],{"class":165},[106,67644,64067],{"class":165},[106,67646,51486],{"class":112},[106,67648,1283],{"class":116},[106,67650,67651],{"class":108,"line":9863},[106,67652,2179],{"class":116},[106,67654,67655],{"class":108,"line":9890},[106,67656,2392],{"emptyLinePlaceholder":33},[106,67658,67659,67661,67663],{"class":108,"line":9899},[106,67660,64054],{"class":1955},[106,67662,62168],{"class":1955},[106,67664,15565],{"class":116},[106,67666,67667,67669,67671,67673],{"class":108,"line":9905},[106,67668,55003],{"class":165},[106,67670,51431],{"class":116},[106,67672,54731],{"class":165},[106,67674,1283],{"class":116},[106,67676,67677],{"class":108,"line":9913},[106,67678,2179],{"class":116},[106,67680,67681],{"class":108,"line":9918},[106,67682,2392],{"emptyLinePlaceholder":33},[106,67684,67685,67687,67690],{"class":108,"line":16597},[106,67686,64054],{"class":1955},[106,67688,67689],{"class":1955}," .active",[106,67691,15565],{"class":116},[106,67693,67694,67696,67698,67700],{"class":108,"line":16603},[106,67695,55003],{"class":165},[106,67697,51431],{"class":116},[106,67699,60863],{"class":165},[106,67701,1283],{"class":116},[106,67703,67704],{"class":108,"line":16626},[106,67705,2179],{"class":116},[106,67707,67708,67710,67712],{"class":108,"line":16632},[106,67709,52411],{"class":116},[106,67711,5119],{"class":51294},[106,67713,51301],{"class":116},[106,67715,67716,67718,67720],{"class":108,"line":16655},[106,67717,51779],{"class":116},[106,67719,51328],{"class":51294},[106,67721,51301],{"class":116},[106,67723,67724],{"class":108,"line":16669},[106,67725,2392],{"emptyLinePlaceholder":33},[106,67727,67728,67730,67732],{"class":108,"line":16689},[106,67729,1027],{"class":116},[106,67731,51794],{"class":51294},[106,67733,51301],{"class":116},[106,67735,67736,67738,67740,67742,67744,67746],{"class":108,"line":16695},[106,67737,52138],{"class":116},[106,67739,51605],{"class":51294},[106,67741,53480],{"class":1955},[106,67743,162],{"class":116},[106,67745,64169],{"class":221},[106,67747,51301],{"class":116},[106,67749,67750,67752,67754,67756,67758,67760],{"class":108,"line":16706},[106,67751,51335],{"class":116},[106,67753,51605],{"class":51294},[106,67755,53480],{"class":1955},[106,67757,162],{"class":116},[106,67759,64184],{"class":221},[106,67761,51301],{"class":116},[106,67763,67764,67766,67768,67770,67772],{"class":108,"line":16729},[106,67765,55228],{"class":116},[106,67767,77],{"class":51294},[106,67769,64195],{"class":116},[106,67771,77],{"class":51294},[106,67773,51301],{"class":116},[106,67775,67776,67778,67780],{"class":108,"line":16751},[106,67777,55228],{"class":116},[106,67779,1124],{"class":51294},[106,67781,51301],{"class":116},[106,67783,67784,67786,67788,67790,67792,67794,67796,67798,67800,67802,67804,67806,67808,67811,67813,67815,67817,67819],{"class":108,"line":16756},[106,67785,55296],{"class":116},[106,67787,63],{"class":51294},[106,67789,61046],{"class":116},[106,67791,355],{"class":51294},[106,67793,53480],{"class":1955},[106,67795,162],{"class":116},[106,67797,59700],{"class":221},[106,67799,61051],{"class":1955},[106,67801,162],{"class":116},[106,67803,64230],{"class":221},[106,67805,53945],{"class":1955},[106,67807,162],{"class":116},[106,67809,67810],{"class":221},"\"0\"",[106,67812,64233],{"class":116},[106,67814,355],{"class":51294},[106,67816,55308],{"class":116},[106,67818,63],{"class":51294},[106,67820,51301],{"class":116},[106,67822,67823,67825,67827,67829,67831,67833,67835,67837,67839,67841,67843,67845,67847,67849,67851],{"class":108,"line":16762},[106,67824,55296],{"class":116},[106,67826,63],{"class":51294},[106,67828,61046],{"class":116},[106,67830,355],{"class":51294},[106,67832,61051],{"class":1955},[106,67834,162],{"class":116},[106,67836,64230],{"class":221},[106,67838,53945],{"class":1955},[106,67840,162],{"class":116},[106,67842,3670],{"class":221},[106,67844,64260],{"class":116},[106,67846,355],{"class":51294},[106,67848,55308],{"class":116},[106,67850,63],{"class":51294},[106,67852,51301],{"class":116},[106,67854,67855,67857,67859,67861,67863,67865,67867,67869,67871,67873,67875,67877,67879,67881,67883],{"class":108,"line":16776},[106,67856,55296],{"class":116},[106,67858,63],{"class":51294},[106,67860,61046],{"class":116},[106,67862,355],{"class":51294},[106,67864,61051],{"class":1955},[106,67866,162],{"class":116},[106,67868,64230],{"class":221},[106,67870,53945],{"class":1955},[106,67872,162],{"class":116},[106,67874,3693],{"class":221},[106,67876,64287],{"class":116},[106,67878,355],{"class":51294},[106,67880,55308],{"class":116},[106,67882,63],{"class":51294},[106,67884,51301],{"class":116},[106,67886,67887,67889,67891,67893,67895,67897,67899,67901,67903,67905,67907,67909,67911,67913,67915],{"class":108,"line":16789},[106,67888,55296],{"class":116},[106,67890,63],{"class":51294},[106,67892,61046],{"class":116},[106,67894,355],{"class":51294},[106,67896,61051],{"class":1955},[106,67898,162],{"class":116},[106,67900,64230],{"class":221},[106,67902,53945],{"class":1955},[106,67904,162],{"class":116},[106,67906,3706],{"class":221},[106,67908,64314],{"class":116},[106,67910,355],{"class":51294},[106,67912,55308],{"class":116},[106,67914,63],{"class":51294},[106,67916,51301],{"class":116},[106,67918,67919,67921,67923,67925,67927,67929,67931,67933,67935,67937,67939,67941,67943,67945,67947],{"class":108,"line":16794},[106,67920,55296],{"class":116},[106,67922,63],{"class":51294},[106,67924,61046],{"class":116},[106,67926,355],{"class":51294},[106,67928,61051],{"class":1955},[106,67930,162],{"class":116},[106,67932,64230],{"class":221},[106,67934,53945],{"class":1955},[106,67936,162],{"class":116},[106,67938,3719],{"class":221},[106,67940,64341],{"class":116},[106,67942,355],{"class":51294},[106,67944,55308],{"class":116},[106,67946,63],{"class":51294},[106,67948,51301],{"class":116},[106,67950,67951,67953,67955],{"class":108,"line":16808},[106,67952,55401],{"class":116},[106,67954,1124],{"class":51294},[106,67956,51301],{"class":116},[106,67958,67959,67961,67963],{"class":108,"line":16813},[106,67960,51770],{"class":116},[106,67962,51605],{"class":51294},[106,67964,51301],{"class":116},[106,67966,67967,67969,67971,67973,67975,67977],{"class":108,"line":16819},[106,67968,51335],{"class":116},[106,67970,51605],{"class":51294},[106,67972,53480],{"class":1955},[106,67974,162],{"class":116},[106,67976,64378],{"class":221},[106,67978,51301],{"class":116},[106,67980,67981,67983,67985,67987,67989,67991,67993,67995,67997,67999,68001,68003,68005,68007,68009,68011],{"class":108,"line":16824},[106,67982,55228],{"class":116},[106,67984,51605],{"class":51294},[106,67986,53480],{"class":1955},[106,67988,162],{"class":116},[106,67990,64393],{"class":221},[106,67992,61046],{"class":116},[106,67994,23],{"class":51294},[106,67996,55233],{"class":1955},[106,67998,162],{"class":116},[106,68000,64404],{"class":221},[106,68002,55241],{"class":1955},[106,68004,162],{"class":116},[106,68006,7645],{"class":221},[106,68008,64413],{"class":116},[106,68010,51605],{"class":51294},[106,68012,51301],{"class":116},[106,68014,68015,68017,68019,68021,68023,68025,68027,68029,68031,68033,68035,68037,68039,68041,68043,68045],{"class":108,"line":16838},[106,68016,55228],{"class":116},[106,68018,51605],{"class":51294},[106,68020,53480],{"class":1955},[106,68022,162],{"class":116},[106,68024,62617],{"class":221},[106,68026,61046],{"class":116},[106,68028,23],{"class":51294},[106,68030,55233],{"class":1955},[106,68032,162],{"class":116},[106,68034,64440],{"class":221},[106,68036,55241],{"class":1955},[106,68038,162],{"class":116},[106,68040,7645],{"class":221},[106,68042,64413],{"class":116},[106,68044,51605],{"class":51294},[106,68046,51301],{"class":116},[106,68048,68049,68051,68053,68055,68057,68059,68061,68063,68065,68067,68069,68071,68073,68075,68077,68079],{"class":108,"line":16843},[106,68050,55228],{"class":116},[106,68052,51605],{"class":51294},[106,68054,53480],{"class":1955},[106,68056,162],{"class":116},[106,68058,62617],{"class":221},[106,68060,61046],{"class":116},[106,68062,23],{"class":51294},[106,68064,55233],{"class":1955},[106,68066,162],{"class":116},[106,68068,64475],{"class":221},[106,68070,55241],{"class":1955},[106,68072,162],{"class":116},[106,68074,7645],{"class":221},[106,68076,64413],{"class":116},[106,68078,51605],{"class":51294},[106,68080,51301],{"class":116},[106,68082,68083,68085,68087,68089,68091,68093,68095,68097,68099,68101,68103,68105,68107,68109,68111,68113],{"class":108,"line":16848},[106,68084,55228],{"class":116},[106,68086,51605],{"class":51294},[106,68088,53480],{"class":1955},[106,68090,162],{"class":116},[106,68092,62617],{"class":221},[106,68094,61046],{"class":116},[106,68096,23],{"class":51294},[106,68098,55233],{"class":1955},[106,68100,162],{"class":116},[106,68102,64510],{"class":221},[106,68104,55241],{"class":1955},[106,68106,162],{"class":116},[106,68108,7645],{"class":221},[106,68110,64413],{"class":116},[106,68112,51605],{"class":51294},[106,68114,51301],{"class":116},[106,68116,68117,68119,68121,68123,68125,68127,68129,68131,68133,68135,68137,68139,68141,68143,68145,68147],{"class":108,"line":16862},[106,68118,55228],{"class":116},[106,68120,51605],{"class":51294},[106,68122,53480],{"class":1955},[106,68124,162],{"class":116},[106,68126,62617],{"class":221},[106,68128,61046],{"class":116},[106,68130,23],{"class":51294},[106,68132,55233],{"class":1955},[106,68134,162],{"class":116},[106,68136,64545],{"class":221},[106,68138,55241],{"class":1955},[106,68140,162],{"class":116},[106,68142,7645],{"class":221},[106,68144,64413],{"class":116},[106,68146,51605],{"class":51294},[106,68148,51301],{"class":116},[106,68150,68151,68153,68155],{"class":108,"line":16874},[106,68152,51770],{"class":116},[106,68154,51605],{"class":51294},[106,68156,51301],{"class":116},[106,68158,68159,68161,68163],{"class":108,"line":16879},[106,68160,52411],{"class":116},[106,68162,51605],{"class":51294},[106,68164,51301],{"class":116},[106,68166,68167,68169,68171],{"class":108,"line":16892},[106,68168,52138],{"class":116},[106,68170,51807],{"class":51294},[106,68172,51301],{"class":116},[106,68174,68175],{"class":108,"line":16897},[106,68176,68177],{"class":175},"    \u002F\u002F 采取事件委托的形式，tab栏切换\n",[106,68179,68180],{"class":108,"line":16902},[106,68181,68182],{"class":175},"    \u002F\u002F 1.获取ul父元素，因为ul只有一个\n",[106,68184,68185,68187,68189,68191,68193,68195,68197,68200],{"class":108,"line":16907},[106,68186,11214],{"class":112},[106,68188,61286],{"class":165},[106,68190,13557],{"class":112},[106,68192,54390],{"class":116},[106,68194,54393],{"class":1955},[106,68196,117],{"class":116},[106,68198,68199],{"class":221},"'.tab-nav ul'",[106,68201,123],{"class":116},[106,68203,68204],{"class":108,"line":16920},[106,68205,68206],{"class":175},"    \u002F\u002F 2.添加事件\n",[106,68208,68209,68211,68213,68215,68217,68219,68221,68223,68225],{"class":108,"line":16925},[106,68210,66948],{"class":116},[106,68212,57807],{"class":1955},[106,68214,117],{"class":116},[106,68216,57812],{"class":221},[106,68218,12428],{"class":116},[106,68220,54443],{"class":112},[106,68222,1650],{"class":116},[106,68224,191],{"class":5209},[106,68226,12435],{"class":116},[106,68228,68229,68231,68233],{"class":108,"line":32627},[106,68230,58238],{"class":116},[106,68232,67004],{"class":1955},[106,68234,67007],{"class":116},[106,68236,68237],{"class":108,"line":32633},[106,68238,68239],{"class":175},"      \u002F\u002Fe.targer是我们点击的对象\n",[106,68241,68242,68244,68246,68248,68251],{"class":108,"line":32639},[106,68243,54474],{"class":112},[106,68245,67028],{"class":116},[106,68247,54480],{"class":112},[106,68249,68250],{"class":221}," 'A'",[106,68252,12435],{"class":116},[106,68254,68255,68257,68259,68261,68264,68266,68268,68270,68272],{"class":108,"line":32645},[106,68256,51919],{"class":116},[106,68258,54393],{"class":1955},[106,68260,117],{"class":116},[106,68262,68263],{"class":221},"'.active'",[106,68265,56997],{"class":116},[106,68267,57000],{"class":1955},[106,68269,117],{"class":116},[106,68271,64708],{"class":221},[106,68273,123],{"class":116},[106,68275,68276,68279,68281,68283,68285],{"class":108,"line":32651},[106,68277,68278],{"class":116},"        e.target.classList.",[106,68280,5327],{"class":1955},[106,68282,117],{"class":116},[106,68284,64708],{"class":221},[106,68286,123],{"class":116},[106,68288,68289],{"class":108,"line":32662},[106,68290,2392],{"emptyLinePlaceholder":33},[106,68292,68293],{"class":108,"line":32668},[106,68294,68295],{"class":175},"        \u002F\u002F 下面大盒子模块\n",[106,68297,68298],{"class":108,"line":32688},[106,68299,68300],{"class":175},"        \u002F\u002F console.log(e.target.dataset.id)\n",[106,68302,68303,68305,68307,68309,68311],{"class":108,"line":32694},[106,68304,61264],{"class":112},[106,68306,3024],{"class":165},[106,68308,13557],{"class":112},[106,68310,45560],{"class":112},[106,68312,68313],{"class":116},"e.target.dataset.id\n",[106,68315,68316,68318,68320,68322,68324,68326,68328,68330,68332],{"class":108,"line":32705},[106,68317,51919],{"class":116},[106,68319,54393],{"class":1955},[106,68321,117],{"class":116},[106,68323,64756],{"class":221},[106,68325,56997],{"class":116},[106,68327,57000],{"class":1955},[106,68329,117],{"class":116},[106,68331,64708],{"class":221},[106,68333,123],{"class":116},[106,68335,68336,68338,68340,68342,68344,68346,68348,68350,68352,68354,68356,68358,68360],{"class":108,"line":32711},[106,68337,51919],{"class":116},[106,68339,54393],{"class":1955},[106,68341,117],{"class":116},[106,68343,64782],{"class":221},[106,68345,558],{"class":116},[106,68347,45560],{"class":112},[106,68349,25112],{"class":165},[106,68351,57026],{"class":221},[106,68353,56997],{"class":116},[106,68355,5327],{"class":1955},[106,68357,117],{"class":116},[106,68359,64708],{"class":221},[106,68361,123],{"class":116},[106,68363,68364],{"class":108,"line":32717},[106,68365,2392],{"emptyLinePlaceholder":33},[106,68367,68368],{"class":108,"line":32723},[106,68369,52392],{"class":116},[106,68371,68372],{"class":108,"line":32729},[106,68373,33455],{"class":116},[106,68375,68376,68378,68380],{"class":108,"line":32735},[106,68377,52411],{"class":116},[106,68379,51807],{"class":51294},[106,68381,51301],{"class":116},[106,68383,68384,68386,68388],{"class":108,"line":32741},[106,68385,51779],{"class":116},[106,68387,51794],{"class":51294},[106,68389,51301],{"class":116},[106,68391,68392],{"class":108,"line":32747},[106,68393,2392],{"emptyLinePlaceholder":33},[106,68395,68396,68398,68400],{"class":108,"line":32767},[106,68397,51779],{"class":116},[106,68399,50629],{"class":51294},[106,68401,51301],{"class":116},[77,68403,68405],{"id":68404},"_333-页面加载事件","3.3.3 页面加载事件",[60,68407,68408],{},[63,68409,68410],{},"load",[14,68412,68413],{},[23,68414],{"alt":25,"src":68415},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-140.png",[14,68417,68418],{},"window代表整个窗口，比document还要大",[14,68420,68421],{},"并不一定非得window才可以用，其他的DOM对象也可以用",[14,68423,68424],{},"img.addEventListener('load', function () {",[14,68426,68427],{},"\u002F\u002F 等待图片加载完毕，再去执行里面的代码",[14,68429,52458],{},[60,68431,68432],{"start":28},[63,68433,68434],{},"DOMContentLoaded",[14,68436,68437],{},[23,68438],{"alt":25,"src":68439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-141.png",[14,68441,68442],{},"这个主要是给html标签，给的是文档进行处理的，所以不是对整个页面，不是window,是document",[77,68444,68446],{"id":68445},"_334-元素滚动事件","3.3.4 元素滚动事件",[14,68448,68449],{},[23,68450],{"alt":25,"src":68451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-142.png",[14,68453,68454],{},[23,68455],{"alt":25,"src":68456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-143.png",[14,68458,68459],{},[23,68460],{"alt":25,"src":68461},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-144.png",[14,68463,68464],{},"scrollTop和scrollLeft都是属性，他不是方法，所以后面不需要加括号",[14,68466,68467],{},"获得的是数字型数据，不带单位",[14,68469,68470],{},"scrollTop可读写，既可以获得数据，也可以进行赋值操作",[14,68472,68473],{},"body作为document的属性可以直接通过document.boby进行获取，但是html不可以这样获取",[14,68475,68476],{},"它是通过document.documentElement来获取",[14,68478,68479],{},[23,68480],{"alt":25,"src":68481},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-145.png",[14,68483,68484],{},"让页面滚动，scrollTo()是方法，上边那个scrollTop是属性值",[77,68486,68488],{"id":68487},"_335-页面缩放事件","3.3.5 页面缩放事件",[14,68490,68491],{},[23,68492],{"alt":25,"src":68493},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-146.png",[14,68495,68496],{},[23,68497],{"alt":25,"src":68498},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-147.png",[77,68500,68502],{"id":68501},"_336-元素尺寸位置","3.3.6 元素尺寸位置",[14,68504,68505],{},[23,68506],{"alt":25,"src":68507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-148.png",[14,68509,68510],{},"offsetWidth和offsetHeight相比于clientWidth和clientHeight来说多了包含边框",[14,68512,68513],{},[23,68514],{"alt":25,"src":68515},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-149.png",[14,68517,68518],{},"scrollLeft和scrollTop与滚动有关系，是读写的，而offsetLeft和offsetTop与盒子的位置有关系，只可以读取，不可以进行赋值操作",[14,68520,68521],{},"offsetTop和offsetLeft 得到位置以带有定位的父级为准，如果都没有则以 文档左上角为准",[14,68523,68524],{},"pageX和pageY可以获取鼠标在页面中的坐标，要搭配事件对象使用",[14,68526,68527],{},"大盒子中套了一个小盒子，大盒子为相对定位，小盒子为绝对定位，则我对小盒子使用offsetTop和offsetLeft获取的位置是从小盒子的外边框到大盒子的内边框的距离，如果我们想获得小盒子在浏览器页面的位置可以使用 getBoundingClientRect() 这个函数不会受定位盒子的影响",[14,68529,68530],{},"getBoundingClientRect()这个方法得到的是一个对象，包含left,top等属性",[14,68532,68533],{},[23,68534],{"alt":25,"src":68535},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-150.png",[14,68537,68538],{},"getBoundingClientRect()是相对于浏览器可视页面的距离，滚动条稍微向下滚动一些，getBoundingClientRect().top的值就不准了，如果想得到鼠标在盒子中的y方向的距离，此时需要：e.pageY-box.getBoundingClientRect().top-document.documentElement.scrollTop",[14,68540,68541],{},"多减一下滚动的距离(HTML文档在window窗口内滚动的距离)，就可以得到鼠标在box盒子中相对父盒子的距离",[14,68543,68544],{},"浏览器页面由于基本不会进行左右拖动，可以不用考虑这方面的因素，鼠标相对于浏览器可视区域左侧的距离为：",[14,68546,68547],{},"e.pageX-box.getBoundingClientRect()",[77,68549,68551],{"id":68550},"_337-获取元素位置的另一种方法","3.3.7 获取元素位置的另一种方法",[14,68553,68554],{},[23,68555],{"alt":25,"src":68556},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-151.png",[14,68558,68559],{},"这个是相对于视口来说的，它是个方法，不是属性值",[77,68561,68563],{"id":68562},"_338-总结","3.3.8 总结",[14,68565,68566],{},[23,68567],{"alt":25,"src":68568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-152.png",[14,68570,68571],{},"clientWidth\u002FclientHeight和offsetWidth\u002FoffsetHeight都是可读的，不能进行赋值操作",[14,68573,68574],{},"修改盒子的宽高只能通过width和height来实现",[77,68576,68578],{"id":68577},"_339-页面滚动丝滑css写法","3.3.9 页面滚动丝滑css写法",[97,68580,68582],{"className":50627,"code":68581,"language":50629,"meta":25,"style":25},"\u002F* 页面滑动 *\u002F\nhtml {\n  \u002F* 让滚动条丝滑的滚动 *\u002F\n  scroll-behavior: smooth;\n}\n",[103,68583,68584,68589,68594,68599,68604],{"__ignoreMap":25},[106,68585,68586],{"class":108,"line":109},[106,68587,68588],{"class":116},"\u002F* 页面滑动 *\u002F\n",[106,68590,68591],{"class":108,"line":28},[106,68592,68593],{"class":116},"html {\n",[106,68595,68596],{"class":108,"line":1172},[106,68597,68598],{"class":116},"  \u002F* 让滚动条丝滑的滚动 *\u002F\n",[106,68600,68601],{"class":108,"line":1187},[106,68602,68603],{"class":116},"  scroll-behavior: smooth;\n",[106,68605,68606],{"class":108,"line":1193},[106,68607,1557],{"class":116},[14,68609,68610],{},"默认是auto",[77,68612,68614],{"id":68613},"_3310-日期对象","3.3.10 日期对象",[21991,68616,68618],{"id":68617},"_33101-实例化","3.3.10.1 实例化",[14,68620,68621],{},[23,68622],{"alt":25,"src":68623},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-153.png",[21991,68625,68627],{"id":68626},"_33102-时期对象方法","3.3.10.2 时期对象方法",[14,68629,68630],{},[23,68631],{"alt":25,"src":68632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-154.png",[14,68634,68635],{},"月份+1",[14,68637,68638],{},"老外认为第一天为0，星期天",[14,68640,68641],{},"方法使用的时候必须要跟括号",[14,68643,68644],{},"快速获得日期",[14,68646,68647],{},"\u002F\u002F 得到年月日",[14,68649,68650],{},"\u002F\u002F div.innerHTML = date.toLocaleDateString()",[14,68652,68653],{},"\u002F\u002F 得到当地日期",[14,68655,68656],{},"\u002F\u002F div.innerHTML = date.toLocaleString()",[14,68658,68659],{},"\u002F\u002F 得到当地时间",[14,68661,68662],{},"\u002F\u002F div.innerHTML = date.toLocaleTimeString()",[14,68664,68665],{},"注意再使用定时器时，在定时器外也写一个获得时间，不然刷新浏览器刚开始由于定时器要间隔一段时间采取调用函数，会导致一开始不显示",[14,68667,68668],{},"如果不考虑快速的方式，要设置自己的样式的话，自己封装一个函数！！！",[51807,68670,68671],{},"\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,68673,68674],{},"学会去封装函数！",[21991,68676,68678],{"id":68677},"_33103-时间戳","3.3.10.3 时间戳",[14,68680,68681],{},[23,68682],{"alt":25,"src":68683},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-155.png",[14,68685,68686],{},[23,68687],{"alt":25,"src":68688},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-156.png",[14,68690,68691],{},"三种方法记住一个就可以",[77,68693,68695],{"id":68694},"_3311-节点操作","3.3.11 节点操作",[21991,68697,68699],{"id":68698},"_33111-dom节点","3.3.11.1 DOM节点",[14,68701,68702],{},[23,68703],{"alt":25,"src":68704},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-157.png",[14,68706,68707],{},"我们主要用的就是元素节点，因为对元素节点操作就可以实现对标签内容样式的修改，就不需要使用属性节点和文本节点来操作了，后边的增删改查都是对元素节点来进行操作的",[21991,68709,68711],{"id":68710},"_33112-查找节点","3.3.11.2 查找节点",[14,68713,68714],{},"前边的document.querySelector()是获取的元素",[14,68716,68717],{},"这里是通过关系来获取！！！，就是正常通过document.querySelector()获取元素，这个元素是个对象，此时他的父亲儿子啥的就不用再使用document.querySelector()来获取了，直接通过关系来获取",[14,68719,68720],{},[23,68721],{"alt":25,"src":68722},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-158.png",[60,68724,68725],{},[63,68726,68727],{},"父节点",[14,68729,68730],{},[23,68731],{"alt":25,"src":68732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-159.png",[60,68734,68735],{"start":28},[63,68736,68737],{},"子节点",[14,68739,68740],{},[23,68741],{"alt":25,"src":68742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-160.png",[14,68744,68745],{},"如果使用childNodes来获得子节点，还包括文本节点、注释节点等，但是这些对我们来说没啥用，所以children来获取子节点，他就是个标签",[14,68747,68748],{},"children获得的是伪数组，是亲儿子",[60,68750,68751],{"start":1172},[63,68752,68753],{},"兄弟节点",[14,68755,68756],{},[23,68757],{"alt":25,"src":68758},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-161.png",[21991,68760,68762],{"id":68761},"_33113-增加节点","3.3.11.3 增加节点",[14,68764,68765],{},[23,68766],{"alt":25,"src":68767},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-162.png",[14,68769,68770],{},"创建好之后给它通过innerHTML添加内容是不显示的内容的，因为只是创建了节点，还不知道节点在哪里",[14,68772,68773],{},[23,68774],{"alt":25,"src":68775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-163.png",[14,68777,68778],{},"在主体板块制作时，就是将各个信息写成数组对象的形式，然后利用循环来添加和追加节点，并将信息使用innerHTML来实现效果输出，因为innerHTML可以实现对标签的解析",[14,68780,68781],{},"下面是写法的部分展示，就按照下边的格式来写",[14,68783,68784],{},"例：",[51807,68786,68787],{},"\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,68789,68790],{},[23,68791],{"alt":25,"src":68792},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-164.png",[14,68794,68795],{},"false只克隆标签，里边的内容不会克隆过来",[97,68797,68799],{"className":50627,"code":68798,"language":50629,"meta":25,"style":25},"    ul.appendChild(ul.children[1].cloneNode(true))\n",[103,68800,68801],{"__ignoreMap":25},[106,68802,68803],{"class":108,"line":109},[106,68804,68798],{"class":116},[21991,68806,68808],{"id":68807},"_33114-删除节点","3.3.11.4 删除节点",[14,68810,68811],{},[23,68812],{"alt":25,"src":68813},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-165.png",[14,68815,68816],{},"父亲删儿子",[14,68818,68819],{},"removeChild是真删除节点了，直接从HTML中删除了；而display: none;只是隐藏起来了盒子，而且还不占位置",[77,68821,68823],{"id":68822},"_3312-m端事件","3.3.12 M端事件",[14,68825,68826],{},"M端就是移动端",[14,68828,68829],{},[23,68830],{"alt":25,"src":68831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-166.png",[77,68833,68835],{"id":68834},"_3313-插件","3.3.13 插件",[14,68837,68838],{},"要熟悉官网！！！",[14,68840,68841],{},[355,68842,68843],{"href":68843,"rel":68844},"https:\u002F\u002Fwww.swiper.com.cn\u002F",[23858],[14,68846,68847],{},[355,68848,68849],{"href":68849,"rel":68850},"https:\u002F\u002Fwww.swiper.com.cn\u002Fdemo\u002Findex.html",[23858],[77,68852,68854],{"id":68853},"_3314-学生信息表","3.3.14 学生信息表",[60,68856,68857,68860,68863,68866,68869,68872,68875,68878],{},[63,68858,68859],{},"对于表单元素，添加事件监听的时候，事件类型应当为submit，即给form标签添加事件监听，事件类型为submit",[63,68861,68862],{},"提交表单的时候不能跳转刷新，应当使用阻止跳转 e.preventDefault() 点任何地方都不可以跳转",[63,68864,68865],{},"在提交信息之后内容填写的内容应当清空，清空的操作(this就是指的form,因为是对它添加的事件监听)：this.reset()",[63,68867,68868],{},"用好表单元素自带的属性，value,name等",[63,68870,68871],{},"删除操作的时不要删DOM节点，删除的是数组中的数据，要使用的是自定义属性，让它自己生成，循环的时候加上自定义属性",[63,68873,68874],{},"不要忘记事件对象",[63,68876,68877],{},"selecte选择标签，里边的option的value一定要写，不然通过.value的形式获取不到值",[63,68879,68880],{},"表单元素不要具备记录标签，就是过段事件点击填写，不显示上次输入的内容：给form的属性autocomplete设为off，这个属性两个值，on是记录，off是不记录",[14,68882,68883],{},"结构：",[97,68885,68887],{"className":50627,"code":68886,"language":50629,"meta":25,"style":25},"\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",[103,68888,68889,68899,68913,68917,68925,68939,68959,68980,68993,69017,69025,69029,69037,69050,69071,69099,69127,69132,69154,69174,69193,69201,69229,69251,69271,69291,69311,69331,69351,69359,69379,69387,69391,69404,69412,69420,69428,69441,69454,69467,69480,69493,69506,69519,69527,69535,69543,69548,69553,69558,69563,69568,69573,69578,69583,69588,69593,69598,69603,69608,69616,69624,69632,69636,69656,69675,69695,69715,69735,69755,69759,69764,69784,69789,69799,69804,69809,69829,69851,69856,69866,69870,69874,69879,69884,69913,69927,69942,69946,69950,69954,69959,69970,69983,69988,69993,69998,70003,70008,70012,70017,70022,70031,70036,70041,70053,70058,70065,70069,70074,70084,70089,70099,70104,70132,70153,70163,70183,70201,70218,70235,70252,70269,70273,70283,70288,70293,70298,70309,70313,70317,70321,70326,70331,70352,70364,70369,70374,70379,70393,70398,70405,70409,70413,70421,70425,70433,70437],{"__ignoreMap":25},[106,68890,68891,68893,68895,68897],{"class":108,"line":109},[106,68892,51291],{"class":116},[106,68894,51295],{"class":51294},[106,68896,51298],{"class":1955},[106,68898,51301],{"class":116},[106,68900,68901,68903,68905,68907,68909,68911],{"class":108,"line":28},[106,68902,1027],{"class":116},[106,68904,50629],{"class":51294},[106,68906,51310],{"class":1955},[106,68908,162],{"class":116},[106,68910,51315],{"class":221},[106,68912,51301],{"class":116},[106,68914,68915],{"class":108,"line":1172},[106,68916,2392],{"emptyLinePlaceholder":33},[106,68918,68919,68921,68923],{"class":108,"line":1187},[106,68920,1027],{"class":116},[106,68922,51328],{"class":51294},[106,68924,51301],{"class":116},[106,68926,68927,68929,68931,68933,68935,68937],{"class":108,"line":1193},[106,68928,52138],{"class":116},[106,68930,51338],{"class":51294},[106,68932,51341],{"class":1955},[106,68934,162],{"class":116},[106,68936,51346],{"class":221},[106,68938,59121],{"class":116},[106,68940,68941,68943,68945,68947,68949,68951,68953,68955,68957],{"class":108,"line":1207},[106,68942,52138],{"class":116},[106,68944,51338],{"class":51294},[106,68946,14913],{"class":1955},[106,68948,162],{"class":116},[106,68950,51385],{"class":221},[106,68952,51365],{"class":1955},[106,68954,162],{"class":116},[106,68956,51392],{"class":221},[106,68958,59121],{"class":116},[106,68960,68961,68963,68965,68967,68969,68971,68973,68975,68978],{"class":108,"line":1213},[106,68962,52138],{"class":116},[106,68964,51338],{"class":51294},[106,68966,51357],{"class":1955},[106,68968,162],{"class":116},[106,68970,51362],{"class":221},[106,68972,51365],{"class":1955},[106,68974,162],{"class":116},[106,68976,68977],{"class":221},"\"ie=edge\"",[106,68979,59121],{"class":116},[106,68981,68982,68984,68986,68989,68991],{"class":108,"line":1304},[106,68983,52138],{"class":116},[106,68985,51401],{"class":51294},[106,68987,68988],{"class":116},">学生信息管理\u003C\u002F",[106,68990,51401],{"class":51294},[106,68992,51301],{"class":116},[106,68994,68995,68997,69000,69003,69005,69008,69010,69012,69015],{"class":108,"line":1310},[106,68996,52138],{"class":116},[106,68998,68999],{"class":51294},"link",[106,69001,69002],{"class":1955}," rel",[106,69004,162],{"class":116},[106,69006,69007],{"class":221},"\"stylesheet\"",[106,69009,61051],{"class":1955},[106,69011,162],{"class":116},[106,69013,69014],{"class":221},"\"css\u002Findex.css\"",[106,69016,59121],{"class":116},[106,69018,69019,69021,69023],{"class":108,"line":1322},[106,69020,51779],{"class":116},[106,69022,51328],{"class":51294},[106,69024,51301],{"class":116},[106,69026,69027],{"class":108,"line":1604},[106,69028,2392],{"emptyLinePlaceholder":33},[106,69030,69031,69033,69035],{"class":108,"line":1609},[106,69032,1027],{"class":116},[106,69034,51794],{"class":51294},[106,69036,51301],{"class":116},[106,69038,69039,69041,69043,69046,69048],{"class":108,"line":1615},[106,69040,52138],{"class":116},[106,69042,10],{"class":51294},[106,69044,69045],{"class":116},">新增学员\u003C\u002F",[106,69047,10],{"class":51294},[106,69049,51301],{"class":116},[106,69051,69052,69054,69056,69058,69060,69062,69065,69067,69069],{"class":108,"line":1620},[106,69053,52138],{"class":116},[106,69055,66619],{"class":51294},[106,69057,53480],{"class":1955},[106,69059,162],{"class":116},[106,69061,62658],{"class":221},[106,69063,69064],{"class":1955}," autocomplete",[106,69066,162],{"class":116},[106,69068,31770],{"class":221},[106,69070,51301],{"class":116},[106,69072,69073,69076,69078,69080,69082,69084,69086,69088,69091,69093,69095,69097],{"class":108,"line":1634},[106,69074,69075],{"class":116},"    姓名：\u003C",[106,69077,53815],{"class":51294},[106,69079,53818],{"class":1955},[106,69081,162],{"class":116},[106,69083,62693],{"class":221},[106,69085,53480],{"class":1955},[106,69087,162],{"class":116},[106,69089,69090],{"class":221},"\"uname\"",[106,69092,14913],{"class":1955},[106,69094,162],{"class":116},[106,69096,69090],{"class":221},[106,69098,59121],{"class":116},[106,69100,69101,69104,69106,69108,69110,69112,69114,69116,69119,69121,69123,69125],{"class":108,"line":1639},[106,69102,69103],{"class":116},"    年龄：\u003C",[106,69105,53815],{"class":51294},[106,69107,53818],{"class":1955},[106,69109,162],{"class":116},[106,69111,62693],{"class":221},[106,69113,53480],{"class":1955},[106,69115,162],{"class":116},[106,69117,69118],{"class":221},"\"age\"",[106,69120,14913],{"class":1955},[106,69122,162],{"class":116},[106,69124,69118],{"class":221},[106,69126,59121],{"class":116},[106,69128,69129],{"class":108,"line":1645},[106,69130,69131],{"class":116},"    性别:\n",[106,69133,69134,69136,69139,69141,69143,69146,69148,69150,69152],{"class":108,"line":1666},[106,69135,51335],{"class":116},[106,69137,69138],{"class":51294},"select",[106,69140,14913],{"class":1955},[106,69142,162],{"class":116},[106,69144,69145],{"class":221},"\"gender\"",[106,69147,53480],{"class":1955},[106,69149,162],{"class":116},[106,69151,69145],{"class":221},[106,69153,51301],{"class":116},[106,69155,69156,69158,69161,69163,69165,69167,69170,69172],{"class":108,"line":1671},[106,69157,55228],{"class":116},[106,69159,69160],{"class":51294},"option",[106,69162,66645],{"class":1955},[106,69164,162],{"class":116},[106,69166,9954],{"class":221},[106,69168,69169],{"class":116},">男\u003C\u002F",[106,69171,69160],{"class":51294},[106,69173,51301],{"class":116},[106,69175,69176,69178,69180,69182,69184,69186,69189,69191],{"class":108,"line":1685},[106,69177,55228],{"class":116},[106,69179,69160],{"class":51294},[106,69181,66645],{"class":1955},[106,69183,162],{"class":116},[106,69185,10023],{"class":221},[106,69187,69188],{"class":116},">女\u003C\u002F",[106,69190,69160],{"class":51294},[106,69192,51301],{"class":116},[106,69194,69195,69197,69199],{"class":108,"line":1690},[106,69196,51770],{"class":116},[106,69198,69138],{"class":51294},[106,69200,51301],{"class":116},[106,69202,69203,69206,69208,69210,69212,69214,69216,69218,69221,69223,69225,69227],{"class":108,"line":1719},[106,69204,69205],{"class":116},"    薪资：\u003C",[106,69207,53815],{"class":51294},[106,69209,53818],{"class":1955},[106,69211,162],{"class":116},[106,69213,62693],{"class":221},[106,69215,53480],{"class":1955},[106,69217,162],{"class":116},[106,69219,69220],{"class":221},"\"salary\"",[106,69222,14913],{"class":1955},[106,69224,162],{"class":116},[106,69226,69220],{"class":221},[106,69228,59121],{"class":116},[106,69230,69231,69234,69236,69238,69240,69243,69245,69247,69249],{"class":108,"line":1724},[106,69232,69233],{"class":116},"    就业城市：\u003C",[106,69235,69138],{"class":51294},[106,69237,14913],{"class":1955},[106,69239,162],{"class":116},[106,69241,69242],{"class":221},"\"city\"",[106,69244,53480],{"class":1955},[106,69246,162],{"class":116},[106,69248,69242],{"class":221},[106,69250,51301],{"class":116},[106,69252,69253,69255,69257,69259,69261,69264,69267,69269],{"class":108,"line":1741},[106,69254,55228],{"class":116},[106,69256,69160],{"class":51294},[106,69258,66645],{"class":1955},[106,69260,162],{"class":116},[106,69262,69263],{"class":221},"\"北京\"",[106,69265,69266],{"class":116},">北京\u003C\u002F",[106,69268,69160],{"class":51294},[106,69270,51301],{"class":116},[106,69272,69273,69275,69277,69279,69281,69284,69287,69289],{"class":108,"line":1746},[106,69274,55228],{"class":116},[106,69276,69160],{"class":51294},[106,69278,66645],{"class":1955},[106,69280,162],{"class":116},[106,69282,69283],{"class":221},"\"上海\"",[106,69285,69286],{"class":116},">上海\u003C\u002F",[106,69288,69160],{"class":51294},[106,69290,51301],{"class":116},[106,69292,69293,69295,69297,69299,69301,69304,69307,69309],{"class":108,"line":1751},[106,69294,55228],{"class":116},[106,69296,69160],{"class":51294},[106,69298,66645],{"class":1955},[106,69300,162],{"class":116},[106,69302,69303],{"class":221},"\"广州\"",[106,69305,69306],{"class":116},">广州\u003C\u002F",[106,69308,69160],{"class":51294},[106,69310,51301],{"class":116},[106,69312,69313,69315,69317,69319,69321,69324,69327,69329],{"class":108,"line":1756},[106,69314,55228],{"class":116},[106,69316,69160],{"class":51294},[106,69318,66645],{"class":1955},[106,69320,162],{"class":116},[106,69322,69323],{"class":221},"\"深圳\"",[106,69325,69326],{"class":116},">深圳\u003C\u002F",[106,69328,69160],{"class":51294},[106,69330,51301],{"class":116},[106,69332,69333,69335,69337,69339,69341,69344,69347,69349],{"class":108,"line":1770},[106,69334,55228],{"class":116},[106,69336,69160],{"class":51294},[106,69338,66645],{"class":1955},[106,69340,162],{"class":116},[106,69342,69343],{"class":221},"\"曹县\"",[106,69345,69346],{"class":116},">曹县\u003C\u002F",[106,69348,69160],{"class":51294},[106,69350,51301],{"class":116},[106,69352,69353,69355,69357],{"class":108,"line":1775},[106,69354,51770],{"class":116},[106,69356,69138],{"class":51294},[106,69358,51301],{"class":116},[106,69360,69361,69363,69365,69367,69369,69372,69375,69377],{"class":108,"line":2569},[106,69362,51335],{"class":116},[106,69364,53881],{"class":51294},[106,69366,53480],{"class":1955},[106,69368,162],{"class":116},[106,69370,69371],{"class":221},"\"add\"",[106,69373,69374],{"class":116},">录入\u003C\u002F",[106,69376,53881],{"class":51294},[106,69378,51301],{"class":116},[106,69380,69381,69383,69385],{"class":108,"line":2583},[106,69382,52411],{"class":116},[106,69384,66619],{"class":51294},[106,69386,51301],{"class":116},[106,69388,69389],{"class":108,"line":2591},[106,69390,2392],{"emptyLinePlaceholder":33},[106,69392,69393,69395,69397,69400,69402],{"class":108,"line":2596},[106,69394,52138],{"class":116},[106,69396,10],{"class":51294},[106,69398,69399],{"class":116},">就业榜\u003C\u002F",[106,69401,10],{"class":51294},[106,69403,51301],{"class":116},[106,69405,69406,69408,69410],{"class":108,"line":2602},[106,69407,52138],{"class":116},[106,69409,254],{"class":51294},[106,69411,51301],{"class":116},[106,69413,69414,69416,69418],{"class":108,"line":2608},[106,69415,51335],{"class":116},[106,69417,257],{"class":51294},[106,69419,51301],{"class":116},[106,69421,69422,69424,69426],{"class":108,"line":2613},[106,69423,55228],{"class":116},[106,69425,260],{"class":51294},[106,69427,51301],{"class":116},[106,69429,69430,69432,69434,69437,69439],{"class":108,"line":7941},[106,69431,55296],{"class":116},[106,69433,263],{"class":51294},[106,69435,69436],{"class":116},">序号\u003C\u002F",[106,69438,263],{"class":51294},[106,69440,51301],{"class":116},[106,69442,69443,69445,69447,69450,69452],{"class":108,"line":7965},[106,69444,55296],{"class":116},[106,69446,263],{"class":51294},[106,69448,69449],{"class":116},">姓名\u003C\u002F",[106,69451,263],{"class":51294},[106,69453,51301],{"class":116},[106,69455,69456,69458,69460,69463,69465],{"class":108,"line":7970},[106,69457,55296],{"class":116},[106,69459,263],{"class":51294},[106,69461,69462],{"class":116},">年龄\u003C\u002F",[106,69464,263],{"class":51294},[106,69466,51301],{"class":116},[106,69468,69469,69471,69473,69476,69478],{"class":108,"line":7976},[106,69470,55296],{"class":116},[106,69472,263],{"class":51294},[106,69474,69475],{"class":116},">性别\u003C\u002F",[106,69477,263],{"class":51294},[106,69479,51301],{"class":116},[106,69481,69482,69484,69486,69489,69491],{"class":108,"line":8003},[106,69483,55296],{"class":116},[106,69485,263],{"class":51294},[106,69487,69488],{"class":116},">薪资\u003C\u002F",[106,69490,263],{"class":51294},[106,69492,51301],{"class":116},[106,69494,69495,69497,69499,69502,69504],{"class":108,"line":8008},[106,69496,55296],{"class":116},[106,69498,263],{"class":51294},[106,69500,69501],{"class":116},">就业城市\u003C\u002F",[106,69503,263],{"class":51294},[106,69505,51301],{"class":116},[106,69507,69508,69510,69512,69515,69517],{"class":108,"line":8014},[106,69509,55296],{"class":116},[106,69511,263],{"class":51294},[106,69513,69514],{"class":116},">操作\u003C\u002F",[106,69516,263],{"class":51294},[106,69518,51301],{"class":116},[106,69520,69521,69523,69525],{"class":108,"line":8026},[106,69522,55401],{"class":116},[106,69524,260],{"class":51294},[106,69526,51301],{"class":116},[106,69528,69529,69531,69533],{"class":108,"line":8038},[106,69530,51770],{"class":116},[106,69532,257],{"class":51294},[106,69534,51301],{"class":116},[106,69536,69537,69539,69541],{"class":108,"line":8050},[106,69538,51335],{"class":116},[106,69540,301],{"class":51294},[106,69542,51301],{"class":116},[106,69544,69545],{"class":108,"line":9709},[106,69546,69547],{"class":175},"      \u003C!-- \n",[106,69549,69550],{"class":108,"line":9734},[106,69551,69552],{"class":175},"        \u003Ctr>\n",[106,69554,69555],{"class":108,"line":9757},[106,69556,69557],{"class":175},"          \u003Ctd>1001\u003C\u002Ftd>\n",[106,69559,69560],{"class":108,"line":9781},[106,69561,69562],{"class":175},"          \u003Ctd>欧阳霸天\u003C\u002Ftd>\n",[106,69564,69565],{"class":108,"line":9786},[106,69566,69567],{"class":175},"          \u003Ctd>19\u003C\u002Ftd>\n",[106,69569,69570],{"class":108,"line":9791},[106,69571,69572],{"class":175},"          \u003Ctd>男\u003C\u002Ftd>\n",[106,69574,69575],{"class":108,"line":9796},[106,69576,69577],{"class":175},"          \u003Ctd>15000\u003C\u002Ftd>\n",[106,69579,69580],{"class":108,"line":9805},[106,69581,69582],{"class":175},"          \u003Ctd>上海\u003C\u002Ftd>\n",[106,69584,69585],{"class":108,"line":9810},[106,69586,69587],{"class":175},"          \u003Ctd>\n",[106,69589,69590],{"class":108,"line":9816},[106,69591,69592],{"class":175},"            \u003Ca href=\"javascript:\">删除\u003C\u002Fa>\n",[106,69594,69595],{"class":108,"line":9837},[106,69596,69597],{"class":175},"          \u003C\u002Ftd>\n",[106,69599,69600],{"class":108,"line":9843},[106,69601,69602],{"class":175},"        \u003C\u002Ftr> \n",[106,69604,69605],{"class":108,"line":9857},[106,69606,69607],{"class":175},"        -->\n",[106,69609,69610,69612,69614],{"class":108,"line":9863},[106,69611,51770],{"class":116},[106,69613,301],{"class":51294},[106,69615,51301],{"class":116},[106,69617,69618,69620,69622],{"class":108,"line":9890},[106,69619,52411],{"class":116},[106,69621,254],{"class":51294},[106,69623,51301],{"class":116},[106,69625,69626,69628,69630],{"class":108,"line":9899},[106,69627,52138],{"class":116},[106,69629,51807],{"class":51294},[106,69631,51301],{"class":116},[106,69633,69634],{"class":108,"line":9905},[106,69635,59952],{"class":175},[106,69637,69638,69640,69643,69645,69647,69649,69651,69654],{"class":108,"line":9913},[106,69639,11214],{"class":112},[106,69641,69642],{"class":165}," uname",[106,69644,13557],{"class":112},[106,69646,54390],{"class":116},[106,69648,54393],{"class":1955},[106,69650,117],{"class":116},[106,69652,69653],{"class":221},"'.uname'",[106,69655,123],{"class":116},[106,69657,69658,69660,69662,69664,69666,69668,69670,69673],{"class":108,"line":9918},[106,69659,11214],{"class":112},[106,69661,15682],{"class":165},[106,69663,13557],{"class":112},[106,69665,54390],{"class":116},[106,69667,54393],{"class":1955},[106,69669,117],{"class":116},[106,69671,69672],{"class":221},"'.age'",[106,69674,123],{"class":116},[106,69676,69677,69679,69682,69684,69686,69688,69690,69693],{"class":108,"line":16597},[106,69678,11214],{"class":112},[106,69680,69681],{"class":165}," gender",[106,69683,13557],{"class":112},[106,69685,54390],{"class":116},[106,69687,54393],{"class":1955},[106,69689,117],{"class":116},[106,69691,69692],{"class":221},"'.gender'",[106,69694,123],{"class":116},[106,69696,69697,69699,69702,69704,69706,69708,69710,69713],{"class":108,"line":16603},[106,69698,11214],{"class":112},[106,69700,69701],{"class":165}," salary",[106,69703,13557],{"class":112},[106,69705,54390],{"class":116},[106,69707,54393],{"class":1955},[106,69709,117],{"class":116},[106,69711,69712],{"class":221},"'.salary'",[106,69714,123],{"class":116},[106,69716,69717,69719,69722,69724,69726,69728,69730,69733],{"class":108,"line":16626},[106,69718,11214],{"class":112},[106,69720,69721],{"class":165}," city",[106,69723,13557],{"class":112},[106,69725,54390],{"class":116},[106,69727,54393],{"class":1955},[106,69729,117],{"class":116},[106,69731,69732],{"class":221},"'.city'",[106,69734,123],{"class":116},[106,69736,69737,69739,69742,69744,69746,69748,69750,69753],{"class":108,"line":16632},[106,69738,11214],{"class":112},[106,69740,69741],{"class":165}," tbody",[106,69743,13557],{"class":112},[106,69745,54390],{"class":116},[106,69747,54393],{"class":1955},[106,69749,117],{"class":116},[106,69751,69752],{"class":221},"'tbody'",[106,69754,123],{"class":116},[106,69756,69757],{"class":108,"line":16655},[106,69758,2392],{"emptyLinePlaceholder":33},[106,69760,69761],{"class":108,"line":16669},[106,69762,69763],{"class":175},"    \u002F\u002F 获取所有带有name属性的元素\n",[106,69765,69766,69768,69771,69773,69775,69777,69779,69782],{"class":108,"line":16689},[106,69767,11214],{"class":112},[106,69769,69770],{"class":165}," items",[106,69772,13557],{"class":112},[106,69774,54390],{"class":116},[106,69776,55675],{"class":1955},[106,69778,117],{"class":116},[106,69780,69781],{"class":221},"'[name]'",[106,69783,123],{"class":116},[106,69785,69786],{"class":108,"line":16695},[106,69787,69788],{"class":175},"    \u002F\u002F 声明一个空的数组\n",[106,69790,69791,69793,69795,69797],{"class":108,"line":16706},[106,69792,11214],{"class":112},[106,69794,57689],{"class":165},[106,69796,13557],{"class":112},[106,69798,51832],{"class":116},[106,69800,69801],{"class":108,"line":16729},[106,69802,69803],{"class":175},"    \u002F\u002F 1.录入模块\n",[106,69805,69806],{"class":108,"line":16751},[106,69807,69808],{"class":175},"    \u002F\u002F 1.1这是一个表单提交事件\n",[106,69810,69811,69813,69816,69818,69820,69822,69824,69827],{"class":108,"line":16756},[106,69812,11214],{"class":112},[106,69814,69815],{"class":165}," info",[106,69817,13557],{"class":112},[106,69819,54390],{"class":116},[106,69821,54393],{"class":1955},[106,69823,117],{"class":116},[106,69825,69826],{"class":221},"'.info'",[106,69828,123],{"class":116},[106,69830,69831,69834,69836,69838,69841,69843,69845,69847,69849],{"class":108,"line":16762},[106,69832,69833],{"class":116},"    info.",[106,69835,57807],{"class":1955},[106,69837,117],{"class":116},[106,69839,69840],{"class":221},"'submit'",[106,69842,12428],{"class":116},[106,69844,54443],{"class":112},[106,69846,1650],{"class":116},[106,69848,191],{"class":5209},[106,69850,12435],{"class":116},[106,69852,69853],{"class":108,"line":16776},[106,69854,69855],{"class":175},"      \u002F\u002F 阻止默认行为，点击按钮之后不进行跳转\n",[106,69857,69858,69861,69864],{"class":108,"line":16789},[106,69859,69860],{"class":116},"      e.",[106,69862,69863],{"class":1955},"preventDefault",[106,69865,1968],{"class":116},[106,69867,69868],{"class":108,"line":16794},[106,69869,60006],{"class":175},[106,69871,69872],{"class":108,"line":16808},[106,69873,2392],{"emptyLinePlaceholder":33},[106,69875,69876],{"class":108,"line":16813},[106,69877,69878],{"class":175},"      \u002F\u002F 这里进行表单验证  如果不通过,直接添加中断,不需要添加数据\n",[106,69880,69881],{"class":108,"line":16819},[106,69882,69883],{"class":175},"      \u002F\u002F 先遍历循环\n",[106,69885,69886,69888,69890,69892,69894,69896,69898,69900,69902,69905,69907,69909,69911],{"class":108,"line":16824},[106,69887,52278],{"class":112},[106,69889,1650],{"class":116},[106,69891,51841],{"class":112},[106,69893,9431],{"class":116},[106,69895,162],{"class":112},[106,69897,4085],{"class":165},[106,69899,9438],{"class":116},[106,69901,1027],{"class":112},[106,69903,69904],{"class":116}," items.",[106,69906,51962],{"class":165},[106,69908,3206],{"class":116},[106,69910,2284],{"class":112},[106,69912,12435],{"class":116},[106,69914,69915,69917,69920,69922,69925],{"class":108,"line":16838},[106,69916,2489],{"class":112},[106,69918,69919],{"class":116}," (items[i].value ",[106,69921,54480],{"class":112},[106,69923,69924],{"class":221}," ''",[106,69926,12435],{"class":116},[106,69928,69929,69932,69935,69937,69940],{"class":108,"line":16843},[106,69930,69931],{"class":112},"          return",[106,69933,69934],{"class":1955}," alert",[106,69936,117],{"class":116},[106,69938,69939],{"class":221},"'输入内容不能为空'",[106,69941,123],{"class":116},[106,69943,69944],{"class":108,"line":16848},[106,69945,2521],{"class":116},[106,69947,69948],{"class":108,"line":16862},[106,69949,52392],{"class":116},[106,69951,69952],{"class":108,"line":16874},[106,69953,2392],{"emptyLinePlaceholder":33},[106,69955,69956],{"class":108,"line":16879},[106,69957,69958],{"class":175},"      \u002F\u002F 创建新的对象\n",[106,69960,69961,69963,69966,69968],{"class":108,"line":16892},[106,69962,58222],{"class":112},[106,69964,69965],{"class":165}," obj",[106,69967,13557],{"class":112},[106,69969,15565],{"class":116},[106,69971,69972,69975,69977,69979,69981],{"class":108,"line":16897},[106,69973,69974],{"class":116},"        stuID: arr.",[106,69976,51962],{"class":165},[106,69978,45560],{"class":112},[106,69980,25112],{"class":165},[106,69982,31460],{"class":116},[106,69984,69985],{"class":108,"line":16902},[106,69986,69987],{"class":116},"        uname: uname.value,\n",[106,69989,69990],{"class":108,"line":16907},[106,69991,69992],{"class":116},"        age: age.value,\n",[106,69994,69995],{"class":108,"line":16920},[106,69996,69997],{"class":116},"        gender: gender.value,\n",[106,69999,70000],{"class":108,"line":16925},[106,70001,70002],{"class":116},"        salary: salary.value,\n",[106,70004,70005],{"class":108,"line":32627},[106,70006,70007],{"class":116},"        city: city.value\n",[106,70009,70010],{"class":108,"line":32633},[106,70011,52392],{"class":116},[106,70013,70014],{"class":108,"line":32639},[106,70015,70016],{"class":175},"      \u002F\u002F console.log(obj);\n",[106,70018,70019],{"class":108,"line":32645},[106,70020,70021],{"class":175},"      \u002F\u002F 追加到数组里面\n",[106,70023,70024,70026,70028],{"class":108,"line":32651},[106,70025,58001],{"class":116},[106,70027,51878],{"class":1955},[106,70029,70030],{"class":116},"(obj)\n",[106,70032,70033],{"class":108,"line":32662},[106,70034,70035],{"class":175},"      \u002F\u002F console.log(arr);\n",[106,70037,70038],{"class":108,"line":32668},[106,70039,70040],{"class":175},"      \u002F\u002F 清空表单  reset重置表单\n",[106,70042,70043,70046,70048,70051],{"class":108,"line":32688},[106,70044,70045],{"class":165},"      this",[106,70047,675],{"class":116},[106,70049,70050],{"class":1955},"reset",[106,70052,1968],{"class":116},[106,70054,70055],{"class":108,"line":32694},[106,70056,70057],{"class":175},"      \u002F\u002F 调用渲染函数\n",[106,70059,70060,70063],{"class":108,"line":32705},[106,70061,70062],{"class":1955},"      render",[106,70064,1968],{"class":116},[106,70066,70067],{"class":108,"line":32711},[106,70068,33455],{"class":116},[106,70070,70071],{"class":108,"line":32717},[106,70072,70073],{"class":175},"    \u002F\u002F 2.渲染函数(因为增加和删除都需要渲染)\n",[106,70075,70076,70079,70082],{"class":108,"line":32723},[106,70077,70078],{"class":112},"    function",[106,70080,70081],{"class":1955}," render",[106,70083,10846],{"class":116},[106,70085,70086],{"class":108,"line":32729},[106,70087,70088],{"class":175},"      \u002F\u002F 先清空tbody,把最新数组里面的数据渲染完毕\n",[106,70090,70091,70094,70096],{"class":108,"line":32735},[106,70092,70093],{"class":116},"      tbody.innerHTML ",[106,70095,162],{"class":112},[106,70097,70098],{"class":221}," ''\n",[106,70100,70101],{"class":108,"line":32741},[106,70102,70103],{"class":175},"      \u002F\u002F 遍历数组\n",[106,70105,70106,70108,70110,70112,70114,70116,70118,70120,70122,70124,70126,70128,70130],{"class":108,"line":32747},[106,70107,52278],{"class":112},[106,70109,1650],{"class":116},[106,70111,51841],{"class":112},[106,70113,9431],{"class":116},[106,70115,162],{"class":112},[106,70117,4085],{"class":165},[106,70119,9438],{"class":116},[106,70121,1027],{"class":112},[106,70123,51959],{"class":116},[106,70125,51962],{"class":165},[106,70127,3206],{"class":116},[106,70129,2284],{"class":112},[106,70131,12435],{"class":116},[106,70133,70134,70136,70139,70141,70143,70146,70148,70151],{"class":108,"line":32767},[106,70135,61264],{"class":112},[106,70137,70138],{"class":165}," tr",[106,70140,13557],{"class":112},[106,70142,54390],{"class":116},[106,70144,70145],{"class":1955},"createElement",[106,70147,117],{"class":116},[106,70149,70150],{"class":221},"'tr'",[106,70152,123],{"class":116},[106,70154,70155,70158,70160],{"class":108,"line":32773},[106,70156,70157],{"class":116},"        tr.innerHTML ",[106,70159,162],{"class":112},[106,70161,70162],{"class":221}," `\n",[106,70164,70165,70168,70170,70172,70174,70177,70180],{"class":108,"line":32789},[106,70166,70167],{"class":221},"        \u003Ctd>${",[106,70169,3872],{"class":116},[106,70171,1007],{"class":221},[106,70173,558],{"class":116},[106,70175,70176],{"class":221},"].",[106,70178,70179],{"class":116},"stuID",[106,70181,70182],{"class":221},"}\u003C\u002Ftd>\n",[106,70184,70185,70188,70190,70192,70194,70196,70199],{"class":108,"line":32795},[106,70186,70187],{"class":221},"          \u003Ctd>${",[106,70189,3872],{"class":116},[106,70191,1007],{"class":221},[106,70193,558],{"class":116},[106,70195,70176],{"class":221},[106,70197,70198],{"class":116},"uname",[106,70200,70182],{"class":221},[106,70202,70203,70205,70207,70209,70211,70213,70216],{"class":108,"line":32809},[106,70204,70187],{"class":221},[106,70206,3872],{"class":116},[106,70208,1007],{"class":221},[106,70210,558],{"class":116},[106,70212,70176],{"class":221},[106,70214,70215],{"class":116},"age",[106,70217,70182],{"class":221},[106,70219,70220,70222,70224,70226,70228,70230,70233],{"class":108,"line":32815},[106,70221,70187],{"class":221},[106,70223,3872],{"class":116},[106,70225,1007],{"class":221},[106,70227,558],{"class":116},[106,70229,70176],{"class":221},[106,70231,70232],{"class":116},"gender",[106,70234,70182],{"class":221},[106,70236,70237,70239,70241,70243,70245,70247,70250],{"class":108,"line":32830},[106,70238,70187],{"class":221},[106,70240,3872],{"class":116},[106,70242,1007],{"class":221},[106,70244,558],{"class":116},[106,70246,70176],{"class":221},[106,70248,70249],{"class":116},"salary",[106,70251,70182],{"class":221},[106,70253,70254,70256,70258,70260,70262,70264,70267],{"class":108,"line":32836},[106,70255,70187],{"class":221},[106,70257,3872],{"class":116},[106,70259,1007],{"class":221},[106,70261,558],{"class":116},[106,70263,70176],{"class":221},[106,70265,70266],{"class":116},"city",[106,70268,70182],{"class":221},[106,70270,70271],{"class":108,"line":32845},[106,70272,69587],{"class":221},[106,70274,70275,70278,70280],{"class":108,"line":32851},[106,70276,70277],{"class":221},"            \u003Ca href=\"javascript:\" data-id=${",[106,70279,558],{"class":116},[106,70281,70282],{"class":221},"}>删除\u003C\u002Fa>\n",[106,70284,70285],{"class":108,"line":32860},[106,70286,70287],{"class":221},"          \u003C\u002Ftd> \n",[106,70289,70290],{"class":108,"line":32866},[106,70291,70292],{"class":221},"          `\n",[106,70294,70295],{"class":108,"line":32872},[106,70296,70297],{"class":175},"        \u002F\u002F 追加元素 父元素.appendChild(子元素)\n",[106,70299,70300,70303,70306],{"class":108,"line":32881},[106,70301,70302],{"class":116},"        tbody.",[106,70304,70305],{"class":1955},"appendChild",[106,70307,70308],{"class":116},"(tr)\n",[106,70310,70311],{"class":108,"line":32887},[106,70312,52392],{"class":116},[106,70314,70315],{"class":108,"line":32898},[106,70316,2179],{"class":116},[106,70318,70319],{"class":108,"line":32904},[106,70320,2392],{"emptyLinePlaceholder":33},[106,70322,70323],{"class":108,"line":32923},[106,70324,70325],{"class":175},"    \u002F\u002F 3.删除委托\n",[106,70327,70328],{"class":108,"line":32929},[106,70329,70330],{"class":175},"    \u002F\u002F 3.1 事件委托 tbody\n",[106,70332,70333,70336,70338,70340,70342,70344,70346,70348,70350],{"class":108,"line":32940},[106,70334,70335],{"class":116},"    tbody.",[106,70337,57807],{"class":1955},[106,70339,117],{"class":116},[106,70341,57812],{"class":221},[106,70343,12428],{"class":116},[106,70345,54443],{"class":112},[106,70347,1650],{"class":116},[106,70349,191],{"class":5209},[106,70351,12435],{"class":116},[106,70353,70354,70356,70358,70360,70362],{"class":108,"line":32946},[106,70355,54474],{"class":112},[106,70357,67028],{"class":116},[106,70359,54480],{"class":112},[106,70361,68250],{"class":221},[106,70363,12435],{"class":116},[106,70365,70366],{"class":108,"line":32966},[106,70367,70368],{"class":175},"        \u002F\u002F 得到当前元素的自定义属性 data-id\n",[106,70370,70371],{"class":108,"line":32982},[106,70372,70373],{"class":175},"        \u002F\u002F console.log(e.target.dataset.id);\n",[106,70375,70376],{"class":108,"line":32988},[106,70377,70378],{"class":175},"        \u002F\u002F 删除arr 数组里面对应的数据\n",[106,70380,70381,70384,70386,70389,70391],{"class":108,"line":33002},[106,70382,70383],{"class":116},"        arr.",[106,70385,58004],{"class":1955},[106,70387,70388],{"class":116},"(e.target.dataset.id, ",[106,70390,334],{"class":165},[106,70392,123],{"class":116},[106,70394,70395],{"class":108,"line":33008},[106,70396,70397],{"class":175},"        \u002F\u002F 重新渲染一次\n",[106,70399,70400,70403],{"class":108,"line":33014},[106,70401,70402],{"class":1955},"        render",[106,70404,1968],{"class":116},[106,70406,70407],{"class":108,"line":33025},[106,70408,52392],{"class":116},[106,70410,70411],{"class":108,"line":33031},[106,70412,33455],{"class":116},[106,70414,70415,70417,70419],{"class":108,"line":33037},[106,70416,52411],{"class":116},[106,70418,51807],{"class":51294},[106,70420,51301],{"class":116},[106,70422,70423],{"class":108,"line":33047},[106,70424,2392],{"emptyLinePlaceholder":33},[106,70426,70427,70429,70431],{"class":108,"line":33053},[106,70428,51779],{"class":116},[106,70430,51794],{"class":51294},[106,70432,51301],{"class":116},[106,70434,70435],{"class":108,"line":33064},[106,70436,2392],{"emptyLinePlaceholder":33},[106,70438,70439,70441,70443],{"class":108,"line":33070},[106,70440,51779],{"class":116},[106,70442,50629],{"class":51294},[106,70444,51301],{"class":116},[14,70446,70447],{},"样式：",[97,70449,70453],{"className":70450,"code":70451,"language":70452,"meta":25,"style":25},"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",[103,70454,70455,70460,70470,70479,70483,70487,70492,70502,70507,70511,70516,70526,70531,70540,70544,70548,70553,70558,70568,70578,70583,70587,70592,70601,70611,70616,70626,70636,70640,70645,70653,70657,70662,70667,70672,70680,70689,70693,70698,70707,70711,70716,70725,70729,70734,70743,70752,70760,70764,70769,70778,70788,70797,70807,70813,70822,70832,70842,70846,70851,70860,70868,70878,70886,70895,70904,70914,70922,70926,70931,70940],{"__ignoreMap":25},[106,70456,70457],{"class":108,"line":109},[106,70458,70459],{"class":116},"* {\n",[106,70461,70462,70465,70467],{"class":108,"line":28},[106,70463,70464],{"class":51294},"  margin",[106,70466,51431],{"class":116},[106,70468,70469],{"class":221},"0;\n",[106,70471,70472,70475,70477],{"class":108,"line":1172},[106,70473,70474],{"class":221},"  padding",[106,70476,51431],{"class":116},[106,70478,70469],{"class":221},[106,70480,70481],{"class":108,"line":1187},[106,70482,1557],{"class":116},[106,70484,70485],{"class":108,"line":1193},[106,70486,2392],{"emptyLinePlaceholder":33},[106,70488,70489],{"class":108,"line":1207},[106,70490,70491],{"class":221},"a {\n",[106,70493,70494,70497,70499],{"class":108,"line":1213},[106,70495,70496],{"class":51294},"  text-decoration",[106,70498,51431],{"class":116},[106,70500,70501],{"class":221},"none;\n",[106,70503,70504],{"class":108,"line":1304},[106,70505,70506],{"class":221},"  color:#721c24;\n",[106,70508,70509],{"class":108,"line":1310},[106,70510,1557],{"class":116},[106,70512,70513],{"class":108,"line":1322},[106,70514,70515],{"class":221},"h1 {\n",[106,70517,70518,70521,70523],{"class":108,"line":1604},[106,70519,70520],{"class":51294},"  text-align",[106,70522,51431],{"class":116},[106,70524,70525],{"class":221},"center;\n",[106,70527,70528],{"class":108,"line":1609},[106,70529,70530],{"class":221},"  color:#333;\n",[106,70532,70533,70535,70537],{"class":108,"line":1615},[106,70534,70464],{"class":51294},[106,70536,51431],{"class":116},[106,70538,70539],{"class":221},"20px 0;\n",[106,70541,70542],{"class":108,"line":1620},[106,70543,2666],{"class":116},[106,70545,70546],{"class":108,"line":1634},[106,70547,1557],{"class":116},[106,70549,70550],{"class":108,"line":1639},[106,70551,70552],{"class":221},"table {\n",[106,70554,70555],{"class":108,"line":1645},[106,70556,70557],{"class":221},"  margin:0 auto;\n",[106,70559,70560,70563,70565],{"class":108,"line":1666},[106,70561,70562],{"class":51294},"  width",[106,70564,51431],{"class":116},[106,70566,70567],{"class":221},"800px;\n",[106,70569,70570,70573,70575],{"class":108,"line":1671},[106,70571,70572],{"class":51294},"  border-collapse",[106,70574,51431],{"class":116},[106,70576,70577],{"class":221},"collapse;\n",[106,70579,70580],{"class":108,"line":1685},[106,70581,70582],{"class":221},"  color:#004085;\n",[106,70584,70585],{"class":108,"line":1690},[106,70586,1557],{"class":116},[106,70588,70589],{"class":108,"line":1719},[106,70590,70591],{"class":221},"th {\n",[106,70593,70594,70596,70598],{"class":108,"line":1724},[106,70595,70474],{"class":51294},[106,70597,51431],{"class":116},[106,70599,70600],{"class":221},"10px;\n",[106,70602,70603,70606,70608],{"class":108,"line":1741},[106,70604,70605],{"class":51294},"  background",[106,70607,51431],{"class":116},[106,70609,70610],{"class":175},"#cfe5ff;\n",[106,70612,70613],{"class":108,"line":1746},[106,70614,70615],{"class":116},"  \n",[106,70617,70618,70621,70623],{"class":108,"line":1751},[106,70619,70620],{"class":51294},"  font-size",[106,70622,51431],{"class":116},[106,70624,70625],{"class":221},"20px;\n",[106,70627,70628,70631,70633],{"class":108,"line":1756},[106,70629,70630],{"class":51294},"  font-weight",[106,70632,51431],{"class":116},[106,70634,70635],{"class":221},"400;\n",[106,70637,70638],{"class":108,"line":1770},[106,70639,1557],{"class":116},[106,70641,70642],{"class":108,"line":1775},[106,70643,70644],{"class":221},"td,th {\n",[106,70646,70647,70650],{"class":108,"line":2569},[106,70648,70649],{"class":221},"  border:1px solid",[106,70651,70652],{"class":175}," #b8daff;\n",[106,70654,70655],{"class":108,"line":2583},[106,70656,1557],{"class":116},[106,70658,70659],{"class":108,"line":2591},[106,70660,70661],{"class":221},"td {\n",[106,70663,70664],{"class":108,"line":2596},[106,70665,70666],{"class":221},"  padding:10px;\n",[106,70668,70669],{"class":108,"line":2602},[106,70670,70671],{"class":221},"  color:#666;\n",[106,70673,70674,70676,70678],{"class":108,"line":2608},[106,70675,70520],{"class":51294},[106,70677,51431],{"class":116},[106,70679,70525],{"class":221},[106,70681,70682,70684,70686],{"class":108,"line":2613},[106,70683,70620],{"class":51294},[106,70685,51431],{"class":116},[106,70687,70688],{"class":221},"16px;\n",[106,70690,70691],{"class":108,"line":7941},[106,70692,1557],{"class":116},[106,70694,70695],{"class":108,"line":7965},[106,70696,70697],{"class":221},"tbody tr {\n",[106,70699,70700,70702,70704],{"class":108,"line":7970},[106,70701,70605],{"class":51294},[106,70703,51431],{"class":116},[106,70705,70706],{"class":175},"#fff;\n",[106,70708,70709],{"class":108,"line":7976},[106,70710,1557],{"class":116},[106,70712,70713],{"class":108,"line":8003},[106,70714,70715],{"class":221},"tbody tr:hover {\n",[106,70717,70718,70720,70722],{"class":108,"line":8008},[106,70719,70605],{"class":51294},[106,70721,51431],{"class":116},[106,70723,70724],{"class":175},"#e1ecf8;\n",[106,70726,70727],{"class":108,"line":8014},[106,70728,1557],{"class":116},[106,70730,70731],{"class":108,"line":8026},[106,70732,70733],{"class":221},".info {\n",[106,70735,70736,70738,70740],{"class":108,"line":8038},[106,70737,70562],{"class":51294},[106,70739,51431],{"class":116},[106,70741,70742],{"class":221},"900px;\n",[106,70744,70745,70747,70749],{"class":108,"line":8050},[106,70746,70464],{"class":51294},[106,70748,51431],{"class":116},[106,70750,70751],{"class":221},"50px auto;\n",[106,70753,70754,70756,70758],{"class":108,"line":9709},[106,70755,70520],{"class":51294},[106,70757,51431],{"class":116},[106,70759,70525],{"class":221},[106,70761,70762],{"class":108,"line":9734},[106,70763,1557],{"class":116},[106,70765,70766],{"class":108,"line":9757},[106,70767,70768],{"class":221},".info  input, .info select {\n",[106,70770,70771,70773,70775],{"class":108,"line":9781},[106,70772,70562],{"class":51294},[106,70774,51431],{"class":116},[106,70776,70777],{"class":221},"80px;\n",[106,70779,70780,70783,70785],{"class":108,"line":9786},[106,70781,70782],{"class":51294},"  height",[106,70784,51431],{"class":116},[106,70786,70787],{"class":221},"27px;\n",[106,70789,70790,70793,70795],{"class":108,"line":9791},[106,70791,70792],{"class":51294},"  outline",[106,70794,51431],{"class":116},[106,70796,70501],{"class":221},[106,70798,70799,70802,70804],{"class":108,"line":9796},[106,70800,70801],{"class":51294},"  border-radius",[106,70803,51431],{"class":116},[106,70805,70806],{"class":221},"5px;\n",[106,70808,70809,70811],{"class":108,"line":9805},[106,70810,70649],{"class":221},[106,70812,70652],{"class":175},[106,70814,70815,70818,70820],{"class":108,"line":9810},[106,70816,70817],{"class":51294},"  padding-left",[106,70819,51431],{"class":116},[106,70821,70806],{"class":221},[106,70823,70824,70827,70829],{"class":108,"line":9816},[106,70825,70826],{"class":51294},"  box-sizing",[106,70828,51431],{"class":116},[106,70830,70831],{"class":221},"border-box;\n",[106,70833,70834,70837,70839],{"class":108,"line":9837},[106,70835,70836],{"class":51294},"  margin-right",[106,70838,51431],{"class":116},[106,70840,70841],{"class":221},"15px;\n",[106,70843,70844],{"class":108,"line":9843},[106,70845,1557],{"class":116},[106,70847,70848],{"class":108,"line":9857},[106,70849,70850],{"class":221},".info button {\n",[106,70852,70853,70855,70857],{"class":108,"line":9863},[106,70854,70562],{"class":51294},[106,70856,51431],{"class":116},[106,70858,70859],{"class":221},"60px;\n",[106,70861,70862,70864,70866],{"class":108,"line":9890},[106,70863,70782],{"class":51294},[106,70865,51431],{"class":116},[106,70867,70787],{"class":221},[106,70869,70870,70873,70875],{"class":108,"line":9899},[106,70871,70872],{"class":51294},"  background-color",[106,70874,51431],{"class":116},[106,70876,70877],{"class":175},"#004085;\n",[106,70879,70880,70882,70884],{"class":108,"line":9905},[106,70881,70792],{"class":51294},[106,70883,51431],{"class":116},[106,70885,70501],{"class":221},[106,70887,70888,70891,70893],{"class":108,"line":9913},[106,70889,70890],{"class":51294},"  border",[106,70892,51431],{"class":116},[106,70894,70469],{"class":221},[106,70896,70897,70900,70902],{"class":108,"line":9918},[106,70898,70899],{"class":51294},"  color",[106,70901,51431],{"class":116},[106,70903,70706],{"class":175},[106,70905,70906,70909,70911],{"class":108,"line":16597},[106,70907,70908],{"class":51294},"  cursor",[106,70910,51431],{"class":116},[106,70912,70913],{"class":221},"pointer;\n",[106,70915,70916,70918,70920],{"class":108,"line":16603},[106,70917,70801],{"class":51294},[106,70919,51431],{"class":116},[106,70921,70806],{"class":221},[106,70923,70924],{"class":108,"line":16626},[106,70925,1557],{"class":116},[106,70927,70928],{"class":108,"line":16632},[106,70929,70930],{"class":221},".info .age {\n",[106,70932,70933,70935,70937],{"class":108,"line":16655},[106,70934,70562],{"class":51294},[106,70936,51431],{"class":116},[106,70938,70939],{"class":221},"50px;\n",[106,70941,70942],{"class":108,"line":16669},[106,70943,1557],{"class":116},[14,70945,70946],{},"思路：",[14,70948,70949],{},[23,70950],{"alt":25,"src":70951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-167.png",[14,70953,70954],{},[23,70955],{"alt":25,"src":70956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-168.png",[14,70958,70959],{},[23,70960],{"alt":25,"src":70961},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-169.png",[77,70963,70965],{"id":70964},"_3315-重绘回流","3.3.15 重绘回流",[14,70967,70968],{},[23,70969],{"alt":25,"src":70970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-170.png",[14,70972,70973],{},[23,70974],{"alt":25,"src":70975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-171.png",[14,70977,70978],{},[23,70979],{"alt":25,"src":70980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-172.png",[48,70982,70984],{"id":70983},"_34-bom","3.4 BOM",[14,70986,70987],{},[23,70988],{"alt":25,"src":70989},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-173.png",[14,70991,70992],{},"平时写的document省略了window而已，实际上是window.document",[14,70994,70995],{},"函数也是这样，调用的时候实际为window.fn()",[14,70997,70998],{},"var声明标量也是这样的，const和let是挂载在自己的作用域内，所以如果写：const num=10 console.log(window.num)会输出undefined",[14,71000,71001],{},"window大部分情况下可以省略",[77,71003,71005],{"id":71004},"_341-定时器-延时函数","3.4.1 定时器-延时函数",[14,71007,71008],{},"只执行一次",[14,71010,71011],{},[23,71012],{"alt":25,"src":71013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-174.png",[14,71015,71016],{},"某些特殊情况下，如递归函数中，我需要自己调用自己，此时就需要清除一下延时函数了",[14,71018,71019],{},[23,71020],{"alt":25,"src":71021},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-175.png",[77,71023,71025],{"id":71024},"_342-js执行机制","3.4.2 JS执行机制",[14,71027,71028],{},[23,71029],{"alt":25,"src":71030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-176.png",[14,71032,71033],{},"两个的结果都是1111 3333 2222",[14,71035,71036],{},[23,71037],{"alt":25,"src":71038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-177.png",[14,71040,71041],{},[23,71042],{"alt":25,"src":71043},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-178.png",[14,71045,71046],{},[23,71047],{"alt":25,"src":71048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-179.png",[14,71050,71051],{},"总结：同步任务是立马可以执行的，异步是需要事件的",[14,71053,71054],{},"工作流程：",[14,71056,71057],{},[23,71058],{"alt":25,"src":71059},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-180.png",[14,71061,71062],{},[23,71063],{"alt":25,"src":71064},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-181.png",[14,71066,71067],{},"js只能进行单线程的操作，右边部分是浏览器操作，在浏览的作用下可以实现多线程任务",[14,71069,71070],{},"由于主线程不断的重复获得任务、执行任务、再获取任务、再执行，所以这种机制被称为事件循环（ event loop）",[77,71072,71074],{"id":71073},"_343-location对象","3.4.3 location对象",[14,71076,71077],{},"location对象属于window这个全局对象下的，可以 省略window",[14,71079,71080],{},[23,71081],{"alt":25,"src":71082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-182.png",[14,71084,71085],{},"href可以跳转页面",[60,71087,71088],{},[63,71089,71090],{},"search:在表单中提交信息之后,上边的网址后面会包含自己的信息",[14,71092,71093],{},"search得到提交信息之后网站后边的地址",[14,71095,71096],{},[23,71097],{"alt":25,"src":71098},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-183.png",[14,71100,71101],{},[23,71102],{"alt":25,"src":71103},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-184.png",[60,71105,71106],{"start":28},[63,71107,71108],{},"hash:这个获取单页面应用#后边的地址",[14,71110,71111],{},"如下,点击我的音乐等按钮,浏览器不会刷新,只是刷新下边的内容,此时网站后边的地址为#",[14,71113,71114],{},[23,71115],{"alt":25,"src":71116},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-185.png",[97,71118,71120],{"className":53061,"code":71119,"language":53063,"meta":25,"style":25},"  \u003Ca href=\"#\u002Fmy\">我的\u003C\u002Fa>\n  \u003Ca href=\"#\u002Ffriend\">关注\u003C\u002Fa>\n  \u003Ca href=\"#\u002Fdownload\">下载\u003C\u002Fa>\n",[103,71121,71122,71142,71162],{"__ignoreMap":25},[106,71123,71124,71126,71128,71130,71132,71135,71138,71140],{"class":108,"line":109},[106,71125,52138],{"class":116},[106,71127,355],{"class":51294},[106,71129,61051],{"class":1955},[106,71131,162],{"class":116},[106,71133,71134],{"class":221},"\"#\u002Fmy\"",[106,71136,71137],{"class":116},">我的\u003C\u002F",[106,71139,355],{"class":51294},[106,71141,51301],{"class":116},[106,71143,71144,71146,71148,71150,71152,71155,71158,71160],{"class":108,"line":28},[106,71145,52138],{"class":116},[106,71147,355],{"class":51294},[106,71149,61051],{"class":1955},[106,71151,162],{"class":116},[106,71153,71154],{"class":221},"\"#\u002Ffriend\"",[106,71156,71157],{"class":116},">关注\u003C\u002F",[106,71159,355],{"class":51294},[106,71161,51301],{"class":116},[106,71163,71164,71166,71168,71170,71172,71175,71178,71180],{"class":108,"line":1172},[106,71165,52138],{"class":116},[106,71167,355],{"class":51294},[106,71169,61051],{"class":1955},[106,71171,162],{"class":116},[106,71173,71174],{"class":221},"\"#\u002Fdownload\"",[106,71176,71177],{"class":116},">下载\u003C\u002F",[106,71179,355],{"class":51294},[106,71181,51301],{"class":116},[14,71183,71184],{},"就是当时候提前写好每部分,一点就会换过来写好的这部分,浏览器不会刷新,在vue中会详细说明",[60,71186,71187],{"start":1172},[63,71188,71189,71190,71192,71193,71195],{},"reload 类似于浏览器中点击F5,进行刷新操作,它是个方法!!! 用的时候要加()",[53710,71191],{},"  强制刷新是从在线重新获取数据(ctrl+f5) location.reload(true)",[53710,71194],{},"  刷新是从本地获取数据 (f5) location.reload(false)",[77,71197,71199],{"id":71198},"_345-navigator对象","3.4.5 navigator对象",[14,71201,71202],{},[23,71203],{"alt":25,"src":71204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-186.png",[97,71206,71210],{"className":71207,"code":71208,"language":71209,"meta":25,"style":25},"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",[103,71211,71212,71217,71228,71240,71245,71296,71337,71342,71355,71367,71372],{"__ignoreMap":25},[106,71213,71214],{"class":108,"line":109},[106,71215,71216],{"class":175},"\u002F\u002F 检测 userAgent（浏览器信息） \n",[106,71218,71219,71221,71223,71225],{"class":108,"line":28},[106,71220,343],{"class":112},[106,71222,117],{"class":116},[106,71224,54443],{"class":112},[106,71226,71227],{"class":116}," () { \n",[106,71229,71230,71232,71235,71237],{"class":108,"line":1172},[106,71231,6785],{"class":112},[106,71233,71234],{"class":165}," userAgent",[106,71236,13557],{"class":112},[106,71238,71239],{"class":116}," navigator.userAgent \n",[106,71241,71242],{"class":108,"line":1187},[106,71243,71244],{"class":175},"\u002F\u002F 验证是否为Android或iPhone \n",[106,71246,71247,71249,71252,71254,71257,71260,71262,71264,71267,71269,71272,71276,71278,71280,71282,71285,71287,71289,71291,71293],{"class":108,"line":1193},[106,71248,6785],{"class":112},[106,71250,71251],{"class":165}," android",[106,71253,13557],{"class":112},[106,71255,71256],{"class":116}," userAgent.",[106,71258,71259],{"class":1955},"match",[106,71261,117],{"class":116},[106,71263,701],{"class":221},[106,71265,71266],{"class":47971},"(Android);",[106,71268,1103],{"class":112},[106,71270,71271],{"class":165},"[\\s",[106,71273,71275],{"class":71274},"snhLl","\\\u002F",[106,71277,1057],{"class":165},[106,71279,598],{"class":112},[106,71281,117],{"class":47971},[106,71283,71284],{"class":165},"[\\d.]",[106,71286,598],{"class":112},[106,71288,546],{"class":47971},[106,71290,1103],{"class":112},[106,71292,701],{"class":221},[106,71294,71295],{"class":116},") \n",[106,71297,71298,71300,71303,71305,71307,71309,71311,71313,71316,71319,71322,71324,71326,71329,71331,71333,71335],{"class":108,"line":1207},[106,71299,6785],{"class":112},[106,71301,71302],{"class":165}," iphone",[106,71304,13557],{"class":112},[106,71306,71256],{"class":116},[106,71308,71259],{"class":1955},[106,71310,117],{"class":116},[106,71312,701],{"class":221},[106,71314,71315],{"class":47971},"(iPhone",[106,71317,71318],{"class":165},"\\s",[106,71320,71321],{"class":47971},"OS)",[106,71323,71318],{"class":165},[106,71325,117],{"class":47971},[106,71327,71328],{"class":165},"[\\d_]",[106,71330,598],{"class":112},[106,71332,546],{"class":47971},[106,71334,701],{"class":221},[106,71336,71295],{"class":116},[106,71338,71339],{"class":108,"line":1213},[106,71340,71341],{"class":175},"\u002F\u002F 如果是Android或iPhone，则跳转至移动站点 \n",[106,71343,71344,71346,71349,71352],{"class":108,"line":1304},[106,71345,1523],{"class":112},[106,71347,71348],{"class":116}," (android ",[106,71350,71351],{"class":112},"||",[106,71353,71354],{"class":116}," iphone) { \n",[106,71356,71357,71360,71362,71365],{"class":108,"line":1310},[106,71358,71359],{"class":116},"location.href ",[106,71361,162],{"class":112},[106,71363,71364],{"class":221}," 'http:\u002F\u002Fm.itcast.cn'",[106,71366,2666],{"class":116},[106,71368,71369],{"class":108,"line":1322},[106,71370,71371],{"class":116},"} \n",[106,71373,71374],{"class":108,"line":1604},[106,71375,71376],{"class":116},"})()\n",[77,71378,71380],{"id":71379},"_346-histroy对象","3.4.6 histroy对象",[14,71382,71383],{},[23,71384],{"alt":25,"src":71385},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-187.png",[14,71387,71388],{},"浏览器地址的前进与后退!!!",[14,71390,71391],{},"history.back() 等效于 history.go(-1)",[14,71393,71394],{},"history.forward() 等效于 history.go(1)",[48,71396,71398],{"id":71397},"_35-本地存储","3.5 本地存储",[60,71400,71401,71404,71407],{},[63,71402,71403],{},"数据存储在用户浏览器中",[63,71405,71406],{},"设置、读取方便、甚至页面刷新不丢失数据",[63,71408,71409],{},"容量较大，sessionStorage和localStorage约 5M 左右",[77,71411,71413],{"id":71412},"_351-本地存储分类-localstorage","3.5.1 本地存储分类- localStorage",[14,71415,71416],{},"只能存储字符串",[14,71418,71419],{},[23,71420],{"alt":25,"src":71421},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-188.png",[14,71423,71424],{},[23,71425],{"alt":25,"src":71426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-189.png",[14,71428,71429],{},"键值对要加引号,不然就会当变量来看了",[14,71431,71432],{},"localStorage.setItem('uname', 'pink')",[14,71434,71435],{},"刷新之后信息不再丢失",[14,71437,71438],{},"操作key,value会跟着变",[14,71440,71441],{},"删除只删除键就可以,即名字",[14,71443,71432],{},[14,71445,71446],{},"改:",[14,71448,71449],{},"localStorage.setItem('uname','red')",[14,71451,71452],{},"有这个键就是改,没有这个键就是改",[14,71454,71455],{},[23,71456],{"alt":25,"src":71457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-190.png",[14,71459,71460],{},"这个是全部删除,但是如果代码没有改动的话,一刷新,这些数据又都会存储在这里边,在测试中使用:",[14,71462,71463],{},[23,71464],{"alt":25,"src":71465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-191.png",[14,71467,71468],{},"本地存储只能存储字符串,在存储数据时,文字必须使用引号,不然字母会被看成变量,数字可以不加引号,但是本地存储之后都会变成字符串",[77,71470,71472],{"id":71471},"_352-本地存储分类-sessionstorage","3.5.2 本地存储分类- sessionStorage",[14,71474,71475],{},"相比于localStorage来说,关闭浏览器就会消失,但是localStorage关闭浏览器是不会消失的",[14,71477,71478],{},"特性:",[60,71480,71481,71484,71487,71490],{},[63,71482,71483],{},"生命周期为关闭浏览器窗口",[63,71485,71486],{},"在同一个窗口(页面)下数据可以共享",[63,71488,71489],{},"以键值对的形式存储使用",[63,71491,71492],{},"用法跟localStorage 基本相同",[77,71494,71496],{"id":71495},"_353-存储复杂数据类型","3.5.3 存储复杂数据类型",[14,71498,71499],{},"本地只能存储字符串,无法直接存储复杂数据类型",[97,71501,71503],{"className":53061,"code":71502,"language":53063,"meta":25,"style":25},"\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",[103,71504,71505,71513,71518,71523,71528,71533,71537,71542,71547],{"__ignoreMap":25},[106,71506,71507,71509,71511],{"class":108,"line":109},[106,71508,1027],{"class":116},[106,71510,51807],{"class":51294},[106,71512,51301],{"class":116},[106,71514,71515],{"class":108,"line":28},[106,71516,71517],{"class":116},"    const obj = {\n",[106,71519,71520],{"class":108,"line":1172},[106,71521,71522],{"class":116},"      uname: 'pink老师',\n",[106,71524,71525],{"class":108,"line":1187},[106,71526,71527],{"class":116},"      age: 18,\n",[106,71529,71530],{"class":108,"line":1193},[106,71531,71532],{"class":116},"      gender: '女'\n",[106,71534,71535],{"class":108,"line":1207},[106,71536,2179],{"class":116},[106,71538,71539],{"class":108,"line":1213},[106,71540,71541],{"class":116},"    \u002F\u002F 存储复杂数据类型\n",[106,71543,71544],{"class":108,"line":1304},[106,71545,71546],{"class":116},"    localStorage.setItem('obj', obj)\n",[106,71548,71549,71551,71553],{"class":108,"line":1310},[106,71550,52411],{"class":116},[106,71552,51807],{"class":51294},[106,71554,51301],{"class":116},[14,71556,71557],{},[23,71558],{"alt":25,"src":71559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-192.png",[14,71561,71562],{},"如果获取一下数据:",[14,71564,71565],{},"log(localStorage.getItem('obj'))",[14,71567,71568],{},[23,71569],{"alt":25,"src":71570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-193.png",[14,71572,71573],{},"发现直接存对象是使用不了的!!!",[21991,71575,71577],{"id":71576},"_3531-复杂对象转化为jso字符串","3.5.3.1 复杂对象转化为JSO字符串",[14,71579,71580],{},[23,71581],{"alt":25,"src":71582},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-194.png",[97,71584,71586],{"className":50627,"code":71585,"language":50629,"meta":25,"style":25},"\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",[103,71587,71588,71596,71606,71616,71625,71633,71637,71641,71667,71686,71694,71698,71703,71708],{"__ignoreMap":25},[106,71589,71590,71592,71594],{"class":108,"line":109},[106,71591,1027],{"class":116},[106,71593,51807],{"class":51294},[106,71595,51301],{"class":116},[106,71597,71598,71600,71602,71604],{"class":108,"line":28},[106,71599,11214],{"class":112},[106,71601,69965],{"class":165},[106,71603,13557],{"class":112},[106,71605,15565],{"class":116},[106,71607,71608,71611,71614],{"class":108,"line":1172},[106,71609,71610],{"class":116},"      uname: ",[106,71612,71613],{"class":221},"'pink老师'",[106,71615,31460],{"class":116},[106,71617,71618,71621,71623],{"class":108,"line":1187},[106,71619,71620],{"class":116},"      age: ",[106,71622,767],{"class":165},[106,71624,31460],{"class":116},[106,71626,71627,71630],{"class":108,"line":1193},[106,71628,71629],{"class":116},"      gender: ",[106,71631,71632],{"class":221},"'女'\n",[106,71634,71635],{"class":108,"line":1207},[106,71636,2179],{"class":116},[106,71638,71639],{"class":108,"line":1213},[106,71640,71541],{"class":175},[106,71642,71643,71646,71649,71651,71654,71656,71659,71661,71664],{"class":108,"line":1304},[106,71644,71645],{"class":116},"  localStorage.",[106,71647,71648],{"class":1955},"setItem",[106,71650,117],{"class":116},[106,71652,71653],{"class":221},"'obj'",[106,71655,12428],{"class":116},[106,71657,71658],{"class":165},"JSON",[106,71660,675],{"class":116},[106,71662,71663],{"class":1955},"stringify",[106,71665,71666],{"class":116},"(obj))\n",[106,71668,71669,71672,71674,71677,71680,71682,71684],{"class":108,"line":1310},[106,71670,71671],{"class":116},"  console.",[106,71673,58241],{"class":1955},[106,71675,71676],{"class":116},"(localStorage.",[106,71678,71679],{"class":1955},"getItem",[106,71681,117],{"class":116},[106,71683,71653],{"class":221},[106,71685,30491],{"class":116},[106,71687,71688,71690,71692],{"class":108,"line":1322},[106,71689,52411],{"class":116},[106,71691,51807],{"class":51294},[106,71693,51301],{"class":116},[106,71695,71696],{"class":108,"line":1604},[106,71697,70615],{"class":116},[106,71699,71700],{"class":108,"line":1609},[106,71701,71702],{"class":116},"  输出:{\"uname\":\"pink老师\",\"age\":18,\"gender\":\"女\"}\n",[106,71704,71705],{"class":108,"line":1615},[106,71706,71707],{"class":116},"  类型是字符串的\n",[106,71709,71710],{"class":108,"line":1620},[106,71711,71712],{"class":116},"  JSON对象 属性和值有引号,而且引号统一是双引号\n",[21991,71714,71716],{"id":71715},"_3532-json字符串转化为对象","3.5.3.2 JSON字符串转化为对象",[14,71718,71719],{},[23,71720],{"alt":25,"src":71721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-195.png",[14,71723,71724],{},[23,71725],{"alt":25,"src":71726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-196.png",[97,71728,71730],{"className":53061,"code":71729,"language":53063,"meta":25,"style":25},"  \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",[103,71731,71732,71740,71744,71748,71752,71756,71760,71765,71770,71775,71780,71785,71790,71795,71800],{"__ignoreMap":25},[106,71733,71734,71736,71738],{"class":108,"line":109},[106,71735,52138],{"class":116},[106,71737,51807],{"class":51294},[106,71739,51301],{"class":116},[106,71741,71742],{"class":108,"line":28},[106,71743,71517],{"class":116},[106,71745,71746],{"class":108,"line":1172},[106,71747,71522],{"class":116},[106,71749,71750],{"class":108,"line":1187},[106,71751,71527],{"class":116},[106,71753,71754],{"class":108,"line":1193},[106,71755,71532],{"class":116},[106,71757,71758],{"class":108,"line":1207},[106,71759,2179],{"class":116},[106,71761,71762],{"class":108,"line":1213},[106,71763,71764],{"class":116},"    \u002F\u002F 1.存储复杂数据类型\n",[106,71766,71767],{"class":108,"line":1304},[106,71768,71769],{"class":116},"    \u002F\u002F localStorage.setItem('obj', obj)\n",[106,71771,71772],{"class":108,"line":1310},[106,71773,71774],{"class":116},"    \u002F\u002F console.log(localStorage.getItem('obj'))\n",[106,71776,71777],{"class":108,"line":1322},[106,71778,71779],{"class":116},"    \u002F\u002F 2.复杂数据类型存储必须转换为JSON字符串存储\n",[106,71781,71782],{"class":108,"line":1604},[106,71783,71784],{"class":116},"    localStorage.setItem('obj', JSON.stringify(obj))\n",[106,71786,71787],{"class":108,"line":1609},[106,71788,71789],{"class":116},"    \u002F\u002F 取\n",[106,71791,71792],{"class":108,"line":1615},[106,71793,71794],{"class":116},"    \u002F\u002F console.log(typeof localStorage.getItem('obj'))\n",[106,71796,71797],{"class":108,"line":1620},[106,71798,71799],{"class":116},"    console.log(JSON.parse(localStorage.getItem('obj')))\n",[106,71801,71802,71804,71806],{"class":108,"line":1634},[106,71803,52411],{"class":116},[106,71805,51807],{"class":51294},[106,71807,51301],{"class":116},[14,71809,71810],{},[23,71811],{"alt":25,"src":71812},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-197.png",[77,71814,71816],{"id":71815},"_356-数组map方法","3.5.6 数组map方法",[14,71818,71819],{},"map多和join一起使用，使用map，将原数组的内容给小盒子，然后遍历完得到好多小盒子（就是小盒子填上了内容），这些小盒子就作为元素添加到了新的数组中，新的数组使用join的方法，比如新数组叫newArr，然后新数组newArr.join(''),元素之间不再有分隔符，转为了一个字符串塞给了大盒子，就可以实现对大盒子的填充",[14,71821,71822],{},[23,71823],{"alt":25,"src":71824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-198.png",[14,71826,71827],{},[23,71828],{"alt":25,"src":71829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-199.png",[14,71831,71832,71835],{},[266,71833,71834],{},"map 也称为映射。"," 映射是个术语，指两个元素的集之间元素相互“对应”的关系",[14,71837,71838],{},"map有返回值，但是forEach没有返回值",[14,71840,71841],{},"map是个方法。用的时候要加 ()",[14,71843,71844],{},"map返回的是一个数组",[77,71846,71848],{"id":71847},"_357-数组中join方法","3.5.7 数组中join方法",[14,71850,71851],{},[23,71852],{"alt":25,"src":71853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-200.png",[14,71855,71856],{},"类似于python中拼接字符串一样！",[60,71858,71859,71862,71865],{},[63,71860,71861],{},"小括号为空则逗号分开",[63,71863,71864],{},"小括号为空字符串 ''，则元素之间没有分隔符",[63,71866,71867],{},"小括号用啥符号就用进行分割",[77,71869,71871],{"id":71870},"_358-学生就业统计表本地存储","3.5.8 学生就业统计表本地存储",[60,71873,71874,71877,71880,71883,71886],{},[63,71875,71876],{},"记住本地时间获取快速方式：new Date().toDateString()",[63,71878,71879],{},"尽量减少DOM操作，用好map+join的渲染方式",[63,71881,71882],{},"输入内容为空不执行，可以使用！,获取输入的内容，!输入的内容 如果输入了字，那这个字符串的非为假，放到if语句中就不执行，如果没有输入字，那么输入的字符串的非为真，就去执行if语句",[63,71884,71885],{},"return可以实现函数的结束",[63,71887,71888],{},"禁止跳转是 preventDefault() 不要忘记",[97,71890,71892],{"className":50627,"code":71891,"language":50629,"meta":25,"style":25},"\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",[103,71893,71894,71904,71918,71922,71930,71944,71964,71976,71984,71990,72000,72010,72014,72018,72024,72034,72046,72050,72054,72061,72073,72087,72097,72101,72105,72112,72119,72126,72138,72150,72160,72172,72176,72180,72187,72194,72206,72218,72228,72240,72270,72274,72278,72285,72297,72309,72333,72343,72353,72357,72361,72369,72380,72392,72404,72416,72433,72445,72457,72461,72465,72472,72484,72496,72508,72519,72537,72550,72562,72586,72597,72601,72605,72613,72623,72627,72631,72637,72649,72660,72670,72674,72678,72684,72706,72710,72714,72720,72726,72738,72748,72760,72790,72803,72820,72824,72828,72839,72861,72871,72875,72879,72892,72902,72914,72926,72938,72950,72960,72970,72980,72991,73004,73008,73016,73024,73028,73036,73049,73069,73102,73135,73168,73194,73212,73230,73238,73264,73282,73300,73318,73336,73354,73362,73370,73388,73396,73425,73433,73441,73449,73462,73474,73486,73498,73510,73522,73535,73547,73555,73563,73571,73576,73581,73585,73589,73593,73597,73601,73605,73610,73615,73620,73625,73633,73641,73649,73654,73659,73664,73669,73674,73679,73684,73689,73694,73699,73704,73709,73714,73719,73723,73728,73733,73743,73752,73756,73761,73770,73786,73828,73868,73907,73972,73980,73984,73989,74007,74015,74020,74025,74055,74061,74066,74079,74091,74103,74115,74127,74139,74151,74155,74165,74169,74174,74179,74183,74192,74196,74201,74206,74225,74230,74250,74254,74259,74263,74268,74286,74304,74322,74341,74360,74379,74384,74390,74411,74417,74426,74432,74438,74444,74471,74484,74489,74499,74505,74511,74517,74523,74528,74534,74540,74546,74552,74585,74590,74595,74600,74605,74611,74617,74623,74634,74639,74645,74652,74666,74672,74696,74701,74706,74712,74718,74739,74745,74758,74764,74770,74776,74782,74787,74793,74799,74805,74823,74837,74843,74851,74857,74879,74884,74889,74894,74899,74904,74913,74922,74927],{"__ignoreMap":25},[106,71895,71896,71898,71900,71902],{"class":108,"line":109},[106,71897,51291],{"class":116},[106,71899,51295],{"class":51294},[106,71901,51298],{"class":1955},[106,71903,51301],{"class":116},[106,71905,71906,71908,71910,71912,71914,71916],{"class":108,"line":28},[106,71907,1027],{"class":116},[106,71909,50629],{"class":51294},[106,71911,51310],{"class":1955},[106,71913,162],{"class":116},[106,71915,51315],{"class":221},[106,71917,51301],{"class":116},[106,71919,71920],{"class":108,"line":1172},[106,71921,2392],{"emptyLinePlaceholder":33},[106,71923,71924,71926,71928],{"class":108,"line":1187},[106,71925,1027],{"class":116},[106,71927,51328],{"class":51294},[106,71929,51301],{"class":116},[106,71931,71932,71934,71936,71938,71940,71942],{"class":108,"line":1193},[106,71933,52138],{"class":116},[106,71935,51338],{"class":51294},[106,71937,51341],{"class":1955},[106,71939,162],{"class":116},[106,71941,51346],{"class":221},[106,71943,51301],{"class":116},[106,71945,71946,71948,71950,71952,71954,71956,71958,71960,71962],{"class":108,"line":1207},[106,71947,52138],{"class":116},[106,71949,51338],{"class":51294},[106,71951,14913],{"class":1955},[106,71953,162],{"class":116},[106,71955,51385],{"class":221},[106,71957,51365],{"class":1955},[106,71959,162],{"class":116},[106,71961,51392],{"class":221},[106,71963,51301],{"class":116},[106,71965,71966,71968,71970,71972,71974],{"class":108,"line":1213},[106,71967,52138],{"class":116},[106,71969,51401],{"class":51294},[106,71971,51404],{"class":116},[106,71973,51401],{"class":51294},[106,71975,51301],{"class":116},[106,71977,71978,71980,71982],{"class":108,"line":1304},[106,71979,52138],{"class":116},[106,71981,5119],{"class":51294},[106,71983,51301],{"class":116},[106,71985,71986,71988],{"class":108,"line":1310},[106,71987,6396],{"class":51294},[106,71989,15565],{"class":116},[106,71991,71992,71994,71996,71998],{"class":108,"line":1322},[106,71993,54689],{"class":165},[106,71995,51431],{"class":116},[106,71997,308],{"class":165},[106,71999,1283],{"class":116},[106,72001,72002,72004,72006,72008],{"class":108,"line":1604},[106,72003,54700],{"class":165},[106,72005,51431],{"class":116},[106,72007,308],{"class":165},[106,72009,1283],{"class":116},[106,72011,72012],{"class":108,"line":1609},[106,72013,2179],{"class":116},[106,72015,72016],{"class":108,"line":1615},[106,72017,2392],{"emptyLinePlaceholder":33},[106,72019,72020,72022],{"class":108,"line":1620},[106,72021,57273],{"class":51294},[106,72023,15565],{"class":116},[106,72025,72026,72028,72030,72032],{"class":108,"line":1634},[106,72027,57280],{"class":165},[106,72029,51431],{"class":116},[106,72031,51586],{"class":165},[106,72033,1283],{"class":116},[106,72035,72036,72038,72040,72042,72044],{"class":108,"line":1639},[106,72037,62071],{"class":165},[106,72039,51431],{"class":116},[106,72041,817],{"class":165},[106,72043,51486],{"class":112},[106,72045,1283],{"class":116},[106,72047,72048],{"class":108,"line":1645},[106,72049,2179],{"class":116},[106,72051,72052],{"class":108,"line":1666},[106,72053,2392],{"emptyLinePlaceholder":33},[106,72055,72056,72059],{"class":108,"line":1671},[106,72057,72058],{"class":1955},"    .info",[106,72060,15565],{"class":116},[106,72062,72063,72065,72067,72069,72071],{"class":108,"line":1685},[106,72064,54765],{"class":165},[106,72066,51431],{"class":116},[106,72068,51483],{"class":165},[106,72070,51486],{"class":112},[106,72072,1283],{"class":116},[106,72074,72075,72077,72079,72081,72083,72085],{"class":108,"line":1690},[106,72076,54700],{"class":165},[106,72078,51431],{"class":116},[106,72080,563],{"class":165},[106,72082,51486],{"class":112},[106,72084,51550],{"class":165},[106,72086,1283],{"class":116},[106,72088,72089,72091,72093,72095],{"class":108,"line":1719},[106,72090,57280],{"class":165},[106,72092,51431],{"class":116},[106,72094,51586],{"class":165},[106,72096,1283],{"class":116},[106,72098,72099],{"class":108,"line":1724},[106,72100,2179],{"class":116},[106,72102,72103],{"class":108,"line":1741},[106,72104,2392],{"emptyLinePlaceholder":33},[106,72106,72107,72110],{"class":108,"line":1746},[106,72108,72109],{"class":1955},"    .uname",[106,72111,31460],{"class":116},[106,72113,72114,72117],{"class":108,"line":1751},[106,72115,72116],{"class":1955},"    .age",[106,72118,31460],{"class":116},[106,72120,72121,72124],{"class":108,"line":1756},[106,72122,72123],{"class":1955},"    .salary",[106,72125,15565],{"class":116},[106,72127,72128,72130,72132,72134,72136],{"class":108,"line":1770},[106,72129,54765],{"class":165},[106,72131,51431],{"class":116},[106,72133,428],{"class":165},[106,72135,51486],{"class":112},[106,72137,1283],{"class":116},[106,72139,72140,72142,72144,72146,72148],{"class":108,"line":1775},[106,72141,54779],{"class":165},[106,72143,51431],{"class":116},[106,72145,817],{"class":165},[106,72147,51486],{"class":112},[106,72149,1283],{"class":116},[106,72151,72152,72154,72156,72158],{"class":108,"line":2569},[106,72153,61774],{"class":165},[106,72155,51431],{"class":116},[106,72157,54731],{"class":165},[106,72159,1283],{"class":116},[106,72161,72162,72164,72166,72168,72170],{"class":108,"line":2583},[106,72163,61744],{"class":165},[106,72165,51431],{"class":116},[106,72167,692],{"class":165},[106,72169,51486],{"class":112},[106,72171,1283],{"class":116},[106,72173,72174],{"class":108,"line":2591},[106,72175,2179],{"class":116},[106,72177,72178],{"class":108,"line":2596},[106,72179,2392],{"emptyLinePlaceholder":33},[106,72181,72182,72185],{"class":108,"line":2602},[106,72183,72184],{"class":1955},"    .gender",[106,72186,31460],{"class":116},[106,72188,72189,72192],{"class":108,"line":2608},[106,72190,72191],{"class":1955},"    .city",[106,72193,15565],{"class":116},[106,72195,72196,72198,72200,72202,72204],{"class":108,"line":2613},[106,72197,54765],{"class":165},[106,72199,51431],{"class":116},[106,72201,428],{"class":165},[106,72203,51486],{"class":112},[106,72205,1283],{"class":116},[106,72207,72208,72210,72212,72214,72216],{"class":108,"line":7941},[106,72209,54779],{"class":165},[106,72211,51431],{"class":116},[106,72213,942],{"class":165},[106,72215,51486],{"class":112},[106,72217,1283],{"class":116},[106,72219,72220,72222,72224,72226],{"class":108,"line":7965},[106,72221,61774],{"class":165},[106,72223,51431],{"class":116},[106,72225,54731],{"class":165},[106,72227,1283],{"class":116},[106,72229,72230,72232,72234,72236,72238],{"class":108,"line":7970},[106,72231,61744],{"class":165},[106,72233,51431],{"class":116},[106,72235,692],{"class":165},[106,72237,51486],{"class":112},[106,72239,1283],{"class":116},[106,72241,72242,72244,72246,72248,72250,72252,72255,72257,72259,72261,72264,72266,72268],{"class":108,"line":7976},[106,72243,61971],{"class":165},[106,72245,51431],{"class":116},[106,72247,334],{"class":165},[106,72249,51486],{"class":112},[106,72251,51515],{"class":165},[106,72253,72254],{"class":165}," rgb",[106,72256,117],{"class":116},[106,72258,1714],{"class":165},[106,72260,12428],{"class":116},[106,72262,72263],{"class":165},"197",[106,72265,12428],{"class":116},[106,72267,72263],{"class":165},[106,72269,2711],{"class":116},[106,72271,72272],{"class":108,"line":8003},[106,72273,2179],{"class":116},[106,72275,72276],{"class":108,"line":8008},[106,72277,2392],{"emptyLinePlaceholder":33},[106,72279,72280,72283],{"class":108,"line":8014},[106,72281,72282],{"class":51294},"    button",[106,72284,15565],{"class":116},[106,72286,72287,72289,72291,72293,72295],{"class":108,"line":8026},[106,72288,54779],{"class":165},[106,72290,51431],{"class":116},[106,72292,942],{"class":165},[106,72294,51486],{"class":112},[106,72296,1283],{"class":116},[106,72298,72299,72301,72303,72305,72307],{"class":108,"line":8038},[106,72300,54765],{"class":165},[106,72302,51431],{"class":116},[106,72304,601],{"class":165},[106,72306,51486],{"class":112},[106,72308,1283],{"class":116},[106,72310,72311,72313,72315,72318,72320,72322,72324,72327,72329,72331],{"class":108,"line":8050},[106,72312,54878],{"class":165},[106,72314,51431],{"class":116},[106,72316,72317],{"class":165},"rgb",[106,72319,117],{"class":116},[106,72321,1086],{"class":165},[106,72323,12428],{"class":116},[106,72325,72326],{"class":165},"187",[106,72328,12428],{"class":116},[106,72330,416],{"class":165},[106,72332,2711],{"class":116},[106,72334,72335,72337,72339,72341],{"class":108,"line":9709},[106,72336,57410],{"class":165},[106,72338,51431],{"class":116},[106,72340,60836],{"class":165},[106,72342,1283],{"class":116},[106,72344,72345,72347,72349,72351],{"class":108,"line":9734},[106,72346,61971],{"class":165},[106,72348,51431],{"class":116},[106,72350,308],{"class":165},[106,72352,1283],{"class":116},[106,72354,72355],{"class":108,"line":9757},[106,72356,2179],{"class":116},[106,72358,72359],{"class":108,"line":9781},[106,72360,2392],{"emptyLinePlaceholder":33},[106,72362,72363,72365,72367],{"class":108,"line":9786},[106,72364,72282],{"class":51294},[106,72366,51682],{"class":51294},[106,72368,15565],{"class":116},[106,72370,72371,72373,72375,72378],{"class":108,"line":9791},[106,72372,55003],{"class":165},[106,72374,51431],{"class":116},[106,72376,72377],{"class":165},"inline-block",[106,72379,1283],{"class":116},[106,72381,72382,72384,72386,72388,72390],{"class":108,"line":9796},[106,72383,54765],{"class":165},[106,72385,51431],{"class":116},[106,72387,563],{"class":165},[106,72389,51486],{"class":112},[106,72391,1283],{"class":116},[106,72393,72394,72396,72398,72400,72402],{"class":108,"line":9805},[106,72395,54779],{"class":165},[106,72397,51431],{"class":116},[106,72399,563],{"class":165},[106,72401,51486],{"class":112},[106,72403,1283],{"class":116},[106,72405,72406,72408,72410,72412,72414],{"class":108,"line":9810},[106,72407,57353],{"class":165},[106,72409,51431],{"class":116},[106,72411,589],{"class":165},[106,72413,51486],{"class":112},[106,72415,1283],{"class":116},[106,72417,72418,72420,72422,72424,72426,72428,72431],{"class":108,"line":9816},[106,72419,61971],{"class":165},[106,72421,51431],{"class":116},[106,72423,334],{"class":165},[106,72425,51486],{"class":112},[106,72427,51515],{"class":165},[106,72429,72430],{"class":165}," #fff",[106,72432,1283],{"class":116},[106,72434,72435,72437,72439,72441,72443],{"class":108,"line":9837},[106,72436,55128],{"class":165},[106,72438,51431],{"class":116},[106,72440,436],{"class":165},[106,72442,51486],{"class":112},[106,72444,1283],{"class":116},[106,72446,72447,72449,72451,72453,72455],{"class":108,"line":9843},[106,72448,61744],{"class":165},[106,72450,51431],{"class":116},[106,72452,334],{"class":165},[106,72454,51486],{"class":112},[106,72456,1283],{"class":116},[106,72458,72459],{"class":108,"line":9857},[106,72460,2179],{"class":116},[106,72462,72463],{"class":108,"line":9863},[106,72464,2392],{"emptyLinePlaceholder":33},[106,72466,72467,72470],{"class":108,"line":9890},[106,72468,72469],{"class":1955},"    .total",[106,72471,15565],{"class":116},[106,72473,72474,72476,72478,72480,72482],{"class":108,"line":9899},[106,72475,54765],{"class":165},[106,72477,51431],{"class":116},[106,72479,61623],{"class":165},[106,72481,51486],{"class":112},[106,72483,1283],{"class":116},[106,72485,72486,72488,72490,72492,72494],{"class":108,"line":9905},[106,72487,54779],{"class":165},[106,72489,51431],{"class":116},[106,72491,518],{"class":165},[106,72493,51486],{"class":112},[106,72495,1283],{"class":116},[106,72497,72498,72500,72502,72504,72506],{"class":108,"line":9913},[106,72499,57353],{"class":165},[106,72501,51431],{"class":116},[106,72503,518],{"class":165},[106,72505,51486],{"class":112},[106,72507,1283],{"class":116},[106,72509,72510,72512,72514,72517],{"class":108,"line":9918},[106,72511,57280],{"class":165},[106,72513,51431],{"class":116},[106,72515,72516],{"class":165},"right",[106,72518,1283],{"class":116},[106,72520,72521,72523,72525,72527,72529,72531,72533,72535],{"class":108,"line":16597},[106,72522,54700],{"class":165},[106,72524,51431],{"class":116},[106,72526,518],{"class":165},[106,72528,51486],{"class":112},[106,72530,51550],{"class":165},[106,72532,2030],{"class":165},[106,72534,51486],{"class":112},[106,72536,1283],{"class":116},[106,72538,72539,72542,72544,72546,72548],{"class":108,"line":16603},[106,72540,72541],{"class":165},"      padding-right",[106,72543,51431],{"class":116},[106,72545,563],{"class":165},[106,72547,51486],{"class":112},[106,72549,1283],{"class":116},[106,72551,72552,72554,72556,72558,72560],{"class":108,"line":16626},[106,72553,54916],{"class":165},[106,72555,51431],{"class":116},[106,72557,640],{"class":165},[106,72559,51486],{"class":112},[106,72561,1283],{"class":116},[106,72563,72564,72566,72568,72570,72572,72575,72577,72580,72582,72584],{"class":108,"line":16632},[106,72565,54878],{"class":165},[106,72567,51431],{"class":116},[106,72569,72317],{"class":165},[106,72571,117],{"class":116},[106,72573,72574],{"class":165},"237",[106,72576,12428],{"class":116},[106,72578,72579],{"class":165},"235",[106,72581,12428],{"class":116},[106,72583,72579],{"class":165},[106,72585,2711],{"class":116},[106,72587,72588,72591,72593,72595],{"class":108,"line":16655},[106,72589,72590],{"class":165},"      box-sizing",[106,72592,51431],{"class":116},[106,72594,60499],{"class":165},[106,72596,1283],{"class":116},[106,72598,72599],{"class":108,"line":16669},[106,72600,2179],{"class":116},[106,72602,72603],{"class":108,"line":16689},[106,72604,2392],{"emptyLinePlaceholder":33},[106,72606,72607,72609,72611],{"class":108,"line":16695},[106,72608,72469],{"class":1955},[106,72610,51682],{"class":51294},[106,72612,15565],{"class":116},[106,72614,72615,72617,72619,72621],{"class":108,"line":16706},[106,72616,57410],{"class":165},[106,72618,51431],{"class":116},[106,72620,57415],{"class":165},[106,72622,1283],{"class":116},[106,72624,72625],{"class":108,"line":16729},[106,72626,2179],{"class":116},[106,72628,72629],{"class":108,"line":16751},[106,72630,2392],{"emptyLinePlaceholder":33},[106,72632,72633,72635],{"class":108,"line":16756},[106,72634,65017],{"class":51294},[106,72636,15565],{"class":116},[106,72638,72639,72641,72643,72645,72647],{"class":108,"line":16762},[106,72640,54765],{"class":165},[106,72642,51431],{"class":116},[106,72644,61623],{"class":165},[106,72646,51486],{"class":112},[106,72648,1283],{"class":116},[106,72650,72651,72653,72655,72658],{"class":108,"line":16776},[106,72652,54700],{"class":165},[106,72654,51431],{"class":116},[106,72656,72657],{"class":165},"auto",[106,72659,1283],{"class":116},[106,72661,72662,72664,72666,72668],{"class":108,"line":16789},[106,72663,65024],{"class":165},[106,72665,51431],{"class":116},[106,72667,65029],{"class":165},[106,72669,1283],{"class":116},[106,72671,72672],{"class":108,"line":16794},[106,72673,2179],{"class":116},[106,72675,72676],{"class":108,"line":16808},[106,72677,2392],{"emptyLinePlaceholder":33},[106,72679,72680,72682],{"class":108,"line":16813},[106,72681,65109],{"class":51294},[106,72683,15565],{"class":116},[106,72685,72686,72688,72690,72692,72694,72696,72698,72700,72702,72704],{"class":108,"line":16819},[106,72687,54878],{"class":165},[106,72689,51431],{"class":116},[106,72691,72317],{"class":165},[106,72693,117],{"class":116},[106,72695,72574],{"class":165},[106,72697,12428],{"class":116},[106,72699,72579],{"class":165},[106,72701,12428],{"class":116},[106,72703,72579],{"class":165},[106,72705,2711],{"class":116},[106,72707,72708],{"class":108,"line":16824},[106,72709,2179],{"class":116},[106,72711,72712],{"class":108,"line":16838},[106,72713,2392],{"emptyLinePlaceholder":33},[106,72715,72716,72718],{"class":108,"line":16843},[106,72717,65109],{"class":51294},[106,72719,31460],{"class":116},[106,72721,72722,72724],{"class":108,"line":16848},[106,72723,65175],{"class":51294},[106,72725,15565],{"class":116},[106,72727,72728,72730,72732,72734,72736],{"class":108,"line":16862},[106,72729,54779],{"class":165},[106,72731,51431],{"class":116},[106,72733,390],{"class":165},[106,72735,51486],{"class":112},[106,72737,1283],{"class":116},[106,72739,72740,72742,72744,72746],{"class":108,"line":16874},[106,72741,57280],{"class":165},[106,72743,51431],{"class":116},[106,72745,23729],{"class":165},[106,72747,1283],{"class":116},[106,72749,72750,72752,72754,72756,72758],{"class":108,"line":16879},[106,72751,54916],{"class":165},[106,72753,51431],{"class":116},[106,72755,666],{"class":165},[106,72757,51486],{"class":112},[106,72759,1283],{"class":116},[106,72761,72762,72764,72766,72768,72770,72772,72774,72776,72779,72781,72784,72786,72788],{"class":108,"line":16892},[106,72763,61971],{"class":165},[106,72765,51431],{"class":116},[106,72767,334],{"class":165},[106,72769,51486],{"class":112},[106,72771,51515],{"class":165},[106,72773,72254],{"class":165},[106,72775,117],{"class":116},[106,72777,72778],{"class":165},"228",[106,72780,12428],{"class":116},[106,72782,72783],{"class":165},"225",[106,72785,12428],{"class":116},[106,72787,72783],{"class":165},[106,72789,2711],{"class":116},[106,72791,72792,72795,72797,72799,72801],{"class":108,"line":16897},[106,72793,72794],{"class":165},"      padding-left",[106,72796,51431],{"class":116},[106,72798,436],{"class":165},[106,72800,51486],{"class":112},[106,72802,1283],{"class":116},[106,72804,72805,72807,72809,72811,72814,72816,72818],{"class":108,"line":16902},[106,72806,61854],{"class":165},[106,72808,51431],{"class":116},[106,72810,28115],{"class":165},[106,72812,72813],{"class":165}," linear",[106,72815,61861],{"class":165},[106,72817,812],{"class":112},[106,72819,1283],{"class":116},[106,72821,72822],{"class":108,"line":16907},[106,72823,2179],{"class":116},[106,72825,72826],{"class":108,"line":16920},[106,72827,2392],{"emptyLinePlaceholder":33},[106,72829,72830,72833,72835,72837],{"class":108,"line":16925},[106,72831,72832],{"class":51294},"    tbody",[106,72834,70138],{"class":51294},[106,72836,60934],{"class":1955},[106,72838,15565],{"class":116},[106,72840,72841,72843,72845,72847,72849,72851,72853,72855,72857,72859],{"class":108,"line":32627},[106,72842,54878],{"class":165},[106,72844,51431],{"class":116},[106,72846,72317],{"class":165},[106,72848,117],{"class":116},[106,72850,72574],{"class":165},[106,72852,12428],{"class":116},[106,72854,72579],{"class":165},[106,72856,12428],{"class":116},[106,72858,72579],{"class":165},[106,72860,2711],{"class":116},[106,72862,72863,72865,72867,72869],{"class":108,"line":32633},[106,72864,62019],{"class":165},[106,72866,51431],{"class":116},[106,72868,62024],{"class":165},[106,72870,1283],{"class":116},[106,72872,72873],{"class":108,"line":32639},[106,72874,2179],{"class":116},[106,72876,72877],{"class":108,"line":32645},[106,72878,2392],{"emptyLinePlaceholder":33},[106,72880,72881,72883,72885,72888,72890],{"class":108,"line":32651},[106,72882,72832],{"class":51294},[106,72884,70138],{"class":51294},[106,72886,72887],{"class":51294}," td",[106,72889,1391],{"class":51294},[106,72891,15565],{"class":116},[106,72893,72894,72896,72898,72900],{"class":108,"line":32662},[106,72895,55003],{"class":165},[106,72897,51431],{"class":116},[106,72899,60863],{"class":165},[106,72901,1283],{"class":116},[106,72903,72904,72906,72908,72910,72912],{"class":108,"line":32668},[106,72905,54765],{"class":165},[106,72907,51431],{"class":116},[106,72909,1024],{"class":165},[106,72911,51486],{"class":112},[106,72913,1283],{"class":116},[106,72915,72916,72918,72920,72922,72924],{"class":108,"line":32688},[106,72917,54779],{"class":165},[106,72919,51431],{"class":116},[106,72921,942],{"class":165},[106,72923,51486],{"class":112},[106,72925,1283],{"class":116},[106,72927,72928,72930,72932,72934,72936],{"class":108,"line":32694},[106,72929,57353],{"class":165},[106,72931,51431],{"class":116},[106,72933,942],{"class":165},[106,72935,51486],{"class":112},[106,72937,1283],{"class":116},[106,72939,72940,72942,72944,72946,72948],{"class":108,"line":32705},[106,72941,62071],{"class":165},[106,72943,51431],{"class":116},[106,72945,194],{"class":165},[106,72947,51486],{"class":112},[106,72949,1283],{"class":116},[106,72951,72952,72954,72956,72958],{"class":108,"line":32711},[106,72953,57410],{"class":165},[106,72955,51431],{"class":116},[106,72957,60836],{"class":165},[106,72959,1283],{"class":116},[106,72961,72962,72964,72966,72968],{"class":108,"line":32717},[106,72963,57280],{"class":165},[106,72965,51431],{"class":116},[106,72967,51586],{"class":165},[106,72969,1283],{"class":116},[106,72971,72972,72974,72976,72978],{"class":108,"line":32723},[106,72973,63964],{"class":165},[106,72975,51431],{"class":116},[106,72977,54731],{"class":165},[106,72979,1283],{"class":116},[106,72981,72982,72984,72986,72989],{"class":108,"line":32729},[106,72983,54878],{"class":165},[106,72985,51431],{"class":116},[106,72987,72988],{"class":165},"orange",[106,72990,1283],{"class":116},[106,72992,72993,72995,72997,73000,73002],{"class":108,"line":32735},[106,72994,55128],{"class":165},[106,72996,51431],{"class":116},[106,72998,72999],{"class":165},"12.5",[106,73001,51486],{"class":112},[106,73003,1283],{"class":116},[106,73005,73006],{"class":108,"line":32741},[106,73007,2179],{"class":116},[106,73009,73010,73012,73014],{"class":108,"line":32747},[106,73011,52411],{"class":116},[106,73013,5119],{"class":51294},[106,73015,51301],{"class":116},[106,73017,73018,73020,73022],{"class":108,"line":32767},[106,73019,51779],{"class":116},[106,73021,51328],{"class":51294},[106,73023,51301],{"class":116},[106,73025,73026],{"class":108,"line":32773},[106,73027,2392],{"emptyLinePlaceholder":33},[106,73029,73030,73032,73034],{"class":108,"line":32789},[106,73031,1027],{"class":116},[106,73033,51794],{"class":51294},[106,73035,51301],{"class":116},[106,73037,73038,73040,73042,73045,73047],{"class":108,"line":32795},[106,73039,52138],{"class":116},[106,73041,48],{"class":51294},[106,73043,73044],{"class":116},">学生就业统计表\u003C\u002F",[106,73046,48],{"class":51294},[106,73048,51301],{"class":116},[106,73050,73051,73053,73055,73057,73059,73061,73063,73065,73067],{"class":108,"line":32809},[106,73052,52138],{"class":116},[106,73054,66619],{"class":51294},[106,73056,53480],{"class":1955},[106,73058,162],{"class":116},[106,73060,62658],{"class":221},[106,73062,69064],{"class":1955},[106,73064,162],{"class":116},[106,73066,31770],{"class":221},[106,73068,51301],{"class":116},[106,73070,73071,73073,73075,73077,73079,73081,73083,73085,73087,73089,73091,73094,73096,73098,73100],{"class":108,"line":32815},[106,73072,51335],{"class":116},[106,73074,53815],{"class":51294},[106,73076,53818],{"class":1955},[106,73078,162],{"class":116},[106,73080,62693],{"class":221},[106,73082,14913],{"class":1955},[106,73084,162],{"class":116},[106,73086,69090],{"class":221},[106,73088,61014],{"class":1955},[106,73090,162],{"class":116},[106,73092,73093],{"class":221},"\"姓名\"",[106,73095,53480],{"class":1955},[106,73097,162],{"class":116},[106,73099,69090],{"class":221},[106,73101,51301],{"class":116},[106,73103,73104,73106,73108,73110,73112,73114,73116,73118,73120,73122,73124,73127,73129,73131,73133],{"class":108,"line":32830},[106,73105,51335],{"class":116},[106,73107,53815],{"class":51294},[106,73109,53818],{"class":1955},[106,73111,162],{"class":116},[106,73113,62693],{"class":221},[106,73115,14913],{"class":1955},[106,73117,162],{"class":116},[106,73119,69118],{"class":221},[106,73121,61014],{"class":1955},[106,73123,162],{"class":116},[106,73125,73126],{"class":221},"\"年龄\"",[106,73128,53480],{"class":1955},[106,73130,162],{"class":116},[106,73132,69118],{"class":221},[106,73134,51301],{"class":116},[106,73136,73137,73139,73141,73143,73145,73147,73149,73151,73153,73155,73157,73160,73162,73164,73166],{"class":108,"line":32836},[106,73138,51335],{"class":116},[106,73140,53815],{"class":51294},[106,73142,53818],{"class":1955},[106,73144,162],{"class":116},[106,73146,62693],{"class":221},[106,73148,14913],{"class":1955},[106,73150,162],{"class":116},[106,73152,69220],{"class":221},[106,73154,61014],{"class":1955},[106,73156,162],{"class":116},[106,73158,73159],{"class":221},"\"薪资\"",[106,73161,53480],{"class":1955},[106,73163,162],{"class":116},[106,73165,69220],{"class":221},[106,73167,51301],{"class":116},[106,73169,73170,73172,73174,73176,73178,73180,73182,73184,73186,73188,73190,73192],{"class":108,"line":32845},[106,73171,51335],{"class":116},[106,73173,69138],{"class":51294},[106,73175,14913],{"class":1955},[106,73177,162],{"class":116},[106,73179,69145],{"class":221},[106,73181,14952],{"class":1955},[106,73183,162],{"class":116},[106,73185,7645],{"class":221},[106,73187,53480],{"class":1955},[106,73189,162],{"class":116},[106,73191,69145],{"class":221},[106,73193,51301],{"class":116},[106,73195,73196,73198,73200,73202,73204,73206,73208,73210],{"class":108,"line":32851},[106,73197,55228],{"class":116},[106,73199,69160],{"class":51294},[106,73201,66645],{"class":1955},[106,73203,162],{"class":116},[106,73205,9954],{"class":221},[106,73207,69169],{"class":116},[106,73209,69160],{"class":51294},[106,73211,51301],{"class":116},[106,73213,73214,73216,73218,73220,73222,73224,73226,73228],{"class":108,"line":32860},[106,73215,55228],{"class":116},[106,73217,69160],{"class":51294},[106,73219,66645],{"class":1955},[106,73221,162],{"class":116},[106,73223,10023],{"class":221},[106,73225,69188],{"class":116},[106,73227,69160],{"class":51294},[106,73229,51301],{"class":116},[106,73231,73232,73234,73236],{"class":108,"line":32866},[106,73233,51770],{"class":116},[106,73235,69138],{"class":51294},[106,73237,51301],{"class":116},[106,73239,73240,73242,73244,73246,73248,73250,73252,73254,73256,73258,73260,73262],{"class":108,"line":32872},[106,73241,51335],{"class":116},[106,73243,69138],{"class":51294},[106,73245,14913],{"class":1955},[106,73247,162],{"class":116},[106,73249,69242],{"class":221},[106,73251,14952],{"class":1955},[106,73253,162],{"class":116},[106,73255,7645],{"class":221},[106,73257,53480],{"class":1955},[106,73259,162],{"class":116},[106,73261,69242],{"class":221},[106,73263,51301],{"class":116},[106,73265,73266,73268,73270,73272,73274,73276,73278,73280],{"class":108,"line":32881},[106,73267,55228],{"class":116},[106,73269,69160],{"class":51294},[106,73271,66645],{"class":1955},[106,73273,162],{"class":116},[106,73275,69263],{"class":221},[106,73277,69266],{"class":116},[106,73279,69160],{"class":51294},[106,73281,51301],{"class":116},[106,73283,73284,73286,73288,73290,73292,73294,73296,73298],{"class":108,"line":32887},[106,73285,55228],{"class":116},[106,73287,69160],{"class":51294},[106,73289,66645],{"class":1955},[106,73291,162],{"class":116},[106,73293,69283],{"class":221},[106,73295,69286],{"class":116},[106,73297,69160],{"class":51294},[106,73299,51301],{"class":116},[106,73301,73302,73304,73306,73308,73310,73312,73314,73316],{"class":108,"line":32898},[106,73303,55228],{"class":116},[106,73305,69160],{"class":51294},[106,73307,66645],{"class":1955},[106,73309,162],{"class":116},[106,73311,69303],{"class":221},[106,73313,69306],{"class":116},[106,73315,69160],{"class":51294},[106,73317,51301],{"class":116},[106,73319,73320,73322,73324,73326,73328,73330,73332,73334],{"class":108,"line":32904},[106,73321,55228],{"class":116},[106,73323,69160],{"class":51294},[106,73325,66645],{"class":1955},[106,73327,162],{"class":116},[106,73329,69323],{"class":221},[106,73331,69326],{"class":116},[106,73333,69160],{"class":51294},[106,73335,51301],{"class":116},[106,73337,73338,73340,73342,73344,73346,73348,73350,73352],{"class":108,"line":32923},[106,73339,55228],{"class":116},[106,73341,69160],{"class":51294},[106,73343,66645],{"class":1955},[106,73345,162],{"class":116},[106,73347,69343],{"class":221},[106,73349,69346],{"class":116},[106,73351,69160],{"class":51294},[106,73353,51301],{"class":116},[106,73355,73356,73358,73360],{"class":108,"line":32929},[106,73357,51770],{"class":116},[106,73359,69138],{"class":51294},[106,73361,51301],{"class":116},[106,73363,73364,73366,73368],{"class":108,"line":32940},[106,73365,51335],{"class":116},[106,73367,53881],{"class":51294},[106,73369,51301],{"class":116},[106,73371,73372,73374,73376,73379,73381,73384,73386],{"class":108,"line":32946},[106,73373,55228],{"class":116},[106,73375,106],{"class":51294},[106,73377,73378],{"class":116},">+\u003C\u002F",[106,73380,106],{"class":51294},[106,73382,73383],{"class":116},">添加\u003C\u002F",[106,73385,53881],{"class":51294},[106,73387,51301],{"class":116},[106,73389,73390,73392,73394],{"class":108,"line":32966},[106,73391,52411],{"class":116},[106,73393,66619],{"class":51294},[106,73395,51301],{"class":116},[106,73397,73398,73400,73402,73404,73406,73408,73411,73413,73416,73418,73421,73423],{"class":108,"line":32982},[106,73399,52138],{"class":116},[106,73401,51605],{"class":51294},[106,73403,53480],{"class":1955},[106,73405,162],{"class":116},[106,73407,62574],{"class":221},[106,73409,73410],{"class":116},">共有数据 \u003C",[106,73412,106],{"class":51294},[106,73414,73415],{"class":116},">0\u003C\u002F",[106,73417,106],{"class":51294},[106,73419,73420],{"class":116},"> 条\u003C\u002F",[106,73422,51605],{"class":51294},[106,73424,51301],{"class":116},[106,73426,73427,73429,73431],{"class":108,"line":32988},[106,73428,52138],{"class":116},[106,73430,254],{"class":51294},[106,73432,51301],{"class":116},[106,73434,73435,73437,73439],{"class":108,"line":33002},[106,73436,51335],{"class":116},[106,73438,257],{"class":51294},[106,73440,51301],{"class":116},[106,73442,73443,73445,73447],{"class":108,"line":33008},[106,73444,55228],{"class":116},[106,73446,260],{"class":51294},[106,73448,51301],{"class":116},[106,73450,73451,73453,73455,73458,73460],{"class":108,"line":33014},[106,73452,55296],{"class":116},[106,73454,263],{"class":51294},[106,73456,73457],{"class":116},">ID\u003C\u002F",[106,73459,263],{"class":51294},[106,73461,51301],{"class":116},[106,73463,73464,73466,73468,73470,73472],{"class":108,"line":33025},[106,73465,55296],{"class":116},[106,73467,263],{"class":51294},[106,73469,69449],{"class":116},[106,73471,263],{"class":51294},[106,73473,51301],{"class":116},[106,73475,73476,73478,73480,73482,73484],{"class":108,"line":33031},[106,73477,55296],{"class":116},[106,73479,263],{"class":51294},[106,73481,69462],{"class":116},[106,73483,263],{"class":51294},[106,73485,51301],{"class":116},[106,73487,73488,73490,73492,73494,73496],{"class":108,"line":33037},[106,73489,55296],{"class":116},[106,73491,263],{"class":51294},[106,73493,69475],{"class":116},[106,73495,263],{"class":51294},[106,73497,51301],{"class":116},[106,73499,73500,73502,73504,73506,73508],{"class":108,"line":33047},[106,73501,55296],{"class":116},[106,73503,263],{"class":51294},[106,73505,69488],{"class":116},[106,73507,263],{"class":51294},[106,73509,51301],{"class":116},[106,73511,73512,73514,73516,73518,73520],{"class":108,"line":33053},[106,73513,55296],{"class":116},[106,73515,263],{"class":51294},[106,73517,69501],{"class":116},[106,73519,263],{"class":51294},[106,73521,51301],{"class":116},[106,73523,73524,73526,73528,73531,73533],{"class":108,"line":33064},[106,73525,55296],{"class":116},[106,73527,263],{"class":51294},[106,73529,73530],{"class":116},">录入时间\u003C\u002F",[106,73532,263],{"class":51294},[106,73534,51301],{"class":116},[106,73536,73537,73539,73541,73543,73545],{"class":108,"line":33070},[106,73538,55296],{"class":116},[106,73540,263],{"class":51294},[106,73542,69514],{"class":116},[106,73544,263],{"class":51294},[106,73546,51301],{"class":116},[106,73548,73549,73551,73553],{"class":108,"line":33080},[106,73550,55401],{"class":116},[106,73552,260],{"class":51294},[106,73554,51301],{"class":116},[106,73556,73557,73559,73561],{"class":108,"line":33085},[106,73558,51770],{"class":116},[106,73560,257],{"class":51294},[106,73562,51301],{"class":116},[106,73564,73565,73567,73569],{"class":108,"line":33091},[106,73566,51335],{"class":116},[106,73568,301],{"class":51294},[106,73570,51301],{"class":116},[106,73572,73573],{"class":108,"line":33140},[106,73574,73575],{"class":175},"      \u003C!-- \u003Ctr>\n",[106,73577,73578],{"class":108,"line":33187},[106,73579,73580],{"class":175},"        \u003Ctd>1\u003C\u002Ftd>\n",[106,73582,73583],{"class":108,"line":33192},[106,73584,73580],{"class":175},[106,73586,73587],{"class":108,"line":33198},[106,73588,73580],{"class":175},[106,73590,73591],{"class":108,"line":33217},[106,73592,73580],{"class":175},[106,73594,73595],{"class":108,"line":33223},[106,73596,73580],{"class":175},[106,73598,73599],{"class":108,"line":33243},[106,73600,73580],{"class":175},[106,73602,73603],{"class":108,"line":33249},[106,73604,73580],{"class":175},[106,73606,73607],{"class":108,"line":33255},[106,73608,73609],{"class":175},"        \u003Ctd>\n",[106,73611,73612],{"class":108,"line":33265},[106,73613,73614],{"class":175},"          \u003Ca href=\"#\" data-id=\"\">\u003C\u002Fa>\n",[106,73616,73617],{"class":108,"line":33270},[106,73618,73619],{"class":175},"        \u003C\u002Ftd>\n",[106,73621,73622],{"class":108,"line":33276},[106,73623,73624],{"class":175},"      \u003C\u002Ftr> -->\n",[106,73626,73627,73629,73631],{"class":108,"line":33292},[106,73628,51770],{"class":116},[106,73630,301],{"class":51294},[106,73632,51301],{"class":116},[106,73634,73635,73637,73639],{"class":108,"line":33337},[106,73636,52411],{"class":116},[106,73638,254],{"class":51294},[106,73640,51301],{"class":116},[106,73642,73643,73645,73647],{"class":108,"line":33343},[106,73644,52138],{"class":116},[106,73646,51807],{"class":51294},[106,73648,51301],{"class":116},[106,73650,73651],{"class":108,"line":33349},[106,73652,73653],{"class":175},"    \u002F\u002F const initData = [{\n",[106,73655,73656],{"class":108,"line":33355},[106,73657,73658],{"class":175},"    \u002F\u002F   unameId: 1,\n",[106,73660,73661],{"class":108,"line":33366},[106,73662,73663],{"class":175},"    \u002F\u002F   uname: '华晨宇',\n",[106,73665,73666],{"class":108,"line":33372},[106,73667,73668],{"class":175},"    \u002F\u002F   age: 22,\n",[106,73670,73671],{"class":108,"line":33378},[106,73672,73673],{"class":175},"    \u002F\u002F   salary: 12000,\n",[106,73675,73676],{"class":108,"line":33384},[106,73677,73678],{"class":175},"    \u002F\u002F   gender: '男',\n",[106,73680,73681],{"class":108,"line":33402},[106,73682,73683],{"class":175},"    \u002F\u002F   city: '北京',\n",[106,73685,73686],{"class":108,"line":33416},[106,73687,73688],{"class":175},"    \u002F\u002F   time: '2099\u002F9\u002F9 08:08:08'\n",[106,73690,73691],{"class":108,"line":33425},[106,73692,73693],{"class":175},"    \u002F\u002F }]\n",[106,73695,73696],{"class":108,"line":33434},[106,73697,73698],{"class":175},"    \u002F\u002F localStorage.setItem('data', JSON.stringify(initData))\n",[106,73700,73701],{"class":108,"line":33443},[106,73702,73703],{"class":175},"    \u002F\u002F 1.渲染业务\n",[106,73705,73706],{"class":108,"line":33452},[106,73707,73708],{"class":175},"    \u002F\u002F 1.1 先读取本地存储的数据\n",[106,73710,73711],{"class":108,"line":33458},[106,73712,73713],{"class":175},"    \u002F\u002F (1) 本地存储有数据记得转换为对象然后存储到变量里面，后期用于渲染页面\n",[106,73715,73716],{"class":108,"line":33464},[106,73717,73718],{"class":175},"    \u002F\u002F (2) 如果没有数据，则用空数组来代替\n",[106,73720,73721],{"class":108,"line":33472},[106,73722,2392],{"emptyLinePlaceholder":33},[106,73724,73725],{"class":108,"line":33477},[106,73726,73727],{"class":175},"    \u002F\u002F 下面这句话意思是去本地存储读取最新的数据\n",[106,73729,73730],{"class":108,"line":33483},[106,73731,73732],{"class":175},"    \u002F\u002F const arr = JSON.parse(localStorage.getItem('data')) || []\n",[106,73734,73735,73737,73739,73741],{"class":108,"line":33494},[106,73736,11214],{"class":112},[106,73738,57689],{"class":165},[106,73740,13557],{"class":112},[106,73742,51832],{"class":116},[106,73744,73745,73748,73750],{"class":108,"line":33500},[106,73746,73747],{"class":116},"    console.",[106,73749,58241],{"class":1955},[106,73751,52406],{"class":116},[106,73753,73754],{"class":108,"line":33520},[106,73755,2392],{"emptyLinePlaceholder":33},[106,73757,73758],{"class":108,"line":33526},[106,73759,73760],{"class":175},"    \u002F\u002F 时间函数\n",[106,73762,73763,73765,73768],{"class":108,"line":33532},[106,73764,70078],{"class":112},[106,73766,73767],{"class":1955}," getTime",[106,73769,10846],{"class":116},[106,73771,73772,73774,73777,73779,73781,73784],{"class":108,"line":33538},[106,73773,58222],{"class":112},[106,73775,73776],{"class":165}," date",[106,73778,13557],{"class":112},[106,73780,11571],{"class":112},[106,73782,73783],{"class":1955}," Date",[106,73785,1968],{"class":116},[106,73787,73788,73790,73792,73794,73797,73800,73802,73804,73806,73809,73812,73814,73816,73818,73820,73822,73824,73826],{"class":108,"line":33555},[106,73789,58222],{"class":112},[106,73791,16084],{"class":165},[106,73793,13557],{"class":112},[106,73795,73796],{"class":116}," date.",[106,73798,73799],{"class":1955},"getHours",[106,73801,13043],{"class":116},[106,73803,1027],{"class":112},[106,73805,2030],{"class":165},[106,73807,73808],{"class":112}," ?",[106,73810,73811],{"class":221}," '0'",[106,73813,45560],{"class":112},[106,73815,73796],{"class":116},[106,73817,73799],{"class":1955},[106,73819,13043],{"class":116},[106,73821,976],{"class":112},[106,73823,73796],{"class":116},[106,73825,73799],{"class":1955},[106,73827,1968],{"class":116},[106,73829,73830,73832,73835,73837,73839,73842,73844,73846,73848,73850,73852,73854,73856,73858,73860,73862,73864,73866],{"class":108,"line":33561},[106,73831,58222],{"class":112},[106,73833,73834],{"class":165}," m",[106,73836,13557],{"class":112},[106,73838,73796],{"class":116},[106,73840,73841],{"class":1955},"getMinutes",[106,73843,13043],{"class":116},[106,73845,1027],{"class":112},[106,73847,2030],{"class":165},[106,73849,73808],{"class":112},[106,73851,73811],{"class":221},[106,73853,45560],{"class":112},[106,73855,73796],{"class":116},[106,73857,73841],{"class":1955},[106,73859,13043],{"class":116},[106,73861,976],{"class":112},[106,73863,73796],{"class":116},[106,73865,73841],{"class":1955},[106,73867,1968],{"class":116},[106,73869,73870,73872,73874,73876,73878,73881,73883,73885,73887,73889,73891,73893,73895,73897,73899,73901,73903,73905],{"class":108,"line":33567},[106,73871,58222],{"class":112},[106,73873,8421],{"class":165},[106,73875,13557],{"class":112},[106,73877,73796],{"class":116},[106,73879,73880],{"class":1955},"getSeconds",[106,73882,13043],{"class":116},[106,73884,1027],{"class":112},[106,73886,2030],{"class":165},[106,73888,73808],{"class":112},[106,73890,73811],{"class":221},[106,73892,45560],{"class":112},[106,73894,73796],{"class":116},[106,73896,73880],{"class":1955},[106,73898,13043],{"class":116},[106,73900,976],{"class":112},[106,73902,73796],{"class":116},[106,73904,73880],{"class":1955},[106,73906,1968],{"class":116},[106,73908,73909,73911,73914,73916,73918,73921,73923,73926,73928,73931,73933,73935,73938,73940,73942,73944,73946,73948,73950,73953,73955,73958,73960,73963,73965,73967,73969],{"class":108,"line":33573},[106,73910,58222],{"class":112},[106,73912,73913],{"class":165}," str",[106,73915,13557],{"class":112},[106,73917,62897],{"class":221},[106,73919,73920],{"class":116},"date",[106,73922,675],{"class":221},[106,73924,73925],{"class":1955},"getFullYear",[106,73927,2419],{"class":221},[106,73929,73930],{"class":221},"}\u002F${",[106,73932,73920],{"class":116},[106,73934,675],{"class":221},[106,73936,73937],{"class":1955},"getMonth",[106,73939,13043],{"class":221},[106,73941,598],{"class":112},[106,73943,25112],{"class":165},[106,73945,73930],{"class":221},[106,73947,73920],{"class":116},[106,73949,675],{"class":221},[106,73951,73952],{"class":1955},"getDate",[106,73954,2419],{"class":221},[106,73956,73957],{"class":221},"} ${",[106,73959,532],{"class":116},[106,73961,73962],{"class":221},"}:${",[106,73964,661],{"class":116},[106,73966,73962],{"class":221},[106,73968,812],{"class":116},[106,73970,73971],{"class":221},"}`\n",[106,73973,73974,73977],{"class":108,"line":33579},[106,73975,73976],{"class":112},"      return",[106,73978,73979],{"class":116}," str\n",[106,73981,73982],{"class":108,"line":33585},[106,73983,2179],{"class":116},[106,73985,73986],{"class":108,"line":33612},[106,73987,73988],{"class":175},"    \u002F\u002F 渲染函数\n",[106,73990,73991,73993,73995,73997,73999,74001,74003,74005],{"class":108,"line":33636},[106,73992,11214],{"class":112},[106,73994,69741],{"class":165},[106,73996,13557],{"class":112},[106,73998,54390],{"class":116},[106,74000,54393],{"class":1955},[106,74002,117],{"class":116},[106,74004,69752],{"class":221},[106,74006,123],{"class":116},[106,74008,74009,74011,74013],{"class":108,"line":33642},[106,74010,70078],{"class":112},[106,74012,70081],{"class":1955},[106,74014,10846],{"class":116},[106,74016,74017],{"class":108,"line":33648},[106,74018,74019],{"class":175},"      \u002F\u002F (1) 利用map遍历数组，返回对应tr的数组\n",[106,74021,74022],{"class":108,"line":33654},[106,74023,74024],{"class":175},"      \u002F\u002F map遍历的是数组，这里里边存的都是对象，所以ele就是代表里边的对象\n",[106,74026,74027,74029,74032,74034,74036,74039,74041,74043,74045,74048,74050,74053],{"class":108,"line":33665},[106,74028,58222],{"class":112},[106,74030,74031],{"class":165}," trArr",[106,74033,13557],{"class":112},[106,74035,51959],{"class":116},[106,74037,74038],{"class":1955},"map",[106,74040,117],{"class":116},[106,74042,54443],{"class":112},[106,74044,1650],{"class":116},[106,74046,74047],{"class":5209},"ele",[106,74049,12428],{"class":116},[106,74051,74052],{"class":5209},"index",[106,74054,12435],{"class":116},[106,74056,74057,74059],{"class":108,"line":33676},[106,74058,14745],{"class":112},[106,74060,70162],{"class":221},[106,74062,74063],{"class":108,"line":33682},[106,74064,74065],{"class":221},"      \u003Ctr>\n",[106,74067,74068,74070,74072,74074,74077],{"class":108,"line":33699},[106,74069,70167],{"class":221},[106,74071,74047],{"class":116},[106,74073,675],{"class":221},[106,74075,74076],{"class":116},"unameId",[106,74078,70182],{"class":221},[106,74080,74081,74083,74085,74087,74089],{"class":108,"line":33722},[106,74082,70167],{"class":221},[106,74084,74047],{"class":116},[106,74086,675],{"class":221},[106,74088,70198],{"class":116},[106,74090,70182],{"class":221},[106,74092,74093,74095,74097,74099,74101],{"class":108,"line":33745},[106,74094,70167],{"class":221},[106,74096,74047],{"class":116},[106,74098,675],{"class":221},[106,74100,70215],{"class":116},[106,74102,70182],{"class":221},[106,74104,74105,74107,74109,74111,74113],{"class":108,"line":33751},[106,74106,70167],{"class":221},[106,74108,74047],{"class":116},[106,74110,675],{"class":221},[106,74112,70232],{"class":116},[106,74114,70182],{"class":221},[106,74116,74117,74119,74121,74123,74125],{"class":108,"line":33756},[106,74118,70167],{"class":221},[106,74120,74047],{"class":116},[106,74122,675],{"class":221},[106,74124,70249],{"class":116},[106,74126,70182],{"class":221},[106,74128,74129,74131,74133,74135,74137],{"class":108,"line":33765},[106,74130,70167],{"class":221},[106,74132,74047],{"class":116},[106,74134,675],{"class":221},[106,74136,70266],{"class":116},[106,74138,70182],{"class":221},[106,74140,74141,74143,74145,74147,74149],{"class":108,"line":33775},[106,74142,70167],{"class":221},[106,74144,74047],{"class":116},[106,74146,675],{"class":221},[106,74148,2379],{"class":116},[106,74150,70182],{"class":221},[106,74152,74153],{"class":108,"line":33781},[106,74154,73609],{"class":221},[106,74156,74157,74160,74162],{"class":108,"line":33786},[106,74158,74159],{"class":221},"          \u003Ca href=\"#\" data-id=\"${",[106,74161,74052],{"class":116},[106,74163,74164],{"class":221},"}\">删除\u003C\u002Fa>\n",[106,74166,74167],{"class":108,"line":33792},[106,74168,73619],{"class":221},[106,74170,74171],{"class":108,"line":33805},[106,74172,74173],{"class":221},"      \u003C\u002Ftr>\n",[106,74175,74176],{"class":108,"line":33811},[106,74177,74178],{"class":221},"  `\n",[106,74180,74181],{"class":108,"line":33822},[106,74182,64809],{"class":116},[106,74184,74185,74187,74189],{"class":108,"line":33833},[106,74186,58238],{"class":116},[106,74188,58241],{"class":1955},[106,74190,74191],{"class":116},"(trArr)\n",[106,74193,74194],{"class":108,"line":33852},[106,74195,2392],{"emptyLinePlaceholder":33},[106,74197,74198],{"class":108,"line":49512},[106,74199,74200],{"class":175},"      \u002F\u002F (2) 把数组转换为字符串join\n",[106,74202,74203],{"class":108,"line":49517},[106,74204,74205],{"class":175},"      \u002F\u002F (3) 把生成的字符串追加给tobody\n",[106,74207,74208,74210,74212,74215,74218,74220,74223],{"class":108,"line":49526},[106,74209,70093],{"class":116},[106,74211,162],{"class":112},[106,74213,74214],{"class":116}," trArr.",[106,74216,74217],{"class":1955},"join",[106,74219,117],{"class":116},[106,74221,74222],{"class":221},"''",[106,74224,123],{"class":116},[106,74226,74227],{"class":108,"line":49535},[106,74228,74229],{"class":175},"      \u002F\u002F 显示共有几条\n",[106,74231,74232,74234,74236,74238,74241,74244,74246,74248],{"class":108,"line":49540},[106,74233,55765],{"class":116},[106,74235,54393],{"class":1955},[106,74237,117],{"class":116},[106,74239,74240],{"class":221},"'.total span'",[106,74242,74243],{"class":116},").innerHTML ",[106,74245,162],{"class":112},[106,74247,51959],{"class":116},[106,74249,55825],{"class":165},[106,74251,74252],{"class":108,"line":49545},[106,74253,2179],{"class":116},[106,74255,74256],{"class":108,"line":49550},[106,74257,74258],{"class":175},"    \u002F\u002F render()\n",[106,74260,74261],{"class":108,"line":49563},[106,74262,2392],{"emptyLinePlaceholder":33},[106,74264,74265],{"class":108,"line":49568},[106,74266,74267],{"class":175},"    \u002F\u002F 获取DOM对象\n",[106,74269,74270,74272,74274,74276,74278,74280,74282,74284],{"class":108,"line":49577},[106,74271,11214],{"class":112},[106,74273,69815],{"class":165},[106,74275,13557],{"class":112},[106,74277,54390],{"class":116},[106,74279,54393],{"class":1955},[106,74281,117],{"class":116},[106,74283,69826],{"class":221},[106,74285,123],{"class":116},[106,74287,74288,74290,74292,74294,74296,74298,74300,74302],{"class":108,"line":49586},[106,74289,11214],{"class":112},[106,74291,69642],{"class":165},[106,74293,13557],{"class":112},[106,74295,54390],{"class":116},[106,74297,54393],{"class":1955},[106,74299,117],{"class":116},[106,74301,69653],{"class":221},[106,74303,123],{"class":116},[106,74305,74306,74308,74310,74312,74314,74316,74318,74320],{"class":108,"line":49603},[106,74307,11214],{"class":112},[106,74309,15682],{"class":165},[106,74311,13557],{"class":112},[106,74313,54390],{"class":116},[106,74315,54393],{"class":1955},[106,74317,117],{"class":116},[106,74319,69672],{"class":221},[106,74321,123],{"class":116},[106,74323,74325,74327,74329,74331,74333,74335,74337,74339],{"class":108,"line":74324},231,[106,74326,11214],{"class":112},[106,74328,69701],{"class":165},[106,74330,13557],{"class":112},[106,74332,54390],{"class":116},[106,74334,54393],{"class":1955},[106,74336,117],{"class":116},[106,74338,69712],{"class":221},[106,74340,123],{"class":116},[106,74342,74344,74346,74348,74350,74352,74354,74356,74358],{"class":108,"line":74343},232,[106,74345,11214],{"class":112},[106,74347,69681],{"class":165},[106,74349,13557],{"class":112},[106,74351,54390],{"class":116},[106,74353,54393],{"class":1955},[106,74355,117],{"class":116},[106,74357,69692],{"class":221},[106,74359,123],{"class":116},[106,74361,74363,74365,74367,74369,74371,74373,74375,74377],{"class":108,"line":74362},233,[106,74364,11214],{"class":112},[106,74366,69721],{"class":165},[106,74368,13557],{"class":112},[106,74370,54390],{"class":116},[106,74372,54393],{"class":1955},[106,74374,117],{"class":116},[106,74376,69732],{"class":221},[106,74378,123],{"class":116},[106,74380,74382],{"class":108,"line":74381},234,[106,74383,2392],{"emptyLinePlaceholder":33},[106,74385,74387],{"class":108,"line":74386},235,[106,74388,74389],{"class":175},"    \u002F\u002F form表单注册提交事件，阻止默认行为\n",[106,74391,74393,74395,74397,74399,74401,74403,74405,74407,74409],{"class":108,"line":74392},236,[106,74394,69833],{"class":116},[106,74396,57807],{"class":1955},[106,74398,117],{"class":116},[106,74400,69840],{"class":221},[106,74402,12428],{"class":116},[106,74404,54443],{"class":112},[106,74406,1650],{"class":116},[106,74408,191],{"class":5209},[106,74410,12435],{"class":116},[106,74412,74414],{"class":108,"line":74413},237,[106,74415,74416],{"class":175},"      \u002F\u002F 禁止浏览器跳转\n",[106,74418,74420,74422,74424],{"class":108,"line":74419},238,[106,74421,69860],{"class":116},[106,74423,69863],{"class":1955},[106,74425,1968],{"class":116},[106,74427,74429],{"class":108,"line":74428},239,[106,74430,74431],{"class":175},"      \u002F\u002F 非空判断\n",[106,74433,74435],{"class":108,"line":74434},240,[106,74436,74437],{"class":175},"      \u002F\u002F !代表取反的意思，输入的是字符串，如果输入了内容，字符串就是真，取反之后就为假\n",[106,74439,74441],{"class":108,"line":74440},241,[106,74442,74443],{"class":175},"      \u002F\u002F 就不执行if语句，如果没输入取反就为真，就执行了if语句，表示信息输入不全\n",[106,74445,74447,74449,74451,74453,74456,74458,74461,74464,74466,74468],{"class":108,"line":74446},242,[106,74448,54474],{"class":112},[106,74450,1650],{"class":116},[106,74452,343],{"class":112},[106,74454,74455],{"class":116},"uname.value ",[106,74457,71351],{"class":112},[106,74459,74460],{"class":112}," !",[106,74462,74463],{"class":116},"age.value ",[106,74465,71351],{"class":112},[106,74467,74460],{"class":112},[106,74469,74470],{"class":116},"salary.value) {\n",[106,74472,74474,74476,74478,74480,74482],{"class":108,"line":74473},243,[106,74475,14745],{"class":112},[106,74477,69934],{"class":1955},[106,74479,117],{"class":116},[106,74481,69939],{"class":221},[106,74483,123],{"class":116},[106,74485,74487],{"class":108,"line":74486},244,[106,74488,52392],{"class":116},[106,74490,74492,74494,74496],{"class":108,"line":74491},245,[106,74493,58001],{"class":116},[106,74495,51878],{"class":1955},[106,74497,74498],{"class":116},"({\n",[106,74500,74502],{"class":108,"line":74501},246,[106,74503,74504],{"class":175},"        \u002F\u002F 这里是push，给数组添加对象，原来的数组如果只有一个对象的话，数组长度为1，\n",[106,74506,74508],{"class":108,"line":74507},247,[106,74509,74510],{"class":175},"        \u002F\u002F 在加上现在这个对象，数组里边的对象就有两个了，数组长度为2，所以新加的这个\n",[106,74512,74514],{"class":108,"line":74513},248,[106,74515,74516],{"class":175},"        \u002F\u002F 对象的序号应为数组长度+1\n",[106,74518,74520],{"class":108,"line":74519},249,[106,74521,74522],{"class":175},"        \u002F\u002F unameId: arr.length + 1,\n",[106,74524,74526],{"class":108,"line":74525},250,[106,74527,2392],{"emptyLinePlaceholder":33},[106,74529,74531],{"class":108,"line":74530},251,[106,74532,74533],{"class":175},"        \u002F\u002F 因为是push  元素从数组的最后边添加，如果按照上边按照数组长度的方式来计算的话会出现图中两个数据ID分别为1，2\n",[106,74535,74537],{"class":108,"line":74536},252,[106,74538,74539],{"class":175},"        \u002F\u002F 删除1后，在添加一个数据，此时就都为2，2了\n",[106,74541,74543],{"class":108,"line":74542},253,[106,74544,74545],{"class":175},"        \u002F\u002F 必须进行判断，因为当全删除之后，就没有数据了，就不能通过数组中最后元素的unameId来获取了，此时直接给它赋值为1就可以\n",[106,74547,74549],{"class":108,"line":74548},254,[106,74550,74551],{"class":175},"        \u002F\u002F 0当假看\n",[106,74553,74555,74558,74560,74562,74565,74567,74569,74571,74574,74576,74578,74581,74583],{"class":108,"line":74554},255,[106,74556,74557],{"class":116},"        unameId: arr.",[106,74559,51962],{"class":165},[106,74561,73808],{"class":112},[106,74563,74564],{"class":116}," arr[arr.",[106,74566,51962],{"class":165},[106,74568,52265],{"class":112},[106,74570,25112],{"class":165},[106,74572,74573],{"class":116},"].unameId ",[106,74575,598],{"class":112},[106,74577,25112],{"class":165},[106,74579,74580],{"class":112}," :",[106,74582,25112],{"class":165},[106,74584,31460],{"class":116},[106,74586,74588],{"class":108,"line":74587},256,[106,74589,69987],{"class":116},[106,74591,74593],{"class":108,"line":74592},257,[106,74594,69992],{"class":116},[106,74596,74598],{"class":108,"line":74597},258,[106,74599,70002],{"class":116},[106,74601,74603],{"class":108,"line":74602},259,[106,74604,69997],{"class":116},[106,74606,74608],{"class":108,"line":74607},260,[106,74609,74610],{"class":116},"        city: city.value,\n",[106,74612,74614],{"class":108,"line":74613},261,[106,74615,74616],{"class":175},"        \u002F\u002F 这里的时间可以不去封装函数，直接使用toLocaleString()方法\n",[106,74618,74620],{"class":108,"line":74619},262,[106,74621,74622],{"class":175},"        \u002F\u002F time: new Date().toDateString()\n",[106,74624,74626,74629,74632],{"class":108,"line":74625},263,[106,74627,74628],{"class":116},"        time: ",[106,74630,74631],{"class":1955},"getTime",[106,74633,1968],{"class":116},[106,74635,74637],{"class":108,"line":74636},264,[106,74638,64809],{"class":116},[106,74640,74642],{"class":108,"line":74641},265,[106,74643,74644],{"class":175},"      \u002F\u002F 渲染页面和重置表单 （reset()方法）\n",[106,74646,74648,74650],{"class":108,"line":74647},266,[106,74649,70062],{"class":1955},[106,74651,1968],{"class":116},[106,74653,74655,74657,74659,74661,74663],{"class":108,"line":74654},267,[106,74656,70045],{"class":165},[106,74658,675],{"class":116},[106,74660,70050],{"class":1955},[106,74662,13043],{"class":116},[106,74664,74665],{"class":175},"\u002F\u002F重置表单\n",[106,74667,74669],{"class":108,"line":74668},268,[106,74670,74671],{"class":175},"      \u002F\u002F 把数据重新存放在本地存储里面，记得转换为JOSN字符串存储\n",[106,74673,74675,74678,74680,74682,74685,74687,74689,74691,74693],{"class":108,"line":74674},269,[106,74676,74677],{"class":116},"      localStorage.",[106,74679,71648],{"class":1955},[106,74681,117],{"class":116},[106,74683,74684],{"class":221},"'data'",[106,74686,12428],{"class":116},[106,74688,71658],{"class":165},[106,74690,675],{"class":116},[106,74692,71663],{"class":1955},[106,74694,74695],{"class":116},"(arr))\n",[106,74697,74699],{"class":108,"line":74698},270,[106,74700,33455],{"class":116},[106,74702,74704],{"class":108,"line":74703},271,[106,74705,2392],{"emptyLinePlaceholder":33},[106,74707,74709],{"class":108,"line":74708},272,[106,74710,74711],{"class":175},"    \u002F\u002F 3.删除业务\n",[106,74713,74715],{"class":108,"line":74714},273,[106,74716,74717],{"class":175},"    \u002F\u002F 3.1 采取事件委托的形式，给body注册点击事件\n",[106,74719,74721,74723,74725,74727,74729,74731,74733,74735,74737],{"class":108,"line":74720},274,[106,74722,70335],{"class":116},[106,74724,57807],{"class":1955},[106,74726,117],{"class":116},[106,74728,57812],{"class":221},[106,74730,12428],{"class":116},[106,74732,54443],{"class":112},[106,74734,1650],{"class":116},[106,74736,191],{"class":5209},[106,74738,12435],{"class":116},[106,74740,74742],{"class":108,"line":74741},275,[106,74743,74744],{"class":175},"      \u002F\u002F 判断是否点击的是删除按钮\n",[106,74746,74748,74750,74752,74754,74756],{"class":108,"line":74747},276,[106,74749,54474],{"class":112},[106,74751,67028],{"class":116},[106,74753,54480],{"class":112},[106,74755,68250],{"class":221},[106,74757,12435],{"class":116},[106,74759,74761],{"class":108,"line":74760},277,[106,74762,74763],{"class":175},"        \u002F\u002F alert(1)\n",[106,74765,74767],{"class":108,"line":74766},278,[106,74768,74769],{"class":175},"        \u002F\u002F 3.2 得到当前点击的索引号。渲染数据的时候，动态给a链接添加自定义属性例如data-id='0'\n",[106,74771,74773],{"class":108,"line":74772},279,[106,74774,74775],{"class":175},"        \u002F\u002F console.log(e.target)\n",[106,74777,74779],{"class":108,"line":74778},280,[106,74780,74781],{"class":175},"        \u002F\u002F 3.3 根据索引号，利用splice删除数组这条数据\n",[106,74783,74785],{"class":108,"line":74784},281,[106,74786,2392],{"emptyLinePlaceholder":33},[106,74788,74790],{"class":108,"line":74789},282,[106,74791,74792],{"class":175},"        \u002F\u002F 确认框，确然是否真的要删除\n",[106,74794,74796],{"class":108,"line":74795},283,[106,74797,74798],{"class":175},"        \u002F\u002F confirm()为确认框\n",[106,74800,74802],{"class":108,"line":74801},284,[106,74803,74804],{"class":175},"        \u002F\u002F confirm会返回两个值，如果点击确定，就会返回true，如果点击取消，就会返回false\n",[106,74806,74808,74810,74812,74815,74817,74820],{"class":108,"line":74807},285,[106,74809,2489],{"class":112},[106,74811,1650],{"class":116},[106,74813,74814],{"class":1955},"confirm",[106,74816,117],{"class":116},[106,74818,74819],{"class":221},"'您确定要删除这条数据吗？'",[106,74821,74822],{"class":116},")) {\n",[106,74824,74826,74829,74831,74833,74835],{"class":108,"line":74825},286,[106,74827,74828],{"class":116},"          arr.",[106,74830,58004],{"class":1955},[106,74832,70388],{"class":116},[106,74834,334],{"class":165},[106,74836,123],{"class":116},[106,74838,74840],{"class":108,"line":74839},287,[106,74841,74842],{"class":175},"          \u002F\u002F 3.4 重新渲染页面\n",[106,74844,74846,74849],{"class":108,"line":74845},288,[106,74847,74848],{"class":1955},"          render",[106,74850,1968],{"class":116},[106,74852,74854],{"class":108,"line":74853},289,[106,74855,74856],{"class":175},"          \u002F\u002F 3.5 把最新arr数组存到本地存储\n",[106,74858,74860,74863,74865,74867,74869,74871,74873,74875,74877],{"class":108,"line":74859},290,[106,74861,74862],{"class":116},"          localStorage.",[106,74864,71648],{"class":1955},[106,74866,117],{"class":116},[106,74868,74684],{"class":221},[106,74870,12428],{"class":116},[106,74872,71658],{"class":165},[106,74874,675],{"class":116},[106,74876,71663],{"class":1955},[106,74878,74695],{"class":116},[106,74880,74882],{"class":108,"line":74881},291,[106,74883,2521],{"class":116},[106,74885,74887],{"class":108,"line":74886},292,[106,74888,52392],{"class":116},[106,74890,74892],{"class":108,"line":74891},293,[106,74893,2392],{"emptyLinePlaceholder":33},[106,74895,74897],{"class":108,"line":74896},294,[106,74898,33455],{"class":116},[106,74900,74902],{"class":108,"line":74901},295,[106,74903,2392],{"emptyLinePlaceholder":33},[106,74905,74907,74909,74911],{"class":108,"line":74906},296,[106,74908,52411],{"class":116},[106,74910,51807],{"class":51294},[106,74912,51301],{"class":116},[106,74914,74916,74918,74920],{"class":108,"line":74915},297,[106,74917,51779],{"class":116},[106,74919,51794],{"class":51294},[106,74921,51301],{"class":116},[106,74923,74925],{"class":108,"line":74924},298,[106,74926,2392],{"emptyLinePlaceholder":33},[106,74928,74930,74932,74934],{"class":108,"line":74929},299,[106,74931,51779],{"class":116},[106,74933,50629],{"class":51294},[106,74935,51301],{"class":116},[48,74937,74939],{"id":74938},"_36-正则表达式","3.6 正则表达式",[14,74941,74942],{},"正则表达式（Regular Expression）是用于匹配字符串中字符组合的模式。在 JavaScript中，正则表达式也是对",[14,74944,74945],{},"象，通常用来查找、替换那些符合正则表达式的文本，许多语言都支持正则表达式。",[14,74947,74948],{},"正则表达式的作用：",[1124,74950,74951,74958,74964],{},[63,74952,74953,74954,74957],{},"表单验证（ ",[266,74955,74956],{},"匹配"," ）",[63,74959,74960,74961,74957],{},"过滤敏感词（ ",[266,74962,74963],{},"替换",[63,74965,74966,74967,74957],{},"字符串中提取我们想要的部分（ ",[266,74968,74969],{},"提取",[77,74971,74973],{"id":74972},"_361-语法","3.6.1 语法",[14,74975,74976],{},"正则表达式使用步骤：",[60,74978,74979,74982],{},[63,74980,74981],{},"定义规则",[63,74983,74984],{},"查找是否匹配",[14,74986,74987],{},"正则表达式里边不需要写引号",[14,74989,74990],{},[23,74991],{"alt":25,"src":74992},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-201.png",[14,74994,74995],{},"记忆方法：先有规则，再有在看后边的数据是否可以与前边规则匹配",[14,74997,74998],{},"reg.test(str)",[14,75000,75001],{},[23,75002],{"alt":25,"src":75003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-202.png",[14,75005,75006],{},[23,75007],{"alt":25,"src":75008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-203.png",[77,75010,75012],{"id":75011},"_362-元字符","3.6.2 元字符",[60,75014,75015,75018,75021,75024,75031],{},[63,75016,75017],{},"普通字符：大多数的字符仅能够描述它们本身，这些字符称作普通字符，例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。",[63,75019,75020],{},"元字符（特殊字符）：是一些具有特殊含义的字符，可以极大提高了灵活性和强大的匹配功能。",[63,75022,75023],{},"比如，规定用户只能输入英文26个英文字母，普通字符的话 abcdefghijklm….. 但是换成元字符写法： [a-z]",[63,75025,75026,75027],{},"正则验证工具：",[355,75028,75029],{"href":75029,"rel":75030},"https:\u002F\u002Ftool.oschina.net\u002Fregex",[23858],[63,75032,75033],{},"分类：边界符（表示位置，开头和结尾，必须用什么开头，用什么结尾）、量词（（表示重复次数）、字符类（比如 \\d 表示 0~9）",[21991,75035,75037],{"id":75036},"_3621-边界符","3.6.2.1 边界符",[14,75039,75040],{},[23,75041],{"alt":25,"src":75042},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-204.png",[14,75044,75045],{},"console.log(\u002F^哈$\u002F.test('哈哈')) \u002F\u002Ffalse 加上量词之后会true",[14,75047,75048],{},"只有console.log(\u002F^哈$\u002F.test('哈'))这样才会true，开头结尾都写的话就是精准匹配",[14,75050,75051],{},"只匹配一次",[14,75053,75054],{},"两个其中一个来进行匹配的话，可以使用| ：\u002F我是|它会\u002F",[21991,75056,75058],{"id":75057},"_3622-量词","3.6.2.2 量词",[14,75060,75061],{},[23,75062],{"alt":25,"src":75063},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-205.png",[14,75065,75066],{},"console.log(\u002F^哈*$\u002F.test('哈好哈')) \u002F\u002Ffalse，只允许里边只允许有哈，不允许出现任何其他字符",[21991,75068,75070],{"id":75069},"_3623-元字符","3.6.2.3 元字符",[14,75072,75073],{},[23,75074],{"alt":25,"src":75075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-206.png",[14,75077,75078],{},"匹配的是a或b或c []只选一个",[14,75080,75081],{},[23,75082],{"alt":25,"src":75083},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-207.png",[14,75085,75086],{},"qq号是从1开始的，第一个为1-9已经进行匹配完成了，从第二位开始0-9都可以了，大括号{}只重复前边离他最近的那个字符，{}就近原则",[14,75088,75089],{},[23,75090],{"alt":25,"src":75091},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-208.png",[14,75093,75094],{},"（2）. 匹配除换行符之外的任何单个字符，除了换行都行",[14,75096,75097],{},[23,75098],{"alt":25,"src":75099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-209.png",[97,75101,75103],{"className":50627,"code":75102,"language":50629,"meta":25,"style":25},"\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",[103,75104,75105,75115,75129,75133,75141,75155,75175,75187,75195,75199,75207,75215,75220,75251,75278,75306,75310,75315,75343,75374,75379,75384,75415,75447,75479,75483,75488,75519,75549,75579,75583,75588,75619,75650,75680,75710,75714,75719,75752,75756,75761,75792,75823,75827,75832,75863,75893,75924,75928,75933,75965,75996,76027,76054,76085,76117,76150,76181,76212,76244,76275,76283,76291,76295],{"__ignoreMap":25},[106,75106,75107,75109,75111,75113],{"class":108,"line":109},[106,75108,51291],{"class":116},[106,75110,51295],{"class":51294},[106,75112,51298],{"class":1955},[106,75114,51301],{"class":116},[106,75116,75117,75119,75121,75123,75125,75127],{"class":108,"line":28},[106,75118,1027],{"class":116},[106,75120,50629],{"class":51294},[106,75122,51310],{"class":1955},[106,75124,162],{"class":116},[106,75126,51315],{"class":221},[106,75128,51301],{"class":116},[106,75130,75131],{"class":108,"line":1172},[106,75132,2392],{"emptyLinePlaceholder":33},[106,75134,75135,75137,75139],{"class":108,"line":1187},[106,75136,1027],{"class":116},[106,75138,51328],{"class":51294},[106,75140,51301],{"class":116},[106,75142,75143,75145,75147,75149,75151,75153],{"class":108,"line":1193},[106,75144,52138],{"class":116},[106,75146,51338],{"class":51294},[106,75148,51341],{"class":1955},[106,75150,162],{"class":116},[106,75152,51346],{"class":221},[106,75154,51301],{"class":116},[106,75156,75157,75159,75161,75163,75165,75167,75169,75171,75173],{"class":108,"line":1207},[106,75158,52138],{"class":116},[106,75160,51338],{"class":51294},[106,75162,14913],{"class":1955},[106,75164,162],{"class":116},[106,75166,51385],{"class":221},[106,75168,51365],{"class":1955},[106,75170,162],{"class":116},[106,75172,51392],{"class":221},[106,75174,51301],{"class":116},[106,75176,75177,75179,75181,75183,75185],{"class":108,"line":1213},[106,75178,52138],{"class":116},[106,75180,51401],{"class":51294},[106,75182,51404],{"class":116},[106,75184,51401],{"class":51294},[106,75186,51301],{"class":116},[106,75188,75189,75191,75193],{"class":108,"line":1304},[106,75190,51779],{"class":116},[106,75192,51328],{"class":51294},[106,75194,51301],{"class":116},[106,75196,75197],{"class":108,"line":1310},[106,75198,2392],{"emptyLinePlaceholder":33},[106,75200,75201,75203,75205],{"class":108,"line":1322},[106,75202,1027],{"class":116},[106,75204,51794],{"class":51294},[106,75206,51301],{"class":116},[106,75208,75209,75211,75213],{"class":108,"line":1604},[106,75210,52138],{"class":116},[106,75212,51807],{"class":51294},[106,75214,51301],{"class":116},[106,75216,75217],{"class":108,"line":1609},[106,75218,75219],{"class":175},"    \u002F\u002F 元字符中\n",[106,75221,75222,75224,75226,75228,75230,75233,75235,75237,75240,75242,75245,75248],{"class":108,"line":1615},[106,75223,73747],{"class":116},[106,75225,58241],{"class":1955},[106,75227,117],{"class":116},[106,75229,701],{"class":221},[106,75231,75232],{"class":47971},"哈",[106,75234,701],{"class":221},[106,75236,675],{"class":116},[106,75238,75239],{"class":1955},"test",[106,75241,117],{"class":116},[106,75243,75244],{"class":221},"'哈'",[106,75246,75247],{"class":116},"))  ",[106,75249,75250],{"class":175},"\u002F\u002Ftrue\n",[106,75252,75253,75255,75257,75259,75261,75263,75265,75267,75269,75271,75274,75276],{"class":108,"line":1620},[106,75254,73747],{"class":116},[106,75256,58241],{"class":1955},[106,75258,117],{"class":116},[106,75260,701],{"class":221},[106,75262,75232],{"class":47971},[106,75264,701],{"class":221},[106,75266,675],{"class":116},[106,75268,75239],{"class":1955},[106,75270,117],{"class":116},[106,75272,75273],{"class":221},"'哈哈'",[106,75275,75247],{"class":116},[106,75277,75250],{"class":175},[106,75279,75280,75282,75284,75286,75288,75290,75292,75294,75296,75298,75301,75304],{"class":108,"line":1634},[106,75281,73747],{"class":116},[106,75283,58241],{"class":1955},[106,75285,117],{"class":116},[106,75287,701],{"class":221},[106,75289,75232],{"class":47971},[106,75291,701],{"class":221},[106,75293,675],{"class":116},[106,75295,75239],{"class":1955},[106,75297,117],{"class":116},[106,75299,75300],{"class":221},"'二哈'",[106,75302,75303],{"class":116},"))   ",[106,75305,75250],{"class":175},[106,75307,75308],{"class":108,"line":1639},[106,75309,2392],{"emptyLinePlaceholder":33},[106,75311,75312],{"class":108,"line":1645},[106,75313,75314],{"class":175},"    \u002F\u002F 1.边界符\n",[106,75316,75317,75319,75321,75323,75325,75327,75329,75331,75333,75335,75337,75339,75341],{"class":108,"line":1666},[106,75318,73747],{"class":116},[106,75320,58241],{"class":1955},[106,75322,117],{"class":116},[106,75324,701],{"class":221},[106,75326,1083],{"class":112},[106,75328,75232],{"class":47971},[106,75330,701],{"class":221},[106,75332,675],{"class":116},[106,75334,75239],{"class":1955},[106,75336,117],{"class":116},[106,75338,75244],{"class":221},[106,75340,75247],{"class":116},[106,75342,75250],{"class":175},[106,75344,75345,75347,75349,75351,75353,75355,75357,75359,75361,75363,75365,75367,75369,75371],{"class":108,"line":1671},[106,75346,73747],{"class":116},[106,75348,58241],{"class":1955},[106,75350,117],{"class":116},[106,75352,701],{"class":221},[106,75354,1083],{"class":112},[106,75356,75232],{"class":47971},[106,75358,419],{"class":112},[106,75360,701],{"class":221},[106,75362,675],{"class":116},[106,75364,75239],{"class":1955},[106,75366,117],{"class":116},[106,75368,75273],{"class":221},[106,75370,75247],{"class":116},[106,75372,75373],{"class":175},"\u002F\u002Ffalse\n",[106,75375,75376],{"class":108,"line":1685},[106,75377,75378],{"class":175},"    \u002F\u002F 2.量词\n",[106,75380,75381],{"class":108,"line":1690},[106,75382,75383],{"class":175},"    \u002F\u002F 量词 * 类似于 >= 0\n",[106,75385,75386,75388,75390,75392,75394,75396,75398,75401,75403,75405,75407,75409,75411,75413],{"class":108,"line":1719},[106,75387,73747],{"class":116},[106,75389,58241],{"class":1955},[106,75391,117],{"class":116},[106,75393,701],{"class":221},[106,75395,1083],{"class":112},[106,75397,75232],{"class":47971},[106,75399,75400],{"class":112},"*$",[106,75402,701],{"class":221},[106,75404,675],{"class":116},[106,75406,75239],{"class":1955},[106,75408,117],{"class":116},[106,75410,75273],{"class":221},[106,75412,75247],{"class":116},[106,75414,75250],{"class":175},[106,75416,75417,75419,75421,75423,75425,75427,75429,75431,75433,75435,75437,75439,75442,75444],{"class":108,"line":1724},[106,75418,73747],{"class":116},[106,75420,58241],{"class":1955},[106,75422,117],{"class":116},[106,75424,701],{"class":221},[106,75426,1083],{"class":112},[106,75428,75232],{"class":47971},[106,75430,75400],{"class":112},[106,75432,701],{"class":221},[106,75434,675],{"class":116},[106,75436,75239],{"class":1955},[106,75438,117],{"class":116},[106,75440,75441],{"class":221},"'二哈好傻'",[106,75443,75247],{"class":116},[106,75445,75446],{"class":175},"\u002F\u002Ffalse 必须以哈开头或结尾\n",[106,75448,75449,75451,75453,75455,75457,75459,75461,75463,75465,75467,75469,75471,75474,75476],{"class":108,"line":1741},[106,75450,73747],{"class":116},[106,75452,58241],{"class":1955},[106,75454,117],{"class":116},[106,75456,701],{"class":221},[106,75458,1083],{"class":112},[106,75460,75232],{"class":47971},[106,75462,75400],{"class":112},[106,75464,701],{"class":221},[106,75466,675],{"class":116},[106,75468,75239],{"class":1955},[106,75470,117],{"class":116},[106,75472,75473],{"class":221},"'哈好哈'",[106,75475,75303],{"class":116},[106,75477,75478],{"class":175},"\u002F\u002Ffalse，只允许里边只有哈，不允许出现任何其他字符\n",[106,75480,75481],{"class":108,"line":1746},[106,75482,2392],{"emptyLinePlaceholder":33},[106,75484,75485],{"class":108,"line":1751},[106,75486,75487],{"class":175},"    \u002F\u002F +类似于>=1\n",[106,75489,75490,75492,75494,75496,75498,75500,75502,75505,75507,75509,75511,75513,75515,75517],{"class":108,"line":1756},[106,75491,73747],{"class":116},[106,75493,58241],{"class":1955},[106,75495,117],{"class":116},[106,75497,701],{"class":221},[106,75499,1083],{"class":112},[106,75501,75232],{"class":47971},[106,75503,75504],{"class":112},"+$",[106,75506,701],{"class":221},[106,75508,675],{"class":116},[106,75510,75239],{"class":1955},[106,75512,117],{"class":116},[106,75514,75273],{"class":221},[106,75516,75247],{"class":116},[106,75518,75250],{"class":175},[106,75520,75521,75523,75525,75527,75529,75531,75533,75535,75537,75539,75541,75543,75545,75547],{"class":108,"line":1770},[106,75522,73747],{"class":116},[106,75524,58241],{"class":1955},[106,75526,117],{"class":116},[106,75528,701],{"class":221},[106,75530,1083],{"class":112},[106,75532,75232],{"class":47971},[106,75534,75504],{"class":112},[106,75536,701],{"class":221},[106,75538,675],{"class":116},[106,75540,75239],{"class":1955},[106,75542,117],{"class":116},[106,75544,75441],{"class":221},[106,75546,75247],{"class":116},[106,75548,75446],{"class":175},[106,75550,75551,75553,75555,75557,75559,75561,75563,75565,75567,75569,75571,75573,75575,75577],{"class":108,"line":1775},[106,75552,73747],{"class":116},[106,75554,58241],{"class":1955},[106,75556,117],{"class":116},[106,75558,701],{"class":221},[106,75560,1083],{"class":112},[106,75562,75232],{"class":47971},[106,75564,75504],{"class":112},[106,75566,701],{"class":221},[106,75568,675],{"class":116},[106,75570,75239],{"class":1955},[106,75572,117],{"class":116},[106,75574,75473],{"class":221},[106,75576,75303],{"class":116},[106,75578,75373],{"class":175},[106,75580,75581],{"class":108,"line":2569},[106,75582,2392],{"emptyLinePlaceholder":33},[106,75584,75585],{"class":108,"line":2583},[106,75586,75587],{"class":175},"    \u002F\u002F ?类似于0次或一次\n",[106,75589,75590,75592,75594,75596,75598,75600,75603,75605,75607,75609,75611,75613,75615,75617],{"class":108,"line":2591},[106,75591,73747],{"class":116},[106,75593,58241],{"class":1955},[106,75595,117],{"class":116},[106,75597,701],{"class":221},[106,75599,1083],{"class":112},[106,75601,75602],{"class":47971},"哈？",[106,75604,419],{"class":112},[106,75606,701],{"class":221},[106,75608,675],{"class":116},[106,75610,75239],{"class":1955},[106,75612,117],{"class":116},[106,75614,74222],{"class":221},[106,75616,75303],{"class":116},[106,75618,75250],{"class":175},[106,75620,75621,75623,75625,75627,75629,75631,75633,75636,75638,75640,75642,75644,75646,75648],{"class":108,"line":2596},[106,75622,73747],{"class":116},[106,75624,58241],{"class":1955},[106,75626,117],{"class":116},[106,75628,701],{"class":221},[106,75630,1083],{"class":112},[106,75632,75232],{"class":47971},[106,75634,75635],{"class":112},"?$",[106,75637,701],{"class":221},[106,75639,675],{"class":116},[106,75641,75239],{"class":1955},[106,75643,117],{"class":116},[106,75645,75273],{"class":221},[106,75647,75247],{"class":116},[106,75649,75373],{"class":175},[106,75651,75652,75654,75656,75658,75660,75662,75664,75666,75668,75670,75672,75674,75676,75678],{"class":108,"line":2602},[106,75653,73747],{"class":116},[106,75655,58241],{"class":1955},[106,75657,117],{"class":116},[106,75659,701],{"class":221},[106,75661,1083],{"class":112},[106,75663,75232],{"class":47971},[106,75665,75635],{"class":112},[106,75667,701],{"class":221},[106,75669,675],{"class":116},[106,75671,75239],{"class":1955},[106,75673,117],{"class":116},[106,75675,75441],{"class":221},[106,75677,75247],{"class":116},[106,75679,75446],{"class":175},[106,75681,75682,75684,75686,75688,75690,75692,75694,75696,75698,75700,75702,75704,75706,75708],{"class":108,"line":2608},[106,75683,73747],{"class":116},[106,75685,58241],{"class":1955},[106,75687,117],{"class":116},[106,75689,701],{"class":221},[106,75691,1083],{"class":112},[106,75693,75232],{"class":47971},[106,75695,75635],{"class":112},[106,75697,701],{"class":221},[106,75699,675],{"class":116},[106,75701,75239],{"class":1955},[106,75703,117],{"class":116},[106,75705,75473],{"class":221},[106,75707,75247],{"class":116},[106,75709,75373],{"class":175},[106,75711,75712],{"class":108,"line":2613},[106,75713,2392],{"emptyLinePlaceholder":33},[106,75715,75716],{"class":108,"line":7941},[106,75717,75718],{"class":175},"    \u002F\u002F {n}写几，就必须出现几次\n",[106,75720,75721,75723,75725,75727,75729,75731,75733,75736,75738,75740,75742,75744,75747,75750],{"class":108,"line":7965},[106,75722,73747],{"class":116},[106,75724,58241],{"class":1955},[106,75726,117],{"class":116},[106,75728,701],{"class":221},[106,75730,1083],{"class":112},[106,75732,75232],{"class":47971},[106,75734,75735],{"class":112},"{4}$",[106,75737,701],{"class":221},[106,75739,675],{"class":116},[106,75741,75239],{"class":1955},[106,75743,117],{"class":116},[106,75745,75746],{"class":221},"'哈哈哈哈'",[106,75748,75749],{"class":116},")) ",[106,75751,75250],{"class":175},[106,75753,75754],{"class":108,"line":7970},[106,75755,2392],{"emptyLinePlaceholder":33},[106,75757,75758],{"class":108,"line":7976},[106,75759,75760],{"class":175},"    \u002F\u002F {n,}大于等于n次\n",[106,75762,75763,75765,75767,75769,75771,75773,75775,75778,75780,75782,75784,75786,75788,75790],{"class":108,"line":8003},[106,75764,73747],{"class":116},[106,75766,58241],{"class":1955},[106,75768,117],{"class":116},[106,75770,701],{"class":221},[106,75772,1083],{"class":112},[106,75774,75232],{"class":47971},[106,75776,75777],{"class":112},"{4,}$",[106,75779,701],{"class":221},[106,75781,675],{"class":116},[106,75783,75239],{"class":1955},[106,75785,117],{"class":116},[106,75787,75746],{"class":221},[106,75789,75749],{"class":116},[106,75791,75250],{"class":175},[106,75793,75794,75796,75798,75800,75802,75804,75806,75808,75810,75812,75814,75816,75819,75821],{"class":108,"line":8008},[106,75795,73747],{"class":116},[106,75797,58241],{"class":1955},[106,75799,117],{"class":116},[106,75801,701],{"class":221},[106,75803,1083],{"class":112},[106,75805,75232],{"class":47971},[106,75807,75777],{"class":112},[106,75809,701],{"class":221},[106,75811,675],{"class":116},[106,75813,75239],{"class":1955},[106,75815,117],{"class":116},[106,75817,75818],{"class":221},"'哈哈哈哈哈'",[106,75820,75749],{"class":116},[106,75822,75250],{"class":175},[106,75824,75825],{"class":108,"line":8014},[106,75826,2392],{"emptyLinePlaceholder":33},[106,75828,75829],{"class":108,"line":8026},[106,75830,75831],{"class":175},"    \u002F\u002F 重复{n,m} 重复n到m次，逗号两侧不能有空格\n",[106,75833,75834,75836,75838,75840,75842,75844,75846,75849,75851,75853,75855,75857,75859,75861],{"class":108,"line":8038},[106,75835,73747],{"class":116},[106,75837,58241],{"class":1955},[106,75839,117],{"class":116},[106,75841,701],{"class":221},[106,75843,1083],{"class":112},[106,75845,75232],{"class":47971},[106,75847,75848],{"class":112},"{4,6}$",[106,75850,701],{"class":221},[106,75852,675],{"class":116},[106,75854,75239],{"class":1955},[106,75856,117],{"class":116},[106,75858,75746],{"class":221},[106,75860,75749],{"class":116},[106,75862,75250],{"class":175},[106,75864,75865,75867,75869,75871,75873,75875,75877,75879,75881,75883,75885,75887,75889,75891],{"class":108,"line":8050},[106,75866,73747],{"class":116},[106,75868,58241],{"class":1955},[106,75870,117],{"class":116},[106,75872,701],{"class":221},[106,75874,1083],{"class":112},[106,75876,75232],{"class":47971},[106,75878,75848],{"class":112},[106,75880,701],{"class":221},[106,75882,675],{"class":116},[106,75884,75239],{"class":1955},[106,75886,117],{"class":116},[106,75888,75818],{"class":221},[106,75890,75749],{"class":116},[106,75892,75250],{"class":175},[106,75894,75895,75897,75899,75901,75903,75905,75907,75909,75911,75913,75915,75917,75920,75922],{"class":108,"line":9709},[106,75896,73747],{"class":116},[106,75898,58241],{"class":1955},[106,75900,117],{"class":116},[106,75902,701],{"class":221},[106,75904,1083],{"class":112},[106,75906,75232],{"class":47971},[106,75908,75848],{"class":112},[106,75910,701],{"class":221},[106,75912,675],{"class":116},[106,75914,75239],{"class":1955},[106,75916,117],{"class":116},[106,75918,75919],{"class":221},"'哈哈哈哈哈哈哈'",[106,75921,75749],{"class":116},[106,75923,75373],{"class":175},[106,75925,75926],{"class":108,"line":9734},[106,75927,2392],{"emptyLinePlaceholder":33},[106,75929,75930],{"class":108,"line":9757},[106,75931,75932],{"class":175},"    \u002F\u002F 3.字符类 [abc] 只选一个字符\n",[106,75934,75935,75937,75939,75941,75943,75945,75948,75950,75952,75954,75956,75958,75961,75963],{"class":108,"line":9781},[106,75936,73747],{"class":116},[106,75938,58241],{"class":1955},[106,75940,117],{"class":116},[106,75942,701],{"class":221},[106,75944,1083],{"class":112},[106,75946,75947],{"class":165},"[abc]",[106,75949,419],{"class":112},[106,75951,701],{"class":221},[106,75953,675],{"class":116},[106,75955,75239],{"class":1955},[106,75957,117],{"class":116},[106,75959,75960],{"class":221},"'a'",[106,75962,75247],{"class":116},[106,75964,75250],{"class":175},[106,75966,75967,75969,75971,75973,75975,75977,75979,75981,75983,75985,75987,75989,75992,75994],{"class":108,"line":9786},[106,75968,73747],{"class":116},[106,75970,58241],{"class":1955},[106,75972,117],{"class":116},[106,75974,701],{"class":221},[106,75976,1083],{"class":112},[106,75978,75947],{"class":165},[106,75980,419],{"class":112},[106,75982,701],{"class":221},[106,75984,675],{"class":116},[106,75986,75239],{"class":1955},[106,75988,117],{"class":116},[106,75990,75991],{"class":221},"'b'",[106,75993,75247],{"class":116},[106,75995,75250],{"class":175},[106,75997,75998,76000,76002,76004,76006,76008,76010,76012,76014,76016,76018,76020,76023,76025],{"class":108,"line":9791},[106,75999,73747],{"class":116},[106,76001,58241],{"class":1955},[106,76003,117],{"class":116},[106,76005,701],{"class":221},[106,76007,1083],{"class":112},[106,76009,75947],{"class":165},[106,76011,419],{"class":112},[106,76013,701],{"class":221},[106,76015,675],{"class":116},[106,76017,75239],{"class":1955},[106,76019,117],{"class":116},[106,76021,76022],{"class":221},"'c'",[106,76024,75247],{"class":116},[106,76026,75250],{"class":175},[106,76028,76029,76031,76033,76035,76037,76039,76041,76043,76045,76047,76050,76052],{"class":108,"line":9796},[106,76030,73747],{"class":116},[106,76032,58241],{"class":1955},[106,76034,117],{"class":116},[106,76036,701],{"class":221},[106,76038,75947],{"class":165},[106,76040,701],{"class":221},[106,76042,675],{"class":116},[106,76044,75239],{"class":1955},[106,76046,117],{"class":116},[106,76048,76049],{"class":221},"'ab'",[106,76051,75247],{"class":116},[106,76053,75250],{"class":175},[106,76055,76056,76058,76060,76062,76064,76066,76068,76070,76072,76074,76076,76078,76080,76082],{"class":108,"line":9805},[106,76057,73747],{"class":116},[106,76059,58241],{"class":1955},[106,76061,117],{"class":116},[106,76063,701],{"class":221},[106,76065,1083],{"class":112},[106,76067,75947],{"class":165},[106,76069,419],{"class":112},[106,76071,701],{"class":221},[106,76073,675],{"class":116},[106,76075,75239],{"class":1955},[106,76077,117],{"class":116},[106,76079,76049],{"class":221},[106,76081,75247],{"class":116},[106,76083,76084],{"class":175},"\u002F\u002Ffalse     不加精确匹配，就是true\n",[106,76086,76087,76089,76091,76093,76095,76097,76099,76102,76104,76106,76108,76110,76112,76114],{"class":108,"line":9810},[106,76088,73747],{"class":116},[106,76090,58241],{"class":1955},[106,76092,117],{"class":116},[106,76094,701],{"class":221},[106,76096,1083],{"class":112},[106,76098,75947],{"class":165},[106,76100,76101],{"class":112},"{2}$",[106,76103,701],{"class":221},[106,76105,675],{"class":116},[106,76107,75239],{"class":1955},[106,76109,117],{"class":116},[106,76111,76049],{"class":221},[106,76113,75247],{"class":116},[106,76115,76116],{"class":175},"\u002F\u002Ftrue   可以选两个\n",[106,76118,76119,76121,76123,76125,76127,76129,76132,76134,76136,76138,76140,76142,76145,76147],{"class":108,"line":9816},[106,76120,73747],{"class":116},[106,76122,58241],{"class":1955},[106,76124,117],{"class":116},[106,76126,701],{"class":221},[106,76128,1083],{"class":112},[106,76130,76131],{"class":165},"[a-z]",[106,76133,419],{"class":112},[106,76135,701],{"class":221},[106,76137,675],{"class":116},[106,76139,75239],{"class":1955},[106,76141,117],{"class":116},[106,76143,76144],{"class":221},"'p'",[106,76146,75303],{"class":116},[106,76148,76149],{"class":175},"\u002F\u002Ftrue   依然只能选一个\n",[106,76151,76152,76154,76156,76158,76160,76162,76165,76167,76169,76171,76173,76175,76177,76179],{"class":108,"line":9837},[106,76153,73747],{"class":116},[106,76155,58241],{"class":1955},[106,76157,117],{"class":116},[106,76159,701],{"class":221},[106,76161,1083],{"class":112},[106,76163,76164],{"class":165},"[A-Z]",[106,76166,419],{"class":112},[106,76168,701],{"class":221},[106,76170,675],{"class":116},[106,76172,75239],{"class":1955},[106,76174,117],{"class":116},[106,76176,76144],{"class":221},[106,76178,75303],{"class":116},[106,76180,75373],{"class":175},[106,76182,76183,76185,76187,76189,76191,76193,76195,76197,76199,76201,76203,76205,76208,76210],{"class":108,"line":9843},[106,76184,73747],{"class":116},[106,76186,58241],{"class":1955},[106,76188,117],{"class":116},[106,76190,701],{"class":221},[106,76192,1083],{"class":112},[106,76194,76164],{"class":165},[106,76196,419],{"class":112},[106,76198,701],{"class":221},[106,76200,675],{"class":116},[106,76202,75239],{"class":1955},[106,76204,117],{"class":116},[106,76206,76207],{"class":221},"'P'",[106,76209,75303],{"class":116},[106,76211,75250],{"class":175},[106,76213,76214,76216,76218,76220,76222,76224,76227,76229,76231,76233,76235,76237,76240,76242],{"class":108,"line":9857},[106,76215,73747],{"class":116},[106,76217,58241],{"class":1955},[106,76219,117],{"class":116},[106,76221,701],{"class":221},[106,76223,1083],{"class":112},[106,76225,76226],{"class":165},"[0-9]",[106,76228,419],{"class":112},[106,76230,701],{"class":221},[106,76232,675],{"class":116},[106,76234,75239],{"class":1955},[106,76236,117],{"class":116},[106,76238,76239],{"class":221},"'0'",[106,76241,75303],{"class":116},[106,76243,75250],{"class":175},[106,76245,76246,76248,76250,76252,76254,76256,76259,76261,76263,76265,76267,76269,76271,76273],{"class":108,"line":9863},[106,76247,73747],{"class":116},[106,76249,58241],{"class":1955},[106,76251,117],{"class":116},[106,76253,701],{"class":221},[106,76255,1083],{"class":112},[106,76257,76258],{"class":165},"[a-zA-Z0-9]",[106,76260,419],{"class":112},[106,76262,701],{"class":221},[106,76264,675],{"class":116},[106,76266,75239],{"class":1955},[106,76268,117],{"class":116},[106,76270,76144],{"class":221},[106,76272,75247],{"class":116},[106,76274,75250],{"class":175},[106,76276,76277,76279,76281],{"class":108,"line":9890},[106,76278,52411],{"class":116},[106,76280,51807],{"class":51294},[106,76282,51301],{"class":116},[106,76284,76285,76287,76289],{"class":108,"line":9899},[106,76286,51779],{"class":116},[106,76288,51794],{"class":51294},[106,76290,51301],{"class":116},[106,76292,76293],{"class":108,"line":9905},[106,76294,2392],{"emptyLinePlaceholder":33},[106,76296,76297,76299,76301],{"class":108,"line":9913},[106,76298,51779],{"class":116},[106,76300,50629],{"class":51294},[106,76302,51301],{"class":116},[21991,76304,76306],{"id":76305},"_3624-修饰符","3.6.2.4 修饰符",[14,76308,76309],{},[23,76310],{"alt":25,"src":76311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-210.png",[14,76313,76314],{},"replace是个方法，使用的时候一定不要忘记括号()",[14,76316,76317],{},[23,76318],{"alt":25,"src":76319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-211.png",[97,76321,76323],{"className":50627,"code":76322,"language":50629,"meta":25,"style":25},"\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",[103,76324,76325,76335,76349,76357,76371,76391,76403,76411,76419,76427,76459,76490,76495,76527,76538,76571,76580,76588,76596],{"__ignoreMap":25},[106,76326,76327,76329,76331,76333],{"class":108,"line":109},[106,76328,51291],{"class":116},[106,76330,51295],{"class":51294},[106,76332,51298],{"class":1955},[106,76334,51301],{"class":116},[106,76336,76337,76339,76341,76343,76345,76347],{"class":108,"line":28},[106,76338,1027],{"class":116},[106,76340,50629],{"class":51294},[106,76342,51310],{"class":1955},[106,76344,162],{"class":116},[106,76346,51315],{"class":221},[106,76348,51301],{"class":116},[106,76350,76351,76353,76355],{"class":108,"line":1172},[106,76352,1027],{"class":116},[106,76354,51328],{"class":51294},[106,76356,51301],{"class":116},[106,76358,76359,76361,76363,76365,76367,76369],{"class":108,"line":1187},[106,76360,52138],{"class":116},[106,76362,51338],{"class":51294},[106,76364,51341],{"class":1955},[106,76366,162],{"class":116},[106,76368,51346],{"class":221},[106,76370,51301],{"class":116},[106,76372,76373,76375,76377,76379,76381,76383,76385,76387,76389],{"class":108,"line":1193},[106,76374,52138],{"class":116},[106,76376,51338],{"class":51294},[106,76378,14913],{"class":1955},[106,76380,162],{"class":116},[106,76382,51385],{"class":221},[106,76384,51365],{"class":1955},[106,76386,162],{"class":116},[106,76388,51392],{"class":221},[106,76390,51301],{"class":116},[106,76392,76393,76395,76397,76399,76401],{"class":108,"line":1207},[106,76394,52138],{"class":116},[106,76396,51401],{"class":51294},[106,76398,51404],{"class":116},[106,76400,51401],{"class":51294},[106,76402,51301],{"class":116},[106,76404,76405,76407,76409],{"class":108,"line":1213},[106,76406,51779],{"class":116},[106,76408,51328],{"class":51294},[106,76410,51301],{"class":116},[106,76412,76413,76415,76417],{"class":108,"line":1304},[106,76414,1027],{"class":116},[106,76416,51794],{"class":51294},[106,76418,51301],{"class":116},[106,76420,76421,76423,76425],{"class":108,"line":1310},[106,76422,52138],{"class":116},[106,76424,51807],{"class":51294},[106,76426,51301],{"class":116},[106,76428,76429,76431,76433,76435,76437,76439,76442,76444,76446,76448,76450,76452,76455,76457],{"class":108,"line":1322},[106,76430,73747],{"class":116},[106,76432,58241],{"class":1955},[106,76434,117],{"class":116},[106,76436,701],{"class":221},[106,76438,1083],{"class":112},[106,76440,76441],{"class":47971},"java",[106,76443,419],{"class":112},[106,76445,701],{"class":221},[106,76447,675],{"class":116},[106,76449,75239],{"class":1955},[106,76451,117],{"class":116},[106,76453,76454],{"class":221},"'java'",[106,76456,75749],{"class":116},[106,76458,75250],{"class":175},[106,76460,76461,76463,76465,76467,76469,76471,76473,76475,76477,76479,76481,76483,76486,76488],{"class":108,"line":1604},[106,76462,73747],{"class":116},[106,76464,58241],{"class":1955},[106,76466,117],{"class":116},[106,76468,701],{"class":221},[106,76470,1083],{"class":112},[106,76472,76441],{"class":47971},[106,76474,419],{"class":112},[106,76476,701],{"class":221},[106,76478,675],{"class":116},[106,76480,75239],{"class":1955},[106,76482,117],{"class":116},[106,76484,76485],{"class":221},"'Java'",[106,76487,75749],{"class":116},[106,76489,75373],{"class":175},[106,76491,76492],{"class":108,"line":1609},[106,76493,76494],{"class":175},"    \u002F\u002F 不区分大小写、\n",[106,76496,76497,76499,76501,76503,76505,76507,76509,76511,76513,76515,76517,76519,76521,76523,76525],{"class":108,"line":1615},[106,76498,73747],{"class":116},[106,76500,58241],{"class":1955},[106,76502,117],{"class":116},[106,76504,701],{"class":221},[106,76506,1083],{"class":112},[106,76508,76441],{"class":47971},[106,76510,419],{"class":112},[106,76512,701],{"class":221},[106,76514,558],{"class":112},[106,76516,675],{"class":116},[106,76518,75239],{"class":1955},[106,76520,117],{"class":116},[106,76522,76485],{"class":221},[106,76524,75749],{"class":116},[106,76526,75250],{"class":175},[106,76528,76529,76531,76533,76535],{"class":108,"line":1620},[106,76530,11214],{"class":112},[106,76532,73913],{"class":165},[106,76534,13557],{"class":112},[106,76536,76537],{"class":221}," 'java是一门编程语言，学完java工资很高'\n",[106,76539,76540,76542,76545,76547,76550,76553,76555,76557,76559,76561,76564,76566,76569],{"class":108,"line":1634},[106,76541,11214],{"class":112},[106,76543,76544],{"class":165}," result",[106,76546,13557],{"class":112},[106,76548,76549],{"class":116}," str.",[106,76551,76552],{"class":1955},"replace",[106,76554,117],{"class":116},[106,76556,701],{"class":221},[106,76558,76441],{"class":47971},[106,76560,701],{"class":221},[106,76562,76563],{"class":112},"ig",[106,76565,12428],{"class":116},[106,76567,76568],{"class":221},"'前端'",[106,76570,123],{"class":116},[106,76572,76573,76575,76577],{"class":108,"line":1639},[106,76574,73747],{"class":116},[106,76576,58241],{"class":1955},[106,76578,76579],{"class":116},"(result)\n",[106,76581,76582,76584,76586],{"class":108,"line":1645},[106,76583,52411],{"class":116},[106,76585,51807],{"class":51294},[106,76587,51301],{"class":116},[106,76589,76590,76592,76594],{"class":108,"line":1666},[106,76591,51779],{"class":116},[106,76593,51794],{"class":51294},[106,76595,51301],{"class":116},[106,76597,76598,76600,76602],{"class":108,"line":1671},[106,76599,51779],{"class":116},[106,76601,50629],{"class":51294},[106,76603,51301],{"class":116},[5119,76605,76606],{},"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":25,"searchDepth":28,"depth":28,"links":76608},[76609,76619,76631,76648,76655,76663],{"id":53354,"depth":28,"text":53355,"children":76610},[76611,76612,76613,76614,76615,76616,76617,76618],{"id":53358,"depth":1172,"text":53359},{"id":53391,"depth":1172,"text":53392},{"id":53430,"depth":1172,"text":53431},{"id":53588,"depth":1172,"text":53589},{"id":53636,"depth":1172,"text":53637},{"id":53773,"depth":1172,"text":53774},{"id":54095,"depth":1172,"text":54096},{"id":57083,"depth":1172,"text":57084},{"id":57111,"depth":28,"text":57112,"children":76620},[76621,76622,76623,76624,76625,76626,76627,76628,76629,76630],{"id":57115,"depth":1172,"text":57116},{"id":57138,"depth":1172,"text":57139},{"id":58053,"depth":1172,"text":58054},{"id":58743,"depth":1172,"text":58744},{"id":59025,"depth":1172,"text":59026},{"id":63186,"depth":1172,"text":63187},{"id":63356,"depth":1172,"text":63357},{"id":63484,"depth":1172,"text":63485},{"id":63509,"depth":1172,"text":63510},{"id":64898,"depth":1172,"text":64899},{"id":66051,"depth":28,"text":66052,"children":76632},[76633,76634,76635,76636,76637,76638,76639,76640,76641,76642,76643,76644,76645,76646,76647],{"id":66055,"depth":1172,"text":66056},{"id":66709,"depth":1172,"text":66710},{"id":68404,"depth":1172,"text":68405},{"id":68445,"depth":1172,"text":68446},{"id":68487,"depth":1172,"text":68488},{"id":68501,"depth":1172,"text":68502},{"id":68550,"depth":1172,"text":68551},{"id":68562,"depth":1172,"text":68563},{"id":68577,"depth":1172,"text":68578},{"id":68613,"depth":1172,"text":68614},{"id":68694,"depth":1172,"text":68695},{"id":68822,"depth":1172,"text":68823},{"id":68834,"depth":1172,"text":68835},{"id":68853,"depth":1172,"text":68854},{"id":70964,"depth":1172,"text":70965},{"id":70983,"depth":28,"text":70984,"children":76649},[76650,76651,76652,76653,76654],{"id":71004,"depth":1172,"text":71005},{"id":71024,"depth":1172,"text":71025},{"id":71073,"depth":1172,"text":71074},{"id":71198,"depth":1172,"text":71199},{"id":71379,"depth":1172,"text":71380},{"id":71397,"depth":28,"text":71398,"children":76656},[76657,76658,76659,76660,76661,76662],{"id":71412,"depth":1172,"text":71413},{"id":71471,"depth":1172,"text":71472},{"id":71495,"depth":1172,"text":71496},{"id":71815,"depth":1172,"text":71816},{"id":71847,"depth":1172,"text":71848},{"id":71870,"depth":1172,"text":71871},{"id":74938,"depth":28,"text":74939,"children":76664},[76665,76666],{"id":74972,"depth":1172,"text":74973},{"id":75011,"depth":1172,"text":75012},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch3-web-apis",{"title":53326,"description":30},"wiki\u002F2025-09-02-JS学习\u002Fch3-Web-APIs","fsyWKB50sKQwy-LTDR6QPET-tuocjiLU1OtngUya7UQ",{"id":76673,"title":76674,"body":76675,"description":30,"extension":31,"meta":92812,"navigation":33,"path":92813,"seo":92814,"stem":92815,"__hash__":92816},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Fch4-js进阶.md","4.js进阶",{"type":7,"value":76676,"toc":92748},[76677,76680,76683,76687,76691,76696,76701,76712,76716,76721,76724,76728,76731,76736,76740,76744,76747,76752,76755,76759,76762,76770,76773,76777,76782,76787,76790,76794,76799,76804,76807,76811,76816,76819,76824,76827,76832,76835,76840,76845,76848,76851,76855,76860,76865,76868,76872,76876,76879,76882,76885,76889,76893,76898,76903,76906,76910,76915,76920,76923,76926,76929,76932,76935,76938,76941,76944,76947,76952,76956,76961,76966,76969,76972,76975,76978,76981,76984,76987,76990,76994,76998,77001,77004,77007,77012,77014,77017,77020,77023,77026,77029,77032,77035,77038,77041,77044,77047,77050,77053,77058,77063,77068,77071,77075,77078,77083,77087,77089,77100,77105,77206,77209,77212,77215,77218,77221,77224,77227,77230,77232,77235,77238,77241,77244,77247,77249,77252,77255,77258,77261,77264,77267,77269,77272,77274,77276,77279,77283,77287,77290,77293,77296,77299,77302,77305,77308,77311,77314,77319,77439,77442,77445,77450,77453,77456,77459,77462,77467,77470,77473,77476,77479,77484,77487,77587,77652,77726,77730,77733,77736,77740,77743,77757,77786,77789,77792,77795,77798,77801,77804,77807,77809,77812,77815,77818,77821,77825,77830,77834,77839,77914,77917,78100,78103,78106,78109,78112,78115,78117,78120,78123,78126,78129,78132,78135,78137,78141,78144,78149,78152,78155,78158,78161,78163,78168,78171,78174,78177,78180,78182,78187,78190,78193,78195,78197,78200,78204,78207,78210,78215,78218,78221,78224,78274,78279,78283,78288,78291,78360,78363,78372,78376,78381,78384,78387,78395,78398,78415,80217,80221,80225,80230,80233,80237,80243,80249,80401,80406,80411,80414,80417,80420,80423,80426,80429,80432,80435,80438,80441,80444,80447,80452,80456,80459,80470,80474,80479,80482,80485,80488,80491,80494,80496,80499,80502,80505,80508,80510,80527,80530,80534,80537,80542,80547,80550,80553,80557,80560,80563,80572,80575,80579,80582,80587,80592,80659,80663,80666,80669,80674,80679,80765,80770,80774,80777,80780,80795,80798,80803,80807,80812,80921,80924,80935,81085,81089,81094,81203,81207,81212,81217,81222,81225,81232,81252,81288,81452,81457,81460,81465,81472,81475,81478,81481,81540,81596,81652,81656,81661,81976,81979,81983,81986,81991,82100,82105,82109,82114,82118,82189,82193,82195,82198,82201,82239,82515,82519,82536,82602,82636,82640,82643,82648,82677,82684,82693,82698,82713,82718,82727,82730,82867,82871,82933,82937,82942,83187,83191,83196,83199,83202,83205,83208,83212,83217,84798,84802,84806,84812,84815,84820,84824,84827,84832,84835,84846,84850,84855,84859,84864,84869,84872,84877,84881,84885,84888,84893,84898,84901,84904,84907,85029,85034,85136,85139,85142,85146,85151,85323,85328,85332,85335,85340,85406,85411,85414,85545,85548,85553,85556,85559,85650,85655,85658,85661,85664,85667,85672,85677,85680,85685,85690,85695,85699,85702,85705,85710,85715,85720,85725,85779,85782,85785,85790,85793,85796,85801,85806,85811,85815,85820,85834,85839,85842,85847,85851,85856,85861,85866,85871,85876,85881,85886,85891,85894,85898,85903,85906,85909,85912,85917,85922,85925,85928,85932,85935,85938,85943,85948,85953,85958,85961,85966,85971,86032,86037,86040,86045,87286,87291,87295,87299,87304,87307,87312,87317,87320,87325,87327,87332,87336,87339,87342,87353,87357,87362,87367,87422,87427,87432,87437,87648,87653,87657,87662,87665,87667,87670,87673,88120,88125,88132,88138,88141,88144,88408,88413,88417,88682,88687,88691,88696,88701,88706,88711,89042,89045,89050,89055,89058,89062,89066,89071,89076,89081,89086,89091,89096,89100,89103,89108,89113,89116,89190,89195,89200,89205,89207,89210,89580,89585,89590,89595,89598,89601,89703,89708,89713,89816,89820,89825,89829,89833,89838,89843,89846,89851,89854,89857,90250,90255,90258,90261,90264,90267,90787,90791,90796,90801,90806,90809,90814,90817,90820,91202,91207,91209,91211,91214,91217,91729,91733,91794,91797,91800,91803,91807,91810,91815,91820,92745],[10,76678,76674],{"id":76679},"_4js进阶",[14,76681,76682],{},"这部分是对es6的新特性和es7,es8等的描述，统称为es6+",[48,76684,76686],{"id":76685},"_41-作用域","4.1 作用域",[77,76688,76690],{"id":76689},"_411-局部作用域","4.1.1 局部作用域",[14,76692,76693],{},[23,76694],{"alt":25,"src":76695},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-212.png",[14,76697,76698],{},[23,76699],{"alt":25,"src":76700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-213.png",[1124,76702,76703,76706,76709],{},[63,76704,76705],{},"函数作用域在函数内部",[63,76707,76708],{},"块级作用域在{}",[63,76710,76711],{},"对象的那个{}不是作用域，不是块作用域",[77,76713,76715],{"id":76714},"_412-全局作用域","4.1.2 全局作用域",[14,76717,76718],{},[23,76719],{"alt":25,"src":76720},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-214.png",[14,76722,76723],{},"window.a=10不要这样写",[77,76725,76727],{"id":76726},"_413-作用域链","4.1.3 作用域链",[14,76729,76730],{},"变量查找机制",[14,76732,76733],{},[23,76734],{"alt":25,"src":76735},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-215.png",[48,76737,76739],{"id":76738},"_42-垃圾回收机制","4.2 垃圾回收机制",[77,76741,76743],{"id":76742},"_421-大体介绍","4.2.1 大体介绍",[14,76745,76746],{},"垃圾回收机制(Garbage Collection) 简称 GC",[14,76748,76749],{},[23,76750],{"alt":25,"src":76751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-216.png",[14,76753,76754],{},"内存泄漏：程序中分配的内存由于某种原因程序未释放或无法释放叫作泄露",[77,76756,76758],{"id":76757},"_422-js垃圾回收机制算法说明","4.2.2 JS垃圾回收机制算法说明",[14,76760,76761],{},"堆栈空间分配区别：",[60,76763,76764,76767],{},[63,76765,76766],{},"栈（操作系统）: 由操作系统自动分配释放函数的参数值、局部变量等，基本数据类型放到栈里面。",[63,76768,76769],{},"堆（操作系统）: 一般由程序员分配释放，若程序员不释放，由垃圾回收机制回收。复杂数据类型放到堆里面。",[14,76771,76772],{},"目前常见的浏览器垃圾回收算法: 引用计数法 和 标记清除法",[21991,76774,76776],{"id":76775},"_4221-引用计数","4.2.2.1 引用计数",[14,76778,76779],{},[23,76780],{"alt":25,"src":76781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-217.png",[14,76783,76784],{},[23,76785],{"alt":25,"src":76786},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-218.png",[14,76788,76789],{},"如果不写o1.a=o2和o2.a=o1，则函数执行完之后，o1和o2都是局部变量，会自动被系统回收掉，加上这个之后堆内的这两个对象相互指引，引用次数不为0，导致了变量的无法回收，就产生了内存泄漏",[21991,76791,76793],{"id":76792},"_4222-标记清除法","4.2.2.2 标记清除法",[14,76795,76796],{},[23,76797],{"alt":25,"src":76798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-219.png",[14,76800,76801],{},[23,76802],{"alt":25,"src":76803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-220.png",[14,76805,76806],{},"这个算法就是全局开始的，找到就是有用，找不到就是没用，就清除",[48,76808,76810],{"id":76809},"_43-闭包","4.3 闭包",[14,76812,76813],{},[23,76814],{"alt":25,"src":76815},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-221.png",[14,76817,76818],{},"闭包：内层函数+外层函数的变量",[14,76820,76821],{},[23,76822],{"alt":25,"src":76823},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-222.png",[14,76825,76826],{},"closure就是闭包",[14,76828,76829],{},[23,76830],{"alt":25,"src":76831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-223.png",[14,76833,76834],{},"内层函数必须包含外层函数的变量才是闭包",[14,76836,76837],{},[23,76838],{"alt":25,"src":76839},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-224.png",[14,76841,76842],{},[23,76843],{"alt":25,"src":76844},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-225.png",[14,76846,76847],{},"闭包可能会引起内存泄漏",[14,76849,76850],{},"闭包作用：封闭数据，实现数据私有，外部也可以访问函数内部的变量",[48,76852,76854],{"id":76853},"_44-变量提升","4.4 变量提升",[14,76856,76857],{},[23,76858],{"alt":25,"src":76859},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-226.png",[14,76861,76862],{},[23,76863],{"alt":25,"src":76864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-227.png",[14,76866,76867],{},"在代码执行之前，先去检测当前作用域下所有var声明的变量，把所有var声明的变量提到当前作用域的前边，只提升声明，但不提升赋值",[48,76869,76871],{"id":76870},"_45-函数进阶","4.5 函数进阶",[77,76873,76875],{"id":76874},"_451-函数提升","4.5.1 函数提升",[14,76877,76878],{},"在程序执行之前会把所有函数声明提升到当前作用域的最前面",[14,76880,76881],{},"只提升函数声明，不提升函数调用",[51807,76883,76884],{},"\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",[77,76886,76888],{"id":76887},"_452-函数参数","4.5.2 函数参数",[21991,76890,76892],{"id":76891},"_4521-动态参数","4.5.2.1 动态参数",[14,76894,76895],{},[23,76896],{"alt":25,"src":76897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-228.png",[14,76899,76900],{},[23,76901],{"alt":25,"src":76902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-229.png",[14,76904,76905],{},"箭头函数里边没有arguments",[21991,76907,76909],{"id":76908},"_4522-剩余参数","4.5.2.2 剩余参数",[14,76911,76912],{},[23,76913],{"alt":25,"src":76914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-230.png",[14,76916,76917],{},[23,76918],{"alt":25,"src":76919},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-231.png",[14,76921,76922],{},"剩余参数使用的时候不需要写...",[14,76924,76925],{},"剩余参数更加的灵活，我可以在函数括号中写上参数，然后再写...arr，如果是：",[14,76927,76928],{},"  function getSum(a,b,...arr) {",[14,76930,76931],{},"  console.log(11)",[14,76933,76934],{},"  }",[14,76936,76937],{},"  getSum(1,2,3,4)",[14,76939,76940],{},"  将1传给a，2传给b，剩下的传给剩余参数",[14,76942,76943],{},"  getSum(1,2)",[14,76945,76946],{},"  将1传给a，2传给b，剩余参数为一个空数组",[14,76948,76949],{},[23,76950],{"alt":25,"src":76951},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-232.png",[21991,76953,76955],{"id":76954},"_4523-展开运算符与剩余参数的区别","4.5.2.3 展开运算符与剩余参数的区别",[14,76957,76958],{},[23,76959],{"alt":25,"src":76960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-233.png",[14,76962,76963],{},[23,76964],{"alt":25,"src":76965},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-234.png",[14,76967,76968],{},"...arr其实是等价于1,2,3的，这样才可以丢给Math对象来求最值",[14,76970,76971],{},"展开运算符可以用于数组之间的合并：",[14,76973,76974],{},"const arr1 = [1, 2, 3]",[14,76976,76977],{},"const arr2 = [3, 4, 5]",[14,76979,76980],{},"const arr = [...arr1, ...arr2]",[14,76982,76983],{},"console.log(arr) \u002F\u002F输出[1,2,3,3,4,5]",[14,76985,76986],{},"剩余参数：函数参数使用，得到真数组",[14,76988,76989],{},"展开运算符：数组中使用，数组展开",[77,76991,76993],{"id":76992},"_453-箭头函数","4.5.3 箭头函数",[21991,76995,76997],{"id":76996},"_4531-语法基本介绍","4.5.3.1 语法基本介绍",[14,76999,77000],{},"箭头函数不是为了替代以前的函数，不是意味着以前的函数不再写了，箭头函数是为了替代原来需要匿名函数的地方",[14,77002,77003],{},"它不是万能的！！！",[14,77005,77006],{},"箭头函数在vue中用的非常多，必须保证百分百会！！！",[14,77008,77009],{},[23,77010],{"alt":25,"src":77011},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-235.png",[14,77013,146],{},[14,77015,77016],{},"① 只有一个形参的时候，可以省略小括号：",[14,77018,77019],{},"const fn=x=>{console.log(x)}",[14,77021,77022],{},"② 只有一行代码时可以省略大括号：",[14,77024,77025],{},"const fn=x=>console.log(11)",[14,77027,77028],{},"③ 如果函数有返回值的话，如果只有一行代码的话return可以省略，大括号也可以省略，写在一行中：",[14,77030,77031],{},"const fn=x=>x+x",[14,77033,77034],{},"④ 没有参数或者两个参数及以上的都不可以省去括号",[14,77036,77037],{},"⑤ 阻止表单默认提交：",[14,77039,77040],{},"const form = document.querySelector('form')",[14,77042,77043],{},"form.addEventListener('click', ev => ev.preventDefault())",[14,77045,77046],{},"⑤ 箭头函数可以直接返回一个对象，理解为自带return的：",[14,77048,77049],{},"const fn=uname=>({uname:uname})",[14,77051,77052],{},"对象是需要大括号的，函数也有大括号，函数的大括号和对象大括号冲突了，所以将对象用小括号进行包住，这个等价会有一个返回值",[14,77054,77055],{},[23,77056],{"alt":25,"src":77057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-236.png",[14,77059,77060],{},[23,77061],{"alt":25,"src":77062},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-237.png",[14,77064,77065],{},[23,77066],{"alt":25,"src":77067},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-238.png",[14,77069,77070],{},"一定不要忘记用()，有()就理解为自带return",[21991,77072,77074],{"id":77073},"_4532-箭头函数参数","4.5.3.2 箭头函数参数",[14,77076,77077],{},"箭头函数是没有动态参数的arguments",[14,77079,77080],{},[23,77081],{"alt":25,"src":77082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-239.png",[21991,77084,77086],{"id":77085},"_4533-箭头函数this","4.5.3.3 箭头函数this",[14,77088,11325],{},[60,77090,77091,77094,77097],{},[63,77092,77093],{},"可以理解为箭头函数中this值就看它父亲的this的指向",[63,77095,77096],{},"事件回调函数使用箭头函数时，this 为全局的 window",[63,77098,77099],{},"DOM事件回调函数最好不要使用箭头函数，尤其是需要用到this的时候",[14,77101,77102],{},[23,77103],{"alt":25,"src":77104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-240.png",[97,77106,77108],{"className":53061,"code":77107,"language":53063,"meta":25,"style":25},"  \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",[103,77109,77110,77118,77123,77128,77133,77138,77143,77147,77152,77156,77160,77165,77170,77175,77179,77183,77188,77193,77198],{"__ignoreMap":25},[106,77111,77112,77114,77116],{"class":108,"line":109},[106,77113,52138],{"class":116},[106,77115,51807],{"class":51294},[106,77117,51301],{"class":116},[106,77119,77120],{"class":108,"line":28},[106,77121,77122],{"class":116},"    \u002F\u002F 1.以前this的指向：谁调用的这个函数，this就指向谁\n",[106,77124,77125],{"class":108,"line":1172},[106,77126,77127],{"class":116},"    console.log(this) \u002F\u002F指向window\n",[106,77129,77130],{"class":108,"line":1187},[106,77131,77132],{"class":116},"    \u002F\u002F window.console.log(111)   实际写法，window进行了省略\n",[106,77134,77135],{"class":108,"line":1193},[106,77136,77137],{"class":116},"    function fn() {\n",[106,77139,77140],{"class":108,"line":1207},[106,77141,77142],{"class":116},"      console.log(this)  \u002F\u002F指向window\n",[106,77144,77145],{"class":108,"line":1213},[106,77146,2179],{"class":116},[106,77148,77149],{"class":108,"line":1304},[106,77150,77151],{"class":116},"    window.fn()\u002F\u002F实际写法，调用时可以省略window\n",[106,77153,77154],{"class":108,"line":1310},[106,77155,2392],{"emptyLinePlaceholder":33},[106,77157,77158],{"class":108,"line":1322},[106,77159,71517],{"class":116},[106,77161,77162],{"class":108,"line":1604},[106,77163,77164],{"class":116},"      name: 'andy',\n",[106,77166,77167],{"class":108,"line":1609},[106,77168,77169],{"class":116},"      sayHai: function () {\n",[106,77171,77172],{"class":108,"line":1615},[106,77173,77174],{"class":116},"        console.log(this)\n",[106,77176,77177],{"class":108,"line":1620},[106,77178,52392],{"class":116},[106,77180,77181],{"class":108,"line":1634},[106,77182,2179],{"class":116},[106,77184,77185],{"class":108,"line":1639},[106,77186,77187],{"class":116},"    obj.sayHai() \u002F\u002Fthis指向obj\n",[106,77189,77190],{"class":108,"line":1645},[106,77191,77192],{"class":116},"    \u002F\u002F 2.箭头函数的this\n",[106,77194,77195],{"class":108,"line":1666},[106,77196,77197],{"class":116},"    const fn = () => console.log(this)\n",[106,77199,77200,77202,77204],{"class":108,"line":1671},[106,77201,52411],{"class":116},[106,77203,51807],{"class":51294},[106,77205,51301],{"class":116},[14,77207,77208],{},"2.箭头函数的this 是上一层作用域的this指向，箭头函数是不会创建自己的this的",[14,77210,77211],{},"const fn = () => console.log(this)",[14,77213,77214],{},"fn() \u002F\u002F指向window",[14,77216,77217],{},"\u002F\u002F 3.对象方法箭头函数 this",[14,77219,77220],{},"①",[14,77222,77223],{},"const obj = {",[14,77225,77226],{},"uname: 'pink老师',",[14,77228,77229],{},"sayHai: () => console.log(this) \u002F\u002Fthis指向的是window",[14,77231,1063],{},[14,77233,77234],{},"调用对象里边的函数",[14,77236,77237],{},"箭头函数里不会创建自己的this，所以在箭头函数没有this，所以会往这个箭头函数上方去寻找，对象是没有作用域的，上一层的作用域是指向window的，因为obj在这个作用域，也就是说可以看obj的this的指向，指向window，所以这个this指向window，obj实际为window.obj",[14,77239,77240],{},"obj.sayHai()",[14,77242,77243],{},"②",[14,77245,77246],{},"const obj1 = {",[14,77248,77226],{},[14,77250,77251],{},"sayHai: function () {",[14,77253,77254],{},"let i = 10",[14,77256,77257],{},"const count = () => {",[14,77259,77260],{},"console.log(this)",[14,77262,77263],{},"这个this指向的是obj1,箭头函数不会创建this，所以不指向这个作用域的的父亲",[14,77265,77266],{},"也就是count，这个作用域的上层作用域在这个匿名函数中，这个匿名函数的this指向的obj1",[14,77268,1063],{},[14,77270,77271],{},"count()",[14,77273,1063],{},[14,77275,1063],{},[14,77277,77278],{},"obj1.sayHai()",[48,77280,77282],{"id":77281},"_46-解构赋值","4.6 解构赋值",[77,77284,77286],{"id":77285},"_461-数组解构","4.6.1 数组解构",[14,77288,77289],{},"以前要是使用数组中的值的话：",[14,77291,77292],{},"假设一个数组我存放了3个值，分别为最大值，最小值和平均值，我要使用里边的值的话，我需要再去声明这个常量",[14,77294,77295],{},"const arr=[100,60,80]",[14,77297,77298],{},"const max=arr[0]",[14,77300,77301],{},"const min=arr[1]",[14,77303,77304],{},"const avg=arr[2]",[14,77306,77307],{},"要写很多行代码，较为麻烦，所以我们需要用到数组解构",[14,77309,77310],{},"用数组解构的话：const [max,min,avr]=[100,60,80]",[14,77312,77313],{},"这个写法就类似于上边的那种用很多const的方法",[14,77315,77316],{},[23,77317],{"alt":25,"src":77318},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-241.png",[97,77320,77322],{"className":50627,"code":77321,"language":50629,"meta":25,"style":25},"①变量之间交换值:\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",[103,77323,77324,77329,77334,77339,77344,77349,77353,77357,77362,77366,77371,77376,77380,77385,77390,77401,77411,77416,77421,77426,77430,77434],{"__ignoreMap":25},[106,77325,77326],{"class":108,"line":109},[106,77327,77328],{"class":116},"①变量之间交换值:\n",[106,77330,77331],{"class":108,"line":28},[106,77332,77333],{"class":116},"let a=1\n",[106,77335,77336],{"class":108,"line":1172},[106,77337,77338],{"class":116},"let b=2;\n",[106,77340,77341],{"class":108,"line":1187},[106,77342,77343],{"class":116},"必须加这行代码，不然就会报错\n",[106,77345,77346],{"class":108,"line":1193},[106,77347,77348],{"class":116},"[b,a]=[a,b]\n",[106,77350,77351],{"class":108,"line":1207},[106,77352,2392],{"emptyLinePlaceholder":33},[106,77354,77355],{"class":108,"line":1213},[106,77356,2392],{"emptyLinePlaceholder":33},[106,77358,77359],{"class":108,"line":1304},[106,77360,77361],{"class":116},"可以写成下面的方式：\n",[106,77363,77364],{"class":108,"line":1310},[106,77365,77333],{"class":116},[106,77367,77368],{"class":108,"line":1322},[106,77369,77370],{"class":116},"let b=2\n",[106,77372,77373],{"class":108,"line":1604},[106,77374,77375],{"class":116},";[b,a]=[a,b]\n",[106,77377,77378],{"class":108,"line":1609},[106,77379,2392],{"emptyLinePlaceholder":33},[106,77381,77382],{"class":108,"line":1615},[106,77383,77384],{"class":116},"②排序\n",[106,77386,77387],{"class":108,"line":1620},[106,77388,77389],{"class":116},"const arr1 = [2, 6, 4, 3, 5, 1]\n",[106,77391,77392,77395,77398],{"class":108,"line":1634},[106,77393,77394],{"class":116},"for (let i = 0; i ",[106,77396,1027],{"class":77397},"s7hpK",[106,77399,77400],{"class":116}," arr1.length; i++) {\n",[106,77402,77403,77406,77408],{"class":108,"line":1639},[106,77404,77405],{"class":116},"   for (let j = 0; j ",[106,77407,1027],{"class":77397},[106,77409,77410],{"class":116}," arr1.length - 1; j++) {\n",[106,77412,77413],{"class":108,"line":1645},[106,77414,77415],{"class":116},"      if (arr1[j] > arr1[j + 1]) {\n",[106,77417,77418],{"class":108,"line":1666},[106,77419,77420],{"class":116},"         [arr1[j + 1], arr1[j]] = [arr1[j], arr1[j + 1]]\n",[106,77422,77423],{"class":108,"line":1671},[106,77424,77425],{"class":116},"       }\n",[106,77427,77428],{"class":108,"line":1685},[106,77429,4301],{"class":116},[106,77431,77432],{"class":108,"line":1690},[106,77433,1557],{"class":116},[106,77435,77436],{"class":108,"line":1719},[106,77437,77438],{"class":116},"console.log(arr1)\n",[14,77440,77441],{},"数组解构的细节：",[14,77443,77444],{},"①变量多，单元值少",[14,77446,77447],{},[23,77448],{"alt":25,"src":77449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-242.png",[14,77451,77452],{},"防止出现undefined的方法：",[14,77454,77455],{},"const [a=0,b=0] =[1]",[14,77457,77458],{},"a为1，b为0；优先执行传过来的参数，没有参数传过来就是用自己的参数",[14,77460,77461],{},"②变量少，单元值多",[14,77463,77464],{},[23,77465],{"alt":25,"src":77466},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-243.png",[14,77468,77469],{},"此时可以使用剩余参数来接收多余的值",[14,77471,77472],{},"const [a,b,...c]=[1,2,3,4]",[14,77474,77475],{},"console.log(c) 输出[3,4]",[14,77477,77478],{},"③可以按需导入，忽略某些返回值",[14,77480,77481],{},[23,77482],{"alt":25,"src":77483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-244.png",[14,77485,77486],{},"④支持多维数组的结构",[97,77488,77492],{"className":77489,"code":77490,"language":77491,"meta":25,"style":25},"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",[103,77493,77494,77522,77538,77553,77568],{"__ignoreMap":25},[106,77495,77496,77498,77500,77502,77504,77506,77508,77510,77513,77515,77517,77519],{"class":108,"line":109},[106,77497,6785],{"class":112},[106,77499,51827],{"class":116},[106,77501,162],{"class":112},[106,77503,52220],{"class":116},[106,77505,334],{"class":165},[106,77507,12428],{"class":116},[106,77509,194],{"class":165},[106,77511,77512],{"class":116},", [",[106,77514,188],{"class":165},[106,77516,12428],{"class":116},[106,77518,410],{"class":165},[106,77520,77521],{"class":116},"]]\n",[106,77523,77524,77527,77529,77531,77533,77535],{"class":108,"line":28},[106,77525,77526],{"class":116},"console.",[106,77528,58241],{"class":1955},[106,77530,3843],{"class":116},[106,77532,308],{"class":165},[106,77534,4208],{"class":116},[106,77536,77537],{"class":175},"  \u002F\u002F1\n",[106,77539,77540,77542,77544,77546,77548,77550],{"class":108,"line":1172},[106,77541,77526],{"class":116},[106,77543,58241],{"class":1955},[106,77545,3843],{"class":116},[106,77547,334],{"class":165},[106,77549,4208],{"class":116},[106,77551,77552],{"class":175},"  \u002F\u002F2\n",[106,77554,77555,77557,77559,77561,77563,77565],{"class":108,"line":1187},[106,77556,77526],{"class":116},[106,77558,58241],{"class":1955},[106,77560,3843],{"class":116},[106,77562,194],{"class":165},[106,77564,4208],{"class":116},[106,77566,77567],{"class":175},"  \u002F\u002F[3,4]\n",[106,77569,77570,77572,77574,77576,77578,77580,77582,77584],{"class":108,"line":1193},[106,77571,77526],{"class":116},[106,77573,58241],{"class":1955},[106,77575,3843],{"class":116},[106,77577,194],{"class":165},[106,77579,4893],{"class":116},[106,77581,308],{"class":165},[106,77583,4208],{"class":116},[106,77585,77586],{"class":175},"  \u002F\u002F3\n",[97,77588,77590],{"className":77489,"code":77589,"language":77491,"meta":25,"style":25},"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",[103,77591,77592,77619,77630,77641],{"__ignoreMap":25},[106,77593,77594,77596,77599,77601,77603,77605,77607,77609,77611,77613,77615,77617],{"class":108,"line":109},[106,77595,6785],{"class":112},[106,77597,77598],{"class":116}," [a, b, c] ",[106,77600,162],{"class":112},[106,77602,52220],{"class":116},[106,77604,334],{"class":165},[106,77606,12428],{"class":116},[106,77608,194],{"class":165},[106,77610,77512],{"class":116},[106,77612,188],{"class":165},[106,77614,12428],{"class":116},[106,77616,410],{"class":165},[106,77618,77521],{"class":116},[106,77620,77621,77623,77625,77628],{"class":108,"line":28},[106,77622,77526],{"class":116},[106,77624,58241],{"class":1955},[106,77626,77627],{"class":116},"(a)",[106,77629,77537],{"class":175},[106,77631,77632,77634,77636,77639],{"class":108,"line":1172},[106,77633,77526],{"class":116},[106,77635,58241],{"class":1955},[106,77637,77638],{"class":116},"(b)",[106,77640,77552],{"class":175},[106,77642,77643,77645,77647,77650],{"class":108,"line":1187},[106,77644,77526],{"class":116},[106,77646,58241],{"class":1955},[106,77648,77649],{"class":116},"(c)",[106,77651,77567],{"class":175},[97,77653,77655],{"className":77489,"code":77654,"language":77491,"meta":25,"style":25},"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",[103,77656,77657,77684,77694,77704,77714],{"__ignoreMap":25},[106,77658,77659,77661,77664,77666,77668,77670,77672,77674,77676,77678,77680,77682],{"class":108,"line":109},[106,77660,6785],{"class":112},[106,77662,77663],{"class":116}," [a, b, [c, d]] ",[106,77665,162],{"class":112},[106,77667,52220],{"class":116},[106,77669,334],{"class":165},[106,77671,12428],{"class":116},[106,77673,194],{"class":165},[106,77675,77512],{"class":116},[106,77677,188],{"class":165},[106,77679,12428],{"class":116},[106,77681,410],{"class":165},[106,77683,77521],{"class":116},[106,77685,77686,77688,77690,77692],{"class":108,"line":28},[106,77687,77526],{"class":116},[106,77689,58241],{"class":1955},[106,77691,77627],{"class":116},[106,77693,77537],{"class":175},[106,77695,77696,77698,77700,77702],{"class":108,"line":1172},[106,77697,77526],{"class":116},[106,77699,58241],{"class":1955},[106,77701,77638],{"class":116},[106,77703,77552],{"class":175},[106,77705,77706,77708,77710,77712],{"class":108,"line":1187},[106,77707,77526],{"class":116},[106,77709,58241],{"class":1955},[106,77711,77649],{"class":116},[106,77713,77586],{"class":175},[106,77715,77716,77718,77720,77723],{"class":108,"line":1193},[106,77717,77526],{"class":116},[106,77719,58241],{"class":1955},[106,77721,77722],{"class":116},"(d)",[106,77724,77725],{"class":175},"  \u002F\u002F4\n",[77,77727,77729],{"id":77728},"_462-对象解构","4.6.2 对象解构",[14,77731,77732],{},"对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法",[14,77734,77735],{},"用的非常非常多！！！！！！",[21991,77737,77739],{"id":77738},"_4621-对象解构的基本用法","4.6.2.1 对象解构的基本用法",[14,77741,77742],{},"基本语法：",[60,77744,77745,77748,77751,77754],{},[63,77746,77747],{},"赋值运算符 = 左侧的 {} 用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量",[63,77749,77750],{},"对象属性的值将被赋值给与属性名相同的变量",[63,77752,77753],{},"注意解构的变量名不要和外面的变量名冲突否则报错",[63,77755,77756],{},"对象中找不到与变量名一致的属性时变量值为 undefined",[97,77758,77760],{"className":50627,"code":77759,"language":50629,"meta":25,"style":25},"const obj = {\n   uname: 'pink老师',\n   age: 18,\n}\nconst { uname, age } = obj\n",[103,77761,77762,77767,77772,77777,77781],{"__ignoreMap":25},[106,77763,77764],{"class":108,"line":109},[106,77765,77766],{"class":116},"const obj = {\n",[106,77768,77769],{"class":108,"line":28},[106,77770,77771],{"class":116},"   uname: 'pink老师',\n",[106,77773,77774],{"class":108,"line":1172},[106,77775,77776],{"class":116},"   age: 18,\n",[106,77778,77779],{"class":108,"line":1187},[106,77780,1557],{"class":116},[106,77782,77783],{"class":108,"line":1193},[106,77784,77785],{"class":116},"const { uname, age } = obj\n",[14,77787,77788],{},"上方代码这样写等价于：",[14,77790,77791],{},"const uname等价于obj.uname",[14,77793,77794],{},"变量名可以重新改名：",[14,77796,77797],{},"const uname='red老师'",[14,77799,77800],{},"const user={",[14,77802,77803],{},"  uname:'pink老师',",[14,77805,77806],{},"  age:18",[14,77808,1063],{},[14,77810,77811],{},"const {uname,age}=user",[14,77813,77814],{},"解构的变量名与全局变量名冲突，此时会报错，解决方案是改解构变量名，因为全局变量名可能有很多代码正在使用，不能改，一改就会影响其他部分，所以要改解构变量名",[14,77816,77817],{},"const {旧变量名：新变量名}=对象",[14,77819,77820],{},"const {uname:username,age}=user",[21991,77822,77824],{"id":77823},"_4622-数组对象的解构","4.6.2.2 数组对象的解构",[14,77826,77827],{},[23,77828],{"alt":25,"src":77829},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-245.png",[21991,77831,77833],{"id":77832},"_4623-多级对象解构","4.6.2.3 多级对象解构",[14,77835,77836],{},[23,77837],{"alt":25,"src":77838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-246.png",[97,77840,77842],{"className":53061,"code":77841,"language":53063,"meta":25,"style":25},"  \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",[103,77843,77844,77852,77857,77862,77867,77872,77877,77882,77887,77892,77896,77901,77906],{"__ignoreMap":25},[106,77845,77846,77848,77850],{"class":108,"line":109},[106,77847,52138],{"class":116},[106,77849,51807],{"class":51294},[106,77851,51301],{"class":116},[106,77853,77854],{"class":108,"line":28},[106,77855,77856],{"class":116},"    const pig = {\n",[106,77858,77859],{"class":108,"line":1172},[106,77860,77861],{"class":116},"      name: '佩奇',\n",[106,77863,77864],{"class":108,"line":1187},[106,77865,77866],{"class":116},"      family: {\n",[106,77868,77869],{"class":108,"line":1193},[106,77870,77871],{"class":116},"        mother: '猪妈妈',\n",[106,77873,77874],{"class":108,"line":1207},[106,77875,77876],{"class":116},"        father: '猪爸爸',\n",[106,77878,77879],{"class":108,"line":1213},[106,77880,77881],{"class":116},"        sister: '乔治'\n",[106,77883,77884],{"class":108,"line":1304},[106,77885,77886],{"class":116},"      },\n",[106,77888,77889],{"class":108,"line":1310},[106,77890,77891],{"class":116},"      age: 6\n",[106,77893,77894],{"class":108,"line":1322},[106,77895,2179],{"class":116},[106,77897,77898],{"class":108,"line":1604},[106,77899,77900],{"class":116},"    \u002F\u002F 多级对象解构\n",[106,77902,77903],{"class":108,"line":1609},[106,77904,77905],{"class":116},"    const { name, family: { mother, father, sister }, age } = pig\n",[106,77907,77908,77910,77912],{"class":108,"line":1615},[106,77909,52411],{"class":116},[106,77911,51807],{"class":51294},[106,77913,51301],{"class":116},[14,77915,77916],{},"多级对象跟多维数组不同的是，需要指定是哪个对象",[97,77918,77921],{"className":77919,"code":77920,"language":76441,"meta":25,"style":25},"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",[103,77922,77923,77928,77939,77951,77963,77972,77976,77987,77999,78009,78014,78018,78028,78039,78048,78052,78056,78067,78078,78087,78091,78096],{"__ignoreMap":25},[106,77924,77925],{"class":108,"line":109},[106,77926,77927],{"class":175},"    \u002F\u002F 这是后台传递过来的数据\n",[106,77929,77930,77932,77935,77937],{"class":108,"line":28},[106,77931,11214],{"class":112},[106,77933,77934],{"class":116}," msg ",[106,77936,162],{"class":112},[106,77938,15565],{"class":116},[106,77940,77941,77944,77946,77949],{"class":108,"line":1172},[106,77942,77943],{"class":221},"      \"code\"",[106,77945,976],{"class":112},[106,77947,77948],{"class":165}," 200",[106,77950,31460],{"class":116},[106,77952,77953,77956,77958,77961],{"class":108,"line":1187},[106,77954,77955],{"class":221},"      \"msg\"",[106,77957,976],{"class":112},[106,77959,77960],{"class":221}," \"获取新闻列表成功\"",[106,77962,31460],{"class":116},[106,77964,77965,77968,77970],{"class":108,"line":1193},[106,77966,77967],{"class":221},"      \"data\"",[106,77969,976],{"class":112},[106,77971,55441],{"class":116},[106,77973,77974],{"class":108,"line":1207},[106,77975,2502],{"class":116},[106,77977,77978,77981,77983,77985],{"class":108,"line":1213},[106,77979,77980],{"class":221},"          \"id\"",[106,77982,976],{"class":112},[106,77984,25112],{"class":165},[106,77986,31460],{"class":116},[106,77988,77989,77992,77994,77997],{"class":108,"line":1304},[106,77990,77991],{"class":221},"          \"title\"",[106,77993,976],{"class":112},[106,77995,77996],{"class":221}," \"5G商用自己，三大运用商收入下降\"",[106,77998,31460],{"class":116},[106,78000,78001,78004,78006],{"class":108,"line":1310},[106,78002,78003],{"class":221},"          \"count\"",[106,78005,976],{"class":112},[106,78007,78008],{"class":165}," 58\n",[106,78010,78011],{"class":108,"line":1322},[106,78012,78013],{"class":116},"        },\n",[106,78015,78016],{"class":108,"line":1604},[106,78017,2502],{"class":116},[106,78019,78020,78022,78024,78026],{"class":108,"line":1609},[106,78021,77980],{"class":221},[106,78023,976],{"class":112},[106,78025,14748],{"class":165},[106,78027,31460],{"class":116},[106,78029,78030,78032,78034,78037],{"class":108,"line":1615},[106,78031,77991],{"class":221},[106,78033,976],{"class":112},[106,78035,78036],{"class":221}," \"国际媒体头条速览\"",[106,78038,31460],{"class":116},[106,78040,78041,78043,78045],{"class":108,"line":1620},[106,78042,78003],{"class":221},[106,78044,976],{"class":112},[106,78046,78047],{"class":165}," 56\n",[106,78049,78050],{"class":108,"line":1634},[106,78051,78013],{"class":116},[106,78053,78054],{"class":108,"line":1639},[106,78055,2502],{"class":116},[106,78057,78058,78060,78062,78065],{"class":108,"line":1645},[106,78059,77980],{"class":221},[106,78061,976],{"class":112},[106,78063,78064],{"class":165}," 3",[106,78066,31460],{"class":116},[106,78068,78069,78071,78073,78076],{"class":108,"line":1666},[106,78070,77991],{"class":221},[106,78072,976],{"class":112},[106,78074,78075],{"class":221}," \"乌克兰和俄罗斯持续冲突\"",[106,78077,31460],{"class":116},[106,78079,78080,78082,78084],{"class":108,"line":1671},[106,78081,78003],{"class":221},[106,78083,976],{"class":112},[106,78085,78086],{"class":165}," 1669\n",[106,78088,78089],{"class":108,"line":1685},[106,78090,78013],{"class":116},[106,78092,78093],{"class":108,"line":1690},[106,78094,78095],{"class":116},"      ]\n",[106,78097,78098],{"class":108,"line":1719},[106,78099,2179],{"class":116},[14,78101,78102],{},"1.针对后台的数据，如果我只要data的话，只需要： const {data}=msg",[14,78104,78105],{},"对象里边的属性和方法是无序的，我们只要里边的其中一个值的话，只需要：const{要的那个属性}=对象",[14,78107,78108],{},"\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,78110,78111],{},"function({data}) {",[14,78113,78114],{},"console.log(data)",[14,78116,1063],{},[14,78118,78119],{},"render(msg)",[14,78121,78122],{},"实参传递给形参的时候解构了",[14,78124,78125],{},"这样可以节省空间，放在函数里解构，只有函数调用的时候才会用到，放在外面的话内存就要存好几遍这些数据",[14,78127,78128],{},"2.为了防止msg里面的data名字混淆，要求渲染函数里面的数据名改为 myData",[14,78130,78131],{},"function render({data:mydata}) {",[14,78133,78134],{},"  console.log(data)",[14,78136,1063],{},[77,78138,78140],{"id":78139},"_463-总结代码加分号的情况","4.6.3 总结代码加分号的情况",[14,78142,78143],{},"有两种情况：一个是数组结构，一个是立即执行函数",[60,78145,78146],{},[63,78147,78148],{},"如果对一个数组进行遍历，有两种方式：",[14,78150,78151],{},"①法1",[14,78153,78154],{},"const arr=[1,2,3]",[14,78156,78157],{},"arr.map(function(item,index) {",[14,78159,78160],{},"  console.log(item)",[14,78162,52458],{},[14,78164,78165],{},[23,78166],{"alt":25,"src":78167},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-247.png",[14,78169,78170],{},"②法2",[14,78172,78173],{},"const str='pink'",[14,78175,78176],{},"[1,2,3].map(function(item,index) {",[14,78178,78179],{},"console.log(item)",[14,78181,52458],{},[14,78183,78184],{},[23,78185],{"alt":25,"src":78186},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-248.png",[14,78188,78189],{},"此时会报错",[14,78191,78192],{},"他会认为是const str='pink' [1,2,3].map(function(item,index) {",[14,78194,78179],{},[14,78196,52458],{},[14,78198,78199],{},"内部会当成这样处理，所以我们用分号进行隔开",[48,78201,78203],{"id":78202},"_47-遍历数组foreach方法","4.7 遍历数组forEach方法",[14,78205,78206],{},"forEach多和字符串来进行联合使用，使用forEach遍历后加到小盒子中，字符串str+=小盒子，然后将字符串加到大盒子中，大盒子使用innerHTML",[14,78208,78209],{},"可以理解为加强版的for循环",[14,78211,78212],{},[23,78213],{"alt":25,"src":78214},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-249.png",[14,78216,78217],{},"里边不写return，不返回数组，只遍历不返回",[14,78219,78220],{},"map是返回数组",[14,78222,78223],{},"forEach主要用于遍历数组对象",[97,78225,78227],{"className":53061,"code":78226,"language":53063,"meta":25,"style":25},"  \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",[103,78228,78229,78237,78242,78247,78252,78257,78261,78266],{"__ignoreMap":25},[106,78230,78231,78233,78235],{"class":108,"line":109},[106,78232,52138],{"class":116},[106,78234,51807],{"class":51294},[106,78236,51301],{"class":116},[106,78238,78239],{"class":108,"line":28},[106,78240,78241],{"class":116},"    const arr = ['red', 'green', 'pink']\n",[106,78243,78244],{"class":108,"line":1172},[106,78245,78246],{"class":116},"    const result = arr.forEach(function (item, index) {\n",[106,78248,78249],{"class":108,"line":1187},[106,78250,78251],{"class":116},"      console.log(item)\n",[106,78253,78254],{"class":108,"line":1193},[106,78255,78256],{"class":116},"      console.log(index)\n",[106,78258,78259],{"class":108,"line":1207},[106,78260,33455],{"class":116},[106,78262,78263],{"class":108,"line":1213},[106,78264,78265],{"class":116},"    console.log(result)\n",[106,78267,78268,78270,78272],{"class":108,"line":1304},[106,78269,52411],{"class":116},[106,78271,51807],{"class":51294},[106,78273,51301],{"class":116},[14,78275,78276],{},[23,78277],{"alt":25,"src":78278},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-250.png",[48,78280,78282],{"id":78281},"_48-筛选数组-filter方法","4.8 筛选数组 filter方法",[14,78284,78285],{},[23,78286],{"alt":25,"src":78287},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-251.png",[14,78289,78290],{},"只能写比较符，写加号不写任何作用，map中写比较符也不起任何作用，每种方法都有其各自的作用，但是有一点他们两个方法返回的都是新数组",[97,78292,78294],{"className":53061,"code":78293,"language":53063,"meta":25,"style":25},"\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",[103,78295,78296,78304,78312,78317,78322,78326,78330,78335,78339,78344,78352],{"__ignoreMap":25},[106,78297,78298,78300,78302],{"class":108,"line":109},[106,78299,1027],{"class":116},[106,78301,51794],{"class":51294},[106,78303,51301],{"class":116},[106,78305,78306,78308,78310],{"class":108,"line":28},[106,78307,52138],{"class":116},[106,78309,51807],{"class":51294},[106,78311,51301],{"class":116},[106,78313,78314],{"class":108,"line":1172},[106,78315,78316],{"class":116},"    const arr = [10, 20, 30]\n",[106,78318,78319],{"class":108,"line":1187},[106,78320,78321],{"class":116},"    const newArr = arr.filter(function (item, index) {\n",[106,78323,78324],{"class":108,"line":1193},[106,78325,78251],{"class":116},[106,78327,78328],{"class":108,"line":1207},[106,78329,78256],{"class":116},[106,78331,78332],{"class":108,"line":1213},[106,78333,78334],{"class":116},"      return item >= 20\n",[106,78336,78337],{"class":108,"line":1304},[106,78338,33455],{"class":116},[106,78340,78341],{"class":108,"line":1310},[106,78342,78343],{"class":116},"    console.log(newArr)\n",[106,78345,78346,78348,78350],{"class":108,"line":1322},[106,78347,52411],{"class":116},[106,78349,51807],{"class":51294},[106,78351,51301],{"class":116},[106,78353,78354,78356,78358],{"class":108,"line":1604},[106,78355,51779],{"class":116},[106,78357,51794],{"class":51294},[106,78359,51301],{"class":116},[14,78361,78362],{},"这个也可以写成箭头函数：",[97,78364,78366],{"className":50627,"code":78365,"language":50629,"meta":25,"style":25},"const newArr = arr.filter(item => item >= 20)\n",[103,78367,78368],{"__ignoreMap":25},[106,78369,78370],{"class":108,"line":109},[106,78371,78365],{"class":116},[48,78373,78375],{"id":78374},"_49-商品列表价格筛选","4.9 商品列表价格筛选",[14,78377,78378],{},[23,78379],{"alt":25,"src":78380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-252.png",[14,78382,78383],{},"步骤：",[14,78385,78386],{},"①：渲染页面模块",[1124,78388,78389,78392],{},[63,78390,78391],{},"初始化需要渲染页面，同时，点击不同的需求，还会重新渲染页面，所以渲染做成一个函数",[63,78393,78394],{},"用forEach+字符串的形式",[14,78396,78397],{},"②：点击不同需求，显示不同页面内容",[1124,78399,78400,78403,78406,78409,78412],{},[63,78401,78402],{},"点击采取事件委托方式 .filter",[63,78404,78405],{},"利用过滤函数 filter 筛选出符合条件的数据，因为生成的是一个数组，传递给渲染函数即可",[63,78407,78408],{},"筛选条件是根据点击的 data-index 来判断",[63,78410,78411],{},"可以使用对象解构，把事件对象解构",[63,78413,78414],{},"因为全部区间不需要筛选，直接把goodList渲染即可",[97,78416,78418],{"className":50627,"code":78417,"language":50629,"meta":25,"style":25},"\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",[103,78419,78420,78430,78444,78448,78456,78470,78490,78502,78510,78516,78526,78536,78546,78550,78554,78560,78573,78585,78595,78607,78611,78615,78622,78635,78647,78664,78682,78695,78699,78703,78715,78725,78729,78733,78740,78781,78808,78818,78822,78826,78834,78846,78850,78854,78862,78874,78886,78897,78901,78905,78914,78926,78937,78941,78945,78954,78966,78978,78982,78986,78993,79003,79015,79027,79042,79046,79050,79058,79074,79084,79094,79104,79116,79120,79124,79134,79145,79155,79159,79167,79175,79179,79187,79202,79228,79253,79278,79297,79305,79319,79324,79329,79334,79339,79344,79352,79360,79365,79376,79381,79391,79401,79411,79421,79425,79429,79438,79447,79456,79465,79469,79473,79482,79491,79500,79509,79513,79517,79526,79535,79544,79553,79557,79561,79570,79579,79588,79597,79601,79605,79614,79623,79632,79641,79645,79649,79658,79667,79676,79685,79689,79693,79702,79711,79719,79728,79732,79736,79740,79745,79757,79762,79774,79778,79795,79823,79832,79837,79847,79857,79866,79871,79876,79880,79885,79902,79906,79911,79919,79924,79951,79956,79976,79981,79993,79998,80003,80008,80019,80033,80070,80088,80121,80138,80162,80166,80171,80177,80181,80185,80189,80197,80205,80209],{"__ignoreMap":25},[106,78421,78422,78424,78426,78428],{"class":108,"line":109},[106,78423,51291],{"class":116},[106,78425,51295],{"class":51294},[106,78427,51298],{"class":1955},[106,78429,51301],{"class":116},[106,78431,78432,78434,78436,78438,78440,78442],{"class":108,"line":28},[106,78433,1027],{"class":116},[106,78435,50629],{"class":51294},[106,78437,51310],{"class":1955},[106,78439,162],{"class":116},[106,78441,51315],{"class":221},[106,78443,51301],{"class":116},[106,78445,78446],{"class":108,"line":1172},[106,78447,2392],{"emptyLinePlaceholder":33},[106,78449,78450,78452,78454],{"class":108,"line":1187},[106,78451,1027],{"class":116},[106,78453,51328],{"class":51294},[106,78455,51301],{"class":116},[106,78457,78458,78460,78462,78464,78466,78468],{"class":108,"line":1193},[106,78459,52138],{"class":116},[106,78461,51338],{"class":51294},[106,78463,51341],{"class":1955},[106,78465,162],{"class":116},[106,78467,51346],{"class":221},[106,78469,51301],{"class":116},[106,78471,78472,78474,78476,78478,78480,78482,78484,78486,78488],{"class":108,"line":1207},[106,78473,52138],{"class":116},[106,78475,51338],{"class":51294},[106,78477,14913],{"class":1955},[106,78479,162],{"class":116},[106,78481,51385],{"class":221},[106,78483,51365],{"class":1955},[106,78485,162],{"class":116},[106,78487,51392],{"class":221},[106,78489,51301],{"class":116},[106,78491,78492,78494,78496,78498,78500],{"class":108,"line":1213},[106,78493,52138],{"class":116},[106,78495,51401],{"class":51294},[106,78497,51404],{"class":116},[106,78499,51401],{"class":51294},[106,78501,51301],{"class":116},[106,78503,78504,78506,78508],{"class":108,"line":1304},[106,78505,52138],{"class":116},[106,78507,5119],{"class":51294},[106,78509,51301],{"class":116},[106,78511,78512,78514],{"class":108,"line":1310},[106,78513,6396],{"class":51294},[106,78515,15565],{"class":116},[106,78517,78518,78520,78522,78524],{"class":108,"line":1322},[106,78519,54689],{"class":165},[106,78521,51431],{"class":116},[106,78523,308],{"class":165},[106,78525,1283],{"class":116},[106,78527,78528,78530,78532,78534],{"class":108,"line":1604},[106,78529,54700],{"class":165},[106,78531,51431],{"class":116},[106,78533,308],{"class":165},[106,78535,1283],{"class":116},[106,78537,78538,78540,78542,78544],{"class":108,"line":1609},[106,78539,72590],{"class":165},[106,78541,51431],{"class":116},[106,78543,60499],{"class":165},[106,78545,1283],{"class":116},[106,78547,78548],{"class":108,"line":1615},[106,78549,2179],{"class":116},[106,78551,78552],{"class":108,"line":1620},[106,78553,2392],{"emptyLinePlaceholder":33},[106,78555,78556,78558],{"class":108,"line":1634},[106,78557,62117],{"class":1955},[106,78559,15565],{"class":116},[106,78561,78562,78564,78566,78569,78571],{"class":108,"line":1639},[106,78563,54765],{"class":165},[106,78565,51431],{"class":116},[106,78567,78568],{"class":165},"990",[106,78570,51486],{"class":112},[106,78572,1283],{"class":116},[106,78574,78575,78577,78579,78581,78583],{"class":108,"line":1645},[106,78576,54700],{"class":165},[106,78578,51431],{"class":116},[106,78580,308],{"class":165},[106,78582,51550],{"class":165},[106,78584,1283],{"class":116},[106,78586,78587,78589,78591,78593],{"class":108,"line":1666},[106,78588,55003],{"class":165},[106,78590,51431],{"class":116},[106,78592,51471],{"class":165},[106,78594,1283],{"class":116},[106,78596,78597,78600,78602,78605],{"class":108,"line":1671},[106,78598,78599],{"class":165},"      flex-wrap",[106,78601,51431],{"class":116},[106,78603,78604],{"class":165},"wrap",[106,78606,1283],{"class":116},[106,78608,78609],{"class":108,"line":1685},[106,78610,2179],{"class":116},[106,78612,78613],{"class":108,"line":1690},[106,78614,2392],{"emptyLinePlaceholder":33},[106,78616,78617,78620],{"class":108,"line":1719},[106,78618,78619],{"class":1955},"    .item",[106,78621,15565],{"class":116},[106,78623,78624,78626,78628,78631,78633],{"class":108,"line":1724},[106,78625,54765],{"class":165},[106,78627,51431],{"class":116},[106,78629,78630],{"class":165},"240",[106,78632,51486],{"class":112},[106,78634,1283],{"class":116},[106,78636,78637,78639,78641,78643,78645],{"class":108,"line":1741},[106,78638,61994],{"class":165},[106,78640,51431],{"class":116},[106,78642,563],{"class":165},[106,78644,51486],{"class":112},[106,78646,1283],{"class":116},[106,78648,78649,78651,78653,78655,78657,78660,78662],{"class":108,"line":1746},[106,78650,54689],{"class":165},[106,78652,51431],{"class":116},[106,78654,817],{"class":165},[106,78656,51486],{"class":112},[106,78658,78659],{"class":165}," 30",[106,78661,51486],{"class":112},[106,78663,1283],{"class":116},[106,78665,78666,78668,78670,78672,78675,78678,78680],{"class":108,"line":1751},[106,78667,61854],{"class":165},[106,78669,51431],{"class":116},[106,78671,28115],{"class":165},[106,78673,78674],{"class":165}," ease",[106,78676,78677],{"class":165}," .5",[106,78679,812],{"class":112},[106,78681,1283],{"class":116},[106,78683,78684,78687,78689,78691,78693],{"class":108,"line":1756},[106,78685,78686],{"class":165},"      margin-bottom",[106,78688,51431],{"class":116},[106,78690,817],{"class":165},[106,78692,51486],{"class":112},[106,78694,1283],{"class":116},[106,78696,78697],{"class":108,"line":1770},[106,78698,2179],{"class":116},[106,78700,78701],{"class":108,"line":1775},[106,78702,2392],{"emptyLinePlaceholder":33},[106,78704,78705,78708,78710,78713],{"class":108,"line":2569},[106,78706,78707],{"class":1955},"    .item:nth-child",[106,78709,117],{"class":116},[106,78711,78712],{"class":165},"4n",[106,78714,12435],{"class":116},[106,78716,78717,78719,78721,78723],{"class":108,"line":2583},[106,78718,61994],{"class":165},[106,78720,51431],{"class":116},[106,78722,308],{"class":165},[106,78724,1283],{"class":116},[106,78726,78727],{"class":108,"line":2591},[106,78728,2179],{"class":116},[106,78730,78731],{"class":108,"line":2596},[106,78732,2392],{"emptyLinePlaceholder":33},[106,78734,78735,78738],{"class":108,"line":2602},[106,78736,78737],{"class":1955},"    .item:hover",[106,78739,15565],{"class":116},[106,78741,78742,78745,78747,78749,78751,78753,78755,78757,78759,78762,78764,78766,78768,78770,78772,78774,78776,78779],{"class":108,"line":2608},[106,78743,78744],{"class":165},"      box-shadow",[106,78746,51431],{"class":116},[106,78748,308],{"class":165},[106,78750,51486],{"class":112},[106,78752,4085],{"class":165},[106,78754,51486],{"class":112},[106,78756,2140],{"class":165},[106,78758,51486],{"class":112},[106,78760,78761],{"class":165}," rgba",[106,78763,117],{"class":116},[106,78765,308],{"class":165},[106,78767,12428],{"class":116},[106,78769,308],{"class":165},[106,78771,12428],{"class":116},[106,78773,308],{"class":165},[106,78775,12428],{"class":116},[106,78777,78778],{"class":165},".2",[106,78780,2711],{"class":116},[106,78782,78783,78786,78788,78791,78793,78795,78797,78800,78802,78804,78806],{"class":108,"line":2613},[106,78784,78785],{"class":165},"      transform",[106,78787,51431],{"class":116},[106,78789,78790],{"class":165},"translate3d",[106,78792,117],{"class":116},[106,78794,308],{"class":165},[106,78796,12428],{"class":116},[106,78798,78799],{"class":165},"-4",[106,78801,51486],{"class":112},[106,78803,12428],{"class":116},[106,78805,308],{"class":165},[106,78807,2711],{"class":116},[106,78809,78810,78812,78814,78816],{"class":108,"line":7941},[106,78811,62019],{"class":165},[106,78813,51431],{"class":116},[106,78815,62024],{"class":165},[106,78817,1283],{"class":116},[106,78819,78820],{"class":108,"line":7965},[106,78821,2179],{"class":116},[106,78823,78824],{"class":108,"line":7970},[106,78825,2392],{"emptyLinePlaceholder":33},[106,78827,78828,78830,78832],{"class":108,"line":7976},[106,78829,78619],{"class":1955},[106,78831,55609],{"class":51294},[106,78833,15565],{"class":116},[106,78835,78836,78838,78840,78842,78844],{"class":108,"line":8003},[106,78837,54765],{"class":165},[106,78839,51431],{"class":116},[106,78841,428],{"class":165},[106,78843,445],{"class":112},[106,78845,1283],{"class":116},[106,78847,78848],{"class":108,"line":8008},[106,78849,2179],{"class":116},[106,78851,78852],{"class":108,"line":8014},[106,78853,2392],{"emptyLinePlaceholder":33},[106,78855,78856,78858,78860],{"class":108,"line":8026},[106,78857,78619],{"class":1955},[106,78859,62298],{"class":1955},[106,78861,15565],{"class":116},[106,78863,78864,78866,78868,78870,78872],{"class":108,"line":8038},[106,78865,54916],{"class":165},[106,78867,51431],{"class":116},[106,78869,767],{"class":165},[106,78871,51486],{"class":112},[106,78873,1283],{"class":116},[106,78875,78876,78878,78880,78882,78884],{"class":108,"line":8050},[106,78877,78686],{"class":165},[106,78879,51431],{"class":116},[106,78881,563],{"class":165},[106,78883,51486],{"class":112},[106,78885,1283],{"class":116},[106,78887,78888,78890,78892,78895],{"class":108,"line":9709},[106,78889,57410],{"class":165},[106,78891,51431],{"class":116},[106,78893,78894],{"class":165},"#666",[106,78896,1283],{"class":116},[106,78898,78899],{"class":108,"line":9734},[106,78900,2179],{"class":116},[106,78902,78903],{"class":108,"line":9757},[106,78904,2392],{"emptyLinePlaceholder":33},[106,78906,78907,78909,78912],{"class":108,"line":9781},[106,78908,78619],{"class":1955},[106,78910,78911],{"class":1955}," .price",[106,78913,15565],{"class":116},[106,78915,78916,78918,78920,78922,78924],{"class":108,"line":9786},[106,78917,54916],{"class":165},[106,78919,51431],{"class":116},[106,78921,867],{"class":165},[106,78923,51486],{"class":112},[106,78925,1283],{"class":116},[106,78927,78928,78930,78932,78935],{"class":108,"line":9791},[106,78929,57410],{"class":165},[106,78931,51431],{"class":116},[106,78933,78934],{"class":165},"firebrick",[106,78936,1283],{"class":116},[106,78938,78939],{"class":108,"line":9796},[106,78940,2179],{"class":116},[106,78942,78943],{"class":108,"line":9805},[106,78944,2392],{"emptyLinePlaceholder":33},[106,78946,78947,78949,78952],{"class":108,"line":9810},[106,78948,78619],{"class":1955},[106,78950,78951],{"class":1955}," .price::before",[106,78953,15565],{"class":116},[106,78955,78956,78959,78961,78964],{"class":108,"line":9816},[106,78957,78958],{"class":165},"      content",[106,78960,51431],{"class":116},[106,78962,78963],{"class":221},"'￥'",[106,78965,1283],{"class":116},[106,78967,78968,78970,78972,78974,78976],{"class":108,"line":9837},[106,78969,54916],{"class":165},[106,78971,51431],{"class":116},[106,78973,666],{"class":165},[106,78975,51486],{"class":112},[106,78977,1283],{"class":116},[106,78979,78980],{"class":108,"line":9843},[106,78981,2179],{"class":116},[106,78983,78984],{"class":108,"line":9857},[106,78985,2392],{"emptyLinePlaceholder":33},[106,78987,78988,78991],{"class":108,"line":9863},[106,78989,78990],{"class":1955},"    .filter",[106,78992,15565],{"class":116},[106,78994,78995,78997,78999,79001],{"class":108,"line":9890},[106,78996,55003],{"class":165},[106,78998,51431],{"class":116},[106,79000,51471],{"class":165},[106,79002,1283],{"class":116},[106,79004,79005,79007,79009,79011,79013],{"class":108,"line":9899},[106,79006,54765],{"class":165},[106,79008,51431],{"class":116},[106,79010,78568],{"class":165},[106,79012,51486],{"class":112},[106,79014,1283],{"class":116},[106,79016,79017,79019,79021,79023,79025],{"class":108,"line":9905},[106,79018,54700],{"class":165},[106,79020,51431],{"class":116},[106,79022,308],{"class":165},[106,79024,51550],{"class":165},[106,79026,1283],{"class":116},[106,79028,79029,79031,79033,79035,79037,79039],{"class":108,"line":9913},[106,79030,54689],{"class":165},[106,79032,51431],{"class":116},[106,79034,773],{"class":165},[106,79036,51486],{"class":112},[106,79038,78659],{"class":165},[106,79040,79041],{"class":112},"px\n",[106,79043,79044],{"class":108,"line":9918},[106,79045,2179],{"class":116},[106,79047,79048],{"class":108,"line":16597},[106,79049,2392],{"emptyLinePlaceholder":33},[106,79051,79052,79054,79056],{"class":108,"line":16603},[106,79053,78990],{"class":1955},[106,79055,1391],{"class":51294},[106,79057,15565],{"class":116},[106,79059,79060,79062,79064,79066,79068,79070,79072],{"class":108,"line":16626},[106,79061,54689],{"class":165},[106,79063,51431],{"class":116},[106,79065,563],{"class":165},[106,79067,51486],{"class":112},[106,79069,8943],{"class":165},[106,79071,51486],{"class":112},[106,79073,1283],{"class":116},[106,79075,79076,79078,79080,79082],{"class":108,"line":16632},[106,79077,61715],{"class":165},[106,79079,51431],{"class":116},[106,79081,61812],{"class":165},[106,79083,1283],{"class":116},[106,79085,79086,79088,79090,79092],{"class":108,"line":16655},[106,79087,57410],{"class":165},[106,79089,51431],{"class":116},[106,79091,78894],{"class":165},[106,79093,1283],{"class":116},[106,79095,79096,79098,79100,79102],{"class":108,"line":16669},[106,79097,63964],{"class":165},[106,79099,51431],{"class":116},[106,79101,54731],{"class":165},[106,79103,1283],{"class":116},[106,79105,79106,79108,79110,79112,79114],{"class":108,"line":16689},[106,79107,61744],{"class":165},[106,79109,51431],{"class":116},[106,79111,817],{"class":165},[106,79113,51486],{"class":112},[106,79115,1283],{"class":116},[106,79117,79118],{"class":108,"line":16695},[106,79119,2179],{"class":116},[106,79121,79122],{"class":108,"line":16706},[106,79123,2392],{"emptyLinePlaceholder":33},[106,79125,79126,79128,79130,79132],{"class":108,"line":16729},[106,79127,78990],{"class":1955},[106,79129,1391],{"class":51294},[106,79131,61894],{"class":1955},[106,79133,15565],{"class":116},[106,79135,79136,79138,79140,79143],{"class":108,"line":16751},[106,79137,54878],{"class":165},[106,79139,51431],{"class":116},[106,79141,79142],{"class":165},"#05943c",[106,79144,1283],{"class":116},[106,79146,79147,79149,79151,79153],{"class":108,"line":16756},[106,79148,57410],{"class":165},[106,79150,51431],{"class":116},[106,79152,60836],{"class":165},[106,79154,1283],{"class":116},[106,79156,79157],{"class":108,"line":16762},[106,79158,2179],{"class":116},[106,79160,79161,79163,79165],{"class":108,"line":16776},[106,79162,52411],{"class":116},[106,79164,5119],{"class":51294},[106,79166,51301],{"class":116},[106,79168,79169,79171,79173],{"class":108,"line":16789},[106,79170,51779],{"class":116},[106,79172,51328],{"class":51294},[106,79174,51301],{"class":116},[106,79176,79177],{"class":108,"line":16794},[106,79178,2392],{"emptyLinePlaceholder":33},[106,79180,79181,79183,79185],{"class":108,"line":16808},[106,79182,1027],{"class":116},[106,79184,51794],{"class":51294},[106,79186,51301],{"class":116},[106,79188,79189,79191,79193,79195,79197,79200],{"class":108,"line":16813},[106,79190,52138],{"class":116},[106,79192,51605],{"class":51294},[106,79194,53480],{"class":1955},[106,79196,162],{"class":116},[106,79198,79199],{"class":221},"\"filter\"",[106,79201,51301],{"class":116},[106,79203,79204,79206,79208,79210,79212,79214,79217,79219,79221,79224,79226],{"class":108,"line":16819},[106,79205,51335],{"class":116},[106,79207,355],{"class":51294},[106,79209,61051],{"class":1955},[106,79211,162],{"class":116},[106,79213,61056],{"class":221},[106,79215,79216],{"class":1955}," data-index",[106,79218,162],{"class":116},[106,79220,3670],{"class":221},[106,79222,79223],{"class":116},">0-100元\u003C\u002F",[106,79225,355],{"class":51294},[106,79227,51301],{"class":116},[106,79229,79230,79232,79234,79236,79238,79240,79242,79244,79246,79249,79251],{"class":108,"line":16824},[106,79231,51335],{"class":116},[106,79233,355],{"class":51294},[106,79235,61051],{"class":1955},[106,79237,162],{"class":116},[106,79239,61056],{"class":221},[106,79241,79216],{"class":1955},[106,79243,162],{"class":116},[106,79245,3693],{"class":221},[106,79247,79248],{"class":116},">100-300元\u003C\u002F",[106,79250,355],{"class":51294},[106,79252,51301],{"class":116},[106,79254,79255,79257,79259,79261,79263,79265,79267,79269,79271,79274,79276],{"class":108,"line":16838},[106,79256,51335],{"class":116},[106,79258,355],{"class":51294},[106,79260,61051],{"class":1955},[106,79262,162],{"class":116},[106,79264,61056],{"class":221},[106,79266,79216],{"class":1955},[106,79268,162],{"class":116},[106,79270,3706],{"class":221},[106,79272,79273],{"class":116},">300元以上\u003C\u002F",[106,79275,355],{"class":51294},[106,79277,51301],{"class":116},[106,79279,79280,79282,79284,79286,79288,79290,79293,79295],{"class":108,"line":16843},[106,79281,51335],{"class":116},[106,79283,355],{"class":51294},[106,79285,61051],{"class":1955},[106,79287,162],{"class":116},[106,79289,61056],{"class":221},[106,79291,79292],{"class":116},">全部区间\u003C\u002F",[106,79294,355],{"class":51294},[106,79296,51301],{"class":116},[106,79298,79299,79301,79303],{"class":108,"line":16848},[106,79300,52411],{"class":116},[106,79302,51605],{"class":51294},[106,79304,51301],{"class":116},[106,79306,79307,79309,79311,79313,79315,79317],{"class":108,"line":16862},[106,79308,52138],{"class":116},[106,79310,51605],{"class":51294},[106,79312,53480],{"class":1955},[106,79314,162],{"class":116},[106,79316,62602],{"class":221},[106,79318,51301],{"class":116},[106,79320,79321],{"class":108,"line":16874},[106,79322,79323],{"class":175},"    \u003C!-- \u003Cdiv class=\"item\">\n",[106,79325,79326],{"class":108,"line":16879},[106,79327,79328],{"class":175},"      \u003Cimg src=\"\" alt=\"\">\n",[106,79330,79331],{"class":108,"line":16892},[106,79332,79333],{"class":175},"      \u003Cp class=\"name\">\u003C\u002Fp>\n",[106,79335,79336],{"class":108,"line":16897},[106,79337,79338],{"class":175},"      \u003Cp class=\"price\">\u003C\u002Fp>\n",[106,79340,79341],{"class":108,"line":16902},[106,79342,79343],{"class":175},"    \u003C\u002Fdiv> -->\n",[106,79345,79346,79348,79350],{"class":108,"line":16907},[106,79347,52411],{"class":116},[106,79349,51605],{"class":51294},[106,79351,51301],{"class":116},[106,79353,79354,79356,79358],{"class":108,"line":16920},[106,79355,52138],{"class":116},[106,79357,51807],{"class":51294},[106,79359,51301],{"class":116},[106,79361,79362],{"class":108,"line":16925},[106,79363,79364],{"class":175},"    \u002F\u002F 2. 初始化数据\n",[106,79366,79367,79369,79372,79374],{"class":108,"line":32627},[106,79368,11214],{"class":112},[106,79370,79371],{"class":165}," goodsList",[106,79373,13557],{"class":112},[106,79375,55441],{"class":116},[106,79377,79378],{"class":108,"line":32633},[106,79379,79380],{"class":116},"      {\n",[106,79382,79383,79386,79389],{"class":108,"line":32639},[106,79384,79385],{"class":116},"        id: ",[106,79387,79388],{"class":221},"'4001172'",[106,79390,31460],{"class":116},[106,79392,79393,79396,79399],{"class":108,"line":32645},[106,79394,79395],{"class":116},"        name: ",[106,79397,79398],{"class":221},"'称心如意手摇咖啡磨豆机咖啡豆研磨机'",[106,79400,31460],{"class":116},[106,79402,79403,79406,79409],{"class":108,"line":32651},[106,79404,79405],{"class":116},"        price: ",[106,79407,79408],{"class":221},"'289.00'",[106,79410,31460],{"class":116},[106,79412,79413,79416,79419],{"class":108,"line":32662},[106,79414,79415],{"class":116},"        picture: ",[106,79417,79418],{"class":221},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F84a59ff9c58a77032564e61f716846d6.jpg'",[106,79420,31460],{"class":116},[106,79422,79423],{"class":108,"line":32668},[106,79424,77886],{"class":116},[106,79426,79427],{"class":108,"line":32688},[106,79428,79380],{"class":116},[106,79430,79431,79433,79436],{"class":108,"line":32694},[106,79432,79385],{"class":116},[106,79434,79435],{"class":221},"'4001594'",[106,79437,31460],{"class":116},[106,79439,79440,79442,79445],{"class":108,"line":32705},[106,79441,79395],{"class":116},[106,79443,79444],{"class":221},"'日式黑陶功夫茶组双侧把茶具礼盒装'",[106,79446,31460],{"class":116},[106,79448,79449,79451,79454],{"class":108,"line":32711},[106,79450,79405],{"class":116},[106,79452,79453],{"class":221},"'288.00'",[106,79455,31460],{"class":116},[106,79457,79458,79460,79463],{"class":108,"line":32717},[106,79459,79415],{"class":116},[106,79461,79462],{"class":221},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F3346b7b92f9563c7a7e24c7ead883f18.jpg'",[106,79464,31460],{"class":116},[106,79466,79467],{"class":108,"line":32723},[106,79468,77886],{"class":116},[106,79470,79471],{"class":108,"line":32729},[106,79472,79380],{"class":116},[106,79474,79475,79477,79480],{"class":108,"line":32735},[106,79476,79385],{"class":116},[106,79478,79479],{"class":221},"'4001009'",[106,79481,31460],{"class":116},[106,79483,79484,79486,79489],{"class":108,"line":32741},[106,79485,79395],{"class":116},[106,79487,79488],{"class":221},"'竹制干泡茶盘正方形沥水茶台品茶盘'",[106,79490,31460],{"class":116},[106,79492,79493,79495,79498],{"class":108,"line":32747},[106,79494,79405],{"class":116},[106,79496,79497],{"class":221},"'109.00'",[106,79499,31460],{"class":116},[106,79501,79502,79504,79507],{"class":108,"line":32767},[106,79503,79415],{"class":116},[106,79505,79506],{"class":221},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F2d942d6bc94f1e230763e1a5a3b379e1.png'",[106,79508,31460],{"class":116},[106,79510,79511],{"class":108,"line":32773},[106,79512,77886],{"class":116},[106,79514,79515],{"class":108,"line":32789},[106,79516,79380],{"class":116},[106,79518,79519,79521,79524],{"class":108,"line":32795},[106,79520,79385],{"class":116},[106,79522,79523],{"class":221},"'4001874'",[106,79525,31460],{"class":116},[106,79527,79528,79530,79533],{"class":108,"line":32809},[106,79529,79395],{"class":116},[106,79531,79532],{"class":221},"'古法温酒汝瓷酒具套装白酒杯莲花温酒器'",[106,79534,31460],{"class":116},[106,79536,79537,79539,79542],{"class":108,"line":32815},[106,79538,79405],{"class":116},[106,79540,79541],{"class":221},"'488.00'",[106,79543,31460],{"class":116},[106,79545,79546,79548,79551],{"class":108,"line":32830},[106,79547,79415],{"class":116},[106,79549,79550],{"class":221},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F44e51622800e4fceb6bee8e616da85fd.png'",[106,79552,31460],{"class":116},[106,79554,79555],{"class":108,"line":32836},[106,79556,77886],{"class":116},[106,79558,79559],{"class":108,"line":32845},[106,79560,79380],{"class":116},[106,79562,79563,79565,79568],{"class":108,"line":32851},[106,79564,79385],{"class":116},[106,79566,79567],{"class":221},"'4001649'",[106,79569,31460],{"class":116},[106,79571,79572,79574,79577],{"class":108,"line":32860},[106,79573,79395],{"class":116},[106,79575,79576],{"class":221},"'大师监制龙泉青瓷茶叶罐'",[106,79578,31460],{"class":116},[106,79580,79581,79583,79586],{"class":108,"line":32866},[106,79582,79405],{"class":116},[106,79584,79585],{"class":221},"'139.00'",[106,79587,31460],{"class":116},[106,79589,79590,79592,79595],{"class":108,"line":32872},[106,79591,79415],{"class":116},[106,79593,79594],{"class":221},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F4356c9fc150753775fe56b465314f1eb.png'",[106,79596,31460],{"class":116},[106,79598,79599],{"class":108,"line":32881},[106,79600,77886],{"class":116},[106,79602,79603],{"class":108,"line":32887},[106,79604,79380],{"class":116},[106,79606,79607,79609,79612],{"class":108,"line":32898},[106,79608,79385],{"class":116},[106,79610,79611],{"class":221},"'3997185'",[106,79613,31460],{"class":116},[106,79615,79616,79618,79621],{"class":108,"line":32904},[106,79617,79395],{"class":116},[106,79619,79620],{"class":221},"'与众不同的口感汝瓷白酒杯套组1壶4杯'",[106,79622,31460],{"class":116},[106,79624,79625,79627,79630],{"class":108,"line":32923},[106,79626,79405],{"class":116},[106,79628,79629],{"class":221},"'108.00'",[106,79631,31460],{"class":116},[106,79633,79634,79636,79639],{"class":108,"line":32929},[106,79635,79415],{"class":116},[106,79637,79638],{"class":221},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8e21c794dfd3a4e8573273ddae50bce2.jpg'",[106,79640,31460],{"class":116},[106,79642,79643],{"class":108,"line":32940},[106,79644,77886],{"class":116},[106,79646,79647],{"class":108,"line":32946},[106,79648,79380],{"class":116},[106,79650,79651,79653,79656],{"class":108,"line":32966},[106,79652,79385],{"class":116},[106,79654,79655],{"class":221},"'3997403'",[106,79657,31460],{"class":116},[106,79659,79660,79662,79665],{"class":108,"line":32982},[106,79661,79395],{"class":116},[106,79663,79664],{"class":221},"'手工吹制更厚实白酒杯壶套装6壶6杯'",[106,79666,31460],{"class":116},[106,79668,79669,79671,79674],{"class":108,"line":32988},[106,79670,79405],{"class":116},[106,79672,79673],{"class":221},"'100.00'",[106,79675,31460],{"class":116},[106,79677,79678,79680,79683],{"class":108,"line":33002},[106,79679,79415],{"class":116},[106,79681,79682],{"class":221},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002Faf2371a65f60bce152a61fc22745ff3f.jpg'",[106,79684,31460],{"class":116},[106,79686,79687],{"class":108,"line":33008},[106,79688,77886],{"class":116},[106,79690,79691],{"class":108,"line":33014},[106,79692,79380],{"class":116},[106,79694,79695,79697,79700],{"class":108,"line":33025},[106,79696,79385],{"class":116},[106,79698,79699],{"class":221},"'3998274'",[106,79701,31460],{"class":116},[106,79703,79704,79706,79709],{"class":108,"line":33031},[106,79705,79395],{"class":116},[106,79707,79708],{"class":221},"'德国百年工艺高端水晶玻璃红酒杯2支装'",[106,79710,31460],{"class":116},[106,79712,79713,79715,79717],{"class":108,"line":33037},[106,79714,79405],{"class":116},[106,79716,79585],{"class":221},[106,79718,31460],{"class":116},[106,79720,79721,79723,79726],{"class":108,"line":33047},[106,79722,79415],{"class":116},[106,79724,79725],{"class":221},"'https:\u002F\u002Fyanxuan-item.nosdn.127.net\u002F8896b897b3ec6639bbd1134d66b9715c.jpg'",[106,79727,31460],{"class":116},[106,79729,79730],{"class":108,"line":33053},[106,79731,77886],{"class":116},[106,79733,79734],{"class":108,"line":33064},[106,79735,53103],{"class":116},[106,79737,79738],{"class":108,"line":33070},[106,79739,2392],{"emptyLinePlaceholder":33},[106,79741,79742],{"class":108,"line":33080},[106,79743,79744],{"class":175},"    \u002F\u002F 1.渲染函数\n",[106,79746,79747,79749,79751,79753,79755],{"class":108,"line":33085},[106,79748,70078],{"class":112},[106,79750,70081],{"class":1955},[106,79752,117],{"class":116},[106,79754,3872],{"class":5209},[106,79756,12435],{"class":116},[106,79758,79759],{"class":108,"line":33091},[106,79760,79761],{"class":175},"      \u002F\u002F 声明空字符串\n",[106,79763,79764,79767,79770,79772],{"class":108,"line":33140},[106,79765,79766],{"class":112},"      let",[106,79768,79769],{"class":116}," str ",[106,79771,162],{"class":112},[106,79773,70098],{"class":221},[106,79775,79776],{"class":108,"line":33187},[106,79777,70103],{"class":175},[106,79779,79780,79782,79785,79787,79790,79793],{"class":108,"line":33192},[106,79781,58001],{"class":116},[106,79783,79784],{"class":1955},"forEach",[106,79786,117],{"class":116},[106,79788,79789],{"class":5209},"item",[106,79791,79792],{"class":112}," =>",[106,79794,15565],{"class":116},[106,79796,79797,79799,79802,79805,79807,79810,79812,79815,79818,79820],{"class":108,"line":33198},[106,79798,61264],{"class":112},[106,79800,79801],{"class":116}," { ",[106,79803,79804],{"class":165},"name",[106,79806,12428],{"class":116},[106,79808,79809],{"class":165},"price",[106,79811,12428],{"class":116},[106,79813,79814],{"class":165},"picture",[106,79816,79817],{"class":116}," } ",[106,79819,162],{"class":112},[106,79821,79822],{"class":116}," item\n",[106,79824,79825,79828,79830],{"class":108,"line":33217},[106,79826,79827],{"class":116},"        str ",[106,79829,9470],{"class":112},[106,79831,70162],{"class":221},[106,79833,79834],{"class":108,"line":33223},[106,79835,79836],{"class":221},"          \u003Cdiv class=\"item\">\n",[106,79838,79839,79842,79844],{"class":108,"line":33243},[106,79840,79841],{"class":221},"            \u003Cimg src=\"${",[106,79843,79814],{"class":116},[106,79845,79846],{"class":221},"}\" alt=\"\">\n",[106,79848,79849,79852,79854],{"class":108,"line":33249},[106,79850,79851],{"class":221},"            \u003Cp class=\"name\">${",[106,79853,79804],{"class":116},[106,79855,79856],{"class":221},"}\u003C\u002Fp>\n",[106,79858,79859,79862,79864],{"class":108,"line":33255},[106,79860,79861],{"class":221},"            \u003Cp class=\"price\">${",[106,79863,79809],{"class":116},[106,79865,79856],{"class":221},[106,79867,79868],{"class":108,"line":33265},[106,79869,79870],{"class":221},"          \u003C\u002Fdiv>\n",[106,79872,79873],{"class":108,"line":33270},[106,79874,79875],{"class":221},"        `\n",[106,79877,79878],{"class":108,"line":33276},[106,79879,64809],{"class":116},[106,79881,79882],{"class":108,"line":33292},[106,79883,79884],{"class":175},"      \u002F\u002F 追加给List\n",[106,79886,79887,79889,79891,79893,79896,79898,79900],{"class":108,"line":33337},[106,79888,55765],{"class":116},[106,79890,54393],{"class":1955},[106,79892,117],{"class":116},[106,79894,79895],{"class":221},"'.list'",[106,79897,74243],{"class":116},[106,79899,162],{"class":112},[106,79901,73979],{"class":116},[106,79903,79904],{"class":108,"line":33343},[106,79905,2179],{"class":116},[106,79907,79908],{"class":108,"line":33349},[106,79909,79910],{"class":175},"    \u002F\u002F 页面一打开就需要渲染\n",[106,79912,79913,79916],{"class":108,"line":33355},[106,79914,79915],{"class":1955},"    render",[106,79917,79918],{"class":116},"(goodsList)\n",[106,79920,79921],{"class":108,"line":33366},[106,79922,79923],{"class":175},"    \u002F\u002F 2.过滤筛选\n",[106,79925,79926,79928,79930,79932,79935,79937,79939,79941,79943,79945,79947,79949],{"class":108,"line":33372},[106,79927,52401],{"class":116},[106,79929,54393],{"class":1955},[106,79931,117],{"class":116},[106,79933,79934],{"class":221},"'.filter'",[106,79936,30820],{"class":116},[106,79938,57807],{"class":1955},[106,79940,117],{"class":116},[106,79942,57812],{"class":221},[106,79944,12428],{"class":116},[106,79946,191],{"class":5209},[106,79948,79792],{"class":112},[106,79950,15565],{"class":116},[106,79952,79953],{"class":108,"line":33378},[106,79954,79955],{"class":175},"      \u002F\u002F 我们需要根据自定属性值来判断点击的哪个小盒子a,即需要获取e.target.dataset.index\n",[106,79957,79958,79960,79962,79965,79967,79969,79971,79973],{"class":108,"line":33384},[106,79959,58222],{"class":112},[106,79961,79801],{"class":116},[106,79963,79964],{"class":165},"tagName",[106,79966,12428],{"class":116},[106,79968,31531],{"class":165},[106,79970,79817],{"class":116},[106,79972,162],{"class":112},[106,79974,79975],{"class":116}," e.target\n",[106,79977,79978],{"class":108,"line":33402},[106,79979,79980],{"class":175},"      \u002F\u002F 判断\n",[106,79982,79983,79985,79987,79989,79991],{"class":108,"line":33416},[106,79984,54474],{"class":112},[106,79986,67028],{"class":116},[106,79988,54480],{"class":112},[106,79990,68250],{"class":221},[106,79992,12435],{"class":116},[106,79994,79995],{"class":108,"line":33425},[106,79996,79997],{"class":175},"        \u002F\u002F console.log(11)\n",[106,79999,80000],{"class":108,"line":33434},[106,80001,80002],{"class":175},"        \u002F\u002F 创建用于接收新对象的数组，这个新数组直接覆盖掉它就行，或者这边let arr=[]也可以\n",[106,80004,80005],{"class":108,"line":33443},[106,80006,80007],{"class":175},"        \u002F\u002F 这里就给goodslist就行，因为如果下边的if不执行的话，我点击全部区间就会生效，因为渲染了个空数组\n",[106,80009,80010,80012,80014,80016],{"class":108,"line":33452},[106,80011,51824],{"class":112},[106,80013,51827],{"class":116},[106,80015,162],{"class":112},[106,80017,80018],{"class":116}," goodsList\n",[106,80020,80021,80023,80026,80028,80031],{"class":108,"line":33458},[106,80022,2489],{"class":112},[106,80024,80025],{"class":116}," (dataset.index ",[106,80027,54480],{"class":112},[106,80029,80030],{"class":221}," '1'",[106,80032,12435],{"class":116},[106,80034,80035,80038,80040,80043,80046,80048,80050,80052,80055,80057,80059,80062,80064,80066,80068],{"class":108,"line":33464},[106,80036,80037],{"class":116},"          arr ",[106,80039,162],{"class":112},[106,80041,80042],{"class":116}," goodsList.",[106,80044,80045],{"class":1955},"filter",[106,80047,117],{"class":116},[106,80049,79789],{"class":5209},[106,80051,79792],{"class":112},[106,80053,80054],{"class":116}," item.price ",[106,80056,1702],{"class":112},[106,80058,4085],{"class":165},[106,80060,80061],{"class":112}," &&",[106,80063,80054],{"class":116},[106,80065,1580],{"class":112},[106,80067,5747],{"class":165},[106,80069,123],{"class":116},[106,80071,80072,80075,80077,80079,80081,80083,80086],{"class":108,"line":33472},[106,80073,80074],{"class":116},"        } ",[106,80076,1693],{"class":112},[106,80078,1696],{"class":112},[106,80080,80025],{"class":116},[106,80082,54480],{"class":112},[106,80084,80085],{"class":221}," '2'",[106,80087,12435],{"class":116},[106,80089,80090,80092,80094,80096,80098,80100,80102,80104,80106,80108,80110,80112,80114,80116,80119],{"class":108,"line":33477},[106,80091,80037],{"class":116},[106,80093,162],{"class":112},[106,80095,80042],{"class":116},[106,80097,80045],{"class":1955},[106,80099,117],{"class":116},[106,80101,79789],{"class":5209},[106,80103,79792],{"class":112},[106,80105,80054],{"class":116},[106,80107,1702],{"class":112},[106,80109,5747],{"class":165},[106,80111,80061],{"class":112},[106,80113,80054],{"class":116},[106,80115,1580],{"class":112},[106,80117,80118],{"class":165}," 300",[106,80120,123],{"class":116},[106,80122,80123,80125,80127,80129,80131,80133,80136],{"class":108,"line":33483},[106,80124,80074],{"class":116},[106,80126,1693],{"class":112},[106,80128,1696],{"class":112},[106,80130,80025],{"class":116},[106,80132,54480],{"class":112},[106,80134,80135],{"class":221}," '3'",[106,80137,12435],{"class":116},[106,80139,80140,80142,80144,80146,80148,80150,80152,80154,80156,80158,80160],{"class":108,"line":33494},[106,80141,80037],{"class":116},[106,80143,162],{"class":112},[106,80145,80042],{"class":116},[106,80147,80045],{"class":1955},[106,80149,117],{"class":116},[106,80151,79789],{"class":5209},[106,80153,79792],{"class":112},[106,80155,80054],{"class":116},[106,80157,1702],{"class":112},[106,80159,80118],{"class":165},[106,80161,123],{"class":116},[106,80163,80164],{"class":108,"line":33500},[106,80165,2521],{"class":116},[106,80167,80168],{"class":108,"line":33520},[106,80169,80170],{"class":175},"        \u002F\u002F 渲染函数\n",[106,80172,80173,80175],{"class":108,"line":33526},[106,80174,70402],{"class":1955},[106,80176,52406],{"class":116},[106,80178,80179],{"class":108,"line":33532},[106,80180,52392],{"class":116},[106,80182,80183],{"class":108,"line":33538},[106,80184,2392],{"emptyLinePlaceholder":33},[106,80186,80187],{"class":108,"line":33555},[106,80188,33455],{"class":116},[106,80190,80191,80193,80195],{"class":108,"line":33561},[106,80192,52411],{"class":116},[106,80194,51807],{"class":51294},[106,80196,51301],{"class":116},[106,80198,80199,80201,80203],{"class":108,"line":33567},[106,80200,51779],{"class":116},[106,80202,51794],{"class":51294},[106,80204,51301],{"class":116},[106,80206,80207],{"class":108,"line":33573},[106,80208,2392],{"emptyLinePlaceholder":33},[106,80210,80211,80213,80215],{"class":108,"line":33579},[106,80212,51779],{"class":116},[106,80214,50629],{"class":51294},[106,80216,51301],{"class":116},[48,80218,80220],{"id":80219},"_410-深入了解对象","4.10 深入了解对象",[77,80222,80224],{"id":80223},"_4101-创建对象","4.10.1 创建对象",[14,80226,80227],{},[23,80228],{"alt":25,"src":80229},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-253.png",[14,80231,80232],{},"这个new Object方法创建对象也是一种函数的形式进行创建的，但是这个写法是写死的，只能这样写，它是系统给我们的创造函数",[77,80234,80236],{"id":80235},"_4102-构造函数","4.10.2 构造函数",[14,80238,80239,80242],{},[266,80240,80241],{},"构造函数 ："," 是一种特殊的函数，主要用来初始化对象",[14,80244,80245,80248],{},[266,80246,80247],{},"使用场景："," 常规的 {...} 语法允许创建一个对象。比如我们创建了佩奇的对象，继续创建乔治的对象还需要重新写一 遍，此时可以通过构造函数来快速创建多个类似的对象",[97,80250,80252],{"className":50627,"code":80251,"language":50629,"meta":25,"style":25},"\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",[103,80253,80254,80262,80267,80288,80301,80313,80325,80329,80334,80361,80366,80393],{"__ignoreMap":25},[106,80255,80256,80258,80260],{"class":108,"line":109},[106,80257,1027],{"class":116},[106,80259,51807],{"class":51294},[106,80261,51301],{"class":116},[106,80263,80264],{"class":108,"line":28},[106,80265,80266],{"class":175},"\u002F\u002F例：\n",[106,80268,80269,80271,80274,80276,80278,80280,80282,80284,80286],{"class":108,"line":1172},[106,80270,54443],{"class":112},[106,80272,80273],{"class":1955}," Pig",[106,80275,117],{"class":116},[106,80277,79804],{"class":5209},[106,80279,495],{"class":116},[106,80281,70215],{"class":5209},[106,80283,495],{"class":116},[106,80285,70232],{"class":5209},[106,80287,12435],{"class":116},[106,80289,80290,80293,80296,80298],{"class":108,"line":1187},[106,80291,80292],{"class":165},"    this",[106,80294,80295],{"class":116},".name",[106,80297,162],{"class":112},[106,80299,80300],{"class":116},"name\n",[106,80302,80303,80305,80308,80310],{"class":108,"line":1193},[106,80304,80292],{"class":165},[106,80306,80307],{"class":116},".age",[106,80309,162],{"class":112},[106,80311,80312],{"class":116},"age\n",[106,80314,80315,80317,80320,80322],{"class":108,"line":1207},[106,80316,80292],{"class":165},[106,80318,80319],{"class":116},".gender",[106,80321,162],{"class":112},[106,80323,80324],{"class":116},"gender    \n",[106,80326,80327],{"class":108,"line":1213},[106,80328,1557],{"class":116},[106,80330,80331],{"class":108,"line":1304},[106,80332,80333],{"class":175},"\u002F\u002F创建佩奇对象\n",[106,80335,80336,80338,80341,80343,80345,80347,80350,80352,80354,80356,80359],{"class":108,"line":1310},[106,80337,6785],{"class":112},[106,80339,80340],{"class":165}," Peppa",[106,80342,11710],{"class":112},[106,80344,80273],{"class":1955},[106,80346,117],{"class":116},[106,80348,80349],{"class":221},"'佩奇'",[106,80351,495],{"class":116},[106,80353,461],{"class":165},[106,80355,495],{"class":116},[106,80357,80358],{"class":221},"'女'",[106,80360,123],{"class":116},[106,80362,80363],{"class":108,"line":1322},[106,80364,80365],{"class":175},"\u002F\u002F创建乔治对象\n",[106,80367,80368,80370,80373,80375,80377,80379,80382,80384,80386,80388,80391],{"class":108,"line":1604},[106,80369,6785],{"class":112},[106,80371,80372],{"class":165}," George",[106,80374,11710],{"class":112},[106,80376,80273],{"class":1955},[106,80378,117],{"class":116},[106,80380,80381],{"class":221},"'乔治'",[106,80383,495],{"class":116},[106,80385,188],{"class":165},[106,80387,495],{"class":116},[106,80389,80390],{"class":221},"'男'",[106,80392,123],{"class":116},[106,80394,80395,80397,80399],{"class":108,"line":1609},[106,80396,51779],{"class":116},[106,80398,51807],{"class":51294},[106,80400,51301],{"class":116},[14,80402,80403],{},[23,80404],{"alt":25,"src":80405},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-254.png",[14,80407,80408],{},[23,80409],{"alt":25,"src":80410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-255.png",[14,80412,80413],{},"这里非常重要的点：这里是构造函数来初始化对象， 过一会回来调用Pig，一会要new它，所以this指向的是对象，不是window，this指向的就是对象",[14,80415,80416],{},"无new就是纯函数了，有new说明这个函数是专门用于创建对象的",[14,80418,80419],{},"this.uname=uname 这里的第一uname是属性，第二个uname是形参",[14,80421,80422],{},"在利用对象字面量创建对象和new Object创建对象中都是用的是：不是=",[14,80424,80425],{},"这里用等号是因为：对象.属性=值",[14,80427,80428],{},"①利用对象字面量创建对象",[14,80430,80431],{},"const o={",[14,80433,80434],{},"name:'pink'",[14,80436,80437],{},"} ②利用new Object创建对象",[14,80439,80440],{},"const o=new Object({name:'pink'})",[14,80442,80443],{},"构造函数内部不需要写return，构造函数自动返回创建的新的对象",[14,80445,80446],{},"构造函数创建对象的执行过程：",[14,80448,80449],{},[23,80450],{"alt":25,"src":80451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-256.png",[77,80453,80455],{"id":80454},"_4103-实例成员","4.10.3 实例成员",[14,80457,80458],{},"通过构造函数创建的对象称为实例对象，实例对象中的属性和方法称为实例成员",[60,80460,80461,80464,80467],{},[63,80462,80463],{},"实例对象的属性和方法即为实例成员",[63,80465,80466],{},"为构造函数传入参数，动态创建结构相同但值不同的对象",[63,80468,80469],{},"构造函数创建的实例对象彼此独立互不影响",[77,80471,80473],{"id":80472},"_4104-静态成员","4.10.4 静态成员",[14,80475,80476],{},[23,80477],{"alt":25,"src":80478},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-257.png",[14,80480,80481],{},"静态成员有Date.now() Math.PI Math.random()",[14,80483,80484],{},"构造函数理解为一个特殊的对象，给这个对象添加的属性和方法就是静态成员",[14,80486,80487],{},"对象的属性和方法只能该对象使用，该对象方法中的this指向的就是该对象（构造函数）",[14,80489,80490],{},"function Pig(name) n {",[14,80492,80493],{},"this.name=name",[14,80495,1063],{},[14,80497,80498],{},"Pig.eyes=2",[14,80500,80501],{},"Pig.sayHai=function () { console.log(this) }",[14,80503,80504],{},"Pig.sayHai() \u002F\u002F指向就是构造函数",[14,80506,80507],{},"console.log(Pig.eyes) \u002F\u002F2",[14,80509,11325],{},[60,80511,80512,80515,80518,80521,80524],{},[63,80513,80514],{},"实例对象的属性和方法即为实例成员；实例对象相互独立，实例成员当前实例对象使用",[63,80516,80517],{},"静态成员是写在构造函数身上的，构造函数的属性和方法被称为静态成员；静态成员只能函数访问",[63,80519,80520],{},"构造函数内部的属性不是静态成员，内部是通过this.属性名=值，它是给实例对象创建的",[63,80522,80523],{},"构造函数外部创建的，构造函数名.属性名=值 是静态成员",[63,80525,80526],{},"实例对象无法访问静态成员，静态成员只依附在这个构造函数上",[14,80528,80529],{},"自己的理解：构造函数可以认为是一个升级版的函数，它就是一个对象",[77,80531,80533],{"id":80532},"_4105-内置构造函数","4.10.5 内置构造函数",[14,80535,80536],{},"内置构造函数包含：",[14,80538,80539],{},[23,80540],{"alt":25,"src":80541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-258.png",[14,80543,80544],{},[23,80545],{"alt":25,"src":80546},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-259.png",[14,80548,80549],{},"这些基本数据类型，js对他们进行了包装",[51807,80551,80552],{},"\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",[21991,80554,80556],{"id":80555},"_41051-object","4.10.5.1 Object",[14,80558,80559],{},"Object 是内置的构造函数，用于创建普通对象",[14,80561,80562],{},"平时最好还是使用字面量的形式声明对象，而不是使用Object这个这个内置函数",[97,80564,80566],{"className":50627,"code":80565,"language":50629,"meta":25,"style":25},"const user=new Object({name:'小明',age:15})\n",[103,80567,80568],{"__ignoreMap":25},[106,80569,80570],{"class":108,"line":109},[106,80571,80565],{"class":116},[14,80573,80574],{},"三个常用的静态方法：",[22903,80576,80578],{"id":80577},"_410511-objectkeys和objectvalues","4.10.5.1.1 Object.keys和Object.values",[14,80580,80581],{},"它是创建对象那个构造函数里边的静态方法，是一个静态成员，使用的时候是函数名.方法（）",[14,80583,80584],{},[23,80585],{"alt":25,"src":80586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-260.png",[14,80588,80589],{},[23,80590],{"alt":25,"src":80591},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-261.png",[97,80593,80595],{"className":53061,"code":80594,"language":53063,"meta":25,"style":25},"\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",[103,80596,80597,80605,80613,80618,80623,80628,80633,80638,80643,80651],{"__ignoreMap":25},[106,80598,80599,80601,80603],{"class":108,"line":109},[106,80600,1027],{"class":116},[106,80602,51794],{"class":51294},[106,80604,51301],{"class":116},[106,80606,80607,80609,80611],{"class":108,"line":28},[106,80608,52138],{"class":116},[106,80610,51807],{"class":51294},[106,80612,51301],{"class":116},[106,80614,80615],{"class":108,"line":1172},[106,80616,80617],{"class":116},"    const o = { name: 'pink', age: 6 }\n",[106,80619,80620],{"class":108,"line":1187},[106,80621,80622],{"class":116},"    \u002F\u002F 获得所有属性名\n",[106,80624,80625],{"class":108,"line":1193},[106,80626,80627],{"class":116},"    const arr = Object.keys(o)\n",[106,80629,80630],{"class":108,"line":1207},[106,80631,80632],{"class":116},"    console.log(arr)\n",[106,80634,80635],{"class":108,"line":1213},[106,80636,80637],{"class":116},"    \u002F\u002F 获得所有属性值\n",[106,80639,80640],{"class":108,"line":1304},[106,80641,80642],{"class":116},"    console.log(Object.values(o))\n",[106,80644,80645,80647,80649],{"class":108,"line":1310},[106,80646,52411],{"class":116},[106,80648,51807],{"class":51294},[106,80650,51301],{"class":116},[106,80652,80653,80655,80657],{"class":108,"line":1322},[106,80654,51779],{"class":116},[106,80656,51794],{"class":51294},[106,80658,51301],{"class":116},[22903,80660,80662],{"id":80661},"_410512-object-assign","4.10.5.1.2 Object. assign",[14,80664,80665],{},"Object.assign(oo,o)",[14,80667,80668],{},"后的东西添加给前 是追加",[14,80670,80671],{},[23,80672],{"alt":25,"src":80673},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-262.png",[14,80675,80676],{},[23,80677],{"alt":25,"src":80678},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-263.png",[97,80680,80682],{"className":53061,"code":80681,"language":53063,"meta":25,"style":25},"\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",[103,80683,80684,80692,80700,80704,80708,80712,80716,80720,80724,80729,80734,80739,80744,80749,80757],{"__ignoreMap":25},[106,80685,80686,80688,80690],{"class":108,"line":109},[106,80687,1027],{"class":116},[106,80689,51794],{"class":51294},[106,80691,51301],{"class":116},[106,80693,80694,80696,80698],{"class":108,"line":28},[106,80695,52138],{"class":116},[106,80697,51807],{"class":51294},[106,80699,51301],{"class":116},[106,80701,80702],{"class":108,"line":1172},[106,80703,80617],{"class":116},[106,80705,80706],{"class":108,"line":1187},[106,80707,80622],{"class":116},[106,80709,80710],{"class":108,"line":1193},[106,80711,80627],{"class":116},[106,80713,80714],{"class":108,"line":1207},[106,80715,80632],{"class":116},[106,80717,80718],{"class":108,"line":1213},[106,80719,80637],{"class":116},[106,80721,80722],{"class":108,"line":1304},[106,80723,80642],{"class":116},[106,80725,80726],{"class":108,"line":1310},[106,80727,80728],{"class":116},"    const oo = {}\n",[106,80730,80731],{"class":108,"line":1322},[106,80732,80733],{"class":116},"    Object.assign(oo, o)\n",[106,80735,80736],{"class":108,"line":1604},[106,80737,80738],{"class":116},"    console.log(oo)\n",[106,80740,80741],{"class":108,"line":1609},[106,80742,80743],{"class":116},"    Object.assign(o, { gender: '女' })\n",[106,80745,80746],{"class":108,"line":1615},[106,80747,80748],{"class":116},"    console.log(o)\n",[106,80750,80751,80753,80755],{"class":108,"line":1620},[106,80752,52411],{"class":116},[106,80754,51807],{"class":51294},[106,80756,51301],{"class":116},[106,80758,80759,80761,80763],{"class":108,"line":1634},[106,80760,51779],{"class":116},[106,80762,51794],{"class":51294},[106,80764,51301],{"class":116},[14,80766,80767],{},[23,80768],{"alt":25,"src":80769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-264.png",[21991,80771,80773],{"id":80772},"_41052-array","4.10.5.2 Array",[14,80775,80776],{},"Array 是内置的构造函数，用于创建数组",[14,80778,80779],{},"这个也是平时最好使用字面量的方式创建数组，而不是使用Array构造函数创建",[97,80781,80783],{"className":50627,"code":80782,"language":50629,"meta":25,"style":25},"const arr=new Array(3,5)\nconsole.log(arr)  \u002F\u002F[3,5]\n",[103,80784,80785,80790],{"__ignoreMap":25},[106,80786,80787],{"class":108,"line":109},[106,80788,80789],{"class":116},"const arr=new Array(3,5)\n",[106,80791,80792],{"class":108,"line":28},[106,80793,80794],{"class":116},"console.log(arr)  \u002F\u002F[3,5]\n",[14,80796,80797],{},"Array的实例方法，这个方法是实例成员",[14,80799,80800],{},[23,80801],{"alt":25,"src":80802},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-265.png",[22903,80804,80806],{"id":80805},"_410521-reduce","4.10.5.2.1 reduce",[14,80808,80809],{},[23,80810],{"alt":25,"src":80811},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-266.png",[97,80813,80815],{"className":53061,"code":80814,"language":53063,"meta":25,"style":25},"\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",[103,80816,80817,80825,80833,80838,80843,80848,80853,80857,80862,80867,80872,80876,80881,80886,80890,80895,80900,80905,80913],{"__ignoreMap":25},[106,80818,80819,80821,80823],{"class":108,"line":109},[106,80820,1027],{"class":116},[106,80822,51794],{"class":51294},[106,80824,51301],{"class":116},[106,80826,80827,80829,80831],{"class":108,"line":28},[106,80828,52138],{"class":116},[106,80830,51807],{"class":51294},[106,80832,51301],{"class":116},[106,80834,80835],{"class":108,"line":1172},[106,80836,80837],{"class":116},"    const arr = [1, 5, 8]\n",[106,80839,80840],{"class":108,"line":1187},[106,80841,80842],{"class":116},"    \u002F\u002F 1.没有初始值\n",[106,80844,80845],{"class":108,"line":1193},[106,80846,80847],{"class":116},"    const total = arr.reduce(function (prev, current) {\n",[106,80849,80850],{"class":108,"line":1207},[106,80851,80852],{"class":116},"      return prev + current\n",[106,80854,80855],{"class":108,"line":1213},[106,80856,33455],{"class":116},[106,80858,80859],{"class":108,"line":1304},[106,80860,80861],{"class":116},"    console.log(total)   \u002F\u002F14\n",[106,80863,80864],{"class":108,"line":1310},[106,80865,80866],{"class":116},"    \u002F\u002F 2.有初始值\n",[106,80868,80869],{"class":108,"line":1322},[106,80870,80871],{"class":116},"    const total1 = arr.reduce(function (prev, current) {\n",[106,80873,80874],{"class":108,"line":1604},[106,80875,80852],{"class":116},[106,80877,80878],{"class":108,"line":1609},[106,80879,80880],{"class":116},"    }, 10)\n",[106,80882,80883],{"class":108,"line":1615},[106,80884,80885],{"class":116},"    console.log(total1)  \u002F\u002F14+10=24 最后结果为24\n",[106,80887,80888],{"class":108,"line":1620},[106,80889,2392],{"emptyLinePlaceholder":33},[106,80891,80892],{"class":108,"line":1634},[106,80893,80894],{"class":116},"    \u002F\u002F 3.箭头函数写法\n",[106,80896,80897],{"class":108,"line":1639},[106,80898,80899],{"class":116},"    const total2 = arr.reduce((prev, current) => prev + current, 10)\n",[106,80901,80902],{"class":108,"line":1645},[106,80903,80904],{"class":116},"    console.log(total2)   \u002F\u002F24\n",[106,80906,80907,80909,80911],{"class":108,"line":1666},[106,80908,52411],{"class":116},[106,80910,51807],{"class":51294},[106,80912,51301],{"class":116},[106,80914,80915,80917,80919],{"class":108,"line":1671},[106,80916,51779],{"class":116},[106,80918,51794],{"class":51294},[106,80920,51301],{"class":116},[14,80922,80923],{},"执行过程：",[60,80925,80926,80929,80932],{},[63,80927,80928],{},"如果没有起始值，则上一次值以数组的第一个数组元素的值",[63,80930,80931],{},"每一次循环，把返回值给作为下一次循环的上一次值",[63,80933,80934],{},"如果有起始值，则起始值作为上一次值",[97,80936,80938],{"className":53061,"code":80937,"language":53063,"meta":25,"style":25},"\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",[103,80939,80940,80948,80956,80960,80964,80968,80972,80976,80980,80985,80990,80995,81000,81005,81009,81013,81017,81021,81025,81029,81034,81038,81043,81047,81052,81057,81061,81065,81069,81077],{"__ignoreMap":25},[106,80941,80942,80944,80946],{"class":108,"line":109},[106,80943,1027],{"class":116},[106,80945,51794],{"class":51294},[106,80947,51301],{"class":116},[106,80949,80950,80952,80954],{"class":108,"line":28},[106,80951,52138],{"class":116},[106,80953,51807],{"class":51294},[106,80955,51301],{"class":116},[106,80957,80958],{"class":108,"line":1172},[106,80959,80837],{"class":116},[106,80961,80962],{"class":108,"line":1187},[106,80963,80842],{"class":116},[106,80965,80966],{"class":108,"line":1193},[106,80967,80847],{"class":116},[106,80969,80970],{"class":108,"line":1207},[106,80971,80852],{"class":116},[106,80973,80974],{"class":108,"line":1213},[106,80975,33455],{"class":116},[106,80977,80978],{"class":108,"line":1304},[106,80979,80861],{"class":116},[106,80981,80982],{"class":108,"line":1310},[106,80983,80984],{"class":116},"    \u002F\u002F 上一次值         当前值           返回值（第一次循环）\n",[106,80986,80987],{"class":108,"line":1322},[106,80988,80989],{"class":116},"    \u002F\u002F     1              5                    6\n",[106,80991,80992],{"class":108,"line":1604},[106,80993,80994],{"class":116},"    \u002F\u002F 上一次值         当前值           返回值（第二次循环）\n",[106,80996,80997],{"class":108,"line":1609},[106,80998,80999],{"class":116},"    \u002F\u002F     6              8                    14\n",[106,81001,81002],{"class":108,"line":1615},[106,81003,81004],{"class":116},"    \u002F\u002F 无初始值时，循环次数是比数组长度小一的\n",[106,81006,81007],{"class":108,"line":1620},[106,81008,80866],{"class":116},[106,81010,81011],{"class":108,"line":1634},[106,81012,80871],{"class":116},[106,81014,81015],{"class":108,"line":1639},[106,81016,80852],{"class":116},[106,81018,81019],{"class":108,"line":1645},[106,81020,80880],{"class":116},[106,81022,81023],{"class":108,"line":1666},[106,81024,80885],{"class":116},[106,81026,81027],{"class":108,"line":1671},[106,81028,80984],{"class":116},[106,81030,81031],{"class":108,"line":1685},[106,81032,81033],{"class":116},"    \u002F\u002F     10             1                     11\n",[106,81035,81036],{"class":108,"line":1690},[106,81037,80994],{"class":116},[106,81039,81040],{"class":108,"line":1719},[106,81041,81042],{"class":116},"    \u002F\u002F     11             5                    16\n",[106,81044,81045],{"class":108,"line":1724},[106,81046,80994],{"class":116},[106,81048,81049],{"class":108,"line":1741},[106,81050,81051],{"class":116},"    \u002F\u002F     16             8                    24\n",[106,81053,81054],{"class":108,"line":1746},[106,81055,81056],{"class":116},"    \u002F\u002F 有初始值时循环次数就是数组的长度\n",[106,81058,81059],{"class":108,"line":1751},[106,81060,80894],{"class":116},[106,81062,81063],{"class":108,"line":1756},[106,81064,80899],{"class":116},[106,81066,81067],{"class":108,"line":1770},[106,81068,80904],{"class":116},[106,81070,81071,81073,81075],{"class":108,"line":1775},[106,81072,52411],{"class":116},[106,81074,51807],{"class":51294},[106,81076,51301],{"class":116},[106,81078,81079,81081,81083],{"class":108,"line":2569},[106,81080,51779],{"class":116},[106,81082,51794],{"class":51294},[106,81084,51301],{"class":116},[22903,81086,81088],{"id":81087},"_410522-员工涨薪案例","4.10.5.2.2 员工涨薪案例",[14,81090,81091],{},[23,81092],{"alt":25,"src":81093},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-267.png",[97,81095,81097],{"className":53061,"code":81096,"language":53063,"meta":25,"style":25},"\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",[103,81098,81099,81107,81115,81120,81125,81130,81135,81139,81144,81149,81154,81159,81164,81169,81173,81178,81182,81187,81195],{"__ignoreMap":25},[106,81100,81101,81103,81105],{"class":108,"line":109},[106,81102,1027],{"class":116},[106,81104,51794],{"class":51294},[106,81106,51301],{"class":116},[106,81108,81109,81111,81113],{"class":108,"line":28},[106,81110,52138],{"class":116},[106,81112,51807],{"class":51294},[106,81114,51301],{"class":116},[106,81116,81117],{"class":108,"line":1172},[106,81118,81119],{"class":116},"    const arr = [\n",[106,81121,81122],{"class":108,"line":1187},[106,81123,81124],{"class":116},"      { name: '张三', salary: 10000 },\n",[106,81126,81127],{"class":108,"line":1193},[106,81128,81129],{"class":116},"      { name: '李四', salary: 10000 },\n",[106,81131,81132],{"class":108,"line":1207},[106,81133,81134],{"class":116},"      { name: '王五', salary: 10000 }\n",[106,81136,81137],{"class":108,"line":1213},[106,81138,53103],{"class":116},[106,81140,81141],{"class":108,"line":1304},[106,81142,81143],{"class":116},"    \u002F\u002F 如果是个数组对象的话从0开始，起始值设为0，不然从数组第一个开始的话，就是加一个对象了\n",[106,81145,81146],{"class":108,"line":1310},[106,81147,81148],{"class":116},"    \u002F\u002F prev是累计值\n",[106,81150,81151],{"class":108,"line":1322},[106,81152,81153],{"class":116},"    const total = arr.reduce((prev, current) => prev + current.salary * 1.3, 0)\n",[106,81155,81156],{"class":108,"line":1604},[106,81157,81158],{"class":116},"    console.log(total)\n",[106,81160,81161],{"class":108,"line":1609},[106,81162,81163],{"class":116},"    \u002F\u002F 上一次值        当前值       返回值（第一次遍历）\n",[106,81165,81166],{"class":108,"line":1615},[106,81167,81168],{"class":116},"    \u002F\u002F    0       10000*1.3=13000       13000\n",[106,81170,81171],{"class":108,"line":1620},[106,81172,81163],{"class":116},[106,81174,81175],{"class":108,"line":1634},[106,81176,81177],{"class":116},"    \u002F\u002F  13000     10000*1.3=13000       26000\n",[106,81179,81180],{"class":108,"line":1639},[106,81181,81163],{"class":116},[106,81183,81184],{"class":108,"line":1645},[106,81185,81186],{"class":116},"    \u002F\u002F  26000     10000*1.3=13000       39000\n",[106,81188,81189,81191,81193],{"class":108,"line":1666},[106,81190,52411],{"class":116},[106,81192,51807],{"class":51294},[106,81194,51301],{"class":116},[106,81196,81197,81199,81201],{"class":108,"line":1671},[106,81198,51779],{"class":116},[106,81200,51794],{"class":51294},[106,81202,51301],{"class":116},[22903,81204,81206],{"id":81205},"_410523-array的其他方法","4.10.5.2.3 Array的其他方法",[14,81208,81209],{},[23,81210],{"alt":25,"src":81211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-268.png",[14,81213,81214],{},[23,81215],{"alt":25,"src":81216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-269.png",[60,81218,81219],{},[63,81220,81221],{},"find()",[14,81223,81224],{},"循环查找，找到第一个就ok",[14,81226,81227],{},[355,81228,81231],{"href":81229,"rel":81230},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Ffind",[23858],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Ffind",[97,81233,81235],{"className":50627,"code":81234,"language":50629,"meta":25,"style":25},"const array1 = [5, 12, 8, 130, 44]\nconst found = array1.find((element) => element > 10)\nconsole.log(found)  \u002F\u002F12\n",[103,81236,81237,81242,81247],{"__ignoreMap":25},[106,81238,81239],{"class":108,"line":109},[106,81240,81241],{"class":116},"const array1 = [5, 12, 8, 130, 44]\n",[106,81243,81244],{"class":108,"line":28},[106,81245,81246],{"class":116},"const found = array1.find((element) => element > 10)\n",[106,81248,81249],{"class":108,"line":1172},[106,81250,81251],{"class":116},"console.log(found)  \u002F\u002F12\n",[14,81253,81254,81256,81257,81262,81263,81266,81267,81269,81270,81275,81276,81278,81279,81281,81282,81284,81285],{},[103,81255,81221],{}," 方法是一个",[355,81258,81261],{"href":81259,"rel":81260},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FArray#%E8%BF%AD%E4%BB%A3%E6%96%B9%E6%B3%95",[23858],"迭代方法","。它按索引升序顺序为数组中的每个元素调用提供的 ",[103,81264,81265],{},"callbackFn"," 函数，直到 ",[103,81268,81265],{}," 返回一个",[355,81271,81274],{"href":81272,"rel":81273},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FGlossary\u002FTruthy",[23858],"真值","。然后 ",[103,81277,81221],{}," 返回该元素并停止迭代数组。如果 ",[103,81280,81265],{}," 从未返回真值，则 ",[103,81283,81221],{}," 返回 ",[103,81286,81287],{},"[undefined](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002Fundefined)",[97,81289,81291],{"className":53061,"code":81290,"language":53063,"meta":25,"style":25},"\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",[103,81292,81293,81301,81309,81314,81319,81324,81328,81333,81338,81342,81347,81352,81356,81360,81365,81370,81374,81378,81383,81388,81393,81398,81403,81407,81412,81417,81422,81427,81431,81436,81444],{"__ignoreMap":25},[106,81294,81295,81297,81299],{"class":108,"line":109},[106,81296,1027],{"class":116},[106,81298,51794],{"class":51294},[106,81300,51301],{"class":116},[106,81302,81303,81305,81307],{"class":108,"line":28},[106,81304,52138],{"class":116},[106,81306,51807],{"class":51294},[106,81308,51301],{"class":116},[106,81310,81311],{"class":108,"line":1172},[106,81312,81313],{"class":116},"    const arr = ['red', 'blue', 'green']\n",[106,81315,81316],{"class":108,"line":1187},[106,81317,81318],{"class":116},"    const found = arr.find(item => item === 'pink')\n",[106,81320,81321],{"class":108,"line":1193},[106,81322,81323],{"class":116},"    console.log(found)   \u002F\u002F没有，输出undefined\n",[106,81325,81326],{"class":108,"line":1207},[106,81327,2392],{"emptyLinePlaceholder":33},[106,81329,81330],{"class":108,"line":1213},[106,81331,81332],{"class":116},"    \u002F\u002F 使用场景，用于查找数据\n",[106,81334,81335],{"class":108,"line":1304},[106,81336,81337],{"class":116},"    const arr1 = [\n",[106,81339,81340],{"class":108,"line":1310},[106,81341,79380],{"class":116},[106,81343,81344],{"class":108,"line":1322},[106,81345,81346],{"class":116},"        name: '小米',\n",[106,81348,81349],{"class":108,"line":1604},[106,81350,81351],{"class":116},"        price: 1999\n",[106,81353,81354],{"class":108,"line":1609},[106,81355,77886],{"class":116},[106,81357,81358],{"class":108,"line":1615},[106,81359,79380],{"class":116},[106,81361,81362],{"class":108,"line":1620},[106,81363,81364],{"class":116},"        name: '华为',\n",[106,81366,81367],{"class":108,"line":1634},[106,81368,81369],{"class":116},"        price: 3999\n",[106,81371,81372],{"class":108,"line":1639},[106,81373,52392],{"class":116},[106,81375,81376],{"class":108,"line":1645},[106,81377,53103],{"class":116},[106,81379,81380],{"class":108,"line":1666},[106,81381,81382],{"class":116},"    \u002F\u002F 这小米这个对象，并且返回这个对象\n",[106,81384,81385],{"class":108,"line":1671},[106,81386,81387],{"class":116},"    \u002F\u002F const found1 = arr1.find(item => {\n",[106,81389,81390],{"class":108,"line":1685},[106,81391,81392],{"class":116},"    \u002F\u002F   if (item.name === '小米') {\n",[106,81394,81395],{"class":108,"line":1690},[106,81396,81397],{"class":116},"    \u002F\u002F     return item\n",[106,81399,81400],{"class":108,"line":1719},[106,81401,81402],{"class":116},"    \u002F\u002F   }\n",[106,81404,81405],{"class":108,"line":1724},[106,81406,63284],{"class":116},[106,81408,81409],{"class":108,"line":1741},[106,81410,81411],{"class":116},"    \u002F\u002F 另一种写法\n",[106,81413,81414],{"class":108,"line":1746},[106,81415,81416],{"class":116},"    const found1 = arr1.find(item => {\n",[106,81418,81419],{"class":108,"line":1751},[106,81420,81421],{"class":116},"      \u002F\u002F 这个return是为了在找到小米之后退出函数，但是这个函数返回的是包含小米的这个对象\n",[106,81423,81424],{"class":108,"line":1756},[106,81425,81426],{"class":116},"      return item.name = '小米'\n",[106,81428,81429],{"class":108,"line":1770},[106,81430,33455],{"class":116},[106,81432,81433],{"class":108,"line":1775},[106,81434,81435],{"class":116},"    console.log(found1)\n",[106,81437,81438,81440,81442],{"class":108,"line":2569},[106,81439,52411],{"class":116},[106,81441,51807],{"class":51294},[106,81443,51301],{"class":116},[106,81445,81446,81448,81450],{"class":108,"line":2583},[106,81447,51779],{"class":116},[106,81449,51794],{"class":51294},[106,81451,51301],{"class":116},[14,81453,81454],{},[23,81455],{"alt":25,"src":81456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-270.png",[14,81458,81459],{},"上面还可以进一步的省略，写为：const found1 = arr1.find(item => item.name === '小米')",[60,81461,81462],{"start":28},[63,81463,81464],{},"every()返回的是布尔值",[14,81466,81467],{},[355,81468,81471],{"href":81469,"rel":81470},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal%5C_Objects\u002FArray\u002Fevery",[23858],"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal\\_Objects\u002FArray\u002Fevery",[14,81473,81474],{},"filter是筛选之后返回的是数组，every()返回的是筛选后的布尔值",[14,81476,81477],{},"some是只有有一个就没问题",[14,81479,81480],{},"every是必须全是才行",[97,81482,81486],{"className":81483,"code":81484,"language":81485,"meta":25,"style":25},"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",[103,81487,81488,81504,81518,81522,81531],{"__ignoreMap":25},[106,81489,81490,81492,81495,81497,81499,81502],{"class":108,"line":109},[106,81491,54443],{"class":112},[106,81493,81494],{"class":116}," isBigEnough(element, ",[106,81496,74052],{"class":112},[106,81498,12428],{"class":116},[106,81500,81501],{"class":112},"array",[106,81503,12435],{"class":116},[106,81505,81506,81509,81512,81514,81516],{"class":108,"line":28},[106,81507,81508],{"class":112},"  return",[106,81510,81511],{"class":116}," element ",[106,81513,1702],{"class":112},[106,81515,2030],{"class":165},[106,81517,1283],{"class":116},[106,81519,81520],{"class":108,"line":1172},[106,81521,1557],{"class":116},[106,81523,81524,81527,81529],{"class":108,"line":1187},[106,81525,81526],{"class":116},"[12, 5, 8, 130, 44].every(isBigEnough); ",[106,81528,33323],{"class":112},[106,81530,54510],{"class":116},[106,81532,81533,81536,81538],{"class":108,"line":1193},[106,81534,81535],{"class":116},"[12, 54, 18, 130, 44].every(isBigEnough); ",[106,81537,33323],{"class":112},[106,81539,57934],{"class":116},[97,81541,81543],{"className":53061,"code":81542,"language":53063,"meta":25,"style":25},"\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",[103,81544,81545,81553,81561,81566,81570,81575,81580,81588],{"__ignoreMap":25},[106,81546,81547,81549,81551],{"class":108,"line":109},[106,81548,1027],{"class":116},[106,81550,51794],{"class":51294},[106,81552,51301],{"class":116},[106,81554,81555,81557,81559],{"class":108,"line":28},[106,81556,52138],{"class":116},[106,81558,51807],{"class":51294},[106,81560,51301],{"class":116},[106,81562,81563],{"class":108,"line":1172},[106,81564,81565],{"class":116},"    \u002F\u002F every 每个是否都符合条件，如果都符合返回true，否则返回false\n",[106,81567,81568],{"class":108,"line":1187},[106,81569,78316],{"class":116},[106,81571,81572],{"class":108,"line":1193},[106,81573,81574],{"class":116},"    const flag = arr.every(item => item >= 10)\n",[106,81576,81577],{"class":108,"line":1207},[106,81578,81579],{"class":116},"    console.log(flag)    \u002F\u002Ftrue\n",[106,81581,81582,81584,81586],{"class":108,"line":1213},[106,81583,52411],{"class":116},[106,81585,51807],{"class":51294},[106,81587,51301],{"class":116},[106,81589,81590,81592,81594],{"class":108,"line":1304},[106,81591,51779],{"class":116},[106,81593,51794],{"class":51294},[106,81595,51301],{"class":116},[97,81597,81599],{"className":53061,"code":81598,"language":53063,"meta":25,"style":25},"\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",[103,81600,81601,81609,81617,81621,81626,81631,81636,81644],{"__ignoreMap":25},[106,81602,81603,81605,81607],{"class":108,"line":109},[106,81604,1027],{"class":116},[106,81606,51794],{"class":51294},[106,81608,51301],{"class":116},[106,81610,81611,81613,81615],{"class":108,"line":28},[106,81612,52138],{"class":116},[106,81614,51807],{"class":51294},[106,81616,51301],{"class":116},[106,81618,81619],{"class":108,"line":1172},[106,81620,81565],{"class":116},[106,81622,81623],{"class":108,"line":1187},[106,81624,81625],{"class":116},"    const arr = [10, 0, 5]\n",[106,81627,81628],{"class":108,"line":1193},[106,81629,81630],{"class":116},"    const flag = arr.some(item => item >= 10)\n",[106,81632,81633],{"class":108,"line":1207},[106,81634,81635],{"class":116},"    console.log(flag)   \u002F\u002Ftrue\n",[106,81637,81638,81640,81642],{"class":108,"line":1213},[106,81639,52411],{"class":116},[106,81641,51807],{"class":51294},[106,81643,51301],{"class":116},[106,81645,81646,81648,81650],{"class":108,"line":1304},[106,81647,51779],{"class":116},[106,81649,51794],{"class":51294},[106,81651,51301],{"class":116},[22903,81653,81655],{"id":81654},"_410524-处理数据案例","4.10.5.2.4 处理数据案例",[14,81657,81658],{},[23,81659],{"alt":25,"src":81660},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-271.png",[97,81662,81664],{"className":50627,"code":81663,"language":50629,"meta":25,"style":25},"\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",[103,81665,81666,81676,81690,81694,81702,81716,81736,81748,81756,81763,81775,81787,81799,81811,81821,81831,81835,81843,81851,81855,81863,81875,81883,81905,81910,81915,81948,81956,81964,81968],{"__ignoreMap":25},[106,81667,81668,81670,81672,81674],{"class":108,"line":109},[106,81669,51291],{"class":116},[106,81671,51295],{"class":51294},[106,81673,51298],{"class":1955},[106,81675,51301],{"class":116},[106,81677,81678,81680,81682,81684,81686,81688],{"class":108,"line":28},[106,81679,1027],{"class":116},[106,81681,50629],{"class":51294},[106,81683,51310],{"class":1955},[106,81685,162],{"class":116},[106,81687,51315],{"class":221},[106,81689,51301],{"class":116},[106,81691,81692],{"class":108,"line":1172},[106,81693,2392],{"emptyLinePlaceholder":33},[106,81695,81696,81698,81700],{"class":108,"line":1187},[106,81697,1027],{"class":116},[106,81699,51328],{"class":51294},[106,81701,51301],{"class":116},[106,81703,81704,81706,81708,81710,81712,81714],{"class":108,"line":1193},[106,81705,52138],{"class":116},[106,81707,51338],{"class":51294},[106,81709,51341],{"class":1955},[106,81711,162],{"class":116},[106,81713,51346],{"class":221},[106,81715,51301],{"class":116},[106,81717,81718,81720,81722,81724,81726,81728,81730,81732,81734],{"class":108,"line":1207},[106,81719,52138],{"class":116},[106,81721,51338],{"class":51294},[106,81723,14913],{"class":1955},[106,81725,162],{"class":116},[106,81727,51385],{"class":221},[106,81729,51365],{"class":1955},[106,81731,162],{"class":116},[106,81733,51392],{"class":221},[106,81735,51301],{"class":116},[106,81737,81738,81740,81742,81744,81746],{"class":108,"line":1213},[106,81739,52138],{"class":116},[106,81741,51401],{"class":51294},[106,81743,51404],{"class":116},[106,81745,51401],{"class":51294},[106,81747,51301],{"class":116},[106,81749,81750,81752,81754],{"class":108,"line":1304},[106,81751,52138],{"class":116},[106,81753,5119],{"class":51294},[106,81755,51301],{"class":116},[106,81757,81758,81761],{"class":108,"line":1310},[106,81759,81760],{"class":51294},"    div",[106,81762,15565],{"class":116},[106,81764,81765,81767,81769,81771,81773],{"class":108,"line":1322},[106,81766,54765],{"class":165},[106,81768,51431],{"class":116},[106,81770,1714],{"class":165},[106,81772,51486],{"class":112},[106,81774,1283],{"class":116},[106,81776,81777,81779,81781,81783,81785],{"class":108,"line":1604},[106,81778,54779],{"class":165},[106,81780,51431],{"class":116},[106,81782,518],{"class":165},[106,81784,51486],{"class":112},[106,81786,1283],{"class":116},[106,81788,81789,81791,81793,81795,81797],{"class":108,"line":1609},[106,81790,57353],{"class":165},[106,81792,51431],{"class":116},[106,81794,518],{"class":165},[106,81796,51486],{"class":112},[106,81798,1283],{"class":116},[106,81800,81801,81803,81805,81807,81809],{"class":108,"line":1615},[106,81802,65127],{"class":165},[106,81804,51431],{"class":116},[106,81806,615],{"class":165},[106,81808,51486],{"class":112},[106,81810,1283],{"class":116},[106,81812,81813,81815,81817,81819],{"class":108,"line":1620},[106,81814,57280],{"class":165},[106,81816,51431],{"class":116},[106,81818,51586],{"class":165},[106,81820,1283],{"class":116},[106,81822,81823,81825,81827,81829],{"class":108,"line":1634},[106,81824,54878],{"class":165},[106,81826,51431],{"class":116},[106,81828,51639],{"class":165},[106,81830,1283],{"class":116},[106,81832,81833],{"class":108,"line":1639},[106,81834,2179],{"class":116},[106,81836,81837,81839,81841],{"class":108,"line":1645},[106,81838,52411],{"class":116},[106,81840,5119],{"class":51294},[106,81842,51301],{"class":116},[106,81844,81845,81847,81849],{"class":108,"line":1666},[106,81846,51779],{"class":116},[106,81848,51328],{"class":51294},[106,81850,51301],{"class":116},[106,81852,81853],{"class":108,"line":1671},[106,81854,2392],{"emptyLinePlaceholder":33},[106,81856,81857,81859,81861],{"class":108,"line":1685},[106,81858,1027],{"class":116},[106,81860,51794],{"class":51294},[106,81862,51301],{"class":116},[106,81864,81865,81867,81869,81871,81873],{"class":108,"line":1690},[106,81866,52138],{"class":116},[106,81868,51605],{"class":51294},[106,81870,55308],{"class":116},[106,81872,51605],{"class":51294},[106,81874,51301],{"class":116},[106,81876,81877,81879,81881],{"class":108,"line":1719},[106,81878,52138],{"class":116},[106,81880,51807],{"class":51294},[106,81882,51301],{"class":116},[106,81884,81885,81887,81890,81892,81895,81898,81900,81903],{"class":108,"line":1724},[106,81886,11214],{"class":112},[106,81888,81889],{"class":165}," spec",[106,81891,13557],{"class":112},[106,81893,81894],{"class":116}," { size: ",[106,81896,81897],{"class":221},"'40cm*40cm'",[106,81899,55458],{"class":116},[106,81901,81902],{"class":221},"'黑色'",[106,81904,55598],{"class":116},[106,81906,81907],{"class":108,"line":1741},[106,81908,81909],{"class":175},"    \u002F\u002F const arr = Object.values(spec)\n",[106,81911,81912],{"class":108,"line":1746},[106,81913,81914],{"class":175},"    \u002F\u002F document.querySelector('div').innerHTML = arr.join('\u002F')\n",[106,81916,81917,81919,81921,81923,81926,81928,81930,81933,81936,81939,81941,81943,81946],{"class":108,"line":1751},[106,81918,52401],{"class":116},[106,81920,54393],{"class":1955},[106,81922,117],{"class":116},[106,81924,81925],{"class":221},"'div'",[106,81927,74243],{"class":116},[106,81929,162],{"class":112},[106,81931,81932],{"class":116}," Object.",[106,81934,81935],{"class":1955},"values",[106,81937,81938],{"class":116},"(spec).",[106,81940,74217],{"class":1955},[106,81942,117],{"class":116},[106,81944,81945],{"class":221},"'\u002F'",[106,81947,123],{"class":116},[106,81949,81950,81952,81954],{"class":108,"line":1756},[106,81951,52411],{"class":116},[106,81953,51807],{"class":51294},[106,81955,51301],{"class":116},[106,81957,81958,81960,81962],{"class":108,"line":1770},[106,81959,51779],{"class":116},[106,81961,51794],{"class":51294},[106,81963,51301],{"class":116},[106,81965,81966],{"class":108,"line":1775},[106,81967,2392],{"emptyLinePlaceholder":33},[106,81969,81970,81972,81974],{"class":108,"line":2569},[106,81971,51779],{"class":116},[106,81973,50629],{"class":51294},[106,81975,51301],{"class":116},[14,81977,81978],{},"一定要记住Object是内置构造函数，他的那三个方法都是静态方法",[22903,81980,81982],{"id":81981},"_410525-arrayfrom方法","4.10.5.2.5 Array.from()方法",[14,81984,81985],{},"静态方法，将伪数组转换为真数组",[14,81987,81988],{},[23,81989],{"alt":25,"src":81990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-272.png",[97,81992,81994],{"className":53061,"code":81993,"language":53063,"meta":25,"style":25},"\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",[103,81995,81996,82004,82012,82024,82036,82048,82056,82064,82069,82074,82079,82084,82092],{"__ignoreMap":25},[106,81997,81998,82000,82002],{"class":108,"line":109},[106,81999,1027],{"class":116},[106,82001,51794],{"class":51294},[106,82003,51301],{"class":116},[106,82005,82006,82008,82010],{"class":108,"line":28},[106,82007,52138],{"class":116},[106,82009,1124],{"class":51294},[106,82011,51301],{"class":116},[106,82013,82014,82016,82018,82020,82022],{"class":108,"line":1172},[106,82015,51335],{"class":116},[106,82017,63],{"class":51294},[106,82019,55308],{"class":116},[106,82021,63],{"class":51294},[106,82023,51301],{"class":116},[106,82025,82026,82028,82030,82032,82034],{"class":108,"line":1187},[106,82027,51335],{"class":116},[106,82029,63],{"class":51294},[106,82031,55308],{"class":116},[106,82033,63],{"class":51294},[106,82035,51301],{"class":116},[106,82037,82038,82040,82042,82044,82046],{"class":108,"line":1193},[106,82039,51335],{"class":116},[106,82041,63],{"class":51294},[106,82043,55308],{"class":116},[106,82045,63],{"class":51294},[106,82047,51301],{"class":116},[106,82049,82050,82052,82054],{"class":108,"line":1207},[106,82051,52411],{"class":116},[106,82053,1124],{"class":51294},[106,82055,51301],{"class":116},[106,82057,82058,82060,82062],{"class":108,"line":1213},[106,82059,52138],{"class":116},[106,82061,51807],{"class":51294},[106,82063,51301],{"class":116},[106,82065,82066],{"class":108,"line":1304},[106,82067,82068],{"class":116},"    const lis = document.querySelectorAll('li')\n",[106,82070,82071],{"class":108,"line":1310},[106,82072,82073],{"class":116},"    const liss = Array.from(lis)\n",[106,82075,82076],{"class":108,"line":1322},[106,82077,82078],{"class":116},"    liss.pop()\n",[106,82080,82081],{"class":108,"line":1604},[106,82082,82083],{"class":116},"    console.log(liss)\n",[106,82085,82086,82088,82090],{"class":108,"line":1609},[106,82087,52411],{"class":116},[106,82089,51807],{"class":51294},[106,82091,51301],{"class":116},[106,82093,82094,82096,82098],{"class":108,"line":1615},[106,82095,51779],{"class":116},[106,82097,51794],{"class":51294},[106,82099,51301],{"class":116},[14,82101,82102],{},[23,82103],{"alt":25,"src":82104},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-273.png",[21991,82106,82108],{"id":82107},"_41053-string","4.10.5.3 String",[14,82110,82111],{},[23,82112],{"alt":25,"src":82113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-274.png",[22903,82115,82117],{"id":82116},"_410531-split字符串变数组","4.10.5.3.1 split()字符串变数组",[97,82119,82121],{"className":53061,"code":82120,"language":53063,"meta":25,"style":25},"\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",[103,82122,82123,82131,82139,82144,82149,82154,82158,82163,82168,82173,82181],{"__ignoreMap":25},[106,82124,82125,82127,82129],{"class":108,"line":109},[106,82126,1027],{"class":116},[106,82128,51794],{"class":51294},[106,82130,51301],{"class":116},[106,82132,82133,82135,82137],{"class":108,"line":28},[106,82134,52138],{"class":116},[106,82136,51807],{"class":51294},[106,82138,51301],{"class":116},[106,82140,82141],{"class":108,"line":1172},[106,82142,82143],{"class":116},"    \u002F\u002F 把字符串转化为数组\n",[106,82145,82146],{"class":108,"line":1187},[106,82147,82148],{"class":116},"    const str = 'pink,red'\n",[106,82150,82151],{"class":108,"line":1193},[106,82152,82153],{"class":116},"    const arr = str.split(',')\n",[106,82155,82156],{"class":108,"line":1207},[106,82157,80632],{"class":116},[106,82159,82160],{"class":108,"line":1213},[106,82161,82162],{"class":116},"    const str1 = '2025-8-25'\n",[106,82164,82165],{"class":108,"line":1304},[106,82166,82167],{"class":116},"    const arr1 = str1.split('-')\n",[106,82169,82170],{"class":108,"line":1310},[106,82171,82172],{"class":116},"    console.log(arr1)\n",[106,82174,82175,82177,82179],{"class":108,"line":1322},[106,82176,52411],{"class":116},[106,82178,51807],{"class":51294},[106,82180,51301],{"class":116},[106,82182,82183,82185,82187],{"class":108,"line":1604},[106,82184,51779],{"class":116},[106,82186,51794],{"class":51294},[106,82188,51301],{"class":116},[22903,82190,82192],{"id":82191},"_410532-字符串的截取","4.10.5.3.2 字符串的截取",[14,82194,5174],{},[14,82196,82197],{},"substring(indexStart)",[14,82199,82200],{},"substring(indexStart, indexEnd)",[1124,82202,82203,82214,82226,82236],{},[63,82204,82205,82206,82209,82210,82213],{},"如果省略了 ",[103,82207,82208],{},"indexEnd","，则 ",[103,82211,82212],{},"substring()"," 提取字符直到字符串的末尾",[63,82215,82216,82217,82220,82221,82209,82223,82225],{},"如果 ",[103,82218,82219],{},"indexStart"," 等于 ",[103,82222,82208],{},[103,82224,82212],{}," 返回一个空字符串",[63,82227,82216,82228,82230,82231,82209,82233,82235],{},[103,82229,82219],{}," 大于 ",[103,82232,82208],{},[103,82234,82212],{}," 的效果就像交换了这两个参数一样",[63,82237,82238],{},"结束的索引号不包含想要截取的部分",[97,82240,82242],{"className":81483,"code":82241,"language":81485,"meta":25,"style":25},"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",[103,82243,82244,82256,82260,82294,82324,82328,82359,82363,82390,82420,82450,82454,82485],{"__ignoreMap":25},[106,82245,82246,82249,82251,82254],{"class":108,"line":109},[106,82247,82248],{"class":116},"const anyString ",[106,82250,162],{"class":112},[106,82252,82253],{"class":221}," \"Mozilla\"",[106,82255,1283],{"class":116},[106,82257,82258],{"class":108,"line":28},[106,82259,2392],{"emptyLinePlaceholder":33},[106,82261,82262,82265,82267,82269,82271,82274,82276,82279,82281,82283,82285,82287,82289,82291],{"class":108,"line":1172},[106,82263,82264],{"class":165},"console",[106,82266,675],{"class":116},[106,82268,58241],{"class":165},[106,82270,117],{"class":116},[106,82272,82273],{"class":165},"anyString",[106,82275,675],{"class":116},[106,82277,82278],{"class":165},"substring",[106,82280,117],{"class":116},[106,82282,308],{"class":165},[106,82284,12428],{"class":116},[106,82286,334],{"class":165},[106,82288,75247],{"class":116},[106,82290,33323],{"class":112},[106,82292,82293],{"class":221}," 'M'\n",[106,82295,82296,82298,82300,82302,82304,82306,82308,82310,82312,82314,82316,82318,82320,82322],{"class":108,"line":1187},[106,82297,82264],{"class":165},[106,82299,675],{"class":116},[106,82301,58241],{"class":165},[106,82303,117],{"class":116},[106,82305,82273],{"class":165},[106,82307,675],{"class":116},[106,82309,82278],{"class":165},[106,82311,117],{"class":116},[106,82313,334],{"class":165},[106,82315,12428],{"class":116},[106,82317,308],{"class":165},[106,82319,75247],{"class":116},[106,82321,33323],{"class":112},[106,82323,82293],{"class":221},[106,82325,82326],{"class":108,"line":1193},[106,82327,2392],{"emptyLinePlaceholder":33},[106,82329,82330,82332,82334,82336,82338,82340,82342,82344,82346,82348,82350,82352,82354,82356],{"class":108,"line":1207},[106,82331,82264],{"class":165},[106,82333,675],{"class":116},[106,82335,58241],{"class":165},[106,82337,117],{"class":116},[106,82339,82273],{"class":165},[106,82341,675],{"class":116},[106,82343,82278],{"class":165},[106,82345,117],{"class":116},[106,82347,308],{"class":165},[106,82349,12428],{"class":116},[106,82351,461],{"class":165},[106,82353,75247],{"class":116},[106,82355,33323],{"class":112},[106,82357,82358],{"class":221}," 'Mozill'\n",[106,82360,82361],{"class":108,"line":1213},[106,82362,2392],{"emptyLinePlaceholder":33},[106,82364,82365,82367,82369,82371,82373,82375,82377,82379,82381,82383,82385,82387],{"class":108,"line":1304},[106,82366,82264],{"class":165},[106,82368,675],{"class":116},[106,82370,58241],{"class":165},[106,82372,117],{"class":116},[106,82374,82273],{"class":165},[106,82376,675],{"class":116},[106,82378,82278],{"class":165},[106,82380,117],{"class":116},[106,82382,410],{"class":165},[106,82384,75247],{"class":116},[106,82386,33323],{"class":112},[106,82388,82389],{"class":221}," 'lla'\n",[106,82391,82392,82394,82396,82398,82400,82402,82404,82406,82408,82410,82412,82414,82416,82418],{"class":108,"line":1310},[106,82393,82264],{"class":165},[106,82395,675],{"class":116},[106,82397,58241],{"class":165},[106,82399,117],{"class":116},[106,82401,82273],{"class":165},[106,82403,675],{"class":116},[106,82405,82278],{"class":165},[106,82407,117],{"class":116},[106,82409,410],{"class":165},[106,82411,12428],{"class":116},[106,82413,486],{"class":165},[106,82415,75303],{"class":116},[106,82417,33323],{"class":112},[106,82419,82389],{"class":221},[106,82421,82422,82424,82426,82428,82430,82432,82434,82436,82438,82440,82442,82444,82446,82448],{"class":108,"line":1322},[106,82423,82264],{"class":165},[106,82425,675],{"class":116},[106,82427,58241],{"class":165},[106,82429,117],{"class":116},[106,82431,82273],{"class":165},[106,82433,675],{"class":116},[106,82435,82278],{"class":165},[106,82437,117],{"class":116},[106,82439,486],{"class":165},[106,82441,12428],{"class":116},[106,82443,410],{"class":165},[106,82445,75247],{"class":116},[106,82447,33323],{"class":112},[106,82449,82389],{"class":221},[106,82451,82452],{"class":108,"line":1604},[106,82453,2392],{"emptyLinePlaceholder":33},[106,82455,82456,82458,82460,82462,82464,82466,82468,82470,82472,82474,82476,82478,82480,82482],{"class":108,"line":1609},[106,82457,82264],{"class":165},[106,82459,675],{"class":116},[106,82461,58241],{"class":165},[106,82463,117],{"class":116},[106,82465,82273],{"class":165},[106,82467,675],{"class":116},[106,82469,82278],{"class":165},[106,82471,117],{"class":116},[106,82473,308],{"class":165},[106,82475,12428],{"class":116},[106,82477,486],{"class":165},[106,82479,75247],{"class":116},[106,82481,33323],{"class":112},[106,82483,82484],{"class":221}," 'Mozilla'\n",[106,82486,82487,82489,82491,82493,82495,82497,82499,82501,82503,82505,82507,82509,82511,82513],{"class":108,"line":1615},[106,82488,82264],{"class":165},[106,82490,675],{"class":116},[106,82492,58241],{"class":165},[106,82494,117],{"class":116},[106,82496,82273],{"class":165},[106,82498,675],{"class":116},[106,82500,82278],{"class":165},[106,82502,117],{"class":116},[106,82504,308],{"class":165},[106,82506,12428],{"class":116},[106,82508,563],{"class":165},[106,82510,75247],{"class":116},[106,82512,33323],{"class":112},[106,82514,82484],{"class":221},[22903,82516,82518],{"id":82517},"_410533-startswith","4.10.5.3.3 startsWith",[14,82520,82521,82524,82525,82530,82531,82533,82534],{},[103,82522,82523],{},"[String](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString)"," 的 ",[266,82526,82527],{},[103,82528,82529],{},"startsWith()"," 方法用来判断当前字符串是否以另外一个给定的子字符串开头，并根据判断结果返回 ",[103,82532,1355],{}," 或 ",[103,82535,66014],{},[97,82537,82539],{"className":77489,"code":82538,"language":77491,"meta":25,"style":25},"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",[103,82540,82541,82553,82572,82577,82597],{"__ignoreMap":25},[106,82542,82543,82545,82548,82550],{"class":108,"line":109},[106,82544,6785],{"class":112},[106,82546,82547],{"class":116}," str1 ",[106,82549,162],{"class":112},[106,82551,82552],{"class":221}," \"Saturday night plans\"\n",[106,82554,82555,82557,82559,82562,82565,82567,82570],{"class":108,"line":28},[106,82556,77526],{"class":116},[106,82558,58241],{"class":1955},[106,82560,82561],{"class":116},"(str1.",[106,82563,82564],{"class":1955},"startsWith",[106,82566,117],{"class":116},[106,82568,82569],{"class":221},"\"Sat\"",[106,82571,30491],{"class":116},[106,82573,82574],{"class":108,"line":1172},[106,82575,82576],{"class":175},"\u002F\u002F Expected output: true\n",[106,82578,82579,82581,82583,82585,82587,82589,82591,82593,82595],{"class":108,"line":1187},[106,82580,77526],{"class":116},[106,82582,58241],{"class":1955},[106,82584,82561],{"class":116},[106,82586,82564],{"class":1955},[106,82588,117],{"class":116},[106,82590,82569],{"class":221},[106,82592,12428],{"class":116},[106,82594,188],{"class":165},[106,82596,30491],{"class":116},[106,82598,82599],{"class":108,"line":1193},[106,82600,82601],{"class":175},"\u002F\u002F Expected output: false\n",[97,82603,82605],{"className":50627,"code":82604,"language":50629,"meta":25,"style":25},"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",[103,82606,82607,82612,82617,82621,82626,82631],{"__ignoreMap":25},[106,82608,82609],{"class":108,"line":109},[106,82610,82611],{"class":116},"startsWith(searchString)\n",[106,82613,82614],{"class":108,"line":28},[106,82615,82616],{"class":116},"startsWith(searchString, position)       position指的是第一个字符的索引，默认为0\n",[106,82618,82619],{"class":108,"line":1172},[106,82620,2392],{"emptyLinePlaceholder":33},[106,82622,82623],{"class":108,"line":1187},[106,82624,82625],{"class":116},"const str3 = 'pink老师上课中'\n",[106,82627,82628],{"class":108,"line":1193},[106,82629,82630],{"class":116},"console.log(str3.startsWith('pink'))   \u002F\u002Ftrue\n",[106,82632,82633],{"class":108,"line":1207},[106,82634,82635],{"class":116},"console.log(str3.startsWith('p'))   \u002F\u002Ftrue\n",[22903,82637,82639],{"id":82638},"_410534-includes","4.10.5.3.4 includes",[14,82641,82642],{},"includes(searchString) includes(searchString, position)",[60,82644,82645],{},[63,82646,82647],{},"searchString:",[14,82649,82650,82651,82653,82654,82659,82660,82665,82666,21493,82669,82672,82673,82676],{},"一个要在 ",[103,82652,1292],{}," 中查找的字符串。",[355,82655,82658],{"href":82656,"rel":82657},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FRegExp#%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E7%89%B9%E6%AE%8A%E5%A4%84%E7%90%86",[23858],"不能是正则表达式","。所有非正则表达式的值都会被",[355,82661,82664],{"href":82662,"rel":82663},"https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString#%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%BC%BA%E5%88%B6%E8%BD%AC%E6%8D%A2",[23858],"强制转换为字符串","，因此如果该参数被省略或传入 ",[103,82667,82668],{},"undefined",[103,82670,82671],{},"includes()"," 方法会在字符串中搜索 ",[103,82674,82675],{},"\"undefined\"","，这通常不是你想要的",[60,82678,82679],{"start":28},[63,82680,82681,976],{},[103,82682,82683],{},"[position 可选](https:\u002F\u002Fdeveloper.mozilla.org\u002Fzh-CN\u002Fdocs\u002FWeb\u002FJavaScript\u002FReference\u002FGlobal_Objects\u002FString\u002Fincludes#position)",[14,82685,82686,82687,82690,82691],{},"在字符串中开始搜索 ",[103,82688,82689],{},"searchString"," 的位置。默认值为 ",[103,82692,308],{},[60,82694,82695],{"start":1172},[63,82696,82697],{},"返回值：",[14,82699,82700,82701,82703,82704,82708,82709],{},"如果在给定的字符串中找到了要搜索的字符串（包括 ",[103,82702,82689],{}," 为空字符串的情况），则返回 ",[266,82705,82706],{},[103,82707,1355],{}," ，否则返回 ",[266,82710,82711],{},[103,82712,66014],{},[60,82714,82715],{"start":1187},[63,82716,82717],{},"异常：",[14,82719,82216,82720,13788,82722,82726],{},[103,82721,82689],{},[355,82723,82725],{"href":82656,"rel":82724},[23858],"是一个正则表达式","，则会抛出",[14,82728,82729],{},"只要是有就是true，不需要非得以谁开头结尾",[97,82731,82733],{"className":77489,"code":82732,"language":77491,"meta":25,"style":25},"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",[103,82734,82735,82746,82769,82788,82808,82830,82849],{"__ignoreMap":25},[106,82736,82737,82739,82741,82743],{"class":108,"line":109},[106,82738,6785],{"class":112},[106,82740,79769],{"class":116},[106,82742,162],{"class":112},[106,82744,82745],{"class":221}," \"To be, or not to be, that is the question.\"\n",[106,82747,82748,82750,82752,82755,82758,82760,82763,82766],{"class":108,"line":28},[106,82749,77526],{"class":116},[106,82751,58241],{"class":1955},[106,82753,82754],{"class":116},"(str.",[106,82756,82757],{"class":1955},"includes",[106,82759,117],{"class":116},[106,82761,82762],{"class":221},"\"To be\"",[106,82764,82765],{"class":116},"))",[106,82767,82768],{"class":175},"  \u002F\u002F true\n",[106,82770,82771,82773,82775,82777,82779,82781,82784,82786],{"class":108,"line":1172},[106,82772,77526],{"class":116},[106,82774,58241],{"class":1955},[106,82776,82754],{"class":116},[106,82778,82757],{"class":1955},[106,82780,117],{"class":116},[106,82782,82783],{"class":221},"\"question\"",[106,82785,82765],{"class":116},[106,82787,82768],{"class":175},[106,82789,82790,82792,82794,82796,82798,82800,82803,82805],{"class":108,"line":1187},[106,82791,77526],{"class":116},[106,82793,58241],{"class":1955},[106,82795,82754],{"class":116},[106,82797,82757],{"class":1955},[106,82799,117],{"class":116},[106,82801,82802],{"class":221},"\"nonexistent\"",[106,82804,82765],{"class":116},[106,82806,82807],{"class":175},"  \u002F\u002F false\n",[106,82809,82810,82812,82814,82816,82818,82820,82822,82824,82826,82828],{"class":108,"line":1193},[106,82811,77526],{"class":116},[106,82813,58241],{"class":1955},[106,82815,82754],{"class":116},[106,82817,82757],{"class":1955},[106,82819,117],{"class":116},[106,82821,82762],{"class":221},[106,82823,12428],{"class":116},[106,82825,334],{"class":165},[106,82827,82765],{"class":116},[106,82829,82807],{"class":175},[106,82831,82832,82834,82836,82838,82840,82842,82845,82847],{"class":108,"line":1207},[106,82833,77526],{"class":116},[106,82835,58241],{"class":1955},[106,82837,82754],{"class":116},[106,82839,82757],{"class":1955},[106,82841,117],{"class":116},[106,82843,82844],{"class":221},"\"TO BE\"",[106,82846,82765],{"class":116},[106,82848,82807],{"class":175},[106,82850,82851,82853,82855,82857,82859,82861,82863,82865],{"class":108,"line":1213},[106,82852,77526],{"class":116},[106,82854,58241],{"class":1955},[106,82856,82754],{"class":116},[106,82858,82757],{"class":1955},[106,82860,117],{"class":116},[106,82862,7645],{"class":221},[106,82864,82765],{"class":116},[106,82866,82768],{"class":175},[22903,82868,82870],{"id":82869},"_410535-转换为字符串","4.10.5.3.5 转换为字符串",[97,82872,82874],{"className":53061,"code":82873,"language":53063,"meta":25,"style":25},"\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",[103,82875,82876,82884,82892,82897,82902,82907,82912,82917,82925],{"__ignoreMap":25},[106,82877,82878,82880,82882],{"class":108,"line":109},[106,82879,1027],{"class":116},[106,82881,51794],{"class":51294},[106,82883,51301],{"class":116},[106,82885,82886,82888,82890],{"class":108,"line":28},[106,82887,52138],{"class":116},[106,82889,51807],{"class":51294},[106,82891,51301],{"class":116},[106,82893,82894],{"class":108,"line":1172},[106,82895,82896],{"class":116},"    const num = 10\n",[106,82898,82899],{"class":108,"line":1187},[106,82900,82901],{"class":116},"    \u002F\u002F 强制转换\n",[106,82903,82904],{"class":108,"line":1193},[106,82905,82906],{"class":116},"    console.log(String(num))\n",[106,82908,82909],{"class":108,"line":1207},[106,82910,82911],{"class":116},"    \u002F\u002F toString()方法转换\n",[106,82913,82914],{"class":108,"line":1213},[106,82915,82916],{"class":116},"    console.log(num.toString())\n",[106,82918,82919,82921,82923],{"class":108,"line":1304},[106,82920,52411],{"class":116},[106,82922,51807],{"class":51294},[106,82924,51301],{"class":116},[106,82926,82927,82929,82931],{"class":108,"line":1310},[106,82928,51779],{"class":116},[106,82930,51794],{"class":51294},[106,82932,51301],{"class":116},[22903,82934,82936],{"id":82935},"_410536-显示赠品练习","4.10.5.3.6 显示赠品练习",[14,82938,82939],{},[23,82940],{"alt":25,"src":82941},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-275.png",[97,82943,82945],{"className":50627,"code":82944,"language":50629,"meta":25,"style":25},"\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",[103,82946,82947,82957,82971,82975,82983,82997,83017,83029,83037,83041,83049,83061,83069,83081,83086,83091,83096,83143,83159,83167,83175,83179],{"__ignoreMap":25},[106,82948,82949,82951,82953,82955],{"class":108,"line":109},[106,82950,51291],{"class":116},[106,82952,51295],{"class":51294},[106,82954,51298],{"class":1955},[106,82956,51301],{"class":116},[106,82958,82959,82961,82963,82965,82967,82969],{"class":108,"line":28},[106,82960,1027],{"class":116},[106,82962,50629],{"class":51294},[106,82964,51310],{"class":1955},[106,82966,162],{"class":116},[106,82968,51315],{"class":221},[106,82970,51301],{"class":116},[106,82972,82973],{"class":108,"line":1172},[106,82974,2392],{"emptyLinePlaceholder":33},[106,82976,82977,82979,82981],{"class":108,"line":1187},[106,82978,1027],{"class":116},[106,82980,51328],{"class":51294},[106,82982,51301],{"class":116},[106,82984,82985,82987,82989,82991,82993,82995],{"class":108,"line":1193},[106,82986,52138],{"class":116},[106,82988,51338],{"class":51294},[106,82990,51341],{"class":1955},[106,82992,162],{"class":116},[106,82994,51346],{"class":221},[106,82996,51301],{"class":116},[106,82998,82999,83001,83003,83005,83007,83009,83011,83013,83015],{"class":108,"line":1207},[106,83000,52138],{"class":116},[106,83002,51338],{"class":51294},[106,83004,14913],{"class":1955},[106,83006,162],{"class":116},[106,83008,51385],{"class":221},[106,83010,51365],{"class":1955},[106,83012,162],{"class":116},[106,83014,51392],{"class":221},[106,83016,51301],{"class":116},[106,83018,83019,83021,83023,83025,83027],{"class":108,"line":1213},[106,83020,52138],{"class":116},[106,83022,51401],{"class":51294},[106,83024,51404],{"class":116},[106,83026,51401],{"class":51294},[106,83028,51301],{"class":116},[106,83030,83031,83033,83035],{"class":108,"line":1304},[106,83032,51779],{"class":116},[106,83034,51328],{"class":51294},[106,83036,51301],{"class":116},[106,83038,83039],{"class":108,"line":1310},[106,83040,2392],{"emptyLinePlaceholder":33},[106,83042,83043,83045,83047],{"class":108,"line":1322},[106,83044,1027],{"class":116},[106,83046,51794],{"class":51294},[106,83048,51301],{"class":116},[106,83050,83051,83053,83055,83057,83059],{"class":108,"line":1604},[106,83052,52138],{"class":116},[106,83054,51605],{"class":51294},[106,83056,55308],{"class":116},[106,83058,51605],{"class":51294},[106,83060,51301],{"class":116},[106,83062,83063,83065,83067],{"class":108,"line":1609},[106,83064,52138],{"class":116},[106,83066,51807],{"class":51294},[106,83068,51301],{"class":116},[106,83070,83071,83073,83076,83078],{"class":108,"line":1615},[106,83072,11214],{"class":112},[106,83074,83075],{"class":165}," gift",[106,83077,13557],{"class":112},[106,83079,83080],{"class":221}," '50g的茶叶，清洗球'\n",[106,83082,83083],{"class":108,"line":1620},[106,83084,83085],{"class":175},"    \u002F\u002F 1.把字符串拆分为数组\n",[106,83087,83088],{"class":108,"line":1634},[106,83089,83090],{"class":175},"    \u002F\u002F console.log(gift.split(','))\n",[106,83092,83093],{"class":108,"line":1639},[106,83094,83095],{"class":175},"    \u002F\u002F 2.根据数组元素的个数生成对应的标签\n",[106,83097,83098,83100,83102,83104,83107,83110,83112,83115,83117,83119,83121,83123,83125,83128,83130,83133,83135,83137,83139,83141],{"class":108,"line":1645},[106,83099,11214],{"class":112},[106,83101,73913],{"class":165},[106,83103,13557],{"class":112},[106,83105,83106],{"class":116}," gift.",[106,83108,83109],{"class":1955},"split",[106,83111,117],{"class":116},[106,83113,83114],{"class":221},"'，'",[106,83116,30820],{"class":116},[106,83118,74038],{"class":1955},[106,83120,117],{"class":116},[106,83122,79789],{"class":5209},[106,83124,79792],{"class":112},[106,83126,83127],{"class":221}," `\u003Cspan>【赠品】${",[106,83129,79789],{"class":116},[106,83131,83132],{"class":221},"}\u003C\u002Fspan>\u003Cbr>`",[106,83134,30820],{"class":116},[106,83136,74217],{"class":1955},[106,83138,117],{"class":116},[106,83140,74222],{"class":221},[106,83142,123],{"class":116},[106,83144,83145,83147,83149,83151,83153,83155,83157],{"class":108,"line":1666},[106,83146,52401],{"class":116},[106,83148,54393],{"class":1955},[106,83150,117],{"class":116},[106,83152,81925],{"class":221},[106,83154,74243],{"class":116},[106,83156,162],{"class":112},[106,83158,73979],{"class":116},[106,83160,83161,83163,83165],{"class":108,"line":1671},[106,83162,52411],{"class":116},[106,83164,51807],{"class":51294},[106,83166,51301],{"class":116},[106,83168,83169,83171,83173],{"class":108,"line":1685},[106,83170,51779],{"class":116},[106,83172,51794],{"class":51294},[106,83174,51301],{"class":116},[106,83176,83177],{"class":108,"line":1690},[106,83178,2392],{"emptyLinePlaceholder":33},[106,83180,83181,83183,83185],{"class":108,"line":1719},[106,83182,51779],{"class":116},[106,83184,50629],{"class":51294},[106,83186,51301],{"class":116},[21991,83188,83190],{"id":83189},"_41054-number","4.10.5.4 Number",[14,83192,83193],{},[23,83194],{"alt":25,"src":83195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-276.png",[14,83197,83198],{},"整数也可以进行toFixed来保留小数",[14,83200,83201],{},"比如：",[14,83203,83204],{},"const price=10",[14,83206,83207],{},"console.log(price.tofixed(2)) \u002F\u002F输出：10.00",[21991,83209,83211],{"id":83210},"_41055-购物车展示","4.10.5.5 购物车展示",[14,83213,83214],{},[23,83215],{"alt":25,"src":83216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-277.png",[97,83218,83220],{"className":50627,"code":83219,"language":50629,"meta":25,"style":25},"\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",[103,83221,83222,83232,83246,83250,83258,83272,83292,83304,83312,83318,83328,83338,83348,83352,83356,83362,83374,83388,83392,83396,83402,83414,83430,83440,83456,83460,83464,83470,83480,83490,83494,83498,83506,83518,83530,83542,83546,83550,83558,83570,83574,83578,83589,83599,83611,83623,83633,83637,83641,83649,83658,83670,83680,83690,83694,83698,83706,83715,83722,83732,83744,83748,83752,83761,83771,83782,83794,83806,83810,83814,83823,83833,83844,83848,83852,83858,83870,83882,83892,83902,83920,83932,83936,83940,83949,83961,83971,83981,83993,83997,84005,84013,84017,84025,84039,84047,84061,84089,84097,84105,84115,84119,84127,84135,84144,84152,84161,84171,84175,84179,84187,84195,84204,84212,84220,84233,84237,84241,84249,84257,84266,84274,84282,84297,84301,84305,84313,84321,84330,84338,84346,84360,84368,84372,84376,84381,84407,84412,84449,84454,84477,84482,84536,84541,84577,84581,84587,84592,84601,84615,84624,84643,84652,84662,84667,84672,84685,84690,84744,84770,84778,84786,84790],{"__ignoreMap":25},[106,83223,83224,83226,83228,83230],{"class":108,"line":109},[106,83225,51291],{"class":116},[106,83227,51295],{"class":51294},[106,83229,51298],{"class":1955},[106,83231,51301],{"class":116},[106,83233,83234,83236,83238,83240,83242,83244],{"class":108,"line":28},[106,83235,1027],{"class":116},[106,83237,50629],{"class":51294},[106,83239,51310],{"class":1955},[106,83241,162],{"class":116},[106,83243,51315],{"class":221},[106,83245,51301],{"class":116},[106,83247,83248],{"class":108,"line":1172},[106,83249,2392],{"emptyLinePlaceholder":33},[106,83251,83252,83254,83256],{"class":108,"line":1187},[106,83253,1027],{"class":116},[106,83255,51328],{"class":51294},[106,83257,51301],{"class":116},[106,83259,83260,83262,83264,83266,83268,83270],{"class":108,"line":1193},[106,83261,52138],{"class":116},[106,83263,51338],{"class":51294},[106,83265,51341],{"class":1955},[106,83267,162],{"class":116},[106,83269,51346],{"class":221},[106,83271,51301],{"class":116},[106,83273,83274,83276,83278,83280,83282,83284,83286,83288,83290],{"class":108,"line":1207},[106,83275,52138],{"class":116},[106,83277,51338],{"class":51294},[106,83279,14913],{"class":1955},[106,83281,162],{"class":116},[106,83283,51385],{"class":221},[106,83285,51365],{"class":1955},[106,83287,162],{"class":116},[106,83289,51392],{"class":221},[106,83291,51301],{"class":116},[106,83293,83294,83296,83298,83300,83302],{"class":108,"line":1213},[106,83295,52138],{"class":116},[106,83297,51401],{"class":51294},[106,83299,51404],{"class":116},[106,83301,51401],{"class":51294},[106,83303,51301],{"class":116},[106,83305,83306,83308,83310],{"class":108,"line":1304},[106,83307,52138],{"class":116},[106,83309,5119],{"class":51294},[106,83311,51301],{"class":116},[106,83313,83314,83316],{"class":108,"line":1310},[106,83315,6396],{"class":51294},[106,83317,15565],{"class":116},[106,83319,83320,83322,83324,83326],{"class":108,"line":1322},[106,83321,54689],{"class":165},[106,83323,51431],{"class":116},[106,83325,308],{"class":165},[106,83327,1283],{"class":116},[106,83329,83330,83332,83334,83336],{"class":108,"line":1604},[106,83331,54700],{"class":165},[106,83333,51431],{"class":116},[106,83335,308],{"class":165},[106,83337,1283],{"class":116},[106,83339,83340,83342,83344,83346],{"class":108,"line":1609},[106,83341,72590],{"class":165},[106,83343,51431],{"class":116},[106,83345,60499],{"class":165},[106,83347,1283],{"class":116},[106,83349,83350],{"class":108,"line":1615},[106,83351,2179],{"class":116},[106,83353,83354],{"class":108,"line":1620},[106,83355,2392],{"emptyLinePlaceholder":33},[106,83357,83358,83360],{"class":108,"line":1634},[106,83359,62117],{"class":1955},[106,83361,15565],{"class":116},[106,83363,83364,83366,83368,83370,83372],{"class":108,"line":1639},[106,83365,54765],{"class":165},[106,83367,51431],{"class":116},[106,83369,78568],{"class":165},[106,83371,51486],{"class":112},[106,83373,1283],{"class":116},[106,83375,83376,83378,83380,83382,83384,83386],{"class":108,"line":1645},[106,83377,54700],{"class":165},[106,83379,51431],{"class":116},[106,83381,428],{"class":165},[106,83383,51486],{"class":112},[106,83385,51550],{"class":165},[106,83387,1283],{"class":116},[106,83389,83390],{"class":108,"line":1666},[106,83391,2179],{"class":116},[106,83393,83394],{"class":108,"line":1671},[106,83395,2392],{"emptyLinePlaceholder":33},[106,83397,83398,83400],{"class":108,"line":1685},[106,83399,78619],{"class":1955},[106,83401,15565],{"class":116},[106,83403,83404,83406,83408,83410,83412],{"class":108,"line":1690},[106,83405,54689],{"class":165},[106,83407,51431],{"class":116},[106,83409,692],{"class":165},[106,83411,51486],{"class":112},[106,83413,1283],{"class":116},[106,83415,83416,83418,83420,83422,83424,83426,83428],{"class":108,"line":1719},[106,83417,61854],{"class":165},[106,83419,51431],{"class":116},[106,83421,28115],{"class":165},[106,83423,78674],{"class":165},[106,83425,78677],{"class":165},[106,83427,812],{"class":112},[106,83429,1283],{"class":116},[106,83431,83432,83434,83436,83438],{"class":108,"line":1724},[106,83433,55003],{"class":165},[106,83435,51431],{"class":116},[106,83437,51471],{"class":165},[106,83439,1283],{"class":116},[106,83441,83442,83444,83446,83448,83450,83452,83454],{"class":108,"line":1741},[106,83443,61971],{"class":165},[106,83445,51431],{"class":116},[106,83447,334],{"class":165},[106,83449,51486],{"class":112},[106,83451,51515],{"class":165},[106,83453,62238],{"class":165},[106,83455,1283],{"class":116},[106,83457,83458],{"class":108,"line":1746},[106,83459,2179],{"class":116},[106,83461,83462],{"class":108,"line":1751},[106,83463,2392],{"emptyLinePlaceholder":33},[106,83465,83466,83468],{"class":108,"line":1756},[106,83467,78737],{"class":1955},[106,83469,15565],{"class":116},[106,83471,83472,83474,83476,83478],{"class":108,"line":1770},[106,83473,62019],{"class":165},[106,83475,51431],{"class":116},[106,83477,62024],{"class":165},[106,83479,1283],{"class":116},[106,83481,83482,83484,83486,83488],{"class":108,"line":1775},[106,83483,54878],{"class":165},[106,83485,51431],{"class":116},[106,83487,61812],{"class":165},[106,83489,1283],{"class":116},[106,83491,83492],{"class":108,"line":2569},[106,83493,2179],{"class":116},[106,83495,83496],{"class":108,"line":2583},[106,83497,2392],{"emptyLinePlaceholder":33},[106,83499,83500,83502,83504],{"class":108,"line":2591},[106,83501,78619],{"class":1955},[106,83503,55609],{"class":51294},[106,83505,15565],{"class":116},[106,83507,83508,83510,83512,83514,83516],{"class":108,"line":2596},[106,83509,54765],{"class":165},[106,83511,51431],{"class":116},[106,83513,729],{"class":165},[106,83515,51486],{"class":112},[106,83517,1283],{"class":116},[106,83519,83520,83522,83524,83526,83528],{"class":108,"line":2602},[106,83521,54779],{"class":165},[106,83523,51431],{"class":116},[106,83525,729],{"class":165},[106,83527,51486],{"class":112},[106,83529,1283],{"class":116},[106,83531,83532,83534,83536,83538,83540],{"class":108,"line":2608},[106,83533,61744],{"class":165},[106,83535,51431],{"class":116},[106,83537,436],{"class":165},[106,83539,51486],{"class":112},[106,83541,1283],{"class":116},[106,83543,83544],{"class":108,"line":2613},[106,83545,2179],{"class":116},[106,83547,83548],{"class":108,"line":7941},[106,83549,2392],{"emptyLinePlaceholder":33},[106,83551,83552,83554,83556],{"class":108,"line":7965},[106,83553,78619],{"class":1955},[106,83555,62298],{"class":1955},[106,83557,15565],{"class":116},[106,83559,83560,83562,83564,83566,83568],{"class":108,"line":7970},[106,83561,54765],{"class":165},[106,83563,51431],{"class":116},[106,83565,1714],{"class":165},[106,83567,51486],{"class":112},[106,83569,1283],{"class":116},[106,83571,83572],{"class":108,"line":7976},[106,83573,2179],{"class":116},[106,83575,83576],{"class":108,"line":8003},[106,83577,2392],{"emptyLinePlaceholder":33},[106,83579,83580,83582,83584,83587],{"class":108,"line":8008},[106,83581,78619],{"class":1955},[106,83583,62298],{"class":1955},[106,83585,83586],{"class":1955}," .tag",[106,83588,15565],{"class":116},[106,83590,83591,83593,83595,83597],{"class":108,"line":8014},[106,83592,55003],{"class":165},[106,83594,51431],{"class":116},[106,83596,60863],{"class":165},[106,83598,1283],{"class":116},[106,83600,83601,83603,83605,83607,83609],{"class":108,"line":8026},[106,83602,54689],{"class":165},[106,83604,51431],{"class":116},[106,83606,194],{"class":165},[106,83608,51486],{"class":112},[106,83610,1283],{"class":116},[106,83612,83613,83615,83617,83619,83621],{"class":108,"line":8038},[106,83614,54916],{"class":165},[106,83616,51431],{"class":116},[106,83618,615],{"class":165},[106,83620,51486],{"class":112},[106,83622,1283],{"class":116},[106,83624,83625,83627,83629,83631],{"class":108,"line":8050},[106,83626,57410],{"class":165},[106,83628,51431],{"class":116},[106,83630,62064],{"class":165},[106,83632,1283],{"class":116},[106,83634,83635],{"class":108,"line":9709},[106,83636,2179],{"class":116},[106,83638,83639],{"class":108,"line":9734},[106,83640,2392],{"emptyLinePlaceholder":33},[106,83642,83643,83645,83647],{"class":108,"line":9757},[106,83644,78619],{"class":1955},[106,83646,78911],{"class":1955},[106,83648,31460],{"class":116},[106,83650,83651,83653,83656],{"class":108,"line":9781},[106,83652,78619],{"class":1955},[106,83654,83655],{"class":1955}," .sub-total",[106,83657,15565],{"class":116},[106,83659,83660,83662,83664,83666,83668],{"class":108,"line":9786},[106,83661,54916],{"class":165},[106,83663,51431],{"class":116},[106,83665,767],{"class":165},[106,83667,51486],{"class":112},[106,83669,1283],{"class":116},[106,83671,83672,83674,83676,83678],{"class":108,"line":9791},[106,83673,57410],{"class":165},[106,83675,51431],{"class":116},[106,83677,78934],{"class":165},[106,83679,1283],{"class":116},[106,83681,83682,83684,83686,83688],{"class":108,"line":9796},[106,83683,61831],{"class":165},[106,83685,51431],{"class":116},[106,83687,334],{"class":165},[106,83689,1283],{"class":116},[106,83691,83692],{"class":108,"line":9805},[106,83693,2179],{"class":116},[106,83695,83696],{"class":108,"line":9810},[106,83697,2392],{"emptyLinePlaceholder":33},[106,83699,83700,83702,83704],{"class":108,"line":9816},[106,83701,78619],{"class":1955},[106,83703,78951],{"class":1955},[106,83705,31460],{"class":116},[106,83707,83708,83710,83713],{"class":108,"line":9837},[106,83709,78619],{"class":1955},[106,83711,83712],{"class":1955}," .sub-total::before",[106,83714,31460],{"class":116},[106,83716,83717,83720],{"class":108,"line":9843},[106,83718,83719],{"class":1955},"    .amount::before",[106,83721,15565],{"class":116},[106,83723,83724,83726,83728,83730],{"class":108,"line":9857},[106,83725,78958],{"class":165},[106,83727,51431],{"class":116},[106,83729,78963],{"class":221},[106,83731,1283],{"class":116},[106,83733,83734,83736,83738,83740,83742],{"class":108,"line":9863},[106,83735,54916],{"class":165},[106,83737,51431],{"class":116},[106,83739,615],{"class":165},[106,83741,51486],{"class":112},[106,83743,1283],{"class":116},[106,83745,83746],{"class":108,"line":9890},[106,83747,2179],{"class":116},[106,83749,83750],{"class":108,"line":9899},[106,83751,2392],{"emptyLinePlaceholder":33},[106,83753,83754,83756,83759],{"class":108,"line":9905},[106,83755,78619],{"class":1955},[106,83757,83758],{"class":1955}," .spec",[106,83760,15565],{"class":116},[106,83762,83763,83765,83767,83769],{"class":108,"line":9913},[106,83764,61831],{"class":165},[106,83766,51431],{"class":116},[106,83768,194],{"class":165},[106,83770,1283],{"class":116},[106,83772,83773,83775,83777,83780],{"class":108,"line":9918},[106,83774,57410],{"class":165},[106,83776,51431],{"class":116},[106,83778,83779],{"class":165},"#888",[106,83781,1283],{"class":116},[106,83783,83784,83786,83788,83790,83792],{"class":108,"line":16597},[106,83785,54916],{"class":165},[106,83787,51431],{"class":116},[106,83789,666],{"class":165},[106,83791,51486],{"class":112},[106,83793,1283],{"class":116},[106,83795,83796,83798,83800,83802,83804],{"class":108,"line":16603},[106,83797,61994],{"class":165},[106,83799,51431],{"class":116},[106,83801,817],{"class":165},[106,83803,51486],{"class":112},[106,83805,1283],{"class":116},[106,83807,83808],{"class":108,"line":16626},[106,83809,2179],{"class":116},[106,83811,83812],{"class":108,"line":16632},[106,83813,2392],{"emptyLinePlaceholder":33},[106,83815,83816,83818,83821],{"class":108,"line":16655},[106,83817,78619],{"class":1955},[106,83819,83820],{"class":1955}," .count",[106,83822,15565],{"class":116},[106,83824,83825,83827,83829,83831],{"class":108,"line":16669},[106,83826,61831],{"class":165},[106,83828,51431],{"class":116},[106,83830,334],{"class":165},[106,83832,1283],{"class":116},[106,83834,83835,83837,83839,83842],{"class":108,"line":16689},[106,83836,57410],{"class":165},[106,83838,51431],{"class":116},[106,83840,83841],{"class":165},"#aaa",[106,83843,1283],{"class":116},[106,83845,83846],{"class":108,"line":16695},[106,83847,2179],{"class":116},[106,83849,83850],{"class":108,"line":16706},[106,83851,2392],{"emptyLinePlaceholder":33},[106,83853,83854,83856],{"class":108,"line":16729},[106,83855,72469],{"class":1955},[106,83857,15565],{"class":116},[106,83859,83860,83862,83864,83866,83868],{"class":108,"line":16751},[106,83861,54765],{"class":165},[106,83863,51431],{"class":116},[106,83865,78568],{"class":165},[106,83867,51486],{"class":112},[106,83869,1283],{"class":116},[106,83871,83872,83874,83876,83878,83880],{"class":108,"line":16756},[106,83873,54700],{"class":165},[106,83875,51431],{"class":116},[106,83877,308],{"class":165},[106,83879,51550],{"class":165},[106,83881,1283],{"class":116},[106,83883,83884,83886,83888,83890],{"class":108,"line":16762},[106,83885,55003],{"class":165},[106,83887,51431],{"class":116},[106,83889,51471],{"class":165},[106,83891,1283],{"class":116},[106,83893,83894,83896,83898,83900],{"class":108,"line":16776},[106,83895,55014],{"class":165},[106,83897,51431],{"class":116},[106,83899,51574],{"class":165},[106,83901,1283],{"class":116},[106,83903,83904,83907,83909,83911,83913,83915,83918],{"class":108,"line":16789},[106,83905,83906],{"class":165},"      border-top",[106,83908,51431],{"class":116},[106,83910,334],{"class":165},[106,83912,51486],{"class":112},[106,83914,51515],{"class":165},[106,83916,83917],{"class":165}," #4e4e4e",[106,83919,1283],{"class":116},[106,83921,83922,83924,83926,83928,83930],{"class":108,"line":16794},[106,83923,54689],{"class":165},[106,83925,51431],{"class":116},[106,83927,817],{"class":165},[106,83929,51486],{"class":112},[106,83931,1283],{"class":116},[106,83933,83934],{"class":108,"line":16808},[106,83935,2179],{"class":116},[106,83937,83938],{"class":108,"line":16813},[106,83939,2392],{"emptyLinePlaceholder":33},[106,83941,83942,83944,83947],{"class":108,"line":16819},[106,83943,72469],{"class":1955},[106,83945,83946],{"class":1955}," .amount",[106,83948,15565],{"class":116},[106,83950,83951,83953,83955,83957,83959],{"class":108,"line":16824},[106,83952,54916],{"class":165},[106,83954,51431],{"class":116},[106,83956,767],{"class":165},[106,83958,51486],{"class":112},[106,83960,1283],{"class":116},[106,83962,83963,83965,83967,83969],{"class":108,"line":16838},[106,83964,57410],{"class":165},[106,83966,51431],{"class":116},[106,83968,78934],{"class":165},[106,83970,1283],{"class":116},[106,83972,83973,83975,83977,83979],{"class":108,"line":16843},[106,83974,62328],{"class":165},[106,83976,51431],{"class":116},[106,83978,51483],{"class":165},[106,83980,1283],{"class":116},[106,83982,83983,83985,83987,83989,83991],{"class":108,"line":16848},[106,83984,61744],{"class":165},[106,83986,51431],{"class":116},[106,83988,773],{"class":165},[106,83990,51486],{"class":112},[106,83992,1283],{"class":116},[106,83994,83995],{"class":108,"line":16862},[106,83996,2179],{"class":116},[106,83998,83999,84001,84003],{"class":108,"line":16874},[106,84000,52411],{"class":116},[106,84002,5119],{"class":51294},[106,84004,51301],{"class":116},[106,84006,84007,84009,84011],{"class":108,"line":16879},[106,84008,51779],{"class":116},[106,84010,51328],{"class":51294},[106,84012,51301],{"class":116},[106,84014,84015],{"class":108,"line":16892},[106,84016,2392],{"emptyLinePlaceholder":33},[106,84018,84019,84021,84023],{"class":108,"line":16897},[106,84020,1027],{"class":116},[106,84022,51794],{"class":51294},[106,84024,51301],{"class":116},[106,84026,84027,84029,84031,84033,84035,84037],{"class":108,"line":16902},[106,84028,52138],{"class":116},[106,84030,51605],{"class":51294},[106,84032,53480],{"class":1955},[106,84034,162],{"class":116},[106,84036,62602],{"class":221},[106,84038,51301],{"class":116},[106,84040,84041,84043,84045],{"class":108,"line":16907},[106,84042,52411],{"class":116},[106,84044,51605],{"class":51294},[106,84046,51301],{"class":116},[106,84048,84049,84051,84053,84055,84057,84059],{"class":108,"line":16920},[106,84050,52138],{"class":116},[106,84052,51605],{"class":51294},[106,84054,53480],{"class":1955},[106,84056,162],{"class":116},[106,84058,62574],{"class":221},[106,84060,51301],{"class":116},[106,84062,84063,84065,84067,84070,84072,84074,84076,84079,84081,84083,84085,84087],{"class":108,"line":16925},[106,84064,51335],{"class":116},[106,84066,51605],{"class":51294},[106,84068,84069],{"class":116},">合计：\u003C",[106,84071,106],{"class":51294},[106,84073,53480],{"class":1955},[106,84075,162],{"class":116},[106,84077,84078],{"class":221},"\"amount\"",[106,84080,55308],{"class":116},[106,84082,106],{"class":51294},[106,84084,55308],{"class":116},[106,84086,51605],{"class":51294},[106,84088,51301],{"class":116},[106,84090,84091,84093,84095],{"class":108,"line":32627},[106,84092,52411],{"class":116},[106,84094,51605],{"class":51294},[106,84096,51301],{"class":116},[106,84098,84099,84101,84103],{"class":108,"line":32633},[106,84100,52138],{"class":116},[106,84102,51807],{"class":51294},[106,84104,51301],{"class":116},[106,84106,84107,84109,84111,84113],{"class":108,"line":32639},[106,84108,11214],{"class":112},[106,84110,79371],{"class":165},[106,84112,13557],{"class":112},[106,84114,55441],{"class":116},[106,84116,84117],{"class":108,"line":32645},[106,84118,79380],{"class":116},[106,84120,84121,84123,84125],{"class":108,"line":32651},[106,84122,79385],{"class":116},[106,84124,79388],{"class":221},[106,84126,31460],{"class":116},[106,84128,84129,84131,84133],{"class":108,"line":32662},[106,84130,79395],{"class":116},[106,84132,79398],{"class":221},[106,84134,31460],{"class":116},[106,84136,84137,84139,84142],{"class":108,"line":32668},[106,84138,79405],{"class":116},[106,84140,84141],{"class":165},"289.9",[106,84143,31460],{"class":116},[106,84145,84146,84148,84150],{"class":108,"line":32688},[106,84147,79415],{"class":116},[106,84149,79418],{"class":221},[106,84151,31460],{"class":116},[106,84153,84154,84157,84159],{"class":108,"line":32694},[106,84155,84156],{"class":116},"        count: ",[106,84158,194],{"class":165},[106,84160,31460],{"class":116},[106,84162,84163,84166,84169],{"class":108,"line":32705},[106,84164,84165],{"class":116},"        spec: { color: ",[106,84167,84168],{"class":221},"'白色'",[106,84170,55598],{"class":116},[106,84172,84173],{"class":108,"line":32711},[106,84174,77886],{"class":116},[106,84176,84177],{"class":108,"line":32717},[106,84178,79380],{"class":116},[106,84180,84181,84183,84185],{"class":108,"line":32723},[106,84182,79385],{"class":116},[106,84184,79479],{"class":221},[106,84186,31460],{"class":116},[106,84188,84189,84191,84193],{"class":108,"line":32729},[106,84190,79395],{"class":116},[106,84192,79488],{"class":221},[106,84194,31460],{"class":116},[106,84196,84197,84199,84202],{"class":108,"line":32735},[106,84198,79405],{"class":116},[106,84200,84201],{"class":165},"109.8",[106,84203,31460],{"class":116},[106,84205,84206,84208,84210],{"class":108,"line":32741},[106,84207,79415],{"class":116},[106,84209,79506],{"class":221},[106,84211,31460],{"class":116},[106,84213,84214,84216,84218],{"class":108,"line":32747},[106,84215,84156],{"class":116},[106,84217,188],{"class":165},[106,84219,31460],{"class":116},[106,84221,84222,84225,84227,84229,84231],{"class":108,"line":32767},[106,84223,84224],{"class":116},"        spec: { size: ",[106,84226,81897],{"class":221},[106,84228,55458],{"class":116},[106,84230,81902],{"class":221},[106,84232,55598],{"class":116},[106,84234,84235],{"class":108,"line":32773},[106,84236,77886],{"class":116},[106,84238,84239],{"class":108,"line":32789},[106,84240,79380],{"class":116},[106,84242,84243,84245,84247],{"class":108,"line":32795},[106,84244,79385],{"class":116},[106,84246,79523],{"class":221},[106,84248,31460],{"class":116},[106,84250,84251,84253,84255],{"class":108,"line":32809},[106,84252,79395],{"class":116},[106,84254,79532],{"class":221},[106,84256,31460],{"class":116},[106,84258,84259,84261,84264],{"class":108,"line":32815},[106,84260,79405],{"class":116},[106,84262,84263],{"class":165},"488",[106,84265,31460],{"class":116},[106,84267,84268,84270,84272],{"class":108,"line":32830},[106,84269,79415],{"class":116},[106,84271,79550],{"class":221},[106,84273,31460],{"class":116},[106,84275,84276,84278,84280],{"class":108,"line":32836},[106,84277,84156],{"class":116},[106,84279,334],{"class":165},[106,84281,31460],{"class":116},[106,84283,84284,84286,84289,84292,84295],{"class":108,"line":32845},[106,84285,84165],{"class":116},[106,84287,84288],{"class":221},"'青色'",[106,84290,84291],{"class":116},", sum: ",[106,84293,84294],{"class":221},"'一大四小'",[106,84296,55598],{"class":116},[106,84298,84299],{"class":108,"line":32851},[106,84300,77886],{"class":116},[106,84302,84303],{"class":108,"line":32860},[106,84304,79380],{"class":116},[106,84306,84307,84309,84311],{"class":108,"line":32866},[106,84308,79385],{"class":116},[106,84310,79567],{"class":221},[106,84312,31460],{"class":116},[106,84314,84315,84317,84319],{"class":108,"line":32872},[106,84316,79395],{"class":116},[106,84318,79576],{"class":221},[106,84320,31460],{"class":116},[106,84322,84323,84325,84328],{"class":108,"line":32881},[106,84324,79405],{"class":116},[106,84326,84327],{"class":165},"139",[106,84329,31460],{"class":116},[106,84331,84332,84334,84336],{"class":108,"line":32887},[106,84333,79415],{"class":116},[106,84335,79594],{"class":221},[106,84337,31460],{"class":116},[106,84339,84340,84342,84344],{"class":108,"line":32898},[106,84341,84156],{"class":116},[106,84343,334],{"class":165},[106,84345,31460],{"class":116},[106,84347,84348,84350,84353,84355,84358],{"class":108,"line":32904},[106,84349,84224],{"class":116},[106,84351,84352],{"class":221},"'小号'",[106,84354,55458],{"class":116},[106,84356,84357],{"class":221},"'紫色'",[106,84359,55464],{"class":116},[106,84361,84362,84365],{"class":108,"line":32923},[106,84363,84364],{"class":116},"        gift: ",[106,84366,84367],{"class":221},"'50g茶叶,清洗球'\n",[106,84369,84370],{"class":108,"line":32929},[106,84371,52392],{"class":116},[106,84373,84374],{"class":108,"line":32940},[106,84375,53103],{"class":116},[106,84377,84378],{"class":108,"line":32946},[106,84379,84380],{"class":175},"    \u002F\u002F  1.根据数据渲染页面\n",[106,84382,84383,84385,84387,84389,84391,84393,84395,84397,84399,84401,84403,84405],{"class":108,"line":32966},[106,84384,52401],{"class":116},[106,84386,54393],{"class":1955},[106,84388,117],{"class":116},[106,84390,79895],{"class":221},[106,84392,74243],{"class":116},[106,84394,162],{"class":112},[106,84396,80042],{"class":116},[106,84398,74038],{"class":1955},[106,84400,117],{"class":116},[106,84402,79789],{"class":5209},[106,84404,79792],{"class":112},[106,84406,15565],{"class":116},[106,84408,84409],{"class":108,"line":32982},[106,84410,84411],{"class":175},"      \u002F\u002F 对象解构\n",[106,84413,84414,84416,84418,84420,84422,84424,84426,84429,84431,84433,84435,84438,84440,84443,84445,84447],{"class":108,"line":32988},[106,84415,58222],{"class":112},[106,84417,79801],{"class":116},[106,84419,79814],{"class":165},[106,84421,12428],{"class":116},[106,84423,79804],{"class":165},[106,84425,12428],{"class":116},[106,84427,84428],{"class":165},"count",[106,84430,12428],{"class":116},[106,84432,79809],{"class":165},[106,84434,12428],{"class":116},[106,84436,84437],{"class":165},"spec",[106,84439,12428],{"class":116},[106,84441,84442],{"class":165},"gift",[106,84444,79817],{"class":116},[106,84446,162],{"class":112},[106,84448,79822],{"class":116},[106,84450,84451],{"class":108,"line":33002},[106,84452,84453],{"class":175},"      \u002F\u002F 规格文字模块处理\n",[106,84455,84456,84458,84461,84463,84465,84467,84469,84471,84473,84475],{"class":108,"line":33008},[106,84457,58222],{"class":112},[106,84459,84460],{"class":165}," text",[106,84462,13557],{"class":112},[106,84464,81932],{"class":116},[106,84466,81935],{"class":1955},[106,84468,81938],{"class":116},[106,84470,74217],{"class":1955},[106,84472,117],{"class":116},[106,84474,81945],{"class":221},[106,84476,123],{"class":116},[106,84478,84479],{"class":108,"line":33014},[106,84480,84481],{"class":175},"      \u002F\u002F 处理赠品模块\n",[106,84483,84484,84486,84488,84490,84493,84495,84497,84499,84501,84504,84506,84508,84510,84512,84514,84517,84519,84522,84524,84526,84528,84530,84532,84534],{"class":108,"line":33025},[106,84485,58222],{"class":112},[106,84487,73913],{"class":165},[106,84489,13557],{"class":112},[106,84491,84492],{"class":116}," gift ",[106,84494,1103],{"class":112},[106,84496,83106],{"class":116},[106,84498,83109],{"class":1955},[106,84500,117],{"class":116},[106,84502,84503],{"class":221},"','",[106,84505,30820],{"class":116},[106,84507,74038],{"class":1955},[106,84509,117],{"class":116},[106,84511,79789],{"class":5209},[106,84513,79792],{"class":112},[106,84515,84516],{"class":221}," `\u003Cspan class=\"tag\">【赠品】${",[106,84518,79789],{"class":116},[106,84520,84521],{"class":221},"}\u003C\u002Fspan>`",[106,84523,30820],{"class":116},[106,84525,74217],{"class":1955},[106,84527,117],{"class":116},[106,84529,74222],{"class":221},[106,84531,13707],{"class":116},[106,84533,976],{"class":112},[106,84535,70098],{"class":221},[106,84537,84538],{"class":108,"line":33031},[106,84539,84540],{"class":175},"      \u002F\u002F 计算小计模块，保留两位小数,在计算有关小数的问题时，我们要将其转化为整数，然后再除回去，就可以避免小数计算时精度的问题\n",[106,84542,84543,84545,84548,84550,84553,84555,84557,84559,84562,84564,84566,84568,84571,84573,84575],{"class":108,"line":33037},[106,84544,58222],{"class":112},[106,84546,84547],{"class":165}," subtotal",[106,84549,13557],{"class":112},[106,84551,84552],{"class":116}," ((price ",[106,84554,572],{"class":112},[106,84556,5747],{"class":165},[106,84558,6511],{"class":112},[106,84560,84561],{"class":116}," count) ",[106,84563,701],{"class":112},[106,84565,5747],{"class":165},[106,84567,30820],{"class":116},[106,84569,84570],{"class":1955},"toFixed",[106,84572,117],{"class":116},[106,84574,194],{"class":165},[106,84576,123],{"class":116},[106,84578,84579],{"class":108,"line":33047},[106,84580,2392],{"emptyLinePlaceholder":33},[106,84582,84583,84585],{"class":108,"line":33053},[106,84584,73976],{"class":112},[106,84586,70162],{"class":221},[106,84588,84589],{"class":108,"line":33064},[106,84590,84591],{"class":221},"        \u003Cdiv class=\"item\">\n",[106,84593,84594,84597,84599],{"class":108,"line":33070},[106,84595,84596],{"class":221},"          \u003Cimg src=\"${",[106,84598,79814],{"class":116},[106,84600,79846],{"class":221},[106,84602,84603,84606,84608,84611,84613],{"class":108,"line":33080},[106,84604,84605],{"class":221},"          \u003Cp class=\"name\">${",[106,84607,79804],{"class":116},[106,84609,84610],{"class":221},"}${",[106,84612,1292],{"class":116},[106,84614,79856],{"class":221},[106,84616,84617,84620,84622],{"class":108,"line":33085},[106,84618,84619],{"class":221},"          \u003Cp class=\"spec\">${",[106,84621,5180],{"class":116},[106,84623,79856],{"class":221},[106,84625,84626,84629,84631,84633,84635,84637,84639,84641],{"class":108,"line":33091},[106,84627,84628],{"class":221},"          \u003Cp class=\"price\">${",[106,84630,79809],{"class":116},[106,84632,675],{"class":221},[106,84634,84570],{"class":1955},[106,84636,117],{"class":221},[106,84638,194],{"class":165},[106,84640,546],{"class":221},[106,84642,79856],{"class":221},[106,84644,84645,84648,84650],{"class":108,"line":33140},[106,84646,84647],{"class":221},"          \u003Cp class=\"count\">x${",[106,84649,84428],{"class":116},[106,84651,79856],{"class":221},[106,84653,84654,84657,84660],{"class":108,"line":33187},[106,84655,84656],{"class":221},"          \u003Cp class=\"sub-total\">${",[106,84658,84659],{"class":116},"subtotal",[106,84661,79856],{"class":221},[106,84663,84664],{"class":108,"line":33192},[106,84665,84666],{"class":221},"        \u003C\u002Fdiv> \n",[106,84668,84669],{"class":108,"line":33198},[106,84670,84671],{"class":221},"             `\n",[106,84673,84674,84677,84679,84681,84683],{"class":108,"line":33217},[106,84675,84676],{"class":116},"    }).",[106,84678,74217],{"class":1955},[106,84680,117],{"class":116},[106,84682,74222],{"class":221},[106,84684,123],{"class":116},[106,84686,84687],{"class":108,"line":33223},[106,84688,84689],{"class":175},"    \u002F\u002F 合计模块   prev为累计值   item为当前元素   为了保证精度也先把它转化为整数计算完再变回去\n",[106,84691,84692,84694,84696,84698,84700,84703,84705,84708,84710,84712,84714,84717,84720,84722,84725,84727,84729,84731,84734,84736,84738,84740,84742],{"class":108,"line":33243},[106,84693,11214],{"class":112},[106,84695,62779],{"class":165},[106,84697,13557],{"class":112},[106,84699,80042],{"class":116},[106,84701,84702],{"class":1955},"reduce",[106,84704,2368],{"class":116},[106,84706,84707],{"class":5209},"prev",[106,84709,12428],{"class":116},[106,84711,79789],{"class":5209},[106,84713,13707],{"class":116},[106,84715,84716],{"class":112},"=>",[106,84718,84719],{"class":116}," prev ",[106,84721,598],{"class":112},[106,84723,84724],{"class":116}," (item.price ",[106,84726,572],{"class":112},[106,84728,5747],{"class":165},[106,84730,6511],{"class":112},[106,84732,84733],{"class":116}," item.count) ",[106,84735,701],{"class":112},[106,84737,5747],{"class":165},[106,84739,12428],{"class":116},[106,84741,308],{"class":165},[106,84743,123],{"class":116},[106,84745,84746,84748,84750,84752,84755,84757,84759,84762,84764,84766,84768],{"class":108,"line":33249},[106,84747,52401],{"class":116},[106,84749,54393],{"class":1955},[106,84751,117],{"class":116},[106,84753,84754],{"class":221},"'.amount'",[106,84756,74243],{"class":116},[106,84758,162],{"class":112},[106,84760,84761],{"class":116}," total.",[106,84763,84570],{"class":1955},[106,84765,117],{"class":116},[106,84767,194],{"class":165},[106,84769,123],{"class":116},[106,84771,84772,84774,84776],{"class":108,"line":33255},[106,84773,52411],{"class":116},[106,84775,51807],{"class":51294},[106,84777,51301],{"class":116},[106,84779,84780,84782,84784],{"class":108,"line":33265},[106,84781,51779],{"class":116},[106,84783,51794],{"class":51294},[106,84785,51301],{"class":116},[106,84787,84788],{"class":108,"line":33270},[106,84789,2392],{"emptyLinePlaceholder":33},[106,84791,84792,84794,84796],{"class":108,"line":33276},[106,84793,51779],{"class":116},[106,84795,50629],{"class":51294},[106,84797,51301],{"class":116},[48,84799,84801],{"id":84800},"_411-编程思想","4.11 编程思想",[77,84803,84805],{"id":84804},"_4111-面向过程介绍","4.11.1 面向过程介绍",[14,84807,84808,84811],{},[266,84809,84810],{},"面向过程"," 就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次",[14,84813,84814],{},"调用就可以了",[14,84816,84817],{},[23,84818],{"alt":25,"src":84819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-278.png",[77,84821,84823],{"id":84822},"_4112-面向对象","4.11.2 面向对象",[14,84825,84826],{},"面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目",[14,84828,84829],{},[23,84830],{"alt":25,"src":84831},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-279.png",[14,84833,84834],{},"面向对象的特性：",[1124,84836,84837,84840,84843],{},[63,84838,84839],{},"封装性",[63,84841,84842],{},"继承性",[63,84844,84845],{},"多态性",[77,84847,84849],{"id":84848},"_4113-两者比较","4.11.3 两者比较",[14,84851,84852],{},[23,84853],{"alt":25,"src":84854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-280.png",[48,84856,84858],{"id":84857},"_412-构造函数回顾","4.12 构造函数回顾",[14,84860,84861],{},[23,84862],{"alt":25,"src":84863},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-281.png",[14,84865,84866],{},[23,84867],{"alt":25,"src":84868},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-282.png",[14,84870,84871],{},"构造函数在进行实例化创建对象的时候，会先创建一个空的对象，这个空的对象，属性和方法存在堆里，栈里存放存放堆里内容的地址，然后构造函数的this指向新对象；执行构造函数代码，修改this，添加新的属性；返回新对象，这样导致了一个问题，相同的方法在各自的堆里都存了一下，导致了内存的浪费问题",[14,84873,84874],{},[23,84875],{"alt":25,"src":84876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-283.png",[48,84878,84880],{"id":84879},"_413-原型","4.13 原型",[77,84882,84884],{"id":84883},"_4131-原型对象的认识","4.13.1 原型对象的认识",[14,84886,84887],{},"可以解决构造函数有时导致内存浪费问题，实现方法共享",[14,84889,84890],{},[23,84891],{"alt":25,"src":84892},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-284.png",[14,84894,84895],{},[23,84896],{"alt":25,"src":84897},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-285.png",[14,84899,84900],{},"原型是构造函数的属性，它也是一个对象",[14,84902,84903],{},"公共的属性写在构造函数里边，因为这个属性一会在实例化的时候会赋值",[14,84905,84906],{},"公共的方法写在原型对象身上，这样就可以一起使用了",[97,84908,84910],{"className":53061,"code":84909,"language":53063,"meta":25,"style":25},"\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",[103,84911,84912,84920,84925,84933,84938,84943,84948,84953,84958,84962,84966,84970,84975,84980,84984,84989,84994,84999,85004,85009,85013,85021],{"__ignoreMap":25},[106,84913,84914,84916,84918],{"class":108,"line":109},[106,84915,1027],{"class":116},[106,84917,51794],{"class":51294},[106,84919,51301],{"class":116},[106,84921,84922],{"class":108,"line":28},[106,84923,84924],{"class":175},"  \u003C!-- 构造函数  公共的属性和方法  封装到构造函数里面了 -->\n",[106,84926,84927,84929,84931],{"class":108,"line":1172},[106,84928,52138],{"class":116},[106,84930,51807],{"class":51294},[106,84932,51301],{"class":116},[106,84934,84935],{"class":108,"line":1187},[106,84936,84937],{"class":116},"    function Star(uname, age) {\n",[106,84939,84940],{"class":108,"line":1193},[106,84941,84942],{"class":116},"      this.uname = uname,\n",[106,84944,84945],{"class":108,"line":1207},[106,84946,84947],{"class":116},"        this.age = age\n",[106,84949,84950],{"class":108,"line":1213},[106,84951,84952],{"class":116},"      \u002F\u002F this.sing = function () {\n",[106,84954,84955],{"class":108,"line":1304},[106,84956,84957],{"class":116},"      \u002F\u002F   console.log('唱歌')\n",[106,84959,84960],{"class":108,"line":1310},[106,84961,2392],{"emptyLinePlaceholder":33},[106,84963,84964],{"class":108,"line":1322},[106,84965,60031],{"class":116},[106,84967,84968],{"class":108,"line":1604},[106,84969,2179],{"class":116},[106,84971,84972],{"class":108,"line":1609},[106,84973,84974],{"class":116},"    Star.prototype.sing = function () {\n",[106,84976,84977],{"class":108,"line":1615},[106,84978,84979],{"class":116},"      console.log('唱歌')\n",[106,84981,84982],{"class":108,"line":1620},[106,84983,2179],{"class":116},[106,84985,84986],{"class":108,"line":1634},[106,84987,84988],{"class":116},"    \u002F\u002F console.dir(Star.prototype)\n",[106,84990,84991],{"class":108,"line":1639},[106,84992,84993],{"class":116},"    const pink = new Star('pink', 18)\n",[106,84995,84996],{"class":108,"line":1645},[106,84997,84998],{"class":116},"    const red = new Star('red', 20)\n",[106,85000,85001],{"class":108,"line":1666},[106,85002,85003],{"class":116},"    pink.sing()\n",[106,85005,85006],{"class":108,"line":1671},[106,85007,85008],{"class":116},"    console.log(pink.sing = red.sing)   \u002F\u002F如果不使用圆型对象就是false，使用之后就是true,现在是true\n",[106,85010,85011],{"class":108,"line":1685},[106,85012,2392],{"emptyLinePlaceholder":33},[106,85014,85015,85017,85019],{"class":108,"line":1690},[106,85016,52411],{"class":116},[106,85018,51807],{"class":51294},[106,85020,51301],{"class":116},[106,85022,85023,85025,85027],{"class":108,"line":1719},[106,85024,51779],{"class":116},[106,85026,51794],{"class":51294},[106,85028,51301],{"class":116},[14,85030,85031],{},[23,85032],{"alt":25,"src":85033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-286.png",[97,85035,85037],{"className":53061,"code":85036,"language":53063,"meta":25,"style":25},"\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",[103,85038,85039,85047,85055,85060,85065,85070,85075,85079,85084,85089,85094,85098,85103,85107,85111,85116,85120,85128],{"__ignoreMap":25},[106,85040,85041,85043,85045],{"class":108,"line":109},[106,85042,1027],{"class":116},[106,85044,51794],{"class":51294},[106,85046,51301],{"class":116},[106,85048,85049,85051,85053],{"class":108,"line":28},[106,85050,52138],{"class":116},[106,85052,51807],{"class":51294},[106,85054,51301],{"class":116},[106,85056,85057],{"class":108,"line":1172},[106,85058,85059],{"class":116},"    let that\n",[106,85061,85062],{"class":108,"line":1187},[106,85063,85064],{"class":116},"    function Star(uname) {\n",[106,85066,85067],{"class":108,"line":1193},[106,85068,85069],{"class":116},"      this.uname = uname\n",[106,85071,85072],{"class":108,"line":1207},[106,85073,85074],{"class":116},"      that = this\n",[106,85076,85077],{"class":108,"line":1213},[106,85078,2179],{"class":116},[106,85080,85081],{"class":108,"line":1304},[106,85082,85083],{"class":116},"    \u002F\u002F 实例对象是 ldh\n",[106,85085,85086],{"class":108,"line":1310},[106,85087,85088],{"class":116},"    const ldh = new Star('刘德华')\n",[106,85090,85091],{"class":108,"line":1322},[106,85092,85093],{"class":116},"    console.log(that === ldh)    \u002F\u002Ftrue   说明构造函数里的this就是实例对象\n",[106,85095,85096],{"class":108,"line":1604},[106,85097,2392],{"emptyLinePlaceholder":33},[106,85099,85100],{"class":108,"line":1609},[106,85101,85102],{"class":116},"    Star.sing = function () {\n",[106,85104,85105],{"class":108,"line":1615},[106,85106,84979],{"class":116},[106,85108,85109],{"class":108,"line":1620},[106,85110,2179],{"class":116},[106,85112,85113],{"class":108,"line":1634},[106,85114,85115],{"class":116},"    ldh.sing()    \u002F\u002F原型对象里的函数this指向的也是实例对象\n",[106,85117,85118],{"class":108,"line":1639},[106,85119,2392],{"emptyLinePlaceholder":33},[106,85121,85122,85124,85126],{"class":108,"line":1645},[106,85123,52411],{"class":116},[106,85125,51807],{"class":51294},[106,85127,51301],{"class":116},[106,85129,85130,85132,85134],{"class":108,"line":1666},[106,85131,51779],{"class":116},[106,85133,51794],{"class":51294},[106,85135,51301],{"class":116},[14,85137,85138],{},"构造函数的this指向的是实例对象；",[14,85140,85141],{},"原型对象的this指向的也是实例对象（因为是实例对象去调用这个方法）",[77,85143,85145],{"id":85144},"_4132-数组扩展方法","4.13.2 数组扩展方法",[14,85147,85148],{},[23,85149],{"alt":25,"src":85150},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-287.png",[97,85152,85154],{"className":53061,"code":85153,"language":53063,"meta":25,"style":25},"\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",[103,85155,85156,85164,85172,85177,85182,85187,85192,85197,85202,85207,85212,85217,85222,85226,85231,85236,85241,85246,85250,85255,85260,85265,85270,85274,85279,85284,85289,85294,85298,85303,85307,85315],{"__ignoreMap":25},[106,85157,85158,85160,85162],{"class":108,"line":109},[106,85159,1027],{"class":116},[106,85161,51794],{"class":51294},[106,85163,51301],{"class":116},[106,85165,85166,85168,85170],{"class":108,"line":28},[106,85167,52138],{"class":116},[106,85169,51807],{"class":51294},[106,85171,51301],{"class":116},[106,85173,85174],{"class":108,"line":1172},[106,85175,85176],{"class":116},"    \u002F\u002F 注意数组不可以直接用min和max求最值\n",[106,85178,85179],{"class":108,"line":1187},[106,85180,85181],{"class":116},"    const arr = [1, 2, 3]\n",[106,85183,85184],{"class":108,"line":1193},[106,85185,85186],{"class":116},"    \u002F\u002F 自己定义数组的扩展方法\n",[106,85188,85189],{"class":108,"line":1207},[106,85190,85191],{"class":116},"    \u002F\u002F 1.我们定义的这个方法，任何一个数组实例对象都可以使用\n",[106,85193,85194],{"class":108,"line":1213},[106,85195,85196],{"class":116},"    \u002F\u002F 2.自定义的方法写到prototype身上\n",[106,85198,85199],{"class":108,"line":1304},[106,85200,85201],{"class":116},"    \u002F\u002F ①.最大值\n",[106,85203,85204],{"class":108,"line":1310},[106,85205,85206],{"class":116},"    Array.prototype.max = function () {\n",[106,85208,85209],{"class":108,"line":1322},[106,85210,85211],{"class":116},"      \u002F\u002F 使用展开运算符,这里不是剩余运算符   ...为展开运算符\n",[106,85213,85214],{"class":108,"line":1604},[106,85215,85216],{"class":116},"      return Math.max(...this)\n",[106,85218,85219],{"class":108,"line":1609},[106,85220,85221],{"class":116},"      \u002F\u002F 原型对象中函数的this指向的是实例对象   这里指向的是arr\n",[106,85223,85224],{"class":108,"line":1615},[106,85225,2179],{"class":116},[106,85227,85228],{"class":108,"line":1620},[106,85229,85230],{"class":116},"    console.log(arr.max())\n",[106,85232,85233],{"class":108,"line":1634},[106,85234,85235],{"class":116},"    \u002F\u002F ②最小值\n",[106,85237,85238],{"class":108,"line":1639},[106,85239,85240],{"class":116},"    Array.prototype.min = function () {\n",[106,85242,85243],{"class":108,"line":1645},[106,85244,85245],{"class":116},"      return Math.min(...this)\n",[106,85247,85248],{"class":108,"line":1666},[106,85249,2179],{"class":116},[106,85251,85252],{"class":108,"line":1671},[106,85253,85254],{"class":116},"    console.log(arr.min())\n",[106,85256,85257],{"class":108,"line":1685},[106,85258,85259],{"class":116},"    \u002F\u002F③求和\n",[106,85261,85262],{"class":108,"line":1690},[106,85263,85264],{"class":116},"    Array.prototype.sum = function () {\n",[106,85266,85267],{"class":108,"line":1719},[106,85268,85269],{"class":116},"      return this.reduce((prev, current) => prev + current, 0)\n",[106,85271,85272],{"class":108,"line":1724},[106,85273,2179],{"class":116},[106,85275,85276],{"class":108,"line":1741},[106,85277,85278],{"class":116},"    console.log(arr.sum())\n",[106,85280,85281],{"class":108,"line":1746},[106,85282,85283],{"class":116},"    \u002F\u002F ③排序\n",[106,85285,85286],{"class":108,"line":1751},[106,85287,85288],{"class":116},"    Array.prototype.rever = function () {\n",[106,85290,85291],{"class":108,"line":1756},[106,85292,85293],{"class":116},"      return this.reverse()\n",[106,85295,85296],{"class":108,"line":1770},[106,85297,2179],{"class":116},[106,85299,85300],{"class":108,"line":1775},[106,85301,85302],{"class":116},"    console.log(arr.rever())\n",[106,85304,85305],{"class":108,"line":2569},[106,85306,2392],{"emptyLinePlaceholder":33},[106,85308,85309,85311,85313],{"class":108,"line":2583},[106,85310,52411],{"class":116},[106,85312,51807],{"class":51294},[106,85314,51301],{"class":116},[106,85316,85317,85319,85321],{"class":108,"line":2591},[106,85318,51779],{"class":116},[106,85320,51794],{"class":51294},[106,85322,51301],{"class":116},[14,85324,85325],{},[23,85326],{"alt":25,"src":85327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-288.png",[77,85329,85331],{"id":85330},"_4133-constructor-属性","4.13.3 constructor 属性",[14,85333,85334],{},"每个原型对象里面都有个constructor 属性（constructor 构造函数）",[14,85336,85337],{},[23,85338],{"alt":25,"src":85339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-289.png",[97,85341,85343],{"className":53061,"code":85342,"language":53063,"meta":25,"style":25},"\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",[103,85344,85345,85353,85361,85366,85371,85375,85380,85385,85390,85398],{"__ignoreMap":25},[106,85346,85347,85349,85351],{"class":108,"line":109},[106,85348,1027],{"class":116},[106,85350,51794],{"class":51294},[106,85352,51301],{"class":116},[106,85354,85355,85357,85359],{"class":108,"line":28},[106,85356,52138],{"class":116},[106,85358,51807],{"class":51294},[106,85360,51301],{"class":116},[106,85362,85363],{"class":108,"line":1172},[106,85364,85365],{"class":116},"    \u002F\u002Fconstructor   单词是构造函数的意思\n",[106,85367,85368],{"class":108,"line":1187},[106,85369,85370],{"class":116},"    function Star() {\n",[106,85372,85373],{"class":108,"line":1193},[106,85374,2179],{"class":116},[106,85376,85377],{"class":108,"line":1207},[106,85378,85379],{"class":116},"    const ldh = new Star()\n",[106,85381,85382],{"class":108,"line":1213},[106,85383,85384],{"class":116},"    console.log(Star.prototype)\n",[106,85386,85387],{"class":108,"line":1304},[106,85388,85389],{"class":116},"    console.log(Star.prototype.constructor === Star)\n",[106,85391,85392,85394,85396],{"class":108,"line":1310},[106,85393,52411],{"class":116},[106,85395,51807],{"class":51294},[106,85397,51301],{"class":116},[106,85399,85400,85402,85404],{"class":108,"line":1322},[106,85401,51779],{"class":116},[106,85403,51794],{"class":51294},[106,85405,51301],{"class":116},[14,85407,85408],{},[23,85409],{"alt":25,"src":85410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-290.png",[14,85412,85413],{},"问题：如果很多的公共方法的话,那么要写太多了,较为繁琐,所以我们考虑将这些方法塞一个对象中，例：",[97,85415,85417],{"className":53061,"code":85416,"language":53063,"meta":25,"style":25},"  \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",[103,85418,85419,85427,85431,85435,85439,85444,85449,85454,85458,85463,85468,85473,85478,85483,85488,85492,85496,85501,85506,85511,85515,85520,85525,85529,85533,85537],{"__ignoreMap":25},[106,85420,85421,85423,85425],{"class":108,"line":109},[106,85422,52138],{"class":116},[106,85424,51807],{"class":51294},[106,85426,51301],{"class":116},[106,85428,85429],{"class":108,"line":28},[106,85430,85365],{"class":116},[106,85432,85433],{"class":108,"line":1172},[106,85434,85370],{"class":116},[106,85436,85437],{"class":108,"line":1187},[106,85438,2179],{"class":116},[106,85440,85441],{"class":108,"line":1193},[106,85442,85443],{"class":116},"    \u002F\u002F const ldh = new Star()\n",[106,85445,85446],{"class":108,"line":1207},[106,85447,85448],{"class":116},"    \u002F\u002F console.log(Star.prototype)\n",[106,85450,85451],{"class":108,"line":1213},[106,85452,85453],{"class":116},"    \u002F\u002F console.log(Star.prototype.constructor === Star)\n",[106,85455,85456],{"class":108,"line":1304},[106,85457,2392],{"emptyLinePlaceholder":33},[106,85459,85460],{"class":108,"line":1310},[106,85461,85462],{"class":116},"    \u002F\u002F 如果很多的公共方法的话,那么要写太多了,较为繁琐\n",[106,85464,85465],{"class":108,"line":1322},[106,85466,85467],{"class":116},"    \u002F\u002F Star.prototype.sing = function () {\n",[106,85469,85470],{"class":108,"line":1604},[106,85471,85472],{"class":116},"    \u002F\u002F   console.log('唱歌')\n",[106,85474,85475],{"class":108,"line":1609},[106,85476,85477],{"class":116},"    \u002F\u002F }\n",[106,85479,85480],{"class":108,"line":1615},[106,85481,85482],{"class":116},"    \u002F\u002F Star.prototype.dance = function () {\n",[106,85484,85485],{"class":108,"line":1620},[106,85486,85487],{"class":116},"    \u002F\u002F   console.log('跳舞')\n",[106,85489,85490],{"class":108,"line":1634},[106,85491,85477],{"class":116},[106,85493,85494],{"class":108,"line":1639},[106,85495,85384],{"class":116},[106,85497,85498],{"class":108,"line":1645},[106,85499,85500],{"class":116},"    Star.prototype = {\n",[106,85502,85503],{"class":108,"line":1666},[106,85504,85505],{"class":116},"      sing: function () {\n",[106,85507,85508],{"class":108,"line":1671},[106,85509,85510],{"class":116},"        console.log('唱歌')\n",[106,85512,85513],{"class":108,"line":1685},[106,85514,77886],{"class":116},[106,85516,85517],{"class":108,"line":1690},[106,85518,85519],{"class":116},"      dance: function () {\n",[106,85521,85522],{"class":108,"line":1719},[106,85523,85524],{"class":116},"        console.log('跳舞')\n",[106,85526,85527],{"class":108,"line":1724},[106,85528,52392],{"class":116},[106,85530,85531],{"class":108,"line":1741},[106,85532,2179],{"class":116},[106,85534,85535],{"class":108,"line":1746},[106,85536,85384],{"class":116},[106,85538,85539,85541,85543],{"class":108,"line":1751},[106,85540,52411],{"class":116},[106,85542,51807],{"class":51294},[106,85544,51301],{"class":116},[14,85546,85547],{},"进行输出结果后会发现：",[14,85549,85550],{},[23,85551],{"alt":25,"src":85552},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-291.png",[14,85554,85555],{},"将方法塞进这个原型对象中，打印后没有constructor，也就是说这个原型对象是谁的不知道了，因为这里进行了赋值操作，把以前的内容直接给覆盖了，赋值把以前的原型对象给覆盖了，指向了现在自己创建的这个对象了",[14,85557,85558],{},"所以，要重新指回创造这个原型对象的构造函数",[97,85560,85562],{"className":71207,"code":85561,"language":71209,"meta":25,"style":25},"Star.prototype = {\n\u002F\u002F 要重新指回创造这个原型对象的构造函数\n  constructor: Star,\n  sing: function () {\n    console.log('唱歌')\n   },\n   dance: function () {\n     console.log('跳舞')\n   }\n}\n",[103,85563,85564,85578,85583,85588,85599,85612,85617,85628,85642,85646],{"__ignoreMap":25},[106,85565,85566,85569,85571,85574,85576],{"class":108,"line":109},[106,85567,85568],{"class":165},"Star",[106,85570,675],{"class":116},[106,85572,85573],{"class":165},"prototype",[106,85575,13557],{"class":112},[106,85577,15565],{"class":116},[106,85579,85580],{"class":108,"line":28},[106,85581,85582],{"class":175},"\u002F\u002F 要重新指回创造这个原型对象的构造函数\n",[106,85584,85585],{"class":108,"line":1172},[106,85586,85587],{"class":116},"  constructor: Star,\n",[106,85589,85590,85593,85595,85597],{"class":108,"line":1187},[106,85591,85592],{"class":1955},"  sing",[106,85594,51431],{"class":116},[106,85596,54443],{"class":112},[106,85598,54446],{"class":116},[106,85600,85601,85603,85605,85607,85610],{"class":108,"line":1193},[106,85602,73747],{"class":116},[106,85604,58241],{"class":1955},[106,85606,117],{"class":116},[106,85608,85609],{"class":221},"'唱歌'",[106,85611,123],{"class":116},[106,85613,85614],{"class":108,"line":1207},[106,85615,85616],{"class":116},"   },\n",[106,85618,85619,85622,85624,85626],{"class":108,"line":1213},[106,85620,85621],{"class":1955},"   dance",[106,85623,51431],{"class":116},[106,85625,54443],{"class":112},[106,85627,54446],{"class":116},[106,85629,85630,85633,85635,85637,85640],{"class":108,"line":1304},[106,85631,85632],{"class":116},"     console.",[106,85634,58241],{"class":1955},[106,85636,117],{"class":116},[106,85638,85639],{"class":221},"'跳舞'",[106,85641,123],{"class":116},[106,85643,85644],{"class":108,"line":1310},[106,85645,4301],{"class":116},[106,85647,85648],{"class":108,"line":1322},[106,85649,1557],{"class":116},[14,85651,85652],{},[23,85653],{"alt":25,"src":85654},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-292.png",[14,85656,85657],{},"总结1：",[14,85659,85660],{},"如果有多个对象的方法，我们可以给原型对象采取对象形式赋值，但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象 constructor 就不再指向当前构造函数了",[14,85662,85663],{},"此时，我们可以在修改后的原型对象中，添加一个 constructor 指向原来的构造函数",[14,85665,85666],{},"constructor指的是他的来源",[14,85668,85669],{},[23,85670],{"alt":25,"src":85671},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-293.png",[14,85673,85674],{},[23,85675],{"alt":25,"src":85676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-294.png",[14,85678,85679],{},"总结2：",[14,85681,85682],{},[23,85683],{"alt":25,"src":85684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-295.png",[14,85686,85687],{},[23,85688],{"alt":25,"src":85689},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-296.png",[14,85691,85692],{},[23,85693],{"alt":25,"src":85694},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-297.png",[77,85696,85698],{"id":85697},"_4134-对象原型","4.13.4 对象原型",[14,85700,85701],{},"解释实例对象可以访问原型对象里边的方法的问题（解释实例对象如何拿到方法的问题）",[14,85703,85704],{},"对象原型就是__proto__这个属性",[14,85706,85707],{},[23,85708],{"alt":25,"src":85709},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-298.png",[14,85711,85712],{},[23,85713],{"alt":25,"src":85714},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-299.png",[14,85716,85717],{},[23,85718],{"alt":25,"src":85719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-300.png",[14,85721,85722],{},[23,85723],{"alt":25,"src":85724},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-301.png",[97,85726,85728],{"className":53061,"code":85727,"language":53063,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    function Star() {\n    }\n    const ldh = new Star()\n    console.log(ldh)\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[103,85729,85730,85738,85746,85750,85754,85758,85763,85771],{"__ignoreMap":25},[106,85731,85732,85734,85736],{"class":108,"line":109},[106,85733,1027],{"class":116},[106,85735,51794],{"class":51294},[106,85737,51301],{"class":116},[106,85739,85740,85742,85744],{"class":108,"line":28},[106,85741,52138],{"class":116},[106,85743,51807],{"class":51294},[106,85745,51301],{"class":116},[106,85747,85748],{"class":108,"line":1172},[106,85749,85370],{"class":116},[106,85751,85752],{"class":108,"line":1187},[106,85753,2179],{"class":116},[106,85755,85756],{"class":108,"line":1193},[106,85757,85379],{"class":116},[106,85759,85760],{"class":108,"line":1207},[106,85761,85762],{"class":116},"    console.log(ldh)\n",[106,85764,85765,85767,85769],{"class":108,"line":1213},[106,85766,52411],{"class":116},[106,85768,51807],{"class":51294},[106,85770,51301],{"class":116},[106,85772,85773,85775,85777],{"class":108,"line":1304},[106,85774,51779],{"class":116},[106,85776,51794],{"class":51294},[106,85778,51301],{"class":116},[14,85780,85781],{},"__proto__是非标准属性，在浏览器中的写法可能不同，下面是谷歌浏览器的表示方法，最新的浏览器基本上都是使用的下面这种方式，就理解为两个是相同的就可以，这个是只读的，不可以进行修改",[14,85783,85784],{},"原型对象中[[Prototype]]只是现在大部分浏览器对对象原型的展示，以前浏览器使用的是__proto__，但是要访问这个原型对象的话，还是得使用__proto__",[14,85786,85787],{},[23,85788],{"alt":25,"src":85789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-302.png",[14,85791,85792],{},"理解总结: 对象原型__proto__指向该构造函数的原型对象",[14,85794,85795],{},"对象原型指向原型对象",[14,85797,85798],{},[23,85799],{"alt":25,"src":85800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-303.png",[14,85802,85803],{},[23,85804],{"alt":25,"src":85805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-304.png",[14,85807,85808],{},[23,85809],{"alt":25,"src":85810},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-305.png",[77,85812,85814],{"id":85813},"_4135-构造函数对象原型和原型对象总结","4.13.5 构造函数，对象原型和原型对象总结",[14,85816,85817],{},[23,85818],{"alt":25,"src":85819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-306.png",[60,85821,85822,85825,85828,85831],{},[63,85823,85824],{},"构造函数通过new的形式实例化得到实例对象",[63,85826,85827],{},"每一个实例对象中都有一个__proto__属性，这个属性中有constructor属性，指向构造函数",[63,85829,85830],{},"构造函数公共的属性和方法放在原型对象中，这个原型对象（prototype）是构造函数本身的一个属性，它指向的是一个对象。只要创建一个构造函数就会自动产生一个原型对象。原型对象属于构造函数，构造函数通过prototype引用它，原型对象有一个constructor属性，指回构造函数",[63,85832,85833],{},"每个实例对象的__proto__属性都会指向原型对象（prototype）",[14,85835,85836],{},[23,85837],{"alt":25,"src":85838},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-307.png",[14,85840,85841],{},"题目梳理：",[14,85843,85844],{},[23,85845],{"alt":25,"src":85846},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-308.png",[77,85848,85850],{"id":85849},"_4136-原型继承","4.13.6 原型继承",[14,85852,85853],{},[23,85854],{"alt":25,"src":85855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-309.png",[14,85857,85858],{},[23,85859],{"alt":25,"src":85860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-310.png",[14,85862,85863],{},[23,85864],{"alt":25,"src":85865},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-311.png",[14,85867,85868],{},[23,85869],{"alt":25,"src":85870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-312.png",[14,85872,85873],{},[23,85874],{"alt":25,"src":85875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-313.png",[14,85877,85878],{},[23,85879],{"alt":25,"src":85880},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-314.png",[14,85882,85883],{},[23,85884],{"alt":25,"src":85885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-315.png",[14,85887,85888],{},[23,85889],{"alt":25,"src":85890},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-316.png",[14,85892,85893],{},"回顾：构造函数每次new得到对象都是不同的",[77,85895,85897],{"id":85896},"_4137-原型链","4.13.7 原型链",[14,85899,85900],{},[23,85901],{"alt":25,"src":85902},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-317.png",[14,85904,85905],{},"只要是对象就有对象原型，它可以通过__proto__属性来访问原型对象，获取公共的属性和方法，然后每个原型对象都会有一个[[prototype]]，它是个指针，用来查看它自己的原型对象的信息，然后会提供一个__proto__的属性以供对象原型来访问，__proto__这个属性就理解为是对象原型，这个对象原型就在对象实例中。其实__proto__就是浏览器给开发者的接口，用来访问[[prototype]]",[14,85907,85908],{},"对象原型指向原型对象，这个原型对象本身就含有对象原型，因为所有对象都有一个对象原型__proto__，所以这个原型对象可以通过它内部的对象原型__proto__指向他自己的原型对象",[14,85910,85911],{},"大哥是Object",[14,85913,85914],{},[23,85915],{"alt":25,"src":85916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-318.png",[14,85918,85919],{},[23,85920],{"alt":25,"src":85921},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-319.png",[14,85923,85924],{},"ldh属于构造函数的，由这个构造函数构成的，只要是在这个链上就是true",[14,85926,85927],{},"万物皆对象",[77,85929,85931],{"id":85930},"_4138-消息提示对象封装","4.13.8 消息提示对象封装",[14,85933,85934],{},"模态框",[14,85936,85937],{},"以后遇见这个效果直接使用这个就行",[14,85939,85940],{},[23,85941],{"alt":25,"src":85942},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-320.png",[14,85944,85945],{},[23,85946],{"alt":25,"src":85947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-321.png",[14,85949,85950],{},[23,85951],{"alt":25,"src":85952},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-322.png",[14,85954,85955],{},[23,85956],{"alt":25,"src":85957},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-323.png",[14,85959,85960],{},"补充知识点：",[60,85962,85963],{},[63,85964,85965],{},"append()",[14,85967,85968],{},[23,85969],{"alt":25,"src":85970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-324.png",[97,85972,85974],{"className":50627,"code":85973,"language":50629,"meta":25,"style":25},"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",[103,85975,85976,85981,85986,85991,85995,85999,86003,86008,86013,86018,86022],{"__ignoreMap":25},[106,85977,85978],{"class":108,"line":109},[106,85979,85980],{"class":116},"append(param1)\n",[106,85982,85983],{"class":108,"line":28},[106,85984,85985],{"class":116},"append(param1, param2)\n",[106,85987,85988],{"class":108,"line":1172},[106,85989,85990],{"class":116},"append(param1, param2, \u002F* …, *\u002F paramN)\n",[106,85992,85993],{"class":108,"line":1187},[106,85994,2392],{"emptyLinePlaceholder":33},[106,85996,85997],{"class":108,"line":1193},[106,85998,2392],{"emptyLinePlaceholder":33},[106,86000,86001],{"class":108,"line":1207},[106,86002,2392],{"emptyLinePlaceholder":33},[106,86004,86005],{"class":108,"line":1213},[106,86006,86007],{"class":116},"let div = document.createElement(\"div\");\n",[106,86009,86010],{"class":108,"line":1304},[106,86011,86012],{"class":116},"let p = document.createElement(\"p\");\n",[106,86014,86015],{"class":108,"line":1310},[106,86016,86017],{"class":116},"div.append(p);\n",[106,86019,86020],{"class":108,"line":1322},[106,86021,2392],{"emptyLinePlaceholder":33},[106,86023,86024,86027,86029],{"class":108,"line":1604},[106,86025,86026],{"class":116},"console.log(div.childNodes); \u002F\u002F NodeList [ \u003C",[106,86028,14],{"class":51294},[106,86030,86031],{"class":116},"> ]\n",[60,86033,86034],{"start":28},[63,86035,86036],{},"remove()",[14,86038,86039],{},"自己删自己",[14,86041,86042],{},[23,86043],{"alt":25,"src":86044},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-325.png",[97,86046,86048],{"className":50627,"code":86047,"language":50629,"meta":25,"style":25},"\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",[103,86049,86050,86060,86074,86078,86086,86100,86120,86132,86140,86147,86159,86172,86207,86219,86230,86242,86254,86266,86293,86303,86307,86311,86320,86332,86346,86356,86368,86372,86376,86386,86397,86407,86417,86430,86443,86453,86457,86461,86470,86480,86492,86496,86500,86509,86519,86529,86541,86545,86549,86559,86575,86586,86596,86606,86618,86630,86642,86646,86650,86663,86674,86678,86686,86694,86698,86706,86726,86746,86754,86759,86785,86790,86795,86814,86819,86831,86836,86847,86857,86867,86872,86877,86881,86886,86891,86896,86916,86921,86941,86946,86960,86965,86970,86975,86991,86995,87000,87029,87034,87039,87044,87055,87059,87063,87067,87072,87097,87102,87127,87132,87141,87145,87150,87175,87179,87204,87208,87217,87221,87226,87244,87254,87258,87266,87274,87278],{"__ignoreMap":25},[106,86051,86052,86054,86056,86058],{"class":108,"line":109},[106,86053,51291],{"class":116},[106,86055,51295],{"class":51294},[106,86057,51298],{"class":1955},[106,86059,51301],{"class":116},[106,86061,86062,86064,86066,86068,86070,86072],{"class":108,"line":28},[106,86063,1027],{"class":116},[106,86065,50629],{"class":51294},[106,86067,51310],{"class":1955},[106,86069,162],{"class":116},[106,86071,51315],{"class":221},[106,86073,51301],{"class":116},[106,86075,86076],{"class":108,"line":1172},[106,86077,2392],{"emptyLinePlaceholder":33},[106,86079,86080,86082,86084],{"class":108,"line":1187},[106,86081,1027],{"class":116},[106,86083,51328],{"class":51294},[106,86085,51301],{"class":116},[106,86087,86088,86090,86092,86094,86096,86098],{"class":108,"line":1193},[106,86089,52138],{"class":116},[106,86091,51338],{"class":51294},[106,86093,51341],{"class":1955},[106,86095,162],{"class":116},[106,86097,51346],{"class":221},[106,86099,51301],{"class":116},[106,86101,86102,86104,86106,86108,86110,86112,86114,86116,86118],{"class":108,"line":1207},[106,86103,52138],{"class":116},[106,86105,51338],{"class":51294},[106,86107,14913],{"class":1955},[106,86109,162],{"class":116},[106,86111,51385],{"class":221},[106,86113,51365],{"class":1955},[106,86115,162],{"class":116},[106,86117,51392],{"class":221},[106,86119,51301],{"class":116},[106,86121,86122,86124,86126,86128,86130],{"class":108,"line":1213},[106,86123,52138],{"class":116},[106,86125,51401],{"class":51294},[106,86127,51404],{"class":116},[106,86129,51401],{"class":51294},[106,86131,51301],{"class":116},[106,86133,86134,86136,86138],{"class":108,"line":1304},[106,86135,52138],{"class":116},[106,86137,5119],{"class":51294},[106,86139,51301],{"class":116},[106,86141,86142,86145],{"class":108,"line":1310},[106,86143,86144],{"class":1955},"    .modal",[106,86146,15565],{"class":116},[106,86148,86149,86151,86153,86155,86157],{"class":108,"line":1322},[106,86150,54765],{"class":165},[106,86152,51431],{"class":116},[106,86154,3965],{"class":165},[106,86156,51486],{"class":112},[106,86158,1283],{"class":116},[106,86160,86161,86164,86166,86168,86170],{"class":108,"line":1604},[106,86162,86163],{"class":165},"      min-height",[106,86165,51431],{"class":116},[106,86167,428],{"class":165},[106,86169,51486],{"class":112},[106,86171,1283],{"class":116},[106,86173,86174,86176,86178,86180,86182,86184,86186,86188,86190,86192,86194,86196,86198,86200,86202,86205],{"class":108,"line":1609},[106,86175,78744],{"class":165},[106,86177,51431],{"class":116},[106,86179,308],{"class":165},[106,86181,4085],{"class":165},[106,86183,2030],{"class":165},[106,86185,51486],{"class":112},[106,86187,78761],{"class":165},[106,86189,117],{"class":116},[106,86191,308],{"class":165},[106,86193,12428],{"class":116},[106,86195,308],{"class":165},[106,86197,12428],{"class":116},[106,86199,308],{"class":165},[106,86201,12428],{"class":116},[106,86203,86204],{"class":165},"0.1",[106,86206,2711],{"class":116},[106,86208,86209,86211,86213,86215,86217],{"class":108,"line":1615},[106,86210,55128],{"class":165},[106,86212,51431],{"class":116},[106,86214,410],{"class":165},[106,86216,51486],{"class":112},[106,86218,1283],{"class":116},[106,86220,86221,86223,86225,86228],{"class":108,"line":1620},[106,86222,54753],{"class":165},[106,86224,51431],{"class":116},[106,86226,86227],{"class":165},"fixed",[106,86229,1283],{"class":116},[106,86231,86232,86235,86237,86240],{"class":108,"line":1634},[106,86233,86234],{"class":165},"      z-index",[106,86236,51431],{"class":116},[106,86238,86239],{"class":165},"999",[106,86241,1283],{"class":116},[106,86243,86244,86246,86248,86250,86252],{"class":108,"line":1639},[106,86245,54832],{"class":165},[106,86247,51431],{"class":116},[106,86249,773],{"class":165},[106,86251,445],{"class":112},[106,86253,1283],{"class":116},[106,86255,86256,86258,86260,86262,86264],{"class":108,"line":1645},[106,86257,54941],{"class":165},[106,86259,51431],{"class":116},[106,86261,773],{"class":165},[106,86263,445],{"class":112},[106,86265,1283],{"class":116},[106,86267,86268,86270,86272,86274,86276,86279,86281,86283,86285,86287,86289,86291],{"class":108,"line":1666},[106,86269,78785],{"class":165},[106,86271,51431],{"class":116},[106,86273,78790],{"class":165},[106,86275,117],{"class":116},[106,86277,86278],{"class":165},"-50",[106,86280,445],{"class":112},[106,86282,12428],{"class":116},[106,86284,86278],{"class":165},[106,86286,445],{"class":112},[106,86288,12428],{"class":116},[106,86290,308],{"class":165},[106,86292,2711],{"class":116},[106,86294,86295,86297,86299,86301],{"class":108,"line":1671},[106,86296,54878],{"class":165},[106,86298,51431],{"class":116},[106,86300,60836],{"class":165},[106,86302,1283],{"class":116},[106,86304,86305],{"class":108,"line":1685},[106,86306,2179],{"class":116},[106,86308,86309],{"class":108,"line":1690},[106,86310,2392],{"emptyLinePlaceholder":33},[106,86312,86313,86315,86318],{"class":108,"line":1719},[106,86314,86144],{"class":1955},[106,86316,86317],{"class":1955}," .header",[106,86319,15565],{"class":116},[106,86321,86322,86324,86326,86328,86330],{"class":108,"line":1724},[106,86323,57353],{"class":165},[106,86325,51431],{"class":116},[106,86327,518],{"class":165},[106,86329,51486],{"class":112},[106,86331,1283],{"class":116},[106,86333,86334,86336,86338,86340,86342,86344],{"class":108,"line":1741},[106,86335,54689],{"class":165},[106,86337,51431],{"class":116},[106,86339,308],{"class":165},[106,86341,2030],{"class":165},[106,86343,51486],{"class":112},[106,86345,1283],{"class":116},[106,86347,86348,86350,86352,86354],{"class":108,"line":1746},[106,86349,54753],{"class":165},[106,86351,51431],{"class":116},[106,86353,54758],{"class":165},[106,86355,1283],{"class":116},[106,86357,86358,86360,86362,86364,86366],{"class":108,"line":1751},[106,86359,54916],{"class":165},[106,86361,51431],{"class":116},[106,86363,817],{"class":165},[106,86365,51486],{"class":112},[106,86367,1283],{"class":116},[106,86369,86370],{"class":108,"line":1756},[106,86371,2179],{"class":116},[106,86373,86374],{"class":108,"line":1770},[106,86375,2392],{"emptyLinePlaceholder":33},[106,86377,86378,86380,86382,86384],{"class":108,"line":1775},[106,86379,86144],{"class":1955},[106,86381,86317],{"class":1955},[106,86383,3024],{"class":51294},[106,86385,15565],{"class":116},[106,86387,86388,86391,86393,86395],{"class":108,"line":2569},[106,86389,86390],{"class":165},"      font-style",[106,86392,51431],{"class":116},[106,86394,63835],{"class":165},[106,86396,1283],{"class":116},[106,86398,86399,86401,86403,86405],{"class":108,"line":2583},[106,86400,57410],{"class":165},[106,86402,51431],{"class":116},[106,86404,62064],{"class":165},[106,86406,1283],{"class":116},[106,86408,86409,86411,86413,86415],{"class":108,"line":2591},[106,86410,54753],{"class":165},[106,86412,51431],{"class":116},[106,86414,54825],{"class":165},[106,86416,1283],{"class":116},[106,86418,86419,86422,86424,86426,86428],{"class":108,"line":2596},[106,86420,86421],{"class":165},"      right",[106,86423,51431],{"class":116},[106,86425,692],{"class":165},[106,86427,51486],{"class":112},[106,86429,1283],{"class":116},[106,86431,86432,86434,86436,86439,86441],{"class":108,"line":2602},[106,86433,54941],{"class":165},[106,86435,51431],{"class":116},[106,86437,86438],{"class":165},"-2",[106,86440,51486],{"class":112},[106,86442,1283],{"class":116},[106,86444,86445,86447,86449,86451],{"class":108,"line":2608},[106,86446,62019],{"class":165},[106,86448,51431],{"class":116},[106,86450,62024],{"class":165},[106,86452,1283],{"class":116},[106,86454,86455],{"class":108,"line":2613},[106,86456,2179],{"class":116},[106,86458,86459],{"class":108,"line":7941},[106,86460,2392],{"emptyLinePlaceholder":33},[106,86462,86463,86465,86468],{"class":108,"line":7965},[106,86464,86144],{"class":1955},[106,86466,86467],{"class":1955}," .body",[106,86469,15565],{"class":116},[106,86471,86472,86474,86476,86478],{"class":108,"line":7970},[106,86473,57280],{"class":165},[106,86475,51431],{"class":116},[106,86477,51586],{"class":165},[106,86479,1283],{"class":116},[106,86481,86482,86484,86486,86488,86490],{"class":108,"line":7976},[106,86483,54689],{"class":165},[106,86485,51431],{"class":116},[106,86487,563],{"class":165},[106,86489,51486],{"class":112},[106,86491,1283],{"class":116},[106,86493,86494],{"class":108,"line":8003},[106,86495,2179],{"class":116},[106,86497,86498],{"class":108,"line":8008},[106,86499,2392],{"emptyLinePlaceholder":33},[106,86501,86502,86504,86507],{"class":108,"line":8014},[106,86503,86144],{"class":1955},[106,86505,86506],{"class":1955}," .footer",[106,86508,15565],{"class":116},[106,86510,86511,86513,86515,86517],{"class":108,"line":8026},[106,86512,55003],{"class":165},[106,86514,51431],{"class":116},[106,86516,51471],{"class":165},[106,86518,1283],{"class":116},[106,86520,86521,86523,86525,86527],{"class":108,"line":8038},[106,86522,55014],{"class":165},[106,86524,51431],{"class":116},[106,86526,51574],{"class":165},[106,86528,1283],{"class":116},[106,86530,86531,86533,86535,86537,86539],{"class":108,"line":8050},[106,86532,54689],{"class":165},[106,86534,51431],{"class":116},[106,86536,563],{"class":165},[106,86538,51486],{"class":112},[106,86540,1283],{"class":116},[106,86542,86543],{"class":108,"line":9709},[106,86544,2179],{"class":116},[106,86546,86547],{"class":108,"line":9734},[106,86548,2392],{"emptyLinePlaceholder":33},[106,86550,86551,86553,86555,86557],{"class":108,"line":9757},[106,86552,86144],{"class":1955},[106,86554,86506],{"class":1955},[106,86556,1391],{"class":51294},[106,86558,15565],{"class":116},[106,86560,86561,86563,86565,86567,86569,86571,86573],{"class":108,"line":9781},[106,86562,54689],{"class":165},[106,86564,51431],{"class":116},[106,86566,188],{"class":165},[106,86568,51486],{"class":112},[106,86570,2075],{"class":165},[106,86572,51486],{"class":112},[106,86574,1283],{"class":116},[106,86576,86577,86579,86581,86584],{"class":108,"line":9786},[106,86578,61715],{"class":165},[106,86580,51431],{"class":116},[106,86582,86583],{"class":165},"#ccc",[106,86585,1283],{"class":116},[106,86587,86588,86590,86592,86594],{"class":108,"line":9791},[106,86589,63964],{"class":165},[106,86591,51431],{"class":116},[106,86593,54731],{"class":165},[106,86595,1283],{"class":116},[106,86597,86598,86600,86602,86604],{"class":108,"line":9796},[106,86599,57410],{"class":165},[106,86601,51431],{"class":116},[106,86603,60836],{"class":165},[106,86605,1283],{"class":116},[106,86607,86608,86610,86612,86614,86616],{"class":108,"line":9805},[106,86609,55128],{"class":165},[106,86611,51431],{"class":116},[106,86613,194],{"class":165},[106,86615,51486],{"class":112},[106,86617,1283],{"class":116},[106,86619,86620,86622,86624,86626,86628],{"class":108,"line":9810},[106,86621,61744],{"class":165},[106,86623,51431],{"class":116},[106,86625,563],{"class":165},[106,86627,51486],{"class":112},[106,86629,1283],{"class":116},[106,86631,86632,86634,86636,86638,86640],{"class":108,"line":9816},[106,86633,54916],{"class":165},[106,86635,51431],{"class":116},[106,86637,666],{"class":165},[106,86639,51486],{"class":112},[106,86641,1283],{"class":116},[106,86643,86644],{"class":108,"line":9837},[106,86645,2179],{"class":116},[106,86647,86648],{"class":108,"line":9843},[106,86649,2392],{"emptyLinePlaceholder":33},[106,86651,86652,86654,86656,86658,86661],{"class":108,"line":9857},[106,86653,86144],{"class":1955},[106,86655,86506],{"class":1955},[106,86657,1391],{"class":51294},[106,86659,86660],{"class":1955},".submit",[106,86662,15565],{"class":116},[106,86664,86665,86667,86669,86672],{"class":108,"line":9863},[106,86666,54878],{"class":165},[106,86668,51431],{"class":116},[106,86670,86671],{"class":165},"#369",[106,86673,1283],{"class":116},[106,86675,86676],{"class":108,"line":9890},[106,86677,2179],{"class":116},[106,86679,86680,86682,86684],{"class":108,"line":9899},[106,86681,52411],{"class":116},[106,86683,5119],{"class":51294},[106,86685,51301],{"class":116},[106,86687,86688,86690,86692],{"class":108,"line":9905},[106,86689,51779],{"class":116},[106,86691,51328],{"class":51294},[106,86693,51301],{"class":116},[106,86695,86696],{"class":108,"line":9913},[106,86697,2392],{"emptyLinePlaceholder":33},[106,86699,86700,86702,86704],{"class":108,"line":9918},[106,86701,1027],{"class":116},[106,86703,51794],{"class":51294},[106,86705,51301],{"class":116},[106,86707,86708,86710,86712,86714,86716,86719,86722,86724],{"class":108,"line":16597},[106,86709,52138],{"class":116},[106,86711,53881],{"class":51294},[106,86713,14952],{"class":1955},[106,86715,162],{"class":116},[106,86717,86718],{"class":221},"\"delete\"",[106,86720,86721],{"class":116},">删除\u003C\u002F",[106,86723,53881],{"class":51294},[106,86725,51301],{"class":116},[106,86727,86728,86730,86732,86734,86736,86739,86742,86744],{"class":108,"line":16603},[106,86729,52138],{"class":116},[106,86731,53881],{"class":51294},[106,86733,14952],{"class":1955},[106,86735,162],{"class":116},[106,86737,86738],{"class":221},"\"login\"",[106,86740,86741],{"class":116},">登录\u003C\u002F",[106,86743,53881],{"class":51294},[106,86745,51301],{"class":116},[106,86747,86748,86750,86752],{"class":108,"line":16626},[106,86749,52138],{"class":116},[106,86751,51807],{"class":51294},[106,86753,51301],{"class":116},[106,86755,86756],{"class":108,"line":16632},[106,86757,86758],{"class":175},"    \u002F\u002F 1.Model 构造函数的封装  模态框\n",[106,86760,86761,86763,86766,86768,86770,86772,86774,86776,86779,86781,86783],{"class":108,"line":16655},[106,86762,70078],{"class":112},[106,86764,86765],{"class":1955}," Modal",[106,86767,117],{"class":116},[106,86769,51401],{"class":5209},[106,86771,13557],{"class":112},[106,86773,69924],{"class":221},[106,86775,12428],{"class":116},[106,86777,86778],{"class":5209},"message",[106,86780,13557],{"class":112},[106,86782,69924],{"class":221},[106,86784,12435],{"class":116},[106,86786,86787],{"class":108,"line":16669},[106,86788,86789],{"class":175},"      \u002F\u002F 创建Model 模态框盒子\n",[106,86791,86792],{"class":108,"line":16689},[106,86793,86794],{"class":175},"      \u002F\u002F 1.1 创建div标签\n",[106,86796,86797,86799,86802,86804,86806,86808,86810,86812],{"class":108,"line":16695},[106,86798,70045],{"class":165},[106,86800,86801],{"class":116},".modalBox ",[106,86803,162],{"class":112},[106,86805,54390],{"class":116},[106,86807,70145],{"class":1955},[106,86809,117],{"class":116},[106,86811,81925],{"class":221},[106,86813,123],{"class":116},[106,86815,86816],{"class":108,"line":16706},[106,86817,86818],{"class":175},"      \u002F\u002F 1.2 给div 添加类名为model\n",[106,86820,86821,86823,86826,86828],{"class":108,"line":16729},[106,86822,70045],{"class":165},[106,86824,86825],{"class":116},".modalBox.className ",[106,86827,162],{"class":112},[106,86829,86830],{"class":221}," 'modal'\n",[106,86832,86833],{"class":108,"line":16751},[106,86834,86835],{"class":175},"      \u002F\u002F 1.3 model盒子内部填充2个div标签并且修改文字内容 \n",[106,86837,86838,86840,86843,86845],{"class":108,"line":16756},[106,86839,70045],{"class":165},[106,86841,86842],{"class":116},".modalBox.innerHTML ",[106,86844,162],{"class":112},[106,86846,70162],{"class":221},[106,86848,86849,86852,86854],{"class":108,"line":16762},[106,86850,86851],{"class":221},"        \u003Cdiv class=\"header\">${",[106,86853,51401],{"class":116},[106,86855,86856],{"class":221},"}\u003Ci>x\u003C\u002Fi>\u003C\u002Fdiv>\n",[106,86858,86859,86862,86864],{"class":108,"line":16776},[106,86860,86861],{"class":221},"        \u003Cdiv class=\"body\">${",[106,86863,86778],{"class":116},[106,86865,86866],{"class":221},"}\u003C\u002Fdiv>\n",[106,86868,86869],{"class":108,"line":16789},[106,86870,86871],{"class":221},"      `\n",[106,86873,86874],{"class":108,"line":16794},[106,86875,86876],{"class":175},"      \u002F\u002F console.log(this.modalBox)\n",[106,86878,86879],{"class":108,"line":16808},[106,86880,2179],{"class":116},[106,86882,86883],{"class":108,"line":16813},[106,86884,86885],{"class":175},"    \u002F\u002F new Model('温馨提示', '您没有删除权限操作')\n",[106,86887,86888],{"class":108,"line":16819},[106,86889,86890],{"class":175},"    \u002F\u002F new Model('友情提示', '您还没有登录呢')\n",[106,86892,86893],{"class":108,"line":16824},[106,86894,86895],{"class":175},"    \u002F\u002F 2.给构造函数原型对象挂载open方法\n",[106,86897,86898,86901,86903,86905,86907,86910,86912,86914],{"class":108,"line":16838},[106,86899,86900],{"class":165},"    Modal",[106,86902,675],{"class":116},[106,86904,85573],{"class":165},[106,86906,675],{"class":116},[106,86908,86909],{"class":1955},"open",[106,86911,13557],{"class":112},[106,86913,58912],{"class":112},[106,86915,54446],{"class":116},[106,86917,86918],{"class":108,"line":16843},[106,86919,86920],{"class":175},"      \u002F\u002F 准备open显示的时候，先判断页面中有没有modal盒子，有就移除，没有加添加\n",[106,86922,86923,86925,86928,86930,86932,86934,86936,86939],{"class":108,"line":16848},[106,86924,58222],{"class":112},[106,86926,86927],{"class":165}," box",[106,86929,13557],{"class":112},[106,86931,54390],{"class":116},[106,86933,54393],{"class":1955},[106,86935,117],{"class":116},[106,86937,86938],{"class":221},"'.modal'",[106,86940,123],{"class":116},[106,86942,86943],{"class":108,"line":16862},[106,86944,86945],{"class":175},"      \u002F\u002F 使用逻辑中断来判断   若前边为假则中断，box.remove()就不执行了，就接着执行后边的代码；如果box为真，则执行box.remove()，再接着执行后边的代码\n",[106,86947,86948,86951,86953,86956,86958],{"class":108,"line":16874},[106,86949,86950],{"class":116},"      box ",[106,86952,1707],{"class":112},[106,86954,86955],{"class":116}," box.",[106,86957,57000],{"class":1955},[106,86959,1968],{"class":116},[106,86961,86962],{"class":108,"line":16879},[106,86963,86964],{"class":175},"      \u002F\u002F 主要这个方法不要用箭头函数\n",[106,86966,86967],{"class":108,"line":16892},[106,86968,86969],{"class":175},"      \u002F\u002F 把刚才创建的modelBox 显示到页面body中\n",[106,86971,86972],{"class":108,"line":16897},[106,86973,86974],{"class":175},"      \u002F\u002F append可以增加对象\n",[106,86976,86977,86980,86983,86985,86988],{"class":108,"line":16902},[106,86978,86979],{"class":116},"      document.body.",[106,86981,86982],{"class":1955},"append",[106,86984,117],{"class":116},[106,86986,86987],{"class":165},"this",[106,86989,86990],{"class":116},".modalBox)\n",[106,86992,86993],{"class":108,"line":16907},[106,86994,2392],{"emptyLinePlaceholder":33},[106,86996,86997],{"class":108,"line":16920},[106,86998,86999],{"class":175},"      \u002F\u002F要等到盒子显示出来，就可以绑定点击事件了\n",[106,87001,87002,87004,87007,87009,87011,87014,87016,87018,87020,87022,87025,87027],{"class":108,"line":16925},[106,87003,70045],{"class":165},[106,87005,87006],{"class":116},".modalBox.",[106,87008,54393],{"class":1955},[106,87010,117],{"class":116},[106,87012,87013],{"class":221},"'i'",[106,87015,30820],{"class":116},[106,87017,57807],{"class":1955},[106,87019,117],{"class":116},[106,87021,57812],{"class":221},[106,87023,87024],{"class":116},", () ",[106,87026,84716],{"class":112},[106,87028,15565],{"class":116},[106,87030,87031],{"class":108,"line":32627},[106,87032,87033],{"class":175},"        \u002F\u002F 这个地方需要用到箭头函数\n",[106,87035,87036],{"class":108,"line":32633},[106,87037,87038],{"class":175},"        \u002F\u002F 这个this是指向的是上上级 是实例对象\n",[106,87040,87041],{"class":108,"line":32639},[106,87042,87043],{"class":175},"        \u002F\u002F 如果不用箭头函数的话，就指向的是i这个DOM对象了\n",[106,87045,87046,87048,87050,87053],{"class":108,"line":32645},[106,87047,64720],{"class":165},[106,87049,675],{"class":116},[106,87051,87052],{"class":1955},"close",[106,87054,1968],{"class":116},[106,87056,87057],{"class":108,"line":32651},[106,87058,64809],{"class":116},[106,87060,87061],{"class":108,"line":32662},[106,87062,2179],{"class":116},[106,87064,87065],{"class":108,"line":32668},[106,87066,2392],{"emptyLinePlaceholder":33},[106,87068,87069],{"class":108,"line":32688},[106,87070,87071],{"class":175},"    \u002F\u002F 测试一下 点击 删除按钮\n",[106,87073,87074,87076,87078,87080,87083,87085,87087,87089,87091,87093,87095],{"class":108,"line":32694},[106,87075,52401],{"class":116},[106,87077,54393],{"class":1955},[106,87079,117],{"class":116},[106,87081,87082],{"class":221},"'#delete'",[106,87084,30820],{"class":116},[106,87086,57807],{"class":1955},[106,87088,117],{"class":116},[106,87090,57812],{"class":221},[106,87092,87024],{"class":116},[106,87094,84716],{"class":112},[106,87096,15565],{"class":116},[106,87098,87099],{"class":108,"line":32705},[106,87100,87101],{"class":175},"      \u002F\u002F 先调用Model构造函数\n",[106,87103,87104,87106,87109,87111,87113,87115,87117,87120,87122,87125],{"class":108,"line":32711},[106,87105,58222],{"class":112},[106,87107,87108],{"class":165}," del",[106,87110,13557],{"class":112},[106,87112,11571],{"class":112},[106,87114,86765],{"class":1955},[106,87116,117],{"class":116},[106,87118,87119],{"class":221},"'温馨的提示'",[106,87121,12428],{"class":116},[106,87123,87124],{"class":221},"'您没有删除权限操作'",[106,87126,123],{"class":116},[106,87128,87129],{"class":108,"line":32717},[106,87130,87131],{"class":175},"      \u002F\u002F 实例对象调用open方法\n",[106,87133,87134,87137,87139],{"class":108,"line":32723},[106,87135,87136],{"class":116},"      del.",[106,87138,86909],{"class":1955},[106,87140,1968],{"class":116},[106,87142,87143],{"class":108,"line":32729},[106,87144,33455],{"class":116},[106,87146,87147],{"class":108,"line":32735},[106,87148,87149],{"class":175},"    \u002F\u002F 测试一下 点击 登录按钮\n",[106,87151,87152,87154,87156,87158,87161,87163,87165,87167,87169,87171,87173],{"class":108,"line":32741},[106,87153,52401],{"class":116},[106,87155,54393],{"class":1955},[106,87157,117],{"class":116},[106,87159,87160],{"class":221},"'#login'",[106,87162,30820],{"class":116},[106,87164,57807],{"class":1955},[106,87166,117],{"class":116},[106,87168,57812],{"class":221},[106,87170,87024],{"class":116},[106,87172,84716],{"class":112},[106,87174,15565],{"class":116},[106,87176,87177],{"class":108,"line":32747},[106,87178,87101],{"class":175},[106,87180,87181,87183,87186,87188,87190,87192,87194,87197,87199,87202],{"class":108,"line":32767},[106,87182,58222],{"class":112},[106,87184,87185],{"class":165}," log",[106,87187,13557],{"class":112},[106,87189,11571],{"class":112},[106,87191,86765],{"class":1955},[106,87193,117],{"class":116},[106,87195,87196],{"class":221},"'友情提示'",[106,87198,12428],{"class":116},[106,87200,87201],{"class":221},"'您还没有登录呢'",[106,87203,123],{"class":116},[106,87205,87206],{"class":108,"line":32773},[106,87207,87131],{"class":175},[106,87209,87210,87213,87215],{"class":108,"line":32789},[106,87211,87212],{"class":116},"      log.",[106,87214,86909],{"class":1955},[106,87216,1968],{"class":116},[106,87218,87219],{"class":108,"line":32795},[106,87220,33455],{"class":116},[106,87222,87223],{"class":108,"line":32809},[106,87224,87225],{"class":175},"    \u002F\u002F 3.给构造函数原型对象挂载close方法\n",[106,87227,87228,87230,87232,87234,87236,87238,87240,87242],{"class":108,"line":32815},[106,87229,86900],{"class":165},[106,87231,675],{"class":116},[106,87233,85573],{"class":165},[106,87235,675],{"class":116},[106,87237,87052],{"class":1955},[106,87239,13557],{"class":112},[106,87241,58912],{"class":112},[106,87243,54446],{"class":116},[106,87245,87246,87248,87250,87252],{"class":108,"line":32830},[106,87247,70045],{"class":165},[106,87249,87006],{"class":116},[106,87251,57000],{"class":1955},[106,87253,1968],{"class":116},[106,87255,87256],{"class":108,"line":32836},[106,87257,2179],{"class":116},[106,87259,87260,87262,87264],{"class":108,"line":32845},[106,87261,52411],{"class":116},[106,87263,51807],{"class":51294},[106,87265,51301],{"class":116},[106,87267,87268,87270,87272],{"class":108,"line":32851},[106,87269,51779],{"class":116},[106,87271,51794],{"class":51294},[106,87273,51301],{"class":116},[106,87275,87276],{"class":108,"line":32860},[106,87277,2392],{"emptyLinePlaceholder":33},[106,87279,87280,87282,87284],{"class":108,"line":32866},[106,87281,51779],{"class":116},[106,87283,50629],{"class":51294},[106,87285,51301],{"class":116},[14,87287,87288],{},[23,87289],{"alt":25,"src":87290},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-326.png",[48,87292,87294],{"id":87293},"_414-深浅拷贝","4.14 深浅拷贝",[77,87296,87298],{"id":87297},"_4141-浅拷贝","4.14.1 浅拷贝",[14,87300,87301],{},[23,87302],{"alt":25,"src":87303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-327.png",[14,87305,87306],{},"展开运算符也可以对对象使用，将对象的键值取出放到新对象中",[14,87308,87309],{},[23,87310],{"alt":25,"src":87311},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-328.png",[14,87313,87314],{},[23,87315],{"alt":25,"src":87316},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-329.png",[14,87318,87319],{},"下边这个情况的时候，浅拷贝只拷贝外面这一层，外面这一层是把值给了这个新对象，里层的这个对象在拷贝的时候还是拷贝的地址，所以一改里层对象的值，原来的对象和拷贝的对象的值就都变了，这样拷贝就会有问题",[14,87321,87322],{},[23,87323],{"alt":25,"src":87324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-330.png",[14,87326,11325],{},[14,87328,87329],{},[23,87330],{"alt":25,"src":87331},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-331.png",[77,87333,87335],{"id":87334},"_4142-深拷贝","4.14.2 深拷贝",[14,87337,87338],{},"深拷贝：拷贝的是对象，不是地址",[14,87340,87341],{},"常用的三种方法：",[60,87343,87344,87347,87350],{},[63,87345,87346],{},"通过递归实现深拷贝",[63,87348,87349],{},"lodash\u002FcloneDeep",[63,87351,87352],{},"通过JSON.stringify()实现",[21991,87354,87356],{"id":87355},"_41421-递归函数","4.14.2.1 递归函数",[14,87358,87359],{},[23,87360],{"alt":25,"src":87361},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-332.png",[60,87363,87364],{},[63,87365,87366],{},"死递归占溢出：",[97,87368,87370],{"className":53061,"code":87369,"language":53063,"meta":25,"style":25},"\u003Cbody>\n  \u003Cscript>\n    function fn() {\n      fn()\n    }\n    fn()\n  \u003C\u002Fscript>\n\u003C\u002Fbody>\n",[103,87371,87372,87380,87388,87392,87397,87401,87406,87414],{"__ignoreMap":25},[106,87373,87374,87376,87378],{"class":108,"line":109},[106,87375,1027],{"class":116},[106,87377,51794],{"class":51294},[106,87379,51301],{"class":116},[106,87381,87382,87384,87386],{"class":108,"line":28},[106,87383,52138],{"class":116},[106,87385,51807],{"class":51294},[106,87387,51301],{"class":116},[106,87389,87390],{"class":108,"line":1172},[106,87391,77137],{"class":116},[106,87393,87394],{"class":108,"line":1187},[106,87395,87396],{"class":116},"      fn()\n",[106,87398,87399],{"class":108,"line":1193},[106,87400,2179],{"class":116},[106,87402,87403],{"class":108,"line":1207},[106,87404,87405],{"class":116},"    fn()\n",[106,87407,87408,87410,87412],{"class":108,"line":1213},[106,87409,52411],{"class":116},[106,87411,51807],{"class":51294},[106,87413,51301],{"class":116},[106,87415,87416,87418,87420],{"class":108,"line":1304},[106,87417,51779],{"class":116},[106,87419,51794],{"class":51294},[106,87421,51301],{"class":116},[60,87423,87424],{"start":28},[63,87425,87426],{},"递归函数要加判断条件：",[14,87428,87429],{},[23,87430],{"alt":25,"src":87431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-333.png",[60,87433,87434],{"start":1172},[63,87435,87436],{},"应用：利用递归函数实现setTimeout模拟setInterval效果",[97,87438,87440],{"className":50627,"code":87439,"language":50629,"meta":25,"style":25},"\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",[103,87441,87442,87452,87466,87470,87478,87492,87512,87524,87532,87536,87544,87556,87564,87572,87597,87609,87613,87620,87628,87636,87640],{"__ignoreMap":25},[106,87443,87444,87446,87448,87450],{"class":108,"line":109},[106,87445,51291],{"class":116},[106,87447,51295],{"class":51294},[106,87449,51298],{"class":1955},[106,87451,51301],{"class":116},[106,87453,87454,87456,87458,87460,87462,87464],{"class":108,"line":28},[106,87455,1027],{"class":116},[106,87457,50629],{"class":51294},[106,87459,51310],{"class":1955},[106,87461,162],{"class":116},[106,87463,51315],{"class":221},[106,87465,51301],{"class":116},[106,87467,87468],{"class":108,"line":1172},[106,87469,2392],{"emptyLinePlaceholder":33},[106,87471,87472,87474,87476],{"class":108,"line":1187},[106,87473,1027],{"class":116},[106,87475,51328],{"class":51294},[106,87477,51301],{"class":116},[106,87479,87480,87482,87484,87486,87488,87490],{"class":108,"line":1193},[106,87481,52138],{"class":116},[106,87483,51338],{"class":51294},[106,87485,51341],{"class":1955},[106,87487,162],{"class":116},[106,87489,51346],{"class":221},[106,87491,51301],{"class":116},[106,87493,87494,87496,87498,87500,87502,87504,87506,87508,87510],{"class":108,"line":1207},[106,87495,52138],{"class":116},[106,87497,51338],{"class":51294},[106,87499,14913],{"class":1955},[106,87501,162],{"class":116},[106,87503,51385],{"class":221},[106,87505,51365],{"class":1955},[106,87507,162],{"class":116},[106,87509,51392],{"class":221},[106,87511,51301],{"class":116},[106,87513,87514,87516,87518,87520,87522],{"class":108,"line":1213},[106,87515,52138],{"class":116},[106,87517,51401],{"class":51294},[106,87519,51404],{"class":116},[106,87521,51401],{"class":51294},[106,87523,51301],{"class":116},[106,87525,87526,87528,87530],{"class":108,"line":1304},[106,87527,51779],{"class":116},[106,87529,51328],{"class":51294},[106,87531,51301],{"class":116},[106,87533,87534],{"class":108,"line":1310},[106,87535,2392],{"emptyLinePlaceholder":33},[106,87537,87538,87540,87542],{"class":108,"line":1322},[106,87539,1027],{"class":116},[106,87541,51794],{"class":51294},[106,87543,51301],{"class":116},[106,87545,87546,87548,87550,87552,87554],{"class":108,"line":1604},[106,87547,52138],{"class":116},[106,87549,51605],{"class":51294},[106,87551,55308],{"class":116},[106,87553,51605],{"class":51294},[106,87555,51301],{"class":116},[106,87557,87558,87560,87562],{"class":108,"line":1609},[106,87559,52138],{"class":116},[106,87561,51807],{"class":51294},[106,87563,51301],{"class":116},[106,87565,87566,87568,87570],{"class":108,"line":1615},[106,87567,70078],{"class":112},[106,87569,73767],{"class":1955},[106,87571,10846],{"class":116},[106,87573,87574,87576,87578,87580,87582,87584,87586,87588,87590,87592,87595],{"class":108,"line":1620},[106,87575,55765],{"class":116},[106,87577,54393],{"class":1955},[106,87579,117],{"class":116},[106,87581,81925],{"class":221},[106,87583,74243],{"class":116},[106,87585,162],{"class":112},[106,87587,11571],{"class":112},[106,87589,73783],{"class":1955},[106,87591,17254],{"class":116},[106,87593,87594],{"class":1955},"toLocaleString",[106,87596,1968],{"class":116},[106,87598,87599,87602,87605,87607],{"class":108,"line":1634},[106,87600,87601],{"class":1955},"      setTimeout",[106,87603,87604],{"class":116},"(getTime, ",[106,87606,6403],{"class":165},[106,87608,123],{"class":116},[106,87610,87611],{"class":108,"line":1639},[106,87612,2179],{"class":116},[106,87614,87615,87618],{"class":108,"line":1645},[106,87616,87617],{"class":1955},"    getTime",[106,87619,1968],{"class":116},[106,87621,87622,87624,87626],{"class":108,"line":1666},[106,87623,52411],{"class":116},[106,87625,51807],{"class":51294},[106,87627,51301],{"class":116},[106,87629,87630,87632,87634],{"class":108,"line":1671},[106,87631,51779],{"class":116},[106,87633,51794],{"class":51294},[106,87635,51301],{"class":116},[106,87637,87638],{"class":108,"line":1685},[106,87639,2392],{"emptyLinePlaceholder":33},[106,87641,87642,87644,87646],{"class":108,"line":1690},[106,87643,51779],{"class":116},[106,87645,50629],{"class":51294},[106,87647,51301],{"class":116},[14,87649,87650],{},[23,87651],{"alt":25,"src":87652},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-334.png",[60,87654,87655],{"start":1187},[63,87656,87346],{},[14,87658,87659],{},[23,87660],{"alt":25,"src":87661},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-335.png",[14,87663,87664],{},"现在的这个递归函数还是一个浅拷贝的函数，通过将旧值给新值的方式进行，简单数据直接就是把值给他了，但是复杂数据是把他的地址给他",[14,87666,39183],{},[14,87668,87669],{},"这个是简易版的递归函数深拷贝",[14,87671,87672],{},"一定要注意先数组再对象，因为万物皆可对象",[97,87674,87676],{"className":50627,"code":87675,"language":50629,"meta":25,"style":25},"\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",[103,87677,87678,87688,87702,87706,87714,87728,87748,87760,87768,87772,87780,87788,87798,87807,87815,87831,87835,87843,87847,87851,87863,87868,87887,87903,87908,87913,87918,87933,87938,87943,87952,87960,87977,87985,87991,87999,88004,88009,88018,88022,88026,88030,88041,88050,88060,88074,88084,88092,88100,88108,88112],{"__ignoreMap":25},[106,87679,87680,87682,87684,87686],{"class":108,"line":109},[106,87681,51291],{"class":116},[106,87683,51295],{"class":51294},[106,87685,51298],{"class":1955},[106,87687,51301],{"class":116},[106,87689,87690,87692,87694,87696,87698,87700],{"class":108,"line":28},[106,87691,1027],{"class":116},[106,87693,50629],{"class":51294},[106,87695,51310],{"class":1955},[106,87697,162],{"class":116},[106,87699,51315],{"class":221},[106,87701,51301],{"class":116},[106,87703,87704],{"class":108,"line":1172},[106,87705,2392],{"emptyLinePlaceholder":33},[106,87707,87708,87710,87712],{"class":108,"line":1187},[106,87709,1027],{"class":116},[106,87711,51328],{"class":51294},[106,87713,51301],{"class":116},[106,87715,87716,87718,87720,87722,87724,87726],{"class":108,"line":1193},[106,87717,52138],{"class":116},[106,87719,51338],{"class":51294},[106,87721,51341],{"class":1955},[106,87723,162],{"class":116},[106,87725,51346],{"class":221},[106,87727,51301],{"class":116},[106,87729,87730,87732,87734,87736,87738,87740,87742,87744,87746],{"class":108,"line":1207},[106,87731,52138],{"class":116},[106,87733,51338],{"class":51294},[106,87735,14913],{"class":1955},[106,87737,162],{"class":116},[106,87739,51385],{"class":221},[106,87741,51365],{"class":1955},[106,87743,162],{"class":116},[106,87745,51392],{"class":221},[106,87747,51301],{"class":116},[106,87749,87750,87752,87754,87756,87758],{"class":108,"line":1213},[106,87751,52138],{"class":116},[106,87753,51401],{"class":51294},[106,87755,51404],{"class":116},[106,87757,51401],{"class":51294},[106,87759,51301],{"class":116},[106,87761,87762,87764,87766],{"class":108,"line":1304},[106,87763,51779],{"class":116},[106,87765,51328],{"class":51294},[106,87767,51301],{"class":116},[106,87769,87770],{"class":108,"line":1310},[106,87771,2392],{"emptyLinePlaceholder":33},[106,87773,87774,87776,87778],{"class":108,"line":1322},[106,87775,1027],{"class":116},[106,87777,51794],{"class":51294},[106,87779,51301],{"class":116},[106,87781,87782,87784,87786],{"class":108,"line":1604},[106,87783,52138],{"class":116},[106,87785,51807],{"class":51294},[106,87787,51301],{"class":116},[106,87789,87790,87792,87794,87796],{"class":108,"line":1609},[106,87791,11214],{"class":112},[106,87793,69965],{"class":165},[106,87795,13557],{"class":112},[106,87797,15565],{"class":116},[106,87799,87800,87802,87805],{"class":108,"line":1615},[106,87801,71610],{"class":116},[106,87803,87804],{"class":221},"'pink'",[106,87806,31460],{"class":116},[106,87808,87809,87811,87813],{"class":108,"line":1620},[106,87810,71620],{"class":116},[106,87812,767],{"class":165},[106,87814,31460],{"class":116},[106,87816,87817,87820,87823,87825,87828],{"class":108,"line":1634},[106,87818,87819],{"class":116},"      hobby: [",[106,87821,87822],{"class":221},"'乒乓球'",[106,87824,12428],{"class":116},[106,87826,87827],{"class":221},"'足球'",[106,87829,87830],{"class":116},"],\n",[106,87832,87833],{"class":108,"line":1639},[106,87834,77866],{"class":116},[106,87836,87837,87840],{"class":108,"line":1645},[106,87838,87839],{"class":116},"        baby: ",[106,87841,87842],{"class":221},"'小pink'\n",[106,87844,87845],{"class":108,"line":1666},[106,87846,52392],{"class":116},[106,87848,87849],{"class":108,"line":1671},[106,87850,2179],{"class":116},[106,87852,87853,87855,87858,87860],{"class":108,"line":1685},[106,87854,11214],{"class":112},[106,87856,87857],{"class":165}," o",[106,87859,13557],{"class":112},[106,87861,87862],{"class":116}," {}\n",[106,87864,87865],{"class":108,"line":1690},[106,87866,87867],{"class":175},"    \u002F\u002F 拷贝函数\n",[106,87869,87870,87872,87875,87877,87880,87882,87885],{"class":108,"line":1719},[106,87871,70078],{"class":112},[106,87873,87874],{"class":1955}," deepCopy",[106,87876,117],{"class":116},[106,87878,87879],{"class":5209},"newObj",[106,87881,12428],{"class":116},[106,87883,87884],{"class":5209},"oldObj",[106,87886,12435],{"class":116},[106,87888,87889,87891,87893,87895,87898,87900],{"class":108,"line":1724},[106,87890,52278],{"class":112},[106,87892,1650],{"class":116},[106,87894,51841],{"class":112},[106,87896,87897],{"class":116}," k ",[106,87899,26037],{"class":112},[106,87901,87902],{"class":116}," oldObj) {\n",[106,87904,87905],{"class":108,"line":1741},[106,87906,87907],{"class":175},"        \u002F\u002F 处理数组的问题\n",[106,87909,87910],{"class":108,"line":1746},[106,87911,87912],{"class":175},"        \u002F\u002F 判断是否属于数组\n",[106,87914,87915],{"class":108,"line":1751},[106,87916,87917],{"class":175},"        \u002F\u002F 一定先写数组，因为万物皆对象，数组也属于对象，把对象写前边的话，数组就执行对象的操作了，就无法正常运行了\n",[106,87919,87920,87922,87925,87928,87931],{"class":108,"line":1756},[106,87921,2489],{"class":112},[106,87923,87924],{"class":116}," (oldObj[k] ",[106,87926,87927],{"class":112},"instanceof",[106,87929,87930],{"class":1955}," Array",[106,87932,12435],{"class":116},[106,87934,87935],{"class":108,"line":1770},[106,87936,87937],{"class":175},"          \u002F\u002F newObj[k]  接收的内容放到[]\n",[106,87939,87940],{"class":108,"line":1775},[106,87941,87942],{"class":175},"          \u002F\u002F oldObj[k]  就是['乒乓球','足球']\n",[106,87944,87945,87948,87950],{"class":108,"line":2569},[106,87946,87947],{"class":116},"          newObj[k] ",[106,87949,162],{"class":112},[106,87951,51832],{"class":116},[106,87953,87954,87957],{"class":108,"line":2583},[106,87955,87956],{"class":1955},"          deepCopy",[106,87958,87959],{"class":116},"(newObj[k], oldObj[k])\n",[106,87961,87962,87964,87966,87968,87970,87972,87975],{"class":108,"line":2591},[106,87963,80074],{"class":116},[106,87965,1693],{"class":112},[106,87967,1696],{"class":112},[106,87969,87924],{"class":116},[106,87971,87927],{"class":112},[106,87973,87974],{"class":1955}," Object",[106,87976,12435],{"class":116},[106,87978,87979,87981,87983],{"class":108,"line":2596},[106,87980,87947],{"class":116},[106,87982,162],{"class":112},[106,87984,87862],{"class":116},[106,87986,87987,87989],{"class":108,"line":2602},[106,87988,87956],{"class":1955},[106,87990,87959],{"class":116},[106,87992,87993,87995,87997],{"class":108,"line":2608},[106,87994,80074],{"class":116},[106,87996,1693],{"class":112},[106,87998,15565],{"class":116},[106,88000,88001],{"class":108,"line":2613},[106,88002,88003],{"class":175},"          \u002F\u002F  k 是属性名  属性值为oldObj[k]\n",[106,88005,88006],{"class":108,"line":7941},[106,88007,88008],{"class":175},"          \u002F\u002F newObj[k]与newObj写法是等价的\n",[106,88010,88011,88013,88015],{"class":108,"line":7965},[106,88012,87947],{"class":116},[106,88014,162],{"class":112},[106,88016,88017],{"class":116}," oldObj[k]\n",[106,88019,88020],{"class":108,"line":7970},[106,88021,2521],{"class":116},[106,88023,88024],{"class":108,"line":7976},[106,88025,52392],{"class":116},[106,88027,88028],{"class":108,"line":8003},[106,88029,2179],{"class":116},[106,88031,88032,88035,88038],{"class":108,"line":8008},[106,88033,88034],{"class":1955},"    deepCopy",[106,88036,88037],{"class":116},"(o, obj) ",[106,88039,88040],{"class":175},"\u002F\u002F函数调用 两个参数 o是新对象，obj是旧对象\n",[106,88042,88043,88045,88047],{"class":108,"line":8014},[106,88044,73747],{"class":116},[106,88046,58241],{"class":1955},[106,88048,88049],{"class":116},"(o)\n",[106,88051,88052,88055,88057],{"class":108,"line":8026},[106,88053,88054],{"class":116},"    o.age ",[106,88056,162],{"class":112},[106,88058,88059],{"class":165}," 20\n",[106,88061,88062,88065,88067,88069,88071],{"class":108,"line":8038},[106,88063,88064],{"class":116},"    o.hobby[",[106,88066,308],{"class":165},[106,88068,4435],{"class":116},[106,88070,162],{"class":112},[106,88072,88073],{"class":221}," '篮球'\n",[106,88075,88076,88079,88081],{"class":108,"line":8050},[106,88077,88078],{"class":116},"    o.family ",[106,88080,162],{"class":112},[106,88082,88083],{"class":221}," '老pink'\n",[106,88085,88086,88088,88090],{"class":108,"line":9709},[106,88087,73747],{"class":116},[106,88089,58241],{"class":1955},[106,88091,70030],{"class":116},[106,88093,88094,88096,88098],{"class":108,"line":9734},[106,88095,52411],{"class":116},[106,88097,51807],{"class":51294},[106,88099,51301],{"class":116},[106,88101,88102,88104,88106],{"class":108,"line":9757},[106,88103,51779],{"class":116},[106,88105,51794],{"class":51294},[106,88107,51301],{"class":116},[106,88109,88110],{"class":108,"line":9781},[106,88111,2392],{"emptyLinePlaceholder":33},[106,88113,88114,88116,88118],{"class":108,"line":9786},[106,88115,51779],{"class":116},[106,88117,50629],{"class":51294},[106,88119,51301],{"class":116},[14,88121,88122],{},[23,88123],{"alt":25,"src":88124},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-336.png",[21991,88126,88128,88129],{"id":88127},"_41422-js库lodash里面clonedeep内部实现了深拷贝","4.14.2.2 ",[266,88130,88131],{},"js库lodash里面cloneDeep内部实现了深拷贝",[14,88133,88134],{},[355,88135,88136],{"href":88136,"rel":88137},"https:\u002F\u002Fwww.lodashjs.com\u002F",[23858],[14,88139,88140],{},"lodash里边的方法都要加上一个下划线_",[14,88142,88143],{},"_.cloneDeep()",[97,88145,88147],{"className":50627,"code":88146,"language":50629,"meta":25,"style":25},"\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",[103,88148,88149,88159,88173,88177,88185,88199,88219,88231,88239,88243,88251,88256,88275,88283,88293,88301,88309,88321,88325,88331,88335,88339,88355,88363,88372,88380,88388,88396,88400],{"__ignoreMap":25},[106,88150,88151,88153,88155,88157],{"class":108,"line":109},[106,88152,51291],{"class":116},[106,88154,51295],{"class":51294},[106,88156,51298],{"class":1955},[106,88158,51301],{"class":116},[106,88160,88161,88163,88165,88167,88169,88171],{"class":108,"line":28},[106,88162,1027],{"class":116},[106,88164,50629],{"class":51294},[106,88166,51310],{"class":1955},[106,88168,162],{"class":116},[106,88170,51315],{"class":221},[106,88172,51301],{"class":116},[106,88174,88175],{"class":108,"line":1172},[106,88176,2392],{"emptyLinePlaceholder":33},[106,88178,88179,88181,88183],{"class":108,"line":1187},[106,88180,1027],{"class":116},[106,88182,51328],{"class":51294},[106,88184,51301],{"class":116},[106,88186,88187,88189,88191,88193,88195,88197],{"class":108,"line":1193},[106,88188,52138],{"class":116},[106,88190,51338],{"class":51294},[106,88192,51341],{"class":1955},[106,88194,162],{"class":116},[106,88196,51346],{"class":221},[106,88198,51301],{"class":116},[106,88200,88201,88203,88205,88207,88209,88211,88213,88215,88217],{"class":108,"line":1207},[106,88202,52138],{"class":116},[106,88204,51338],{"class":51294},[106,88206,14913],{"class":1955},[106,88208,162],{"class":116},[106,88210,51385],{"class":221},[106,88212,51365],{"class":1955},[106,88214,162],{"class":116},[106,88216,51392],{"class":221},[106,88218,51301],{"class":116},[106,88220,88221,88223,88225,88227,88229],{"class":108,"line":1213},[106,88222,52138],{"class":116},[106,88224,51401],{"class":51294},[106,88226,51404],{"class":116},[106,88228,51401],{"class":51294},[106,88230,51301],{"class":116},[106,88232,88233,88235,88237],{"class":108,"line":1304},[106,88234,51779],{"class":116},[106,88236,51328],{"class":51294},[106,88238,51301],{"class":116},[106,88240,88241],{"class":108,"line":1310},[106,88242,2392],{"emptyLinePlaceholder":33},[106,88244,88245,88247,88249],{"class":108,"line":1322},[106,88246,1027],{"class":116},[106,88248,51794],{"class":51294},[106,88250,51301],{"class":116},[106,88252,88253],{"class":108,"line":1604},[106,88254,88255],{"class":175},"  \u003C!-- 先引用这个库 -->\n",[106,88257,88258,88260,88262,88264,88266,88269,88271,88273],{"class":108,"line":1609},[106,88259,52138],{"class":116},[106,88261,51807],{"class":51294},[106,88263,55233],{"class":1955},[106,88265,162],{"class":116},[106,88267,88268],{"class":221},"\"lodash.min.js\"",[106,88270,55308],{"class":116},[106,88272,51807],{"class":51294},[106,88274,51301],{"class":116},[106,88276,88277,88279,88281],{"class":108,"line":1615},[106,88278,52138],{"class":116},[106,88280,51807],{"class":51294},[106,88282,51301],{"class":116},[106,88284,88285,88287,88289,88291],{"class":108,"line":1620},[106,88286,11214],{"class":112},[106,88288,69965],{"class":165},[106,88290,13557],{"class":112},[106,88292,15565],{"class":116},[106,88294,88295,88297,88299],{"class":108,"line":1634},[106,88296,71610],{"class":116},[106,88298,87804],{"class":221},[106,88300,31460],{"class":116},[106,88302,88303,88305,88307],{"class":108,"line":1639},[106,88304,71620],{"class":116},[106,88306,767],{"class":165},[106,88308,31460],{"class":116},[106,88310,88311,88313,88315,88317,88319],{"class":108,"line":1645},[106,88312,87819],{"class":116},[106,88314,87822],{"class":221},[106,88316,12428],{"class":116},[106,88318,87827],{"class":221},[106,88320,87830],{"class":116},[106,88322,88323],{"class":108,"line":1666},[106,88324,77866],{"class":116},[106,88326,88327,88329],{"class":108,"line":1671},[106,88328,87839],{"class":116},[106,88330,87842],{"class":221},[106,88332,88333],{"class":108,"line":1685},[106,88334,52392],{"class":116},[106,88336,88337],{"class":108,"line":1690},[106,88338,2179],{"class":116},[106,88340,88341,88343,88345,88347,88350,88353],{"class":108,"line":1719},[106,88342,11214],{"class":112},[106,88344,87857],{"class":165},[106,88346,13557],{"class":112},[106,88348,88349],{"class":116}," _.",[106,88351,88352],{"class":1955},"cloneDeep",[106,88354,70030],{"class":116},[106,88356,88357,88359,88361],{"class":108,"line":1724},[106,88358,73747],{"class":116},[106,88360,58241],{"class":1955},[106,88362,88049],{"class":116},[106,88364,88365,88368,88370],{"class":108,"line":1741},[106,88366,88367],{"class":116},"    o.family.baby ",[106,88369,162],{"class":112},[106,88371,88083],{"class":221},[106,88373,88374,88376,88378],{"class":108,"line":1746},[106,88375,73747],{"class":116},[106,88377,58241],{"class":1955},[106,88379,70030],{"class":116},[106,88381,88382,88384,88386],{"class":108,"line":1751},[106,88383,52411],{"class":116},[106,88385,51807],{"class":51294},[106,88387,51301],{"class":116},[106,88389,88390,88392,88394],{"class":108,"line":1756},[106,88391,51779],{"class":116},[106,88393,51794],{"class":51294},[106,88395,51301],{"class":116},[106,88397,88398],{"class":108,"line":1770},[106,88399,2392],{"emptyLinePlaceholder":33},[106,88401,88402,88404,88406],{"class":108,"line":1775},[106,88403,51779],{"class":116},[106,88405,50629],{"class":51294},[106,88407,51301],{"class":116},[14,88409,88410],{},[23,88411],{"alt":25,"src":88412},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-337.png",[21991,88414,88416],{"id":88415},"_41423-利用json实现深拷贝","4.14.2.3 利用JSON实现深拷贝",[97,88418,88420],{"className":50627,"code":88419,"language":50629,"meta":25,"style":25},"\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",[103,88421,88422,88432,88446,88450,88458,88472,88492,88504,88512,88516,88524,88532,88542,88550,88558,88570,88574,88580,88584,88588,88593,88598,88603,88629,88637,88646,88654,88662,88670,88674],{"__ignoreMap":25},[106,88423,88424,88426,88428,88430],{"class":108,"line":109},[106,88425,51291],{"class":116},[106,88427,51295],{"class":51294},[106,88429,51298],{"class":1955},[106,88431,51301],{"class":116},[106,88433,88434,88436,88438,88440,88442,88444],{"class":108,"line":28},[106,88435,1027],{"class":116},[106,88437,50629],{"class":51294},[106,88439,51310],{"class":1955},[106,88441,162],{"class":116},[106,88443,51315],{"class":221},[106,88445,51301],{"class":116},[106,88447,88448],{"class":108,"line":1172},[106,88449,2392],{"emptyLinePlaceholder":33},[106,88451,88452,88454,88456],{"class":108,"line":1187},[106,88453,1027],{"class":116},[106,88455,51328],{"class":51294},[106,88457,51301],{"class":116},[106,88459,88460,88462,88464,88466,88468,88470],{"class":108,"line":1193},[106,88461,52138],{"class":116},[106,88463,51338],{"class":51294},[106,88465,51341],{"class":1955},[106,88467,162],{"class":116},[106,88469,51346],{"class":221},[106,88471,51301],{"class":116},[106,88473,88474,88476,88478,88480,88482,88484,88486,88488,88490],{"class":108,"line":1207},[106,88475,52138],{"class":116},[106,88477,51338],{"class":51294},[106,88479,14913],{"class":1955},[106,88481,162],{"class":116},[106,88483,51385],{"class":221},[106,88485,51365],{"class":1955},[106,88487,162],{"class":116},[106,88489,51392],{"class":221},[106,88491,51301],{"class":116},[106,88493,88494,88496,88498,88500,88502],{"class":108,"line":1213},[106,88495,52138],{"class":116},[106,88497,51401],{"class":51294},[106,88499,51404],{"class":116},[106,88501,51401],{"class":51294},[106,88503,51301],{"class":116},[106,88505,88506,88508,88510],{"class":108,"line":1304},[106,88507,51779],{"class":116},[106,88509,51328],{"class":51294},[106,88511,51301],{"class":116},[106,88513,88514],{"class":108,"line":1310},[106,88515,2392],{"emptyLinePlaceholder":33},[106,88517,88518,88520,88522],{"class":108,"line":1322},[106,88519,1027],{"class":116},[106,88521,51794],{"class":51294},[106,88523,51301],{"class":116},[106,88525,88526,88528,88530],{"class":108,"line":1604},[106,88527,52138],{"class":116},[106,88529,51807],{"class":51294},[106,88531,51301],{"class":116},[106,88533,88534,88536,88538,88540],{"class":108,"line":1609},[106,88535,11214],{"class":112},[106,88537,69965],{"class":165},[106,88539,13557],{"class":112},[106,88541,15565],{"class":116},[106,88543,88544,88546,88548],{"class":108,"line":1615},[106,88545,71610],{"class":116},[106,88547,87804],{"class":221},[106,88549,31460],{"class":116},[106,88551,88552,88554,88556],{"class":108,"line":1620},[106,88553,71620],{"class":116},[106,88555,767],{"class":165},[106,88557,31460],{"class":116},[106,88559,88560,88562,88564,88566,88568],{"class":108,"line":1634},[106,88561,87819],{"class":116},[106,88563,87822],{"class":221},[106,88565,12428],{"class":116},[106,88567,87827],{"class":221},[106,88569,87830],{"class":116},[106,88571,88572],{"class":108,"line":1639},[106,88573,77866],{"class":116},[106,88575,88576,88578],{"class":108,"line":1645},[106,88577,87839],{"class":116},[106,88579,87842],{"class":221},[106,88581,88582],{"class":108,"line":1666},[106,88583,52392],{"class":116},[106,88585,88586],{"class":108,"line":1671},[106,88587,2179],{"class":116},[106,88589,88590],{"class":108,"line":1685},[106,88591,88592],{"class":175},"    \u002F\u002F stringify 把对象转换为 JOSN 字符串; parse 把字符串转换为对象\n",[106,88594,88595],{"class":108,"line":1690},[106,88596,88597],{"class":175},"    \u002F\u002F 字符串就是简单数据类型了，就直接存值了，然后再转化为对象，然后就在堆里存值了，栈里存地址\n",[106,88599,88600],{"class":108,"line":1719},[106,88601,88602],{"class":175},"    \u002F\u002F 但是与原来对象没有联系了，独立了，修改值不会改变原对象了，中间经过了转化为字符串\n",[106,88604,88605,88607,88609,88611,88614,88616,88619,88621,88623,88625,88627],{"class":108,"line":1724},[106,88606,11214],{"class":112},[106,88608,87857],{"class":165},[106,88610,13557],{"class":112},[106,88612,88613],{"class":165}," JSON",[106,88615,675],{"class":116},[106,88617,88618],{"class":1955},"parse",[106,88620,117],{"class":116},[106,88622,71658],{"class":165},[106,88624,675],{"class":116},[106,88626,71663],{"class":1955},[106,88628,71666],{"class":116},[106,88630,88631,88633,88635],{"class":108,"line":1741},[106,88632,73747],{"class":116},[106,88634,58241],{"class":1955},[106,88636,88049],{"class":116},[106,88638,88639,88641,88643],{"class":108,"line":1746},[106,88640,88367],{"class":116},[106,88642,162],{"class":112},[106,88644,88645],{"class":221}," '123'\n",[106,88647,88648,88650,88652],{"class":108,"line":1751},[106,88649,73747],{"class":116},[106,88651,58241],{"class":1955},[106,88653,70030],{"class":116},[106,88655,88656,88658,88660],{"class":108,"line":1756},[106,88657,52411],{"class":116},[106,88659,51807],{"class":51294},[106,88661,51301],{"class":116},[106,88663,88664,88666,88668],{"class":108,"line":1770},[106,88665,51779],{"class":116},[106,88667,51794],{"class":51294},[106,88669,51301],{"class":116},[106,88671,88672],{"class":108,"line":1775},[106,88673,2392],{"emptyLinePlaceholder":33},[106,88675,88676,88678,88680],{"class":108,"line":2569},[106,88677,51779],{"class":116},[106,88679,50629],{"class":51294},[106,88681,51301],{"class":116},[14,88683,88684],{},[23,88685],{"alt":25,"src":88686},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-338.png",[48,88688,88690],{"id":88689},"_415-异常处理","4.15 异常处理",[60,88692,88693],{},[63,88694,88695],{},"throw抛异常",[14,88697,88698],{},[23,88699],{"alt":25,"src":88700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-339.png",[60,88702,88703],{"start":28},[63,88704,88705],{},"try\u002Fcatch 捕获错误信息",[14,88707,88708],{},[23,88709],{"alt":25,"src":88710},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-340.png",[97,88712,88714],{"className":50627,"code":88713,"language":50629,"meta":25,"style":25},"\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",[103,88715,88716,88726,88740,88744,88752,88766,88786,88798,88806,88810,88818,88830,88838,88847,88854,88859,88878,88887,88898,88903,88913,88918,88923,88928,88945,88949,88954,88961,88973,88977,88989,88993,88997,89002,89007,89014,89022,89030,89034],{"__ignoreMap":25},[106,88717,88718,88720,88722,88724],{"class":108,"line":109},[106,88719,51291],{"class":116},[106,88721,51295],{"class":51294},[106,88723,51298],{"class":1955},[106,88725,51301],{"class":116},[106,88727,88728,88730,88732,88734,88736,88738],{"class":108,"line":28},[106,88729,1027],{"class":116},[106,88731,50629],{"class":51294},[106,88733,51310],{"class":1955},[106,88735,162],{"class":116},[106,88737,51315],{"class":221},[106,88739,51301],{"class":116},[106,88741,88742],{"class":108,"line":1172},[106,88743,2392],{"emptyLinePlaceholder":33},[106,88745,88746,88748,88750],{"class":108,"line":1187},[106,88747,1027],{"class":116},[106,88749,51328],{"class":51294},[106,88751,51301],{"class":116},[106,88753,88754,88756,88758,88760,88762,88764],{"class":108,"line":1193},[106,88755,52138],{"class":116},[106,88757,51338],{"class":51294},[106,88759,51341],{"class":1955},[106,88761,162],{"class":116},[106,88763,51346],{"class":221},[106,88765,51301],{"class":116},[106,88767,88768,88770,88772,88774,88776,88778,88780,88782,88784],{"class":108,"line":1207},[106,88769,52138],{"class":116},[106,88771,51338],{"class":51294},[106,88773,14913],{"class":1955},[106,88775,162],{"class":116},[106,88777,51385],{"class":221},[106,88779,51365],{"class":1955},[106,88781,162],{"class":116},[106,88783,51392],{"class":221},[106,88785,51301],{"class":116},[106,88787,88788,88790,88792,88794,88796],{"class":108,"line":1213},[106,88789,52138],{"class":116},[106,88791,51401],{"class":51294},[106,88793,51404],{"class":116},[106,88795,51401],{"class":51294},[106,88797,51301],{"class":116},[106,88799,88800,88802,88804],{"class":108,"line":1304},[106,88801,51779],{"class":116},[106,88803,51328],{"class":51294},[106,88805,51301],{"class":116},[106,88807,88808],{"class":108,"line":1310},[106,88809,2392],{"emptyLinePlaceholder":33},[106,88811,88812,88814,88816],{"class":108,"line":1322},[106,88813,1027],{"class":116},[106,88815,51794],{"class":51294},[106,88817,51301],{"class":116},[106,88819,88820,88822,88824,88826,88828],{"class":108,"line":1604},[106,88821,52138],{"class":116},[106,88823,14],{"class":51294},[106,88825,53488],{"class":116},[106,88827,14],{"class":51294},[106,88829,51301],{"class":116},[106,88831,88832,88834,88836],{"class":108,"line":1609},[106,88833,52138],{"class":116},[106,88835,51807],{"class":51294},[106,88837,51301],{"class":116},[106,88839,88840,88842,88845],{"class":108,"line":1615},[106,88841,70078],{"class":112},[106,88843,88844],{"class":1955}," fn",[106,88846,10846],{"class":116},[106,88848,88849,88852],{"class":108,"line":1620},[106,88850,88851],{"class":112},"      try",[106,88853,15565],{"class":116},[106,88855,88856],{"class":108,"line":1634},[106,88857,88858],{"class":175},"        \u002F\u002F 可能发生错误的代码  要写到try中\n",[106,88860,88861,88863,88865,88867,88869,88871,88873,88876],{"class":108,"line":1639},[106,88862,61264],{"class":112},[106,88864,6818],{"class":165},[106,88866,13557],{"class":112},[106,88868,54390],{"class":116},[106,88870,54393],{"class":1955},[106,88872,117],{"class":116},[106,88874,88875],{"class":221},"'.p'",[106,88877,123],{"class":116},[106,88879,88880,88883,88885],{"class":108,"line":1645},[106,88881,88882],{"class":116},"        p.style.color ",[106,88884,162],{"class":112},[106,88886,67045],{"class":221},[106,88888,88889,88892,88895],{"class":108,"line":1666},[106,88890,88891],{"class":116},"      } ",[106,88893,88894],{"class":112},"catch",[106,88896,88897],{"class":116}," (err) {\n",[106,88899,88900],{"class":108,"line":1671},[106,88901,88902],{"class":175},"        \u002F\u002F 拦截错误，提示浏览器提供的错误信息，但是不中断程序的执行\n",[106,88904,88905,88908,88910],{"class":108,"line":1685},[106,88906,88907],{"class":116},"        console.",[106,88909,58241],{"class":1955},[106,88911,88912],{"class":116},"(err.message)\n",[106,88914,88915],{"class":108,"line":1690},[106,88916,88917],{"class":175},"        \u002F\u002F 想要中断程序，需要加return\n",[106,88919,88920],{"class":108,"line":1719},[106,88921,88922],{"class":175},"        \u002F\u002F return\n",[106,88924,88925],{"class":108,"line":1724},[106,88926,88927],{"class":175},"        \u002F\u002F 或者不用return，搭配throw来使用，因为throw可以中断程序\n",[106,88929,88930,88933,88935,88938,88940,88943],{"class":108,"line":1741},[106,88931,88932],{"class":112},"        throw",[106,88934,11571],{"class":112},[106,88936,88937],{"class":1955}," Error",[106,88939,117],{"class":116},[106,88941,88942],{"class":221},"'你看看，选择器错误了吧'",[106,88944,123],{"class":116},[106,88946,88947],{"class":108,"line":1746},[106,88948,52392],{"class":116},[106,88950,88951],{"class":108,"line":1751},[106,88952,88953],{"class":175},"      \u002F\u002F finally时不管程序对不对，都要去执行的代码\n",[106,88955,88956,88959],{"class":108,"line":1756},[106,88957,88958],{"class":112},"      finally",[106,88960,15565],{"class":116},[106,88962,88963,88966,88968,88971],{"class":108,"line":1770},[106,88964,88965],{"class":1955},"        alert",[106,88967,117],{"class":116},[106,88969,88970],{"class":221},"'弹出对话框'",[106,88972,123],{"class":116},[106,88974,88975],{"class":108,"line":1775},[106,88976,52392],{"class":116},[106,88978,88979,88981,88983,88985,88987],{"class":108,"line":2569},[106,88980,58238],{"class":116},[106,88982,58241],{"class":1955},[106,88984,117],{"class":116},[106,88986,589],{"class":165},[106,88988,123],{"class":116},[106,88990,88991],{"class":108,"line":2583},[106,88992,2392],{"emptyLinePlaceholder":33},[106,88994,88995],{"class":108,"line":2591},[106,88996,2179],{"class":116},[106,88998,88999],{"class":108,"line":2596},[106,89000,89001],{"class":175},"    \u002F\u002F catch后边括号的是形参，写啥内容都行，保存了浏览器提供的错误信息\n",[106,89003,89004],{"class":108,"line":2602},[106,89005,89006],{"class":175},"    \u002F\u002F message是一个属性，没有错误信息时，catch就不会执行\n",[106,89008,89009,89012],{"class":108,"line":2608},[106,89010,89011],{"class":1955},"    fn",[106,89013,1968],{"class":116},[106,89015,89016,89018,89020],{"class":108,"line":2613},[106,89017,52411],{"class":116},[106,89019,51807],{"class":51294},[106,89021,51301],{"class":116},[106,89023,89024,89026,89028],{"class":108,"line":7941},[106,89025,51779],{"class":116},[106,89027,51794],{"class":51294},[106,89029,51301],{"class":116},[106,89031,89032],{"class":108,"line":7965},[106,89033,2392],{"emptyLinePlaceholder":33},[106,89035,89036,89038,89040],{"class":108,"line":7970},[106,89037,51779],{"class":116},[106,89039,50629],{"class":51294},[106,89041,51301],{"class":116},[14,89043,89044],{},"try和catch去处理可能有错误的代码，finally去处理不管有没有错误一定会执行的代码",[60,89046,89047],{"start":1172},[63,89048,89049],{},"debugger",[14,89051,89052],{},[23,89053],{"alt":25,"src":89054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-341.png",[14,89056,89057],{},"在代码比较长的情况用比较方便，在检查代码的时候输上debugger，浏览器f12，直接就跳转断点位置，剩下的调式与之前在浏览器手动打断点方式相同",[48,89059,89061],{"id":89060},"_416-处理this","4.16 处理this",[77,89063,89065],{"id":89064},"_4161-this的指向","4.16.1 this的指向",[60,89067,89068],{},[63,89069,89070],{},"普通函数的this",[14,89072,89073],{},[23,89074],{"alt":25,"src":89075},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-342.png",[60,89077,89078],{"start":28},[63,89079,89080],{},"箭头函数的this",[14,89082,89083],{},[23,89084],{"alt":25,"src":89085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-343.png",[14,89087,89088],{},[23,89089],{"alt":25,"src":89090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-344.png",[14,89092,89093],{},[23,89094],{"alt":25,"src":89095},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-345.png",[77,89097,89099],{"id":89098},"_4162-this的改变","4.16.2 this的改变",[14,89101,89102],{},"call() apply() bind()",[60,89104,89105],{},[63,89106,89107],{},"call()",[14,89109,89110],{},[23,89111],{"alt":25,"src":89112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-346.png",[14,89114,89115],{},"两个作用：①调用函数；②改变this指向",[97,89117,89119],{"className":53061,"code":89118,"language":53063,"meta":25,"style":25},"\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",[103,89120,89121,89129,89137,89141,89146,89150,89155,89160,89165,89169,89174,89182],{"__ignoreMap":25},[106,89122,89123,89125,89127],{"class":108,"line":109},[106,89124,1027],{"class":116},[106,89126,51794],{"class":51294},[106,89128,51301],{"class":116},[106,89130,89131,89133,89135],{"class":108,"line":28},[106,89132,52138],{"class":116},[106,89134,51807],{"class":51294},[106,89136,51301],{"class":116},[106,89138,89139],{"class":108,"line":1172},[106,89140,71517],{"class":116},[106,89142,89143],{"class":108,"line":1187},[106,89144,89145],{"class":116},"      uname: 'pink'\n",[106,89147,89148],{"class":108,"line":1193},[106,89149,2179],{"class":116},[106,89151,89152],{"class":108,"line":1207},[106,89153,89154],{"class":116},"    function fn(x, y) {\n",[106,89156,89157],{"class":108,"line":1213},[106,89158,89159],{"class":116},"      console.log(this)  \u002F\u002Fwindow\n",[106,89161,89162],{"class":108,"line":1304},[106,89163,89164],{"class":116},"      console.log(x + y)\n",[106,89166,89167],{"class":108,"line":1310},[106,89168,2179],{"class":116},[106,89170,89171],{"class":108,"line":1322},[106,89172,89173],{"class":116},"    fn.call(obj, 1, 2)\n",[106,89175,89176,89178,89180],{"class":108,"line":1604},[106,89177,52411],{"class":116},[106,89179,51807],{"class":51294},[106,89181,51301],{"class":116},[106,89183,89184,89186,89188],{"class":108,"line":1609},[106,89185,51779],{"class":116},[106,89187,51794],{"class":51294},[106,89189,51301],{"class":116},[14,89191,89192],{},[23,89193],{"alt":25,"src":89194},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-347.png",[60,89196,89197],{"start":28},[63,89198,89199],{},"apply()",[14,89201,89202],{},[23,89203],{"alt":25,"src":89204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-348.png",[14,89206,89115],{},[14,89208,89209],{},"call传递的是普通参数，而apply必须传递的是数组",[97,89211,89213],{"className":50627,"code":89212,"language":50629,"meta":25,"style":25},"\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",[103,89214,89215,89225,89239,89243,89251,89265,89285,89297,89305,89309,89317,89325,89335,89342,89346,89351,89367,89379,89393,89397,89402,89421,89426,89430,89435,89440,89448,89453,89475,89480,89496,89512,89524,89528,89533,89552,89560,89568,89572],{"__ignoreMap":25},[106,89216,89217,89219,89221,89223],{"class":108,"line":109},[106,89218,51291],{"class":116},[106,89220,51295],{"class":51294},[106,89222,51298],{"class":1955},[106,89224,51301],{"class":116},[106,89226,89227,89229,89231,89233,89235,89237],{"class":108,"line":28},[106,89228,1027],{"class":116},[106,89230,50629],{"class":51294},[106,89232,51310],{"class":1955},[106,89234,162],{"class":116},[106,89236,51315],{"class":221},[106,89238,51301],{"class":116},[106,89240,89241],{"class":108,"line":1172},[106,89242,2392],{"emptyLinePlaceholder":33},[106,89244,89245,89247,89249],{"class":108,"line":1187},[106,89246,1027],{"class":116},[106,89248,51328],{"class":51294},[106,89250,51301],{"class":116},[106,89252,89253,89255,89257,89259,89261,89263],{"class":108,"line":1193},[106,89254,52138],{"class":116},[106,89256,51338],{"class":51294},[106,89258,51341],{"class":1955},[106,89260,162],{"class":116},[106,89262,51346],{"class":221},[106,89264,51301],{"class":116},[106,89266,89267,89269,89271,89273,89275,89277,89279,89281,89283],{"class":108,"line":1207},[106,89268,52138],{"class":116},[106,89270,51338],{"class":51294},[106,89272,14913],{"class":1955},[106,89274,162],{"class":116},[106,89276,51385],{"class":221},[106,89278,51365],{"class":1955},[106,89280,162],{"class":116},[106,89282,51392],{"class":221},[106,89284,51301],{"class":116},[106,89286,89287,89289,89291,89293,89295],{"class":108,"line":1213},[106,89288,52138],{"class":116},[106,89290,51401],{"class":51294},[106,89292,51404],{"class":116},[106,89294,51401],{"class":51294},[106,89296,51301],{"class":116},[106,89298,89299,89301,89303],{"class":108,"line":1304},[106,89300,51779],{"class":116},[106,89302,51328],{"class":51294},[106,89304,51301],{"class":116},[106,89306,89307],{"class":108,"line":1310},[106,89308,2392],{"emptyLinePlaceholder":33},[106,89310,89311,89313,89315],{"class":108,"line":1322},[106,89312,1027],{"class":116},[106,89314,51794],{"class":51294},[106,89316,51301],{"class":116},[106,89318,89319,89321,89323],{"class":108,"line":1604},[106,89320,52138],{"class":116},[106,89322,51807],{"class":51294},[106,89324,51301],{"class":116},[106,89326,89327,89329,89331,89333],{"class":108,"line":1609},[106,89328,11214],{"class":112},[106,89330,69965],{"class":165},[106,89332,13557],{"class":112},[106,89334,15565],{"class":116},[106,89336,89337,89339],{"class":108,"line":1615},[106,89338,71620],{"class":116},[106,89340,89341],{"class":165},"18\n",[106,89343,89344],{"class":108,"line":1620},[106,89345,2179],{"class":116},[106,89347,89348],{"class":108,"line":1634},[106,89349,89350],{"class":175},"    \u002F\u002F 形参接收的不是数组，是数组里的值，但实参必须是数组\n",[106,89352,89353,89355,89357,89359,89361,89363,89365],{"class":108,"line":1639},[106,89354,70078],{"class":112},[106,89356,88844],{"class":1955},[106,89358,117],{"class":116},[106,89360,937],{"class":5209},[106,89362,12428],{"class":116},[106,89364,962],{"class":5209},[106,89366,12435],{"class":116},[106,89368,89369,89371,89373,89375,89377],{"class":108,"line":1645},[106,89370,58238],{"class":116},[106,89372,58241],{"class":1955},[106,89374,117],{"class":116},[106,89376,86987],{"class":165},[106,89378,123],{"class":116},[106,89380,89381,89383,89385,89388,89390],{"class":108,"line":1666},[106,89382,58238],{"class":116},[106,89384,58241],{"class":1955},[106,89386,89387],{"class":116},"(x ",[106,89389,598],{"class":112},[106,89391,89392],{"class":116}," y)\n",[106,89394,89395],{"class":108,"line":1671},[106,89396,2179],{"class":116},[106,89398,89399],{"class":108,"line":1685},[106,89400,89401],{"class":175},"    \u002F\u002F fn.apply(this指向谁, 数组参数)\n",[106,89403,89404,89407,89410,89413,89415,89417,89419],{"class":108,"line":1690},[106,89405,89406],{"class":116},"    fn.",[106,89408,89409],{"class":1955},"apply",[106,89411,89412],{"class":116},"(obj, [",[106,89414,334],{"class":165},[106,89416,12428],{"class":116},[106,89418,194],{"class":165},[106,89420,4649],{"class":116},[106,89422,89423],{"class":108,"line":1719},[106,89424,89425],{"class":175},"    \u002F\u002F 和call一样，返回值就是函数的返回值，因为他就是在调用函数\n",[106,89427,89428],{"class":108,"line":1724},[106,89429,2392],{"emptyLinePlaceholder":33},[106,89431,89432],{"class":108,"line":1741},[106,89433,89434],{"class":175},"    \u002F\u002F 使用场景：求数组最大值\n",[106,89436,89437],{"class":108,"line":1746},[106,89438,89439],{"class":175},"    \u002F\u002F const max = Math.max(1, 2, 3)\n",[106,89441,89442,89445],{"class":108,"line":1751},[106,89443,89444],{"class":175},"    \u002F\u002F console.log(max)",[106,89446,89447],{"class":175},"   \u002F\u002F3\n",[106,89449,89450],{"class":108,"line":1756},[106,89451,89452],{"class":175},"    \u002F\u002F 指向空或者Math都是可以的\n",[106,89454,89455,89457,89459,89461,89463,89465,89467,89469,89471,89473],{"class":108,"line":1770},[106,89456,11214],{"class":112},[106,89458,57689],{"class":165},[106,89460,13557],{"class":112},[106,89462,52220],{"class":116},[106,89464,428],{"class":165},[106,89466,12428],{"class":116},[106,89468,621],{"class":165},[106,89470,12428],{"class":116},[106,89472,652],{"class":165},[106,89474,33240],{"class":116},[106,89476,89477],{"class":108,"line":1775},[106,89478,89479],{"class":175},"    \u002F\u002F apply这个方法实参必须是数组，形参是接收的是数组中的每一个值\n",[106,89481,89482,89484,89486,89488,89491,89493],{"class":108,"line":2569},[106,89483,11214],{"class":112},[106,89485,5944],{"class":165},[106,89487,13557],{"class":112},[106,89489,89490],{"class":116}," Math.max.",[106,89492,89409],{"class":1955},[106,89494,89495],{"class":116},"(Math, arr)\n",[106,89497,89498,89500,89503,89505,89508,89510],{"class":108,"line":2583},[106,89499,11214],{"class":112},[106,89501,89502],{"class":165}," min",[106,89504,13557],{"class":112},[106,89506,89507],{"class":116}," Math.min.",[106,89509,89409],{"class":1955},[106,89511,89495],{"class":116},[106,89513,89514,89516,89518,89521],{"class":108,"line":2591},[106,89515,73747],{"class":116},[106,89517,58241],{"class":1955},[106,89519,89520],{"class":116},"(max, min)     ",[106,89522,89523],{"class":175},"\u002F\u002F100,4\n",[106,89525,89526],{"class":108,"line":2596},[106,89527,2392],{"emptyLinePlaceholder":33},[106,89529,89530],{"class":108,"line":2602},[106,89531,89532],{"class":175},"    \u002F\u002F 求最大值的另一种方式:展开运算符\n",[106,89534,89535,89537,89539,89542,89544,89546,89549],{"class":108,"line":2608},[106,89536,73747],{"class":116},[106,89538,58241],{"class":1955},[106,89540,89541],{"class":116},"(Max.",[106,89543,6008],{"class":1955},[106,89545,117],{"class":116},[106,89547,89548],{"class":112},"...",[106,89550,89551],{"class":116},"arr))\n",[106,89553,89554,89556,89558],{"class":108,"line":2613},[106,89555,52411],{"class":116},[106,89557,51807],{"class":51294},[106,89559,51301],{"class":116},[106,89561,89562,89564,89566],{"class":108,"line":7941},[106,89563,51779],{"class":116},[106,89565,51794],{"class":51294},[106,89567,51301],{"class":116},[106,89569,89570],{"class":108,"line":7965},[106,89571,2392],{"emptyLinePlaceholder":33},[106,89573,89574,89576,89578],{"class":108,"line":7970},[106,89575,51779],{"class":116},[106,89577,50629],{"class":51294},[106,89579,51301],{"class":116},[14,89581,89582],{},[23,89583],{"alt":25,"src":89584},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-349.png",[60,89586,89587],{"start":1172},[63,89588,89589],{},"bind()",[14,89591,89592],{},[23,89593],{"alt":25,"src":89594},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-350.png",[14,89596,89597],{},"bind()相比于call和apply来说不会调用函数，call和apply只要一写就直接调用函数",[14,89599,89600],{},"bind的语法跟call很相似",[97,89602,89604],{"className":53061,"code":89603,"language":53063,"meta":25,"style":25},"\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",[103,89605,89606,89614,89622,89626,89631,89635,89639,89644,89648,89653,89658,89663,89668,89673,89678,89683,89687,89695],{"__ignoreMap":25},[106,89607,89608,89610,89612],{"class":108,"line":109},[106,89609,1027],{"class":116},[106,89611,51794],{"class":51294},[106,89613,51301],{"class":116},[106,89615,89616,89618,89620],{"class":108,"line":28},[106,89617,52138],{"class":116},[106,89619,51807],{"class":51294},[106,89621,51301],{"class":116},[106,89623,89624],{"class":108,"line":1172},[106,89625,71517],{"class":116},[106,89627,89628],{"class":108,"line":1187},[106,89629,89630],{"class":116},"      age: 18\n",[106,89632,89633],{"class":108,"line":1193},[106,89634,2179],{"class":116},[106,89636,89637],{"class":108,"line":1207},[106,89638,77137],{"class":116},[106,89640,89641],{"class":108,"line":1213},[106,89642,89643],{"class":116},"      console.log(this)\n",[106,89645,89646],{"class":108,"line":1304},[106,89647,2179],{"class":116},[106,89649,89650],{"class":108,"line":1310},[106,89651,89652],{"class":116},"    \u002F\u002F 1.bind 不会调用函数\n",[106,89654,89655],{"class":108,"line":1322},[106,89656,89657],{"class":116},"    \u002F\u002F 2.bind能改变this的指向\n",[106,89659,89660],{"class":108,"line":1604},[106,89661,89662],{"class":116},"    fn.bind()\n",[106,89664,89665],{"class":108,"line":1609},[106,89666,89667],{"class":116},"    \u002F\u002F 3.返回值是一个函数,他相当于进行的是对原函数拷贝,然后新函数的这个this指向我们设定的那个指定值\n",[106,89669,89670],{"class":108,"line":1615},[106,89671,89672],{"class":116},"    const fun = fn.bind(obj)\n",[106,89674,89675],{"class":108,"line":1620},[106,89676,89677],{"class":116},"    \u002F\u002F console.log(fun)\n",[106,89679,89680],{"class":108,"line":1634},[106,89681,89682],{"class":116},"    \u002F\u002F 调用,查看this的指向\n",[106,89684,89685],{"class":108,"line":1639},[106,89686,52645],{"class":116},[106,89688,89689,89691,89693],{"class":108,"line":1645},[106,89690,52411],{"class":116},[106,89692,51807],{"class":51294},[106,89694,51301],{"class":116},[106,89696,89697,89699,89701],{"class":108,"line":1666},[106,89698,51779],{"class":116},[106,89700,51794],{"class":51294},[106,89702,51301],{"class":116},[14,89704,89705],{},[23,89706],{"alt":25,"src":89707},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-351.png",[60,89709,89710],{"start":1187},[63,89711,89712],{},"按钮案例：按钮点击之后被禁用，两秒之后自动变为不禁用状态，要求尽可能多的用this",[97,89714,89716],{"className":53061,"code":89715,"language":53063,"meta":25,"style":25},"\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",[103,89717,89718,89726,89739,89747,89752,89756,89761,89766,89771,89776,89781,89786,89791,89796,89800,89808],{"__ignoreMap":25},[106,89719,89720,89722,89724],{"class":108,"line":109},[106,89721,1027],{"class":116},[106,89723,51794],{"class":51294},[106,89725,51301],{"class":116},[106,89727,89728,89730,89732,89735,89737],{"class":108,"line":28},[106,89729,52138],{"class":116},[106,89731,53881],{"class":51294},[106,89733,89734],{"class":116},">禁用\u003C\u002F",[106,89736,53881],{"class":51294},[106,89738,51301],{"class":116},[106,89740,89741,89743,89745],{"class":108,"line":1172},[106,89742,52138],{"class":116},[106,89744,51807],{"class":51294},[106,89746,51301],{"class":116},[106,89748,89749],{"class":108,"line":1187},[106,89750,89751],{"class":116},"    const btn = document.querySelector('button')\n",[106,89753,89754],{"class":108,"line":1193},[106,89755,59010],{"class":116},[106,89757,89758],{"class":108,"line":1207},[106,89759,89760],{"class":116},"      this.disabled = true\n",[106,89762,89763],{"class":108,"line":1213},[106,89764,89765],{"class":116},"      \u002F\u002F 定时器是window进行调用的\n",[106,89767,89768],{"class":108,"line":1304},[106,89769,89770],{"class":116},"      setTimeout(function () {\n",[106,89772,89773],{"class":108,"line":1310},[106,89774,89775],{"class":116},"        \u002F\u002F 在这个普通函数里面，我们要this由原来的window 改为 btn\n",[106,89777,89778],{"class":108,"line":1322},[106,89779,89780],{"class":116},"        this.disabled = false\n",[106,89782,89783],{"class":108,"line":1604},[106,89784,89785],{"class":116},"      }.bind(this), 2000)\n",[106,89787,89788],{"class":108,"line":1609},[106,89789,89790],{"class":116},"      \u002F\u002F 上边的这个this是在延时函数外面的，所以这个this跟上边的那个this是相同的，就是指的是btn\n",[106,89792,89793],{"class":108,"line":1615},[106,89794,89795],{"class":116},"      \u002F\u002F .bind(this)之后就已经拷贝完之前对象了，就可以等两秒之后延时函数来调用它就可以了\n",[106,89797,89798],{"class":108,"line":1620},[106,89799,33455],{"class":116},[106,89801,89802,89804,89806],{"class":108,"line":1634},[106,89803,52411],{"class":116},[106,89805,51807],{"class":51294},[106,89807,51301],{"class":116},[106,89809,89810,89812,89814],{"class":108,"line":1639},[106,89811,51779],{"class":116},[106,89813,51794],{"class":51294},[106,89815,51301],{"class":116},[60,89817,89818],{"start":1193},[63,89819,21946],{},[14,89821,89822],{},[23,89823],{"alt":25,"src":89824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-352.png",[48,89826,89828],{"id":89827},"_417-性能优化","4.17 性能优化",[77,89830,89832],{"id":89831},"_4171-防抖","4.17.1 防抖",[14,89834,89835],{},[23,89836],{"alt":25,"src":89837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-353.png",[14,89839,89840],{},[266,89841,89842],{},"案例：利用防抖来处理-鼠标经过盒子显示文字（要求:鼠标在盒子上移动，里面的数字就会变化+1）",[14,89844,89845],{},"防抖实现方式：",[1124,89847,89848],{},[63,89849,89850],{},"lodash 提供了防抖处理",[14,89852,89853],{},"_.debounce(func,[wait=0],[options={}])",[14,89855,89856],{},"创建一个debounced（防抖函数），该函数会从上一次被调用后，延迟wait毫秒后调用func方法。",[97,89858,89860],{"className":50627,"code":89859,"language":50629,"meta":25,"style":25},"\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",[103,89861,89862,89872,89886,89890,89898,89912,89932,89944,89952,89958,89968,89980,89992,90003,90015,90025,90035,90048,90052,90060,90068,90072,90080,90098,90116,90124,90143,90153,90162,90173,90178,90182,90187,90192,90197,90222,90230,90238,90242],{"__ignoreMap":25},[106,89863,89864,89866,89868,89870],{"class":108,"line":109},[106,89865,51291],{"class":116},[106,89867,51295],{"class":51294},[106,89869,51298],{"class":1955},[106,89871,51301],{"class":116},[106,89873,89874,89876,89878,89880,89882,89884],{"class":108,"line":28},[106,89875,1027],{"class":116},[106,89877,50629],{"class":51294},[106,89879,51310],{"class":1955},[106,89881,162],{"class":116},[106,89883,51315],{"class":221},[106,89885,51301],{"class":116},[106,89887,89888],{"class":108,"line":1172},[106,89889,2392],{"emptyLinePlaceholder":33},[106,89891,89892,89894,89896],{"class":108,"line":1187},[106,89893,1027],{"class":116},[106,89895,51328],{"class":51294},[106,89897,51301],{"class":116},[106,89899,89900,89902,89904,89906,89908,89910],{"class":108,"line":1193},[106,89901,52138],{"class":116},[106,89903,51338],{"class":51294},[106,89905,51341],{"class":1955},[106,89907,162],{"class":116},[106,89909,51346],{"class":221},[106,89911,51301],{"class":116},[106,89913,89914,89916,89918,89920,89922,89924,89926,89928,89930],{"class":108,"line":1207},[106,89915,52138],{"class":116},[106,89917,51338],{"class":51294},[106,89919,14913],{"class":1955},[106,89921,162],{"class":116},[106,89923,51385],{"class":221},[106,89925,51365],{"class":1955},[106,89927,162],{"class":116},[106,89929,51392],{"class":221},[106,89931,51301],{"class":116},[106,89933,89934,89936,89938,89940,89942],{"class":108,"line":1213},[106,89935,52138],{"class":116},[106,89937,51401],{"class":51294},[106,89939,51404],{"class":116},[106,89941,51401],{"class":51294},[106,89943,51301],{"class":116},[106,89945,89946,89948,89950],{"class":108,"line":1304},[106,89947,52138],{"class":116},[106,89949,5119],{"class":51294},[106,89951,51301],{"class":116},[106,89953,89954,89956],{"class":108,"line":1310},[106,89955,54746],{"class":1955},[106,89957,15565],{"class":116},[106,89959,89960,89962,89964,89966],{"class":108,"line":1322},[106,89961,72590],{"class":165},[106,89963,51431],{"class":116},[106,89965,60499],{"class":165},[106,89967,1283],{"class":116},[106,89969,89970,89972,89974,89976,89978],{"class":108,"line":1604},[106,89971,54765],{"class":165},[106,89973,51431],{"class":116},[106,89975,1714],{"class":165},[106,89977,51486],{"class":112},[106,89979,1283],{"class":116},[106,89981,89982,89984,89986,89988,89990],{"class":108,"line":1609},[106,89983,54779],{"class":165},[106,89985,51431],{"class":116},[106,89987,1714],{"class":165},[106,89989,51486],{"class":112},[106,89991,1283],{"class":116},[106,89993,89994,89996,89998,90001],{"class":108,"line":1615},[106,89995,54878],{"class":165},[106,89997,51431],{"class":116},[106,89999,90000],{"class":165},"gray",[106,90002,1283],{"class":116},[106,90004,90005,90007,90009,90011,90013],{"class":108,"line":1620},[106,90006,54916],{"class":165},[106,90008,51431],{"class":116},[106,90010,942],{"class":165},[106,90012,51486],{"class":112},[106,90014,1283],{"class":116},[106,90016,90017,90019,90021,90023],{"class":108,"line":1634},[106,90018,57410],{"class":165},[106,90020,51431],{"class":116},[106,90022,60836],{"class":165},[106,90024,1283],{"class":116},[106,90026,90027,90029,90031,90033],{"class":108,"line":1639},[106,90028,57280],{"class":165},[106,90030,51431],{"class":116},[106,90032,51586],{"class":165},[106,90034,1283],{"class":116},[106,90036,90037,90040,90042,90044,90046],{"class":108,"line":1645},[106,90038,90039],{"class":165},"      padding-top",[106,90041,51431],{"class":116},[106,90043,436],{"class":165},[106,90045,51486],{"class":112},[106,90047,1283],{"class":116},[106,90049,90050],{"class":108,"line":1666},[106,90051,2179],{"class":116},[106,90053,90054,90056,90058],{"class":108,"line":1671},[106,90055,52411],{"class":116},[106,90057,5119],{"class":51294},[106,90059,51301],{"class":116},[106,90061,90062,90064,90066],{"class":108,"line":1685},[106,90063,51779],{"class":116},[106,90065,51328],{"class":51294},[106,90067,51301],{"class":116},[106,90069,90070],{"class":108,"line":1690},[106,90071,2392],{"emptyLinePlaceholder":33},[106,90073,90074,90076,90078],{"class":108,"line":1719},[106,90075,1027],{"class":116},[106,90077,51794],{"class":51294},[106,90079,51301],{"class":116},[106,90081,90082,90084,90086,90088,90090,90092,90094,90096],{"class":108,"line":1724},[106,90083,52138],{"class":116},[106,90085,51605],{"class":51294},[106,90087,53480],{"class":1955},[106,90089,162],{"class":116},[106,90091,53485],{"class":221},[106,90093,55308],{"class":116},[106,90095,51605],{"class":51294},[106,90097,51301],{"class":116},[106,90099,90100,90102,90104,90106,90108,90110,90112,90114],{"class":108,"line":1741},[106,90101,52138],{"class":116},[106,90103,51807],{"class":51294},[106,90105,55233],{"class":1955},[106,90107,162],{"class":116},[106,90109,88268],{"class":221},[106,90111,55308],{"class":116},[106,90113,51807],{"class":51294},[106,90115,51301],{"class":116},[106,90117,90118,90120,90122],{"class":108,"line":1746},[106,90119,52138],{"class":116},[106,90121,51807],{"class":51294},[106,90123,51301],{"class":116},[106,90125,90126,90128,90130,90132,90134,90136,90138,90141],{"class":108,"line":1751},[106,90127,11214],{"class":112},[106,90129,86927],{"class":165},[106,90131,13557],{"class":112},[106,90133,54390],{"class":116},[106,90135,54393],{"class":1955},[106,90137,117],{"class":116},[106,90139,90140],{"class":221},"'.box'",[106,90142,123],{"class":116},[106,90144,90145,90147,90149,90151],{"class":108,"line":1756},[106,90146,52213],{"class":112},[106,90148,9431],{"class":116},[106,90150,162],{"class":112},[106,90152,47327],{"class":165},[106,90154,90155,90157,90160],{"class":108,"line":1770},[106,90156,70078],{"class":112},[106,90158,90159],{"class":1955}," mouseMove",[106,90161,10846],{"class":116},[106,90163,90164,90167,90169,90171],{"class":108,"line":1775},[106,90165,90166],{"class":116},"      box.innerHTML ",[106,90168,162],{"class":112},[106,90170,3024],{"class":116},[106,90172,2694],{"class":112},[106,90174,90175],{"class":108,"line":2569},[106,90176,90177],{"class":175},"      \u002F\u002F 如果里面存在大量消耗性能的代码，比如dom操作，比如数据处理，可能会造成卡顿\n",[106,90179,90180],{"class":108,"line":2583},[106,90181,2179],{"class":116},[106,90183,90184],{"class":108,"line":2591},[106,90185,90186],{"class":175},"    \u002F\u002F box.addEventListener('mousemove', mouseMove)\n",[106,90188,90189],{"class":108,"line":2596},[106,90190,90191],{"class":175},"    \u002F\u002F 利用lodash库实现防抖 -500毫秒之后才去+1\n",[106,90193,90194],{"class":108,"line":2602},[106,90195,90196],{"class":175},"    \u002F\u002F 以前在事件监听中的执行函数是不可以加括号的，加括号就成调用了，但是现在是需要传递参数的，所以必须加\n",[106,90198,90199,90202,90204,90206,90209,90212,90215,90218,90220],{"class":108,"line":2608},[106,90200,90201],{"class":116},"    box.",[106,90203,57807],{"class":1955},[106,90205,117],{"class":116},[106,90207,90208],{"class":221},"'mousemove'",[106,90210,90211],{"class":116},", _.",[106,90213,90214],{"class":1955},"debounce",[106,90216,90217],{"class":116},"(mouseMove, ",[106,90219,65068],{"class":165},[106,90221,30491],{"class":116},[106,90223,90224,90226,90228],{"class":108,"line":2613},[106,90225,52411],{"class":116},[106,90227,51807],{"class":51294},[106,90229,51301],{"class":116},[106,90231,90232,90234,90236],{"class":108,"line":7941},[106,90233,51779],{"class":116},[106,90235,51794],{"class":51294},[106,90237,51301],{"class":116},[106,90239,90240],{"class":108,"line":7965},[106,90241,2392],{"emptyLinePlaceholder":33},[106,90243,90244,90246,90248],{"class":108,"line":7970},[106,90245,51779],{"class":116},[106,90247,50629],{"class":51294},[106,90249,51301],{"class":116},[1124,90251,90252],{},[63,90253,90254],{},"手写一个防抖函数来处理",[14,90256,90257],{},"防抖的核心就是利用定时器来实现的：",[14,90259,90260],{},"①声明一个定时器变量",[14,90262,90263],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器先清除以前的定时器",[14,90265,90266],{},"③如果没有定时器则开启定时器，记得存到变量里面",[97,90268,90270],{"className":50627,"code":90269,"language":50629,"meta":25,"style":25},"\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",[103,90271,90272,90282,90296,90300,90308,90322,90342,90354,90362,90368,90378,90390,90402,90412,90424,90434,90444,90456,90460,90468,90476,90480,90488,90506,90524,90532,90550,90560,90568,90578,90582,90586,90590,90595,90600,90605,90610,90615,90620,90638,90645,90650,90658,90663,90676,90692,90702,90707,90711,90715,90735,90739,90744,90749,90754,90759,90767,90775,90779],{"__ignoreMap":25},[106,90273,90274,90276,90278,90280],{"class":108,"line":109},[106,90275,51291],{"class":116},[106,90277,51295],{"class":51294},[106,90279,51298],{"class":1955},[106,90281,51301],{"class":116},[106,90283,90284,90286,90288,90290,90292,90294],{"class":108,"line":28},[106,90285,1027],{"class":116},[106,90287,50629],{"class":51294},[106,90289,51310],{"class":1955},[106,90291,162],{"class":116},[106,90293,51315],{"class":221},[106,90295,51301],{"class":116},[106,90297,90298],{"class":108,"line":1172},[106,90299,2392],{"emptyLinePlaceholder":33},[106,90301,90302,90304,90306],{"class":108,"line":1187},[106,90303,1027],{"class":116},[106,90305,51328],{"class":51294},[106,90307,51301],{"class":116},[106,90309,90310,90312,90314,90316,90318,90320],{"class":108,"line":1193},[106,90311,52138],{"class":116},[106,90313,51338],{"class":51294},[106,90315,51341],{"class":1955},[106,90317,162],{"class":116},[106,90319,51346],{"class":221},[106,90321,51301],{"class":116},[106,90323,90324,90326,90328,90330,90332,90334,90336,90338,90340],{"class":108,"line":1207},[106,90325,52138],{"class":116},[106,90327,51338],{"class":51294},[106,90329,14913],{"class":1955},[106,90331,162],{"class":116},[106,90333,51385],{"class":221},[106,90335,51365],{"class":1955},[106,90337,162],{"class":116},[106,90339,51392],{"class":221},[106,90341,51301],{"class":116},[106,90343,90344,90346,90348,90350,90352],{"class":108,"line":1213},[106,90345,52138],{"class":116},[106,90347,51401],{"class":51294},[106,90349,51404],{"class":116},[106,90351,51401],{"class":51294},[106,90353,51301],{"class":116},[106,90355,90356,90358,90360],{"class":108,"line":1304},[106,90357,52138],{"class":116},[106,90359,5119],{"class":51294},[106,90361,51301],{"class":116},[106,90363,90364,90366],{"class":108,"line":1310},[106,90365,54746],{"class":1955},[106,90367,15565],{"class":116},[106,90369,90370,90372,90374,90376],{"class":108,"line":1322},[106,90371,72590],{"class":165},[106,90373,51431],{"class":116},[106,90375,60499],{"class":165},[106,90377,1283],{"class":116},[106,90379,90380,90382,90384,90386,90388],{"class":108,"line":1604},[106,90381,54765],{"class":165},[106,90383,51431],{"class":116},[106,90385,1714],{"class":165},[106,90387,51486],{"class":112},[106,90389,1283],{"class":116},[106,90391,90392,90394,90396,90398,90400],{"class":108,"line":1609},[106,90393,54779],{"class":165},[106,90395,51431],{"class":116},[106,90397,1714],{"class":165},[106,90399,51486],{"class":112},[106,90401,1283],{"class":116},[106,90403,90404,90406,90408,90410],{"class":108,"line":1615},[106,90405,54878],{"class":165},[106,90407,51431],{"class":116},[106,90409,90000],{"class":165},[106,90411,1283],{"class":116},[106,90413,90414,90416,90418,90420,90422],{"class":108,"line":1620},[106,90415,54916],{"class":165},[106,90417,51431],{"class":116},[106,90419,942],{"class":165},[106,90421,51486],{"class":112},[106,90423,1283],{"class":116},[106,90425,90426,90428,90430,90432],{"class":108,"line":1634},[106,90427,57410],{"class":165},[106,90429,51431],{"class":116},[106,90431,60836],{"class":165},[106,90433,1283],{"class":116},[106,90435,90436,90438,90440,90442],{"class":108,"line":1639},[106,90437,57280],{"class":165},[106,90439,51431],{"class":116},[106,90441,51586],{"class":165},[106,90443,1283],{"class":116},[106,90445,90446,90448,90450,90452,90454],{"class":108,"line":1645},[106,90447,90039],{"class":165},[106,90449,51431],{"class":116},[106,90451,436],{"class":165},[106,90453,51486],{"class":112},[106,90455,1283],{"class":116},[106,90457,90458],{"class":108,"line":1666},[106,90459,2179],{"class":116},[106,90461,90462,90464,90466],{"class":108,"line":1671},[106,90463,52411],{"class":116},[106,90465,5119],{"class":51294},[106,90467,51301],{"class":116},[106,90469,90470,90472,90474],{"class":108,"line":1685},[106,90471,51779],{"class":116},[106,90473,51328],{"class":51294},[106,90475,51301],{"class":116},[106,90477,90478],{"class":108,"line":1690},[106,90479,2392],{"emptyLinePlaceholder":33},[106,90481,90482,90484,90486],{"class":108,"line":1719},[106,90483,1027],{"class":116},[106,90485,51794],{"class":51294},[106,90487,51301],{"class":116},[106,90489,90490,90492,90494,90496,90498,90500,90502,90504],{"class":108,"line":1724},[106,90491,52138],{"class":116},[106,90493,51605],{"class":51294},[106,90495,53480],{"class":1955},[106,90497,162],{"class":116},[106,90499,53485],{"class":221},[106,90501,55308],{"class":116},[106,90503,51605],{"class":51294},[106,90505,51301],{"class":116},[106,90507,90508,90510,90512,90514,90516,90518,90520,90522],{"class":108,"line":1741},[106,90509,52138],{"class":116},[106,90511,51807],{"class":51294},[106,90513,55233],{"class":1955},[106,90515,162],{"class":116},[106,90517,88268],{"class":221},[106,90519,55308],{"class":116},[106,90521,51807],{"class":51294},[106,90523,51301],{"class":116},[106,90525,90526,90528,90530],{"class":108,"line":1746},[106,90527,52138],{"class":116},[106,90529,51807],{"class":51294},[106,90531,51301],{"class":116},[106,90533,90534,90536,90538,90540,90542,90544,90546,90548],{"class":108,"line":1751},[106,90535,11214],{"class":112},[106,90537,86927],{"class":165},[106,90539,13557],{"class":112},[106,90541,54390],{"class":116},[106,90543,54393],{"class":1955},[106,90545,117],{"class":116},[106,90547,90140],{"class":221},[106,90549,123],{"class":116},[106,90551,90552,90554,90556,90558],{"class":108,"line":1756},[106,90553,52213],{"class":112},[106,90555,9431],{"class":116},[106,90557,162],{"class":112},[106,90559,47327],{"class":165},[106,90561,90562,90564,90566],{"class":108,"line":1770},[106,90563,70078],{"class":112},[106,90565,90159],{"class":1955},[106,90567,10846],{"class":116},[106,90569,90570,90572,90574,90576],{"class":108,"line":1775},[106,90571,90166],{"class":116},[106,90573,162],{"class":112},[106,90575,3024],{"class":116},[106,90577,2694],{"class":112},[106,90579,90580],{"class":108,"line":2569},[106,90581,90177],{"class":175},[106,90583,90584],{"class":108,"line":2583},[106,90585,2179],{"class":116},[106,90587,90588],{"class":108,"line":2591},[106,90589,90186],{"class":175},[106,90591,90592],{"class":108,"line":2596},[106,90593,90594],{"class":175},"    \u002F\u002F 手写防抖函数\n",[106,90596,90597],{"class":108,"line":2602},[106,90598,90599],{"class":175},"    \u002F\u002F 核心是利用延时器setTimeout来实现的\n",[106,90601,90602],{"class":108,"line":2608},[106,90603,90604],{"class":175},"    \u002F\u002F 1.声明定时器变量\n",[106,90606,90607],{"class":108,"line":2613},[106,90608,90609],{"class":175},"    \u002F\u002F 2.每次鼠标移动(事件触发)的时候都要先判断是否有定时器,如果有先清除以前的定时器\n",[106,90611,90612],{"class":108,"line":7941},[106,90613,90614],{"class":175},"    \u002F\u002F 3.如果没有定时器,则开启定时器,存入到定时器变量里面\n",[106,90616,90617],{"class":108,"line":7965},[106,90618,90619],{"class":175},"    \u002F\u002F 4.定时器里面写函数调用\n",[106,90621,90622,90624,90627,90629,90632,90634,90636],{"class":108,"line":7970},[106,90623,70078],{"class":112},[106,90625,90626],{"class":1955}," debounce",[106,90628,117],{"class":116},[106,90630,90631],{"class":5209},"fn",[106,90633,12428],{"class":116},[106,90635,837],{"class":5209},[106,90637,12435],{"class":116},[106,90639,90640,90642],{"class":108,"line":7976},[106,90641,79766],{"class":112},[106,90643,90644],{"class":116}," timer\n",[106,90646,90647],{"class":108,"line":8003},[106,90648,90649],{"class":175},"      \u002F\u002F return 返回一个匿名函数\n",[106,90651,90652,90654,90656],{"class":108,"line":8008},[106,90653,73976],{"class":112},[106,90655,58912],{"class":112},[106,90657,54446],{"class":116},[106,90659,90660],{"class":108,"line":8014},[106,90661,90662],{"class":175},"        \u002F\u002F 这里边写第二三四步\n",[106,90664,90665,90667,90670,90673],{"class":108,"line":8026},[106,90666,2489],{"class":112},[106,90668,90669],{"class":116}," (timer) ",[106,90671,90672],{"class":1955},"clearTimeout",[106,90674,90675],{"class":116},"(timer)\n",[106,90677,90678,90681,90683,90686,90688,90690],{"class":108,"line":8038},[106,90679,90680],{"class":116},"        timer ",[106,90682,162],{"class":112},[106,90684,90685],{"class":1955}," setTimeout",[106,90687,117],{"class":116},[106,90689,54443],{"class":112},[106,90691,54446],{"class":116},[106,90693,90694,90697,90699],{"class":108,"line":8050},[106,90695,90696],{"class":1955},"          fn",[106,90698,13043],{"class":116},[106,90700,90701],{"class":175},"\u002F\u002F加小括号调用fn }, t)\n",[106,90703,90704],{"class":108,"line":9709},[106,90705,90706],{"class":116},"        }, t)\n",[106,90708,90709],{"class":108,"line":9734},[106,90710,52392],{"class":116},[106,90712,90713],{"class":108,"line":9757},[106,90714,2179],{"class":116},[106,90716,90717,90719,90721,90723,90725,90727,90729,90731,90733],{"class":108,"line":9781},[106,90718,90201],{"class":116},[106,90720,57807],{"class":1955},[106,90722,117],{"class":116},[106,90724,90208],{"class":221},[106,90726,12428],{"class":116},[106,90728,90214],{"class":1955},[106,90730,90217],{"class":116},[106,90732,65068],{"class":165},[106,90734,30491],{"class":116},[106,90736,90737],{"class":108,"line":9786},[106,90738,2392],{"emptyLinePlaceholder":33},[106,90740,90741],{"class":108,"line":9791},[106,90742,90743],{"class":175},"    \u002F\u002F debounce(mouseMove, 500)是在调用函数,一调用就会拿到return后边的内容\n",[106,90745,90746],{"class":108,"line":9796},[106,90747,90748],{"class":175},"    \u002F\u002F 相当于debounce(mouseMove, 500) = function () {\u002F\u002F 这里边写第二三四步}\n",[106,90750,90751],{"class":108,"line":9805},[106,90752,90753],{"class":175},"    \u002F\u002F 我们移动鼠标时想要实现的是这个匿名函数\n",[106,90755,90756],{"class":108,"line":9810},[106,90757,90758],{"class":175},"    \u002F\u002F 要的其实是这个函数名,事件中的执行函数不能写括号,写括号就是函数调用\n",[106,90760,90761,90763,90765],{"class":108,"line":9816},[106,90762,52411],{"class":116},[106,90764,51807],{"class":51294},[106,90766,51301],{"class":116},[106,90768,90769,90771,90773],{"class":108,"line":9837},[106,90770,51779],{"class":116},[106,90772,51794],{"class":51294},[106,90774,51301],{"class":116},[106,90776,90777],{"class":108,"line":9843},[106,90778,2392],{"emptyLinePlaceholder":33},[106,90780,90781,90783,90785],{"class":108,"line":9857},[106,90782,51779],{"class":116},[106,90784,50629],{"class":51294},[106,90786,51301],{"class":116},[77,90788,90790],{"id":90789},"_4172-节流","4.17.2 节流",[14,90792,90793],{},[23,90794],{"alt":25,"src":90795},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-354.png",[14,90797,90798],{},[23,90799],{"alt":25,"src":90800},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-355.png",[14,90802,90803],{},[266,90804,90805],{},"案例：利用节流来处理-鼠标滑过盒子显示文字（要求：鼠标在盒子上移动，不管移动多少次，每隔500ms才+1）",[14,90807,90808],{},"实现方式：",[1124,90810,90811],{},[63,90812,90813],{},"lodash 提供的节流函数来处理",[14,90815,90816],{},"_.throttle(func,[wait=0],[options=])",[14,90818,90819],{},"创建一个节流函数，在wait秒内最多执行func一次的函数",[97,90821,90823],{"className":50627,"code":90822,"language":50629,"meta":25,"style":25},"\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",[103,90824,90825,90835,90849,90853,90861,90875,90895,90907,90915,90921,90931,90943,90955,90965,90977,90987,90997,91009,91013,91021,91029,91033,91041,91059,91077,91085,91103,91113,91121,91131,91135,91139,91143,91148,91153,91174,91182,91190,91194],{"__ignoreMap":25},[106,90826,90827,90829,90831,90833],{"class":108,"line":109},[106,90828,51291],{"class":116},[106,90830,51295],{"class":51294},[106,90832,51298],{"class":1955},[106,90834,51301],{"class":116},[106,90836,90837,90839,90841,90843,90845,90847],{"class":108,"line":28},[106,90838,1027],{"class":116},[106,90840,50629],{"class":51294},[106,90842,51310],{"class":1955},[106,90844,162],{"class":116},[106,90846,51315],{"class":221},[106,90848,51301],{"class":116},[106,90850,90851],{"class":108,"line":1172},[106,90852,2392],{"emptyLinePlaceholder":33},[106,90854,90855,90857,90859],{"class":108,"line":1187},[106,90856,1027],{"class":116},[106,90858,51328],{"class":51294},[106,90860,51301],{"class":116},[106,90862,90863,90865,90867,90869,90871,90873],{"class":108,"line":1193},[106,90864,52138],{"class":116},[106,90866,51338],{"class":51294},[106,90868,51341],{"class":1955},[106,90870,162],{"class":116},[106,90872,51346],{"class":221},[106,90874,51301],{"class":116},[106,90876,90877,90879,90881,90883,90885,90887,90889,90891,90893],{"class":108,"line":1207},[106,90878,52138],{"class":116},[106,90880,51338],{"class":51294},[106,90882,14913],{"class":1955},[106,90884,162],{"class":116},[106,90886,51385],{"class":221},[106,90888,51365],{"class":1955},[106,90890,162],{"class":116},[106,90892,51392],{"class":221},[106,90894,51301],{"class":116},[106,90896,90897,90899,90901,90903,90905],{"class":108,"line":1213},[106,90898,52138],{"class":116},[106,90900,51401],{"class":51294},[106,90902,51404],{"class":116},[106,90904,51401],{"class":51294},[106,90906,51301],{"class":116},[106,90908,90909,90911,90913],{"class":108,"line":1304},[106,90910,52138],{"class":116},[106,90912,5119],{"class":51294},[106,90914,51301],{"class":116},[106,90916,90917,90919],{"class":108,"line":1310},[106,90918,54746],{"class":1955},[106,90920,15565],{"class":116},[106,90922,90923,90925,90927,90929],{"class":108,"line":1322},[106,90924,72590],{"class":165},[106,90926,51431],{"class":116},[106,90928,60499],{"class":165},[106,90930,1283],{"class":116},[106,90932,90933,90935,90937,90939,90941],{"class":108,"line":1604},[106,90934,54765],{"class":165},[106,90936,51431],{"class":116},[106,90938,1714],{"class":165},[106,90940,51486],{"class":112},[106,90942,1283],{"class":116},[106,90944,90945,90947,90949,90951,90953],{"class":108,"line":1609},[106,90946,54779],{"class":165},[106,90948,51431],{"class":116},[106,90950,1714],{"class":165},[106,90952,51486],{"class":112},[106,90954,1283],{"class":116},[106,90956,90957,90959,90961,90963],{"class":108,"line":1615},[106,90958,54878],{"class":165},[106,90960,51431],{"class":116},[106,90962,90000],{"class":165},[106,90964,1283],{"class":116},[106,90966,90967,90969,90971,90973,90975],{"class":108,"line":1620},[106,90968,54916],{"class":165},[106,90970,51431],{"class":116},[106,90972,942],{"class":165},[106,90974,51486],{"class":112},[106,90976,1283],{"class":116},[106,90978,90979,90981,90983,90985],{"class":108,"line":1634},[106,90980,57410],{"class":165},[106,90982,51431],{"class":116},[106,90984,60836],{"class":165},[106,90986,1283],{"class":116},[106,90988,90989,90991,90993,90995],{"class":108,"line":1639},[106,90990,57280],{"class":165},[106,90992,51431],{"class":116},[106,90994,51586],{"class":165},[106,90996,1283],{"class":116},[106,90998,90999,91001,91003,91005,91007],{"class":108,"line":1645},[106,91000,90039],{"class":165},[106,91002,51431],{"class":116},[106,91004,436],{"class":165},[106,91006,51486],{"class":112},[106,91008,1283],{"class":116},[106,91010,91011],{"class":108,"line":1666},[106,91012,2179],{"class":116},[106,91014,91015,91017,91019],{"class":108,"line":1671},[106,91016,52411],{"class":116},[106,91018,5119],{"class":51294},[106,91020,51301],{"class":116},[106,91022,91023,91025,91027],{"class":108,"line":1685},[106,91024,51779],{"class":116},[106,91026,51328],{"class":51294},[106,91028,51301],{"class":116},[106,91030,91031],{"class":108,"line":1690},[106,91032,2392],{"emptyLinePlaceholder":33},[106,91034,91035,91037,91039],{"class":108,"line":1719},[106,91036,1027],{"class":116},[106,91038,51794],{"class":51294},[106,91040,51301],{"class":116},[106,91042,91043,91045,91047,91049,91051,91053,91055,91057],{"class":108,"line":1724},[106,91044,52138],{"class":116},[106,91046,51605],{"class":51294},[106,91048,53480],{"class":1955},[106,91050,162],{"class":116},[106,91052,53485],{"class":221},[106,91054,55308],{"class":116},[106,91056,51605],{"class":51294},[106,91058,51301],{"class":116},[106,91060,91061,91063,91065,91067,91069,91071,91073,91075],{"class":108,"line":1741},[106,91062,52138],{"class":116},[106,91064,51807],{"class":51294},[106,91066,55233],{"class":1955},[106,91068,162],{"class":116},[106,91070,88268],{"class":221},[106,91072,55308],{"class":116},[106,91074,51807],{"class":51294},[106,91076,51301],{"class":116},[106,91078,91079,91081,91083],{"class":108,"line":1746},[106,91080,52138],{"class":116},[106,91082,51807],{"class":51294},[106,91084,51301],{"class":116},[106,91086,91087,91089,91091,91093,91095,91097,91099,91101],{"class":108,"line":1751},[106,91088,11214],{"class":112},[106,91090,86927],{"class":165},[106,91092,13557],{"class":112},[106,91094,54390],{"class":116},[106,91096,54393],{"class":1955},[106,91098,117],{"class":116},[106,91100,90140],{"class":221},[106,91102,123],{"class":116},[106,91104,91105,91107,91109,91111],{"class":108,"line":1756},[106,91106,52213],{"class":112},[106,91108,9431],{"class":116},[106,91110,162],{"class":112},[106,91112,47327],{"class":165},[106,91114,91115,91117,91119],{"class":108,"line":1770},[106,91116,70078],{"class":112},[106,91118,90159],{"class":1955},[106,91120,10846],{"class":116},[106,91122,91123,91125,91127,91129],{"class":108,"line":1775},[106,91124,90166],{"class":116},[106,91126,162],{"class":112},[106,91128,3024],{"class":116},[106,91130,2694],{"class":112},[106,91132,91133],{"class":108,"line":2569},[106,91134,90177],{"class":175},[106,91136,91137],{"class":108,"line":2583},[106,91138,2179],{"class":116},[106,91140,91141],{"class":108,"line":2591},[106,91142,90186],{"class":175},[106,91144,91145],{"class":108,"line":2596},[106,91146,91147],{"class":175},"    \u002F\u002F 利用lodash库实现节流 -500毫秒之后才去加1\n",[106,91149,91150],{"class":108,"line":2602},[106,91151,91152],{"class":175},"    \u002F\u002F 语法:_.throttle(fun,时间)\n",[106,91154,91155,91157,91159,91161,91163,91165,91168,91170,91172],{"class":108,"line":2608},[106,91156,90201],{"class":116},[106,91158,57807],{"class":1955},[106,91160,117],{"class":116},[106,91162,90208],{"class":221},[106,91164,90211],{"class":116},[106,91166,91167],{"class":1955},"throttle",[106,91169,90217],{"class":116},[106,91171,65068],{"class":165},[106,91173,30491],{"class":116},[106,91175,91176,91178,91180],{"class":108,"line":2613},[106,91177,52411],{"class":116},[106,91179,51807],{"class":51294},[106,91181,51301],{"class":116},[106,91183,91184,91186,91188],{"class":108,"line":7941},[106,91185,51779],{"class":116},[106,91187,51794],{"class":51294},[106,91189,51301],{"class":116},[106,91191,91192],{"class":108,"line":7965},[106,91193,2392],{"emptyLinePlaceholder":33},[106,91195,91196,91198,91200],{"class":108,"line":7970},[106,91197,51779],{"class":116},[106,91199,50629],{"class":51294},[106,91201,51301],{"class":116},[1124,91203,91204],{},[63,91205,91206],{},"手写一个节流函数来处理",[14,91208,70946],{},[14,91210,90260],{},[14,91212,91213],{},"②当鼠标每次滑动都先判断是否有定时器了，如果有定时器则不开启新定时器",[14,91215,91216],{},"③如果没有定时器则开启定时器，记得存放到变量里面:定时器里面调用执行的函数；定时器里面要把定时器清空",[97,91218,91220],{"className":50627,"code":91219,"language":50629,"meta":25,"style":25},"\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",[103,91221,91222,91232,91246,91250,91258,91272,91292,91304,91312,91318,91328,91340,91352,91362,91374,91384,91394,91406,91410,91418,91426,91430,91438,91456,91474,91482,91500,91510,91518,91528,91532,91536,91540,91545,91550,91555,91560,91565,91570,91587,91593,91601,91612,91627,91634,91639,91644,91654,91659,91664,91669,91673,91677,91681,91701,91709,91717,91721],{"__ignoreMap":25},[106,91223,91224,91226,91228,91230],{"class":108,"line":109},[106,91225,51291],{"class":116},[106,91227,51295],{"class":51294},[106,91229,51298],{"class":1955},[106,91231,51301],{"class":116},[106,91233,91234,91236,91238,91240,91242,91244],{"class":108,"line":28},[106,91235,1027],{"class":116},[106,91237,50629],{"class":51294},[106,91239,51310],{"class":1955},[106,91241,162],{"class":116},[106,91243,51315],{"class":221},[106,91245,51301],{"class":116},[106,91247,91248],{"class":108,"line":1172},[106,91249,2392],{"emptyLinePlaceholder":33},[106,91251,91252,91254,91256],{"class":108,"line":1187},[106,91253,1027],{"class":116},[106,91255,51328],{"class":51294},[106,91257,51301],{"class":116},[106,91259,91260,91262,91264,91266,91268,91270],{"class":108,"line":1193},[106,91261,52138],{"class":116},[106,91263,51338],{"class":51294},[106,91265,51341],{"class":1955},[106,91267,162],{"class":116},[106,91269,51346],{"class":221},[106,91271,51301],{"class":116},[106,91273,91274,91276,91278,91280,91282,91284,91286,91288,91290],{"class":108,"line":1207},[106,91275,52138],{"class":116},[106,91277,51338],{"class":51294},[106,91279,14913],{"class":1955},[106,91281,162],{"class":116},[106,91283,51385],{"class":221},[106,91285,51365],{"class":1955},[106,91287,162],{"class":116},[106,91289,51392],{"class":221},[106,91291,51301],{"class":116},[106,91293,91294,91296,91298,91300,91302],{"class":108,"line":1213},[106,91295,52138],{"class":116},[106,91297,51401],{"class":51294},[106,91299,51404],{"class":116},[106,91301,51401],{"class":51294},[106,91303,51301],{"class":116},[106,91305,91306,91308,91310],{"class":108,"line":1304},[106,91307,52138],{"class":116},[106,91309,5119],{"class":51294},[106,91311,51301],{"class":116},[106,91313,91314,91316],{"class":108,"line":1310},[106,91315,54746],{"class":1955},[106,91317,15565],{"class":116},[106,91319,91320,91322,91324,91326],{"class":108,"line":1322},[106,91321,72590],{"class":165},[106,91323,51431],{"class":116},[106,91325,60499],{"class":165},[106,91327,1283],{"class":116},[106,91329,91330,91332,91334,91336,91338],{"class":108,"line":1604},[106,91331,54765],{"class":165},[106,91333,51431],{"class":116},[106,91335,1714],{"class":165},[106,91337,51486],{"class":112},[106,91339,1283],{"class":116},[106,91341,91342,91344,91346,91348,91350],{"class":108,"line":1609},[106,91343,54779],{"class":165},[106,91345,51431],{"class":116},[106,91347,1714],{"class":165},[106,91349,51486],{"class":112},[106,91351,1283],{"class":116},[106,91353,91354,91356,91358,91360],{"class":108,"line":1615},[106,91355,54878],{"class":165},[106,91357,51431],{"class":116},[106,91359,90000],{"class":165},[106,91361,1283],{"class":116},[106,91363,91364,91366,91368,91370,91372],{"class":108,"line":1620},[106,91365,54916],{"class":165},[106,91367,51431],{"class":116},[106,91369,942],{"class":165},[106,91371,51486],{"class":112},[106,91373,1283],{"class":116},[106,91375,91376,91378,91380,91382],{"class":108,"line":1634},[106,91377,57410],{"class":165},[106,91379,51431],{"class":116},[106,91381,60836],{"class":165},[106,91383,1283],{"class":116},[106,91385,91386,91388,91390,91392],{"class":108,"line":1639},[106,91387,57280],{"class":165},[106,91389,51431],{"class":116},[106,91391,51586],{"class":165},[106,91393,1283],{"class":116},[106,91395,91396,91398,91400,91402,91404],{"class":108,"line":1645},[106,91397,90039],{"class":165},[106,91399,51431],{"class":116},[106,91401,436],{"class":165},[106,91403,51486],{"class":112},[106,91405,1283],{"class":116},[106,91407,91408],{"class":108,"line":1666},[106,91409,2179],{"class":116},[106,91411,91412,91414,91416],{"class":108,"line":1671},[106,91413,52411],{"class":116},[106,91415,5119],{"class":51294},[106,91417,51301],{"class":116},[106,91419,91420,91422,91424],{"class":108,"line":1685},[106,91421,51779],{"class":116},[106,91423,51328],{"class":51294},[106,91425,51301],{"class":116},[106,91427,91428],{"class":108,"line":1690},[106,91429,2392],{"emptyLinePlaceholder":33},[106,91431,91432,91434,91436],{"class":108,"line":1719},[106,91433,1027],{"class":116},[106,91435,51794],{"class":51294},[106,91437,51301],{"class":116},[106,91439,91440,91442,91444,91446,91448,91450,91452,91454],{"class":108,"line":1724},[106,91441,52138],{"class":116},[106,91443,51605],{"class":51294},[106,91445,53480],{"class":1955},[106,91447,162],{"class":116},[106,91449,53485],{"class":221},[106,91451,55308],{"class":116},[106,91453,51605],{"class":51294},[106,91455,51301],{"class":116},[106,91457,91458,91460,91462,91464,91466,91468,91470,91472],{"class":108,"line":1741},[106,91459,52138],{"class":116},[106,91461,51807],{"class":51294},[106,91463,55233],{"class":1955},[106,91465,162],{"class":116},[106,91467,88268],{"class":221},[106,91469,55308],{"class":116},[106,91471,51807],{"class":51294},[106,91473,51301],{"class":116},[106,91475,91476,91478,91480],{"class":108,"line":1746},[106,91477,52138],{"class":116},[106,91479,51807],{"class":51294},[106,91481,51301],{"class":116},[106,91483,91484,91486,91488,91490,91492,91494,91496,91498],{"class":108,"line":1751},[106,91485,11214],{"class":112},[106,91487,86927],{"class":165},[106,91489,13557],{"class":112},[106,91491,54390],{"class":116},[106,91493,54393],{"class":1955},[106,91495,117],{"class":116},[106,91497,90140],{"class":221},[106,91499,123],{"class":116},[106,91501,91502,91504,91506,91508],{"class":108,"line":1756},[106,91503,52213],{"class":112},[106,91505,9431],{"class":116},[106,91507,162],{"class":112},[106,91509,47327],{"class":165},[106,91511,91512,91514,91516],{"class":108,"line":1770},[106,91513,70078],{"class":112},[106,91515,90159],{"class":1955},[106,91517,10846],{"class":116},[106,91519,91520,91522,91524,91526],{"class":108,"line":1775},[106,91521,90166],{"class":116},[106,91523,162],{"class":112},[106,91525,3024],{"class":116},[106,91527,2694],{"class":112},[106,91529,91530],{"class":108,"line":2569},[106,91531,90177],{"class":175},[106,91533,91534],{"class":108,"line":2583},[106,91535,2179],{"class":116},[106,91537,91538],{"class":108,"line":2591},[106,91539,90186],{"class":175},[106,91541,91542],{"class":108,"line":2596},[106,91543,91544],{"class":175},"    \u002F\u002F 手写节流函数  每隔500ms+1\n",[106,91546,91547],{"class":108,"line":2602},[106,91548,91549],{"class":175},"    \u002F\u002F 1.声明一个定时器变量\n",[106,91551,91552],{"class":108,"line":2608},[106,91553,91554],{"class":175},"    \u002F\u002F 2.当鼠标每次滑动都先判断是否有定时器,如果有定时器则不开启新定时器\n",[106,91556,91557],{"class":108,"line":2613},[106,91558,91559],{"class":175},"    \u002F\u002F 3.如果没有定时器则开启定时器,记得存到变量里面\n",[106,91561,91562],{"class":108,"line":7941},[106,91563,91564],{"class":175},"    \u002F\u002F 3.1定时器里面调用执行函数\n",[106,91566,91567],{"class":108,"line":7965},[106,91568,91569],{"class":175},"    \u002F\u002F 3.2定时器里面要把定时器清空\n",[106,91571,91572,91574,91577,91579,91581,91583,91585],{"class":108,"line":7970},[106,91573,70078],{"class":112},[106,91575,91576],{"class":1955}," throttle",[106,91578,117],{"class":116},[106,91580,90631],{"class":5209},[106,91582,12428],{"class":116},[106,91584,837],{"class":5209},[106,91586,12435],{"class":116},[106,91588,91589,91591],{"class":108,"line":7976},[106,91590,79766],{"class":112},[106,91592,90644],{"class":116},[106,91594,91595,91597,91599],{"class":108,"line":8003},[106,91596,73976],{"class":112},[106,91598,58912],{"class":112},[106,91600,54446],{"class":116},[106,91602,91603,91605,91607,91609],{"class":108,"line":8008},[106,91604,2489],{"class":112},[106,91606,1650],{"class":116},[106,91608,343],{"class":112},[106,91610,91611],{"class":116},"timer) {\n",[106,91613,91614,91617,91619,91621,91623,91625],{"class":108,"line":8014},[106,91615,91616],{"class":116},"          timer ",[106,91618,162],{"class":112},[106,91620,90685],{"class":1955},[106,91622,117],{"class":116},[106,91624,54443],{"class":112},[106,91626,54446],{"class":116},[106,91628,91629,91632],{"class":108,"line":8026},[106,91630,91631],{"class":1955},"            fn",[106,91633,1968],{"class":116},[106,91635,91636],{"class":108,"line":8038},[106,91637,91638],{"class":175},"            \u002F\u002F 清空定时器,当时间到了,定时器就停止了,但原来那个timer还有,\n",[106,91640,91641],{"class":108,"line":8050},[106,91642,91643],{"class":175},"            \u002F\u002F 所以需要清除定时器,这样timer就是空的了,然后就又重复执行了\n",[106,91645,91646,91649,91651],{"class":108,"line":9709},[106,91647,91648],{"class":116},"            timer ",[106,91650,162],{"class":112},[106,91652,91653],{"class":165}," null\n",[106,91655,91656],{"class":108,"line":9734},[106,91657,91658],{"class":175},"            \u002F\u002F 不能用clearTimeout(timer)\n",[106,91660,91661],{"class":108,"line":9757},[106,91662,91663],{"class":175},"            \u002F\u002F 在开启的定时器里边是无法清除定时器的\n",[106,91665,91666],{"class":108,"line":9781},[106,91667,91668],{"class":116},"          }, t)\n",[106,91670,91671],{"class":108,"line":9786},[106,91672,2521],{"class":116},[106,91674,91675],{"class":108,"line":9791},[106,91676,52392],{"class":116},[106,91678,91679],{"class":108,"line":9796},[106,91680,2179],{"class":116},[106,91682,91683,91685,91687,91689,91691,91693,91695,91697,91699],{"class":108,"line":9805},[106,91684,90201],{"class":116},[106,91686,57807],{"class":1955},[106,91688,117],{"class":116},[106,91690,90208],{"class":221},[106,91692,12428],{"class":116},[106,91694,91167],{"class":1955},[106,91696,90217],{"class":116},[106,91698,65068],{"class":165},[106,91700,30491],{"class":116},[106,91702,91703,91705,91707],{"class":108,"line":9810},[106,91704,52411],{"class":116},[106,91706,51807],{"class":51294},[106,91708,51301],{"class":116},[106,91710,91711,91713,91715],{"class":108,"line":9816},[106,91712,51779],{"class":116},[106,91714,51794],{"class":51294},[106,91716,51301],{"class":116},[106,91718,91719],{"class":108,"line":9837},[106,91720,2392],{"emptyLinePlaceholder":33},[106,91722,91723,91725,91727],{"class":108,"line":9843},[106,91724,51779],{"class":116},[106,91726,50629],{"class":51294},[106,91728,51301],{"class":116},[77,91730,91732],{"id":91731},"_4173-清除定时器遇到的问题","4.17.3 清除定时器遇到的问题",[97,91734,91736],{"className":53061,"code":91735,"language":53063,"meta":25,"style":25},"\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",[103,91737,91738,91746,91754,91759,91764,91769,91774,91778,91786],{"__ignoreMap":25},[106,91739,91740,91742,91744],{"class":108,"line":109},[106,91741,1027],{"class":116},[106,91743,51794],{"class":51294},[106,91745,51301],{"class":116},[106,91747,91748,91750,91752],{"class":108,"line":28},[106,91749,52138],{"class":116},[106,91751,51807],{"class":51294},[106,91753,51301],{"class":116},[106,91755,91756],{"class":108,"line":1172},[106,91757,91758],{"class":116},"    let timer = null\n",[106,91760,91761],{"class":108,"line":1187},[106,91762,91763],{"class":116},"    timer = setTimeout(() => {\n",[106,91765,91766],{"class":108,"line":1193},[106,91767,91768],{"class":116},"      clearTimeout(timer)\n",[106,91770,91771],{"class":108,"line":1207},[106,91772,91773],{"class":116},"      console.log(timer)\n",[106,91775,91776],{"class":108,"line":1213},[106,91777,60219],{"class":116},[106,91779,91780,91782,91784],{"class":108,"line":1304},[106,91781,52411],{"class":116},[106,91783,51807],{"class":51294},[106,91785,51301],{"class":116},[106,91787,91788,91790,91792],{"class":108,"line":1310},[106,91789,51779],{"class":116},[106,91791,51794],{"class":51294},[106,91793,51301],{"class":116},[14,91795,91796],{},"输出为1",[14,91798,91799],{},"在开启的定时器里边写清除定时器",[14,91801,91802],{},"总结：在setTimeout中是无法删除定时器的，因为定时器还在运作，所以使用timer=null 而不是clearTimeout(timer)",[77,91804,91806],{"id":91805},"_4174-节流综合案例","4.17.4 节流综合案例",[14,91808,91809],{},"页面打开，可以记录上一次的视频播放位置",[14,91811,91812],{},[23,91813],{"alt":25,"src":91814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-356.png",[14,91816,91817],{},[23,91818],{"alt":25,"src":91819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS%E5%AD%A6%E4%B9%A0-357.png",[97,91821,91823],{"className":50627,"code":91822,"language":50629,"meta":25,"style":25},"\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",[103,91824,91825,91835,91849,91853,91861,91875,91895,91915,91937,91950,91958,91964,91974,91984,91994,91998,92002,92009,92022,92034,92038,92042,92052,92064,92078,92082,92086,92093,92103,92116,92128,92138,92148,92164,92176,92180,92184,92192,92202,92214,92224,92234,92244,92248,92252,92262,92273,92277,92285,92293,92297,92305,92320,92335,92350,92371,92379,92387,92402,92424,92432,92447,92473,92499,92525,92533,92541,92560,92568,92573,92592,92597,92615,92620,92625,92633,92638,92652,92660,92665,92682,92686,92691,92713,92717,92725,92733,92737],{"__ignoreMap":25},[106,91826,91827,91829,91831,91833],{"class":108,"line":109},[106,91828,51291],{"class":116},[106,91830,51295],{"class":51294},[106,91832,51298],{"class":1955},[106,91834,51301],{"class":116},[106,91836,91837,91839,91841,91843,91845,91847],{"class":108,"line":28},[106,91838,1027],{"class":116},[106,91840,50629],{"class":51294},[106,91842,51310],{"class":1955},[106,91844,162],{"class":116},[106,91846,51315],{"class":221},[106,91848,51301],{"class":116},[106,91850,91851],{"class":108,"line":1172},[106,91852,2392],{"emptyLinePlaceholder":33},[106,91854,91855,91857,91859],{"class":108,"line":1187},[106,91856,1027],{"class":116},[106,91858,51328],{"class":51294},[106,91860,51301],{"class":116},[106,91862,91863,91865,91867,91869,91871,91873],{"class":108,"line":1193},[106,91864,52138],{"class":116},[106,91866,51338],{"class":51294},[106,91868,51341],{"class":1955},[106,91870,162],{"class":116},[106,91872,51346],{"class":221},[106,91874,59121],{"class":116},[106,91876,91877,91879,91881,91883,91885,91887,91889,91891,91893],{"class":108,"line":1207},[106,91878,52138],{"class":116},[106,91880,51338],{"class":51294},[106,91882,51357],{"class":1955},[106,91884,162],{"class":116},[106,91886,51362],{"class":221},[106,91888,51365],{"class":1955},[106,91890,162],{"class":116},[106,91892,51370],{"class":221},[106,91894,59121],{"class":116},[106,91896,91897,91899,91901,91903,91905,91907,91909,91911,91913],{"class":108,"line":1213},[106,91898,52138],{"class":116},[106,91900,51338],{"class":51294},[106,91902,14913],{"class":1955},[106,91904,162],{"class":116},[106,91906,51385],{"class":221},[106,91908,51365],{"class":1955},[106,91910,162],{"class":116},[106,91912,51392],{"class":221},[106,91914,59121],{"class":116},[106,91916,91917,91919,91921,91923,91925,91928,91930,91932,91935],{"class":108,"line":1304},[106,91918,52138],{"class":116},[106,91920,51338],{"class":51294},[106,91922,14913],{"class":1955},[106,91924,162],{"class":116},[106,91926,91927],{"class":221},"\"referrer\"",[106,91929,51365],{"class":1955},[106,91931,162],{"class":116},[106,91933,91934],{"class":221},"\"never\"",[106,91936,59121],{"class":116},[106,91938,91939,91941,91943,91946,91948],{"class":108,"line":1310},[106,91940,52138],{"class":116},[106,91942,51401],{"class":51294},[106,91944,91945],{"class":116},">综合案例\u003C\u002F",[106,91947,51401],{"class":51294},[106,91949,51301],{"class":116},[106,91951,91952,91954,91956],{"class":108,"line":1322},[106,91953,52138],{"class":116},[106,91955,5119],{"class":51294},[106,91957,51301],{"class":116},[106,91959,91960,91962],{"class":108,"line":1604},[106,91961,6396],{"class":51294},[106,91963,15565],{"class":116},[106,91965,91966,91968,91970,91972],{"class":108,"line":1609},[106,91967,54689],{"class":165},[106,91969,51431],{"class":116},[106,91971,308],{"class":165},[106,91973,1283],{"class":116},[106,91975,91976,91978,91980,91982],{"class":108,"line":1615},[106,91977,54700],{"class":165},[106,91979,51431],{"class":116},[106,91981,308],{"class":165},[106,91983,1283],{"class":116},[106,91985,91986,91988,91990,91992],{"class":108,"line":1620},[106,91987,72590],{"class":165},[106,91989,51431],{"class":116},[106,91991,60499],{"class":165},[106,91993,1283],{"class":116},[106,91995,91996],{"class":108,"line":1634},[106,91997,2179],{"class":116},[106,91999,92000],{"class":108,"line":1639},[106,92001,2392],{"emptyLinePlaceholder":33},[106,92003,92004,92007],{"class":108,"line":1645},[106,92005,92006],{"class":1955},"    .container",[106,92008,15565],{"class":116},[106,92010,92011,92013,92015,92018,92020],{"class":108,"line":1666},[106,92012,54765],{"class":165},[106,92014,51431],{"class":116},[106,92016,92017],{"class":165},"1200",[106,92019,51486],{"class":112},[106,92021,1283],{"class":116},[106,92023,92024,92026,92028,92030,92032],{"class":108,"line":1671},[106,92025,54700],{"class":165},[106,92027,51431],{"class":116},[106,92029,308],{"class":165},[106,92031,51550],{"class":165},[106,92033,1283],{"class":116},[106,92035,92036],{"class":108,"line":1685},[106,92037,2179],{"class":116},[106,92039,92040],{"class":108,"line":1690},[106,92041,2392],{"emptyLinePlaceholder":33},[106,92043,92044,92047,92050],{"class":108,"line":1719},[106,92045,92046],{"class":1955},"    .video",[106,92048,92049],{"class":51294}," video",[106,92051,15565],{"class":116},[106,92053,92054,92056,92058,92060,92062],{"class":108,"line":1724},[106,92055,54765],{"class":165},[106,92057,51431],{"class":116},[106,92059,428],{"class":165},[106,92061,445],{"class":112},[106,92063,1283],{"class":116},[106,92065,92066,92068,92070,92072,92074,92076],{"class":108,"line":1741},[106,92067,54689],{"class":165},[106,92069,51431],{"class":116},[106,92071,817],{"class":165},[106,92073,51486],{"class":112},[106,92075,4085],{"class":165},[106,92077,1283],{"class":116},[106,92079,92080],{"class":108,"line":1746},[106,92081,2179],{"class":116},[106,92083,92084],{"class":108,"line":1751},[106,92085,2392],{"emptyLinePlaceholder":33},[106,92087,92088,92091],{"class":108,"line":1756},[106,92089,92090],{"class":1955},"    .elevator",[106,92092,15565],{"class":116},[106,92094,92095,92097,92099,92101],{"class":108,"line":1770},[106,92096,54753],{"class":165},[106,92098,51431],{"class":116},[106,92100,86227],{"class":165},[106,92102,1283],{"class":116},[106,92104,92105,92107,92109,92112,92114],{"class":108,"line":1775},[106,92106,54941],{"class":165},[106,92108,51431],{"class":116},[106,92110,92111],{"class":165},"280",[106,92113,51486],{"class":112},[106,92115,1283],{"class":116},[106,92117,92118,92120,92122,92124,92126],{"class":108,"line":2569},[106,92119,86421],{"class":165},[106,92121,51431],{"class":116},[106,92123,817],{"class":165},[106,92125,51486],{"class":112},[106,92127,1283],{"class":116},[106,92129,92130,92132,92134,92136],{"class":108,"line":2583},[106,92131,86234],{"class":165},[106,92133,51431],{"class":116},[106,92135,86239],{"class":165},[106,92137,1283],{"class":116},[106,92139,92140,92142,92144,92146],{"class":108,"line":2591},[106,92141,61715],{"class":165},[106,92143,51431],{"class":116},[106,92145,60836],{"class":165},[106,92147,1283],{"class":116},[106,92149,92150,92152,92154,92156,92158,92160,92162],{"class":108,"line":2596},[106,92151,61971],{"class":165},[106,92153,51431],{"class":116},[106,92155,334],{"class":165},[106,92157,51486],{"class":112},[106,92159,51515],{"class":165},[106,92161,62238],{"class":165},[106,92163,1283],{"class":116},[106,92165,92166,92168,92170,92172,92174],{"class":108,"line":2602},[106,92167,54765],{"class":165},[106,92169,51431],{"class":116},[106,92171,1024],{"class":165},[106,92173,51486],{"class":112},[106,92175,1283],{"class":116},[106,92177,92178],{"class":108,"line":2608},[106,92179,2179],{"class":116},[106,92181,92182],{"class":108,"line":2613},[106,92183,2392],{"emptyLinePlaceholder":33},[106,92185,92186,92188,92190],{"class":108,"line":7941},[106,92187,92090],{"class":1955},[106,92189,1391],{"class":51294},[106,92191,15565],{"class":116},[106,92193,92194,92196,92198,92200],{"class":108,"line":7965},[106,92195,55003],{"class":165},[106,92197,51431],{"class":116},[106,92199,60863],{"class":165},[106,92201,1283],{"class":116},[106,92203,92204,92206,92208,92210,92212],{"class":108,"line":7970},[106,92205,54689],{"class":165},[106,92207,51431],{"class":116},[106,92209,563],{"class":165},[106,92211,51486],{"class":112},[106,92213,1283],{"class":116},[106,92215,92216,92218,92220,92222],{"class":108,"line":7976},[106,92217,63964],{"class":165},[106,92219,51431],{"class":116},[106,92221,54731],{"class":165},[106,92223,1283],{"class":116},[106,92225,92226,92228,92230,92232],{"class":108,"line":8003},[106,92227,57280],{"class":165},[106,92229,51431],{"class":116},[106,92231,51586],{"class":165},[106,92233,1283],{"class":116},[106,92235,92236,92238,92240,92242],{"class":108,"line":8008},[106,92237,57410],{"class":165},[106,92239,51431],{"class":116},[106,92241,62064],{"class":165},[106,92243,1283],{"class":116},[106,92245,92246],{"class":108,"line":8014},[106,92247,2179],{"class":116},[106,92249,92250],{"class":108,"line":8026},[106,92251,2392],{"emptyLinePlaceholder":33},[106,92253,92254,92256,92258,92260],{"class":108,"line":8038},[106,92255,92090],{"class":1955},[106,92257,1391],{"class":51294},[106,92259,64018],{"class":1955},[106,92261,15565],{"class":116},[106,92263,92264,92266,92268,92271],{"class":108,"line":8050},[106,92265,57410],{"class":165},[106,92267,51431],{"class":116},[106,92269,92270],{"class":165},"#1286ff",[106,92272,1283],{"class":116},[106,92274,92275],{"class":108,"line":9709},[106,92276,2179],{"class":116},[106,92278,92279,92281,92283],{"class":108,"line":9734},[106,92280,52411],{"class":116},[106,92282,5119],{"class":51294},[106,92284,51301],{"class":116},[106,92286,92287,92289,92291],{"class":108,"line":9757},[106,92288,51779],{"class":116},[106,92290,51328],{"class":51294},[106,92292,51301],{"class":116},[106,92294,92295],{"class":108,"line":9781},[106,92296,2392],{"emptyLinePlaceholder":33},[106,92298,92299,92301,92303],{"class":108,"line":9786},[106,92300,1027],{"class":116},[106,92302,51794],{"class":51294},[106,92304,51301],{"class":116},[106,92306,92307,92309,92311,92313,92315,92318],{"class":108,"line":9791},[106,92308,52138],{"class":116},[106,92310,51605],{"class":51294},[106,92312,53480],{"class":1955},[106,92314,162],{"class":116},[106,92316,92317],{"class":221},"\"container\"",[106,92319,51301],{"class":116},[106,92321,92322,92324,92326,92328,92330,92333],{"class":108,"line":9796},[106,92323,51335],{"class":116},[106,92325,51605],{"class":51294},[106,92327,53480],{"class":1955},[106,92329,162],{"class":116},[106,92331,92332],{"class":221},"\"header\"",[106,92334,51301],{"class":116},[106,92336,92337,92339,92341,92343,92345,92348],{"class":108,"line":9805},[106,92338,55228],{"class":116},[106,92340,355],{"class":51294},[106,92342,61051],{"class":1955},[106,92344,162],{"class":116},[106,92346,92347],{"class":221},"\"http:\u002F\u002Fpip.itcast.cn\"",[106,92349,51301],{"class":116},[106,92351,92352,92354,92356,92358,92360,92363,92365,92367,92369],{"class":108,"line":9810},[106,92353,55296],{"class":116},[106,92355,23],{"class":51294},[106,92357,55233],{"class":1955},[106,92359,162],{"class":116},[106,92361,92362],{"class":221},"\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-09-02-JS学习-367.png\"",[106,92364,55241],{"class":1955},[106,92366,162],{"class":116},[106,92368,7645],{"class":221},[106,92370,59121],{"class":116},[106,92372,92373,92375,92377],{"class":108,"line":9816},[106,92374,55401],{"class":116},[106,92376,355],{"class":51294},[106,92378,51301],{"class":116},[106,92380,92381,92383,92385],{"class":108,"line":9837},[106,92382,51770],{"class":116},[106,92384,51605],{"class":51294},[106,92386,51301],{"class":116},[106,92388,92389,92391,92393,92395,92397,92400],{"class":108,"line":9843},[106,92390,51335],{"class":116},[106,92392,51605],{"class":51294},[106,92394,53480],{"class":1955},[106,92396,162],{"class":116},[106,92398,92399],{"class":221},"\"video\"",[106,92401,51301],{"class":116},[106,92403,92404,92406,92408,92410,92412,92415,92418,92420,92422],{"class":108,"line":9857},[106,92405,55228],{"class":116},[106,92407,28177],{"class":51294},[106,92409,55233],{"class":1955},[106,92411,162],{"class":116},[106,92413,92414],{"class":221},"\"https:\u002F\u002Fv.itheima.net\u002FLapADhV6.mp4\"",[106,92416,92417],{"class":1955}," controls",[106,92419,55308],{"class":116},[106,92421,28177],{"class":51294},[106,92423,51301],{"class":116},[106,92425,92426,92428,92430],{"class":108,"line":9863},[106,92427,51770],{"class":116},[106,92429,51605],{"class":51294},[106,92431,51301],{"class":116},[106,92433,92434,92436,92438,92440,92442,92445],{"class":108,"line":9890},[106,92435,51335],{"class":116},[106,92437,51605],{"class":51294},[106,92439,53480],{"class":1955},[106,92441,162],{"class":116},[106,92443,92444],{"class":221},"\"elevator\"",[106,92446,51301],{"class":116},[106,92448,92449,92451,92453,92455,92457,92459,92462,92464,92466,92469,92471],{"class":108,"line":9899},[106,92450,55228],{"class":116},[106,92452,355],{"class":51294},[106,92454,61051],{"class":1955},[106,92456,162],{"class":116},[106,92458,64230],{"class":221},[106,92460,92461],{"class":1955}," data-ref",[106,92463,162],{"class":116},[106,92465,92399],{"class":221},[106,92467,92468],{"class":116},">视频介绍\u003C\u002F",[106,92470,355],{"class":51294},[106,92472,51301],{"class":116},[106,92474,92475,92477,92479,92481,92483,92485,92487,92489,92492,92495,92497],{"class":108,"line":9905},[106,92476,55228],{"class":116},[106,92478,355],{"class":51294},[106,92480,61051],{"class":1955},[106,92482,162],{"class":116},[106,92484,64230],{"class":221},[106,92486,92461],{"class":1955},[106,92488,162],{"class":116},[106,92490,92491],{"class":221},"\"intro\"",[106,92493,92494],{"class":116},">课程简介\u003C\u002F",[106,92496,355],{"class":51294},[106,92498,51301],{"class":116},[106,92500,92501,92503,92505,92507,92509,92511,92513,92515,92518,92521,92523],{"class":108,"line":9913},[106,92502,55228],{"class":116},[106,92504,355],{"class":51294},[106,92506,61051],{"class":1955},[106,92508,162],{"class":116},[106,92510,64230],{"class":221},[106,92512,92461],{"class":1955},[106,92514,162],{"class":116},[106,92516,92517],{"class":221},"\"outline\"",[106,92519,92520],{"class":116},">评论列表\u003C\u002F",[106,92522,355],{"class":51294},[106,92524,51301],{"class":116},[106,92526,92527,92529,92531],{"class":108,"line":9918},[106,92528,51770],{"class":116},[106,92530,51605],{"class":51294},[106,92532,51301],{"class":116},[106,92534,92535,92537,92539],{"class":108,"line":16597},[106,92536,52411],{"class":116},[106,92538,51605],{"class":51294},[106,92540,51301],{"class":116},[106,92542,92543,92545,92547,92549,92551,92554,92556,92558],{"class":108,"line":16603},[106,92544,52138],{"class":116},[106,92546,51807],{"class":51294},[106,92548,55233],{"class":1955},[106,92550,162],{"class":116},[106,92552,92553],{"class":221},"\"https:\u002F\u002Fcdn.jsdelivr.net\u002Fnpm\u002Flodash@4.17.21\u002Flodash.min.js\"",[106,92555,55308],{"class":116},[106,92557,51807],{"class":51294},[106,92559,51301],{"class":116},[106,92561,92562,92564,92566],{"class":108,"line":16626},[106,92563,52138],{"class":116},[106,92565,51807],{"class":51294},[106,92567,51301],{"class":116},[106,92569,92570],{"class":108,"line":16632},[106,92571,92572],{"class":175},"    \u002F\u002F 1.获取元素 要对视频进行操作\n",[106,92574,92575,92577,92579,92581,92583,92585,92587,92590],{"class":108,"line":16655},[106,92576,11214],{"class":112},[106,92578,92049],{"class":165},[106,92580,13557],{"class":112},[106,92582,54390],{"class":116},[106,92584,54393],{"class":1955},[106,92586,117],{"class":116},[106,92588,92589],{"class":221},"'video'",[106,92591,123],{"class":116},[106,92593,92594],{"class":108,"line":16669},[106,92595,92596],{"class":175},"    \u002F\u002F 这个事件类似于点击事件的另外一个写法.onclick\n",[106,92598,92599,92602,92604,92606,92608,92611,92613],{"class":108,"line":16689},[106,92600,92601],{"class":116},"    video.ontimeupdate ",[106,92603,162],{"class":112},[106,92605,88349],{"class":116},[106,92607,91167],{"class":1955},[106,92609,92610],{"class":116},"(() ",[106,92612,84716],{"class":112},[106,92614,15565],{"class":116},[106,92616,92617],{"class":108,"line":16695},[106,92618,92619],{"class":175},"      \u002F\u002F 要进行本地存储,存当前播放的时间\n",[106,92621,92622],{"class":108,"line":16706},[106,92623,92624],{"class":175},"      \u002F\u002F 控制台输出当前的时间\n",[106,92626,92627,92630],{"class":108,"line":16729},[106,92628,92629],{"class":175},"      \u002F\u002F console.log(video.currentTime)",[106,92631,92632],{"class":175},"  \u002F\u002F获得当前的视频时间\n",[106,92634,92635],{"class":108,"line":16751},[106,92636,92637],{"class":175},"      \u002F\u002F 简单数据类型本地存储直接存储就可以,把当前的时间存储到本地存储\n",[106,92639,92640,92642,92644,92646,92649],{"class":108,"line":16756},[106,92641,74677],{"class":116},[106,92643,71648],{"class":1955},[106,92645,117],{"class":116},[106,92647,92648],{"class":221},"'currentTime'",[106,92650,92651],{"class":116},", video.currentTime)\n",[106,92653,92654,92656,92658],{"class":108,"line":16762},[106,92655,54529],{"class":116},[106,92657,6403],{"class":165},[106,92659,123],{"class":116},[106,92661,92662],{"class":108,"line":16776},[106,92663,92664],{"class":175},"    \u002F\u002F 打开页面触发事件,就从本地存储里面取出事件,赋值给 video.currentTime\n",[106,92666,92667,92670,92673,92675,92678,92680],{"class":108,"line":16789},[106,92668,92669],{"class":116},"    video.",[106,92671,92672],{"class":1955},"onloadeddata",[106,92674,13557],{"class":112},[106,92676,92677],{"class":116}," () ",[106,92679,84716],{"class":112},[106,92681,15565],{"class":116},[106,92683,92684],{"class":108,"line":16794},[106,92685,60006],{"class":175},[106,92687,92688],{"class":108,"line":16808},[106,92689,92690],{"class":175},"      \u002F\u002F 第一次打开的话,若本地存储无数据的话,就从0开始,从视频的开头开始,使用逻辑中断\n",[106,92692,92693,92696,92698,92701,92703,92705,92707,92709,92711],{"class":108,"line":16813},[106,92694,92695],{"class":116},"      video.currentTime ",[106,92697,162],{"class":112},[106,92699,92700],{"class":116}," localStorage.",[106,92702,71679],{"class":1955},[106,92704,117],{"class":116},[106,92706,92648],{"class":221},[106,92708,13707],{"class":116},[106,92710,71351],{"class":112},[106,92712,47327],{"class":165},[106,92714,92715],{"class":108,"line":16819},[106,92716,2179],{"class":116},[106,92718,92719,92721,92723],{"class":108,"line":16824},[106,92720,52411],{"class":116},[106,92722,51807],{"class":51294},[106,92724,51301],{"class":116},[106,92726,92727,92729,92731],{"class":108,"line":16838},[106,92728,51779],{"class":116},[106,92730,51794],{"class":51294},[106,92732,51301],{"class":116},[106,92734,92735],{"class":108,"line":16843},[106,92736,2392],{"emptyLinePlaceholder":33},[106,92738,92739,92741,92743],{"class":108,"line":16848},[106,92740,51779],{"class":116},[106,92742,50629],{"class":51294},[106,92744,51301],{"class":116},[5119,92746,92747],{},"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":25,"searchDepth":28,"depth":28,"links":92749},[92750,92755,92759,92760,92761,92766,92771,92772,92773,92774,92781,92786,92787,92797,92801,92802,92806],{"id":76685,"depth":28,"text":76686,"children":92751},[92752,92753,92754],{"id":76689,"depth":1172,"text":76690},{"id":76714,"depth":1172,"text":76715},{"id":76726,"depth":1172,"text":76727},{"id":76738,"depth":28,"text":76739,"children":92756},[92757,92758],{"id":76742,"depth":1172,"text":76743},{"id":76757,"depth":1172,"text":76758},{"id":76809,"depth":28,"text":76810},{"id":76853,"depth":28,"text":76854},{"id":76870,"depth":28,"text":76871,"children":92762},[92763,92764,92765],{"id":76874,"depth":1172,"text":76875},{"id":76887,"depth":1172,"text":76888},{"id":76992,"depth":1172,"text":76993},{"id":77281,"depth":28,"text":77282,"children":92767},[92768,92769,92770],{"id":77285,"depth":1172,"text":77286},{"id":77728,"depth":1172,"text":77729},{"id":78139,"depth":1172,"text":78140},{"id":78202,"depth":28,"text":78203},{"id":78281,"depth":28,"text":78282},{"id":78374,"depth":28,"text":78375},{"id":80219,"depth":28,"text":80220,"children":92775},[92776,92777,92778,92779,92780],{"id":80223,"depth":1172,"text":80224},{"id":80235,"depth":1172,"text":80236},{"id":80454,"depth":1172,"text":80455},{"id":80472,"depth":1172,"text":80473},{"id":80532,"depth":1172,"text":80533},{"id":84800,"depth":28,"text":84801,"children":92782},[92783,92784,92785],{"id":84804,"depth":1172,"text":84805},{"id":84822,"depth":1172,"text":84823},{"id":84848,"depth":1172,"text":84849},{"id":84857,"depth":28,"text":84858},{"id":84879,"depth":28,"text":84880,"children":92788},[92789,92790,92791,92792,92793,92794,92795,92796],{"id":84883,"depth":1172,"text":84884},{"id":85144,"depth":1172,"text":85145},{"id":85330,"depth":1172,"text":85331},{"id":85697,"depth":1172,"text":85698},{"id":85813,"depth":1172,"text":85814},{"id":85849,"depth":1172,"text":85850},{"id":85896,"depth":1172,"text":85897},{"id":85930,"depth":1172,"text":85931},{"id":87293,"depth":28,"text":87294,"children":92798},[92799,92800],{"id":87297,"depth":1172,"text":87298},{"id":87334,"depth":1172,"text":87335},{"id":88689,"depth":28,"text":88690},{"id":89060,"depth":28,"text":89061,"children":92803},[92804,92805],{"id":89064,"depth":1172,"text":89065},{"id":89098,"depth":1172,"text":89099},{"id":89827,"depth":28,"text":89828,"children":92807},[92808,92809,92810,92811],{"id":89831,"depth":1172,"text":89832},{"id":90789,"depth":1172,"text":90790},{"id":91731,"depth":1172,"text":91732},{"id":91805,"depth":1172,"text":91806},{},"\u002Fwiki\u002F2025-09-02-js\u002Fch4-js",{"title":76674,"description":30},"wiki\u002F2025-09-02-JS学习\u002Fch4-js进阶","1dCbxNw1t9V3NJEB9OsdCj0OlTGnowDQ4ULzKgRbbCM",{"id":92818,"title":92819,"body":92820,"description":92831,"extension":31,"meta":92832,"navigation":33,"path":92834,"seo":92835,"stem":92836,"__hash__":92837},"wiki\u002Fwiki\u002F2025-09-02-JS学习\u002Findex.md","JS学习",{"type":7,"value":92821,"toc":92829},[92822],[14,92823,92824,92825],{},"这部分学完，学vue之前先通一下框架前置知识，参考下面文档，后续整理这部分和vue\n",[355,92826,92827],{"href":92827,"rel":92828},"https:\u002F\u002Facn59hvfac4g.feishu.cn\u002Fdocx\u002FENYhd6upDopC2Kxl5NicDeIEnkh?from=from_copylink",[23858],{"title":25,"searchDepth":28,"depth":28,"links":92830},[],"三件套第三套学习",{"category":92833},"前端","\u002Fwiki\u002F2025-09-02-js",{"title":92819,"description":92831},"wiki\u002F2025-09-02-JS学习\u002Findex","lIV547GozsMOKKj0rXMMspVZbD8AexWpLGp2d1VgrPo",{"id":92839,"title":92840,"body":92841,"description":30,"extension":31,"meta":92946,"navigation":33,"path":92947,"seo":92948,"stem":92949,"__hash__":92950},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch1-安装.md","1.安装",{"type":7,"value":92842,"toc":92941},[92843,92850,92853,92856,92859,92863,92872,92875,92878,92882,92891,92894,92898,92901,92921,92924,92938],[14,92844,92845],{},[355,92846,92849],{"href":92847,"rel":92848},"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html%E8%8F%9C%E9%B8%9F%E6%95%99%E7%A8%8B",[23858],"https:\u002F\u002Fwww.runoob.com\u002Fnumpy\u002Fnumpy-tutorial.html菜鸟教程",[10,92851,92840],{"id":92852},"_1安装",[14,92854,92855],{},"numpy是科学计算基础库,底层是C语言",[14,92857,92858],{},"三种方式：",[48,92860,92862],{"id":92861},"_11-通过pip安装","1.1 通过pip安装",[97,92864,92866],{"className":30372,"code":92865,"language":30374,"meta":25,"style":25},"pip install numpy\n",[103,92867,92868],{"__ignoreMap":25},[106,92869,92870],{"class":108,"line":109},[106,92871,92865],{"class":116},[14,92873,92874],{},"首选方式，自动处理依赖项",[14,92876,92877],{},"在提示系统命令符中使用cmd",[48,92879,92881],{"id":92880},"_12-通过anaconda安装","1.2 通过Anaconda安装",[97,92883,92885],{"className":30372,"code":92884,"language":30374,"meta":25,"style":25},"conda install numpy\n",[103,92886,92887],{"__ignoreMap":25},[106,92888,92889],{"class":108,"line":109},[106,92890,92884],{"class":116},[14,92892,92893],{},"自动解决环境依赖",[48,92895,92897],{"id":92896},"_13-通过系统包管理器linuxmacos","1.3 通过系统包管理器（linux\u002Fmacos）",[14,92899,92900],{},"对于Debian\u002FUbuntu",[97,92902,92904],{"className":30372,"code":92903,"language":30374,"meta":25,"style":25},"sudo apt-get install python3-numpy\n",[103,92905,92906],{"__ignoreMap":25},[106,92907,92908,92911,92913,92916,92918],{"class":108,"line":109},[106,92909,92910],{"class":116},"sudo apt",[106,92912,649],{"class":112},[106,92914,92915],{"class":116},"get install python3",[106,92917,649],{"class":112},[106,92919,92920],{"class":116},"numpy\n",[14,92922,92923],{},"对于Fedora:",[97,92925,92927],{"className":30372,"code":92926,"language":30374,"meta":25,"style":25},"sudo dnf install python3-numpy\n",[103,92928,92929],{"__ignoreMap":25},[106,92930,92931,92934,92936],{"class":108,"line":109},[106,92932,92933],{"class":116},"sudo dnf install python3",[106,92935,649],{"class":112},[106,92937,92920],{"class":116},[5119,92939,92940],{},"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":25,"searchDepth":28,"depth":28,"links":92942},[92943,92944,92945],{"id":92861,"depth":28,"text":92862},{"id":92880,"depth":28,"text":92881},{"id":92896,"depth":28,"text":92897},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch1",{"title":92840,"description":30},"wiki\u002F2025-08-14-numpy\u002Fch1-安装","_ZuIZAeV_nnjZGVbsLzTQoAT37M5Q_lcOQxAgl9-cB4",{"id":92952,"title":92953,"body":92954,"description":30,"extension":31,"meta":93067,"navigation":33,"path":93068,"seo":93069,"stem":93070,"__hash__":93071},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch10-算数函数.md","10.算数函数",{"type":7,"value":92955,"toc":93065},[92956,92959,92962,92965,92968,92971,92974,92977,92980,92983,93059,93062],[10,92957,92953],{"id":92958},"_10算数函数",[14,92960,92961],{},"加减乘除运算跟python基础语法没区别",[14,92963,92964],{},"除了python那种方法外还可以使用函数",[14,92966,92967],{},"加：np.add(a,b)",[14,92969,92970],{},"减：np.subtract(a,b)",[14,92972,92973],{},"乘：np.multiply(a,b)",[14,92975,92976],{},"除：np.divide(a,b) == a\u002Fb",[14,92978,92979],{},"取余：np.mod(a,b) == a%b",[14,92981,92982],{},"必须会的用法：",[97,92984,92986],{"className":30372,"code":92985,"language":30374,"meta":25,"style":25},"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",[103,92987,92988,93010,93031,93041,93054],{"__ignoreMap":25},[106,92989,92990,92992,92994,92997,92999,93002,93004,93006,93008],{"class":108,"line":109},[106,92991,355],{"class":116},[106,92993,162],{"class":112},[106,92995,92996],{"class":116},"np.arange(",[106,92998,537],{"class":165},[106,93000,93001],{"class":116},").reshape(",[106,93003,188],{"class":165},[106,93005,495],{"class":116},[106,93007,188],{"class":165},[106,93009,123],{"class":116},[106,93011,93012,93014,93016,93019,93021,93023,93025,93027,93029],{"class":108,"line":28},[106,93013,380],{"class":116},[106,93015,162],{"class":112},[106,93017,93018],{"class":116},"np.array([",[106,93020,563],{"class":165},[106,93022,495],{"class":116},[106,93024,563],{"class":165},[106,93026,495],{"class":116},[106,93028,563],{"class":165},[106,93030,4649],{"class":116},[106,93032,93033,93036,93038],{"class":108,"line":1172},[106,93034,93035],{"class":116},"result",[106,93037,162],{"class":112},[106,93039,93040],{"class":116},"np.empty_like(a)\n",[106,93042,93043,93046,93049,93051],{"class":108,"line":1187},[106,93044,93045],{"class":116},"np.add(a,b,",[106,93047,93048],{"class":5209},"out",[106,93050,162],{"class":112},[106,93052,93053],{"class":116},"result)\n",[106,93055,93056],{"class":108,"line":1193},[106,93057,93058],{"class":116},"result\n",[14,93060,93061],{},"总结：使用函数可以使用out参数将结果放到具体的位置，在进行运算时，两个数组形状不同时，会进行广播操作，变成一样的",[5119,93063,93064],{},"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":25,"searchDepth":28,"depth":28,"links":93066},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch10",{"title":92953,"description":30},"wiki\u002F2025-08-14-numpy\u002Fch10-算数函数","MRir4Wr30-SYAykqeiub6_1Xao5nccQZ6Li54ohb_SQ",{"id":93073,"title":93074,"body":93075,"description":30,"extension":31,"meta":93837,"navigation":33,"path":93838,"seo":93839,"stem":93840,"__hash__":93841},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch11-统计函数.md","11.统计函数",{"type":7,"value":93076,"toc":93824},[93077,93080,93083,93086,93090,93129,93133,93177,93237,93241,93244,93283,93286,93331,93335,93371,93375,93444,93448,93512,93516,93519,93522,93525,93528,93564,93568,93608,93612,93684,93687,93691,93754,93758,93821],[10,93078,93074],{"id":93079},"_11统计函数",[14,93081,93082],{},"sum max min mean",[14,93084,93085],{},"这些有axis参数，可以指定方向",[48,93087,93089],{"id":93088},"_111-sum求和函数","11.1 sum()求和函数",[97,93091,93093],{"className":30372,"code":93092,"language":30374,"meta":25,"style":25},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.sum(a)#求和\n",[103,93094,93095,93100,93121],{"__ignoreMap":25},[106,93096,93097],{"class":108,"line":109},[106,93098,93099],{"class":175},"#创建一维数组\n",[106,93101,93102,93104,93106,93109,93111,93113,93115,93117,93119],{"class":108,"line":28},[106,93103,355],{"class":116},[106,93105,162],{"class":112},[106,93107,93108],{"class":116},"np.random.randint(",[106,93110,334],{"class":165},[106,93112,495],{"class":116},[106,93114,428],{"class":165},[106,93116,495],{"class":116},[106,93118,817],{"class":165},[106,93120,123],{"class":116},[106,93122,93123,93126],{"class":108,"line":1172},[106,93124,93125],{"class":116},"np.sum(a)",[106,93127,93128],{"class":175},"#求和\n",[48,93130,93132],{"id":93131},"_112-max求最大值函数","11.2 max()求最大值函数",[97,93134,93136],{"className":30372,"code":93135,"language":30374,"meta":25,"style":25},"#创建一维数组\na=np.random.randint(1,100,20)\nnp.max(a)\n#最大索引(求最大元素的索引)arg\nnp.argmax(a)\n",[103,93137,93138,93142,93162,93167,93172],{"__ignoreMap":25},[106,93139,93140],{"class":108,"line":109},[106,93141,93099],{"class":175},[106,93143,93144,93146,93148,93150,93152,93154,93156,93158,93160],{"class":108,"line":28},[106,93145,355],{"class":116},[106,93147,162],{"class":112},[106,93149,93108],{"class":116},[106,93151,334],{"class":165},[106,93153,495],{"class":116},[106,93155,428],{"class":165},[106,93157,495],{"class":116},[106,93159,817],{"class":165},[106,93161,123],{"class":116},[106,93163,93164],{"class":108,"line":1172},[106,93165,93166],{"class":116},"np.max(a)\n",[106,93168,93169],{"class":108,"line":1187},[106,93170,93171],{"class":175},"#最大索引(求最大元素的索引)arg\n",[106,93173,93174],{"class":108,"line":1193},[106,93175,93176],{"class":116},"np.argmax(a)\n",[97,93178,93180],{"className":30372,"code":93179,"language":30374,"meta":25,"style":25},"a = np.array([1, 5, 3])\nb = np.array([3, 2, 4])\n\nprint(np.maximum(a, b))   # [3 5 4]，每个位置上取较大值\n",[103,93181,93182,93203,93223,93227],{"__ignoreMap":25},[106,93183,93184,93186,93188,93191,93193,93195,93197,93199,93201],{"class":108,"line":109},[106,93185,10912],{"class":116},[106,93187,162],{"class":112},[106,93189,93190],{"class":116}," np.array([",[106,93192,334],{"class":165},[106,93194,12428],{"class":116},[106,93196,436],{"class":165},[106,93198,12428],{"class":116},[106,93200,188],{"class":165},[106,93202,4649],{"class":116},[106,93204,93205,93207,93209,93211,93213,93215,93217,93219,93221],{"class":108,"line":28},[106,93206,10938],{"class":116},[106,93208,162],{"class":112},[106,93210,93190],{"class":116},[106,93212,188],{"class":165},[106,93214,12428],{"class":116},[106,93216,194],{"class":165},[106,93218,12428],{"class":116},[106,93220,410],{"class":165},[106,93222,4649],{"class":116},[106,93224,93225],{"class":108,"line":1172},[106,93226,2392],{"emptyLinePlaceholder":33},[106,93228,93229,93231,93234],{"class":108,"line":1187},[106,93230,30409],{"class":165},[106,93232,93233],{"class":116},"(np.maximum(a, b))   ",[106,93235,93236],{"class":175},"# [3 5 4]，每个位置上取较大值\n",[48,93238,93240],{"id":93239},"_113-mean求平均值函数","11.3 mean()求平均值函数",[14,93242,93243],{},"①一维数组：",[97,93245,93247],{"className":30372,"code":93246,"language":30374,"meta":25,"style":25},"#创建一维数组\na=np.random.randint(1,100,20)\n#求平均值\nnp.mean(a)\n",[103,93248,93249,93253,93273,93278],{"__ignoreMap":25},[106,93250,93251],{"class":108,"line":109},[106,93252,93099],{"class":175},[106,93254,93255,93257,93259,93261,93263,93265,93267,93269,93271],{"class":108,"line":28},[106,93256,355],{"class":116},[106,93258,162],{"class":112},[106,93260,93108],{"class":116},[106,93262,334],{"class":165},[106,93264,495],{"class":116},[106,93266,428],{"class":165},[106,93268,495],{"class":116},[106,93270,817],{"class":165},[106,93272,123],{"class":116},[106,93274,93275],{"class":108,"line":1172},[106,93276,93277],{"class":175},"#求平均值\n",[106,93279,93280],{"class":108,"line":1187},[106,93281,93282],{"class":116},"np.mean(a)\n",[14,93284,93285],{},"②二维数组",[97,93287,93289],{"className":30372,"code":93288,"language":30374,"meta":25,"style":25},"#二维数组\naa=np.arange(1,13).reshape(3,4)\n#对数组中的所有数求平均\nnp.mean(aa)\n",[103,93290,93291,93296,93321,93326],{"__ignoreMap":25},[106,93292,93293],{"class":108,"line":109},[106,93294,93295],{"class":175},"#二维数组\n",[106,93297,93298,93301,93303,93305,93307,93309,93311,93313,93315,93317,93319],{"class":108,"line":28},[106,93299,93300],{"class":116},"aa",[106,93302,162],{"class":112},[106,93304,92996],{"class":116},[106,93306,334],{"class":165},[106,93308,495],{"class":116},[106,93310,640],{"class":165},[106,93312,93001],{"class":116},[106,93314,188],{"class":165},[106,93316,495],{"class":116},[106,93318,410],{"class":165},[106,93320,123],{"class":116},[106,93322,93323],{"class":108,"line":1172},[106,93324,93325],{"class":175},"#对数组中的所有数求平均\n",[106,93327,93328],{"class":108,"line":1187},[106,93329,93330],{"class":116},"np.mean(aa)\n",[48,93332,93334],{"id":93333},"_114-median求中位数函数","11.4 median()求中位数函数",[97,93336,93338],{"className":30372,"code":93337,"language":30374,"meta":25,"style":25},"#求中位数\nb=np.arange(1,10)\nnp.median(b)\n#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[103,93339,93340,93345,93361,93366],{"__ignoreMap":25},[106,93341,93342],{"class":108,"line":109},[106,93343,93344],{"class":175},"#求中位数\n",[106,93346,93347,93349,93351,93353,93355,93357,93359],{"class":108,"line":28},[106,93348,380],{"class":116},[106,93350,162],{"class":112},[106,93352,92996],{"class":116},[106,93354,334],{"class":165},[106,93356,495],{"class":116},[106,93358,563],{"class":165},[106,93360,123],{"class":116},[106,93362,93363],{"class":108,"line":1172},[106,93364,93365],{"class":116},"np.median(b)\n",[106,93367,93368],{"class":108,"line":1187},[106,93369,93370],{"class":175},"#正常这个代码就可以，对于奇数就是排序后中间哪个值，对于偶数就是排序后中间那两个数的平均值\n",[48,93372,93374],{"id":93373},"_115-power求幂运算函数","11.5 power()求幂运算函数",[97,93376,93378],{"className":30372,"code":93377,"language":30374,"meta":25,"style":25},"b=np.arange(1,10)\n#幂运算\n#第一个参数是要进行幂运算的数列，第二个参数是为方\nnp.power(b,2)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b)\nnp.power(b,2,out=y)\n",[103,93379,93380,93396,93401,93406,93415,93420,93429],{"__ignoreMap":25},[106,93381,93382,93384,93386,93388,93390,93392,93394],{"class":108,"line":109},[106,93383,380],{"class":116},[106,93385,162],{"class":112},[106,93387,92996],{"class":116},[106,93389,334],{"class":165},[106,93391,495],{"class":116},[106,93393,563],{"class":165},[106,93395,123],{"class":116},[106,93397,93398],{"class":108,"line":28},[106,93399,93400],{"class":175},"#幂运算\n",[106,93402,93403],{"class":108,"line":1172},[106,93404,93405],{"class":175},"#第一个参数是要进行幂运算的数列，第二个参数是为方\n",[106,93407,93408,93411,93413],{"class":108,"line":1187},[106,93409,93410],{"class":116},"np.power(b,",[106,93412,194],{"class":165},[106,93414,123],{"class":116},[106,93416,93417],{"class":108,"line":1193},[106,93418,93419],{"class":175},"#或者以下代码，将数据存储起来\n",[106,93421,93422,93424,93426],{"class":108,"line":1207},[106,93423,962],{"class":116},[106,93425,162],{"class":112},[106,93427,93428],{"class":116},"np.empty_like(b)\n",[106,93430,93431,93433,93435,93437,93439,93441],{"class":108,"line":1213},[106,93432,93410],{"class":116},[106,93434,194],{"class":165},[106,93436,495],{"class":116},[106,93438,93048],{"class":5209},[106,93440,162],{"class":112},[106,93442,93443],{"class":116},"y)\n",[48,93445,93447],{"id":93446},"_116-sqrt求开方函数","11.6 sqrt()求开方函数",[97,93449,93451],{"className":30372,"code":93450,"language":30374,"meta":25,"style":25},"b=np.arange(1,10)\n#开方\nnp.sqrt(b)\n#或者以下代码，将数据存储起来\ny=np.empty_like(b,dtype=float)\nnp.sqrt(b,out=y)\n",[103,93452,93453,93469,93474,93479,93483,93501],{"__ignoreMap":25},[106,93454,93455,93457,93459,93461,93463,93465,93467],{"class":108,"line":109},[106,93456,380],{"class":116},[106,93458,162],{"class":112},[106,93460,92996],{"class":116},[106,93462,334],{"class":165},[106,93464,495],{"class":116},[106,93466,563],{"class":165},[106,93468,123],{"class":116},[106,93470,93471],{"class":108,"line":28},[106,93472,93473],{"class":175},"#开方\n",[106,93475,93476],{"class":108,"line":1172},[106,93477,93478],{"class":116},"np.sqrt(b)\n",[106,93480,93481],{"class":108,"line":1187},[106,93482,93419],{"class":175},[106,93484,93485,93487,93489,93492,93495,93497,93499],{"class":108,"line":1193},[106,93486,962],{"class":116},[106,93488,162],{"class":112},[106,93490,93491],{"class":116},"np.empty_like(b,",[106,93493,93494],{"class":5209},"dtype",[106,93496,162],{"class":112},[106,93498,156],{"class":165},[106,93500,123],{"class":116},[106,93502,93503,93506,93508,93510],{"class":108,"line":1207},[106,93504,93505],{"class":116},"np.sqrt(b,",[106,93507,93048],{"class":5209},[106,93509,162],{"class":112},[106,93511,93443],{"class":116},[48,93513,93515],{"id":93514},"_117-cumsum累计求和函数","11.7 cumsum()累计求和函数",[14,93517,93518],{},"对数组中的元素累计求和，可指定轴",[14,93520,93521],{},"#累计求和的意思是：",[14,93523,93524],{},"a = np.array([1, 2, 3, 4])",[14,93526,93527],{},"[1, 1+2, 1+2+3, 1+2+3+4] → [1, 3, 6, 10]",[97,93529,93531],{"className":30372,"code":93530,"language":30374,"meta":25,"style":25},"b=np.arange(1,10)\nnp.cumsum(b)\n#结果：\n#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[103,93532,93533,93549,93554,93559],{"__ignoreMap":25},[106,93534,93535,93537,93539,93541,93543,93545,93547],{"class":108,"line":109},[106,93536,380],{"class":116},[106,93538,162],{"class":112},[106,93540,92996],{"class":116},[106,93542,334],{"class":165},[106,93544,495],{"class":116},[106,93546,563],{"class":165},[106,93548,123],{"class":116},[106,93550,93551],{"class":108,"line":28},[106,93552,93553],{"class":116},"np.cumsum(b)\n",[106,93555,93556],{"class":108,"line":1172},[106,93557,93558],{"class":175},"#结果：\n",[106,93560,93561],{"class":108,"line":1187},[106,93562,93563],{"class":175},"#array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])\n",[48,93565,93567],{"id":93566},"_118-cumprod累计求积函数","11.8 cumprod()累计求积函数",[97,93569,93571],{"className":30372,"code":93570,"language":30374,"meta":25,"style":25},"b=np.arange(1,10)\n#对数组中的元素累计求积，可指定轴\nnp.cumprod(b)\n#结果：\n#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[103,93572,93573,93589,93594,93599,93603],{"__ignoreMap":25},[106,93574,93575,93577,93579,93581,93583,93585,93587],{"class":108,"line":109},[106,93576,380],{"class":116},[106,93578,162],{"class":112},[106,93580,92996],{"class":116},[106,93582,334],{"class":165},[106,93584,495],{"class":116},[106,93586,563],{"class":165},[106,93588,123],{"class":116},[106,93590,93591],{"class":108,"line":28},[106,93592,93593],{"class":175},"#对数组中的元素累计求积，可指定轴\n",[106,93595,93596],{"class":108,"line":1172},[106,93597,93598],{"class":116},"np.cumprod(b)\n",[106,93600,93601],{"class":108,"line":1187},[106,93602,93558],{"class":175},[106,93604,93605],{"class":108,"line":1193},[106,93606,93607],{"class":175},"#array([     1,      2,      6,     24,    120,    720,   5040,  40320,362880])\n",[48,93609,93611],{"id":93610},"_119-uniqu删除重复元素排序","11.9 uniqu()删除重复元素+排序",[97,93613,93615],{"className":30372,"code":93614,"language":30374,"meta":25,"style":25},"#删除数组中的重复数据，并对数据进行排序\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",[103,93616,93617,93622,93670,93675,93679],{"__ignoreMap":25},[106,93618,93619],{"class":108,"line":109},[106,93620,93621],{"class":175},"#删除数组中的重复数据，并对数据进行排序\n",[106,93623,93624,93626,93628,93630,93632,93634,93636,93638,93640,93642,93644,93646,93648,93650,93652,93654,93656,93658,93660,93662,93664,93666,93668],{"class":108,"line":28},[106,93625,355],{"class":116},[106,93627,162],{"class":112},[106,93629,93018],{"class":116},[106,93631,334],{"class":165},[106,93633,495],{"class":116},[106,93635,194],{"class":165},[106,93637,495],{"class":116},[106,93639,188],{"class":165},[106,93641,495],{"class":116},[106,93643,615],{"class":165},[106,93645,495],{"class":116},[106,93647,188],{"class":165},[106,93649,495],{"class":116},[106,93651,563],{"class":165},[106,93653,495],{"class":116},[106,93655,314],{"class":165},[106,93657,495],{"class":116},[106,93659,308],{"class":165},[106,93661,495],{"class":116},[106,93663,892],{"class":165},[106,93665,495],{"class":116},[106,93667,410],{"class":165},[106,93669,4649],{"class":116},[106,93671,93672],{"class":108,"line":1172},[106,93673,93674],{"class":116},"np.unique(a)\n",[106,93676,93677],{"class":108,"line":1187},[106,93678,93558],{"class":175},[106,93680,93681],{"class":108,"line":1193},[106,93682,93683],{"class":175},"#array([ 0,  1,  2,  3,  4, 10, 12, 23, 32])\n",[14,93685,93686],{},"升序形式排序",[48,93688,93690],{"id":93689},"_1110-nonzero返回非零元素索引","11.10 nonzero()返回非零元素索引",[97,93692,93694],{"className":30372,"code":93693,"language":30374,"meta":25,"style":25},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#返回数组中非零元素的索引\nnp.nonzero(a)\n",[103,93695,93696,93744,93749],{"__ignoreMap":25},[106,93697,93698,93700,93702,93704,93706,93708,93710,93712,93714,93716,93718,93720,93722,93724,93726,93728,93730,93732,93734,93736,93738,93740,93742],{"class":108,"line":109},[106,93699,355],{"class":116},[106,93701,162],{"class":112},[106,93703,93018],{"class":116},[106,93705,334],{"class":165},[106,93707,495],{"class":116},[106,93709,194],{"class":165},[106,93711,495],{"class":116},[106,93713,188],{"class":165},[106,93715,495],{"class":116},[106,93717,615],{"class":165},[106,93719,495],{"class":116},[106,93721,188],{"class":165},[106,93723,495],{"class":116},[106,93725,563],{"class":165},[106,93727,495],{"class":116},[106,93729,314],{"class":165},[106,93731,495],{"class":116},[106,93733,308],{"class":165},[106,93735,495],{"class":116},[106,93737,892],{"class":165},[106,93739,495],{"class":116},[106,93741,410],{"class":165},[106,93743,4649],{"class":116},[106,93745,93746],{"class":108,"line":28},[106,93747,93748],{"class":175},"#返回数组中非零元素的索引\n",[106,93750,93751],{"class":108,"line":1172},[106,93752,93753],{"class":116},"np.nonzero(a)\n",[48,93755,93757],{"id":93756},"_1111-ptp计算最值之差","11.11 ptp()计算最值之差",[97,93759,93761],{"className":30372,"code":93760,"language":30374,"meta":25,"style":25},"a=np.array([1,2,3,12,3,10,32,0,23,4])\n#计算一组数中最大值与最小值的差，可指定轴\nnp.ptp(a)\n",[103,93762,93763,93811,93816],{"__ignoreMap":25},[106,93764,93765,93767,93769,93771,93773,93775,93777,93779,93781,93783,93785,93787,93789,93791,93793,93795,93797,93799,93801,93803,93805,93807,93809],{"class":108,"line":109},[106,93766,355],{"class":116},[106,93768,162],{"class":112},[106,93770,93018],{"class":116},[106,93772,334],{"class":165},[106,93774,495],{"class":116},[106,93776,194],{"class":165},[106,93778,495],{"class":116},[106,93780,188],{"class":165},[106,93782,495],{"class":116},[106,93784,615],{"class":165},[106,93786,495],{"class":116},[106,93788,188],{"class":165},[106,93790,495],{"class":116},[106,93792,563],{"class":165},[106,93794,495],{"class":116},[106,93796,314],{"class":165},[106,93798,495],{"class":116},[106,93800,308],{"class":165},[106,93802,495],{"class":116},[106,93804,892],{"class":165},[106,93806,495],{"class":116},[106,93808,410],{"class":165},[106,93810,4649],{"class":116},[106,93812,93813],{"class":108,"line":28},[106,93814,93815],{"class":175},"#计算一组数中最大值与最小值的差，可指定轴\n",[106,93817,93818],{"class":108,"line":1172},[106,93819,93820],{"class":116},"np.ptp(a)\n",[5119,93822,93823],{},"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":25,"searchDepth":28,"depth":28,"links":93825},[93826,93827,93828,93829,93830,93831,93832,93833,93834,93835,93836],{"id":93088,"depth":28,"text":93089},{"id":93131,"depth":28,"text":93132},{"id":93239,"depth":28,"text":93240},{"id":93333,"depth":28,"text":93334},{"id":93373,"depth":28,"text":93374},{"id":93446,"depth":28,"text":93447},{"id":93514,"depth":28,"text":93515},{"id":93566,"depth":28,"text":93567},{"id":93610,"depth":28,"text":93611},{"id":93689,"depth":28,"text":93690},{"id":93756,"depth":28,"text":93757},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch11",{"title":93074,"description":30},"wiki\u002F2025-08-14-numpy\u002Fch11-统计函数","CTRvDo_rBDOrpNMU-fbOBmv8zkqxGfIkMB9rSWJBiro",{"id":93843,"title":93844,"body":93845,"description":30,"extension":31,"meta":94500,"navigation":33,"path":94501,"seo":94502,"stem":94503,"__hash__":94504},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数.md","12.其他常用函数",{"type":7,"value":93846,"toc":94488},[93847,93850,93854,93857,94073,94077,94080,94289,94293,94359,94364,94368,94371,94374,94412,94416,94419,94424,94428,94431,94434,94439,94443,94446,94450,94453,94456,94461,94465,94468,94471,94476,94480,94485],[10,93848,93844],{"id":93849},"_12其他常用函数",[48,93851,93853],{"id":93852},"_121-tile元素按行列复制扩展","12.1 tile()元素按行列复制扩展",[14,93855,93856],{},"将数组的数据按照行列复制扩展",[97,93858,93860],{"className":30372,"code":93859,"language":30374,"meta":25,"style":25},"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",[103,93861,93862,93878,93887,93891,93896,93901,93914,93918,93923,93928,93933,93937,93942,93966,93978,93982,93986,93991,93996,94001,94006,94010,94023,94027,94031,94036,94041,94046,94051,94056,94060,94064,94069],{"__ignoreMap":25},[106,93863,93864,93866,93868,93870,93872,93874,93876],{"class":108,"line":109},[106,93865,355],{"class":116},[106,93867,162],{"class":112},[106,93869,92996],{"class":116},[106,93871,334],{"class":165},[106,93873,495],{"class":116},[106,93875,436],{"class":165},[106,93877,123],{"class":116},[106,93879,93880,93883,93885],{"class":108,"line":28},[106,93881,93882],{"class":116},"np.tile(a,",[106,93884,194],{"class":165},[106,93886,123],{"class":116},[106,93888,93889],{"class":108,"line":1172},[106,93890,93558],{"class":175},[106,93892,93893],{"class":108,"line":1187},[106,93894,93895],{"class":175},"#array([1, 2, 3, 4, 1, 2, 3, 4])\n",[106,93897,93898],{"class":108,"line":1193},[106,93899,93900],{"class":175},"#行复制两次，列复制三次\n",[106,93902,93903,93906,93908,93910,93912],{"class":108,"line":1207},[106,93904,93905],{"class":116},"np.tile(a,(",[106,93907,194],{"class":165},[106,93909,495],{"class":116},[106,93911,188],{"class":165},[106,93913,30491],{"class":116},[106,93915,93916],{"class":108,"line":1213},[106,93917,93558],{"class":175},[106,93919,93920],{"class":108,"line":1304},[106,93921,93922],{"class":221},"'''\n",[106,93924,93925],{"class":108,"line":1310},[106,93926,93927],{"class":221},"array([[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4],\n",[106,93929,93930],{"class":108,"line":1322},[106,93931,93932],{"class":221},"       [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]])\n",[106,93934,93935],{"class":108,"line":1604},[106,93936,93922],{"class":221},[106,93938,93939],{"class":108,"line":1609},[106,93940,93941],{"class":175},"#创建二维数组\n",[106,93943,93944,93946,93948,93950,93952,93954,93956,93958,93960,93962,93964],{"class":108,"line":1615},[106,93945,93300],{"class":116},[106,93947,162],{"class":112},[106,93949,92996],{"class":116},[106,93951,334],{"class":165},[106,93953,495],{"class":116},[106,93955,640],{"class":165},[106,93957,93001],{"class":116},[106,93959,410],{"class":165},[106,93961,495],{"class":116},[106,93963,188],{"class":165},[106,93965,123],{"class":116},[106,93967,93968,93971,93973,93975],{"class":108,"line":1620},[106,93969,93970],{"class":116},"np.tile(aa,",[106,93972,194],{"class":165},[106,93974,546],{"class":116},[106,93976,93977],{"class":175},"#一个数的时候就是行\n",[106,93979,93980],{"class":108,"line":1634},[106,93981,93558],{"class":175},[106,93983,93984],{"class":108,"line":1639},[106,93985,93922],{"class":221},[106,93987,93988],{"class":108,"line":1645},[106,93989,93990],{"class":221},"array([[ 1,  2,  3,  1,  2,  3],\n",[106,93992,93993],{"class":108,"line":1666},[106,93994,93995],{"class":221},"       [ 4,  5,  6,  4,  5,  6],\n",[106,93997,93998],{"class":108,"line":1671},[106,93999,94000],{"class":221},"       [ 7,  8,  9,  7,  8,  9],\n",[106,94002,94003],{"class":108,"line":1685},[106,94004,94005],{"class":221},"       [10, 11, 12, 10, 11, 12]])\n",[106,94007,94008],{"class":108,"line":1690},[106,94009,93922],{"class":221},[106,94011,94012,94015,94017,94019,94021],{"class":108,"line":1719},[106,94013,94014],{"class":116},"np.tile(aa,(",[106,94016,194],{"class":165},[106,94018,495],{"class":116},[106,94020,188],{"class":165},[106,94022,30491],{"class":116},[106,94024,94025],{"class":108,"line":1724},[106,94026,93558],{"class":175},[106,94028,94029],{"class":108,"line":1741},[106,94030,93922],{"class":221},[106,94032,94033],{"class":108,"line":1746},[106,94034,94035],{"class":221},"array([[ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[106,94037,94038],{"class":108,"line":1751},[106,94039,94040],{"class":221},"       [ 4,  5,  6,  4,  5,  6,  4,  5,  6],\n",[106,94042,94043],{"class":108,"line":1756},[106,94044,94045],{"class":221},"       [ 7,  8,  9,  7,  8,  9,  7,  8,  9],\n",[106,94047,94048],{"class":108,"line":1770},[106,94049,94050],{"class":221},"       [10, 11, 12, 10, 11, 12, 10, 11, 12],\n",[106,94052,94053],{"class":108,"line":1775},[106,94054,94055],{"class":221},"       [ 1,  2,  3,  1,  2,  3,  1,  2,  3],\n",[106,94057,94058],{"class":108,"line":2569},[106,94059,94040],{"class":221},[106,94061,94062],{"class":108,"line":2583},[106,94063,94045],{"class":221},[106,94065,94066],{"class":108,"line":2591},[106,94067,94068],{"class":221},"       [10, 11, 12, 10, 11, 12, 10, 11, 12]])\n",[106,94070,94071],{"class":108,"line":2596},[106,94072,93922],{"class":221},[48,94074,94076],{"id":94075},"_122-repeat元素重复若干","12.2 repeat()元素重复若干",[14,94078,94079],{},"repeat()将数组中的每个元素重复若干次",[97,94081,94083],{"className":30372,"code":94082,"language":30374,"meta":25,"style":25},"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",[103,94084,94085,94101,94110,94114,94119,94143,94148,94157,94161,94166,94170,94175,94191,94195,94199,94204,94209,94214,94218,94223,94227,94232,94237,94241,94257,94261,94265,94270,94275,94280,94285],{"__ignoreMap":25},[106,94086,94087,94089,94091,94093,94095,94097,94099],{"class":108,"line":109},[106,94088,355],{"class":116},[106,94090,162],{"class":112},[106,94092,92996],{"class":116},[106,94094,334],{"class":165},[106,94096,495],{"class":116},[106,94098,436],{"class":165},[106,94100,123],{"class":116},[106,94102,94103,94106,94108],{"class":108,"line":28},[106,94104,94105],{"class":116},"np.repeat(a,",[106,94107,188],{"class":165},[106,94109,123],{"class":116},[106,94111,94112],{"class":108,"line":1172},[106,94113,93558],{"class":175},[106,94115,94116],{"class":108,"line":1187},[106,94117,94118],{"class":175},"#array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4])\n",[106,94120,94121,94123,94125,94127,94129,94131,94133,94135,94137,94139,94141],{"class":108,"line":1193},[106,94122,93300],{"class":116},[106,94124,162],{"class":112},[106,94126,92996],{"class":116},[106,94128,334],{"class":165},[106,94130,495],{"class":116},[106,94132,640],{"class":165},[106,94134,93001],{"class":116},[106,94136,410],{"class":165},[106,94138,495],{"class":116},[106,94140,188],{"class":165},[106,94142,123],{"class":116},[106,94144,94145],{"class":108,"line":1207},[106,94146,94147],{"class":175},"#这个重复之后二维变成一维\n",[106,94149,94150,94153,94155],{"class":108,"line":1213},[106,94151,94152],{"class":116},"np.repeat(aa,",[106,94154,194],{"class":165},[106,94156,123],{"class":116},[106,94158,94159],{"class":108,"line":1304},[106,94160,93922],{"class":221},[106,94162,94163],{"class":108,"line":1310},[106,94164,94165],{"class":221},"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",[106,94167,94168],{"class":108,"line":1322},[106,94169,93922],{"class":221},[106,94171,94172],{"class":108,"line":1604},[106,94173,94174],{"class":175},"#指定axis\n",[106,94176,94177,94179,94181,94183,94185,94187,94189],{"class":108,"line":1609},[106,94178,94152],{"class":116},[106,94180,194],{"class":165},[106,94182,495],{"class":116},[106,94184,47508],{"class":5209},[106,94186,162],{"class":112},[106,94188,308],{"class":165},[106,94190,123],{"class":116},[106,94192,94193],{"class":108,"line":1615},[106,94194,93558],{"class":175},[106,94196,94197],{"class":108,"line":1620},[106,94198,93922],{"class":221},[106,94200,94201],{"class":108,"line":1634},[106,94202,94203],{"class":221},"array([[ 1,  2,  3],\n",[106,94205,94206],{"class":108,"line":1639},[106,94207,94208],{"class":221},"       [ 1,  2,  3],\n",[106,94210,94211],{"class":108,"line":1645},[106,94212,94213],{"class":221},"       [ 4,  5,  6],\n",[106,94215,94216],{"class":108,"line":1666},[106,94217,94213],{"class":221},[106,94219,94220],{"class":108,"line":1671},[106,94221,94222],{"class":221},"       [ 7,  8,  9],\n",[106,94224,94225],{"class":108,"line":1685},[106,94226,94222],{"class":221},[106,94228,94229],{"class":108,"line":1690},[106,94230,94231],{"class":221},"       [10, 11, 12],\n",[106,94233,94234],{"class":108,"line":1719},[106,94235,94236],{"class":221},"       [10, 11, 12]])\n",[106,94238,94239],{"class":108,"line":1724},[106,94240,93922],{"class":221},[106,94242,94243,94245,94247,94249,94251,94253,94255],{"class":108,"line":1741},[106,94244,94152],{"class":116},[106,94246,194],{"class":165},[106,94248,495],{"class":116},[106,94250,47508],{"class":5209},[106,94252,162],{"class":112},[106,94254,334],{"class":165},[106,94256,123],{"class":116},[106,94258,94259],{"class":108,"line":1746},[106,94260,93558],{"class":175},[106,94262,94263],{"class":108,"line":1751},[106,94264,93922],{"class":221},[106,94266,94267],{"class":108,"line":1756},[106,94268,94269],{"class":221},"array([[ 1,  1,  2,  2,  3,  3],\n",[106,94271,94272],{"class":108,"line":1770},[106,94273,94274],{"class":221},"       [ 4,  4,  5,  5,  6,  6],\n",[106,94276,94277],{"class":108,"line":1775},[106,94278,94279],{"class":221},"       [ 7,  7,  8,  8,  9,  9],\n",[106,94281,94282],{"class":108,"line":2569},[106,94283,94284],{"class":221},"       [10, 10, 11, 11, 12, 12]])\n",[106,94286,94287],{"class":108,"line":2583},[106,94288,93922],{"class":221},[48,94290,94292],{"id":94291},"_123-roll沿指定轴对数组元素移位","12.3 roll()沿指定轴对数组元素移位",[97,94294,94296],{"className":30372,"code":94295,"language":30374,"meta":25,"style":25},"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",[103,94297,94298,94314,94319,94331,94335,94340,94350,94354],{"__ignoreMap":25},[106,94299,94300,94302,94304,94306,94308,94310,94312],{"class":108,"line":109},[106,94301,355],{"class":116},[106,94303,162],{"class":112},[106,94305,92996],{"class":116},[106,94307,334],{"class":165},[106,94309,495],{"class":116},[106,94311,436],{"class":165},[106,94313,123],{"class":116},[106,94315,94316],{"class":108,"line":28},[106,94317,94318],{"class":175},"#array([，2，3，4])\n",[106,94320,94321,94324,94326,94328],{"class":108,"line":1172},[106,94322,94323],{"class":116},"np.roll(a,",[106,94325,194],{"class":165},[106,94327,546],{"class":116},[106,94329,94330],{"class":175},"#传正数向后调多少位，传负数向前调多少位\n",[106,94332,94333],{"class":108,"line":1187},[106,94334,93558],{"class":175},[106,94336,94337],{"class":108,"line":1193},[106,94338,94339],{"class":175},"#array([3, 4, 1, 2])\n",[106,94341,94342,94344,94346,94348],{"class":108,"line":1207},[106,94343,94323],{"class":116},[106,94345,649],{"class":112},[106,94347,334],{"class":165},[106,94349,123],{"class":116},[106,94351,94352],{"class":108,"line":1213},[106,94353,93558],{"class":175},[106,94355,94356],{"class":108,"line":1304},[106,94357,94358],{"class":175},"#array([2, 3, 4, 1])\n",[14,94360,94361],{},[23,94362],{"alt":25,"src":94363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-032.png",[48,94365,94367],{"id":94366},"_124-resize重新调整数组大小","12.4 resize()重新调整数组大小",[14,94369,94370],{},"resize()重新调整数组的大小",[14,94372,94373],{},"reshape修改数组的维度，数组元素个数不能改变，要保持一致",[97,94375,94377],{"className":30372,"code":94376,"language":30374,"meta":25,"style":25},"#resize()重新调整 数组的大小，数组元素个数可以不相同\nnp.resize(aa,(2,6))\nnp.resize(aa,(2,9))#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[103,94378,94379,94384,94397],{"__ignoreMap":25},[106,94380,94381],{"class":108,"line":109},[106,94382,94383],{"class":175},"#resize()重新调整 数组的大小，数组元素个数可以不相同\n",[106,94385,94386,94389,94391,94393,94395],{"class":108,"line":28},[106,94387,94388],{"class":116},"np.resize(aa,(",[106,94390,194],{"class":165},[106,94392,495],{"class":116},[106,94394,461],{"class":165},[106,94396,30491],{"class":116},[106,94398,94399,94401,94403,94405,94407,94409],{"class":108,"line":1172},[106,94400,94388],{"class":116},[106,94402,194],{"class":165},[106,94404,495],{"class":116},[106,94406,537],{"class":165},[106,94408,82765],{"class":116},[106,94410,94411],{"class":175},"#这样改完之后可以与原数组形状不同，多出来的元素又从第一个元素依次进行排\n",[48,94413,94415],{"id":94414},"_125-placeput函数","12.5 place()\u002Fput()函数",[14,94417,94418],{},"将数组中满足条件的元素\u002F指定的元素替换为指定的值",[14,94420,94421],{},[23,94422],{"alt":25,"src":94423},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-033.png",[48,94425,94427],{"id":94426},"_126-保存加载文件","12.6 保存加载文件",[14,94429,94430],{},"savetxt():将数据保存到txt文件中",[14,94432,94433],{},"loadtxt():从文件加载数据",[14,94435,94436],{},[23,94437],{"alt":25,"src":94438},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-034.png",[48,94440,94442],{"id":94441},"_127-genfromtxt函数","12.7 genfromtxt()函数",[14,94444,94445],{},"根据文件内容中生成数据，可以指定缺失值的处理等",[48,94447,94449],{"id":94448},"_128-anyall函数","12.8 any()\u002Fall()函数",[14,94451,94452],{},"any():如果数组中存在一个True的元素（或者能转化为True的元素），则返回True",[14,94454,94455],{},"all():如果数组中所有的元素都为True（或者能转为True的元素），则返回True",[14,94457,94458],{},[23,94459],{"alt":25,"src":94460},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-035.png",[48,94462,94464],{"id":94463},"_129-where语句","12.9 where语句",[14,94466,94467],{},"np.where(条件,x,y)",[14,94469,94470],{},"如果条件为True,对应值为x,否则对应值为y",[14,94472,94473],{},[23,94474],{"alt":25,"src":94475},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-036.png",[48,94477,94479],{"id":94478},"_1210-dot矩阵","12.10 dot()矩阵",[14,94481,94482],{},[23,94483],{"alt":25,"src":94484},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-037.png",[5119,94486,94487],{},"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":25,"searchDepth":28,"depth":28,"links":94489},[94490,94491,94492,94493,94494,94495,94496,94497,94498,94499],{"id":93852,"depth":28,"text":93853},{"id":94075,"depth":28,"text":94076},{"id":94291,"depth":28,"text":94292},{"id":94366,"depth":28,"text":94367},{"id":94414,"depth":28,"text":94415},{"id":94426,"depth":28,"text":94427},{"id":94441,"depth":28,"text":94442},{"id":94448,"depth":28,"text":94449},{"id":94463,"depth":28,"text":94464},{"id":94478,"depth":28,"text":94479},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch12",{"title":93844,"description":30},"wiki\u002F2025-08-14-numpy\u002Fch12-其他常用函数","76m9lUtNWFfwZSyqhRkq4vsOUuH9yUlcqSR0mAAIVZs",{"id":94506,"title":94507,"body":94508,"description":30,"extension":31,"meta":94861,"navigation":33,"path":94862,"seo":94863,"stem":94864,"__hash__":94865},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch13-数组排序.md","13.数组排序",{"type":7,"value":94509,"toc":94859},[94510,94513,94516,94519,94522,94525,94590,94592,94856],[10,94511,94507],{"id":94512},"_13数组排序",[14,94514,94515],{},"排序主要用到的方法是np.sort和np.argsort",[14,94517,94518],{},"其中np.sort()对数组直接排序",[14,94520,94521],{},"而np.argsort()是返回排序后的原始索引",[14,94523,94524],{},"①一维数组",[97,94526,94528],{"className":30372,"code":94527,"language":30374,"meta":25,"style":25},"#创建一维数组\na=np.array([3,12,8,23,67,123,6,10])\nnp.sort(a)#升序排序\nnp.argsort(a)#按照元素大小来索引排序\n",[103,94529,94530,94534,94574,94582],{"__ignoreMap":25},[106,94531,94532],{"class":108,"line":109},[106,94533,93099],{"class":175},[106,94535,94536,94538,94540,94542,94544,94546,94548,94550,94552,94554,94556,94558,94560,94562,94564,94566,94568,94570,94572],{"class":108,"line":28},[106,94537,355],{"class":116},[106,94539,162],{"class":112},[106,94541,93018],{"class":116},[106,94543,188],{"class":165},[106,94545,495],{"class":116},[106,94547,615],{"class":165},[106,94549,495],{"class":116},[106,94551,512],{"class":165},[106,94553,495],{"class":116},[106,94555,892],{"class":165},[106,94557,495],{"class":116},[106,94559,396],{"class":165},[106,94561,495],{"class":116},[106,94563,1010],{"class":165},[106,94565,495],{"class":116},[106,94567,461],{"class":165},[106,94569,495],{"class":116},[106,94571,563],{"class":165},[106,94573,4649],{"class":116},[106,94575,94576,94579],{"class":108,"line":1172},[106,94577,94578],{"class":116},"np.sort(a)",[106,94580,94581],{"class":175},"#升序排序\n",[106,94583,94584,94587],{"class":108,"line":1187},[106,94585,94586],{"class":116},"np.argsort(a)",[106,94588,94589],{"class":175},"#按照元素大小来索引排序\n",[14,94591,93285],{},[97,94593,94595],{"className":30372,"code":94594,"language":30374,"meta":25,"style":25},"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",[103,94596,94597,94609,94635,94640,94644,94649,94654,94659,94664,94668,94676,94680,94685,94690,94695,94700,94704,94709,94722,94726,94731,94736,94741,94746,94750,94755,94767,94771,94775,94779,94783,94787,94791,94796,94811,94816,94825,94830,94834,94838,94843,94847,94852],{"__ignoreMap":25},[106,94598,94599,94602,94604,94606],{"class":108,"line":109},[106,94600,94601],{"class":116},"np.random.seed(",[106,94603,308],{"class":165},[106,94605,546],{"class":116},[106,94607,94608],{"class":175},"#保证每次值一样\n",[106,94610,94611,94613,94615,94617,94619,94621,94623,94625,94627,94629,94631,94633],{"class":108,"line":28},[106,94612,93300],{"class":116},[106,94614,162],{"class":112},[106,94616,93108],{"class":116},[106,94618,428],{"class":165},[106,94620,495],{"class":116},[106,94622,31490],{"class":5209},[106,94624,162],{"class":112},[106,94626,117],{"class":116},[106,94628,410],{"class":165},[106,94630,495],{"class":116},[106,94632,461],{"class":165},[106,94634,30491],{"class":116},[106,94636,94637],{"class":108,"line":1172},[106,94638,94639],{"class":175},"#原数组：\n",[106,94641,94642],{"class":108,"line":1187},[106,94643,93922],{"class":221},[106,94645,94646],{"class":108,"line":1193},[106,94647,94648],{"class":221},"array([[44, 47, 64, 67, 67,  9],\n",[106,94650,94651],{"class":108,"line":1207},[106,94652,94653],{"class":221},"       [83, 21, 36, 87, 70, 88],\n",[106,94655,94656],{"class":108,"line":1213},[106,94657,94658],{"class":221},"       [88, 12, 58, 65, 39, 87],\n",[106,94660,94661],{"class":108,"line":1304},[106,94662,94663],{"class":221},"       [46, 88, 81, 37, 25, 77]], dtype=int32)\n",[106,94665,94666],{"class":108,"line":1310},[106,94667,93922],{"class":221},[106,94669,94670,94673],{"class":108,"line":1322},[106,94671,94672],{"class":116},"np.sort(aa)",[106,94674,94675],{"class":175},"#每行进行了排序\n",[106,94677,94678],{"class":108,"line":1604},[106,94679,93922],{"class":221},[106,94681,94682],{"class":108,"line":1609},[106,94683,94684],{"class":221},"array([[ 9, 44, 47, 64, 67, 67],\n",[106,94686,94687],{"class":108,"line":1615},[106,94688,94689],{"class":221},"       [21, 36, 70, 83, 87, 88],\n",[106,94691,94692],{"class":108,"line":1620},[106,94693,94694],{"class":221},"       [12, 39, 58, 65, 87, 88],\n",[106,94696,94697],{"class":108,"line":1634},[106,94698,94699],{"class":221},"       [25, 37, 46, 77, 81, 88]], dtype=int32)\n",[106,94701,94702],{"class":108,"line":1639},[106,94703,93922],{"class":221},[106,94705,94706],{"class":108,"line":1645},[106,94707,94708],{"class":175},"#axis=0时\n",[106,94710,94711,94714,94716,94718,94720],{"class":108,"line":1666},[106,94712,94713],{"class":116},"np.sort(aa,",[106,94715,47508],{"class":5209},[106,94717,162],{"class":112},[106,94719,308],{"class":165},[106,94721,123],{"class":116},[106,94723,94724],{"class":108,"line":1671},[106,94725,93922],{"class":221},[106,94727,94728],{"class":108,"line":1685},[106,94729,94730],{"class":221},"array([[44, 12, 36, 37, 25,  9],\n",[106,94732,94733],{"class":108,"line":1690},[106,94734,94735],{"class":221},"       [46, 21, 58, 65, 39, 77],\n",[106,94737,94738],{"class":108,"line":1719},[106,94739,94740],{"class":221},"       [83, 47, 64, 67, 67, 87],\n",[106,94742,94743],{"class":108,"line":1724},[106,94744,94745],{"class":221},"       [88, 88, 81, 87, 70, 88]], dtype=int32)\n",[106,94747,94748],{"class":108,"line":1741},[106,94749,93922],{"class":221},[106,94751,94752],{"class":108,"line":1746},[106,94753,94754],{"class":175},"#axis=1时,为默认值\n",[106,94756,94757,94759,94761,94763,94765],{"class":108,"line":1751},[106,94758,94713],{"class":116},[106,94760,47508],{"class":5209},[106,94762,162],{"class":112},[106,94764,334],{"class":165},[106,94766,123],{"class":116},[106,94768,94769],{"class":108,"line":1756},[106,94770,93922],{"class":221},[106,94772,94773],{"class":108,"line":1770},[106,94774,94684],{"class":221},[106,94776,94777],{"class":108,"line":1775},[106,94778,94689],{"class":221},[106,94780,94781],{"class":108,"line":2569},[106,94782,94694],{"class":221},[106,94784,94785],{"class":108,"line":2583},[106,94786,94699],{"class":221},[106,94788,94789],{"class":108,"line":2591},[106,94790,93922],{"class":221},[106,94792,94793],{"class":108,"line":2596},[106,94794,94795],{"class":175},"#按最后一列排序\n",[106,94797,94798,94800,94802,94805,94807,94809],{"class":108,"line":2602},[106,94799,380],{"class":116},[106,94801,162],{"class":112},[106,94803,94804],{"class":116},"aa[:,",[106,94806,649],{"class":112},[106,94808,334],{"class":165},[106,94810,33240],{"class":116},[106,94812,94813],{"class":108,"line":2608},[106,94814,94815],{"class":175},"#获取最后一列排好序的索引\n",[106,94817,94818,94820,94822],{"class":108,"line":2613},[106,94819,74052],{"class":116},[106,94821,162],{"class":112},[106,94823,94824],{"class":116},"np.argsort(b)\n",[106,94826,94827],{"class":108,"line":7941},[106,94828,94829],{"class":116},"aa[index]\n",[106,94831,94832],{"class":108,"line":7965},[106,94833,93922],{"class":221},[106,94835,94836],{"class":108,"line":7970},[106,94837,94648],{"class":221},[106,94839,94840],{"class":108,"line":7976},[106,94841,94842],{"class":221},"       [46, 88, 81, 37, 25, 77],\n",[106,94844,94845],{"class":108,"line":8003},[106,94846,94658],{"class":221},[106,94848,94849],{"class":108,"line":8008},[106,94850,94851],{"class":221},"       [83, 21, 36, 87, 70, 88]], dtype=int32)\n",[106,94853,94854],{"class":108,"line":8014},[106,94855,93922],{"class":221},[5119,94857,94858],{},"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":25,"searchDepth":28,"depth":28,"links":94860},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch13",{"title":94507,"description":30},"wiki\u002F2025-08-14-numpy\u002Fch13-数组排序","YRMPYd2prDU8JgTg-B-BGwJLUAaNpeoVr1nYyQDLx-E",{"id":94867,"title":94868,"body":94869,"description":30,"extension":31,"meta":94899,"navigation":33,"path":94900,"seo":94901,"stem":94902,"__hash__":94903},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch14-广播机制.md","14.广播机制",{"type":7,"value":94870,"toc":94897},[94871,94874,94877,94880,94883,94886,94889,94892],[10,94872,94868],{"id":94873},"_14广播机制",[14,94875,94876],{},"广播的规则：",[14,94878,94879],{},"1.如果两个数组维度个数不同，那么小维度的数组形状会在左边补1，",[14,94881,94882],{},"例如1和[1,2]这两个维度个数是不同的，一个是数，是个标量是0维的，另一个是一维的，第一个数形状往左补1，之后就可以进行广播了",[14,94884,94885],{},"2.如果两个数组形状在任何维度上都不匹配，数组的形状会沿着维度为1的维度扩展到匹配上另一个数组的形状",[14,94887,94888],{},"3.如果没有维度形状为1，则会引发异常",[14,94890,94891],{},"也就是只有维度或者个数为1才可以进行广播操作",[14,94893,94894],{},[23,94895],{"alt":25,"src":94896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-038.png",{"title":25,"searchDepth":28,"depth":28,"links":94898},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch14",{"title":94868,"description":30},"wiki\u002F2025-08-14-numpy\u002Fch14-广播机制","tBGxTdhgyt2-aB8OANfZ0iuefn4ogRK9zJPGTd5aepM",{"id":94905,"title":94906,"body":94907,"description":30,"extension":31,"meta":95005,"navigation":33,"path":95006,"seo":95007,"stem":95008,"__hash__":95009},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch15-比较掩码.md","15.比较掩码",{"type":7,"value":94908,"toc":95003},[94909,94912,94915,95000],[10,94910,94906],{"id":94911},"_15比较掩码",[14,94913,94914],{},"比较操作，会返回与参与运算数组形状相同的数组，其中，满足条件的为True，不满足的为False",[97,94916,94918],{"className":30372,"code":94917,"language":30374,"meta":25,"style":25},"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",[103,94919,94920,94966,94977,94991,94995],{"__ignoreMap":25},[106,94921,94922,94924,94926,94929,94931,94933,94935,94937,94939,94941,94943,94945,94947,94949,94951,94953,94955,94957,94959,94961,94963],{"class":108,"line":109},[106,94923,355],{"class":116},[106,94925,162],{"class":112},[106,94927,94928],{"class":116},"np.array([[",[106,94930,334],{"class":165},[106,94932,495],{"class":116},[106,94934,194],{"class":165},[106,94936,495],{"class":116},[106,94938,188],{"class":165},[106,94940,48024],{"class":116},[106,94942,589],{"class":165},[106,94944,495],{"class":116},[106,94946,615],{"class":165},[106,94948,495],{"class":116},[106,94950,640],{"class":165},[106,94952,48024],{"class":116},[106,94954,842],{"class":165},[106,94956,495],{"class":116},[106,94958,867],{"class":165},[106,94960,495],{"class":116},[106,94962,892],{"class":165},[106,94964,94965],{"class":116},"]])\n",[106,94967,94968,94970,94972,94974],{"class":108,"line":28},[106,94969,355],{"class":116},[106,94971,1027],{"class":112},[106,94973,817],{"class":165},[106,94975,94976],{"class":175},"#结果是一个由True,False组成的数组\n",[106,94978,94979,94982,94984,94986,94988],{"class":108,"line":1172},[106,94980,94981],{"class":116},"a[a",[106,94983,1027],{"class":112},[106,94985,817],{"class":165},[106,94987,1057],{"class":116},[106,94989,94990],{"class":175},"#小于20的元素会存到这个数组中\n",[106,94992,94993],{"class":108,"line":1187},[106,94994,93558],{"class":175},[106,94996,94997],{"class":108,"line":1193},[106,94998,94999],{"class":175},"#array([ 1,  2,  3, 11, 12, 13])\n",[5119,95001,95002],{},"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":25,"searchDepth":28,"depth":28,"links":95004},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch15",{"title":94906,"description":30},"wiki\u002F2025-08-14-numpy\u002Fch15-比较掩码","V-_h5mng53PyRw-HZ8Pqcf_eugrdn6nQafLIp3MtxIQ",{"id":95011,"title":95012,"body":95013,"description":30,"extension":31,"meta":95105,"navigation":33,"path":95106,"seo":95107,"stem":95108,"__hash__":95109},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time.md","16.魔法命令time",{"type":7,"value":95014,"toc":95103},[95015,95018,95021,95024,95027,95030,95095,95100],[10,95016,95012],{"id":95017},"_16魔法命令time",[14,95019,95020],{},"魔法命令是ipython提供特殊命令，能实现一些特殊功能，比如统计时间(time\u002Ftimeit)和占用内存(memit\u002Fmprun)等功能,魔法命令有种形式：",[14,95022,95023],{},"%:行模式",[14,95025,95026],{},"%%:单元格模式",[14,95028,95029],{},"IPython 是一个“更强大、更智能”的 Python 交互式命令行工具，比你平时在终端运行的 python 要聪明得多。",[97,95031,95033],{"className":30372,"code":95032,"language":30374,"meta":25,"style":25},"#程序执行时间\nimport time \n#获取时间\nstart=time.time()\ntime.sleep(0.4)#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n#获取时间\nend=time.time()\nend-start\n",[103,95034,95035,95040,95047,95052,95061,95074,95078,95086],{"__ignoreMap":25},[106,95036,95037],{"class":108,"line":109},[106,95038,95039],{"class":175},"#程序执行时间\n",[106,95041,95042,95044],{"class":108,"line":28},[106,95043,30386],{"class":112},[106,95045,95046],{"class":116}," time \n",[106,95048,95049],{"class":108,"line":1172},[106,95050,95051],{"class":175},"#获取时间\n",[106,95053,95054,95057,95059],{"class":108,"line":1187},[106,95055,95056],{"class":116},"start",[106,95058,162],{"class":112},[106,95060,32412],{"class":116},[106,95062,95063,95066,95069,95071],{"class":108,"line":1193},[106,95064,95065],{"class":116},"time.sleep(",[106,95067,95068],{"class":165},"0.4",[106,95070,546],{"class":116},[106,95072,95073],{"class":175},"#让程序暂停执行 0.4 秒（即 400 毫秒）再继续运行\n",[106,95075,95076],{"class":108,"line":1207},[106,95077,95051],{"class":175},[106,95079,95080,95082,95084],{"class":108,"line":1213},[106,95081,45795],{"class":116},[106,95083,162],{"class":112},[106,95085,32412],{"class":116},[106,95087,95088,95090,95092],{"class":108,"line":1304},[106,95089,45795],{"class":116},[106,95091,649],{"class":112},[106,95093,95094],{"class":116},"start\n",[14,95096,95097],{},[23,95098],{"alt":25,"src":95099},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-039.png",[5119,95101,95102],{},"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":25,"searchDepth":28,"depth":28,"links":95104},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch16-time",{"title":95012,"description":30},"wiki\u002F2025-08-14-numpy\u002Fch16-魔法命令time","sXkJphYISGOvSIO4DBYVj2ay2H8EAPXBtiKncmz3UYg",{"id":95111,"title":95112,"body":95113,"description":30,"extension":31,"meta":95148,"navigation":33,"path":95149,"seo":95150,"stem":95151,"__hash__":95152},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit.md","17.魔法命令timeit",{"type":7,"value":95114,"toc":95146},[95115,95118,95121,95124,95127,95130,95133,95136,95141],[10,95116,95112],{"id":95117},"_17魔法命令timeit",[14,95119,95120],{},"timeit可以循环执行被统计语句，得到平均执行时间，支持行模式和单元格模式",[14,95122,95123],{},"timeit命令参数，-n指定每轮测试次数，-r指定测试轮数(默认为7)",[14,95125,95126],{},"单元格模式：",[14,95128,95129],{},"第一行语句(与timeit同一行语句)为初始化语句，作用为后续代码中变量提供初始化功能",[14,95131,95132],{},"初始化语句执行次数由轮数来决定",[14,95134,95135],{},"初始化语句每轮测试只执行一次，且不参与计时。第二行至整个单元格末尾语句会执行相应次数，并参与计时",[14,95137,95138],{},[23,95139],{"alt":25,"src":95140},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-040.png",[14,95142,95143],{},[23,95144],{"alt":25,"src":95145},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-041.png",{"title":25,"searchDepth":28,"depth":28,"links":95147},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch17-timeit",{"title":95112,"description":30},"wiki\u002F2025-08-14-numpy\u002Fch17-魔法命令timeit","pW8ECg15-MLllhus9EYlvtlq7IM7eh8dhh-Da8iot-E",{"id":4,"title":5,"body":95154,"description":30,"extension":31,"meta":95168,"navigation":33,"path":34,"seo":95169,"stem":36,"__hash__":37},{"type":7,"value":95155,"toc":95166},[95156,95158,95160,95162],[10,95157,5],{"id":12},[14,95159,16],{},[14,95161,19],{},[14,95163,95164],{},[23,95165],{"alt":25,"src":26},{"title":25,"searchDepth":28,"depth":28,"links":95167},[],{},{"title":5,"description":30},{"id":95171,"title":95172,"body":95173,"description":30,"extension":31,"meta":95226,"navigation":33,"path":95227,"seo":95228,"stem":95229,"__hash__":95230},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit.md","19.魔法命令memit",{"type":7,"value":95174,"toc":95224},[95175,95178,95181,95183,95186,95189,95194,95197,95200,95203,95206,95209,95212,95215,95218,95221],[10,95176,95172],{"id":95177},"_19魔法命令memit",[14,95179,95180],{},"memit：用于分析语句内存使用情况，memit支持行模式与单元格模式。单元格模式下，初始化语句不会参与计算内存。第二行至整个单元格末尾会参与计算内存",[14,95182,24593],{},[14,95184,95185],{},"memit不是Ipython的内置，需要安装memory_profiler模块(pip install memory_profiler)",[14,95187,95188],{},"安装后，需要通过%load_ext memory_profiler载入，才能使用",[14,95190,95191],{},[23,95192],{"alt":25,"src":95193},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-043.png",[14,95195,95196],{},"补充：",[14,95198,95199],{},"Python 3.12+ 版本已经完全移除了 distutils 模块，而许多工具链（包括 IPython 的旧版本）仍依赖它",[14,95201,95202],{},"在 Python 3.10+ 版本中，distutils 库已被弃用，并在 Python 3.12 中完全移除。在加载 memory_profiler 扩展时，因为 IPython 的旧版本依赖 distutils,当前python版本太高，所以如果不升级升级 IPython 和依赖库或者降python版本的话会报错",[14,95204,95205],{},"解决方法：",[14,95207,95208],{},"1.cmd",[14,95210,95211],{},"2.依次输入以下代码：",[14,95213,95214],{},"#升级 IPython 到兼容 Python 3.12+ 的版本",[14,95216,95217],{},"pip install --upgrade ipython",[14,95219,95220],{},"#升级 memory_profiler 和 setuptools",[14,95222,95223],{},"pip install --upgrade memory_profiler setuptools",{"title":25,"searchDepth":28,"depth":28,"links":95225},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch19-memit",{"title":95172,"description":30},"wiki\u002F2025-08-14-numpy\u002Fch19-魔法命令memit","RR91kMGRr4TrWwPmp50vrP41mF4J7yHdo92EdcUVh2s",{"id":95232,"title":95233,"body":95234,"description":30,"extension":31,"meta":96880,"navigation":33,"path":96881,"seo":96882,"stem":96883,"__hash__":96884},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch2-创建数组.md","2.创建数组",{"type":7,"value":95235,"toc":96850},[95236,95239,95243,95247,95308,95311,95316,95320,95325,95330,95335,95340,95343,95348,95352,95356,95389,95392,95395,95398,95450,95453,95489,95492,95534,95538,95559,95561,95598,95600,95605,95607,95612,95616,95619,95647,95651,95655,95708,95712,95804,95808,95812,95815,95820,95824,95849,95854,95858,95861,95864,95867,95870,95873,95876,95879,95891,95895,95899,95902,95934,95937,95960,95963,95989,95992,96018,96021,96055,96058,96120,96124,96127,96131,96134,96160,96163,96166,96171,96174,96243,96245,96250,96311,96314,96325,96331,96336,96340,96343,96356,96360,96375,96377,96400,96402,96428,96431,96434,96437,96485,96487,96492,96496,96500,96527,96531,96558,96561,96566,96571,96661,96665,96723,96728,96731,96734,96776,96780,96836,96841,96844,96847],[10,95237,95233],{"id":95238},"_2创建数组",[48,95240,95242],{"id":95241},"_21-array函数创建数组","2.1 array()函数创建数组",[77,95244,95246],{"id":95245},"_221-函数语句","2.2.1 函数语句",[97,95248,95250],{"className":30372,"code":95249,"language":30374,"meta":25,"style":25},"numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)\n",[103,95251,95252],{"__ignoreMap":25},[106,95253,95254,95257,95260,95262,95264,95266,95268,95270,95273,95275,95278,95280,95283,95285,95287,95289,95292,95294,95297,95299,95302,95304,95306],{"class":108,"line":109},[106,95255,95256],{"class":116},"numpy.array(",[106,95258,95259],{"class":165},"object",[106,95261,12428],{"class":116},[106,95263,93494],{"class":5209},[106,95265,13557],{"class":112},[106,95267,38927],{"class":165},[106,95269,12428],{"class":116},[106,95271,95272],{"class":5209},"copy",[106,95274,13557],{"class":112},[106,95276,95277],{"class":165}," True",[106,95279,12428],{"class":116},[106,95281,95282],{"class":5209},"order",[106,95284,13557],{"class":112},[106,95286,38927],{"class":165},[106,95288,12428],{"class":116},[106,95290,95291],{"class":5209},"subok",[106,95293,13557],{"class":112},[106,95295,95296],{"class":165}," False",[106,95298,12428],{"class":116},[106,95300,95301],{"class":5209},"ndmin",[106,95303,13557],{"class":112},[106,95305,4085],{"class":165},[106,95307,123],{"class":116},[14,95309,95310],{},"参数：",[14,95312,95313],{},[23,95314],{"alt":25,"src":95315},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-001.png",[77,95317,95319],{"id":95318},"_222-实例","2.2.2 实例",[14,95321,95322],{},[23,95323],{"alt":25,"src":95324},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-002.png",[14,95326,95327],{},[23,95328],{"alt":25,"src":95329},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-003.png",[14,95331,95332],{},[23,95333],{"alt":25,"src":95334},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-004.png",[14,95336,95337],{},[23,95338],{"alt":25,"src":95339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-005.png",[14,95341,95342],{},"在使用admin属性指定维度时，如果是ndim=3，表示创建一个三维的数组；如果ndim=4，表示创建了一个四维的数组，上述结果就变为：",[14,95344,95345],{},[23,95346],{"alt":25,"src":95347},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-006.png",[48,95349,95351],{"id":95350},"_22-随机数创建数组","2.2 随机数创建数组",[77,95353,95355],{"id":95354},"_221-random语句","2.2.1 random语句",[97,95357,95359],{"className":30372,"code":95358,"language":30374,"meta":25,"style":25},"#random.random()\n#确定随机种子,就是每次运行结果是相同的\nnp.random.seed(0)\nnp.random.random()\n#生成一个随机的数目\n",[103,95360,95361,95366,95371,95379,95384],{"__ignoreMap":25},[106,95362,95363],{"class":108,"line":109},[106,95364,95365],{"class":175},"#random.random()\n",[106,95367,95368],{"class":108,"line":28},[106,95369,95370],{"class":175},"#确定随机种子,就是每次运行结果是相同的\n",[106,95372,95373,95375,95377],{"class":108,"line":1172},[106,95374,94601],{"class":116},[106,95376,308],{"class":165},[106,95378,123],{"class":116},[106,95380,95381],{"class":108,"line":1187},[106,95382,95383],{"class":116},"np.random.random()\n",[106,95385,95386],{"class":108,"line":1193},[106,95387,95388],{"class":175},"#生成一个随机的数目\n",[14,95390,95391],{},"使用seed()函数后就可以保证每次生成的随机数都是一样的，不会再变了",[14,95393,95394],{},"可以指定数组形状 size",[14,95396,95397],{},"①生成一维数组",[97,95399,95401],{"className":30372,"code":95400,"language":30374,"meta":25,"style":25},"#random.random(size())\nnp.random.random(size=5)\n#生成一位的五个元素\na=np.random.random(size=4)\na.shape #输出数组形状\n",[103,95402,95403,95408,95421,95426,95442],{"__ignoreMap":25},[106,95404,95405],{"class":108,"line":109},[106,95406,95407],{"class":175},"#random.random(size())\n",[106,95409,95410,95413,95415,95417,95419],{"class":108,"line":28},[106,95411,95412],{"class":116},"np.random.random(",[106,95414,31490],{"class":5209},[106,95416,162],{"class":112},[106,95418,436],{"class":165},[106,95420,123],{"class":116},[106,95422,95423],{"class":108,"line":1172},[106,95424,95425],{"class":175},"#生成一位的五个元素\n",[106,95427,95428,95430,95432,95434,95436,95438,95440],{"class":108,"line":1187},[106,95429,355],{"class":116},[106,95431,162],{"class":112},[106,95433,95412],{"class":116},[106,95435,31490],{"class":5209},[106,95437,162],{"class":112},[106,95439,410],{"class":165},[106,95441,123],{"class":116},[106,95443,95444,95447],{"class":108,"line":1193},[106,95445,95446],{"class":116},"a.shape ",[106,95448,95449],{"class":175},"#输出数组形状\n",[14,95451,95452],{},"②生成二维数组",[97,95454,95456],{"className":30372,"code":95455,"language":30374,"meta":25,"style":25},"#二维数组\naa=np.random.random(size=(4,5))\n#生成四行五列的数组\n",[103,95457,95458,95462,95484],{"__ignoreMap":25},[106,95459,95460],{"class":108,"line":109},[106,95461,93295],{"class":175},[106,95463,95464,95466,95468,95470,95472,95474,95476,95478,95480,95482],{"class":108,"line":28},[106,95465,93300],{"class":116},[106,95467,162],{"class":112},[106,95469,95412],{"class":116},[106,95471,31490],{"class":5209},[106,95473,162],{"class":112},[106,95475,117],{"class":116},[106,95477,410],{"class":165},[106,95479,495],{"class":116},[106,95481,436],{"class":165},[106,95483,30491],{"class":116},[106,95485,95486],{"class":108,"line":1172},[106,95487,95488],{"class":175},"#生成四行五列的数组\n",[14,95490,95491],{},"③生成三维数组",[97,95493,95495],{"className":30372,"code":95494,"language":30374,"meta":25,"style":25},"#三维数组\naaa=np.random.random(size=(2,3,4))\naaa.shape\n",[103,95496,95497,95502,95529],{"__ignoreMap":25},[106,95498,95499],{"class":108,"line":109},[106,95500,95501],{"class":175},"#三维数组\n",[106,95503,95504,95507,95509,95511,95513,95515,95517,95519,95521,95523,95525,95527],{"class":108,"line":28},[106,95505,95506],{"class":116},"aaa",[106,95508,162],{"class":112},[106,95510,95412],{"class":116},[106,95512,31490],{"class":5209},[106,95514,162],{"class":112},[106,95516,117],{"class":116},[106,95518,194],{"class":165},[106,95520,495],{"class":116},[106,95522,188],{"class":165},[106,95524,495],{"class":116},[106,95526,410],{"class":165},[106,95528,30491],{"class":116},[106,95530,95531],{"class":108,"line":1172},[106,95532,95533],{"class":116},"aaa.shape\n",[77,95535,95537],{"id":95536},"_222-randint语句","2.2.2 randint语句",[97,95539,95541],{"className":30372,"code":95540,"language":30374,"meta":25,"style":25},"#生成随机的整数 random.randint(low,high,size)\nnp.random.randint(5) #0~5中的随机一个数\n",[103,95542,95543,95548],{"__ignoreMap":25},[106,95544,95545],{"class":108,"line":109},[106,95546,95547],{"class":175},"#生成随机的整数 random.randint(low,high,size)\n",[106,95549,95550,95552,95554,95556],{"class":108,"line":28},[106,95551,93108],{"class":116},[106,95553,436],{"class":165},[106,95555,13707],{"class":116},[106,95557,95558],{"class":175},"#0~5中的随机一个数\n",[14,95560,95397],{},[97,95562,95564],{"className":30372,"code":95563,"language":30374,"meta":25,"style":25},"#一维\nnp.random.randint(1,11,size=(10))\n#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[103,95565,95566,95571,95593],{"__ignoreMap":25},[106,95567,95568],{"class":108,"line":109},[106,95569,95570],{"class":175},"#一维\n",[106,95572,95573,95575,95577,95579,95581,95583,95585,95587,95589,95591],{"class":108,"line":28},[106,95574,93108],{"class":116},[106,95576,334],{"class":165},[106,95578,495],{"class":116},[106,95580,589],{"class":165},[106,95582,495],{"class":116},[106,95584,31490],{"class":5209},[106,95586,162],{"class":112},[106,95588,117],{"class":116},[106,95590,563],{"class":165},[106,95592,30491],{"class":116},[106,95594,95595],{"class":108,"line":1172},[106,95596,95597],{"class":175},"#运行结果：array([4, 5, 5, 9, 5, 4, 8, 6, 6, 1], dtype=int32)\n",[14,95599,95452],{},[14,95601,95602],{},[23,95603],{"alt":25,"src":95604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-007.png",[14,95606,95491],{},[14,95608,95609],{},[23,95610],{"alt":25,"src":95611},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-008.png",[77,95613,95615],{"id":95614},"_222-rand语句","2.2.2 rand语句",[14,95617,95618],{},"Numpy 的函数，生成均匀分布的随机数（0-1）",[97,95620,95622],{"className":30372,"code":95621,"language":30374,"meta":25,"style":25},"np.random.rand(100,10)\n#第一个参数100：行数，表示有100个样本\n#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[103,95623,95624,95637,95642],{"__ignoreMap":25},[106,95625,95626,95629,95631,95633,95635],{"class":108,"line":109},[106,95627,95628],{"class":116},"np.random.rand(",[106,95630,428],{"class":165},[106,95632,495],{"class":116},[106,95634,563],{"class":165},[106,95636,123],{"class":116},[106,95638,95639],{"class":108,"line":28},[106,95640,95641],{"class":175},"#第一个参数100：行数，表示有100个样本\n",[106,95643,95644],{"class":108,"line":1172},[106,95645,95646],{"class":175},"#第二个参数10：列数，表示每个样本有10个值（例如分类标签）\n",[48,95648,95650],{"id":95649},"_23-arange创建数组","2.3 arange()创建数组",[77,95652,95654],{"id":95653},"_231-函数语句","2.3.1 函数语句",[97,95656,95658],{"className":30372,"code":95657,"language":30374,"meta":25,"style":25},"numpy.arange([start,] stop[, step], dtype=None)\n#参数\n\"\"\"\nstart:起始值，可选，默认从 0 开始。\nstop:结束值（不包含该值）。\nstep:步长，可选，默认是 1。可以为浮点数。\ndtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n\"\"\"\n",[103,95659,95660,95674,95679,95684,95689,95694,95699,95704],{"__ignoreMap":25},[106,95661,95662,95665,95667,95669,95672],{"class":108,"line":109},[106,95663,95664],{"class":116},"numpy.arange([start,] stop[, step], ",[106,95666,93494],{"class":5209},[106,95668,162],{"class":112},[106,95670,95671],{"class":165},"None",[106,95673,123],{"class":116},[106,95675,95676],{"class":108,"line":28},[106,95677,95678],{"class":175},"#参数\n",[106,95680,95681],{"class":108,"line":1172},[106,95682,95683],{"class":221},"\"\"\"\n",[106,95685,95686],{"class":108,"line":1187},[106,95687,95688],{"class":221},"start:起始值，可选，默认从 0 开始。\n",[106,95690,95691],{"class":108,"line":1193},[106,95692,95693],{"class":221},"stop:结束值（不包含该值）。\n",[106,95695,95696],{"class":108,"line":1207},[106,95697,95698],{"class":221},"step:步长，可选，默认是 1。可以为浮点数。\n",[106,95700,95701],{"class":108,"line":1213},[106,95702,95703],{"class":221},"dtype:指定返回数组的数据类型（如 int32、float64 等），默认自动推断。\n",[106,95705,95706],{"class":108,"line":1304},[106,95707,95683],{"class":221},[77,95709,95711],{"id":95710},"_232-实例","2.3.2 实例",[97,95713,95715],{"className":30372,"code":95714,"language":30374,"meta":25,"style":25},"#创建一维数组\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",[103,95716,95717,95721,95745,95750,95755,95759,95782,95786,95790,95795,95800],{"__ignoreMap":25},[106,95718,95719],{"class":108,"line":109},[106,95720,93099],{"class":175},[106,95722,95723,95725,95727,95729,95731,95733,95735,95737,95739,95741,95743],{"class":108,"line":28},[106,95724,92996],{"class":116},[106,95726,334],{"class":165},[106,95728,495],{"class":116},[106,95730,842],{"class":165},[106,95732,495],{"class":116},[106,95734,334],{"class":165},[106,95736,495],{"class":116},[106,95738,93494],{"class":5209},[106,95740,162],{"class":112},[106,95742,120],{"class":165},[106,95744,123],{"class":116},[106,95746,95747],{"class":108,"line":1172},[106,95748,95749],{"class":175},"#输出结果：\n",[106,95751,95752],{"class":108,"line":1187},[106,95753,95754],{"class":175},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,18, 19, 20])\n",[106,95756,95757],{"class":108,"line":1193},[106,95758,93941],{"class":175},[106,95760,95761,95764,95766,95768,95770,95773,95775,95777,95779],{"class":108,"line":1207},[106,95762,95763],{"class":116},"np.array([np.arange(",[106,95765,334],{"class":165},[106,95767,495],{"class":116},[106,95769,410],{"class":165},[106,95771,95772],{"class":116},"),np.arange(",[106,95774,410],{"class":165},[106,95776,495],{"class":116},[106,95778,486],{"class":165},[106,95780,95781],{"class":116},")])\n",[106,95783,95784],{"class":108,"line":1213},[106,95785,93558],{"class":175},[106,95787,95788],{"class":108,"line":1304},[106,95789,95683],{"class":221},[106,95791,95792],{"class":108,"line":1310},[106,95793,95794],{"class":221},"array([[1, 2, 3],\n",[106,95796,95797],{"class":108,"line":1322},[106,95798,95799],{"class":221},"       [4, 5, 6]])\n",[106,95801,95802],{"class":108,"line":1604},[106,95803,95683],{"class":221},[48,95805,95807],{"id":95806},"_24-生态分布","2.4 生态分布",[77,95809,95811],{"id":95810},"_241-标准正态分布","2.4.1 标准正态分布",[14,95813,95814],{},"randn()函数返回一个或一组数据，具有标准正态分布（期望为0，方差为1）",[14,95816,95817],{},[23,95818],{"alt":25,"src":95819},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-009.png",[77,95821,95823],{"id":95822},"_242-常规正态分布","2.4.2 常规正态分布",[97,95825,95827],{"className":30372,"code":95826,"language":30374,"meta":25,"style":25},"random.normal(loc,scale,size)也可以生成正态分布\n#loc:期望\n#scale:方差\n#size:用于确定是几维的数列\n",[103,95828,95829,95834,95839,95844],{"__ignoreMap":25},[106,95830,95831],{"class":108,"line":109},[106,95832,95833],{"class":116},"random.normal(loc,scale,size)也可以生成正态分布\n",[106,95835,95836],{"class":108,"line":28},[106,95837,95838],{"class":175},"#loc:期望\n",[106,95840,95841],{"class":108,"line":1172},[106,95842,95843],{"class":175},"#scale:方差\n",[106,95845,95846],{"class":108,"line":1187},[106,95847,95848],{"class":175},"#size:用于确定是几维的数列\n",[14,95850,95851],{},[23,95852],{"alt":25,"src":95853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-010.png",[48,95855,95857],{"id":95856},"_25-ndarry属性数组属性","2.5 ndarry属性（数组属性）",[14,95859,95860],{},"ndim:秩，维度个数",[14,95862,95863],{},"size:数组元素的个数",[14,95865,95866],{},"shape:数组的形状",[14,95868,95869],{},"dtype:数组元素的类型",[14,95871,95872],{},"itemsize:每个元素的大小，以字节为单位，一个字节8位 (结果其实就是数组的元素类型结果除8)",[14,95874,95875],{},"他们都是属性，通过数组.属性的形式来确定",[14,95877,95878],{},"如果需要输出多个可以通过以下方式：",[97,95880,95882],{"className":30372,"code":95881,"language":30374,"meta":25,"style":25},"print(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[103,95883,95884],{"__ignoreMap":25},[106,95885,95886,95888],{"class":108,"line":109},[106,95887,30409],{"class":165},[106,95889,95890],{"class":116},"(a.dtype,aa.dtype,aaa.dtype,aaa.itemsize)\n",[48,95892,95894],{"id":95893},"_26-其他方式创建数组","2.6 其他方式创建数组",[77,95896,95898],{"id":95897},"_261-zeros创建数组","2.6.1 zeros()创建数组",[14,95900,95901],{},"①创建一维数组",[97,95903,95905],{"className":30372,"code":95904,"language":30374,"meta":25,"style":25},"np.zeros(10)\n\"\"\"\n输出结果：\narray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n\"\"\"\n",[103,95906,95907,95916,95920,95925,95930],{"__ignoreMap":25},[106,95908,95909,95912,95914],{"class":108,"line":109},[106,95910,95911],{"class":116},"np.zeros(",[106,95913,563],{"class":165},[106,95915,123],{"class":116},[106,95917,95918],{"class":108,"line":28},[106,95919,95683],{"class":221},[106,95921,95922],{"class":108,"line":1172},[106,95923,95924],{"class":221},"输出结果：\n",[106,95926,95927],{"class":108,"line":1187},[106,95928,95929],{"class":221},"array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])\n",[106,95931,95932],{"class":108,"line":1193},[106,95933,95683],{"class":221},[14,95935,95936],{},"上方代码等价于：",[97,95938,95940],{"className":30372,"code":95939,"language":30374,"meta":25,"style":25},"np.zeros(shape=(10))#创建10个元素的0数组\n",[103,95941,95942],{"__ignoreMap":25},[106,95943,95944,95946,95949,95951,95953,95955,95957],{"class":108,"line":109},[106,95945,95911],{"class":116},[106,95947,95948],{"class":5209},"shape",[106,95950,162],{"class":112},[106,95952,117],{"class":116},[106,95954,563],{"class":165},[106,95956,82765],{"class":116},[106,95958,95959],{"class":175},"#创建10个元素的0数组\n",[14,95961,95962],{},"也可以指定类型",[97,95964,95966],{"className":30372,"code":95965,"language":30374,"meta":25,"style":25},"#指定类型\nnp.zeros(5,dtype=int)\n",[103,95967,95968,95973],{"__ignoreMap":25},[106,95969,95970],{"class":108,"line":109},[106,95971,95972],{"class":175},"#指定类型\n",[106,95974,95975,95977,95979,95981,95983,95985,95987],{"class":108,"line":28},[106,95976,95911],{"class":116},[106,95978,436],{"class":165},[106,95980,495],{"class":116},[106,95982,93494],{"class":5209},[106,95984,162],{"class":112},[106,95986,120],{"class":165},[106,95988,123],{"class":116},[14,95990,95991],{},"②创建二维数组",[97,95993,95995],{"className":30372,"code":95994,"language":30374,"meta":25,"style":25},"np.zeros((3,4),dtype=int)\n",[103,95996,95997],{"__ignoreMap":25},[106,95998,95999,96002,96004,96006,96008,96010,96012,96014,96016],{"class":108,"line":109},[106,96000,96001],{"class":116},"np.zeros((",[106,96003,188],{"class":165},[106,96005,495],{"class":116},[106,96007,410],{"class":165},[106,96009,42250],{"class":116},[106,96011,93494],{"class":5209},[106,96013,162],{"class":112},[106,96015,120],{"class":165},[106,96017,123],{"class":116},[14,96019,96020],{},"③创建三维数组",[97,96022,96024],{"className":30372,"code":96023,"language":30374,"meta":25,"style":25},"#创建三维数组\nnp.zeros((3,4,5),dtype=int)\n",[103,96025,96026,96031],{"__ignoreMap":25},[106,96027,96028],{"class":108,"line":109},[106,96029,96030],{"class":175},"#创建三维数组\n",[106,96032,96033,96035,96037,96039,96041,96043,96045,96047,96049,96051,96053],{"class":108,"line":28},[106,96034,96001],{"class":116},[106,96036,188],{"class":165},[106,96038,495],{"class":116},[106,96040,410],{"class":165},[106,96042,495],{"class":116},[106,96044,436],{"class":165},[106,96046,42250],{"class":116},[106,96048,93494],{"class":5209},[106,96050,162],{"class":112},[106,96052,120],{"class":165},[106,96054,123],{"class":116},[14,96056,96057],{},"④zeros_like:根据传入的数组形状创建全为0的数组",[97,96059,96061],{"className":30372,"code":96060,"language":30374,"meta":25,"style":25},"#使用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",[103,96062,96063,96068,96083,96088,96093,96115],{"__ignoreMap":25},[106,96064,96065],{"class":108,"line":109},[106,96066,96067],{"class":175},"#使用zeros_like将创建的一维数组变成全0的数组\n",[106,96069,96070,96072,96074,96076,96078,96080],{"class":108,"line":28},[106,96071,355],{"class":116},[106,96073,162],{"class":112},[106,96075,92996],{"class":116},[106,96077,410],{"class":165},[106,96079,546],{"class":116},[106,96081,96082],{"class":175},"#这个得到的结果：一维数组0，1，2，3\n",[106,96084,96085],{"class":108,"line":1172},[106,96086,96087],{"class":116},"np.zeros_like(a)\n",[106,96089,96090],{"class":108,"line":1187},[106,96091,96092],{"class":175},"#使用zeros_like将创建的二维数组变成全0的数组\n",[106,96094,96095,96097,96099,96101,96103,96105,96107,96109,96111,96113],{"class":108,"line":1193},[106,96096,93300],{"class":116},[106,96098,162],{"class":112},[106,96100,95412],{"class":116},[106,96102,31490],{"class":5209},[106,96104,162],{"class":112},[106,96106,117],{"class":116},[106,96108,410],{"class":165},[106,96110,495],{"class":116},[106,96112,436],{"class":165},[106,96114,30491],{"class":116},[106,96116,96117],{"class":108,"line":1207},[106,96118,96119],{"class":116},"np.zeros_like(aa)\n",[77,96121,96123],{"id":96122},"_262-ones创建数组","2.6.2 ones()创建数组",[14,96125,96126],{},"与zeros的用法一模一样，两者如果不指定元素类型的话，都默认为浮点型",[77,96128,96130],{"id":96129},"_263-empty创建数组","2.6.3 empty()创建数组",[14,96132,96133],{},"①empty()用法",[97,96135,96137],{"className":30372,"code":96136,"language":30374,"meta":25,"style":25},"numpy.empty(shape,dtype=float,order='c')\n",[103,96138,96139],{"__ignoreMap":25},[106,96140,96141,96144,96146,96148,96150,96152,96154,96156,96158],{"class":108,"line":109},[106,96142,96143],{"class":116},"numpy.empty(shape,",[106,96145,93494],{"class":5209},[106,96147,162],{"class":112},[106,96149,156],{"class":165},[106,96151,495],{"class":116},[106,96153,95282],{"class":5209},[106,96155,162],{"class":112},[106,96157,76022],{"class":221},[106,96159,123],{"class":116},[14,96161,96162],{},"创建的一个指定形状(shape)、数据类型(dtype)且未初始化的数组，里边的元素的值是之前内存的值",[14,96164,96165],{},"order:有\"C\"和\"F\"两个选项,分别代表，行优先和列优先，在计算机内存中的存储元素的顺序。",[14,96167,96168],{},[23,96169],{"alt":25,"src":96170},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-011.png",[14,96172,96173],{},"②empty()用法",[97,96175,96177],{"className":30372,"code":96176,"language":30374,"meta":25,"style":25},"y=np.empty(10,dtype=int)\nx=np.arange(5)\nnp.add(2,x,out=y[:5])\n#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\ny\n",[103,96178,96179,96200,96212,96233,96238],{"__ignoreMap":25},[106,96180,96181,96183,96185,96188,96190,96192,96194,96196,96198],{"class":108,"line":109},[106,96182,962],{"class":116},[106,96184,162],{"class":112},[106,96186,96187],{"class":116},"np.empty(",[106,96189,563],{"class":165},[106,96191,495],{"class":116},[106,96193,93494],{"class":5209},[106,96195,162],{"class":112},[106,96197,120],{"class":165},[106,96199,123],{"class":116},[106,96201,96202,96204,96206,96208,96210],{"class":108,"line":28},[106,96203,937],{"class":116},[106,96205,162],{"class":112},[106,96207,92996],{"class":116},[106,96209,436],{"class":165},[106,96211,123],{"class":116},[106,96213,96214,96217,96219,96222,96224,96226,96229,96231],{"class":108,"line":1172},[106,96215,96216],{"class":116},"np.add(",[106,96218,194],{"class":165},[106,96220,96221],{"class":116},",x,",[106,96223,93048],{"class":5209},[106,96225,162],{"class":112},[106,96227,96228],{"class":116},"y[:",[106,96230,436],{"class":165},[106,96232,4649],{"class":116},[106,96234,96235],{"class":108,"line":1187},[106,96236,96237],{"class":175},"#指的是x数列中的每个元素都加2，然后再out存到y中，是存放到的是前五个\n",[106,96239,96240],{"class":108,"line":1193},[106,96241,96242],{"class":116},"y\n",[14,96244,11507],{},[14,96246,96247],{},[23,96248],{"alt":25,"src":96249},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-012.png",[97,96251,96253],{"className":30372,"code":96252,"language":30374,"meta":25,"style":25},"x=np.arange(1,6)\ny=np.empty(5,dtype=int)\nnp.add(x,2,out=y)\n#将数列x中的每个元素都加2，然后放到y数列中去\n",[103,96254,96255,96271,96291,96306],{"__ignoreMap":25},[106,96256,96257,96259,96261,96263,96265,96267,96269],{"class":108,"line":109},[106,96258,937],{"class":116},[106,96260,162],{"class":112},[106,96262,92996],{"class":116},[106,96264,334],{"class":165},[106,96266,495],{"class":116},[106,96268,461],{"class":165},[106,96270,123],{"class":116},[106,96272,96273,96275,96277,96279,96281,96283,96285,96287,96289],{"class":108,"line":28},[106,96274,962],{"class":116},[106,96276,162],{"class":112},[106,96278,96187],{"class":116},[106,96280,436],{"class":165},[106,96282,495],{"class":116},[106,96284,93494],{"class":5209},[106,96286,162],{"class":112},[106,96288,120],{"class":165},[106,96290,123],{"class":116},[106,96292,96293,96296,96298,96300,96302,96304],{"class":108,"line":1172},[106,96294,96295],{"class":116},"np.add(x,",[106,96297,194],{"class":165},[106,96299,495],{"class":116},[106,96301,93048],{"class":5209},[106,96303,162],{"class":112},[106,96305,93443],{"class":116},[106,96307,96308],{"class":108,"line":1187},[106,96309,96310],{"class":175},"#将数列x中的每个元素都加2，然后放到y数列中去\n",[14,96312,96313],{},"③empty_like()",[14,96315,96316],{},[266,96317,96318,96319,96324],{},"创建一个",[266,96320,96321],{},[266,96322,96323],{},"与给定数组形状和数据类型相同","，但内容未初始化的新数组。",[14,96326,96327,96330],{},[103,96328,96329],{},"np.empty_like()","不会清空内存中的原数据，它只是分配一块与原数组相同大小和类型的内存区域。",[14,96332,96333],{},[23,96334],{"alt":25,"src":96335},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-013.png",[77,96337,96339],{"id":96338},"_264-用法","2.6.4 ？？用法",[14,96341,96342],{},"当想查看一个函数的参数时，可以通过？？来实现",[97,96344,96346],{"className":30372,"code":96345,"language":30374,"meta":25,"style":25},"np.full??\n",[103,96347,96348],{"__ignoreMap":25},[106,96349,96350,96353],{"class":108,"line":109},[106,96351,96352],{"class":116},"np.full",[106,96354,96355],{"class":77397},"??\n",[77,96357,96359],{"id":96358},"_265-full创建数组","2.6.5 full()创建数组",[97,96361,96363],{"className":30372,"code":96362,"language":30374,"meta":25,"style":25},"full(shape,fill_value)\n创建全为某个指定值的数组\n",[103,96364,96365,96370],{"__ignoreMap":25},[106,96366,96367],{"class":108,"line":109},[106,96368,96369],{"class":116},"full(shape,fill_value)\n",[106,96371,96372],{"class":108,"line":28},[106,96373,96374],{"class":116},"创建全为某个指定值的数组\n",[14,96376,94524],{},[97,96378,96380],{"className":30372,"code":96379,"language":30374,"meta":25,"style":25},"#创建一个一维数组,以20进行填充\nnp.full(10,20)\n",[103,96381,96382,96387],{"__ignoreMap":25},[106,96383,96384],{"class":108,"line":109},[106,96385,96386],{"class":175},"#创建一个一维数组,以20进行填充\n",[106,96388,96389,96392,96394,96396,96398],{"class":108,"line":28},[106,96390,96391],{"class":116},"np.full(",[106,96393,563],{"class":165},[106,96395,495],{"class":116},[106,96397,817],{"class":165},[106,96399,123],{"class":116},[14,96401,93285],{},[97,96403,96405],{"className":30372,"code":96404,"language":30374,"meta":25,"style":25},"#创建二维数组\nnp.full((3,5),11)\n",[103,96406,96407,96411],{"__ignoreMap":25},[106,96408,96409],{"class":108,"line":109},[106,96410,93941],{"class":175},[106,96412,96413,96416,96418,96420,96422,96424,96426],{"class":108,"line":28},[106,96414,96415],{"class":116},"np.full((",[106,96417,188],{"class":165},[106,96419,495],{"class":116},[106,96421,436],{"class":165},[106,96423,42250],{"class":116},[106,96425,589],{"class":165},[106,96427,123],{"class":116},[14,96429,96430],{},"③full_like用法",[14,96432,96433],{},"跟上边的zeros_like()和ones_like()的用法一模一样",[14,96435,96436],{},"这里是指定填充而已",[97,96438,96440],{"className":30372,"code":96439,"language":30374,"meta":25,"style":25},"#创建一个指定形状数组\na=np.arange(1,37).reshape(4,9)\n#进行指定填充\nnp.full_like(a,10)\n",[103,96441,96442,96447,96471,96476],{"__ignoreMap":25},[106,96443,96444],{"class":108,"line":109},[106,96445,96446],{"class":175},"#创建一个指定形状数组\n",[106,96448,96449,96451,96453,96455,96457,96459,96461,96463,96465,96467,96469],{"class":108,"line":28},[106,96450,355],{"class":116},[106,96452,162],{"class":112},[106,96454,92996],{"class":116},[106,96456,334],{"class":165},[106,96458,495],{"class":116},[106,96460,442],{"class":165},[106,96462,93001],{"class":116},[106,96464,410],{"class":165},[106,96466,495],{"class":116},[106,96468,537],{"class":165},[106,96470,123],{"class":116},[106,96472,96473],{"class":108,"line":1172},[106,96474,96475],{"class":175},"#进行指定填充\n",[106,96477,96478,96481,96483],{"class":108,"line":1187},[106,96479,96480],{"class":116},"np.full_like(a,",[106,96482,563],{"class":165},[106,96484,123],{"class":116},[14,96486,11507],{},[14,96488,96489],{},[23,96490],{"alt":25,"src":96491},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-014.png",[77,96493,96495],{"id":96494},"_266-创建单位矩阵","2.6.6 创建单位矩阵",[21991,96497,96499],{"id":96498},"_2661-法1eye函数","2.6.6.1 法1：eye()函数",[97,96501,96503],{"className":30372,"code":96502,"language":30374,"meta":25,"style":25},"np.eye(4,dtype=int)\n#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[103,96504,96505,96522],{"__ignoreMap":25},[106,96506,96507,96510,96512,96514,96516,96518,96520],{"class":108,"line":109},[106,96508,96509],{"class":116},"np.eye(",[106,96511,410],{"class":165},[106,96513,495],{"class":116},[106,96515,93494],{"class":5209},[106,96517,162],{"class":112},[106,96519,120],{"class":165},[106,96521,123],{"class":116},[106,96523,96524],{"class":108,"line":28},[106,96525,96526],{"class":175},"#四行四列的单位矩阵，是二维的，并且里边的元素全为整型\n",[21991,96528,96530],{"id":96529},"_2662-法2identity","2.6.6.2 法2：identity()",[97,96532,96534],{"className":30372,"code":96533,"language":30374,"meta":25,"style":25},"#identity()\nnp.identity(5,dtype=int)\n",[103,96535,96536,96541],{"__ignoreMap":25},[106,96537,96538],{"class":108,"line":109},[106,96539,96540],{"class":175},"#identity()\n",[106,96542,96543,96546,96548,96550,96552,96554,96556],{"class":108,"line":28},[106,96544,96545],{"class":116},"np.identity(",[106,96547,436],{"class":165},[106,96549,495],{"class":116},[106,96551,93494],{"class":5209},[106,96553,162],{"class":112},[106,96555,120],{"class":165},[106,96557,123],{"class":116},[14,96559,96560],{},"两个函数是有区别的",[14,96562,96563],{},[23,96564],{"alt":25,"src":96565},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-015.png",[14,96567,96568],{},[23,96569],{"alt":25,"src":96570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-016.png",[97,96572,96574],{"className":30372,"code":96573,"language":30374,"meta":25,"style":25},"# 创建一个 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",[103,96575,96576,96581,96593,96598,96603,96608,96613,96617,96622,96642,96646,96651,96656],{"__ignoreMap":25},[106,96577,96578],{"class":108,"line":109},[106,96579,96580],{"class":175},"# 创建一个 3 行 4 列的矩阵，对角线在第 0 条（默认）\n",[106,96582,96583,96585,96587,96589,96591],{"class":108,"line":28},[106,96584,96509],{"class":116},[106,96586,188],{"class":165},[106,96588,12428],{"class":116},[106,96590,410],{"class":165},[106,96592,123],{"class":116},[106,96594,96595],{"class":108,"line":1172},[106,96596,96597],{"class":175},"# 输出:\n",[106,96599,96600],{"class":108,"line":1187},[106,96601,96602],{"class":175},"# [[1. 0. 0. 0.]\n",[106,96604,96605],{"class":108,"line":1193},[106,96606,96607],{"class":175},"#  [0. 1. 0. 0.]\n",[106,96609,96610],{"class":108,"line":1207},[106,96611,96612],{"class":175},"#  [0. 0. 1. 0.]]\n",[106,96614,96615],{"class":108,"line":1213},[106,96616,2392],{"emptyLinePlaceholder":33},[106,96618,96619],{"class":108,"line":1304},[106,96620,96621],{"class":175},"# 对角线向上偏移1\n",[106,96623,96624,96626,96628,96630,96632,96634,96636,96638,96640],{"class":108,"line":1310},[106,96625,96509],{"class":116},[106,96627,188],{"class":165},[106,96629,12428],{"class":116},[106,96631,410],{"class":165},[106,96633,12428],{"class":116},[106,96635,610],{"class":5209},[106,96637,162],{"class":112},[106,96639,334],{"class":165},[106,96641,123],{"class":116},[106,96643,96644],{"class":108,"line":1322},[106,96645,96597],{"class":175},[106,96647,96648],{"class":108,"line":1604},[106,96649,96650],{"class":175},"# [[0. 1. 0. 0.]\n",[106,96652,96653],{"class":108,"line":1609},[106,96654,96655],{"class":175},"#  [0. 0. 1. 0.]\n",[106,96657,96658],{"class":108,"line":1615},[106,96659,96660],{"class":175},"#  [0. 0. 0. 1.]]\n",[77,96662,96664],{"id":96663},"_267-linspace创建等差数列","2.6.7 linspace创建等差数列",[97,96666,96668],{"className":30372,"code":96667,"language":30374,"meta":25,"style":25},"#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",[103,96669,96670,96675,96679,96684,96689,96694,96699,96704,96709,96714,96719],{"__ignoreMap":25},[106,96671,96672],{"class":108,"line":109},[106,96673,96674],{"class":175},"#linspace函数用于创建一个一维数组，数组是一个等差数列构成的，格式如下：\n",[106,96676,96677],{"class":108,"line":28},[106,96678,95683],{"class":221},[106,96680,96681],{"class":108,"line":1172},[106,96682,96683],{"class":221},"np.linspace(start,|stop,num=50,endpoint=True,retstep=False,dtype=None)\n",[106,96685,96686],{"class":108,"line":1187},[106,96687,96688],{"class":221},"参数介绍：\n",[106,96690,96691],{"class":108,"line":1193},[106,96692,96693],{"class":221},"start：序列的起始值\n",[106,96695,96696],{"class":108,"line":1207},[106,96697,96698],{"class":221},"stop:序列的终止值，如果endpoint为True，该值包含数列中\n",[106,96700,96701],{"class":108,"line":1213},[106,96702,96703],{"class":221},"num：要生长的等步长的样本数量，默认为50\n",[106,96705,96706],{"class":108,"line":1304},[106,96707,96708],{"class":221},"endpoint：该值为True时，数列中包含stop值，反之不包含，默认是True\n",[106,96710,96711],{"class":108,"line":1310},[106,96712,96713],{"class":221},"retstep：如果为True时，生长的数组中会显示间距，反之不显示\n",[106,96715,96716],{"class":108,"line":1322},[106,96717,96718],{"class":221},"dtype：ndarry的数据类型\n",[106,96720,96721],{"class":108,"line":1604},[106,96722,95683],{"class":221},[14,96724,96725],{},[23,96726],{"alt":25,"src":96727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-017.png",[14,96729,96730],{},"这里num=是可以省略的",[14,96732,96733],{},"也就是下方两行代码结果是一模一样的",[97,96735,96737],{"className":30372,"code":96736,"language":30374,"meta":25,"style":25},"np.linspace(1,5,5)\nnp.linspace(1,5,num=5)\n",[103,96738,96739,96756],{"__ignoreMap":25},[106,96740,96741,96744,96746,96748,96750,96752,96754],{"class":108,"line":109},[106,96742,96743],{"class":116},"np.linspace(",[106,96745,334],{"class":165},[106,96747,495],{"class":116},[106,96749,436],{"class":165},[106,96751,495],{"class":116},[106,96753,436],{"class":165},[106,96755,123],{"class":116},[106,96757,96758,96760,96762,96764,96766,96768,96770,96772,96774],{"class":108,"line":28},[106,96759,96743],{"class":116},[106,96761,334],{"class":165},[106,96763,495],{"class":116},[106,96765,436],{"class":165},[106,96767,495],{"class":116},[106,96769,1657],{"class":5209},[106,96771,162],{"class":112},[106,96773,436],{"class":165},[106,96775,123],{"class":116},[77,96777,96779],{"id":96778},"_268-logspace创建等比数列","2.6.8 logspace创建等比数列",[97,96781,96783],{"className":30372,"code":96782,"language":30374,"meta":25,"style":25},"#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",[103,96784,96785,96790,96794,96799,96804,96809,96814,96818,96823,96828,96832],{"__ignoreMap":25},[106,96786,96787],{"class":108,"line":109},[106,96788,96789],{"class":175},"#logspace函数用于创建一个等比数列，格式如下：\n",[106,96791,96792],{"class":108,"line":28},[106,96793,95683],{"class":221},[106,96795,96796],{"class":108,"line":1172},[106,96797,96798],{"class":221},"np.logspace(start,stop,num=50,endpoint=True,base=10.0,dtype=None)\n",[106,96800,96801],{"class":108,"line":1187},[106,96802,96803],{"class":221},"参数为：\n",[106,96805,96806],{"class":108,"line":1193},[106,96807,96808],{"class":221},"start:序列的起始位置为：base**start\n",[106,96810,96811],{"class":108,"line":1207},[106,96812,96813],{"class":221},"stop：序列的终止值为：base**stop。如果endpoint为True，该值包含于数列\n",[106,96815,96816],{"class":108,"line":1213},[106,96817,96703],{"class":221},[106,96819,96820],{"class":108,"line":1304},[106,96821,96822],{"class":221},"endpoint：是否包含 stop 这个值，默认是 True\n",[106,96824,96825],{"class":108,"line":1310},[106,96826,96827],{"class":221},"base：对数的底数，默认是 10（常见对数）\n",[106,96829,96830],{"class":108,"line":1322},[106,96831,96718],{"class":221},[106,96833,96834],{"class":108,"line":1604},[106,96835,95683],{"class":221},[14,96837,96838],{},[23,96839],{"alt":25,"src":96840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-018.png",[14,96842,96843],{},"logspace()函数中的num参数也是可以不写num=的",[14,96845,96846],{},"endpoint是不可以省略的",[5119,96848,96849],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}",{"title":25,"searchDepth":28,"depth":28,"links":96851},[96852,96856,96861,96865,96869,96870],{"id":95241,"depth":28,"text":95242,"children":96853},[96854,96855],{"id":95245,"depth":1172,"text":95246},{"id":95318,"depth":1172,"text":95319},{"id":95350,"depth":28,"text":95351,"children":96857},[96858,96859,96860],{"id":95354,"depth":1172,"text":95355},{"id":95536,"depth":1172,"text":95537},{"id":95614,"depth":1172,"text":95615},{"id":95649,"depth":28,"text":95650,"children":96862},[96863,96864],{"id":95653,"depth":1172,"text":95654},{"id":95710,"depth":1172,"text":95711},{"id":95806,"depth":28,"text":95807,"children":96866},[96867,96868],{"id":95810,"depth":1172,"text":95811},{"id":95822,"depth":1172,"text":95823},{"id":95856,"depth":28,"text":95857},{"id":95893,"depth":28,"text":95894,"children":96871},[96872,96873,96874,96875,96876,96877,96878,96879],{"id":95897,"depth":1172,"text":95898},{"id":96122,"depth":1172,"text":96123},{"id":96129,"depth":1172,"text":96130},{"id":96338,"depth":1172,"text":96339},{"id":96358,"depth":1172,"text":96359},{"id":96494,"depth":1172,"text":96495},{"id":96663,"depth":1172,"text":96664},{"id":96778,"depth":1172,"text":96779},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch2",{"title":95233,"description":30},"wiki\u002F2025-08-14-numpy\u002Fch2-创建数组","SNWxvUgIzXm5wtETKP1GjU_wdSkG_XaKQiBCRZRvxfw",{"id":96886,"title":96887,"body":96888,"description":30,"extension":31,"meta":96981,"navigation":33,"path":96982,"seo":96983,"stem":96984,"__hash__":96985},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun.md","20.魔法命令mprun",{"type":7,"value":96889,"toc":96979},[96890,96893,96896,96899,96902,96905,96908,96911,96914,96917,96920,96923,96925,96928,96931,96936,96939,96942,96976],[10,96891,96887],{"id":96892},"_20魔法命令mprun",[14,96894,96895],{},"逐行分析数据内存的使用情况",[14,96897,96898],{},"语法格式：",[14,96900,96901],{},"%mprun -f 模块名.函数名 模块名.函数名()",[14,96903,96904],{},"分析结果列如下：",[14,96906,96907],{},"Line行号",[14,96909,96910],{},"Mem usage内存使用大小",[14,96912,96913],{},"increment内存增量",[14,96915,96916],{},"Line content代码内容",[14,96918,96919],{},"补充说明：",[14,96921,96922],{},"mprun不是Ipython内置，需要安装memory_profiler模块",[14,96924,95188],{},[14,96926,96927],{},"mprun测试的函数必须定义在独立模块中，不能定义在交互式Ipython环境中,要把它写入文件当中",[14,96929,96930],{},"如果需要重新加载模块，可以调用importlib模块提供reload函数",[14,96932,96933],{},[23,96934],{"alt":25,"src":96935},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-044.png",[14,96937,96938],{},"这个时候如果将函数里边range()范围改了，则重新运行之后，结果increment的每一句代码是不变的",[14,96940,96941],{},"这时候需要重新加载模块",[97,96943,96945],{"className":30372,"code":96944,"language":30374,"meta":25,"style":25},"#重新加载模块\nimport importlib\nimportlib.reload(mprun_test)\n%mprun -f mprun_test.fun_test mprun_test.fun_test()\n",[103,96946,96947,96952,96959,96964],{"__ignoreMap":25},[106,96948,96949],{"class":108,"line":109},[106,96950,96951],{"class":175},"#重新加载模块\n",[106,96953,96954,96956],{"class":108,"line":28},[106,96955,30386],{"class":112},[106,96957,96958],{"class":116}," importlib\n",[106,96960,96961],{"class":108,"line":1172},[106,96962,96963],{"class":116},"importlib.reload(mprun_test)\n",[106,96965,96966,96968,96971,96973],{"class":108,"line":1187},[106,96967,445],{"class":112},[106,96969,96970],{"class":116},"mprun ",[106,96972,649],{"class":112},[106,96974,96975],{"class":116},"f mprun_test.fun_test mprun_test.fun_test()\n",[5119,96977,96978],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":28,"depth":28,"links":96980},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch20-mprun",{"title":96887,"description":30},"wiki\u002F2025-08-14-numpy\u002Fch20-魔法命令mprun","IgHoOma_sVJYUvOa_nR1WsKoZkVZVARozypIz67Eesc",{"id":96987,"title":96988,"body":96989,"description":30,"extension":31,"meta":97006,"navigation":33,"path":97007,"seo":97008,"stem":97009,"__hash__":97010},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片.md","3.一维数组的索引和切片",{"type":7,"value":96990,"toc":97004},[96991,96994,96999],[10,96992,96988],{"id":96993},"_3一维数组的索引和切片",[14,96995,96996],{},[23,96997],{"alt":25,"src":96998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-019.png",[14,97000,97001],{},[23,97002],{"alt":25,"src":97003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-020.png",{"title":25,"searchDepth":28,"depth":28,"links":97005},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch3",{"title":96988,"description":30},"wiki\u002F2025-08-14-numpy\u002Fch3-一维数组的索引和切片","HCjbAhTUAFlQa91QLrommm7yUYNAMWkOQ3-g6Ha153Q",{"id":97012,"title":97013,"body":97014,"description":30,"extension":31,"meta":97497,"navigation":33,"path":97498,"seo":97499,"stem":97500,"__hash__":97501},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片.md","4.二维数组的索引与切片",{"type":7,"value":97015,"toc":97495},[97016,97019,97022,97027,97060,97063,97101,97104,97138,97141,97246,97249,97286,97289,97390,97393,97444,97447,97489,97492],[10,97017,97013],{"id":97018},"_4二维数组的索引与切片",[14,97020,97021],{},"①获取指定单个元素",[14,97023,97024],{},[23,97025],{"alt":25,"src":97026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-021.png",[97,97028,97030],{"className":30372,"code":97029,"language":30374,"meta":25,"style":25},"#获取元素9\n#先获取所在行，再获取所在列\n#数组[行索引号，列索引号]\na[1,2]\n",[103,97031,97032,97037,97042,97047],{"__ignoreMap":25},[106,97033,97034],{"class":108,"line":109},[106,97035,97036],{"class":175},"#获取元素9\n",[106,97038,97039],{"class":108,"line":28},[106,97040,97041],{"class":175},"#先获取所在行，再获取所在列\n",[106,97043,97044],{"class":108,"line":1172},[106,97045,97046],{"class":175},"#数组[行索引号，列索引号]\n",[106,97048,97049,97052,97054,97056,97058],{"class":108,"line":1187},[106,97050,97051],{"class":116},"a[",[106,97053,334],{"class":165},[106,97055,495],{"class":116},[106,97057,194],{"class":165},[106,97059,33240],{"class":116},[14,97061,97062],{},"②获取整行元素",[97,97064,97066],{"className":30372,"code":97065,"language":30374,"meta":25,"style":25},"#获取整行 数组[行索引号]\n#这个的效果与   数组[行索引号，：]效果是一样的\na[2]\n#也可以负索引获取一行\na[-1]\n",[103,97067,97068,97073,97078,97086,97091],{"__ignoreMap":25},[106,97069,97070],{"class":108,"line":109},[106,97071,97072],{"class":175},"#获取整行 数组[行索引号]\n",[106,97074,97075],{"class":108,"line":28},[106,97076,97077],{"class":175},"#这个的效果与   数组[行索引号，：]效果是一样的\n",[106,97079,97080,97082,97084],{"class":108,"line":1172},[106,97081,97051],{"class":116},[106,97083,194],{"class":165},[106,97085,33240],{"class":116},[106,97087,97088],{"class":108,"line":1187},[106,97089,97090],{"class":175},"#也可以负索引获取一行\n",[106,97092,97093,97095,97097,97099],{"class":108,"line":1193},[106,97094,97051],{"class":116},[106,97096,649],{"class":112},[106,97098,334],{"class":165},[106,97100,33240],{"class":116},[14,97102,97103],{},"③获取整列元素",[97,97105,97107],{"className":30372,"code":97106,"language":30374,"meta":25,"style":25},"#获取整列 数组名[:,列索引]\na[:,2]\n#也可以负索引获取一列\na[:,-1]\n",[103,97108,97109,97114,97123,97128],{"__ignoreMap":25},[106,97110,97111],{"class":108,"line":109},[106,97112,97113],{"class":175},"#获取整列 数组名[:,列索引]\n",[106,97115,97116,97119,97121],{"class":108,"line":28},[106,97117,97118],{"class":116},"a[:,",[106,97120,194],{"class":165},[106,97122,33240],{"class":116},[106,97124,97125],{"class":108,"line":1172},[106,97126,97127],{"class":175},"#也可以负索引获取一列\n",[106,97129,97130,97132,97134,97136],{"class":108,"line":1187},[106,97131,97118],{"class":116},[106,97133,649],{"class":112},[106,97135,334],{"class":165},[106,97137,33240],{"class":116},[14,97139,97140],{},"④部分行部分列的元素",[97,97142,97144],{"className":30372,"code":97143,"language":30374,"meta":25,"style":25},"#部分行部分列 数组名[行切片，列切片]\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",[103,97145,97146,97151,97161,97165,97169,97174,97179,97183,97195,97199,97203,97208,97213,97218,97223,97227,97232],{"__ignoreMap":25},[106,97147,97148],{"class":108,"line":109},[106,97149,97150],{"class":175},"#部分行部分列 数组名[行切片，列切片]\n",[106,97152,97153,97156,97158],{"class":108,"line":28},[106,97154,97155],{"class":116},"a[:",[106,97157,194],{"class":165},[106,97159,97160],{"class":116},",:]\n",[106,97162,97163],{"class":108,"line":1172},[106,97164,93558],{"class":175},[106,97166,97167],{"class":108,"line":1187},[106,97168,93922],{"class":221},[106,97170,97171],{"class":108,"line":1193},[106,97172,97173],{"class":221},"array([[ 1,  2,  3,  4,  5,  6],\n",[106,97175,97176],{"class":108,"line":1207},[106,97177,97178],{"class":221},"       [ 7,  8,  9, 10, 11, 12]])\n",[106,97180,97181],{"class":108,"line":1213},[106,97182,93922],{"class":221},[106,97184,97185,97187,97189,97191,97193],{"class":108,"line":1304},[106,97186,97118],{"class":116},[106,97188,334],{"class":165},[106,97190,976],{"class":116},[106,97192,410],{"class":165},[106,97194,33240],{"class":116},[106,97196,97197],{"class":108,"line":1310},[106,97198,93558],{"class":175},[106,97200,97201],{"class":108,"line":1322},[106,97202,93922],{"class":221},[106,97204,97205],{"class":108,"line":1604},[106,97206,97207],{"class":221},"array([[ 2,  3,  4],\n",[106,97209,97210],{"class":108,"line":1609},[106,97211,97212],{"class":221},"       [ 8,  9, 10],\n",[106,97214,97215],{"class":108,"line":1615},[106,97216,97217],{"class":221},"       [14, 15, 16],\n",[106,97219,97220],{"class":108,"line":1620},[106,97221,97222],{"class":221},"       [20, 21, 22]])\n",[106,97224,97225],{"class":108,"line":1634},[106,97226,93922],{"class":221},[106,97228,97229],{"class":108,"line":1639},[106,97230,97231],{"class":175},"#对列行同时进行切片，使用了step参数\n",[106,97233,97234,97237,97239,97242,97244],{"class":108,"line":1645},[106,97235,97236],{"class":116},"a[::",[106,97238,194],{"class":165},[106,97240,97241],{"class":116},",::",[106,97243,194],{"class":165},[106,97245,33240],{"class":116},[14,97247,97248],{},"⑤同时获取两个元素",[97,97250,97252],{"className":30372,"code":97251,"language":30374,"meta":25,"style":25},"#同时获取第三行第二列，第四行第一列\n#逗号前边括号为行的所有索引，逗号后边为列的所有索引\na[(2,3),(1,0)]\n",[103,97253,97254,97259,97264],{"__ignoreMap":25},[106,97255,97256],{"class":108,"line":109},[106,97257,97258],{"class":175},"#同时获取第三行第二列，第四行第一列\n",[106,97260,97261],{"class":108,"line":28},[106,97262,97263],{"class":175},"#逗号前边括号为行的所有索引，逗号后边为列的所有索引\n",[106,97265,97266,97269,97271,97273,97275,97277,97279,97281,97283],{"class":108,"line":1172},[106,97267,97268],{"class":116},"a[(",[106,97270,194],{"class":165},[106,97272,495],{"class":116},[106,97274,188],{"class":165},[106,97276,42241],{"class":116},[106,97278,334],{"class":165},[106,97280,495],{"class":116},[106,97282,308],{"class":165},[106,97284,97285],{"class":116},")]\n",[14,97287,97288],{},"⑥切片，对行进行反向获取",[97,97290,97292],{"className":30372,"code":97291,"language":30374,"meta":25,"style":25},"#切片 对所有行进行反向获取\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",[103,97293,97294,97299,97309,97313,97317,97322,97327,97332,97337,97341,97346,97362,97366,97371,97376,97381,97386],{"__ignoreMap":25},[106,97295,97296],{"class":108,"line":109},[106,97297,97298],{"class":175},"#切片 对所有行进行反向获取\n",[106,97300,97301,97303,97305,97307],{"class":108,"line":28},[106,97302,97236],{"class":116},[106,97304,649],{"class":112},[106,97306,334],{"class":165},[106,97308,33240],{"class":116},[106,97310,97311],{"class":108,"line":1172},[106,97312,93558],{"class":175},[106,97314,97315],{"class":108,"line":1187},[106,97316,93922],{"class":221},[106,97318,97319],{"class":108,"line":1193},[106,97320,97321],{"class":221},"array([[19, 20, 21, 22, 23, 24],\n",[106,97323,97324],{"class":108,"line":1207},[106,97325,97326],{"class":221},"       [13, 14, 15, 16, 17, 18],\n",[106,97328,97329],{"class":108,"line":1213},[106,97330,97331],{"class":221},"       [ 7,  8,  9, 10, 11, 12],\n",[106,97333,97334],{"class":108,"line":1304},[106,97335,97336],{"class":221},"       [ 1,  2,  3,  4,  5,  6]])\n",[106,97338,97339],{"class":108,"line":1310},[106,97340,93922],{"class":221},[106,97342,97343],{"class":108,"line":1322},[106,97344,97345],{"class":175},"#对行列都进行反向切片获取\n",[106,97347,97348,97350,97352,97354,97356,97358,97360],{"class":108,"line":1604},[106,97349,97236],{"class":116},[106,97351,649],{"class":112},[106,97353,334],{"class":165},[106,97355,97241],{"class":116},[106,97357,649],{"class":112},[106,97359,334],{"class":165},[106,97361,33240],{"class":116},[106,97363,97364],{"class":108,"line":1609},[106,97365,93922],{"class":221},[106,97367,97368],{"class":108,"line":1615},[106,97369,97370],{"class":221},"array([[24, 23, 22, 21, 20, 19],\n",[106,97372,97373],{"class":108,"line":1620},[106,97374,97375],{"class":221},"       [18, 17, 16, 15, 14, 13],\n",[106,97377,97378],{"class":108,"line":1634},[106,97379,97380],{"class":221},"       [12, 11, 10,  9,  8,  7],\n",[106,97382,97383],{"class":108,"line":1639},[106,97384,97385],{"class":221},"       [ 6,  5,  4,  3,  2,  1]])\n",[106,97387,97388],{"class":108,"line":1645},[106,97389,93922],{"class":221},[14,97391,97392],{},"⑦修改元素",[97,97394,97396],{"className":30372,"code":97395,"language":30374,"meta":25,"style":25},"#获取前两行和前两列\nsub_a=a[:2,:2]\n#修改sub_a第一个元素的值\nsub_a[0,0]=100\n",[103,97397,97398,97403,97421,97426],{"__ignoreMap":25},[106,97399,97400],{"class":108,"line":109},[106,97401,97402],{"class":175},"#获取前两行和前两列\n",[106,97404,97405,97408,97410,97412,97414,97417,97419],{"class":108,"line":28},[106,97406,97407],{"class":116},"sub_a",[106,97409,162],{"class":112},[106,97411,97155],{"class":116},[106,97413,194],{"class":165},[106,97415,97416],{"class":116},",:",[106,97418,194],{"class":165},[106,97420,33240],{"class":116},[106,97422,97423],{"class":108,"line":1172},[106,97424,97425],{"class":175},"#修改sub_a第一个元素的值\n",[106,97427,97428,97431,97433,97435,97437,97439,97441],{"class":108,"line":1187},[106,97429,97430],{"class":116},"sub_a[",[106,97432,308],{"class":165},[106,97434,495],{"class":116},[106,97436,308],{"class":165},[106,97438,1057],{"class":116},[106,97440,162],{"class":112},[106,97442,97443],{"class":165},"100\n",[14,97445,97446],{},"⑧数组复制copy()",[97,97448,97450],{"className":30372,"code":97449,"language":30374,"meta":25,"style":25},"#数组复制\ncopy_a=np.copy(sub_a)\n#修改copy_a后不影响原数组\ncopy_a[0,0]=100\n",[103,97451,97452,97457,97467,97472],{"__ignoreMap":25},[106,97453,97454],{"class":108,"line":109},[106,97455,97456],{"class":175},"#数组复制\n",[106,97458,97459,97462,97464],{"class":108,"line":28},[106,97460,97461],{"class":116},"copy_a",[106,97463,162],{"class":112},[106,97465,97466],{"class":116},"np.copy(sub_a)\n",[106,97468,97469],{"class":108,"line":1172},[106,97470,97471],{"class":175},"#修改copy_a后不影响原数组\n",[106,97473,97474,97477,97479,97481,97483,97485,97487],{"class":108,"line":1187},[106,97475,97476],{"class":116},"copy_a[",[106,97478,308],{"class":165},[106,97480,495],{"class":116},[106,97482,308],{"class":165},[106,97484,1057],{"class":116},[106,97486,162],{"class":112},[106,97488,97443],{"class":165},[14,97490,97491],{},"使用copy()指令后创建的数组，对这个新的数组的元素进行改变，原数组的元素值是不会发生改变的",[5119,97493,97494],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":25,"searchDepth":28,"depth":28,"links":97496},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch4",{"title":97013,"description":30},"wiki\u002F2025-08-14-numpy\u002Fch4-二维数组的索引与切片","FhYeIq3Ginq9ubG9YAvy-kWp6vFdXYGIbw8SBQgChuk",{"id":97503,"title":97504,"body":97505,"description":30,"extension":31,"meta":97997,"navigation":33,"path":97998,"seo":97999,"stem":98000,"__hash__":98001},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度.md","5.改变数组的维度",{"type":7,"value":97506,"toc":97989},[97507,97510,97514,97517,97520,97573,97576,97601,97604,97623,97643,97646,97662,97666,97712,97716,97758,97762,97765,97768,97771,97774,97777,97839,97899,97903,97906,97963,97967,97972,97981,97986],[10,97508,97504],{"id":97509},"_5改变数组的维度",[48,97511,97513],{"id":97512},"_51-使用reshape","5.1 使用reshape()",[14,97515,97516],{},"通过reshape方法可以将一维数组变成二维数组、三维或者多维数组，也可以通过reshape方法将多维数组变成一维",[14,97518,97519],{},"①一维数组转换为二维数组",[97,97521,97523],{"className":30372,"code":97522,"language":30374,"meta":25,"style":25},"a=np.arange(1,13)\n#将一维数组进行转换\n#注意点：元素个数不可以变\n#转换维度要保持一致，不一致就异常！！！\naa=a.reshape(2,6)\n",[103,97524,97525,97541,97546,97551,97556],{"__ignoreMap":25},[106,97526,97527,97529,97531,97533,97535,97537,97539],{"class":108,"line":109},[106,97528,355],{"class":116},[106,97530,162],{"class":112},[106,97532,92996],{"class":116},[106,97534,334],{"class":165},[106,97536,495],{"class":116},[106,97538,640],{"class":165},[106,97540,123],{"class":116},[106,97542,97543],{"class":108,"line":28},[106,97544,97545],{"class":175},"#将一维数组进行转换\n",[106,97547,97548],{"class":108,"line":1172},[106,97549,97550],{"class":175},"#注意点：元素个数不可以变\n",[106,97552,97553],{"class":108,"line":1187},[106,97554,97555],{"class":175},"#转换维度要保持一致，不一致就异常！！！\n",[106,97557,97558,97560,97562,97565,97567,97569,97571],{"class":108,"line":1193},[106,97559,93300],{"class":116},[106,97561,162],{"class":112},[106,97563,97564],{"class":116},"a.reshape(",[106,97566,194],{"class":165},[106,97568,495],{"class":116},[106,97570,461],{"class":165},[106,97572,123],{"class":116},[14,97574,97575],{},"②一维数组转换为三维数组",[97,97577,97579],{"className":30372,"code":97578,"language":30374,"meta":25,"style":25},"aaa=a.reshape(2,3,2)\n",[103,97580,97581],{"__ignoreMap":25},[106,97582,97583,97585,97587,97589,97591,97593,97595,97597,97599],{"class":108,"line":109},[106,97584,95506],{"class":116},[106,97586,162],{"class":112},[106,97588,97564],{"class":116},[106,97590,194],{"class":165},[106,97592,495],{"class":116},[106,97594,188],{"class":165},[106,97596,495],{"class":116},[106,97598,194],{"class":165},[106,97600,123],{"class":116},[14,97602,97603],{},"③二维数组转化为一维数组",[97,97605,97607],{"className":30372,"code":97606,"language":30374,"meta":25,"style":25},"#知道元素个数：\naa.reshape(12)\n",[103,97608,97609,97614],{"__ignoreMap":25},[106,97610,97611],{"class":108,"line":109},[106,97612,97613],{"class":175},"#知道元素个数：\n",[106,97615,97616,97619,97621],{"class":108,"line":28},[106,97617,97618],{"class":116},"aa.reshape(",[106,97620,615],{"class":165},[106,97622,123],{"class":116},[97,97624,97626],{"className":30372,"code":97625,"language":30374,"meta":25,"style":25},"#不知道元素个数，参数传递-1\naa.reshape(-1)\n",[103,97627,97628,97633],{"__ignoreMap":25},[106,97629,97630],{"class":108,"line":109},[106,97631,97632],{"class":175},"#不知道元素个数，参数传递-1\n",[106,97634,97635,97637,97639,97641],{"class":108,"line":28},[106,97636,97618],{"class":116},[106,97638,649],{"class":112},[106,97640,334],{"class":165},[106,97642,123],{"class":116},[14,97644,97645],{},"④三维数组转换为一维数组",[97,97647,97649],{"className":30372,"code":97648,"language":30374,"meta":25,"style":25},"aaa.reshape(-1)\n",[103,97650,97651],{"__ignoreMap":25},[106,97652,97653,97656,97658,97660],{"class":108,"line":109},[106,97654,97655],{"class":116},"aaa.reshape(",[106,97657,649],{"class":112},[106,97659,334],{"class":165},[106,97661,123],{"class":116},[48,97663,97665],{"id":97664},"_52-使用revel转换为一维数组","5.2 使用revel()转换为一维数组",[97,97667,97669],{"className":30372,"code":97668,"language":30374,"meta":25,"style":25},"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",[103,97670,97671,97698,97703,97707],{"__ignoreMap":25},[106,97672,97673,97675,97677,97679,97681,97683,97685,97687,97689,97691,97693,97695],{"class":108,"line":109},[106,97674,93300],{"class":116},[106,97676,162],{"class":112},[106,97678,92996],{"class":116},[106,97680,334],{"class":165},[106,97682,495],{"class":116},[106,97684,640],{"class":165},[106,97686,93001],{"class":116},[106,97688,194],{"class":165},[106,97690,495],{"class":116},[106,97692,461],{"class":165},[106,97694,546],{"class":116},[106,97696,97697],{"class":175},"#转换为2行6列的数组\n",[106,97699,97700],{"class":108,"line":28},[106,97701,97702],{"class":116},"aa.revel()\n",[106,97704,97705],{"class":108,"line":1172},[106,97706,93558],{"class":175},[106,97708,97709],{"class":108,"line":1187},[106,97710,97711],{"class":175},"#array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12])\n",[48,97713,97715],{"id":97714},"_53-使用flatten转换为一维数组","5.3 使用flatten()转换为一维数组",[97,97717,97719],{"className":30372,"code":97718,"language":30374,"meta":25,"style":25},"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",[103,97720,97721,97745,97750,97754],{"__ignoreMap":25},[106,97722,97723,97725,97727,97729,97731,97733,97735,97737,97739,97741,97743],{"class":108,"line":109},[106,97724,93300],{"class":116},[106,97726,162],{"class":112},[106,97728,92996],{"class":116},[106,97730,334],{"class":165},[106,97732,495],{"class":116},[106,97734,640],{"class":165},[106,97736,93001],{"class":116},[106,97738,194],{"class":165},[106,97740,495],{"class":116},[106,97742,461],{"class":165},[106,97744,123],{"class":116},[106,97746,97747],{"class":108,"line":28},[106,97748,97749],{"class":116},"aa.flatten()\n",[106,97751,97752],{"class":108,"line":1172},[106,97753,93558],{"class":175},[106,97755,97756],{"class":108,"line":1187},[106,97757,97711],{"class":175},[48,97759,97761],{"id":97760},"_54-使用resize","5.4 使用resize()",[14,97763,97764],{},"改变数组的维度还可以直接设置numpy数组的shape属性（元组类型）",[14,97766,97767],{},"通过resize方法可以改变数组的维度",[14,97769,97770],{},"#resize修改数组维度",[14,97772,97773],{},"#以元组的形式指定形状",[14,97775,97776],{},"#改变的是原数组",[97,97778,97780],{"className":30372,"code":97779,"language":30374,"meta":25,"style":25},"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",[103,97781,97782,97798,97818,97831,97835],{"__ignoreMap":25},[106,97783,97784,97786,97788,97790,97792,97794,97796],{"class":108,"line":109},[106,97785,355],{"class":116},[106,97787,162],{"class":112},[106,97789,92996],{"class":116},[106,97791,334],{"class":165},[106,97793,495],{"class":116},[106,97795,640],{"class":165},[106,97797,123],{"class":116},[106,97799,97800,97803,97805,97807,97809,97811,97813,97815],{"class":108,"line":28},[106,97801,97802],{"class":116},"a.shape",[106,97804,162],{"class":112},[106,97806,117],{"class":116},[106,97808,194],{"class":165},[106,97810,495],{"class":116},[106,97812,461],{"class":165},[106,97814,546],{"class":116},[106,97816,97817],{"class":175},"#改变了原数组\n",[106,97819,97820,97822,97824,97827,97829],{"class":108,"line":1172},[106,97821,355],{"class":116},[106,97823,162],{"class":112},[106,97825,97826],{"class":116},"resize((",[106,97828,615],{"class":165},[106,97830,30491],{"class":116},[106,97832,97833],{"class":108,"line":1187},[106,97834,93558],{"class":175},[106,97836,97837],{"class":108,"line":1193},[106,97838,97711],{"class":175},[97,97840,97842],{"className":30372,"code":97841,"language":30374,"meta":25,"style":25},"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",[103,97843,97844,97857,97861,97865,97870,97875,97880,97885,97890,97895],{"__ignoreMap":25},[106,97845,97846,97849,97851,97853,97855],{"class":108,"line":109},[106,97847,97848],{"class":116},"a.resize((",[106,97850,461],{"class":165},[106,97852,495],{"class":116},[106,97854,194],{"class":165},[106,97856,30491],{"class":116},[106,97858,97859],{"class":108,"line":28},[106,97860,93558],{"class":175},[106,97862,97863],{"class":108,"line":1172},[106,97864,93922],{"class":221},[106,97866,97867],{"class":108,"line":1187},[106,97868,97869],{"class":221},"array([[ 1,  2],\n",[106,97871,97872],{"class":108,"line":1193},[106,97873,97874],{"class":221},"       [ 3,  4],\n",[106,97876,97877],{"class":108,"line":1207},[106,97878,97879],{"class":221},"       [ 5,  6],\n",[106,97881,97882],{"class":108,"line":1213},[106,97883,97884],{"class":221},"       [ 7,  8],\n",[106,97886,97887],{"class":108,"line":1304},[106,97888,97889],{"class":221},"       [ 9, 10],\n",[106,97891,97892],{"class":108,"line":1310},[106,97893,97894],{"class":221},"       [11, 12]])\n",[106,97896,97897],{"class":108,"line":1322},[106,97898,93922],{"class":221},[48,97900,97902],{"id":97901},"_55-使用数组shape属性修改","5.5 使用数组shape属性修改",[14,97904,97905],{},"改变了原数组",[97,97907,97909],{"className":30372,"code":97908,"language":30374,"meta":25,"style":25},"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",[103,97910,97911,97927,97943,97947,97951,97955,97959],{"__ignoreMap":25},[106,97912,97913,97915,97917,97919,97921,97923,97925],{"class":108,"line":109},[106,97914,355],{"class":116},[106,97916,162],{"class":112},[106,97918,92996],{"class":116},[106,97920,334],{"class":165},[106,97922,495],{"class":116},[106,97924,640],{"class":165},[106,97926,123],{"class":116},[106,97928,97929,97931,97933,97935,97937,97939,97941],{"class":108,"line":28},[106,97930,97802],{"class":116},[106,97932,162],{"class":112},[106,97934,117],{"class":116},[106,97936,194],{"class":165},[106,97938,495],{"class":116},[106,97940,461],{"class":165},[106,97942,123],{"class":116},[106,97944,97945],{"class":108,"line":1172},[106,97946,93558],{"class":175},[106,97948,97949],{"class":108,"line":1187},[106,97950,93922],{"class":221},[106,97952,97953],{"class":108,"line":1193},[106,97954,97173],{"class":221},[106,97956,97957],{"class":108,"line":1207},[106,97958,97178],{"class":221},[106,97960,97961],{"class":108,"line":1213},[106,97962,93922],{"class":221},[48,97964,97966],{"id":97965},"_56-重要比较","5.6 重要比较：",[14,97968,97969],{},[23,97970],{"alt":25,"src":97971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-022.png",[14,97973,97974,97975,97977,97978,97980],{},"口诀：NumPy 函数要么用 ",[103,97976,95948],{},"，要么用 ",[103,97979,31490],{},"，创建结构用 shape，造数据用 size",[14,97982,97983],{},[23,97984],{"alt":25,"src":97985},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-023.png",[5119,97987,97988],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":25,"searchDepth":28,"depth":28,"links":97990},[97991,97992,97993,97994,97995,97996],{"id":97512,"depth":28,"text":97513},{"id":97664,"depth":28,"text":97665},{"id":97714,"depth":28,"text":97715},{"id":97760,"depth":28,"text":97761},{"id":97901,"depth":28,"text":97902},{"id":97965,"depth":28,"text":97966},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch5",{"title":97504,"description":30},"wiki\u002F2025-08-14-numpy\u002Fch5-改变数组的维度","L8Yh7Y4Z2Znl_Umc9cbqdOtHItjOa-jg0HqonMYnr74",{"id":98003,"title":98004,"body":98005,"description":30,"extension":31,"meta":99077,"navigation":33,"path":99078,"seo":99079,"stem":99080,"__hash__":99081},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接.md","6.数组的拼接",{"type":7,"value":98006,"toc":99071},[98007,98010,98014,98017,98020,98023,98088,98091,98131,98134,98216,98219,98224,98246,98248,98253,98258,98261,98264,98419,98422,98624,98628,98631,98634,98702,98704,98709,98712,98715,98795,98799,98802,98804,98877,98879,98884,98886,98966,98970,98973,98976,98979,98982,98985,98988,99068],[10,98008,98004],{"id":98009},"_6数组的拼接",[48,98011,98013],{"id":98012},"_61-使用concatenate数组拼接","6.1 使用concatenate数组拼接",[14,98015,98016],{},"使用concatenate进行数组拼接连接沿现有轴的数组数列",[14,98018,98019],{},"函数内部传两个数列构成的数列或者元组",[14,98021,98022],{},"①一维数组的拼接",[97,98024,98026],{"className":30372,"code":98025,"language":30374,"meta":25,"style":25},"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",[103,98027,98028,98048,98068,98073,98078,98083],{"__ignoreMap":25},[106,98029,98030,98032,98034,98036,98038,98040,98042,98044,98046],{"class":108,"line":109},[106,98031,355],{"class":116},[106,98033,162],{"class":112},[106,98035,93018],{"class":116},[106,98037,334],{"class":165},[106,98039,495],{"class":116},[106,98041,194],{"class":165},[106,98043,495],{"class":116},[106,98045,188],{"class":165},[106,98047,4649],{"class":116},[106,98049,98050,98052,98054,98056,98058,98060,98062,98064,98066],{"class":108,"line":28},[106,98051,380],{"class":116},[106,98053,162],{"class":112},[106,98055,93018],{"class":116},[106,98057,410],{"class":165},[106,98059,495],{"class":116},[106,98061,436],{"class":165},[106,98063,495],{"class":116},[106,98065,461],{"class":165},[106,98067,4649],{"class":116},[106,98069,98070],{"class":108,"line":1172},[106,98071,98072],{"class":175},"#调用concatenate进行数组拼接\n",[106,98074,98075],{"class":108,"line":1187},[106,98076,98077],{"class":116},"np.concatenate((a,b))\n",[106,98079,98080],{"class":108,"line":1193},[106,98081,98082],{"class":175},"#这里函数内部是以数列或者元组的形式进行传递的，也可以使用数列\n",[106,98084,98085],{"class":108,"line":1207},[106,98086,98087],{"class":175},"#np.concatenate([a,b])\n",[14,98089,98090],{},"②一维多个数组拼接",[97,98092,98094],{"className":30372,"code":98093,"language":30374,"meta":25,"style":25},"#也可以多个数组进行拼接\nc=np.array([10,11,13])\nc\nnp.concatenate((a,b,c))\n",[103,98095,98096,98101,98121,98126],{"__ignoreMap":25},[106,98097,98098],{"class":108,"line":109},[106,98099,98100],{"class":175},"#也可以多个数组进行拼接\n",[106,98102,98103,98105,98107,98109,98111,98113,98115,98117,98119],{"class":108,"line":28},[106,98104,405],{"class":116},[106,98106,162],{"class":112},[106,98108,93018],{"class":116},[106,98110,563],{"class":165},[106,98112,495],{"class":116},[106,98114,589],{"class":165},[106,98116,495],{"class":116},[106,98118,640],{"class":165},[106,98120,4649],{"class":116},[106,98122,98123],{"class":108,"line":1172},[106,98124,98125],{"class":116},"c\n",[106,98127,98128],{"class":108,"line":1187},[106,98129,98130],{"class":116},"np.concatenate((a,b,c))\n",[14,98132,98133],{},"③二维数组拼接",[97,98135,98137],{"className":30372,"code":98136,"language":30374,"meta":25,"style":25},"#二维数组使用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",[103,98138,98139,98144,98168,98193,98198,98203],{"__ignoreMap":25},[106,98140,98141],{"class":108,"line":109},[106,98142,98143],{"class":175},"#二维数组使用concatenate进行拼接\n",[106,98145,98146,98148,98150,98152,98154,98156,98158,98160,98162,98164,98166],{"class":108,"line":28},[106,98147,93300],{"class":116},[106,98149,162],{"class":112},[106,98151,92996],{"class":116},[106,98153,334],{"class":165},[106,98155,495],{"class":116},[106,98157,640],{"class":165},[106,98159,93001],{"class":116},[106,98161,188],{"class":165},[106,98163,495],{"class":116},[106,98165,410],{"class":165},[106,98167,123],{"class":116},[106,98169,98170,98173,98175,98177,98179,98181,98183,98185,98187,98189,98191],{"class":108,"line":1172},[106,98171,98172],{"class":116},"bb",[106,98174,162],{"class":112},[106,98176,92996],{"class":116},[106,98178,454],{"class":165},[106,98180,495],{"class":116},[106,98182,759],{"class":165},[106,98184,93001],{"class":116},[106,98186,188],{"class":165},[106,98188,495],{"class":116},[106,98190,410],{"class":165},[106,98192,123],{"class":116},[106,98194,98195],{"class":108,"line":1187},[106,98196,98197],{"class":175},"#调用concatenate进行拼接,axis默认值为0，按行;axis=1时按列\n",[106,98199,98200],{"class":108,"line":1193},[106,98201,98202],{"class":175},"#concatenate是有两个参数的，一个是要拼接数组组成的数列或者元组，另一个是轴axis\n",[106,98204,98205,98208,98210,98212,98214],{"class":108,"line":1207},[106,98206,98207],{"class":116},"np.concatenate((aa,bb),",[106,98209,47508],{"class":5209},[106,98211,162],{"class":112},[106,98213,308],{"class":165},[106,98215,123],{"class":116},[14,98217,98218],{},"结果：",[14,98220,98221],{},[23,98222],{"alt":25,"src":98223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-024.png",[97,98225,98227],{"className":30372,"code":98226,"language":30374,"meta":25,"style":25},"#指定axis为1进行拼接\nnp.concatenate((aa,bb),axis=1)\n",[103,98228,98229,98234],{"__ignoreMap":25},[106,98230,98231],{"class":108,"line":109},[106,98232,98233],{"class":175},"#指定axis为1进行拼接\n",[106,98235,98236,98238,98240,98242,98244],{"class":108,"line":28},[106,98237,98207],{"class":116},[106,98239,47508],{"class":5209},[106,98241,162],{"class":112},[106,98243,334],{"class":165},[106,98245,123],{"class":116},[14,98247,98218],{},[14,98249,98250],{},[23,98251],{"alt":25,"src":98252},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-025.png",[14,98254,98255],{},[266,98256,98257],{},"二维数组总结：0竖着方向，1横着方向",[14,98259,98260],{},"④三维数组拼接",[14,98262,98263],{},"#concatenate()三维数组拼接，axis有三个维度0，1，2",[97,98265,98267],{"className":30372,"code":98266,"language":30374,"meta":25,"style":25},"#两个三行六列\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",[103,98268,98269,98274,98302,98332,98337,98354,98359,98364,98369,98386,98391,98396,98401,98414],{"__ignoreMap":25},[106,98270,98271],{"class":108,"line":109},[106,98272,98273],{"class":175},"#两个三行六列\n",[106,98275,98276,98278,98280,98282,98284,98286,98288,98290,98292,98294,98296,98298,98300],{"class":108,"line":28},[106,98277,95506],{"class":116},[106,98279,162],{"class":112},[106,98281,92996],{"class":116},[106,98283,334],{"class":165},[106,98285,495],{"class":116},[106,98287,442],{"class":165},[106,98289,93001],{"class":116},[106,98291,194],{"class":165},[106,98293,495],{"class":116},[106,98295,188],{"class":165},[106,98297,495],{"class":116},[106,98299,461],{"class":165},[106,98301,123],{"class":116},[106,98303,98304,98307,98309,98311,98313,98315,98318,98320,98322,98324,98326,98328,98330],{"class":108,"line":1172},[106,98305,98306],{"class":116},"bbb",[106,98308,162],{"class":112},[106,98310,92996],{"class":116},[106,98312,454],{"class":165},[106,98314,495],{"class":116},[106,98316,98317],{"class":165},"137",[106,98319,93001],{"class":116},[106,98321,194],{"class":165},[106,98323,495],{"class":116},[106,98325,188],{"class":165},[106,98327,495],{"class":116},[106,98329,461],{"class":165},[106,98331,123],{"class":116},[106,98333,98334],{"class":108,"line":1187},[106,98335,98336],{"class":175},"#axis=0\n",[106,98338,98339,98341,98343,98346,98348,98350,98352],{"class":108,"line":1193},[106,98340,812],{"class":116},[106,98342,162],{"class":112},[106,98344,98345],{"class":116},"np.concatenate((aaa,bbb),",[106,98347,47508],{"class":5209},[106,98349,162],{"class":112},[106,98351,308],{"class":165},[106,98353,123],{"class":116},[106,98355,98356],{"class":108,"line":1207},[106,98357,98358],{"class":116},"s.shape\n",[106,98360,98361],{"class":108,"line":1213},[106,98362,98363],{"class":175},"#输出：(4,3,6)\n",[106,98365,98366],{"class":108,"line":1304},[106,98367,98368],{"class":175},"#axis=1\n",[106,98370,98371,98374,98376,98378,98380,98382,98384],{"class":108,"line":1310},[106,98372,98373],{"class":116},"ss",[106,98375,162],{"class":112},[106,98377,98345],{"class":116},[106,98379,47508],{"class":5209},[106,98381,162],{"class":112},[106,98383,334],{"class":165},[106,98385,123],{"class":116},[106,98387,98388],{"class":108,"line":1322},[106,98389,98390],{"class":116},"ss.shape\n",[106,98392,98393],{"class":108,"line":1604},[106,98394,98395],{"class":175},"#输出：(2,6,6)\n",[106,98397,98398],{"class":108,"line":1609},[106,98399,98400],{"class":175},"#axis=2\n",[106,98402,98403,98405,98407,98409,98411],{"class":108,"line":1615},[106,98404,98345],{"class":116},[106,98406,47508],{"class":5209},[106,98408,162],{"class":112},[106,98410,194],{"class":165},[106,98412,98413],{"class":116},").shape\n",[106,98415,98416],{"class":108,"line":1620},[106,98417,98418],{"class":175},"#输出：（2，3，12）\n",[14,98420,98421],{},"⑤四维数组拼接",[97,98423,98425],{"className":30372,"code":98424,"language":30374,"meta":25,"style":25},"#两个三行六列\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",[103,98426,98427,98431,98459,98487,98512,98538,98542,98555,98560,98564,98576,98581,98585,98597,98602,98607,98619],{"__ignoreMap":25},[106,98428,98429],{"class":108,"line":109},[106,98430,98273],{"class":175},[106,98432,98433,98435,98437,98439,98441,98443,98445,98447,98449,98451,98453,98455,98457],{"class":108,"line":28},[106,98434,95506],{"class":116},[106,98436,162],{"class":112},[106,98438,92996],{"class":116},[106,98440,334],{"class":165},[106,98442,495],{"class":116},[106,98444,442],{"class":165},[106,98446,93001],{"class":116},[106,98448,194],{"class":165},[106,98450,495],{"class":116},[106,98452,188],{"class":165},[106,98454,495],{"class":116},[106,98456,461],{"class":165},[106,98458,123],{"class":116},[106,98460,98461,98463,98465,98467,98469,98471,98473,98475,98477,98479,98481,98483,98485],{"class":108,"line":1172},[106,98462,98306],{"class":116},[106,98464,162],{"class":112},[106,98466,92996],{"class":116},[106,98468,454],{"class":165},[106,98470,495],{"class":116},[106,98472,98317],{"class":165},[106,98474,93001],{"class":116},[106,98476,194],{"class":165},[106,98478,495],{"class":116},[106,98480,188],{"class":165},[106,98482,495],{"class":116},[106,98484,461],{"class":165},[106,98486,123],{"class":116},[106,98488,98489,98492,98494,98496,98498,98500,98502,98504,98506,98508,98510],{"class":108,"line":1187},[106,98490,98491],{"class":116},"aaaa",[106,98493,162],{"class":112},[106,98495,97655],{"class":116},[106,98497,194],{"class":165},[106,98499,495],{"class":116},[106,98501,188],{"class":165},[106,98503,495],{"class":116},[106,98505,188],{"class":165},[106,98507,495],{"class":116},[106,98509,194],{"class":165},[106,98511,123],{"class":116},[106,98513,98514,98517,98519,98522,98524,98526,98528,98530,98532,98534,98536],{"class":108,"line":1193},[106,98515,98516],{"class":116},"bbbb",[106,98518,162],{"class":112},[106,98520,98521],{"class":116},"bbb.reshape(",[106,98523,194],{"class":165},[106,98525,495],{"class":116},[106,98527,188],{"class":165},[106,98529,495],{"class":116},[106,98531,188],{"class":165},[106,98533,495],{"class":116},[106,98535,194],{"class":165},[106,98537,123],{"class":116},[106,98539,98540],{"class":108,"line":1207},[106,98541,98336],{"class":175},[106,98543,98544,98547,98549,98551,98553],{"class":108,"line":1213},[106,98545,98546],{"class":116},"np.concatenate((aaaa,bbbb),",[106,98548,47508],{"class":5209},[106,98550,162],{"class":112},[106,98552,308],{"class":165},[106,98554,98413],{"class":116},[106,98556,98557],{"class":108,"line":1304},[106,98558,98559],{"class":175},"#结果：（4，3，3，2）\n",[106,98561,98562],{"class":108,"line":1310},[106,98563,98368],{"class":175},[106,98565,98566,98568,98570,98572,98574],{"class":108,"line":1322},[106,98567,98546],{"class":116},[106,98569,47508],{"class":5209},[106,98571,162],{"class":112},[106,98573,334],{"class":165},[106,98575,98413],{"class":116},[106,98577,98578],{"class":108,"line":1604},[106,98579,98580],{"class":175},"#结果：（2，6，3，2）\n",[106,98582,98583],{"class":108,"line":1609},[106,98584,98400],{"class":175},[106,98586,98587,98589,98591,98593,98595],{"class":108,"line":1615},[106,98588,98546],{"class":116},[106,98590,47508],{"class":5209},[106,98592,162],{"class":112},[106,98594,194],{"class":165},[106,98596,98413],{"class":116},[106,98598,98599],{"class":108,"line":1620},[106,98600,98601],{"class":175},"#结果：（2，3，6，2）\n",[106,98603,98604],{"class":108,"line":1634},[106,98605,98606],{"class":175},"#axis=3\n",[106,98608,98609,98611,98613,98615,98617],{"class":108,"line":1639},[106,98610,98546],{"class":116},[106,98612,47508],{"class":5209},[106,98614,162],{"class":112},[106,98616,188],{"class":165},[106,98618,98413],{"class":116},[106,98620,98621],{"class":108,"line":1645},[106,98622,98623],{"class":175},"#结果：（2，3，3，4）\n",[48,98625,98627],{"id":98626},"_62-使用hstack数组拼接","6.2 使用hstack数组拼接",[14,98629,98630],{},"使用hstack进行数组拼接，水平堆叠序列中的数组(列方向)",[14,98632,98633],{},"①二维数组",[97,98635,98637],{"className":30372,"code":98636,"language":30374,"meta":25,"style":25},"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",[103,98638,98639,98663,98687,98692,98697],{"__ignoreMap":25},[106,98640,98641,98643,98645,98647,98649,98651,98653,98655,98657,98659,98661],{"class":108,"line":109},[106,98642,93300],{"class":116},[106,98644,162],{"class":112},[106,98646,92996],{"class":116},[106,98648,334],{"class":165},[106,98650,495],{"class":116},[106,98652,640],{"class":165},[106,98654,93001],{"class":116},[106,98656,188],{"class":165},[106,98658,495],{"class":116},[106,98660,410],{"class":165},[106,98662,123],{"class":116},[106,98664,98665,98667,98669,98671,98673,98675,98677,98679,98681,98683,98685],{"class":108,"line":28},[106,98666,98172],{"class":116},[106,98668,162],{"class":112},[106,98670,92996],{"class":116},[106,98672,454],{"class":165},[106,98674,495],{"class":116},[106,98676,759],{"class":165},[106,98678,93001],{"class":116},[106,98680,188],{"class":165},[106,98682,495],{"class":116},[106,98684,410],{"class":165},[106,98686,123],{"class":116},[106,98688,98689],{"class":108,"line":1172},[106,98690,98691],{"class":116},"np.hstack((aa,bb))\n",[106,98693,98694],{"class":108,"line":1187},[106,98695,98696],{"class":175},"#跟concatenate函数方法一样，把要拼接的数组放到数列或者元组中去\n",[106,98698,98699],{"class":108,"line":1193},[106,98700,98701],{"class":175},"#np.hstack([aa,bb])\n",[14,98703,98218],{},[14,98705,98706],{},[23,98707],{"alt":25,"src":98708},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-026.png",[14,98710,98711],{},"等效于concatenate()函数中axis=1时的情况",[14,98713,98714],{},"②三维数组",[97,98716,98718],{"className":30372,"code":98717,"language":30374,"meta":25,"style":25},"#两个三行六列\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",[103,98719,98720,98724,98752,98780,98785,98790],{"__ignoreMap":25},[106,98721,98722],{"class":108,"line":109},[106,98723,98273],{"class":175},[106,98725,98726,98728,98730,98732,98734,98736,98738,98740,98742,98744,98746,98748,98750],{"class":108,"line":28},[106,98727,95506],{"class":116},[106,98729,162],{"class":112},[106,98731,92996],{"class":116},[106,98733,334],{"class":165},[106,98735,495],{"class":116},[106,98737,442],{"class":165},[106,98739,93001],{"class":116},[106,98741,194],{"class":165},[106,98743,495],{"class":116},[106,98745,188],{"class":165},[106,98747,495],{"class":116},[106,98749,461],{"class":165},[106,98751,123],{"class":116},[106,98753,98754,98756,98758,98760,98762,98764,98766,98768,98770,98772,98774,98776,98778],{"class":108,"line":1172},[106,98755,98306],{"class":116},[106,98757,162],{"class":112},[106,98759,92996],{"class":116},[106,98761,454],{"class":165},[106,98763,495],{"class":116},[106,98765,98317],{"class":165},[106,98767,93001],{"class":116},[106,98769,194],{"class":165},[106,98771,495],{"class":116},[106,98773,188],{"class":165},[106,98775,495],{"class":116},[106,98777,461],{"class":165},[106,98779,123],{"class":116},[106,98781,98782],{"class":108,"line":1187},[106,98783,98784],{"class":175},"#使用hstack\n",[106,98786,98787],{"class":108,"line":1193},[106,98788,98789],{"class":116},"np.hstack((aaa,bbb)).shape\n",[106,98791,98792],{"class":108,"line":1207},[106,98793,98794],{"class":175},"#输出：（2，6，6）\n",[48,98796,98798],{"id":98797},"_63-使用vstack数组拼接","6.3 使用vstack数组拼接",[14,98800,98801],{},"使用vstack进行数组拼接，竖直堆叠序列中的数组(行方向)",[14,98803,98633],{},[97,98805,98807],{"className":30372,"code":98806,"language":30374,"meta":25,"style":25},"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",[103,98808,98809,98833,98857,98862,98867,98872],{"__ignoreMap":25},[106,98810,98811,98813,98815,98817,98819,98821,98823,98825,98827,98829,98831],{"class":108,"line":109},[106,98812,93300],{"class":116},[106,98814,162],{"class":112},[106,98816,92996],{"class":116},[106,98818,334],{"class":165},[106,98820,495],{"class":116},[106,98822,640],{"class":165},[106,98824,93001],{"class":116},[106,98826,188],{"class":165},[106,98828,495],{"class":116},[106,98830,410],{"class":165},[106,98832,123],{"class":116},[106,98834,98835,98837,98839,98841,98843,98845,98847,98849,98851,98853,98855],{"class":108,"line":28},[106,98836,98172],{"class":116},[106,98838,162],{"class":112},[106,98840,92996],{"class":116},[106,98842,454],{"class":165},[106,98844,495],{"class":116},[106,98846,759],{"class":165},[106,98848,93001],{"class":116},[106,98850,188],{"class":165},[106,98852,495],{"class":116},[106,98854,410],{"class":165},[106,98856,123],{"class":116},[106,98858,98859],{"class":108,"line":1172},[106,98860,98861],{"class":175},"#vstack 垂直方向进行堆叠\n",[106,98863,98864],{"class":108,"line":1187},[106,98865,98866],{"class":116},"np.vstack((aa,bb))\n",[106,98868,98869],{"class":108,"line":1193},[106,98870,98871],{"class":175},"#与hstack传的参数类似，等价于：\n",[106,98873,98874],{"class":108,"line":1207},[106,98875,98876],{"class":116},"np.vstack([aa,bb])\n",[14,98878,98218],{},[14,98880,98881],{},[23,98882],{"alt":25,"src":98883},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-027.png",[14,98885,98714],{},[97,98887,98889],{"className":30372,"code":98888,"language":30374,"meta":25,"style":25},"#两个三行六列\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",[103,98890,98891,98895,98923,98951,98956,98961],{"__ignoreMap":25},[106,98892,98893],{"class":108,"line":109},[106,98894,98273],{"class":175},[106,98896,98897,98899,98901,98903,98905,98907,98909,98911,98913,98915,98917,98919,98921],{"class":108,"line":28},[106,98898,95506],{"class":116},[106,98900,162],{"class":112},[106,98902,92996],{"class":116},[106,98904,334],{"class":165},[106,98906,495],{"class":116},[106,98908,442],{"class":165},[106,98910,93001],{"class":116},[106,98912,194],{"class":165},[106,98914,495],{"class":116},[106,98916,188],{"class":165},[106,98918,495],{"class":116},[106,98920,461],{"class":165},[106,98922,123],{"class":116},[106,98924,98925,98927,98929,98931,98933,98935,98937,98939,98941,98943,98945,98947,98949],{"class":108,"line":1172},[106,98926,98306],{"class":116},[106,98928,162],{"class":112},[106,98930,92996],{"class":116},[106,98932,454],{"class":165},[106,98934,495],{"class":116},[106,98936,98317],{"class":165},[106,98938,93001],{"class":116},[106,98940,194],{"class":165},[106,98942,495],{"class":116},[106,98944,188],{"class":165},[106,98946,495],{"class":116},[106,98948,461],{"class":165},[106,98950,123],{"class":116},[106,98952,98953],{"class":108,"line":1187},[106,98954,98955],{"class":175},"#使用vstack\n",[106,98957,98958],{"class":108,"line":1193},[106,98959,98960],{"class":116},"np.vstack((aaa,bbb)).shape\n",[106,98962,98963],{"class":108,"line":1207},[106,98964,98965],{"class":175},"#输出：（4，3，6）\n",[48,98967,98969],{"id":98968},"_64-使用dstack数组拼接","6.4 使用dstack数组拼接",[14,98971,98972],{},"该方法是三维数组特有的方法",[14,98974,98975],{},"也就是说",[14,98977,98978],{},"一维数组拼接方法用：concatenate()",[14,98980,98981],{},"二维数组拼接方法用: concatenate(),hstack(),vstack()",[14,98983,98984],{},"三维数组拼接方法用: concatenate(),hstack(),vstack(),dstack()",[14,98986,98987],{},"四维数组及多维数组只能用concatenate进行拼接",[97,98989,98991],{"className":30372,"code":98990,"language":30374,"meta":25,"style":25},"#两个三行六列\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",[103,98992,98993,98997,99025,99053,99058,99063],{"__ignoreMap":25},[106,98994,98995],{"class":108,"line":109},[106,98996,98273],{"class":175},[106,98998,98999,99001,99003,99005,99007,99009,99011,99013,99015,99017,99019,99021,99023],{"class":108,"line":28},[106,99000,95506],{"class":116},[106,99002,162],{"class":112},[106,99004,92996],{"class":116},[106,99006,334],{"class":165},[106,99008,495],{"class":116},[106,99010,442],{"class":165},[106,99012,93001],{"class":116},[106,99014,194],{"class":165},[106,99016,495],{"class":116},[106,99018,188],{"class":165},[106,99020,495],{"class":116},[106,99022,461],{"class":165},[106,99024,123],{"class":116},[106,99026,99027,99029,99031,99033,99035,99037,99039,99041,99043,99045,99047,99049,99051],{"class":108,"line":1172},[106,99028,98306],{"class":116},[106,99030,162],{"class":112},[106,99032,92996],{"class":116},[106,99034,454],{"class":165},[106,99036,495],{"class":116},[106,99038,98317],{"class":165},[106,99040,93001],{"class":116},[106,99042,194],{"class":165},[106,99044,495],{"class":116},[106,99046,188],{"class":165},[106,99048,495],{"class":116},[106,99050,461],{"class":165},[106,99052,123],{"class":116},[106,99054,99055],{"class":108,"line":1187},[106,99056,99057],{"class":175},"#使用dstack\n",[106,99059,99060],{"class":108,"line":1193},[106,99061,99062],{"class":116},"np.dstack((aaa,bbb)).shape\n",[106,99064,99065],{"class":108,"line":1207},[106,99066,99067],{"class":175},"#结果：（2，3，12）\n",[5119,99069,99070],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":28,"depth":28,"links":99072},[99073,99074,99075,99076],{"id":98012,"depth":28,"text":98013},{"id":98626,"depth":28,"text":98627},{"id":98797,"depth":28,"text":98798},{"id":98968,"depth":28,"text":98969},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch6",{"title":98004,"description":30},"wiki\u002F2025-08-14-numpy\u002Fch6-数组的拼接","0lcecFbbCD7708gTYIcl02jIknmUZ4PA0g3J__NnHUY",{"id":99083,"title":99084,"body":99085,"description":30,"extension":31,"meta":99360,"navigation":33,"path":99361,"seo":99362,"stem":99363,"__hash__":99364},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch7-数组转置.md","7.数组转置",{"type":7,"value":99086,"toc":99358},[99087,99090,99093,99187,99190,99193,99196,99199,99202,99205,99208,99211,99355],[10,99088,99084],{"id":99089},"_7数组转置",[14,99091,99092],{},"使用transpose()函数",[97,99094,99096],{"className":30372,"code":99095,"language":30374,"meta":25,"style":25},"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",[103,99097,99098,99108,99132,99137,99142,99147,99152,99160,99164,99168,99173,99178,99183],{"__ignoreMap":25},[106,99099,99100,99102,99104,99106],{"class":108,"line":109},[106,99101,30386],{"class":112},[106,99103,31374],{"class":116},[106,99105,31377],{"class":112},[106,99107,31380],{"class":116},[106,99109,99110,99112,99114,99116,99118,99120,99122,99124,99126,99128,99130],{"class":108,"line":28},[106,99111,355],{"class":116},[106,99113,162],{"class":112},[106,99115,31711],{"class":116},[106,99117,334],{"class":165},[106,99119,495],{"class":116},[106,99121,640],{"class":165},[106,99123,93001],{"class":116},[106,99125,410],{"class":165},[106,99127,495],{"class":116},[106,99129,188],{"class":165},[106,99131,123],{"class":116},[106,99133,99134],{"class":108,"line":1172},[106,99135,99136],{"class":175},"#二维数组转置\n",[106,99138,99139],{"class":108,"line":1187},[106,99140,99141],{"class":175},"#调用transpose()函数\n",[106,99143,99144],{"class":108,"line":1193},[106,99145,99146],{"class":116},"a.transpose()\n",[106,99148,99149],{"class":108,"line":1207},[106,99150,99151],{"class":175},"#对于二维数组也可以采用.T来实现\n",[106,99153,99154,99157],{"class":108,"line":1213},[106,99155,99156],{"class":116},"a.T",[106,99158,99159],{"class":175},"#与上述代码一样\n",[106,99161,99162],{"class":108,"line":1304},[106,99163,93558],{"class":175},[106,99165,99166],{"class":108,"line":1310},[106,99167,93922],{"class":221},[106,99169,99170],{"class":108,"line":1322},[106,99171,99172],{"class":221},"array([[ 1,  4,  7, 10],\n",[106,99174,99175],{"class":108,"line":1604},[106,99176,99177],{"class":221},"       [ 2,  5,  8, 11],\n",[106,99179,99180],{"class":108,"line":1609},[106,99181,99182],{"class":221},"       [ 3,  6,  9, 12]])\n",[106,99184,99185],{"class":108,"line":1615},[106,99186,93922],{"class":221},[14,99188,99189],{},"也可以使用np.transpose()的形式",[14,99191,99192],{},"#多维数组进行转置 np.transpose()",[14,99194,99195],{},"#对二维数组也可以使用np.transpose()进行转置",[14,99197,99198],{},"#这个有两个维度，第一个是数组，第二个是维度,可以是数列也可以是元组的形式传到这个函数中",[14,99200,99201],{},"第二个参数，维度可以理解为用axis中的数来理解",[14,99203,99204],{},"对于二维数组，axis是有两个值的0，1 进行转置就传（1,0）两者进行了替换",[14,99206,99207],{},"对于三维数组，axis是有三个值的0，1，2，进行转置，想换哪个就将默认的(0,1,2)进行改",[14,99209,99210],{},"四维及以上的数组也是一样的道理",[97,99212,99214],{"className":30372,"code":99213,"language":30374,"meta":25,"style":25},"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",[103,99215,99216,99244,99249,99254,99259,99277,99282,99314,99319,99324,99329,99350],{"__ignoreMap":25},[106,99217,99218,99220,99222,99224,99226,99228,99230,99232,99234,99236,99238,99240,99242],{"class":108,"line":109},[106,99219,937],{"class":116},[106,99221,162],{"class":112},[106,99223,92996],{"class":116},[106,99225,334],{"class":165},[106,99227,495],{"class":116},[106,99229,442],{"class":165},[106,99231,93001],{"class":116},[106,99233,188],{"class":165},[106,99235,495],{"class":116},[106,99237,461],{"class":165},[106,99239,495],{"class":116},[106,99241,194],{"class":165},[106,99243,123],{"class":116},[106,99245,99246],{"class":108,"line":28},[106,99247,99248],{"class":116},"x.shape\n",[106,99250,99251],{"class":108,"line":1172},[106,99252,99253],{"class":175},"#结果：（3,6,2）\n",[106,99255,99256],{"class":108,"line":1187},[106,99257,99258],{"class":175},"#使用np.transpose()进行转置 变为(2,6,3)\n",[106,99260,99261,99264,99266,99268,99270,99272,99274],{"class":108,"line":1193},[106,99262,99263],{"class":116},"np.transpose(x,(",[106,99265,194],{"class":165},[106,99267,495],{"class":116},[106,99269,334],{"class":165},[106,99271,495],{"class":116},[106,99273,308],{"class":165},[106,99275,99276],{"class":116},")).shape\n",[106,99278,99279],{"class":108,"line":1207},[106,99280,99281],{"class":175},"#结果：(2,6,3)\n",[106,99283,99284,99286,99288,99290,99292,99294,99296,99298,99300,99302,99304,99306,99308,99310,99312],{"class":108,"line":1213},[106,99285,98491],{"class":116},[106,99287,162],{"class":112},[106,99289,92996],{"class":116},[106,99291,334],{"class":165},[106,99293,495],{"class":116},[106,99295,442],{"class":165},[106,99297,93001],{"class":116},[106,99299,188],{"class":165},[106,99301,495],{"class":116},[106,99303,194],{"class":165},[106,99305,495],{"class":116},[106,99307,334],{"class":165},[106,99309,495],{"class":116},[106,99311,461],{"class":165},[106,99313,123],{"class":116},[106,99315,99316],{"class":108,"line":1304},[106,99317,99318],{"class":116},"aaaa.shape\n",[106,99320,99321],{"class":108,"line":1310},[106,99322,99323],{"class":175},"#结果：（3，2，1，6）\n",[106,99325,99326],{"class":108,"line":1322},[106,99327,99328],{"class":175},"#使用np.transpose()进行转置 变为(2,1,3,6)\n",[106,99330,99331,99334,99336,99338,99340,99342,99344,99346,99348],{"class":108,"line":1604},[106,99332,99333],{"class":116},"np.transpose(aaaa,(",[106,99335,334],{"class":165},[106,99337,495],{"class":116},[106,99339,194],{"class":165},[106,99341,495],{"class":116},[106,99343,308],{"class":165},[106,99345,495],{"class":116},[106,99347,188],{"class":165},[106,99349,99276],{"class":116},[106,99351,99352],{"class":108,"line":1609},[106,99353,99354],{"class":175},"#结果：(2,1,3,6)\n",[5119,99356,99357],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":28,"depth":28,"links":99359},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch7",{"title":99084,"description":30},"wiki\u002F2025-08-14-numpy\u002Fch7-数组转置","b8e_wXc-54BtMmzlK4i2-r72ortHX_8oUIL58EtJh-E",{"id":99366,"title":99367,"body":99368,"description":30,"extension":31,"meta":100102,"navigation":33,"path":100103,"seo":100104,"stem":100105,"__hash__":100106},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch8-数组分割.md","8.数组分割",{"type":7,"value":99369,"toc":100100},[99370,99373,99376,99379,99382,99385,99388,99391,99394,99503,99506,99509,100097],[10,99371,99367],{"id":99372},"_8数组分割",[14,99374,99375],{},"split分割",[14,99377,99378],{},"numpy.split(ary,indics_or_sections,axis)",[14,99380,99381],{},"解释：",[14,99383,99384],{},"ary:被分割的数组",[14,99386,99387],{},"indics_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置(左开右闭)",[14,99389,99390],{},"axis:沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分",[14,99392,99393],{},"①一维数组的分割",[97,99395,99397],{"className":30372,"code":99396,"language":30374,"meta":25,"style":25},"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",[103,99398,99399,99415,99420,99429,99433,99438,99446,99450,99455,99460,99473,99477,99482,99494,99498],{"__ignoreMap":25},[106,99400,99401,99403,99405,99407,99409,99411,99413],{"class":108,"line":109},[106,99402,355],{"class":116},[106,99404,162],{"class":112},[106,99406,92996],{"class":116},[106,99408,334],{"class":165},[106,99410,495],{"class":116},[106,99412,537],{"class":165},[106,99414,123],{"class":116},[106,99416,99417],{"class":108,"line":28},[106,99418,99419],{"class":175},"#如果传入整数，必须能够平分，否则会报错\n",[106,99421,99422,99425,99427],{"class":108,"line":1172},[106,99423,99424],{"class":116},"np.split(a,",[106,99426,194],{"class":165},[106,99428,123],{"class":116},[106,99430,99431],{"class":108,"line":1187},[106,99432,93558],{"class":175},[106,99434,99435],{"class":108,"line":1193},[106,99436,99437],{"class":175},"#[array([1, 2, 3, 4]), array([5, 6, 7, 8])]\n",[106,99439,99440,99442,99444],{"class":108,"line":1207},[106,99441,99424],{"class":116},[106,99443,410],{"class":165},[106,99445,123],{"class":116},[106,99447,99448],{"class":108,"line":1213},[106,99449,93558],{"class":175},[106,99451,99452],{"class":108,"line":1304},[106,99453,99454],{"class":175},"#[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]\n",[106,99456,99457],{"class":108,"line":1310},[106,99458,99459],{"class":175},"#传入数组\n",[106,99461,99462,99465,99467,99469,99471],{"class":108,"line":1322},[106,99463,99464],{"class":116},"np.split(a,[",[106,99466,188],{"class":165},[106,99468,495],{"class":116},[106,99470,436],{"class":165},[106,99472,4649],{"class":116},[106,99474,99475],{"class":108,"line":1604},[106,99476,93558],{"class":175},[106,99478,99479],{"class":108,"line":1609},[106,99480,99481],{"class":175},"#[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]\n",[106,99483,99484,99486,99488,99490,99492],{"class":108,"line":1615},[106,99485,99464],{"class":116},[106,99487,436],{"class":165},[106,99489,495],{"class":116},[106,99491,486],{"class":165},[106,99493,4649],{"class":116},[106,99495,99496],{"class":108,"line":1620},[106,99497,93558],{"class":175},[106,99499,99500],{"class":108,"line":1634},[106,99501,99502],{"class":175},"#[array([1, 2, 3, 4, 5]), array([6, 7]), array([8])]\n",[14,99504,99505],{},"②二维数组的分割",[14,99507,99508],{},"使用split()",[97,99510,99512],{"className":30372,"code":99511,"language":30374,"meta":25,"style":25},"#二维数组分割\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",[103,99513,99514,99519,99543,99548,99557,99561,99565,99570,99575,99580,99585,99590,99595,99600,99604,99617,99621,99625,99629,99633,99637,99642,99647,99652,99656,99661,99677,99681,99685,99690,99695,99700,99705,99710,99715,99720,99725,99730,99735,99740,99745,99750,99755,99760,99765,99770,99775,99779,99783,99803,99807,99811,99816,99821,99826,99831,99836,99841,99846,99851,99856,99861,99866,99871,99876,99881,99886,99891,99896,99901,99905,99910,99919,99923,99927,99931,99935,99939,99943,99947,99951,99955,99964,99968,99972,99976,99980,99984,99988,99992,99996,100000,100004,100008,100012,100016,100020,100024,100028,100032,100036,100040,100044,100048,100061,100065,100069,100073,100077,100081,100085,100089,100093],{"__ignoreMap":25},[106,99515,99516],{"class":108,"line":109},[106,99517,99518],{"class":175},"#二维数组分割\n",[106,99520,99521,99523,99525,99527,99529,99531,99533,99535,99537,99539,99541],{"class":108,"line":28},[106,99522,93300],{"class":116},[106,99524,162],{"class":112},[106,99526,92996],{"class":116},[106,99528,334],{"class":165},[106,99530,495],{"class":116},[106,99532,442],{"class":165},[106,99534,93001],{"class":116},[106,99536,461],{"class":165},[106,99538,495],{"class":116},[106,99540,461],{"class":165},[106,99542,123],{"class":116},[106,99544,99545],{"class":108,"line":1172},[106,99546,99547],{"class":175},"#默认axis=0  传入整数平均分,按行来的\n",[106,99549,99550,99553,99555],{"class":108,"line":1187},[106,99551,99552],{"class":116},"np.split(aa,",[106,99554,188],{"class":165},[106,99556,123],{"class":116},[106,99558,99559],{"class":108,"line":1193},[106,99560,95749],{"class":175},[106,99562,99563],{"class":108,"line":1207},[106,99564,93922],{"class":221},[106,99566,99567],{"class":108,"line":1213},[106,99568,99569],{"class":221},"[array([[ 1,  2,  3,  4,  5,  6],\n",[106,99571,99572],{"class":108,"line":1304},[106,99573,99574],{"class":221},"        [ 7,  8,  9, 10, 11, 12]]),\n",[106,99576,99577],{"class":108,"line":1310},[106,99578,99579],{"class":221}," array([[13, 14, 15, 16, 17, 18],\n",[106,99581,99582],{"class":108,"line":1322},[106,99583,99584],{"class":221},"        [19, 20, 21, 22, 23, 24]]),\n",[106,99586,99587],{"class":108,"line":1604},[106,99588,99589],{"class":221}," array([[25, 26, 27, 28, 29, 30],\n",[106,99591,99592],{"class":108,"line":1609},[106,99593,99594],{"class":221},"        [31, 32, 33, 34, 35, 36]])]\n",[106,99596,99597],{"class":108,"line":1615},[106,99598,99599],{"class":221}," '''\n",[106,99601,99602],{"class":108,"line":1620},[106,99603,99459],{"class":175},[106,99605,99606,99609,99611,99613,99615],{"class":108,"line":1634},[106,99607,99608],{"class":116},"np.split(aa,[",[106,99610,194],{"class":165},[106,99612,495],{"class":116},[106,99614,436],{"class":165},[106,99616,4649],{"class":116},[106,99618,99619],{"class":108,"line":1639},[106,99620,95749],{"class":175},[106,99622,99623],{"class":108,"line":1645},[106,99624,93922],{"class":221},[106,99626,99627],{"class":108,"line":1666},[106,99628,99569],{"class":221},[106,99630,99631],{"class":108,"line":1671},[106,99632,99574],{"class":221},[106,99634,99635],{"class":108,"line":1685},[106,99636,99579],{"class":221},[106,99638,99639],{"class":108,"line":1690},[106,99640,99641],{"class":221},"        [19, 20, 21, 22, 23, 24],\n",[106,99643,99644],{"class":108,"line":1719},[106,99645,99646],{"class":221},"        [25, 26, 27, 28, 29, 30]]),\n",[106,99648,99649],{"class":108,"line":1724},[106,99650,99651],{"class":221}," array([[31, 32, 33, 34, 35, 36]])]\n",[106,99653,99654],{"class":108,"line":1741},[106,99655,93922],{"class":221},[106,99657,99658],{"class":108,"line":1746},[106,99659,99660],{"class":175},"#axis=1 按照列来分\n",[106,99662,99663,99665,99667,99669,99671,99673,99675],{"class":108,"line":1751},[106,99664,99552],{"class":116},[106,99666,188],{"class":165},[106,99668,495],{"class":116},[106,99670,47508],{"class":5209},[106,99672,162],{"class":112},[106,99674,334],{"class":165},[106,99676,123],{"class":116},[106,99678,99679],{"class":108,"line":1756},[106,99680,95749],{"class":175},[106,99682,99683],{"class":108,"line":1770},[106,99684,93922],{"class":221},[106,99686,99687],{"class":108,"line":1775},[106,99688,99689],{"class":221},"[array([[ 1,  2],\n",[106,99691,99692],{"class":108,"line":2569},[106,99693,99694],{"class":221},"        [ 7,  8],\n",[106,99696,99697],{"class":108,"line":2583},[106,99698,99699],{"class":221},"        [13, 14],\n",[106,99701,99702],{"class":108,"line":2591},[106,99703,99704],{"class":221},"        [19, 20],\n",[106,99706,99707],{"class":108,"line":2596},[106,99708,99709],{"class":221},"        [25, 26],\n",[106,99711,99712],{"class":108,"line":2602},[106,99713,99714],{"class":221},"        [31, 32]]),\n",[106,99716,99717],{"class":108,"line":2608},[106,99718,99719],{"class":221}," array([[ 3,  4],\n",[106,99721,99722],{"class":108,"line":2613},[106,99723,99724],{"class":221},"        [ 9, 10],\n",[106,99726,99727],{"class":108,"line":7941},[106,99728,99729],{"class":221},"        [15, 16],\n",[106,99731,99732],{"class":108,"line":7965},[106,99733,99734],{"class":221},"        [21, 22],\n",[106,99736,99737],{"class":108,"line":7970},[106,99738,99739],{"class":221},"        [27, 28],\n",[106,99741,99742],{"class":108,"line":7976},[106,99743,99744],{"class":221},"        [33, 34]]),\n",[106,99746,99747],{"class":108,"line":8003},[106,99748,99749],{"class":221}," array([[ 5,  6],\n",[106,99751,99752],{"class":108,"line":8008},[106,99753,99754],{"class":221},"        [11, 12],\n",[106,99756,99757],{"class":108,"line":8014},[106,99758,99759],{"class":221},"        [17, 18],\n",[106,99761,99762],{"class":108,"line":8026},[106,99763,99764],{"class":221},"        [23, 24],\n",[106,99766,99767],{"class":108,"line":8038},[106,99768,99769],{"class":221},"        [29, 30],\n",[106,99771,99772],{"class":108,"line":8050},[106,99773,99774],{"class":221},"        [35, 36]])]\n",[106,99776,99777],{"class":108,"line":9709},[106,99778,99599],{"class":221},[106,99780,99781],{"class":108,"line":9734},[106,99782,99459],{"class":175},[106,99784,99785,99787,99789,99791,99793,99795,99797,99799,99801],{"class":108,"line":9757},[106,99786,99608],{"class":116},[106,99788,334],{"class":165},[106,99790,495],{"class":116},[106,99792,194],{"class":165},[106,99794,41603],{"class":116},[106,99796,47508],{"class":5209},[106,99798,162],{"class":112},[106,99800,334],{"class":165},[106,99802,123],{"class":116},[106,99804,99805],{"class":108,"line":9781},[106,99806,93558],{"class":175},[106,99808,99809],{"class":108,"line":9786},[106,99810,93922],{"class":221},[106,99812,99813],{"class":108,"line":9791},[106,99814,99815],{"class":221},"[array([[ 1],\n",[106,99817,99818],{"class":108,"line":9796},[106,99819,99820],{"class":221},"        [ 7],\n",[106,99822,99823],{"class":108,"line":9805},[106,99824,99825],{"class":221},"        [13],\n",[106,99827,99828],{"class":108,"line":9810},[106,99829,99830],{"class":221},"        [19],\n",[106,99832,99833],{"class":108,"line":9816},[106,99834,99835],{"class":221},"        [25],\n",[106,99837,99838],{"class":108,"line":9837},[106,99839,99840],{"class":221},"        [31]]),\n",[106,99842,99843],{"class":108,"line":9843},[106,99844,99845],{"class":221}," array([[ 2],\n",[106,99847,99848],{"class":108,"line":9857},[106,99849,99850],{"class":221},"        [ 8],\n",[106,99852,99853],{"class":108,"line":9863},[106,99854,99855],{"class":221},"        [14],\n",[106,99857,99858],{"class":108,"line":9890},[106,99859,99860],{"class":221},"        [20],\n",[106,99862,99863],{"class":108,"line":9899},[106,99864,99865],{"class":221},"        [26],\n",[106,99867,99868],{"class":108,"line":9905},[106,99869,99870],{"class":221},"        [32]]),\n",[106,99872,99873],{"class":108,"line":9913},[106,99874,99875],{"class":221}," array([[ 3,  4,  5,  6],\n",[106,99877,99878],{"class":108,"line":9918},[106,99879,99880],{"class":221},"        [ 9, 10, 11, 12],\n",[106,99882,99883],{"class":108,"line":16597},[106,99884,99885],{"class":221},"        [15, 16, 17, 18],\n",[106,99887,99888],{"class":108,"line":16603},[106,99889,99890],{"class":221},"        [21, 22, 23, 24],\n",[106,99892,99893],{"class":108,"line":16626},[106,99894,99895],{"class":221},"        [27, 28, 29, 30],\n",[106,99897,99898],{"class":108,"line":16632},[106,99899,99900],{"class":221},"        [33, 34, 35, 36]])]\n",[106,99902,99903],{"class":108,"line":16655},[106,99904,93922],{"class":221},[106,99906,99907],{"class":108,"line":16669},[106,99908,99909],{"class":175},"#在处理二维数组时也可以直接用vsplit()和hsplit()函数\n",[106,99911,99912,99915,99917],{"class":108,"line":16689},[106,99913,99914],{"class":116},"np.vsplit(aa,",[106,99916,188],{"class":165},[106,99918,123],{"class":116},[106,99920,99921],{"class":108,"line":16695},[106,99922,93558],{"class":175},[106,99924,99925],{"class":108,"line":16706},[106,99926,93922],{"class":221},[106,99928,99929],{"class":108,"line":16729},[106,99930,99569],{"class":221},[106,99932,99933],{"class":108,"line":16751},[106,99934,99574],{"class":221},[106,99936,99937],{"class":108,"line":16756},[106,99938,99579],{"class":221},[106,99940,99941],{"class":108,"line":16762},[106,99942,99584],{"class":221},[106,99944,99945],{"class":108,"line":16776},[106,99946,99589],{"class":221},[106,99948,99949],{"class":108,"line":16789},[106,99950,99594],{"class":221},[106,99952,99953],{"class":108,"line":16794},[106,99954,93922],{"class":221},[106,99956,99957,99960,99962],{"class":108,"line":16808},[106,99958,99959],{"class":116},"np.hsplit(aa,",[106,99961,188],{"class":165},[106,99963,123],{"class":116},[106,99965,99966],{"class":108,"line":16813},[106,99967,93558],{"class":175},[106,99969,99970],{"class":108,"line":16819},[106,99971,93922],{"class":221},[106,99973,99974],{"class":108,"line":16824},[106,99975,99689],{"class":221},[106,99977,99978],{"class":108,"line":16838},[106,99979,99694],{"class":221},[106,99981,99982],{"class":108,"line":16843},[106,99983,99699],{"class":221},[106,99985,99986],{"class":108,"line":16848},[106,99987,99704],{"class":221},[106,99989,99990],{"class":108,"line":16862},[106,99991,99709],{"class":221},[106,99993,99994],{"class":108,"line":16874},[106,99995,99714],{"class":221},[106,99997,99998],{"class":108,"line":16879},[106,99999,99719],{"class":221},[106,100001,100002],{"class":108,"line":16892},[106,100003,99724],{"class":221},[106,100005,100006],{"class":108,"line":16897},[106,100007,99729],{"class":221},[106,100009,100010],{"class":108,"line":16902},[106,100011,99734],{"class":221},[106,100013,100014],{"class":108,"line":16907},[106,100015,99739],{"class":221},[106,100017,100018],{"class":108,"line":16920},[106,100019,99744],{"class":221},[106,100021,100022],{"class":108,"line":16925},[106,100023,99749],{"class":221},[106,100025,100026],{"class":108,"line":32627},[106,100027,99754],{"class":221},[106,100029,100030],{"class":108,"line":32633},[106,100031,99759],{"class":221},[106,100033,100034],{"class":108,"line":32639},[106,100035,99764],{"class":221},[106,100037,100038],{"class":108,"line":32645},[106,100039,99769],{"class":221},[106,100041,100042],{"class":108,"line":32651},[106,100043,99774],{"class":221},[106,100045,100046],{"class":108,"line":32662},[106,100047,93922],{"class":221},[106,100049,100050,100053,100055,100057,100059],{"class":108,"line":32668},[106,100051,100052],{"class":116},"np.vsplit(aa,[",[106,100054,194],{"class":165},[106,100056,495],{"class":116},[106,100058,436],{"class":165},[106,100060,4649],{"class":116},[106,100062,100063],{"class":108,"line":32688},[106,100064,93558],{"class":175},[106,100066,100067],{"class":108,"line":32694},[106,100068,93922],{"class":221},[106,100070,100071],{"class":108,"line":32705},[106,100072,99569],{"class":221},[106,100074,100075],{"class":108,"line":32711},[106,100076,99574],{"class":221},[106,100078,100079],{"class":108,"line":32717},[106,100080,99579],{"class":221},[106,100082,100083],{"class":108,"line":32723},[106,100084,99641],{"class":221},[106,100086,100087],{"class":108,"line":32729},[106,100088,99646],{"class":221},[106,100090,100091],{"class":108,"line":32735},[106,100092,99651],{"class":221},[106,100094,100095],{"class":108,"line":32741},[106,100096,99599],{"class":221},[5119,100098,100099],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":28,"depth":28,"links":100101},[],{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch8",{"title":99367,"description":30},"wiki\u002F2025-08-14-numpy\u002Fch8-数组分割","EtL2Bly4jiNepAsv1SVPdwecsVcwy45QHq2yubCBEUA",{"id":100108,"title":100109,"body":100110,"description":30,"extension":31,"meta":100604,"navigation":33,"path":100605,"seo":100606,"stem":100607,"__hash__":100608},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Fch9-数学函数.md","9.数学函数",{"type":7,"value":100111,"toc":100595},[100112,100115,100118,100143,100147,100206,100258,100262,100264,100300,100354,100356,100394,100465,100469,100474,100478,100481,100514,100517,100521,100524,100527,100530,100533,100538,100542,100545,100548,100551,100554,100559,100563,100568,100571,100592],[10,100113,100109],{"id":100114},"_9数学函数",[14,100116,100117],{},"补充回顾：python的列表推导式",[97,100119,100121],{"className":30372,"code":100120,"language":30374,"meta":25,"style":25},"[1\u002Fi for i in a]\n",[103,100122,100123],{"__ignoreMap":25},[106,100124,100125,100127,100129,100131,100134,100136,100138,100140],{"class":108,"line":109},[106,100126,1007],{"class":116},[106,100128,334],{"class":165},[106,100130,701],{"class":112},[106,100132,100133],{"class":116},"i ",[106,100135,3017],{"class":112},[106,100137,9431],{"class":116},[106,100139,26037],{"class":112},[106,100141,100142],{"class":116}," a]\n",[48,100144,100146],{"id":100145},"_91-求倒数","9.1 求倒数",[97,100148,100150],{"className":30372,"code":100149,"language":30374,"meta":25,"style":25},"#数组求倒数\na=[1,2,3,4,5]\nb=np.array(a)#将列表转换为数组\n1\u002Fb\n",[103,100151,100152,100157,100185,100197],{"__ignoreMap":25},[106,100153,100154],{"class":108,"line":109},[106,100155,100156],{"class":175},"#数组求倒数\n",[106,100158,100159,100161,100163,100165,100167,100169,100171,100173,100175,100177,100179,100181,100183],{"class":108,"line":28},[106,100160,355],{"class":116},[106,100162,162],{"class":112},[106,100164,1007],{"class":116},[106,100166,334],{"class":165},[106,100168,495],{"class":116},[106,100170,194],{"class":165},[106,100172,495],{"class":116},[106,100174,188],{"class":165},[106,100176,495],{"class":116},[106,100178,410],{"class":165},[106,100180,495],{"class":116},[106,100182,436],{"class":165},[106,100184,33240],{"class":116},[106,100186,100187,100189,100191,100194],{"class":108,"line":1172},[106,100188,380],{"class":116},[106,100190,162],{"class":112},[106,100192,100193],{"class":116},"np.array(a)",[106,100195,100196],{"class":175},"#将列表转换为数组\n",[106,100198,100199,100201,100203],{"class":108,"line":1187},[106,100200,334],{"class":165},[106,100202,701],{"class":112},[106,100204,100205],{"class":116},"b\n",[97,100207,100209],{"className":30372,"code":100208,"language":30374,"meta":25,"style":25},"a=[1,2,3,4,5]\nb=np.array(a)\n#调用numpy中的函数reciprocal()\nnp.reciprocal(b)\n",[103,100210,100211,100239,100248,100253],{"__ignoreMap":25},[106,100212,100213,100215,100217,100219,100221,100223,100225,100227,100229,100231,100233,100235,100237],{"class":108,"line":109},[106,100214,355],{"class":116},[106,100216,162],{"class":112},[106,100218,1007],{"class":116},[106,100220,334],{"class":165},[106,100222,495],{"class":116},[106,100224,194],{"class":165},[106,100226,495],{"class":116},[106,100228,188],{"class":165},[106,100230,495],{"class":116},[106,100232,410],{"class":165},[106,100234,495],{"class":116},[106,100236,436],{"class":165},[106,100238,33240],{"class":116},[106,100240,100241,100243,100245],{"class":108,"line":28},[106,100242,380],{"class":116},[106,100244,162],{"class":112},[106,100246,100247],{"class":116},"np.array(a)\n",[106,100249,100250],{"class":108,"line":1172},[106,100251,100252],{"class":175},"#调用numpy中的函数reciprocal()\n",[106,100254,100255],{"class":108,"line":1187},[106,100256,100257],{"class":116},"np.reciprocal(b)\n",[48,100259,100261],{"id":100260},"_92-求平方","9.2 求平方",[14,100263,94524],{},[97,100265,100267],{"className":30372,"code":100266,"language":30374,"meta":25,"style":25},"#square()，求平方\n#一维数组\na=np.arange(1,10)\nnp.square(a)\n",[103,100268,100269,100274,100279,100295],{"__ignoreMap":25},[106,100270,100271],{"class":108,"line":109},[106,100272,100273],{"class":175},"#square()，求平方\n",[106,100275,100276],{"class":108,"line":28},[106,100277,100278],{"class":175},"#一维数组\n",[106,100280,100281,100283,100285,100287,100289,100291,100293],{"class":108,"line":1172},[106,100282,355],{"class":116},[106,100284,162],{"class":112},[106,100286,92996],{"class":116},[106,100288,334],{"class":165},[106,100290,495],{"class":116},[106,100292,563],{"class":165},[106,100294,123],{"class":116},[106,100296,100297],{"class":108,"line":1187},[106,100298,100299],{"class":116},"np.square(a)\n",[97,100301,100303],{"className":30372,"code":100302,"language":30374,"meta":25,"style":25},"#或者通过循环遍历的形式来计算\n#这是一个列表\n[i*i for i in a]#这个求完之后在数列当中\nnp.array([i*i for i in a])\n",[103,100304,100305,100310,100315,100336],{"__ignoreMap":25},[106,100306,100307],{"class":108,"line":109},[106,100308,100309],{"class":175},"#或者通过循环遍历的形式来计算\n",[106,100311,100312],{"class":108,"line":28},[106,100313,100314],{"class":175},"#这是一个列表\n",[106,100316,100317,100320,100322,100324,100326,100328,100330,100333],{"class":108,"line":1172},[106,100318,100319],{"class":116},"[i",[106,100321,572],{"class":112},[106,100323,100133],{"class":116},[106,100325,3017],{"class":112},[106,100327,9431],{"class":116},[106,100329,26037],{"class":112},[106,100331,100332],{"class":116}," a]",[106,100334,100335],{"class":175},"#这个求完之后在数列当中\n",[106,100337,100338,100341,100343,100345,100347,100349,100351],{"class":108,"line":1187},[106,100339,100340],{"class":116},"np.array([i",[106,100342,572],{"class":112},[106,100344,100133],{"class":116},[106,100346,3017],{"class":112},[106,100348,9431],{"class":116},[106,100350,26037],{"class":112},[106,100352,100353],{"class":116}," a])\n",[14,100355,93285],{},[97,100357,100359],{"className":30372,"code":100358,"language":30374,"meta":25,"style":25},"#二维数组\naa=np.arange(1,13).reshape(4,3)\nnp.square(aa)\n",[103,100360,100361,100365,100389],{"__ignoreMap":25},[106,100362,100363],{"class":108,"line":109},[106,100364,93295],{"class":175},[106,100366,100367,100369,100371,100373,100375,100377,100379,100381,100383,100385,100387],{"class":108,"line":28},[106,100368,93300],{"class":116},[106,100370,162],{"class":112},[106,100372,92996],{"class":116},[106,100374,334],{"class":165},[106,100376,495],{"class":116},[106,100378,640],{"class":165},[106,100380,93001],{"class":116},[106,100382,410],{"class":165},[106,100384,495],{"class":116},[106,100386,188],{"class":165},[106,100388,123],{"class":116},[106,100390,100391],{"class":108,"line":1172},[106,100392,100393],{"class":116},"np.square(aa)\n",[97,100395,100397],{"className":30372,"code":100396,"language":30374,"meta":25,"style":25},"#传统的方式\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",[103,100398,100399,100404,100413,100429,100445,100460],{"__ignoreMap":25},[106,100400,100401],{"class":108,"line":109},[106,100402,100403],{"class":175},"#传统的方式\n",[106,100405,100406,100408,100410],{"class":108,"line":28},[106,100407,98172],{"class":116},[106,100409,162],{"class":112},[106,100411,100412],{"class":116},"np.empty_like(aa)\n",[106,100414,100415,100417,100419,100421,100423,100425,100427],{"class":108,"line":1172},[106,100416,3017],{"class":112},[106,100418,9431],{"class":116},[106,100420,26037],{"class":112},[106,100422,32437],{"class":165},[106,100424,117],{"class":116},[106,100426,410],{"class":165},[106,100428,30780],{"class":116},[106,100430,100431,100433,100435,100437,100439,100441,100443],{"class":108,"line":1187},[106,100432,3193],{"class":112},[106,100434,9493],{"class":116},[106,100436,26037],{"class":112},[106,100438,32437],{"class":165},[106,100440,117],{"class":116},[106,100442,188],{"class":165},[106,100444,30780],{"class":116},[106,100446,100447,100450,100452,100455,100457],{"class":108,"line":1193},[106,100448,100449],{"class":116},"        bb[i,j]",[106,100451,162],{"class":112},[106,100453,100454],{"class":116},"aa[i,j]",[106,100456,572],{"class":112},[106,100458,100459],{"class":116},"aa[i,j]\n",[106,100461,100462],{"class":108,"line":1207},[106,100463,100464],{"class":116},"bb\n",[48,100466,100468],{"id":100467},"_93-求各元素的符号","9.3 求各元素的符号",[14,100470,100471],{},[23,100472],{"alt":25,"src":100473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-028.png",[48,100475,100477],{"id":100476},"_94-modf函数","9.4 modf函数",[14,100479,100480],{},"计算各元素的小数部分和整数部分以两个独立的数组返回",[97,100482,100484],{"className":30372,"code":100483,"language":30374,"meta":25,"style":25},"a=np.arange(-10,10,0.3)\nnp.modf(a)\n",[103,100485,100486,100509],{"__ignoreMap":25},[106,100487,100488,100490,100492,100494,100496,100498,100500,100502,100504,100507],{"class":108,"line":109},[106,100489,355],{"class":116},[106,100491,162],{"class":112},[106,100493,92996],{"class":116},[106,100495,649],{"class":112},[106,100497,563],{"class":165},[106,100499,495],{"class":116},[106,100501,563],{"class":165},[106,100503,495],{"class":116},[106,100505,100506],{"class":165},"0.3",[106,100508,123],{"class":116},[106,100510,100511],{"class":108,"line":28},[106,100512,100513],{"class":116},"np.modf(a)\n",[14,100515,100516],{},"总结：就是得到两个数组，一个是由小数部分组成，另一个数组是由整数部分组成",[48,100518,100520],{"id":100519},"_95-向上取整向下取整四舍五入","9.5 向上取整、向下取整、四舍五入",[14,100522,100523],{},"np.cell()",[14,100525,100526],{},"np.floor()",[14,100528,100529],{},"np.rint()",[14,100531,100532],{},"对各元素分别向上取整、向下取整、四舍五入",[14,100534,100535],{},[23,100536],{"alt":25,"src":100537},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-029.png",[48,100539,100541],{"id":100540},"_96-around函数","9.6 around()函数",[14,100543,100544],{},"around()函数也可以实现对数的小数位数进行操作",[14,100546,100547],{},"其中的参数：",[14,100549,100550],{},"1.要传的数组",[14,100552,100553],{},"2.decimals:舍入的小数位数。默认值为0。如果为负，整数将四舍五入到小数点左侧的位置",[14,100555,100556],{},[23,100557],{"alt":25,"src":100558},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-030.png",[48,100560,100562],{"id":100561},"_97-三角函数","9.7 三角函数",[14,100564,100565],{},[23,100566],{"alt":25,"src":100567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-08-14-numpy-031.png",[14,100569,100570],{},"引入图像模块非常重要",[97,100572,100574],{"className":30372,"code":100573,"language":30374,"meta":25,"style":25},"from matplotlib import pyplot as plt\n",[103,100575,100576],{"__ignoreMap":25},[106,100577,100578,100580,100583,100585,100588,100590],{"class":108,"line":109},[106,100579,30731],{"class":112},[106,100581,100582],{"class":116}," matplotlib ",[106,100584,30386],{"class":112},[106,100586,100587],{"class":116}," pyplot ",[106,100589,31377],{"class":112},[106,100591,31431],{"class":116},[5119,100593,100594],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":25,"searchDepth":28,"depth":28,"links":100596},[100597,100598,100599,100600,100601,100602,100603],{"id":100145,"depth":28,"text":100146},{"id":100260,"depth":28,"text":100261},{"id":100467,"depth":28,"text":100468},{"id":100476,"depth":28,"text":100477},{"id":100519,"depth":28,"text":100520},{"id":100540,"depth":28,"text":100541},{"id":100561,"depth":28,"text":100562},{},"\u002Fwiki\u002F2025-08-14-numpy\u002Fch9",{"title":100109,"description":30},"wiki\u002F2025-08-14-numpy\u002Fch9-数学函数","1vxUPQoUv_FZuP3od2FOv2EdjAo9vkX9v0c_KhgwghE",{"id":100610,"title":100611,"body":100612,"description":30,"extension":31,"meta":100616,"navigation":33,"path":100617,"seo":100618,"stem":100619,"__hash__":100620},"wiki\u002Fwiki\u002F2025-08-14-numpy\u002Findex.md","numpy",{"type":7,"value":100613,"toc":100614},[],{"title":25,"searchDepth":28,"depth":28,"links":100615},[],{"category":50414},"\u002Fwiki\u002F2025-08-14-numpy",{"title":100611,"description":30},"wiki\u002F2025-08-14-numpy\u002Findex","LNFBKvmcgRD1D7XQFRHkBXoHVybQyN9jvfse3YyadCE",{"id":100622,"title":100623,"body":100624,"description":25,"extension":31,"meta":102632,"navigation":33,"path":102633,"seo":102634,"stem":102635,"__hash__":102636},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序.md","1.环境安装与第一个 MuJoCo 程序",{"type":7,"value":100625,"toc":102608},[100626,100629,100633,100636,100639,100645,100648,100671,100674,100708,100711,100752,100756,100759,100852,100855,100899,100902,100919,100922,100936,100939,100942,100987,100990,101027,101031,101034,101040,101045,101065,101069,101072,101138,101141,101159,101163,101166,101195,101205,101211,101215,101218,101224,101235,101239,101242,101272,101275,101555,101558,101561,101572,101575,101578,101600,101607,101610,101628,101631,101634,101648,101656,101659,101685,101691,101694,101697,101707,101719,101739,101748,101768,101778,101802,101815,101829,101834,101875,101892,101917,101929,101949,101955,102000,102019,102036,102049,102065,102072,102084,102093,102128,102149,102174,102187,102211,102226,102251,102254,102275,102284,102287,102298,102302,102305,102311,102323,102330,102334,102337,102349,102352,102366,102369,102379,102389,102392,102432,102435,102439,102445,102448,102462,102466,102469,102502,102506,102509,102532,102540,102543,102549,102555,102558,102561,102589,102593,102596,102602,102605],[10,100627,100623],{"id":100628},"_1环境安装与第一个-mujoco-程序",[48,100630,100632],{"id":100631},"_1目标说明","1.目标说明",[14,100634,100635],{},"本章完成 MuJoCo 官方 Python bindings 的安装，并运行第一个最小仿真程序。这个程序只做一件事：创建一个红色小方块，让它在重力作用下下落。",[14,100637,100638],{},"如果你是纯新手，本章最重要的目标不是记住所有安装命令，而是理解 MuJoCo 程序的最小闭环：",[97,100640,100643],{"className":100641,"code":100642,"language":5180,"meta":25},[5178],"写 XML\n→ 编译成 model\n→ 创建 data\n→ 调用 mj_step\n→ 读取仿真状态\n",[103,100644,100642],{"__ignoreMap":25},[14,100646,100647],{},"需要掌握:",[60,100649,100650,100653,100656,100661,100666],{},[63,100651,100652],{},"Fedora 44 下 MuJoCo 的系统依赖",[63,100654,100655],{},"Python 虚拟环境创建",[63,100657,100658],{},[103,100659,100660],{},"mujoco.MjModel",[63,100662,100663],{},[103,100664,100665],{},"mujoco.MjData",[63,100667,100668],{},[103,100669,100670],{},"mujoco.mj_step(model, data)",[14,100672,100673],{},"MuJoCo 中最重要的两个对象:",[254,100675,100676,100686],{},[257,100677,100678],{},[260,100679,100680,100683],{},[263,100681,100682],{"align":23729},"对象",[263,100684,100685],{"align":23729},"含义",[301,100687,100688,100698],{},[260,100689,100690,100695],{},[306,100691,100692],{"align":23729},[103,100693,100694],{},"MjModel",[306,100696,100697],{"align":23729},"模型结构，来自 XML，基本不随时间变化",[260,100699,100700,100705],{},[306,100701,100702],{"align":23729},[103,100703,100704],{},"MjData",[306,100706,100707],{"align":23729},"仿真状态，包含位置、速度、力、时间等，会随仿真推进变化",[14,100709,100710],{},"可以先用一个类比理解：",[254,100712,100713,100723],{},[257,100714,100715],{},[260,100716,100717,100720],{},[263,100718,100719],{"align":23729},"类比",[263,100721,100722],{"align":23729},"MuJoCo 对象",[301,100724,100725,100734,100743],{},[260,100726,100727,100730],{},[306,100728,100729],{"align":23729},"游戏地图和角色配置",[306,100731,100732],{"align":23729},[103,100733,100694],{},[260,100735,100736,100739],{},[306,100737,100738],{"align":23729},"游戏运行到当前帧的状态",[306,100740,100741],{"align":23729},[103,100742,100704],{},[260,100744,100745,100748],{},[306,100746,100747],{"align":23729},"前进一帧",[306,100749,100750],{"align":23729},[103,100751,100670],{},[48,100753,100755],{"id":100754},"_2环境与依赖安装","2.环境与依赖安装",[14,100757,100758],{},"Fedora 44 系统依赖:",[97,100760,100762],{"className":23815,"code":100761,"language":23817,"meta":25,"style":25},"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",[103,100763,100764,100776,100789,100802,100812,100822,100841],{"__ignoreMap":25},[106,100765,100766,100768,100770,100772,100774],{"class":108,"line":109},[106,100767,24570],{"class":1955},[106,100769,26309],{"class":221},[106,100771,23827],{"class":221},[106,100773,26394],{"class":165},[106,100775,24672],{"class":165},[106,100777,100778,100781,100784,100787],{"class":108,"line":28},[106,100779,100780],{"class":221},"  python3",[106,100782,100783],{"class":221}," python3-pip",[106,100785,100786],{"class":221}," python3-virtualenv",[106,100788,24672],{"class":165},[106,100790,100791,100794,100797,100800],{"class":108,"line":1172},[106,100792,100793],{"class":221},"  mesa-libGL",[106,100795,100796],{"class":221}," mesa-libGLU",[106,100798,100799],{"class":221}," mesa-dri-drivers",[106,100801,24672],{"class":165},[106,100803,100804,100807,100810],{"class":108,"line":1187},[106,100805,100806],{"class":221},"  libglvnd-glx",[106,100808,100809],{"class":221}," libglvnd-opengl",[106,100811,24672],{"class":165},[106,100813,100814,100817,100820],{"class":108,"line":1193},[106,100815,100816],{"class":221},"  glfw",[106,100818,100819],{"class":221}," glfw-devel",[106,100821,24672],{"class":165},[106,100823,100824,100827,100830,100833,100836,100839],{"class":108,"line":1207},[106,100825,100826],{"class":221},"  libX11",[106,100828,100829],{"class":221}," libXcursor",[106,100831,100832],{"class":221}," libXi",[106,100834,100835],{"class":221}," libXinerama",[106,100837,100838],{"class":221}," libXrandr",[106,100840,24672],{"class":165},[106,100842,100843,100846,100849],{"class":108,"line":1213},[106,100844,100845],{"class":221},"  gcc",[106,100847,100848],{"class":221}," gcc-c++",[106,100850,100851],{"class":221}," make\n",[14,100853,100854],{},"创建 Python 环境:",[97,100856,100858],{"className":23815,"code":100857,"language":23817,"meta":25,"style":25},"python3 -m venv .venv\nsource .venv\u002Fbin\u002Factivate\npython -m pip install --upgrade pip\n",[103,100859,100860,100874,100882],{"__ignoreMap":25},[106,100861,100862,100865,100868,100871],{"class":108,"line":109},[106,100863,100864],{"class":1955},"python3",[106,100866,100867],{"class":165}," -m",[106,100869,100870],{"class":221}," venv",[106,100872,100873],{"class":221}," .venv\n",[106,100875,100876,100879],{"class":108,"line":28},[106,100877,100878],{"class":165},"source",[106,100880,100881],{"class":221}," .venv\u002Fbin\u002Factivate\n",[106,100883,100884,100886,100888,100891,100893,100896],{"class":108,"line":1172},[106,100885,30374],{"class":1955},[106,100887,100867],{"class":165},[106,100889,100890],{"class":221}," pip",[106,100892,23827],{"class":221},[106,100894,100895],{"class":165}," --upgrade",[106,100897,100898],{"class":221}," pip\n",[14,100900,100901],{},"pip 安装:",[97,100903,100905],{"className":23815,"code":100904,"language":23817,"meta":25,"style":25},"pip install \"mujoco>=2.3\" numpy\n",[103,100906,100907],{"__ignoreMap":25},[106,100908,100909,100911,100913,100916],{"class":108,"line":109},[106,100910,23824],{"class":1955},[106,100912,23827],{"class":221},[106,100914,100915],{"class":221}," \"mujoco>=2.3\"",[106,100917,100918],{"class":221}," numpy\n",[14,100920,100921],{},"安装完成后，先做最小检查：",[97,100923,100925],{"className":23815,"code":100924,"language":23817,"meta":25,"style":25},"python -c \"import mujoco; print(mujoco.__version__)\"\n",[103,100926,100927],{"__ignoreMap":25},[106,100928,100929,100931,100933],{"class":108,"line":109},[106,100930,30374],{"class":1955},[106,100932,30352],{"class":165},[106,100934,100935],{"class":221}," \"import mujoco; print(mujoco.__version__)\"\n",[14,100937,100938],{},"只要能打印版本号，说明 Python 已经能找到 MuJoCo。",[14,100940,100941],{},"conda 安装:",[97,100943,100945],{"className":23815,"code":100944,"language":23817,"meta":25,"style":25},"conda create -n mujoco-study python=3.10 -y\nconda activate mujoco-study\npip install \"mujoco>=2.3\" numpy\n",[103,100946,100947,100967,100977],{"__ignoreMap":25},[106,100948,100949,100951,100953,100955,100958,100961,100964],{"class":108,"line":109},[106,100950,30324],{"class":1955},[106,100952,29170],{"class":221},[106,100954,25109],{"class":165},[106,100956,100957],{"class":221}," mujoco-study",[106,100959,100960],{"class":221}," python=",[106,100962,100963],{"class":165},"3.10",[106,100965,100966],{"class":165}," -y\n",[106,100968,100969,100971,100974],{"class":108,"line":28},[106,100970,30324],{"class":1955},[106,100972,100973],{"class":221}," activate",[106,100975,100976],{"class":221}," mujoco-study\n",[106,100978,100979,100981,100983,100985],{"class":108,"line":1172},[106,100980,23824],{"class":1955},[106,100982,23827],{"class":221},[106,100984,100915],{"class":221},[106,100986,100918],{"class":221},[14,100988,100989],{},"版本冲突说明:",[60,100991,100992,100998,101008,101017],{},[63,100993,100994,100995,28379],{},"不要安装 ",[103,100996,100997],{},"mujoco-py",[63,100999,101000,101001,101003,101004,101007],{},"如果旧项目里同时安装了 ",[103,101002,100997],{}," 和 ",[103,101005,101006],{},"mujoco","，建议新建干净虚拟环境。",[63,101009,101010,101013,101014,28379],{},[103,101011,101012],{},"mujoco>=2.3"," 官方 Python bindings 已包含 MuJoCo 原生库，不需要手动下载旧版 ",[103,101015,101016],{},"~\u002F.mujoco\u002Fmujoco210",[63,101018,101019,101020,82533,101023,101026],{},"离屏渲染可能涉及 OpenGL 后端，",[103,101021,101022],{},"MUJOCO_GL=egl",[103,101024,101025],{},"MUJOCO_GL=osmesa"," 在不同机器上可能存在版本差异。",[48,101028,101030],{"id":101029},"_3核心概念解释","3.核心概念解释",[14,101032,101033],{},"MuJoCo 的基本执行流程:",[97,101035,101038],{"className":101036,"code":101037,"language":5180,"meta":25},[5178],"XML 字符串\u002F文件\n→ MjModel\n→ MjData\n→ mj_step\n→ 读取 data 中的状态\n",[103,101039,101037],{"__ignoreMap":25},[14,101041,101042,101044],{},[103,101043,100694],{}," 存放模型定义，例如关节数量、几何体数量、actuator 数量、timestep、body 层级结构。",[14,101046,101047,101049,101050,329,101053,329,101056,329,101059,329,101062,28379],{},[103,101048,100704],{}," 存放仿真运行时状态，例如 ",[103,101051,101052],{},"data.time",[103,101054,101055],{},"data.qpos",[103,101057,101058],{},"data.qvel",[103,101060,101061],{},"data.ctrl",[103,101063,101064],{},"data.xpos",[77,101066,101068],{"id":101067},"xml-是什么","XML 是什么",[14,101070,101071],{},"MuJoCo 默认使用 MJCF XML 描述模型。你暂时不用完整学习 XML，只要知道它是一种带层级结构的文本格式：",[97,101073,101075],{"className":53061,"code":101074,"language":53063,"meta":25,"style":25},"\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",[103,101076,101077,101099,101130],{"__ignoreMap":25},[106,101078,101079,101081,101083,101085,101087,101089,101092,101094,101097],{"class":108,"line":109},[106,101080,1027],{"class":116},[106,101082,51794],{"class":51294},[106,101084,14913],{"class":1955},[106,101086,162],{"class":116},[106,101088,53485],{"class":221},[106,101090,101091],{"class":1955}," pos",[106,101093,162],{"class":116},[106,101095,101096],{"class":221},"\"0 0 1\"",[106,101098,51301],{"class":116},[106,101100,101101,101103,101106,101108,101110,101113,101115,101117,101119,101122,101124,101127],{"class":108,"line":28},[106,101102,52138],{"class":116},[106,101104,101105],{"class":51294},"geom",[106,101107,14913],{"class":1955},[106,101109,162],{"class":116},[106,101111,101112],{"class":221},"\"box_geom\"",[106,101114,53818],{"class":1955},[106,101116,162],{"class":116},[106,101118,53485],{"class":221},[106,101120,101121],{"class":1955}," size",[106,101123,162],{"class":116},[106,101125,101126],{"class":221},"\"0.1 0.1 0.1\"",[106,101128,101129],{"class":116},"\u002F>\n",[106,101131,101132,101134,101136],{"class":108,"line":1172},[106,101133,51779],{"class":116},[106,101135,51794],{"class":51294},[106,101137,51301],{"class":116},[14,101139,101140],{},"这段意思是：",[60,101142,101143,101149,101156],{},[63,101144,101145,101146,101148],{},"创建一个叫 ",[103,101147,53708],{}," 的刚体。",[63,101150,101151,101152,101155],{},"它初始放在 ",[103,101153,101154],{},"(0, 0, 1)","，也就是 z 轴高度为 1。",[63,101157,101158],{},"它里面有一个盒子形状的几何体。",[77,101160,101162],{"id":101161},"timestep-是什么","timestep 是什么",[14,101164,101165],{},"XML 里的：",[97,101167,101169],{"className":53061,"code":101168,"language":53063,"meta":25,"style":25},"\u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[103,101170,101171],{"__ignoreMap":25},[106,101172,101173,101175,101177,101180,101182,101185,101188,101190,101193],{"class":108,"line":109},[106,101174,1027],{"class":116},[106,101176,69160],{"class":51294},[106,101178,101179],{"class":1955}," timestep",[106,101181,162],{"class":116},[106,101183,101184],{"class":221},"\"0.01\"",[106,101186,101187],{"class":1955}," gravity",[106,101189,162],{"class":116},[106,101191,101192],{"class":221},"\"0 0 -9.81\"",[106,101194,101129],{"class":116},[14,101196,101197,101198,101201,101202,101204],{},"表示每调用一次 ",[103,101199,101200],{},"mj_step","，仿真时间前进 ",[103,101203,38980],{}," 秒。循环 100 次，大约就是 1 秒：",[97,101206,101209],{"className":101207,"code":101208,"language":5180,"meta":25},[5178],"100 steps * 0.01 second\u002Fstep = 1.0 second\n",[103,101210,101208],{"__ignoreMap":25},[77,101212,101214],{"id":101213},"为什么-freejoint-的-qpos-是-7-维","为什么 freejoint 的 qpos 是 7 维",[14,101216,101217],{},"自由物体在三维空间里可以平移和旋转。MuJoCo 用：",[97,101219,101222],{"className":101220,"code":101221,"language":5180,"meta":25},[5178],"x y z qw qx qy qz\n",[103,101223,101221],{"__ignoreMap":25},[14,101225,101226,101227,101230,101231,101234],{},"表示一个自由刚体的位置和姿态。其中 ",[103,101228,101229],{},"x y z"," 是位置，",[103,101232,101233],{},"qw qx qy qz"," 是四元数，用来表示旋转。新手不需要马上掌握四元数，只要知道它是“姿态”的表示方法。",[48,101236,101238],{"id":101237},"_4最小可运行代码mre","4.最小可运行代码（MRE）",[14,101240,101241],{},"新建文件:",[97,101243,101245],{"className":23815,"code":101244,"language":23817,"meta":25,"style":25},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\ntouch ch1_first_sim.py\n",[103,101246,101247,101257,101264],{"__ignoreMap":25},[106,101248,101249,101252,101254],{"class":108,"line":109},[106,101250,101251],{"class":1955},"mkdir",[106,101253,29210],{"class":165},[106,101255,101256],{"class":221}," mujoco_tutorial\n",[106,101258,101259,101262],{"class":108,"line":28},[106,101260,101261],{"class":165},"cd",[106,101263,101256],{"class":221},[106,101265,101266,101269],{"class":108,"line":1172},[106,101267,101268],{"class":1955},"touch",[106,101270,101271],{"class":221}," ch1_first_sim.py\n",[14,101273,101274],{},"写入:",[97,101276,101278],{"className":30372,"code":101277,"language":30374,"meta":25,"style":25},"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",[103,101279,101280,101287,101291,101295,101305,101310,101315,101319,101324,101329,101333,101338,101343,101348,101353,101358,101363,101367,101371,101375,101388,101402,101412,101416,101428,101440,101452,101464,101476,101480,101497,101502,101506,101517,101528,101532,101536,101550],{"__ignoreMap":25},[106,101281,101282,101284],{"class":108,"line":109},[106,101283,30386],{"class":112},[106,101285,101286],{"class":116}," mujoco\n",[106,101288,101289],{"class":108,"line":28},[106,101290,2392],{"emptyLinePlaceholder":33},[106,101292,101293],{"class":108,"line":1172},[106,101294,2392],{"emptyLinePlaceholder":33},[106,101296,101297,101300,101302],{"class":108,"line":1187},[106,101298,101299],{"class":165},"XML",[106,101301,13557],{"class":112},[106,101303,101304],{"class":221}," \"\"\"\n",[106,101306,101307],{"class":108,"line":1193},[106,101308,101309],{"class":221},"\u003Cmujoco model=\"first_sim\">\n",[106,101311,101312],{"class":108,"line":1207},[106,101313,101314],{"class":221},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 -9.81\"\u002F>\n",[106,101316,101317],{"class":108,"line":1213},[106,101318,2392],{"emptyLinePlaceholder":33},[106,101320,101321],{"class":108,"line":1304},[106,101322,101323],{"class":221},"  \u003Cworldbody>\n",[106,101325,101326],{"class":108,"line":1310},[106,101327,101328],{"class":221},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[106,101330,101331],{"class":108,"line":1322},[106,101332,2392],{"emptyLinePlaceholder":33},[106,101334,101335],{"class":108,"line":1604},[106,101336,101337],{"class":221},"    \u003Cbody name=\"box\" pos=\"0 0 1\">\n",[106,101339,101340],{"class":108,"line":1609},[106,101341,101342],{"class":221},"      \u003Cfreejoint name=\"box_free\"\u002F>\n",[106,101344,101345],{"class":108,"line":1615},[106,101346,101347],{"class":221},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[106,101349,101350],{"class":108,"line":1620},[106,101351,101352],{"class":221},"    \u003C\u002Fbody>\n",[106,101354,101355],{"class":108,"line":1634},[106,101356,101357],{"class":221},"  \u003C\u002Fworldbody>\n",[106,101359,101360],{"class":108,"line":1639},[106,101361,101362],{"class":221},"\u003C\u002Fmujoco>\n",[106,101364,101365],{"class":108,"line":1645},[106,101366,95683],{"class":221},[106,101368,101369],{"class":108,"line":1666},[106,101370,2392],{"emptyLinePlaceholder":33},[106,101372,101373],{"class":108,"line":1671},[106,101374,2392],{"emptyLinePlaceholder":33},[106,101376,101377,101379,101381,101384,101386],{"class":108,"line":1685},[106,101378,31941],{"class":112},[106,101380,1965],{"class":1955},[106,101382,101383],{"class":116},"() -> ",[106,101385,95671],{"class":165},[106,101387,3731],{"class":116},[106,101389,101390,101393,101395,101398,101400],{"class":108,"line":1690},[106,101391,101392],{"class":116},"    model ",[106,101394,162],{"class":112},[106,101396,101397],{"class":116}," mujoco.MjModel.from_xml_string(",[106,101399,101299],{"class":165},[106,101401,123],{"class":116},[106,101403,101404,101407,101409],{"class":108,"line":1719},[106,101405,101406],{"class":116},"    data ",[106,101408,162],{"class":112},[106,101410,101411],{"class":116}," mujoco.MjData(model)\n",[106,101413,101414],{"class":108,"line":1724},[106,101415,2392],{"emptyLinePlaceholder":33},[106,101417,101418,101420,101422,101425],{"class":108,"line":1741},[106,101419,31293],{"class":165},[106,101421,117],{"class":116},[106,101423,101424],{"class":221},"\"nq:\"",[106,101426,101427],{"class":116},", model.nq)\n",[106,101429,101430,101432,101434,101437],{"class":108,"line":1746},[106,101431,31293],{"class":165},[106,101433,117],{"class":116},[106,101435,101436],{"class":221},"\"nv:\"",[106,101438,101439],{"class":116},", model.nv)\n",[106,101441,101442,101444,101446,101449],{"class":108,"line":1751},[106,101443,31293],{"class":165},[106,101445,117],{"class":116},[106,101447,101448],{"class":221},"\"nu:\"",[106,101450,101451],{"class":116},", model.nu)\n",[106,101453,101454,101456,101458,101461],{"class":108,"line":1756},[106,101455,31293],{"class":165},[106,101457,117],{"class":116},[106,101459,101460],{"class":221},"\"initial time:\"",[106,101462,101463],{"class":116},", data.time)\n",[106,101465,101466,101468,101470,101473],{"class":108,"line":1770},[106,101467,31293],{"class":165},[106,101469,117],{"class":116},[106,101471,101472],{"class":221},"\"initial qpos:\"",[106,101474,101475],{"class":116},", data.qpos.copy())\n",[106,101477,101478],{"class":108,"line":1775},[106,101479,2392],{"emptyLinePlaceholder":33},[106,101481,101482,101484,101487,101489,101491,101493,101495],{"class":108,"line":2569},[106,101483,3193],{"class":112},[106,101485,101486],{"class":116}," _ ",[106,101488,26037],{"class":112},[106,101490,32437],{"class":165},[106,101492,117],{"class":116},[106,101494,428],{"class":165},[106,101496,30780],{"class":116},[106,101498,101499],{"class":108,"line":2583},[106,101500,101501],{"class":116},"        mujoco.mj_step(model, data)\n",[106,101503,101504],{"class":108,"line":2591},[106,101505,2392],{"emptyLinePlaceholder":33},[106,101507,101508,101510,101512,101515],{"class":108,"line":2596},[106,101509,31293],{"class":165},[106,101511,117],{"class":116},[106,101513,101514],{"class":221},"\"final time:\"",[106,101516,101463],{"class":116},[106,101518,101519,101521,101523,101526],{"class":108,"line":2602},[106,101520,31293],{"class":165},[106,101522,117],{"class":116},[106,101524,101525],{"class":221},"\"final qpos:\"",[106,101527,101475],{"class":116},[106,101529,101530],{"class":108,"line":2608},[106,101531,2392],{"emptyLinePlaceholder":33},[106,101533,101534],{"class":108,"line":2613},[106,101535,2392],{"emptyLinePlaceholder":33},[106,101537,101538,101540,101542,101545,101548],{"class":108,"line":7941},[106,101539,1523],{"class":112},[106,101541,31214],{"class":165},[106,101543,101544],{"class":112}," ==",[106,101546,101547],{"class":221}," \"__main__\"",[106,101549,3731],{"class":116},[106,101551,101552],{"class":108,"line":7965},[106,101553,101554],{"class":116},"    main()\n",[77,101556,101557],{"id":101557},"代码逐段解释",[14,101559,101560],{},"导入库：",[97,101562,101564],{"className":30372,"code":101563,"language":30374,"meta":25,"style":25},"import mujoco\n",[103,101565,101566],{"__ignoreMap":25},[106,101567,101568,101570],{"class":108,"line":109},[106,101569,30386],{"class":112},[106,101571,101286],{"class":116},[14,101573,101574],{},"这里导入的是官方 Python bindings。后面所有 MuJoCo API 都从这个模块里调用。",[14,101576,101577],{},"定义 XML：",[97,101579,101581],{"className":30372,"code":101580,"language":30374,"meta":25,"style":25},"XML = \"\"\"\n...\n\"\"\"\n",[103,101582,101583,101591,101596],{"__ignoreMap":25},[106,101584,101585,101587,101589],{"class":108,"line":109},[106,101586,101299],{"class":165},[106,101588,13557],{"class":112},[106,101590,101304],{"class":221},[106,101592,101593],{"class":108,"line":28},[106,101594,101595],{"class":221},"...\n",[106,101597,101598],{"class":108,"line":1172},[106,101599,95683],{"class":221},[14,101601,101602,101603,101606],{},"三引号字符串里放的是 MuJoCo 模型。这个模型包含地面和一个带 ",[103,101604,101605],{},"freejoint"," 的方块。",[14,101608,101609],{},"编译模型：",[97,101611,101613],{"className":30372,"code":101612,"language":30374,"meta":25,"style":25},"model = mujoco.MjModel.from_xml_string(XML)\n",[103,101614,101615],{"__ignoreMap":25},[106,101616,101617,101620,101622,101624,101626],{"class":108,"line":109},[106,101618,101619],{"class":116},"model ",[106,101621,162],{"class":112},[106,101623,101397],{"class":116},[106,101625,101299],{"class":165},[106,101627,123],{"class":116},[14,101629,101630],{},"这一步会检查 XML 是否合法，并把文本模型编译成 MuJoCo 内部可运行的物理模型。",[14,101632,101633],{},"创建数据：",[97,101635,101637],{"className":30372,"code":101636,"language":30374,"meta":25,"style":25},"data = mujoco.MjData(model)\n",[103,101638,101639],{"__ignoreMap":25},[106,101640,101641,101644,101646],{"class":108,"line":109},[106,101642,101643],{"class":116},"data ",[106,101645,162],{"class":112},[106,101647,101411],{"class":116},[14,101649,101650,101652,101653,101655],{},[103,101651,33395],{}," 会保存仿真当前状态。刚创建时，时间是 ",[103,101654,308],{},"，方块还在初始位置。",[14,101657,101658],{},"推进仿真：",[97,101660,101662],{"className":30372,"code":101661,"language":30374,"meta":25,"style":25},"for _ in range(100):\n    mujoco.mj_step(model, data)\n",[103,101663,101664,101680],{"__ignoreMap":25},[106,101665,101666,101668,101670,101672,101674,101676,101678],{"class":108,"line":109},[106,101667,3017],{"class":112},[106,101669,101486],{"class":116},[106,101671,26037],{"class":112},[106,101673,32437],{"class":165},[106,101675,117],{"class":116},[106,101677,428],{"class":165},[106,101679,30780],{"class":116},[106,101681,101682],{"class":108,"line":28},[106,101683,101684],{"class":116},"    mujoco.mj_step(model, data)\n",[14,101686,101687,101688,101690],{},"每次 ",[103,101689,101200],{}," 前进一步。这里循环 100 次，所以仿真大约运行 1 秒。",[77,101692,101693],{"id":101693},"代码逐行细讲",[14,101695,101696],{},"下面把完整代码按新手视角拆开讲。",[97,101698,101699],{"className":30372,"code":101563,"language":30374,"meta":25,"style":25},[103,101700,101701],{"__ignoreMap":25},[106,101702,101703,101705],{"class":108,"line":109},[106,101704,30386],{"class":112},[106,101706,101286],{"class":116},[14,101708,101709,101711,101712,329,101714,329,101716,28379],{},[103,101710,30386],{}," 是 Python 的导入语句。这里的意思是：把 MuJoCo 官方 Python 包导入进来，后面才能写 ",[103,101713,100660],{},[103,101715,100665],{},[103,101717,101718],{},"mujoco.mj_step",[97,101720,101721],{"className":30372,"code":101580,"language":30374,"meta":25,"style":25},[103,101722,101723,101731,101735],{"__ignoreMap":25},[106,101724,101725,101727,101729],{"class":108,"line":109},[106,101726,101299],{"class":165},[106,101728,13557],{"class":112},[106,101730,101304],{"class":221},[106,101732,101733],{"class":108,"line":28},[106,101734,101595],{"class":221},[106,101736,101737],{"class":108,"line":1172},[106,101738,95683],{"class":221},[14,101740,101741,101743,101744,101747],{},[103,101742,101299],{}," 是一个变量名。右边的三引号 ",[103,101745,101746],{},"\"\"\""," 表示多行字符串。因为 MuJoCo 模型通常有很多行，所以用三引号保存 XML 文本最方便。",[97,101749,101750],{"className":53061,"code":101309,"language":53063,"meta":25,"style":25},[103,101751,101752],{"__ignoreMap":25},[106,101753,101754,101756,101758,101761,101763,101766],{"class":108,"line":109},[106,101755,1027],{"class":116},[106,101757,101006],{"class":51294},[106,101759,101760],{"class":1955}," model",[106,101762,162],{"class":116},[106,101764,101765],{"class":221},"\"first_sim\"",[106,101767,51301],{"class":116},[14,101769,101770,101771,101774,101775,28379],{},"这是 XML 的根标签。",[103,101772,101773],{},"model=\"first_sim\""," 给这个模型起了一个名字，叫 ",[103,101776,101777],{},"first_sim",[97,101779,101780],{"className":53061,"code":101168,"language":53063,"meta":25,"style":25},[103,101781,101782],{"__ignoreMap":25},[106,101783,101784,101786,101788,101790,101792,101794,101796,101798,101800],{"class":108,"line":109},[106,101785,1027],{"class":116},[106,101787,69160],{"class":51294},[106,101789,101179],{"class":1955},[106,101791,162],{"class":116},[106,101793,101184],{"class":221},[106,101795,101187],{"class":1955},[106,101797,162],{"class":116},[106,101799,101192],{"class":221},[106,101801,101129],{"class":116},[14,101803,101804,101806,101807,101810,101811,101814],{},[103,101805,69160],{}," 用来设置仿真参数。",[103,101808,101809],{},"timestep=\"0.01\""," 表示每一步是 0.01 秒。",[103,101812,101813],{},"gravity=\"0 0 -9.81\""," 表示重力方向沿 z 轴向下，大小约为 9.81。",[97,101816,101818],{"className":53061,"code":101817,"language":53063,"meta":25,"style":25},"\u003Cworldbody>\n",[103,101819,101820],{"__ignoreMap":25},[106,101821,101822,101824,101827],{"class":108,"line":109},[106,101823,1027],{"class":116},[106,101825,101826],{"class":51294},"worldbody",[106,101828,51301],{"class":116},[14,101830,101831,101833],{},[103,101832,101826],{}," 表示世界里直接存在的物体都写在这里。你可以把它理解为“场景根节点”。",[97,101835,101837],{"className":53061,"code":101836,"language":53063,"meta":25,"style":25},"\u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[103,101838,101839],{"__ignoreMap":25},[106,101840,101841,101843,101845,101847,101849,101852,101854,101856,101859,101861,101863,101866,101868,101870,101873],{"class":108,"line":109},[106,101842,1027],{"class":116},[106,101844,101105],{"class":51294},[106,101846,14913],{"class":1955},[106,101848,162],{"class":116},[106,101850,101851],{"class":221},"\"floor\"",[106,101853,53818],{"class":1955},[106,101855,162],{"class":116},[106,101857,101858],{"class":221},"\"plane\"",[106,101860,101121],{"class":1955},[106,101862,162],{"class":116},[106,101864,101865],{"class":221},"\"2 2 0.1\"",[106,101867,78761],{"class":1955},[106,101869,162],{"class":116},[106,101871,101872],{"class":221},"\"0.8 0.8 0.8 1\"",[106,101874,101129],{"class":116},[14,101876,101877,101878,101880,101881,101884,101885,101888,101889,101891],{},"这行创建地面。",[103,101879,101105],{}," 是几何体。",[103,101882,101883],{},"name=\"floor\""," 是名字。",[103,101886,101887],{},"type=\"plane\""," 表示平面。",[103,101890,55104],{}," 是颜色，四个数字分别表示红、绿、蓝、透明度。",[97,101893,101895],{"className":53061,"code":101894,"language":53063,"meta":25,"style":25},"\u003Cbody name=\"box\" pos=\"0 0 1\">\n",[103,101896,101897],{"__ignoreMap":25},[106,101898,101899,101901,101903,101905,101907,101909,101911,101913,101915],{"class":108,"line":109},[106,101900,1027],{"class":116},[106,101902,51794],{"class":51294},[106,101904,14913],{"class":1955},[106,101906,162],{"class":116},[106,101908,53485],{"class":221},[106,101910,101091],{"class":1955},[106,101912,162],{"class":116},[106,101914,101096],{"class":221},[106,101916,51301],{"class":116},[14,101918,101919,101920,28379,101922,101925,101926,101928],{},"这行创建一个刚体，名字叫 ",[103,101921,53708],{},[103,101923,101924],{},"pos=\"0 0 1\""," 表示它一开始在世界坐标 ",[103,101927,101154],{},"，也就是离地面 1 米高。",[97,101930,101932],{"className":53061,"code":101931,"language":53063,"meta":25,"style":25},"\u003Cfreejoint name=\"box_free\"\u002F>\n",[103,101933,101934],{"__ignoreMap":25},[106,101935,101936,101938,101940,101942,101944,101947],{"class":108,"line":109},[106,101937,1027],{"class":116},[106,101939,101605],{"class":51294},[106,101941,14913],{"class":1955},[106,101943,162],{"class":116},[106,101945,101946],{"class":221},"\"box_free\"",[106,101948,101129],{"class":116},[14,101950,101951,101952,101954],{},"这行很重要。",[103,101953,101605],{}," 表示这个刚体可以在三维空间自由移动和旋转。如果没有它，box 会被固定住，不会掉下来。",[97,101956,101958],{"className":53061,"code":101957,"language":53063,"meta":25,"style":25},"\u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.1 0.1 0.1\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[103,101959,101960],{"__ignoreMap":25},[106,101961,101962,101964,101966,101968,101970,101972,101974,101976,101978,101980,101982,101984,101987,101989,101991,101993,101995,101998],{"class":108,"line":109},[106,101963,1027],{"class":116},[106,101965,101105],{"class":51294},[106,101967,14913],{"class":1955},[106,101969,162],{"class":116},[106,101971,101112],{"class":221},[106,101973,53818],{"class":1955},[106,101975,162],{"class":116},[106,101977,53485],{"class":221},[106,101979,101121],{"class":1955},[106,101981,162],{"class":116},[106,101983,101126],{"class":221},[106,101985,101986],{"class":1955}," mass",[106,101988,162],{"class":116},[106,101990,3670],{"class":221},[106,101992,78761],{"class":1955},[106,101994,162],{"class":116},[106,101996,101997],{"class":221},"\"1 0 0 1\"",[106,101999,101129],{"class":116},[14,102001,102002,102003,102006,102007,102010,102011,102014,102015,102018],{},"这行给 box body 添加一个盒子形状。",[103,102004,102005],{},"type=\"box\""," 表示形状是盒子。",[103,102008,102009],{},"size=\"0.1 0.1 0.1\""," 表示三个方向的半边长都是 0.1。",[103,102012,102013],{},"mass=\"1\""," 表示质量是 1。",[103,102016,102017],{},"rgba=\"1 0 0 1\""," 表示红色。",[97,102020,102022],{"className":30372,"code":102021,"language":30374,"meta":25,"style":25},"def main() -> None:\n",[103,102023,102024],{"__ignoreMap":25},[106,102025,102026,102028,102030,102032,102034],{"class":108,"line":109},[106,102027,31941],{"class":112},[106,102029,1965],{"class":1955},[106,102031,101383],{"class":116},[106,102033,95671],{"class":165},[106,102035,3731],{"class":116},[14,102037,102038,102040,102041,102044,102045,102048],{},[103,102039,31941],{}," 用来定义函数。这里定义了一个叫 ",[103,102042,102043],{},"main"," 的函数。",[103,102046,102047],{},"-> None"," 是类型提示，表示这个函数不返回有意义的结果。初学时可以先把它理解成注释，不影响运行。",[97,102050,102051],{"className":30372,"code":101612,"language":30374,"meta":25,"style":25},[103,102052,102053],{"__ignoreMap":25},[106,102054,102055,102057,102059,102061,102063],{"class":108,"line":109},[106,102056,101619],{"class":116},[106,102058,162],{"class":112},[106,102060,101397],{"class":116},[106,102062,101299],{"class":165},[106,102064,123],{"class":116},[14,102066,102067,102068,102071],{},"这行把 XML 字符串编译成 MuJoCo 模型。",[103,102069,102070],{},"model"," 保存的是“静态结构”，比如有几个 body、有几个 joint、时间步长是多少。",[97,102073,102074],{"className":30372,"code":101636,"language":30374,"meta":25,"style":25},[103,102075,102076],{"__ignoreMap":25},[106,102077,102078,102080,102082],{"class":108,"line":109},[106,102079,101643],{"class":116},[106,102081,162],{"class":112},[106,102083,101411],{"class":116},[14,102085,102086,102087,102089,102090,102092],{},"这行创建仿真数据。",[103,102088,33395],{}," 保存的是“当前状态”，比如当前时间、位置、速度。仿真每前进一步，",[103,102091,33395],{}," 都会变化。",[97,102094,102096],{"className":30372,"code":102095,"language":30374,"meta":25,"style":25},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"nu:\", model.nu)\n",[103,102097,102098,102108,102118],{"__ignoreMap":25},[106,102099,102100,102102,102104,102106],{"class":108,"line":109},[106,102101,30409],{"class":165},[106,102103,117],{"class":116},[106,102105,101424],{"class":221},[106,102107,101427],{"class":116},[106,102109,102110,102112,102114,102116],{"class":108,"line":28},[106,102111,30409],{"class":165},[106,102113,117],{"class":116},[106,102115,101436],{"class":221},[106,102117,101439],{"class":116},[106,102119,102120,102122,102124,102126],{"class":108,"line":1172},[106,102121,30409],{"class":165},[106,102123,117],{"class":116},[106,102125,101448],{"class":221},[106,102127,101451],{"class":116},[14,102129,102130,102132,102133,102136,102137,102140,102141,102144,102145,102148],{},[103,102131,30409],{}," 用来输出信息。",[103,102134,102135],{},"model.nq"," 是位置变量数量，",[103,102138,102139],{},"model.nv"," 是速度变量数量，",[103,102142,102143],{},"model.nu"," 是控制输入数量。这个例子没有电机，所以 ",[103,102146,102147],{},"nu"," 是 0。",[97,102150,102152],{"className":30372,"code":102151,"language":30374,"meta":25,"style":25},"print(\"initial time:\", data.time)\nprint(\"initial qpos:\", data.qpos.copy())\n",[103,102153,102154,102164],{"__ignoreMap":25},[106,102155,102156,102158,102160,102162],{"class":108,"line":109},[106,102157,30409],{"class":165},[106,102159,117],{"class":116},[106,102161,101460],{"class":221},[106,102163,101463],{"class":116},[106,102165,102166,102168,102170,102172],{"class":108,"line":28},[106,102167,30409],{"class":165},[106,102169,117],{"class":116},[106,102171,101472],{"class":221},[106,102173,101475],{"class":116},[14,102175,102176,102177,102179,102180,102182,102183,102186],{},"这里打印初始时间和初始位置。",[103,102178,101052],{}," 一开始是 0。",[103,102181,101055],{}," 是位置数组。",[103,102184,102185],{},".copy()"," 表示复制一份数组再打印，避免以后数组变化时影响你理解输出。",[97,102188,102189],{"className":30372,"code":101661,"language":30374,"meta":25,"style":25},[103,102190,102191,102207],{"__ignoreMap":25},[106,102192,102193,102195,102197,102199,102201,102203,102205],{"class":108,"line":109},[106,102194,3017],{"class":112},[106,102196,101486],{"class":116},[106,102198,26037],{"class":112},[106,102200,32437],{"class":165},[106,102202,117],{"class":116},[106,102204,428],{"class":165},[106,102206,30780],{"class":116},[106,102208,102209],{"class":108,"line":28},[106,102210,101684],{"class":116},[14,102212,102213,102215,102216,102219,102220,102222,102223,102225],{},[103,102214,3017],{}," 是循环。",[103,102217,102218],{},"range(100)"," 表示循环 100 次。",[103,102221,1109],{}," 是一个临时变量名，表示“我不关心当前是第几次”。每次循环都会调用一次 ",[103,102224,101200],{},"，仿真就前进一步。",[97,102227,102229],{"className":30372,"code":102228,"language":30374,"meta":25,"style":25},"print(\"final time:\", data.time)\nprint(\"final qpos:\", data.qpos.copy())\n",[103,102230,102231,102241],{"__ignoreMap":25},[106,102232,102233,102235,102237,102239],{"class":108,"line":109},[106,102234,30409],{"class":165},[106,102236,117],{"class":116},[106,102238,101514],{"class":221},[106,102240,101463],{"class":116},[106,102242,102243,102245,102247,102249],{"class":108,"line":28},[106,102244,30409],{"class":165},[106,102246,117],{"class":116},[106,102248,101525],{"class":221},[106,102250,101475],{"class":116},[14,102252,102253],{},"循环结束后，再打印最终时间和最终位置。你会看到时间从 0 变成约 1.0，方块的位置也变了。",[97,102255,102257],{"className":30372,"code":102256,"language":30374,"meta":25,"style":25},"if __name__ == \"__main__\":\n    main()\n",[103,102258,102259,102271],{"__ignoreMap":25},[106,102260,102261,102263,102265,102267,102269],{"class":108,"line":109},[106,102262,1523],{"class":112},[106,102264,31214],{"class":165},[106,102266,101544],{"class":112},[106,102268,101547],{"class":221},[106,102270,3731],{"class":116},[106,102272,102273],{"class":108,"line":28},[106,102274,101554],{"class":116},[14,102276,102277,102278,102281,102282,28379],{},"这是 Python 常见写法。意思是：如果你直接运行这个文件，就调用 ",[103,102279,102280],{},"main()"," 函数。如果这个文件被别的文件导入，就不会自动运行 ",[103,102283,102280],{},[14,102285,102286],{},"运行:",[97,102288,102290],{"className":23815,"code":102289,"language":23817,"meta":25,"style":25},"python ch1_first_sim.py\n",[103,102291,102292],{"__ignoreMap":25},[106,102293,102294,102296],{"class":108,"line":109},[106,102295,30374],{"class":1955},[106,102297,101271],{"class":221},[48,102299,102301],{"id":102300},"_5运行结果说明","5.运行结果说明",[14,102303,102304],{},"你应该看到类似输出:",[97,102306,102309],{"className":102307,"code":102308,"language":5180,"meta":25},[5178],"nq: 7\nnv: 6\nnu: 0\ninitial time: 0.0\nfinal time: 1.0000000000000007\n",[103,102310,102308],{"__ignoreMap":25},[14,102312,102313,102315,102316,102319,102320,28379],{},[103,102314,101605],{}," 有 7 个位置变量: ",[103,102317,102318],{},"x y z qw qx qy qz","。自由刚体有 6 个速度变量: ",[103,102321,102322],{},"vx vy vz wx wy wz",[14,102324,102325,102326,102329],{},"你还会看到 ",[103,102327,102328],{},"final qpos"," 里的 z 坐标比初始时小。原因是方块受到重力作用向下掉落。如果方块撞到地面，MuJoCo 会计算碰撞，让它不会无限向下穿透。",[48,102331,102333],{"id":102332},"_6验证步骤","6.验证步骤",[14,102335,102336],{},"确认版本:",[97,102338,102339],{"className":23815,"code":100924,"language":23817,"meta":25,"style":25},[103,102340,102341],{"__ignoreMap":25},[106,102342,102343,102345,102347],{"class":108,"line":109},[106,102344,30374],{"class":1955},[106,102346,30352],{"class":165},[106,102348,100935],{"class":221},[14,102350,102351],{},"确认导入的是官方 bindings:",[97,102353,102355],{"className":23815,"code":102354,"language":23817,"meta":25,"style":25},"python -c \"import mujoco; print(mujoco)\"\n",[103,102356,102357],{"__ignoreMap":25},[106,102358,102359,102361,102363],{"class":108,"line":109},[106,102360,30374],{"class":1955},[106,102362,30352],{"class":165},[106,102364,102365],{"class":221}," \"import mujoco; print(mujoco)\"\n",[14,102367,102368],{},"运行程序:",[97,102370,102371],{"className":23815,"code":102289,"language":23817,"meta":25,"style":25},[103,102372,102373],{"__ignoreMap":25},[106,102374,102375,102377],{"class":108,"line":109},[106,102376,30374],{"class":1955},[106,102378,101271],{"class":221},[14,102380,102381,102382,102385,102386,28379],{},"检查 ",[103,102383,102384],{},"final time"," 是否约等于 ",[103,102387,102388],{},"1.0",[14,102390,102391],{},"再做几个小实验：",[60,102393,102394,102404,102412,102425],{},[63,102395,102396,102397,102399,102400,102403],{},"把 ",[103,102398,101924],{}," 改成 ",[103,102401,102402],{},"pos=\"0 0 2\"","，观察初始高度变化。",[63,102405,102396,102406,102399,102408,102411],{},[103,102407,101813],{},[103,102409,102410],{},"gravity=\"0 0 -1\"","，观察下落是否变慢。",[63,102413,102396,102414,102399,102416,102419,102420,102422,102423,28379],{},[103,102415,101809],{},[103,102417,102418],{},"timestep=\"0.005\"","，观察 100 步后的 ",[103,102421,102384],{}," 是否变成约 ",[103,102424,35323],{},[63,102426,102427,102428,102431],{},"删除 ",[103,102429,102430],{},"\u003Cfreejoint name=\"box_free\"\u002F>","，观察方块是否还会下落。",[14,102433,102434],{},"第 4 个实验很关键：没有自由关节时，body 会被固定在父节点上，不能自由运动。",[48,102436,102438],{"id":102437},"_7常见错误与解决方案","7.常见错误与解决方案",[77,102440,102442],{"id":102441},"modulenotfounderror-no-module-named-mujoco",[103,102443,102444],{},"ModuleNotFoundError: No module named 'mujoco'",[14,102446,102447],{},"解决:",[97,102449,102451],{"className":23815,"code":102450,"language":23817,"meta":25,"style":25},"pip install \"mujoco>=2.3\"\n",[103,102452,102453],{"__ignoreMap":25},[106,102454,102455,102457,102459],{"class":108,"line":109},[106,102456,23824],{"class":1955},[106,102458,23827],{"class":221},[106,102460,102461],{"class":221}," \"mujoco>=2.3\"\n",[77,102463,102465],{"id":102464},"图形或-opengl-相关报错","图形或 OpenGL 相关报错",[14,102467,102468],{},"先安装系统依赖:",[97,102470,102472],{"className":23815,"code":102471,"language":23817,"meta":25,"style":25},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel libX11 libXi libXrandr\n",[103,102473,102474],{"__ignoreMap":25},[106,102475,102476,102478,102480,102482,102484,102487,102489,102492,102494,102497,102499],{"class":108,"line":109},[106,102477,24570],{"class":1955},[106,102479,26309],{"class":221},[106,102481,23827],{"class":221},[106,102483,26394],{"class":165},[106,102485,102486],{"class":221}," mesa-libGL",[106,102488,100799],{"class":221},[106,102490,102491],{"class":221}," glfw",[106,102493,100819],{"class":221},[106,102495,102496],{"class":221}," libX11",[106,102498,100832],{"class":221},[106,102500,102501],{"class":221}," libXrandr\n",[77,102503,102505],{"id":102504},"xml-解析失败","XML 解析失败",[14,102507,102508],{},"检查:",[60,102510,102511,102514,102517,102523],{},[63,102512,102513],{},"标签是否闭合",[63,102515,102516],{},"属性是否带引号",[63,102518,102519,102520],{},"根节点是否是 ",[103,102521,102522],{},"\u003Cmujoco>",[63,102524,102525,102527,102528,102531],{},[103,102526,51794],{}," 是否放在 ",[103,102529,102530],{},"\u003Cworldbody>"," 内部",[77,102533,102535,102537,102538],{"id":102534},"final-time-不是严格等于-10",[103,102536,102384],{}," 不是严格等于 ",[103,102539,102388],{},[14,102541,102542],{},"这通常不是错误。浮点数计算可能得到：",[97,102544,102547],{"className":102545,"code":102546,"language":5180,"meta":25},[5178],"1.0000000000000007\n",[103,102548,102546],{"__ignoreMap":25},[14,102550,102551,102552,102554],{},"只要接近 ",[103,102553,102388],{}," 就正常。",[77,102556,102557],{"id":102557},"方块没有掉下来",[14,102559,102560],{},"检查：",[60,102562,102563,102569,102575,102580],{},[63,102564,102565,102566],{},"方块 body 里是否有 ",[103,102567,102568],{},"\u003Cfreejoint\u002F>",[63,102570,102571,102572],{},"重力是否是 ",[103,102573,102574],{},"0 0 -9.81",[63,102576,102577,102578],{},"是否真的调用了 ",[103,102579,100670],{},[63,102581,102582,102583,102585,102586],{},"你看的是否是 ",[103,102584,102328],{},"，不是 ",[103,102587,102588],{},"initial qpos",[48,102590,102592],{"id":102591},"_8本章小结","8.本章小结",[14,102594,102595],{},"本章你已经完成了 MuJoCo 的最小闭环：",[97,102597,102600],{"className":102598,"code":102599,"language":5180,"meta":25},[5178],"XML 模型 → MjModel → MjData → mj_step → 读取状态\n",[103,102601,102599],{"__ignoreMap":25},[14,102603,102604],{},"后面所有复杂任务，本质都是在这个闭环上继续增加内容：更多 body、更多 joint、更多 actuator、更复杂的控制逻辑和奖励函数。",[5119,102606,102607],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":25,"searchDepth":28,"depth":28,"links":102609},[102610,102611,102612,102617,102621,102622,102623,102631],{"id":100631,"depth":28,"text":100632},{"id":100754,"depth":28,"text":100755},{"id":101029,"depth":28,"text":101030,"children":102613},[102614,102615,102616],{"id":101067,"depth":1172,"text":101068},{"id":101161,"depth":1172,"text":101162},{"id":101213,"depth":1172,"text":101214},{"id":101237,"depth":28,"text":101238,"children":102618},[102619,102620],{"id":101557,"depth":1172,"text":101557},{"id":101693,"depth":1172,"text":101693},{"id":102300,"depth":28,"text":102301},{"id":102332,"depth":28,"text":102333},{"id":102437,"depth":28,"text":102438,"children":102624},[102625,102626,102627,102628,102630],{"id":102441,"depth":1172,"text":102444},{"id":102464,"depth":1172,"text":102465},{"id":102504,"depth":1172,"text":102505},{"id":102534,"depth":1172,"text":102629},"final time 不是严格等于 1.0",{"id":102557,"depth":1172,"text":102557},{"id":102591,"depth":28,"text":102592},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch1-mujoco",{"title":100623,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch1-环境安装与第一个MuJoCo程序","QXJQc687vjITkT3uIIPeKVan841uz4ykZnCT7hX2FiY",{"id":102638,"title":102639,"body":102640,"description":25,"extension":31,"meta":104296,"navigation":33,"path":104297,"seo":104298,"stem":104299,"__hash__":104300},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础.md","2.XML 与 MJCF 物理建模基础",{"type":7,"value":102641,"toc":104272},[102642,102645,102647,102650,102653,102670,102765,102768,102774,102776,102778,102802,102805,102819,102822,102863,102865,102878,102880,102883,102931,102943,102946,102949,102955,102968,103035,103038,103057,103060,103063,103069,103071,103080,103083,103087,103096,103178,103187,103191,103197,103211,103221,103223,103553,103556,103568,103570,103581,103583,103586,103604,103607,103610,103628,103639,103642,103657,103667,103669,103690,103707,103727,103733,103773,103789,103805,103811,103814,103838,103854,103859,103889,103906,103931,103934,103949,103958,103973,103982,103997,104004,104006,104016,104029,104036,104039,104078,104085,104087,104139,104141,104147,104150,104157,104164,104167,104169,104187,104190,104193,104227,104239,104241,104244,104266,104269],[10,102643,102639],{"id":102644},"_2xml-与-mjcf-物理建模基础",[48,102646,100632],{"id":100631},[14,102648,102649],{},"本章学习 MuJoCo 的 MJCF XML 基础。MJCF 是 MuJoCo 使用的模型描述格式。你不需要先完整学习 XML 语言，只需要掌握 MuJoCo 常用标签，以及它们之间的层级关系。",[14,102651,102652],{},"本章结束后，你应该能看懂一个简单模型里：",[60,102654,102655,102658,102661,102664,102667],{},[63,102656,102657],{},"地面在哪里。",[63,102659,102660],{},"物体初始位置在哪里。",[63,102662,102663],{},"几何体是什么形状。",[63,102665,102666],{},"哪些 body 可以自由运动。",[63,102668,102669],{},"如何用名字在 Python 里找到 XML 中的对象。",[254,102671,102672,102682],{},[257,102673,102674],{},[260,102675,102676,102679],{},[263,102677,102678],{"align":23729},"标签",[263,102680,102681],{"align":23729},"作用",[301,102683,102684,102693,102703,102712,102722,102732,102745,102755],{},[260,102685,102686,102690],{},[306,102687,102688],{"align":23729},[103,102689,102522],{},[306,102691,102692],{"align":23729},"根节点",[260,102694,102695,102700],{},[306,102696,102697],{"align":23729},[103,102698,102699],{},"\u003Coption>",[306,102701,102702],{"align":23729},"仿真参数",[260,102704,102705,102709],{},[306,102706,102707],{"align":23729},[103,102708,102530],{},[306,102710,102711],{"align":23729},"世界中的物体",[260,102713,102714,102719],{},[306,102715,102716],{"align":23729},[103,102717,102718],{},"\u003Cbody>",[306,102720,102721],{"align":23729},"刚体",[260,102723,102724,102729],{},[306,102725,102726],{"align":23729},[103,102727,102728],{},"\u003Cgeom>",[306,102730,102731],{"align":23729},"几何体、碰撞体、可视体",[260,102733,102734,102742],{},[306,102735,102736,24972,102739],{"align":23729},[103,102737,102738],{},"\u003Cjoint>",[103,102740,102741],{},"\u003Cfreejoint>",[306,102743,102744],{"align":23729},"关节",[260,102746,102747,102752],{},[306,102748,102749],{"align":23729},[103,102750,102751],{},"\u003Csite>",[306,102753,102754],{"align":23729},"标记点",[260,102756,102757,102762],{},[306,102758,102759],{"align":23729},[103,102760,102761],{},"\u003Cactuator>",[306,102763,102764],{"align":23729},"控制器",[14,102766,102767],{},"初学时可以先记住：",[97,102769,102772],{"className":102770,"code":102771,"language":5180,"meta":25},[5178],"body 是刚体，geom 是形状，joint 是运动方式，site 是标记点。\n",[103,102773,102771],{"__ignoreMap":25},[48,102775,100755],{"id":100754},[14,102777,100758],{},[97,102779,102781],{"className":23815,"code":102780,"language":23817,"meta":25,"style":25},"sudo dnf install -y mesa-libGL mesa-dri-drivers glfw glfw-devel\n",[103,102782,102783],{"__ignoreMap":25},[106,102784,102785,102787,102789,102791,102793,102795,102797,102799],{"class":108,"line":109},[106,102786,24570],{"class":1955},[106,102788,26309],{"class":221},[106,102790,23827],{"class":221},[106,102792,26394],{"class":165},[106,102794,102486],{"class":221},[106,102796,100799],{"class":221},[106,102798,102491],{"class":221},[106,102800,102801],{"class":221}," glfw-devel\n",[14,102803,102804],{},"pip:",[97,102806,102807],{"className":23815,"code":100904,"language":23817,"meta":25,"style":25},[103,102808,102809],{"__ignoreMap":25},[106,102810,102811,102813,102815,102817],{"class":108,"line":109},[106,102812,23824],{"class":1955},[106,102814,23827],{"class":221},[106,102816,100915],{"class":221},[106,102818,100918],{"class":221},[14,102820,102821],{},"conda:",[97,102823,102825],{"className":23815,"code":102824,"language":23817,"meta":25,"style":25},"conda create -n mujoco-xml python=3.10 -y\nconda activate mujoco-xml\npip install \"mujoco>=2.3\" numpy\n",[103,102826,102827,102844,102853],{"__ignoreMap":25},[106,102828,102829,102831,102833,102835,102838,102840,102842],{"class":108,"line":109},[106,102830,30324],{"class":1955},[106,102832,29170],{"class":221},[106,102834,25109],{"class":165},[106,102836,102837],{"class":221}," mujoco-xml",[106,102839,100960],{"class":221},[106,102841,100963],{"class":165},[106,102843,100966],{"class":165},[106,102845,102846,102848,102850],{"class":108,"line":28},[106,102847,30324],{"class":1955},[106,102849,100973],{"class":221},[106,102851,102852],{"class":221}," mujoco-xml\n",[106,102854,102855,102857,102859,102861],{"class":108,"line":1172},[106,102856,23824],{"class":1955},[106,102858,23827],{"class":221},[106,102860,100915],{"class":221},[106,102862,100918],{"class":221},[14,102864,100989],{},[60,102866,102867,102870,102875],{},[63,102868,102869],{},"MJCF XML 标签随 MuJoCo 版本会持续扩展。",[63,102871,102872,102873,28379],{},"本章使用基础标签，适用于 ",[103,102874,101012],{},[63,102876,102877],{},"某些新 XML 属性可能存在版本差异，本文避免使用高版本专属属性。",[48,102879,101030],{"id":101029},[14,102881,102882],{},"MJCF 是 MuJoCo 的 XML 建模格式。最小结构:",[97,102884,102886],{"className":53061,"code":102885,"language":53063,"meta":25,"style":25},"\u003Cmujoco model=\"name\">\n  \u003Cworldbody>\n    ...\n  \u003C\u002Fworldbody>\n\u003C\u002Fmujoco>\n",[103,102887,102888,102902,102910,102915,102923],{"__ignoreMap":25},[106,102889,102890,102892,102894,102896,102898,102900],{"class":108,"line":109},[106,102891,1027],{"class":116},[106,102893,101006],{"class":51294},[106,102895,101760],{"class":1955},[106,102897,162],{"class":116},[106,102899,62673],{"class":221},[106,102901,51301],{"class":116},[106,102903,102904,102906,102908],{"class":108,"line":28},[106,102905,52138],{"class":116},[106,102907,101826],{"class":51294},[106,102909,51301],{"class":116},[106,102911,102912],{"class":108,"line":1172},[106,102913,102914],{"class":116},"    ...\n",[106,102916,102917,102919,102921],{"class":108,"line":1187},[106,102918,52411],{"class":116},[106,102920,101826],{"class":51294},[106,102922,51301],{"class":116},[106,102924,102925,102927,102929],{"class":108,"line":1193},[106,102926,51779],{"class":116},[106,102928,101006],{"class":51294},[106,102930,51301],{"class":116},[14,102932,102933,102935,102936,102938,102939,102942],{},[103,102934,51794],{}," 表示刚体。",[103,102937,101105],{}," 表示几何形状，可以用于碰撞、质量、渲染。",[103,102940,102941],{},"joint"," 表示刚体相对父刚体如何运动。",[77,102944,102945],{"id":102945},"层级结构非常重要",[14,102947,102948],{},"MuJoCo 模型不是一堆平铺的物体，而是一棵树：",[97,102950,102953],{"className":102951,"code":102952,"language":5180,"meta":25},[5178],"worldbody\n├── floor geom\n└── red_box body\n    ├── freejoint\n    ├── red_box_geom\n    └── box_center site\n",[103,102954,102952],{"__ignoreMap":25},[14,102956,102957,101003,102960,102963,102964,102967],{},[103,102958,102959],{},"red_box_geom",[103,102961,102962],{},"box_center"," 都属于 ",[103,102965,102966],{},"red_box"," 这个 body。body 移动时，它内部的 geom 和 site 也会跟着移动。",[97,102969,102971],{"className":53061,"code":102970,"language":53063,"meta":25,"style":25},"\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",[103,102972,102973,102993,103007,103027],{"__ignoreMap":25},[106,102974,102975,102977,102979,102981,102983,102985,102987,102989,102991],{"class":108,"line":109},[106,102976,1027],{"class":116},[106,102978,51794],{"class":51294},[106,102980,14913],{"class":1955},[106,102982,162],{"class":116},[106,102984,53485],{"class":221},[106,102986,101091],{"class":1955},[106,102988,162],{"class":116},[106,102990,101096],{"class":221},[106,102992,51301],{"class":116},[106,102994,102995,102997,102999,103001,103003,103005],{"class":108,"line":28},[106,102996,52138],{"class":116},[106,102998,101605],{"class":51294},[106,103000,14913],{"class":1955},[106,103002,162],{"class":116},[106,103004,101946],{"class":221},[106,103006,101129],{"class":116},[106,103008,103009,103011,103013,103015,103017,103019,103021,103023,103025],{"class":108,"line":1172},[106,103010,52138],{"class":116},[106,103012,101105],{"class":51294},[106,103014,53818],{"class":1955},[106,103016,162],{"class":116},[106,103018,53485],{"class":221},[106,103020,101121],{"class":1955},[106,103022,162],{"class":116},[106,103024,101126],{"class":221},[106,103026,101129],{"class":116},[106,103028,103029,103031,103033],{"class":108,"line":1187},[106,103030,51779],{"class":116},[106,103032,51794],{"class":51294},[106,103034,51301],{"class":116},[14,103036,103037],{},"含义:",[60,103039,103040,103046,103051,103054],{},[63,103041,103042,103043,103045],{},"创建名为 ",[103,103044,53708],{}," 的刚体",[63,103047,103048,103049],{},"初始位置在世界坐标 ",[103,103050,101154],{},[63,103052,103053],{},"它有一个自由关节",[63,103055,103056],{},"它有一个盒子几何体",[77,103058,103059],{"id":103059},"坐标怎么理解",[14,103061,103062],{},"MuJoCo 默认使用三维坐标：",[97,103064,103067],{"className":103065,"code":103066,"language":5180,"meta":25},[5178],"x: 左右方向\ny: 前后方向\nz: 上下方向\n",[103,103068,103066],{"__ignoreMap":25},[14,103070,14626],{},[97,103072,103074],{"className":53061,"code":103073,"language":53063,"meta":25,"style":25},"pos=\"0 0 1\"\n",[103,103075,103076],{"__ignoreMap":25},[106,103077,103078],{"class":108,"line":109},[106,103079,103073],{"class":116},[14,103081,103082],{},"表示 x=0、y=0、z=1，也就是放在世界原点上方 1 米的位置。",[77,103084,103086],{"id":103085},"geom-的-size-怎么理解","geom 的 size 怎么理解",[14,103088,103089,103090,82524,103093,103095],{},"不同 ",[103,103091,103092],{},"type",[103,103094,31490],{}," 含义不同：",[254,103097,103098,103113],{},[257,103099,103100],{},[260,103101,103102,103106,103111],{},[263,103103,103104],{"align":23729},[103,103105,103092],{},[263,103107,103108,103110],{"align":23729},[103,103109,31490],{}," 示例",[263,103112,100685],{"align":23729},[301,103114,103115,103129,103144,103163],{},[260,103116,103117,103121,103126],{},[306,103118,103119],{"align":23729},[103,103120,53708],{},[306,103122,103123],{"align":23729},[103,103124,103125],{},"size=\"0.1 0.2 0.3\"",[306,103127,103128],{"align":23729},"x\u002Fy\u002Fz 半边长，不是完整长度",[260,103130,103131,103136,103141],{},[306,103132,103133],{"align":23729},[103,103134,103135],{},"sphere",[306,103137,103138],{"align":23729},[103,103139,103140],{},"size=\"0.1\"",[306,103142,103143],{"align":23729},"球半径",[260,103145,103146,103151,103156],{},[306,103147,103148],{"align":23729},[103,103149,103150],{},"capsule",[306,103152,103153],{"align":23729},[103,103154,103155],{},"size=\"0.03\"",[306,103157,103158,103159,103162],{"align":23729},"胶囊半径，长度常用 ",[103,103160,103161],{},"fromto"," 指定",[260,103164,103165,103170,103175],{},[306,103166,103167],{"align":23729},[103,103168,103169],{},"plane",[306,103171,103172],{"align":23729},[103,103173,103174],{},"size=\"3 3 0.1\"",[306,103176,103177],{"align":23729},"可视平面大小，通常当地面",[14,103179,103180,103181,103183,103184,103186],{},"最容易踩坑的是 box：",[103,103182,102009],{}," 表示边长大约是 ",[103,103185,32031],{},"，因为 MuJoCo 用的是半边长。",[77,103188,103190],{"id":103189},"site-是什么","site 是什么",[14,103192,103193,103196],{},[103,103194,103195],{},"site"," 是一个不参与碰撞的小标记点。它常用于：",[60,103198,103199,103202,103205,103208],{},[63,103200,103201],{},"标记机械臂末端。",[63,103203,103204],{},"标记目标位置。",[63,103206,103207],{},"放传感器或相机参考点。",[63,103209,103210],{},"在 Python 中读取某个关键点的世界坐标。",[14,103212,103213,103214,101003,103217,103220],{},"在后面的 Reacher 任务中，",[103,103215,103216],{},"tip",[103,103218,103219],{},"target"," 就会用 site 表示。",[48,103222,101238],{"id":101237},[97,103224,103226],{"className":30372,"code":103225,"language":30374,"meta":25,"style":25},"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",[103,103227,103228,103234,103244,103248,103252,103260,103265,103269,103273,103277,103282,103286,103291,103296,103301,103306,103310,103314,103318,103322,103326,103330,103342,103354,103362,103366,103381,103396,103400,103413,103428,103441,103454,103458,103474,103478,103482,103493,103505,103517,103529,103533,103537,103549],{"__ignoreMap":25},[106,103229,103230,103232],{"class":108,"line":109},[106,103231,30386],{"class":112},[106,103233,101286],{"class":116},[106,103235,103236,103238,103240,103242],{"class":108,"line":28},[106,103237,30386],{"class":112},[106,103239,31374],{"class":116},[106,103241,31377],{"class":112},[106,103243,31380],{"class":116},[106,103245,103246],{"class":108,"line":1172},[106,103247,2392],{"emptyLinePlaceholder":33},[106,103249,103250],{"class":108,"line":1187},[106,103251,2392],{"emptyLinePlaceholder":33},[106,103253,103254,103256,103258],{"class":108,"line":1193},[106,103255,101299],{"class":165},[106,103257,13557],{"class":112},[106,103259,101304],{"class":221},[106,103261,103262],{"class":108,"line":1207},[106,103263,103264],{"class":221},"\u003Cmujoco model=\"xml_basic\">\n",[106,103266,103267],{"class":108,"line":1213},[106,103268,101314],{"class":221},[106,103270,103271],{"class":108,"line":1304},[106,103272,2392],{"emptyLinePlaceholder":33},[106,103274,103275],{"class":108,"line":1310},[106,103276,101323],{"class":221},[106,103278,103279],{"class":108,"line":1322},[106,103280,103281],{"class":221},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.7 0.7 0.7 1\"\u002F>\n",[106,103283,103284],{"class":108,"line":1604},[106,103285,2392],{"emptyLinePlaceholder":33},[106,103287,103288],{"class":108,"line":1609},[106,103289,103290],{"class":221},"    \u003Cbody name=\"red_box\" pos=\"0 0 1\">\n",[106,103292,103293],{"class":108,"line":1615},[106,103294,103295],{"class":221},"      \u003Cfreejoint name=\"red_box_free\"\u002F>\n",[106,103297,103298],{"class":108,"line":1620},[106,103299,103300],{"class":221},"      \u003Cgeom name=\"red_box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[106,103302,103303],{"class":108,"line":1634},[106,103304,103305],{"class":221},"      \u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[106,103307,103308],{"class":108,"line":1639},[106,103309,101352],{"class":221},[106,103311,103312],{"class":108,"line":1645},[106,103313,101357],{"class":221},[106,103315,103316],{"class":108,"line":1666},[106,103317,101362],{"class":221},[106,103319,103320],{"class":108,"line":1671},[106,103321,95683],{"class":221},[106,103323,103324],{"class":108,"line":1685},[106,103325,2392],{"emptyLinePlaceholder":33},[106,103327,103328],{"class":108,"line":1690},[106,103329,2392],{"emptyLinePlaceholder":33},[106,103331,103332,103334,103336,103338,103340],{"class":108,"line":1719},[106,103333,31941],{"class":112},[106,103335,1965],{"class":1955},[106,103337,101383],{"class":116},[106,103339,95671],{"class":165},[106,103341,3731],{"class":116},[106,103343,103344,103346,103348,103350,103352],{"class":108,"line":1724},[106,103345,101392],{"class":116},[106,103347,162],{"class":112},[106,103349,101397],{"class":116},[106,103351,101299],{"class":165},[106,103353,123],{"class":116},[106,103355,103356,103358,103360],{"class":108,"line":1741},[106,103357,101406],{"class":116},[106,103359,162],{"class":112},[106,103361,101411],{"class":116},[106,103363,103364],{"class":108,"line":1746},[106,103365,2392],{"emptyLinePlaceholder":33},[106,103367,103368,103371,103373,103376,103379],{"class":108,"line":1751},[106,103369,103370],{"class":116},"    box_body_id ",[106,103372,162],{"class":112},[106,103374,103375],{"class":116}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, ",[106,103377,103378],{"class":221},"\"red_box\"",[106,103380,123],{"class":116},[106,103382,103383,103386,103388,103391,103394],{"class":108,"line":1756},[106,103384,103385],{"class":116},"    site_id ",[106,103387,162],{"class":112},[106,103389,103390],{"class":116}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, ",[106,103392,103393],{"class":221},"\"box_center\"",[106,103395,123],{"class":116},[106,103397,103398],{"class":108,"line":1770},[106,103399,2392],{"emptyLinePlaceholder":33},[106,103401,103402,103404,103407,103409,103411],{"class":108,"line":1775},[106,103403,3093],{"class":112},[106,103405,103406],{"class":116}," box_body_id ",[106,103408,1027],{"class":112},[106,103410,4085],{"class":165},[106,103412,3731],{"class":116},[106,103414,103415,103418,103421,103423,103426],{"class":108,"line":2569},[106,103416,103417],{"class":112},"        raise",[106,103419,103420],{"class":165}," RuntimeError",[106,103422,117],{"class":116},[106,103424,103425],{"class":221},"\"body red_box not found\"",[106,103427,123],{"class":116},[106,103429,103430,103432,103435,103437,103439],{"class":108,"line":2583},[106,103431,3093],{"class":112},[106,103433,103434],{"class":116}," site_id ",[106,103436,1027],{"class":112},[106,103438,4085],{"class":165},[106,103440,3731],{"class":116},[106,103442,103443,103445,103447,103449,103452],{"class":108,"line":2591},[106,103444,103417],{"class":112},[106,103446,103420],{"class":165},[106,103448,117],{"class":116},[106,103450,103451],{"class":221},"\"site box_center not found\"",[106,103453,123],{"class":116},[106,103455,103456],{"class":108,"line":2596},[106,103457,2392],{"emptyLinePlaceholder":33},[106,103459,103460,103462,103464,103466,103468,103470,103472],{"class":108,"line":2602},[106,103461,3193],{"class":112},[106,103463,101486],{"class":116},[106,103465,26037],{"class":112},[106,103467,32437],{"class":165},[106,103469,117],{"class":116},[106,103471,1714],{"class":165},[106,103473,30780],{"class":116},[106,103475,103476],{"class":108,"line":2608},[106,103477,101501],{"class":116},[106,103479,103480],{"class":108,"line":2613},[106,103481,2392],{"emptyLinePlaceholder":33},[106,103483,103484,103486,103488,103491],{"class":108,"line":7941},[106,103485,31293],{"class":165},[106,103487,117],{"class":116},[106,103489,103490],{"class":221},"\"simulation time:\"",[106,103492,101463],{"class":116},[106,103494,103495,103497,103499,103502],{"class":108,"line":7965},[106,103496,31293],{"class":165},[106,103498,117],{"class":116},[106,103500,103501],{"class":221},"\"box body position:\"",[106,103503,103504],{"class":116},", data.xpos[box_body_id].copy())\n",[106,103506,103507,103509,103511,103514],{"class":108,"line":7970},[106,103508,31293],{"class":165},[106,103510,117],{"class":116},[106,103512,103513],{"class":221},"\"site position:\"",[106,103515,103516],{"class":116},", data.site_xpos[site_id].copy())\n",[106,103518,103519,103521,103523,103526],{"class":108,"line":7976},[106,103520,31293],{"class":165},[106,103522,117],{"class":116},[106,103524,103525],{"class":221},"\"box qpos:\"",[106,103527,103528],{"class":116},", np.array(data.qpos))\n",[106,103530,103531],{"class":108,"line":8003},[106,103532,2392],{"emptyLinePlaceholder":33},[106,103534,103535],{"class":108,"line":8008},[106,103536,2392],{"emptyLinePlaceholder":33},[106,103538,103539,103541,103543,103545,103547],{"class":108,"line":8014},[106,103540,1523],{"class":112},[106,103542,31214],{"class":165},[106,103544,101544],{"class":112},[106,103546,101547],{"class":221},[106,103548,3731],{"class":116},[106,103550,103551],{"class":108,"line":8026},[106,103552,101554],{"class":116},[14,103554,103555],{},"保存为：",[97,103557,103559],{"className":23815,"code":103558,"language":23817,"meta":25,"style":25},"touch ch2_xml_basic.py\n",[103,103560,103561],{"__ignoreMap":25},[106,103562,103563,103565],{"class":108,"line":109},[106,103564,101268],{"class":1955},[106,103566,103567],{"class":221}," ch2_xml_basic.py\n",[14,103569,102286],{},[97,103571,103573],{"className":23815,"code":103572,"language":23817,"meta":25,"style":25},"python ch2_xml_basic.py\n",[103,103574,103575],{"__ignoreMap":25},[106,103576,103577,103579],{"class":108,"line":109},[106,103578,30374],{"class":1955},[106,103580,103567],{"class":221},[77,103582,101557],{"id":101557},[14,103584,103585],{},"用名字查找 body：",[97,103587,103589],{"className":30372,"code":103588,"language":30374,"meta":25,"style":25},"box_body_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_BODY, \"red_box\")\n",[103,103590,103591],{"__ignoreMap":25},[106,103592,103593,103596,103598,103600,103602],{"class":108,"line":109},[106,103594,103595],{"class":116},"box_body_id ",[106,103597,162],{"class":112},[106,103599,103375],{"class":116},[106,103601,103378],{"class":221},[106,103603,123],{"class":116},[14,103605,103606],{},"MuJoCo 内部主要用数字 ID 管理对象。你在 XML 里写的是名字，Python 读取数组时常常需要先把名字转成 ID。",[14,103608,103609],{},"用名字查找 site：",[97,103611,103613],{"className":30372,"code":103612,"language":30374,"meta":25,"style":25},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"box_center\")\n",[103,103614,103615],{"__ignoreMap":25},[106,103616,103617,103620,103622,103624,103626],{"class":108,"line":109},[106,103618,103619],{"class":116},"site_id ",[106,103621,162],{"class":112},[106,103623,103390],{"class":116},[106,103625,103393],{"class":221},[106,103627,123],{"class":116},[14,103629,103630,103631,103634,103635,103638],{},"注意第二个参数是对象类型。查 body 就用 ",[103,103632,103633],{},"mjOBJ_BODY","，查 site 就用 ",[103,103636,103637],{},"mjOBJ_SITE","。名字相同但类型不同，也不是同一个对象。",[14,103640,103641],{},"读取世界坐标：",[97,103643,103645],{"className":30372,"code":103644,"language":30374,"meta":25,"style":25},"data.xpos[box_body_id]\ndata.site_xpos[site_id]\n",[103,103646,103647,103652],{"__ignoreMap":25},[106,103648,103649],{"class":108,"line":109},[106,103650,103651],{"class":116},"data.xpos[box_body_id]\n",[106,103653,103654],{"class":108,"line":28},[106,103655,103656],{"class":116},"data.site_xpos[site_id]\n",[14,103658,103659,103662,103663,103666],{},[103,103660,103661],{},"xpos"," 是 body 的世界坐标，",[103,103664,103665],{},"site_xpos"," 是 site 的世界坐标。",[77,103668,101693],{"id":101693},[97,103670,103672],{"className":30372,"code":103671,"language":30374,"meta":25,"style":25},"import mujoco\nimport numpy as np\n",[103,103673,103674,103680],{"__ignoreMap":25},[106,103675,103676,103678],{"class":108,"line":109},[106,103677,30386],{"class":112},[106,103679,101286],{"class":116},[106,103681,103682,103684,103686,103688],{"class":108,"line":28},[106,103683,30386],{"class":112},[106,103685,31374],{"class":116},[106,103687,31377],{"class":112},[106,103689,31380],{"class":116},[14,103691,103692,103693,103696,103697,103700,103701,329,103704,28379],{},"第一行导入 MuJoCo。第二行导入 NumPy，并给它起别名 ",[103,103694,103695],{},"np","。NumPy 是 Python 里处理数组和数值计算最常用的库。",[103,103698,103699],{},"as np"," 是习惯写法，后面就可以写 ",[103,103702,103703],{},"np.array(...)",[103,103705,103706],{},"np.round(...)",[97,103708,103709],{"className":30372,"code":101580,"language":30374,"meta":25,"style":25},[103,103710,103711,103719,103723],{"__ignoreMap":25},[106,103712,103713,103715,103717],{"class":108,"line":109},[106,103714,101299],{"class":165},[106,103716,13557],{"class":112},[106,103718,101304],{"class":221},[106,103720,103721],{"class":108,"line":28},[106,103722,101595],{"class":221},[106,103724,103725],{"class":108,"line":1172},[106,103726,95683],{"class":221},[14,103728,103729,103730,28379],{},"这里把 MJCF 模型保存成字符串。Python 不会理解 XML 的物理含义，真正解析 XML 的是 ",[103,103731,103732],{},"mujoco.MjModel.from_xml_string(XML)",[97,103734,103736],{"className":53061,"code":103735,"language":53063,"meta":25,"style":25},"\u003Csite name=\"box_center\" pos=\"0 0 0\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[103,103737,103738],{"__ignoreMap":25},[106,103739,103740,103742,103744,103746,103748,103750,103752,103754,103757,103759,103761,103764,103766,103768,103771],{"class":108,"line":109},[106,103741,1027],{"class":116},[106,103743,103195],{"class":51294},[106,103745,14913],{"class":1955},[106,103747,162],{"class":116},[106,103749,103393],{"class":221},[106,103751,101091],{"class":1955},[106,103753,162],{"class":116},[106,103755,103756],{"class":221},"\"0 0 0\"",[106,103758,101121],{"class":1955},[106,103760,162],{"class":116},[106,103762,103763],{"class":221},"\"0.03\"",[106,103765,78761],{"class":1955},[106,103767,162],{"class":116},[106,103769,103770],{"class":221},"\"0 1 0 1\"",[106,103772,101129],{"class":116},[14,103774,103775,103777,103778,103781,103782,103784,103785,103788],{},[103,103776,103195],{}," 是标记点。",[103,103779,103780],{},"pos=\"0 0 0\""," 表示这个点在 red_box body 的局部原点。",[103,103783,103155],{}," 表示显示出来的小球大小。",[103,103786,103787],{},"rgba=\"0 1 0 1\""," 表示绿色。",[97,103790,103791],{"className":30372,"code":103588,"language":30374,"meta":25,"style":25},[103,103792,103793],{"__ignoreMap":25},[106,103794,103795,103797,103799,103801,103803],{"class":108,"line":109},[106,103796,103595],{"class":116},[106,103798,162],{"class":112},[106,103800,103375],{"class":116},[106,103802,103378],{"class":221},[106,103804,123],{"class":116},[14,103806,103807,103808,103810],{},"这行的作用是：根据名字 ",[103,103809,103378],{}," 找到对应 body 的数字 ID。MuJoCo 内部数组不用名字索引，而是用数字索引，所以要先把名字转换成 ID。",[14,103812,103813],{},"拆开看：",[60,103815,103816,103822,103827,103833],{},[63,103817,103818,103821],{},[103,103819,103820],{},"mujoco.mj_name2id"," 是 MuJoCo 提供的查找函数。",[63,103823,103824,103826],{},[103,103825,102070],{}," 是被查询的模型。",[63,103828,103829,103832],{},[103,103830,103831],{},"mujoco.mjtObj.mjOBJ_BODY"," 表示要找的是 body。",[63,103834,103835,103837],{},[103,103836,103378],{}," 是 XML 里写的名字。",[97,103839,103840],{"className":30372,"code":103612,"language":30374,"meta":25,"style":25},[103,103841,103842],{"__ignoreMap":25},[106,103843,103844,103846,103848,103850,103852],{"class":108,"line":109},[106,103845,103619],{"class":116},[106,103847,162],{"class":112},[106,103849,103390],{"class":116},[106,103851,103393],{"class":221},[106,103853,123],{"class":116},[14,103855,103856,103857,28379],{},"这行同理，只是查找对象类型换成了 site，名字换成了 ",[103,103858,103393],{},[97,103860,103862],{"className":30372,"code":103861,"language":30374,"meta":25,"style":25},"if box_body_id \u003C 0:\n    raise RuntimeError(\"body red_box not found\")\n",[103,103863,103864,103876],{"__ignoreMap":25},[106,103865,103866,103868,103870,103872,103874],{"class":108,"line":109},[106,103867,1523],{"class":112},[106,103869,103406],{"class":116},[106,103871,1027],{"class":112},[106,103873,4085],{"class":165},[106,103875,3731],{"class":116},[106,103877,103878,103881,103883,103885,103887],{"class":108,"line":28},[106,103879,103880],{"class":112},"    raise",[106,103882,103420],{"class":165},[106,103884,117],{"class":116},[106,103886,103425],{"class":221},[106,103888,123],{"class":116},[14,103890,103891,103893,103894,103897,103898,103901,103902,103905],{},[103,103892,1523],{}," 是条件判断。",[103,103895,103896],{},"mj_name2id"," 找不到对象时会返回 ",[103,103899,103900],{},"-1","。所以如果 ID 小于 0，就说明名字写错了。",[103,103903,103904],{},"raise RuntimeError(...)"," 表示主动抛出错误，让程序停下来并告诉你原因。",[97,103907,103909],{"className":30372,"code":103908,"language":30374,"meta":25,"style":25},"for _ in range(200):\n    mujoco.mj_step(model, data)\n",[103,103910,103911,103927],{"__ignoreMap":25},[106,103912,103913,103915,103917,103919,103921,103923,103925],{"class":108,"line":109},[106,103914,3017],{"class":112},[106,103916,101486],{"class":116},[106,103918,26037],{"class":112},[106,103920,32437],{"class":165},[106,103922,117],{"class":116},[106,103924,1714],{"class":165},[106,103926,30780],{"class":116},[106,103928,103929],{"class":108,"line":28},[106,103930,101684],{"class":116},[14,103932,103933],{},"这段让仿真运行 200 步。因为 timestep 是 0.01，所以仿真时间约为 2 秒。",[97,103935,103937],{"className":30372,"code":103936,"language":30374,"meta":25,"style":25},"print(\"box body position:\", data.xpos[box_body_id].copy())\n",[103,103938,103939],{"__ignoreMap":25},[106,103940,103941,103943,103945,103947],{"class":108,"line":109},[106,103942,30409],{"class":165},[106,103944,117],{"class":116},[106,103946,103501],{"class":221},[106,103948,103504],{"class":116},[14,103950,103951,103953,103954,103957],{},[103,103952,101064],{}," 保存所有 body 的世界坐标。",[103,103955,103956],{},"data.xpos[box_body_id]"," 表示取出 red_box 这个 body 的世界坐标。",[97,103959,103961],{"className":30372,"code":103960,"language":30374,"meta":25,"style":25},"print(\"site position:\", data.site_xpos[site_id].copy())\n",[103,103962,103963],{"__ignoreMap":25},[106,103964,103965,103967,103969,103971],{"class":108,"line":109},[106,103966,30409],{"class":165},[106,103968,117],{"class":116},[106,103970,103513],{"class":221},[106,103972,103516],{"class":116},[14,103974,103975,103978,103979,103981],{},[103,103976,103977],{},"data.site_xpos"," 保存所有 site 的世界坐标。因为 ",[103,103980,102962],{}," 放在 box 的中心，所以它的位置通常和 box body 的位置接近。",[97,103983,103985],{"className":30372,"code":103984,"language":30374,"meta":25,"style":25},"print(\"box qpos:\", np.array(data.qpos))\n",[103,103986,103987],{"__ignoreMap":25},[106,103988,103989,103991,103993,103995],{"class":108,"line":109},[106,103990,30409],{"class":165},[106,103992,117],{"class":116},[106,103994,103525],{"class":221},[106,103996,103528],{"class":116},[14,103998,103999,104000,104003],{},"这里打印广义位置数组。",[103,104001,104002],{},"np.array(data.qpos)"," 把 MuJoCo 内部数组转成 NumPy 数组，方便显示和后续计算。",[48,104005,102301],{"id":102300},[14,104007,104008,104009,104012,104013,28379],{},"程序会输出 ",[103,104010,104011],{},"simulation time","、box 的世界坐标、site 的世界坐标和 ",[103,104014,104015],{},"qpos",[14,104017,104018,104020,104021,104024,104025,104028],{},[103,104019,103956],{}," 是 body 的世界坐标位置。",[103,104022,104023],{},"data.site_xpos[site_id]"," 是 site 的世界坐标位置。",[103,104026,104027],{},"mujoco.mj_name2id(...)"," 用名字查找模型元素 ID。",[14,104030,82216,104031,82524,104033,104035],{},[103,104032,102962],{},[103,104034,103780],{},"，那么它位于 box body 的局部原点。由于这个例子里 site 放在 body 中心，所以 body position 和 site position 通常非常接近。",[14,104037,104038],{},"如果你把 site 改成：",[97,104040,104042],{"className":53061,"code":104041,"language":53063,"meta":25,"style":25},"\u003Csite name=\"box_top\" pos=\"0 0 0.15\" size=\"0.03\" rgba=\"0 1 0 1\"\u002F>\n",[103,104043,104044],{"__ignoreMap":25},[106,104045,104046,104048,104050,104052,104054,104057,104059,104061,104064,104066,104068,104070,104072,104074,104076],{"class":108,"line":109},[106,104047,1027],{"class":116},[106,104049,103195],{"class":51294},[106,104051,14913],{"class":1955},[106,104053,162],{"class":116},[106,104055,104056],{"class":221},"\"box_top\"",[106,104058,101091],{"class":1955},[106,104060,162],{"class":116},[106,104062,104063],{"class":221},"\"0 0 0.15\"",[106,104065,101121],{"class":1955},[106,104067,162],{"class":116},[106,104069,103763],{"class":221},[106,104071,78761],{"class":1955},[106,104073,162],{"class":116},[106,104075,103770],{"class":221},[106,104077,101129],{"class":116},[14,104079,104080,104081,104084],{},"那么 site 会在盒子局部坐标的上方，输出的 ",[103,104082,104083],{},"site position"," 就会比 body position 的 z 坐标更高。",[48,104086,102333],{"id":102332},[60,104088,104089,104098,104101,104108,104114,104125],{},[63,104090,102396,104091,104093,104094,102399,104096,28379],{},[103,104092,102966],{}," 的初始高度从 ",[103,104095,334],{},[103,104097,194],{},[63,104099,104100],{},"重新运行程序。",[63,104102,104103,104104,104107],{},"观察 ",[103,104105,104106],{},"box qpos"," 和最终位置是否变化。",[63,104109,104110,104111,104113],{},"故意把 ",[103,104112,103195],{}," 名称改错，确认程序能报错。",[63,104115,102396,104116,104118,104119,102399,104121,104124],{},[103,104117,101105],{}," 的颜色 ",[103,104120,102017],{},[103,104122,104123],{},"rgba=\"0 0 1 1\"","，后面用 viewer 看颜色变化。",[63,104126,102396,104127,82524,104129,102399,104132,104135,104136,104138],{},[103,104128,102962],{},[103,104130,104131],{},"pos",[103,104133,104134],{},"0 0 0.2","，观察 ",[103,104137,104083],{}," 如何变化。",[48,104140,102438],{"id":102437},[77,104142,104144],{"id":104143},"xml-error-schema-violation",[103,104145,104146],{},"XML Error: Schema violation",[14,104148,104149],{},"说明 XML 标签或属性不合法。查官方 XML Reference，确认标签放在正确父标签下面，属性名拼写正确。",[77,104151,104153,81284,104155],{"id":104152},"mj_name2id-返回-1",[103,104154,103896],{},[103,104156,103900],{},[14,104158,104159,104160,104163],{},"说明名字没有找到。检查 XML 中 ",[103,104161,104162],{},"name=\"...\"","，并确认对象类型正确。",[77,104165,104166],{"id":104166},"物体不下落",[14,104168,102508],{},[60,104170,104171,104176,104181],{},[63,104172,104173,104174],{},"body 是否有 ",[103,104175,101605],{},[63,104177,104178,104179],{},"gravity 是否为 ",[103,104180,102574],{},[63,104182,104183,104184,104186],{},"body 是否被固定在 ",[103,104185,101826],{}," 中",[77,104188,104189],{"id":104189},"坐标看起来不符合预期",[14,104191,104192],{},"先区分两种坐标：",[254,104194,104195,104204],{},[257,104196,104197],{},[260,104198,104199,104202],{},[263,104200,104201],{"align":23729},"坐标",[263,104203,100685],{"align":23729},[301,104205,104206,104216],{},[260,104207,104208,104213],{},[306,104209,104210,104211],{"align":23729},"XML 里的 ",[103,104212,104131],{},[306,104214,104215],{"align":23729},"相对父 body 的局部坐标",[260,104217,104218,104224],{},[306,104219,104220,24972,104222],{"align":23729},[103,104221,101064],{},[103,104223,103977],{},[306,104225,104226],{"align":23729},"仿真更新后的世界坐标",[14,104228,104229,104230,104232,104233,82533,104236,104238],{},"如果你修改了 ",[103,104231,101055],{},"，但还没调用 ",[103,104234,104235],{},"mj_forward",[103,104237,101200],{},"，世界坐标可能还没有更新。",[48,104240,102592],{"id":102591},[14,104242,104243],{},"MJCF 建模先掌握四件事：",[60,104245,104246,104251,104256,104261],{},[63,104247,104248,104250],{},[103,104249,51794],{}," 表示刚体层级。",[63,104252,104253,104255],{},[103,104254,101105],{}," 表示形状、碰撞和质量。",[63,104257,104258,104260],{},[103,104259,102941],{}," 决定 body 能不能动、怎么动。",[63,104262,104263,104265],{},[103,104264,103195],{}," 用来标记关键点，方便 Python 读取位置。",[14,104267,104268],{},"只要能看懂 body、geom、joint、site，后面搭建 Cartpole 和 Reacher 就不会迷路。",[5119,104270,104271],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":25,"searchDepth":28,"depth":28,"links":104273},[104274,104275,104276,104282,104286,104287,104288,104295],{"id":100631,"depth":28,"text":100632},{"id":100754,"depth":28,"text":100755},{"id":101029,"depth":28,"text":101030,"children":104277},[104278,104279,104280,104281],{"id":102945,"depth":1172,"text":102945},{"id":103059,"depth":1172,"text":103059},{"id":103085,"depth":1172,"text":103086},{"id":103189,"depth":1172,"text":103190},{"id":101237,"depth":28,"text":101238,"children":104283},[104284,104285],{"id":101557,"depth":1172,"text":101557},{"id":101693,"depth":1172,"text":101693},{"id":102300,"depth":28,"text":102301},{"id":102332,"depth":28,"text":102333},{"id":102437,"depth":28,"text":102438,"children":104289},[104290,104291,104293,104294],{"id":104143,"depth":1172,"text":104146},{"id":104152,"depth":1172,"text":104292},"mj_name2id 返回 -1",{"id":104166,"depth":1172,"text":104166},{"id":104189,"depth":1172,"text":104189},{"id":102591,"depth":28,"text":102592},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch2-xmlmjcf",{"title":102639,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch2-XML与MJCF物理建模基础","Y8Y5A098PzvFI7G-_y7JK19FBEdoto95izJP4Ykw-IM",{"id":104302,"title":104303,"body":104304,"description":25,"extension":31,"meta":105799,"navigation":33,"path":105800,"seo":105801,"stem":105802,"__hash__":105803},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口.md","3.Python 控制接口：读取状态与推进仿真",{"type":7,"value":104305,"toc":105771},[104306,104309,104311,104314,104317,104355,104358,104364,104367,104369,104371,104398,104400,104414,104416,104457,104459,104483,104485,104488,104497,104506,104509,104518,104526,104535,104538,104548,104551,104603,104610,104616,104624,104672,104675,104694,104697,104705,104709,104718,104751,104753,105101,105103,105115,105117,105128,105130,105133,105154,105160,105163,105188,105198,105201,105209,105212,105215,105236,105247,105249,105269,105272,105293,105302,105321,105327,105352,105355,105369,105376,105400,105403,105411,105420,105436,105448,105456,105465,105467,105470,105494,105499,105502,105524,105526,105565,105567,105574,105576,105584,105587,105590,105602,105643,105650,105661,105668,105671,105720,105723,105726,105732,105734,105739,105765,105768],[10,104307,104303],{"id":104308},"_3python-控制接口读取状态与推进仿真",[48,104310,100632],{"id":100631},[14,104312,104313],{},"本章理解 Python 如何控制 MuJoCo 仿真。",[14,104315,104316],{},"你将学习:",[60,104318,104319,104324,104329,104333,104338,104349],{},[63,104320,104321],{},[103,104322,104323],{},"MjModel.from_xml_string",[63,104325,104326],{},[103,104327,104328],{},"MjData(model)",[63,104330,104331],{},[103,104332,101200],{},[63,104334,104335],{},[103,104336,104337],{},"mj_resetData",[63,104339,104340,104341,329,104343,329,104346],{},"读取 ",[103,104342,104015],{},[103,104344,104345],{},"qvel",[103,104347,104348],{},"ctrl",[63,104350,104351,104352],{},"使用 ",[103,104353,104354],{},"model.opt.timestep",[14,104356,104357],{},"从这一章开始，你要把 MuJoCo 当成一个“状态机”来看：",[97,104359,104362],{"className":104360,"code":104361,"language":5180,"meta":25},[5178],"当前状态 data\n    + 当前控制 data.ctrl\n    + 模型参数 model\n          ↓\n      mj_step\n          ↓\n新的状态 data\n",[103,104363,104361],{"__ignoreMap":25},[14,104365,104366],{},"后面写控制器、奖励函数、强化学习环境，都是围绕这个状态机展开。",[48,104368,100755],{"id":100754},[14,104370,100758],{},[97,104372,104374],{"className":23815,"code":104373,"language":23817,"meta":25,"style":25},"sudo dnf install -y python3 python3-pip mesa-libGL mesa-dri-drivers glfw\n",[103,104375,104376],{"__ignoreMap":25},[106,104377,104378,104380,104382,104384,104386,104389,104391,104393,104395],{"class":108,"line":109},[106,104379,24570],{"class":1955},[106,104381,26309],{"class":221},[106,104383,23827],{"class":221},[106,104385,26394],{"class":165},[106,104387,104388],{"class":221}," python3",[106,104390,100783],{"class":221},[106,104392,102486],{"class":221},[106,104394,100799],{"class":221},[106,104396,104397],{"class":221}," glfw\n",[14,104399,102804],{},[97,104401,104402],{"className":23815,"code":100904,"language":23817,"meta":25,"style":25},[103,104403,104404],{"__ignoreMap":25},[106,104405,104406,104408,104410,104412],{"class":108,"line":109},[106,104407,23824],{"class":1955},[106,104409,23827],{"class":221},[106,104411,100915],{"class":221},[106,104413,100918],{"class":221},[14,104415,102821],{},[97,104417,104419],{"className":23815,"code":104418,"language":23817,"meta":25,"style":25},"conda create -n mujoco-python-api python=3.10 -y\nconda activate mujoco-python-api\npip install \"mujoco>=2.3\" numpy\n",[103,104420,104421,104438,104447],{"__ignoreMap":25},[106,104422,104423,104425,104427,104429,104432,104434,104436],{"class":108,"line":109},[106,104424,30324],{"class":1955},[106,104426,29170],{"class":221},[106,104428,25109],{"class":165},[106,104430,104431],{"class":221}," mujoco-python-api",[106,104433,100960],{"class":221},[106,104435,100963],{"class":165},[106,104437,100966],{"class":165},[106,104439,104440,104442,104444],{"class":108,"line":28},[106,104441,30324],{"class":1955},[106,104443,100973],{"class":221},[106,104445,104446],{"class":221}," mujoco-python-api\n",[106,104448,104449,104451,104453,104455],{"class":108,"line":1172},[106,104450,23824],{"class":1955},[106,104452,23827],{"class":221},[106,104454,100915],{"class":221},[106,104456,100918],{"class":221},[14,104458,100989],{},[60,104460,104461,104468,104477],{},[63,104462,104463,101003,104465,104467],{},[103,104464,100660],{},[103,104466,100665],{}," 是官方 Python bindings 的类名。",[63,104469,104470,104471,104474,104475,28379],{},"官方 Python API 中结构体名称使用大写开头，例如 C API 的 ",[103,104472,104473],{},"mjModel"," 在 Python 中是 ",[103,104476,100694],{},[63,104478,104479,104480,28379],{},"不要使用 ",[103,104481,104482],{},"sim = mujoco_py.MjSim(...)",[48,104484,101030],{"id":101029},[14,104486,104487],{},"仿真推进核心代码:",[97,104489,104491],{"className":30372,"code":104490,"language":30374,"meta":25,"style":25},"mujoco.mj_step(model, data)\n",[103,104492,104493],{"__ignoreMap":25},[106,104494,104495],{"class":108,"line":109},[106,104496,104490],{"class":116},[14,104498,104499,104500,329,104502,329,104504,28379],{},"这一步会根据当前状态和控制量计算力，推进动力学，并更新 ",[103,104501,101055],{},[103,104503,101058],{},[103,104505,101052],{},[14,104507,104508],{},"重置仿真:",[97,104510,104512],{"className":30372,"code":104511,"language":30374,"meta":25,"style":25},"mujoco.mj_resetData(model, data)\n",[103,104513,104514],{"__ignoreMap":25},[106,104515,104516],{"class":108,"line":109},[106,104517,104511],{"class":116},[14,104519,104520,104521,82533,104523,104525],{},"如果手动修改了 ",[103,104522,101055],{},[103,104524,101058],{},"，通常应调用:",[97,104527,104529],{"className":30372,"code":104528,"language":30374,"meta":25,"style":25},"mujoco.mj_forward(model, data)\n",[103,104530,104531],{"__ignoreMap":25},[106,104532,104533],{"class":108,"line":109},[106,104534,104528],{"class":116},[14,104536,104537],{},"让 MuJoCo 根据新状态更新派生量，例如 body 世界坐标。",[77,104539,104541,329,104543,329,104545,104547],{"id":104540},"qposqvelctrl-是什么",[103,104542,104015],{},[103,104544,104345],{},[103,104546,104348],{}," 是什么",[14,104549,104550],{},"这三个数组是 MuJoCo Python 控制里最常见的数组：",[254,104552,104553,104565],{},[257,104554,104555],{},[260,104556,104557,104560,104562],{},[263,104558,104559],{"align":23729},"字段",[263,104561,100685],{"align":23729},[263,104563,104564],{"align":23729},"谁来修改",[301,104566,104567,104579,104591],{},[260,104568,104569,104573,104576],{},[306,104570,104571],{"align":23729},[103,104572,101055],{},[306,104574,104575],{"align":23729},"广义位置，例如小车位置、关节角、自由物体位置姿态",[306,104577,104578],{"align":23729},"MuJoCo 更新，也可以手动设置初始状态",[260,104580,104581,104585,104588],{},[306,104582,104583],{"align":23729},[103,104584,101058],{},[306,104586,104587],{"align":23729},"广义速度，例如小车速度、关节角速度",[306,104589,104590],{"align":23729},"MuJoCo 更新，也可以手动清零",[260,104592,104593,104597,104600],{},[306,104594,104595],{"align":23729},[103,104596,101061],{},[306,104598,104599],{"align":23729},"actuator 的控制输入",[306,104601,104602],{"align":23729},"主要由你的控制代码写入",[14,104604,9018,104605,101003,104607,104609],{},[103,104606,104015],{},[103,104608,104345],{}," 不一定同维。自由刚体就是典型例子：",[97,104611,104614],{"className":104612,"code":104613,"language":5180,"meta":25},[5178],"freejoint: qpos 7 维，qvel 6 维\n",[103,104615,104613],{"__ignoreMap":25},[77,104617,104619,101003,104621,104623],{"id":104618},"mj_step-和-mj_forward-的区别",[103,104620,101200],{},[103,104622,104235],{}," 的区别",[254,104625,104626,104639],{},[257,104627,104628],{},[260,104629,104630,104633,104636],{},[263,104631,104632],{"align":23729},"函数",[263,104634,104635],{"align":23729},"是否推进时间",[263,104637,104638],{"align":23729},"什么时候用",[301,104640,104641,104654],{},[260,104642,104643,104648,104651],{},[306,104644,104645],{"align":23729},[103,104646,104647],{},"mj_step(model, data)",[306,104649,104650],{"align":23729},"是",[306,104652,104653],{"align":23729},"正常仿真循环，每调用一次前进一步",[260,104655,104656,104661,104664],{},[306,104657,104658],{"align":23729},[103,104659,104660],{},"mj_forward(model, data)",[306,104662,104663],{"align":23729},"否",[306,104665,104666,104667,329,104669,104671],{"align":23729},"手动改了 ",[103,104668,104015],{},[103,104670,104345],{}," 后，刷新派生量",[14,104673,104674],{},"例如你写：",[97,104676,104678],{"className":30372,"code":104677,"language":30374,"meta":25,"style":25},"data.qpos[2] = 2.0\n",[103,104679,104680],{"__ignoreMap":25},[106,104681,104682,104685,104687,104689,104691],{"class":108,"line":109},[106,104683,104684],{"class":116},"data.qpos[",[106,104686,194],{"class":165},[106,104688,4435],{"class":116},[106,104690,162],{"class":112},[106,104692,104693],{"class":165}," 2.0\n",[14,104695,104696],{},"这只是改了“原始状态数组”。MuJoCo 还没有重新计算 body 世界坐标、site 世界坐标等派生数据，所以要接着调用：",[97,104698,104699],{"className":30372,"code":104528,"language":30374,"meta":25,"style":25},[103,104700,104701],{"__ignoreMap":25},[106,104702,104703],{"class":108,"line":109},[106,104704,104528],{"class":116},[77,104706,104708],{"id":104707},"为什么-reset-后要重新设置状态","为什么 reset 后要重新设置状态",[14,104710,104711,104714,104715,104717],{},[103,104712,104713],{},"mujoco.mj_resetData(model, data)"," 会把 ",[103,104716,33395],{}," 重置回模型默认状态。如果你想每次 episode 从随机姿态开始，常见写法是：",[97,104719,104721],{"className":30372,"code":104720,"language":30374,"meta":25,"style":25},"mujoco.mj_resetData(model, data)\ndata.qpos[:] = random_qpos\ndata.qvel[:] = 0.0\nmujoco.mj_forward(model, data)\n",[103,104722,104723,104727,104737,104747],{"__ignoreMap":25},[106,104724,104725],{"class":108,"line":109},[106,104726,104511],{"class":116},[106,104728,104729,104732,104734],{"class":108,"line":28},[106,104730,104731],{"class":116},"data.qpos[:] ",[106,104733,162],{"class":112},[106,104735,104736],{"class":116}," random_qpos\n",[106,104738,104739,104742,104744],{"class":108,"line":1172},[106,104740,104741],{"class":116},"data.qvel[:] ",[106,104743,162],{"class":112},[106,104745,104746],{"class":165}," 0.0\n",[106,104748,104749],{"class":108,"line":1187},[106,104750,104528],{"class":116},[48,104752,101238],{"id":101237},[97,104754,104756],{"className":30372,"code":104755,"language":30374,"meta":25,"style":25},"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",[103,104757,104758,104764,104774,104778,104782,104790,104795,104799,104803,104807,104812,104816,104821,104826,104831,104835,104839,104843,104847,104851,104855,104874,104881,104893,104904,104920,104936,104940,104944,104956,104968,104976,104980,104991,104995,105011,105015,105019,105028,105032,105037,105046,105050,105063,105068,105077,105081,105085,105097],{"__ignoreMap":25},[106,104759,104760,104762],{"class":108,"line":109},[106,104761,30386],{"class":112},[106,104763,101286],{"class":116},[106,104765,104766,104768,104770,104772],{"class":108,"line":28},[106,104767,30386],{"class":112},[106,104769,31374],{"class":116},[106,104771,31377],{"class":112},[106,104773,31380],{"class":116},[106,104775,104776],{"class":108,"line":1172},[106,104777,2392],{"emptyLinePlaceholder":33},[106,104779,104780],{"class":108,"line":1187},[106,104781,2392],{"emptyLinePlaceholder":33},[106,104783,104784,104786,104788],{"class":108,"line":1193},[106,104785,101299],{"class":165},[106,104787,13557],{"class":112},[106,104789,101304],{"class":221},[106,104791,104792],{"class":108,"line":1207},[106,104793,104794],{"class":221},"\u003Cmujoco model=\"state_api\">\n",[106,104796,104797],{"class":108,"line":1213},[106,104798,101314],{"class":221},[106,104800,104801],{"class":108,"line":1304},[106,104802,2392],{"emptyLinePlaceholder":33},[106,104804,104805],{"class":108,"line":1310},[106,104806,101323],{"class":221},[106,104808,104809],{"class":108,"line":1322},[106,104810,104811],{"class":221},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\"\u002F>\n",[106,104813,104814],{"class":108,"line":1604},[106,104815,2392],{"emptyLinePlaceholder":33},[106,104817,104818],{"class":108,"line":1609},[106,104819,104820],{"class":221},"    \u003Cbody name=\"ball\" pos=\"0 0 1\">\n",[106,104822,104823],{"class":108,"line":1615},[106,104824,104825],{"class":221},"      \u003Cfreejoint name=\"ball_free\"\u002F>\n",[106,104827,104828],{"class":108,"line":1620},[106,104829,104830],{"class":221},"      \u003Cgeom name=\"ball_geom\" type=\"sphere\" size=\"0.1\" mass=\"1\" rgba=\"0 0.2 1 1\"\u002F>\n",[106,104832,104833],{"class":108,"line":1634},[106,104834,101352],{"class":221},[106,104836,104837],{"class":108,"line":1639},[106,104838,101357],{"class":221},[106,104840,104841],{"class":108,"line":1645},[106,104842,101362],{"class":221},[106,104844,104845],{"class":108,"line":1666},[106,104846,95683],{"class":221},[106,104848,104849],{"class":108,"line":1671},[106,104850,2392],{"emptyLinePlaceholder":33},[106,104852,104853],{"class":108,"line":1685},[106,104854,2392],{"emptyLinePlaceholder":33},[106,104856,104857,104859,104862,104865,104867,104870,104872],{"class":108,"line":1690},[106,104858,31941],{"class":112},[106,104860,104861],{"class":1955}," print_state",[106,104863,104864],{"class":116},"(prefix: ",[106,104866,1292],{"class":165},[106,104868,104869],{"class":116},", model: mujoco.MjModel, data: mujoco.MjData) -> ",[106,104871,95671],{"class":165},[106,104873,3731],{"class":116},[106,104875,104876,104878],{"class":108,"line":1719},[106,104877,31293],{"class":165},[106,104879,104880],{"class":116},"(prefix)\n",[106,104882,104883,104885,104887,104890],{"class":108,"line":1724},[106,104884,31293],{"class":165},[106,104886,117],{"class":116},[106,104888,104889],{"class":221},"\"  timestep:\"",[106,104891,104892],{"class":116},", model.opt.timestep)\n",[106,104894,104895,104897,104899,104902],{"class":108,"line":1741},[106,104896,31293],{"class":165},[106,104898,117],{"class":116},[106,104900,104901],{"class":221},"\"  time:\"",[106,104903,101463],{"class":116},[106,104905,104906,104908,104910,104913,104916,104918],{"class":108,"line":1746},[106,104907,31293],{"class":165},[106,104909,117],{"class":116},[106,104911,104912],{"class":221},"\"  qpos:\"",[106,104914,104915],{"class":116},", np.round(data.qpos.copy(), ",[106,104917,410],{"class":165},[106,104919,30491],{"class":116},[106,104921,104922,104924,104926,104929,104932,104934],{"class":108,"line":1751},[106,104923,31293],{"class":165},[106,104925,117],{"class":116},[106,104927,104928],{"class":221},"\"  qvel:\"",[106,104930,104931],{"class":116},", np.round(data.qvel.copy(), ",[106,104933,410],{"class":165},[106,104935,30491],{"class":116},[106,104937,104938],{"class":108,"line":1756},[106,104939,2392],{"emptyLinePlaceholder":33},[106,104941,104942],{"class":108,"line":1770},[106,104943,2392],{"emptyLinePlaceholder":33},[106,104945,104946,104948,104950,104952,104954],{"class":108,"line":1775},[106,104947,31941],{"class":112},[106,104949,1965],{"class":1955},[106,104951,101383],{"class":116},[106,104953,95671],{"class":165},[106,104955,3731],{"class":116},[106,104957,104958,104960,104962,104964,104966],{"class":108,"line":2569},[106,104959,101392],{"class":116},[106,104961,162],{"class":112},[106,104963,101397],{"class":116},[106,104965,101299],{"class":165},[106,104967,123],{"class":116},[106,104969,104970,104972,104974],{"class":108,"line":2583},[106,104971,101406],{"class":116},[106,104973,162],{"class":112},[106,104975,101411],{"class":116},[106,104977,104978],{"class":108,"line":2591},[106,104979,2392],{"emptyLinePlaceholder":33},[106,104981,104982,104985,104988],{"class":108,"line":2596},[106,104983,104984],{"class":116},"    print_state(",[106,104986,104987],{"class":221},"\"initial\"",[106,104989,104990],{"class":116},", model, data)\n",[106,104992,104993],{"class":108,"line":2602},[106,104994,2392],{"emptyLinePlaceholder":33},[106,104996,104997,104999,105001,105003,105005,105007,105009],{"class":108,"line":2608},[106,104998,3193],{"class":112},[106,105000,101486],{"class":116},[106,105002,26037],{"class":112},[106,105004,32437],{"class":165},[106,105006,117],{"class":116},[106,105008,773],{"class":165},[106,105010,30780],{"class":116},[106,105012,105013],{"class":108,"line":2613},[106,105014,101501],{"class":116},[106,105016,105017],{"class":108,"line":7941},[106,105018,2392],{"emptyLinePlaceholder":33},[106,105020,105021,105023,105026],{"class":108,"line":7965},[106,105022,104984],{"class":116},[106,105024,105025],{"class":221},"\"after 50 steps\"",[106,105027,104990],{"class":116},[106,105029,105030],{"class":108,"line":7970},[106,105031,2392],{"emptyLinePlaceholder":33},[106,105033,105034],{"class":108,"line":7976},[106,105035,105036],{"class":116},"    mujoco.mj_resetData(model, data)\n",[106,105038,105039,105041,105044],{"class":108,"line":8003},[106,105040,104984],{"class":116},[106,105042,105043],{"class":221},"\"after reset\"",[106,105045,104990],{"class":116},[106,105047,105048],{"class":108,"line":8008},[106,105049,2392],{"emptyLinePlaceholder":33},[106,105051,105052,105055,105057,105059,105061],{"class":108,"line":8014},[106,105053,105054],{"class":116},"    data.qpos[",[106,105056,194],{"class":165},[106,105058,4435],{"class":116},[106,105060,162],{"class":112},[106,105062,104693],{"class":165},[106,105064,105065],{"class":108,"line":8026},[106,105066,105067],{"class":116},"    mujoco.mj_forward(model, data)\n",[106,105069,105070,105072,105075],{"class":108,"line":8038},[106,105071,104984],{"class":116},[106,105073,105074],{"class":221},"\"after manual qpos edit\"",[106,105076,104990],{"class":116},[106,105078,105079],{"class":108,"line":8050},[106,105080,2392],{"emptyLinePlaceholder":33},[106,105082,105083],{"class":108,"line":9709},[106,105084,2392],{"emptyLinePlaceholder":33},[106,105086,105087,105089,105091,105093,105095],{"class":108,"line":9734},[106,105088,1523],{"class":112},[106,105090,31214],{"class":165},[106,105092,101544],{"class":112},[106,105094,101547],{"class":221},[106,105096,3731],{"class":116},[106,105098,105099],{"class":108,"line":9757},[106,105100,101554],{"class":116},[14,105102,103555],{},[97,105104,105106],{"className":23815,"code":105105,"language":23817,"meta":25,"style":25},"touch ch3_python_state.py\n",[103,105107,105108],{"__ignoreMap":25},[106,105109,105110,105112],{"class":108,"line":109},[106,105111,101268],{"class":1955},[106,105113,105114],{"class":221}," ch3_python_state.py\n",[14,105116,102286],{},[97,105118,105120],{"className":23815,"code":105119,"language":23817,"meta":25,"style":25},"python ch3_python_state.py\n",[103,105121,105122],{"__ignoreMap":25},[106,105123,105124,105126],{"class":108,"line":109},[106,105125,30374],{"class":1955},[106,105127,105114],{"class":221},[77,105129,101557],{"id":101557},[14,105131,105132],{},"打印状态的函数：",[97,105134,105136],{"className":30372,"code":105135,"language":30374,"meta":25,"style":25},"def print_state(prefix: str, model: mujoco.MjModel, data: mujoco.MjData) -> None:\n",[103,105137,105138],{"__ignoreMap":25},[106,105139,105140,105142,105144,105146,105148,105150,105152],{"class":108,"line":109},[106,105141,31941],{"class":112},[106,105143,104861],{"class":1955},[106,105145,104864],{"class":116},[106,105147,1292],{"class":165},[106,105149,104869],{"class":116},[106,105151,95671],{"class":165},[106,105153,3731],{"class":116},[14,105155,105156,105157,105159],{},"这个函数不是 MuJoCo 必需的，只是为了让你更清楚地看到每个阶段 ",[103,105158,33395],{}," 里发生了什么。",[14,105161,105162],{},"推进 50 步：",[97,105164,105166],{"className":30372,"code":105165,"language":30374,"meta":25,"style":25},"for _ in range(50):\n    mujoco.mj_step(model, data)\n",[103,105167,105168,105184],{"__ignoreMap":25},[106,105169,105170,105172,105174,105176,105178,105180,105182],{"class":108,"line":109},[106,105171,3017],{"class":112},[106,105173,101486],{"class":116},[106,105175,26037],{"class":112},[106,105177,32437],{"class":165},[106,105179,117],{"class":116},[106,105181,773],{"class":165},[106,105183,30780],{"class":116},[106,105185,105186],{"class":108,"line":28},[106,105187,101684],{"class":116},[14,105189,105190,105191,105194,105195,105197],{},"由于 ",[103,105192,105193],{},"timestep=0.01","，所以 50 步后时间约为 ",[103,105196,35323],{}," 秒。",[14,105199,105200],{},"重置：",[97,105202,105203],{"className":30372,"code":104511,"language":30374,"meta":25,"style":25},[103,105204,105205],{"__ignoreMap":25},[106,105206,105207],{"class":108,"line":109},[106,105208,104511],{"class":116},[14,105210,105211],{},"这会把时间、位置、速度恢复到初始状态。",[14,105213,105214],{},"手动改高度：",[97,105216,105218],{"className":30372,"code":105217,"language":30374,"meta":25,"style":25},"data.qpos[2] = 2.0\nmujoco.mj_forward(model, data)\n",[103,105219,105220,105232],{"__ignoreMap":25},[106,105221,105222,105224,105226,105228,105230],{"class":108,"line":109},[106,105223,104684],{"class":116},[106,105225,194],{"class":165},[106,105227,4435],{"class":116},[106,105229,162],{"class":112},[106,105231,104693],{"class":165},[106,105233,105234],{"class":108,"line":28},[106,105235,104528],{"class":116},[14,105237,105238,105239,105242,105243,105246],{},"这个例子里 ",[103,105240,105241],{},"qpos[2]"," 是 freejoint 的 z 坐标。改成 ",[103,105244,105245],{},"2.0"," 表示把小球放到更高的位置。",[77,105248,101693],{"id":101693},[97,105250,105251],{"className":30372,"code":105135,"language":30374,"meta":25,"style":25},[103,105252,105253],{"__ignoreMap":25},[106,105254,105255,105257,105259,105261,105263,105265,105267],{"class":108,"line":109},[106,105256,31941],{"class":112},[106,105258,104861],{"class":1955},[106,105260,104864],{"class":116},[106,105262,1292],{"class":165},[106,105264,104869],{"class":116},[106,105266,95671],{"class":165},[106,105268,3731],{"class":116},[14,105270,105271],{},"这里定义了一个辅助函数，用来打印状态。括号里的三个参数分别是：",[60,105273,105274,105283,105288],{},[63,105275,105276,105279,105280,105282],{},[103,105277,105278],{},"prefix","：一段文字，比如 ",[103,105281,104987],{},"，用来说明现在打印的是哪个阶段。",[63,105284,105285,105287],{},[103,105286,102070],{},"：MuJoCo 模型。",[63,105289,105290,105292],{},[103,105291,33395],{},"：MuJoCo 当前状态。",[14,105294,105295,329,105298,105301],{},[103,105296,105297],{},"prefix: str",[103,105299,105300],{},"model: mujoco.MjModel"," 这些是类型提示。它们帮助人和编辑器理解变量类型，不会改变程序运行逻辑。",[97,105303,105305],{"className":30372,"code":105304,"language":30374,"meta":25,"style":25},"print(\"  qpos:\", np.round(data.qpos.copy(), 4))\n",[103,105306,105307],{"__ignoreMap":25},[106,105308,105309,105311,105313,105315,105317,105319],{"class":108,"line":109},[106,105310,30409],{"class":165},[106,105312,117],{"class":116},[106,105314,104912],{"class":221},[106,105316,104915],{"class":116},[106,105318,410],{"class":165},[106,105320,30491],{"class":116},[14,105322,105323,105326],{},[103,105324,105325],{},"np.round(..., 4)"," 表示保留 4 位小数。仿真输出可能有很多小数，保留 4 位更容易看。",[97,105328,105330],{"className":30372,"code":105329,"language":30374,"meta":25,"style":25},"model = mujoco.MjModel.from_xml_string(XML)\ndata = mujoco.MjData(model)\n",[103,105331,105332,105344],{"__ignoreMap":25},[106,105333,105334,105336,105338,105340,105342],{"class":108,"line":109},[106,105335,101619],{"class":116},[106,105337,162],{"class":112},[106,105339,101397],{"class":116},[106,105341,101299],{"class":165},[106,105343,123],{"class":116},[106,105345,105346,105348,105350],{"class":108,"line":28},[106,105347,101643],{"class":116},[106,105349,162],{"class":112},[106,105351,101411],{"class":116},[14,105353,105354],{},"这两行是所有 MuJoCo 程序的常见开头：先编译模型，再创建运行数据。",[97,105356,105358],{"className":30372,"code":105357,"language":30374,"meta":25,"style":25},"print_state(\"initial\", model, data)\n",[103,105359,105360],{"__ignoreMap":25},[106,105361,105362,105365,105367],{"class":108,"line":109},[106,105363,105364],{"class":116},"print_state(",[106,105366,104987],{"class":221},[106,105368,104990],{"class":116},[14,105370,105371,105372,105375],{},"调用刚才定义的 ",[103,105373,105374],{},"print_state"," 函数，打印初始状态。",[97,105377,105378],{"className":30372,"code":105165,"language":30374,"meta":25,"style":25},[103,105379,105380,105396],{"__ignoreMap":25},[106,105381,105382,105384,105386,105388,105390,105392,105394],{"class":108,"line":109},[106,105383,3017],{"class":112},[106,105385,101486],{"class":116},[106,105387,26037],{"class":112},[106,105389,32437],{"class":165},[106,105391,117],{"class":116},[106,105393,773],{"class":165},[106,105395,30780],{"class":116},[106,105397,105398],{"class":108,"line":28},[106,105399,101684],{"class":116},[14,105401,105402],{},"循环 50 次，每次推进 0.01 秒，所以最后时间约为 0.5 秒。",[97,105404,105405],{"className":30372,"code":104511,"language":30374,"meta":25,"style":25},[103,105406,105407],{"__ignoreMap":25},[106,105408,105409],{"class":108,"line":109},[106,105410,104511],{"class":116},[14,105412,105413,105414,105416,105417,105419],{},"重置 ",[103,105415,33395],{},"。注意它不会重新创建 ",[103,105418,102070],{},"，因为模型结构没有变，只是状态回到初始值。",[97,105421,105422],{"className":30372,"code":104677,"language":30374,"meta":25,"style":25},[103,105423,105424],{"__ignoreMap":25},[106,105425,105426,105428,105430,105432,105434],{"class":108,"line":109},[106,105427,104684],{"class":116},[106,105429,194],{"class":165},[106,105431,4435],{"class":116},[106,105433,162],{"class":112},[106,105435,104693],{"class":165},[14,105437,105438,105439,329,105442,329,105445,105447],{},"这行是“手动改状态”。在 freejoint 中，",[103,105440,105441],{},"qpos[0]",[103,105443,105444],{},"qpos[1]",[103,105446,105241],{}," 分别是 x、y、z 坐标，所以这里把小球高度改成 2.0。",[97,105449,105450],{"className":30372,"code":104528,"language":30374,"meta":25,"style":25},[103,105451,105452],{"__ignoreMap":25},[106,105453,105454],{"class":108,"line":109},[106,105455,104528],{"class":116},[14,105457,105458,105459,105461,105462,105464],{},"手动改完 ",[103,105460,104015],{}," 后，调用 ",[103,105463,104235],{}," 让 MuJoCo 重新计算派生状态。它不推进时间，只刷新当前状态对应的世界坐标、碰撞信息等。",[48,105466,102301],{"id":102300},[14,105468,105469],{},"你会看到:",[60,105471,105472,105477,105482,105485],{},[63,105473,105474,105475],{},"初始时间为 ",[103,105476,308],{},[63,105478,105479,105480],{},"50 步后时间约为 ",[103,105481,35323],{},[63,105483,105484],{},"reset 后状态恢复",[63,105486,105487,105488,105491,105492],{},"手动修改 ",[103,105489,105490],{},"data.qpos[2]"," 后，小球高度变为 ",[103,105493,105245],{},[14,105495,105496,105498],{},[103,105497,105241],{}," 在这个例子中表示自由刚体的 z 坐标。",[14,105500,105501],{},"输出里可以重点看三件事：",[60,105503,105504,105512,105517],{},[63,105505,105506,105508,105509,105511],{},[103,105507,2379],{}," 是否随着 ",[103,105510,101200],{}," 增加。",[63,105513,105514,105516],{},[103,105515,104015],{}," 的 z 坐标是否因为下落而变化。",[63,105518,105519,105521,105522,28379],{},[103,105520,104337],{}," 后时间是否回到 ",[103,105523,308],{},[48,105525,102333],{"id":102332},[60,105527,105528,105534,105540,105546,105549,105558],{},[63,105529,105530,105531,28379],{},"修改 timestep 为 ",[103,105532,105533],{},"0.005",[63,105535,105536,105537,28379],{},"重新运行，检查 50 步后时间是否约为 ",[103,105538,105539],{},"0.25",[63,105541,105542,105543,28379],{},"修改重力为 ",[103,105544,105545],{},"0 0 -1.0",[63,105547,105548],{},"观察小球下降速度是否变慢。",[63,105550,102396,105551,102399,105554,105557],{},[103,105552,105553],{},"data.qpos[2] = 2.0",[103,105555,105556],{},"data.qpos[0] = 1.0","，观察 x 坐标是否变化。",[63,105559,105560,105561,105564],{},"注释掉 ",[103,105562,105563],{},"mujoco.mj_forward(model, data)","，观察派生状态是否可能没有及时更新。",[48,105566,102438],{"id":102437},[77,105568,105570,105571,105573],{"id":105569},"修改-dataqpos-后位置没有更新","修改 ",[103,105572,101055],{}," 后位置没有更新",[14,105575,102447],{},[97,105577,105578],{"className":30372,"code":104528,"language":30374,"meta":25,"style":25},[103,105579,105580],{"__ignoreMap":25},[106,105581,105582],{"class":108,"line":109},[106,105583,104528],{"class":116},[77,105585,105586],{"id":105586},"数组维度看不懂",[14,105588,105589],{},"打印模型维度:",[97,105591,105593],{"className":30372,"code":105592,"language":30374,"meta":25,"style":25},"print(model.nq, model.nv, model.nu)\n",[103,105594,105595],{"__ignoreMap":25},[106,105596,105597,105599],{"class":108,"line":109},[106,105598,30409],{"class":165},[106,105600,105601],{"class":116},"(model.nq, model.nv, model.nu)\n",[254,105603,105604,105612],{},[257,105605,105606],{},[260,105607,105608,105610],{},[263,105609,104559],{"align":23729},[263,105611,100685],{"align":23729},[301,105613,105614,105624,105634],{},[260,105615,105616,105621],{},[306,105617,105618],{"align":23729},[103,105619,105620],{},"nq",[306,105622,105623],{"align":23729},"位置变量数量",[260,105625,105626,105631],{},[306,105627,105628],{"align":23729},[103,105629,105630],{},"nv",[306,105632,105633],{"align":23729},"速度变量数量",[260,105635,105636,105640],{},[306,105637,105638],{"align":23729},[103,105639,102147],{},[306,105641,105642],{"align":23729},"控制输入数量",[77,105644,105646,105647,105649],{"id":105645},"误以为-qpos-一定等于关节数","误以为 ",[103,105648,104015],{}," 一定等于关节数",[14,105651,105652,105653,82524,105655,105657,105658,105660],{},"不是。例如 ",[103,105654,101605],{},[103,105656,104015],{}," 是 7 维，但 ",[103,105659,104345],{}," 是 6 维。",[77,105662,105664,105665,105667],{"id":105663},"不知道某个元素在-qpos-的第几位","不知道某个元素在 ",[103,105666,104015],{}," 的第几位",[14,105669,105670],{},"初学时可以先打印：",[97,105672,105674],{"className":30372,"code":105673,"language":30374,"meta":25,"style":25},"print(\"nq:\", model.nq)\nprint(\"nv:\", model.nv)\nprint(\"qpos:\", data.qpos)\nprint(\"qvel:\", data.qvel)\n",[103,105675,105676,105686,105696,105708],{"__ignoreMap":25},[106,105677,105678,105680,105682,105684],{"class":108,"line":109},[106,105679,30409],{"class":165},[106,105681,117],{"class":116},[106,105683,101424],{"class":221},[106,105685,101427],{"class":116},[106,105687,105688,105690,105692,105694],{"class":108,"line":28},[106,105689,30409],{"class":165},[106,105691,117],{"class":116},[106,105693,101436],{"class":221},[106,105695,101439],{"class":116},[106,105697,105698,105700,105702,105705],{"class":108,"line":1172},[106,105699,30409],{"class":165},[106,105701,117],{"class":116},[106,105703,105704],{"class":221},"\"qpos:\"",[106,105706,105707],{"class":116},", data.qpos)\n",[106,105709,105710,105712,105714,105717],{"class":108,"line":1187},[106,105711,30409],{"class":165},[106,105713,117],{"class":116},[106,105715,105716],{"class":221},"\"qvel:\"",[106,105718,105719],{"class":116},", data.qvel)\n",[14,105721,105722],{},"更复杂模型中，可以用 MuJoCo 的 joint 地址字段查询，不过本教程先保持简单。前几章的模型维度都很小，直接打印数组就能看懂。",[77,105724,105725],{"id":105725},"仿真结果每次都一样",[14,105727,105728,105729,105731],{},"这是正常的。MuJoCo 本身是确定性仿真，只要初始状态、模型参数、控制输入一样，结果通常就一样。想要每次不同，需要你自己在 reset 时随机化 ",[103,105730,104015],{},"、目标点或控制输入。",[48,105733,102592],{"id":102591},[14,105735,105736,105737,24612],{},"Python 控制 MuJoCo 的核心就是读写 ",[103,105738,33395],{},[60,105740,105741,105749,105754,105759],{},[63,105742,105743,105744,101003,105746,105748],{},"用 ",[103,105745,101055],{},[103,105747,101058],{}," 读取状态。",[63,105750,105743,105751,105753],{},[103,105752,101061],{}," 写入控制。",[63,105755,105743,105756,105758],{},[103,105757,101200],{}," 推进时间。",[63,105760,105761,105762,105764],{},"手动改状态后用 ",[103,105763,104235],{}," 刷新派生量。",[14,105766,105767],{},"理解这一章后，就可以进入关节和 actuator 控制。",[5119,105769,105770],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":25,"searchDepth":28,"depth":28,"links":105772},[105773,105774,105775,105782,105786,105787,105788,105798],{"id":100631,"depth":28,"text":100632},{"id":100754,"depth":28,"text":100755},{"id":101029,"depth":28,"text":101030,"children":105776},[105777,105779,105781],{"id":104540,"depth":1172,"text":105778},"qpos、qvel、ctrl 是什么",{"id":104618,"depth":1172,"text":105780},"mj_step 和 mj_forward 的区别",{"id":104707,"depth":1172,"text":104708},{"id":101237,"depth":28,"text":101238,"children":105783},[105784,105785],{"id":101557,"depth":1172,"text":101557},{"id":101693,"depth":1172,"text":101693},{"id":102300,"depth":28,"text":102301},{"id":102332,"depth":28,"text":102333},{"id":102437,"depth":28,"text":102438,"children":105789},[105790,105792,105793,105795,105797],{"id":105569,"depth":1172,"text":105791},"修改 data.qpos 后位置没有更新",{"id":105586,"depth":1172,"text":105586},{"id":105645,"depth":1172,"text":105794},"误以为 qpos 一定等于关节数",{"id":105663,"depth":1172,"text":105796},"不知道某个元素在 qpos 的第几位",{"id":105725,"depth":1172,"text":105725},{"id":102591,"depth":28,"text":102592},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch3-python",{"title":104303,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch3-Python控制接口","FAugzO4y0q2LsXaOuxDoqmSxVFhJdD5Lw49NR_xgjZI",{"id":105805,"title":105806,"body":105807,"description":25,"extension":31,"meta":107497,"navigation":33,"path":107498,"seo":107499,"stem":107500,"__hash__":107501},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制.md","4.关节、Actuator 与力控制",{"type":7,"value":105808,"toc":107473},[105809,105812,105814,105817,105819,105844,105847,105866,105869,105871,105873,105897,105899,105913,105915,105956,105958,105982,105984,105987,106021,106023,106036,106039,106107,106116,106120,106123,106157,106163,106166,106170,106209,106212,106232,106236,106279,106281,106310,106313,106319,106322,106324,106718,106720,106732,106734,106745,106747,106750,106779,106787,106790,106825,106828,106830,106838,106841,106843,106854,106864,106884,106887,106923,106935,106983,107002,107044,107057,107085,107090,107111,107121,107139,107142,107176,107179,107199,107202,107221,107227,107229,107232,107238,107244,107254,107257,107263,107272,107274,107320,107322,107328,107334,107337,107340,107360,107363,107369,107375,107377,107400,107403,107406,107415,107418,107456,107458,107461,107467,107470],[10,105810,105806],{"id":105811},"_4关节actuator-与力控制",[48,105813,100632],{"id":100631},[14,105815,105816],{},"本章用 MuJoCo 搭建一个单关节摆杆，并通过 actuator 控制它运动。",[14,105818,104316],{},[60,105820,105821,105827,105832,105836,105841],{},[63,105822,105823,105826],{},[103,105824,105825],{},"hinge"," 关节",[63,105828,105829],{},[103,105830,105831],{},"\u003Cactuator>\u003Cmotor ...\u002F>\u003C\u002Factuator>",[63,105833,105834],{},[103,105835,101061],{},[63,105837,105838],{},[103,105839,105840],{},"ctrlrange",[63,105842,105843],{},"读取关节角和角速度",[14,105845,105846],{},"这章是从“物体自己掉落”进入“我主动控制物体”的关键一步。你会第一次写：",[97,105848,105850],{"className":30372,"code":105849,"language":30374,"meta":25,"style":25},"data.ctrl[0] = ...\n",[103,105851,105852],{"__ignoreMap":25},[106,105853,105854,105857,105859,105861,105863],{"class":108,"line":109},[106,105855,105856],{"class":116},"data.ctrl[",[106,105858,308],{"class":165},[106,105860,4435],{"class":116},[106,105862,162],{"class":112},[106,105864,105865],{"class":165}," ...\n",[14,105867,105868],{},"这行代码就是控制算法和 MuJoCo 物理世界之间的接口。",[48,105870,100755],{"id":100754},[14,105872,100758],{},[97,105874,105875],{"className":23815,"code":104373,"language":23817,"meta":25,"style":25},[103,105876,105877],{"__ignoreMap":25},[106,105878,105879,105881,105883,105885,105887,105889,105891,105893,105895],{"class":108,"line":109},[106,105880,24570],{"class":1955},[106,105882,26309],{"class":221},[106,105884,23827],{"class":221},[106,105886,26394],{"class":165},[106,105888,104388],{"class":221},[106,105890,100783],{"class":221},[106,105892,102486],{"class":221},[106,105894,100799],{"class":221},[106,105896,104397],{"class":221},[14,105898,102804],{},[97,105900,105901],{"className":23815,"code":100904,"language":23817,"meta":25,"style":25},[103,105902,105903],{"__ignoreMap":25},[106,105904,105905,105907,105909,105911],{"class":108,"line":109},[106,105906,23824],{"class":1955},[106,105908,23827],{"class":221},[106,105910,100915],{"class":221},[106,105912,100918],{"class":221},[14,105914,102821],{},[97,105916,105918],{"className":23815,"code":105917,"language":23817,"meta":25,"style":25},"conda create -n mujoco-control python=3.10 -y\nconda activate mujoco-control\npip install \"mujoco>=2.3\" numpy\n",[103,105919,105920,105937,105946],{"__ignoreMap":25},[106,105921,105922,105924,105926,105928,105931,105933,105935],{"class":108,"line":109},[106,105923,30324],{"class":1955},[106,105925,29170],{"class":221},[106,105927,25109],{"class":165},[106,105929,105930],{"class":221}," mujoco-control",[106,105932,100960],{"class":221},[106,105934,100963],{"class":165},[106,105936,100966],{"class":165},[106,105938,105939,105941,105943],{"class":108,"line":28},[106,105940,30324],{"class":1955},[106,105942,100973],{"class":221},[106,105944,105945],{"class":221}," mujoco-control\n",[106,105947,105948,105950,105952,105954],{"class":108,"line":1172},[106,105949,23824],{"class":1955},[106,105951,23827],{"class":221},[106,105953,100915],{"class":221},[106,105955,100918],{"class":221},[14,105957,100989],{},[60,105959,105960,105966,105973,105979],{},[63,105961,105962,105965],{},[103,105963,105964],{},"\u003Cmotor>"," 是 MuJoCo XML Reference 中的 actuator shortcut。",[63,105967,105968,105970,105971,28379],{},[103,105969,101061],{}," 长度等于 ",[103,105972,102143],{},[63,105974,82216,105975,105978],{},[103,105976,105977],{},"model.nu == 0","，说明 XML 没有定义 actuator。",[63,105980,105981],{},"actuator 细节在 MuJoCo 不同版本中有扩展，本文只使用基础 motor。",[48,105983,101030],{"id":101029},[14,105985,105986],{},"关节决定 body 如何运动:",[97,105988,105990],{"className":53061,"code":105989,"language":53063,"meta":25,"style":25},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[103,105991,105992],{"__ignoreMap":25},[106,105993,105994,105996,105998,106000,106002,106005,106007,106009,106011,106014,106016,106019],{"class":108,"line":109},[106,105995,1027],{"class":116},[106,105997,102941],{"class":51294},[106,105999,14913],{"class":1955},[106,106001,162],{"class":116},[106,106003,106004],{"class":221},"\"hinge\"",[106,106006,53818],{"class":1955},[106,106008,162],{"class":116},[106,106010,106004],{"class":221},[106,106012,106013],{"class":1955}," axis",[106,106015,162],{"class":116},[106,106017,106018],{"class":221},"\"0 1 0\"",[106,106020,101129],{"class":116},[14,106022,103037],{},[60,106024,106025,106030,106033],{},[63,106026,106027,106028],{},"名字是 ",[103,106029,105825],{},[63,106031,106032],{},"类型是旋转关节",[63,106034,106035],{},"绕 y 轴旋转",[14,106037,106038],{},"actuator 决定如何施加控制:",[97,106040,106042],{"className":53061,"code":106041,"language":53063,"meta":25,"style":25},"\u003Cactuator>\n  \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n\u003C\u002Factuator>\n",[103,106043,106044,106053,106099],{"__ignoreMap":25},[106,106045,106046,106048,106051],{"class":108,"line":109},[106,106047,1027],{"class":116},[106,106049,106050],{"class":51294},"actuator",[106,106052,51301],{"class":116},[106,106054,106055,106057,106060,106062,106064,106067,106070,106072,106074,106077,106079,106081,106084,106086,106089,106092,106094,106097],{"class":108,"line":28},[106,106056,52138],{"class":116},[106,106058,106059],{"class":51294},"motor",[106,106061,14913],{"class":1955},[106,106063,162],{"class":116},[106,106065,106066],{"class":221},"\"hinge_motor\"",[106,106068,106069],{"class":1955}," joint",[106,106071,162],{"class":116},[106,106073,106004],{"class":221},[106,106075,106076],{"class":1955}," gear",[106,106078,162],{"class":116},[106,106080,3670],{"class":221},[106,106082,106083],{"class":1955}," ctrlrange",[106,106085,162],{"class":116},[106,106087,106088],{"class":221},"\"-2 2\"",[106,106090,106091],{"class":1955}," ctrllimited",[106,106093,162],{"class":116},[106,106095,106096],{"class":221},"\"true\"",[106,106098,101129],{"class":116},[106,106100,106101,106103,106105],{"class":108,"line":1172},[106,106102,51779],{"class":116},[106,106104,106050],{"class":51294},[106,106106,51301],{"class":116},[14,106108,106109,106112,106113,28379],{},[103,106110,106111],{},"data.ctrl[0]"," 会变成电机输入，控制输入限制在 ",[103,106114,106115],{},"[-2, 2]",[77,106117,106119],{"id":106118},"joint-和-actuator-的关系","joint 和 actuator 的关系",[14,106121,106122],{},"很多新手会把 joint 和 actuator 混在一起。它们不是一回事：",[254,106124,106125,106135],{},[257,106126,106127],{},[260,106128,106129,106131,106133],{},[263,106130,25747],{"align":23729},[263,106132,102681],{"align":23729},[263,106134,100719],{"align":23729},[301,106136,106137,106147],{},[260,106138,106139,106141,106144],{},[306,106140,102941],{"align":23729},[306,106142,106143],{"align":23729},"定义能怎么动",[306,106145,106146],{"align":23729},"门轴允许门旋转",[260,106148,106149,106151,106154],{},[306,106150,106050],{"align":23729},[306,106152,106153],{"align":23729},"定义怎么施力或控制",[306,106155,106156],{"align":23729},"人推门、马达带动门",[14,106158,106159,106160,106162],{},"只有 joint，没有 actuator，物体仍然可能因为重力、碰撞、初速度而动，但你不能通过 ",[103,106161,101061],{}," 主动控制它。",[14,106164,106165],{},"只有 actuator，没有正确引用 joint，模型会编译失败或没有控制效果。",[77,106167,106169],{"id":106168},"hinge-joint","hinge joint",[97,106171,106173],{"className":53061,"code":106172,"language":53063,"meta":25,"style":25},"\u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[103,106174,106175],{"__ignoreMap":25},[106,106176,106177,106179,106181,106183,106185,106187,106189,106191,106193,106195,106197,106199,106202,106204,106207],{"class":108,"line":109},[106,106178,1027],{"class":116},[106,106180,102941],{"class":51294},[106,106182,14913],{"class":1955},[106,106184,162],{"class":116},[106,106186,106004],{"class":221},[106,106188,53818],{"class":1955},[106,106190,162],{"class":116},[106,106192,106004],{"class":221},[106,106194,106013],{"class":1955},[106,106196,162],{"class":116},[106,106198,106018],{"class":221},[106,106200,106201],{"class":1955}," damping",[106,106203,162],{"class":116},[106,106205,106206],{"class":221},"\"0.1\"",[106,106208,101129],{"class":116},[14,106210,106211],{},"含义：",[60,106213,106214,106220,106226],{},[63,106215,106216,106219],{},[103,106217,106218],{},"type=\"hinge\"","：只能绕一个轴旋转。",[63,106221,106222,106225],{},[103,106223,106224],{},"axis=\"0 1 0\"","：绕 y 轴旋转。",[63,106227,106228,106231],{},[103,106229,106230],{},"damping=\"0.1\"","：阻尼，类似摩擦，会让运动慢慢衰减。",[77,106233,106235],{"id":106234},"motor-actuator","motor actuator",[97,106237,106239],{"className":53061,"code":106238,"language":53063,"meta":25,"style":25},"\u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[103,106240,106241],{"__ignoreMap":25},[106,106242,106243,106245,106247,106249,106251,106253,106255,106257,106259,106261,106263,106265,106267,106269,106271,106273,106275,106277],{"class":108,"line":109},[106,106244,1027],{"class":116},[106,106246,106059],{"class":51294},[106,106248,14913],{"class":1955},[106,106250,162],{"class":116},[106,106252,106066],{"class":221},[106,106254,106069],{"class":1955},[106,106256,162],{"class":116},[106,106258,106004],{"class":221},[106,106260,106076],{"class":1955},[106,106262,162],{"class":116},[106,106264,3670],{"class":221},[106,106266,106083],{"class":1955},[106,106268,162],{"class":116},[106,106270,106088],{"class":221},[106,106272,106091],{"class":1955},[106,106274,162],{"class":116},[106,106276,106096],{"class":221},[106,106278,101129],{"class":116},[14,106280,106211],{},[60,106282,106283,106292,106298,106304],{},[63,106284,106285,106288,106289,106291],{},[103,106286,106287],{},"joint=\"hinge\"","：这个电机作用在名为 ",[103,106290,105825],{}," 的关节上。",[63,106293,106294,106297],{},[103,106295,106296],{},"gear=\"1\"","：控制输入到力\u002F力矩的放大比例。",[63,106299,106300,106303],{},[103,106301,106302],{},"ctrlrange=\"-2 2\"","：允许的控制输入范围。",[63,106305,106306,106309],{},[103,106307,106308],{},"ctrllimited=\"true\"","：启用控制范围限制。",[14,106311,106312],{},"简单理解：",[97,106314,106317],{"className":106315,"code":106316,"language":5180,"meta":25},[5178],"实际施加效果 ≈ data.ctrl[0] * gear\n",[103,106318,106316],{"__ignoreMap":25},[14,106320,106321],{},"真实细节比这更复杂，但这个近似足够帮助入门。",[48,106323,101238],{"id":101237},[97,106325,106327],{"className":30372,"code":106326,"language":30374,"meta":25,"style":25},"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",[103,106328,106329,106336,106340,106346,106356,106360,106364,106372,106377,106382,106386,106390,106395,106400,106404,106409,106414,106419,106424,106428,106432,106436,106441,106446,106451,106455,106459,106463,106467,106479,106491,106499,106503,106513,106523,106533,106537,106550,106563,106567,106584,106598,106633,106637,106641,106652,106667,106682,106694,106698,106702,106714],{"__ignoreMap":25},[106,106330,106331,106333],{"class":108,"line":109},[106,106332,30386],{"class":112},[106,106334,106335],{"class":116}," math\n",[106,106337,106338],{"class":108,"line":28},[106,106339,2392],{"emptyLinePlaceholder":33},[106,106341,106342,106344],{"class":108,"line":1172},[106,106343,30386],{"class":112},[106,106345,101286],{"class":116},[106,106347,106348,106350,106352,106354],{"class":108,"line":1187},[106,106349,30386],{"class":112},[106,106351,31374],{"class":116},[106,106353,31377],{"class":112},[106,106355,31380],{"class":116},[106,106357,106358],{"class":108,"line":1193},[106,106359,2392],{"emptyLinePlaceholder":33},[106,106361,106362],{"class":108,"line":1207},[106,106363,2392],{"emptyLinePlaceholder":33},[106,106365,106366,106368,106370],{"class":108,"line":1213},[106,106367,101299],{"class":165},[106,106369,13557],{"class":112},[106,106371,101304],{"class":221},[106,106373,106374],{"class":108,"line":1304},[106,106375,106376],{"class":221},"\u003Cmujoco model=\"one_link_motor\">\n",[106,106378,106379],{"class":108,"line":1310},[106,106380,106381],{"class":221},"  \u003Coption timestep=\"0.002\" gravity=\"0 0 -9.81\"\u002F>\n",[106,106383,106384],{"class":108,"line":1322},[106,106385,2392],{"emptyLinePlaceholder":33},[106,106387,106388],{"class":108,"line":1604},[106,106389,101323],{"class":221},[106,106391,106392],{"class":108,"line":1609},[106,106393,106394],{"class":221},"    \u003Cbody name=\"base\" pos=\"0 0 0.5\">\n",[106,106396,106397],{"class":108,"line":1615},[106,106398,106399],{"class":221},"      \u003Cgeom name=\"base_geom\" type=\"sphere\" size=\"0.05\" rgba=\"0.2 0.2 0.2 1\"\u002F>\n",[106,106401,106402],{"class":108,"line":1620},[106,106403,2392],{"emptyLinePlaceholder":33},[106,106405,106406],{"class":108,"line":1634},[106,106407,106408],{"class":221},"      \u003Cbody name=\"link\" pos=\"0 0 0\">\n",[106,106410,106411],{"class":108,"line":1639},[106,106412,106413],{"class":221},"        \u003Cjoint name=\"hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[106,106415,106416],{"class":108,"line":1645},[106,106417,106418],{"class":221},"        \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",[106,106420,106421],{"class":108,"line":1666},[106,106422,106423],{"class":221},"      \u003C\u002Fbody>\n",[106,106425,106426],{"class":108,"line":1671},[106,106427,101352],{"class":221},[106,106429,106430],{"class":108,"line":1685},[106,106431,101357],{"class":221},[106,106433,106434],{"class":108,"line":1690},[106,106435,2392],{"emptyLinePlaceholder":33},[106,106437,106438],{"class":108,"line":1719},[106,106439,106440],{"class":221},"  \u003Cactuator>\n",[106,106442,106443],{"class":108,"line":1724},[106,106444,106445],{"class":221},"    \u003Cmotor name=\"hinge_motor\" joint=\"hinge\" gear=\"1\" ctrlrange=\"-2 2\" ctrllimited=\"true\"\u002F>\n",[106,106447,106448],{"class":108,"line":1741},[106,106449,106450],{"class":221},"  \u003C\u002Factuator>\n",[106,106452,106453],{"class":108,"line":1746},[106,106454,101362],{"class":221},[106,106456,106457],{"class":108,"line":1751},[106,106458,95683],{"class":221},[106,106460,106461],{"class":108,"line":1756},[106,106462,2392],{"emptyLinePlaceholder":33},[106,106464,106465],{"class":108,"line":1770},[106,106466,2392],{"emptyLinePlaceholder":33},[106,106468,106469,106471,106473,106475,106477],{"class":108,"line":1775},[106,106470,31941],{"class":112},[106,106472,1965],{"class":1955},[106,106474,101383],{"class":116},[106,106476,95671],{"class":165},[106,106478,3731],{"class":116},[106,106480,106481,106483,106485,106487,106489],{"class":108,"line":2569},[106,106482,101392],{"class":116},[106,106484,162],{"class":112},[106,106486,101397],{"class":116},[106,106488,101299],{"class":165},[106,106490,123],{"class":116},[106,106492,106493,106495,106497],{"class":108,"line":2583},[106,106494,101406],{"class":116},[106,106496,162],{"class":112},[106,106498,101411],{"class":116},[106,106500,106501],{"class":108,"line":2591},[106,106502,2392],{"emptyLinePlaceholder":33},[106,106504,106505,106507,106509,106511],{"class":108,"line":2596},[106,106506,31293],{"class":165},[106,106508,117],{"class":116},[106,106510,101424],{"class":221},[106,106512,101427],{"class":116},[106,106514,106515,106517,106519,106521],{"class":108,"line":2602},[106,106516,31293],{"class":165},[106,106518,117],{"class":116},[106,106520,101436],{"class":221},[106,106522,101439],{"class":116},[106,106524,106525,106527,106529,106531],{"class":108,"line":2608},[106,106526,31293],{"class":165},[106,106528,117],{"class":116},[106,106530,101448],{"class":221},[106,106532,101451],{"class":116},[106,106534,106535],{"class":108,"line":2613},[106,106536,2392],{"emptyLinePlaceholder":33},[106,106538,106539,106541,106544,106546,106548],{"class":108,"line":7941},[106,106540,3093],{"class":112},[106,106542,106543],{"class":116}," model.nu ",[106,106545,20941],{"class":112},[106,106547,25112],{"class":165},[106,106549,3731],{"class":116},[106,106551,106552,106554,106556,106558,106561],{"class":108,"line":7965},[106,106553,103417],{"class":112},[106,106555,103420],{"class":165},[106,106557,117],{"class":116},[106,106559,106560],{"class":221},"\"expected exactly one actuator\"",[106,106562,123],{"class":116},[106,106564,106565],{"class":108,"line":7970},[106,106566,2392],{"emptyLinePlaceholder":33},[106,106568,106569,106571,106573,106575,106577,106579,106582],{"class":108,"line":7976},[106,106570,3193],{"class":112},[106,106572,31610],{"class":116},[106,106574,26037],{"class":112},[106,106576,32437],{"class":165},[106,106578,117],{"class":116},[106,106580,106581],{"class":165},"2000",[106,106583,30780],{"class":116},[106,106585,106586,106589,106591,106593,106595],{"class":108,"line":8003},[106,106587,106588],{"class":116},"        t ",[106,106590,162],{"class":112},[106,106592,31610],{"class":116},[106,106594,572],{"class":112},[106,106596,106597],{"class":116}," model.opt.timestep\n",[106,106599,106600,106603,106605,106607,106609,106612,106614,106617,106619,106621,106624,106626,106628,106630],{"class":108,"line":8008},[106,106601,106602],{"class":116},"        data.ctrl[",[106,106604,308],{"class":165},[106,106606,4435],{"class":116},[106,106608,162],{"class":112},[106,106610,106611],{"class":165}," 1.5",[106,106613,6511],{"class":112},[106,106615,106616],{"class":116}," math.sin(",[106,106618,105245],{"class":165},[106,106620,6511],{"class":112},[106,106622,106623],{"class":116}," math.pi ",[106,106625,572],{"class":112},[106,106627,61861],{"class":165},[106,106629,6511],{"class":112},[106,106631,106632],{"class":116}," t)\n",[106,106634,106635],{"class":108,"line":8014},[106,106636,101501],{"class":116},[106,106638,106639],{"class":108,"line":8026},[106,106640,2392],{"emptyLinePlaceholder":33},[106,106642,106643,106645,106647,106650],{"class":108,"line":8038},[106,106644,31293],{"class":165},[106,106646,117],{"class":116},[106,106648,106649],{"class":221},"\"time:\"",[106,106651,101463],{"class":116},[106,106653,106654,106656,106658,106661,106663,106665],{"class":108,"line":8050},[106,106655,31293],{"class":165},[106,106657,117],{"class":116},[106,106659,106660],{"class":221},"\"joint qpos:\"",[106,106662,104915],{"class":116},[106,106664,410],{"class":165},[106,106666,30491],{"class":116},[106,106668,106669,106671,106673,106676,106678,106680],{"class":108,"line":9709},[106,106670,31293],{"class":165},[106,106672,117],{"class":116},[106,106674,106675],{"class":221},"\"joint qvel:\"",[106,106677,104931],{"class":116},[106,106679,410],{"class":165},[106,106681,30491],{"class":116},[106,106683,106684,106686,106688,106691],{"class":108,"line":9734},[106,106685,31293],{"class":165},[106,106687,117],{"class":116},[106,106689,106690],{"class":221},"\"last ctrl:\"",[106,106692,106693],{"class":116},", data.ctrl.copy())\n",[106,106695,106696],{"class":108,"line":9757},[106,106697,2392],{"emptyLinePlaceholder":33},[106,106699,106700],{"class":108,"line":9781},[106,106701,2392],{"emptyLinePlaceholder":33},[106,106703,106704,106706,106708,106710,106712],{"class":108,"line":9786},[106,106705,1523],{"class":112},[106,106707,31214],{"class":165},[106,106709,101544],{"class":112},[106,106711,101547],{"class":221},[106,106713,3731],{"class":116},[106,106715,106716],{"class":108,"line":9791},[106,106717,101554],{"class":116},[14,106719,103555],{},[97,106721,106723],{"className":23815,"code":106722,"language":23817,"meta":25,"style":25},"touch ch4_joint_motor.py\n",[103,106724,106725],{"__ignoreMap":25},[106,106726,106727,106729],{"class":108,"line":109},[106,106728,101268],{"class":1955},[106,106730,106731],{"class":221}," ch4_joint_motor.py\n",[14,106733,102286],{},[97,106735,106737],{"className":23815,"code":106736,"language":23817,"meta":25,"style":25},"python ch4_joint_motor.py\n",[103,106738,106739],{"__ignoreMap":25},[106,106740,106741,106743],{"class":108,"line":109},[106,106742,30374],{"class":1955},[106,106744,106731],{"class":221},[77,106746,101557],{"id":101557},[14,106748,106749],{},"检查 actuator 数量：",[97,106751,106753],{"className":30372,"code":106752,"language":30374,"meta":25,"style":25},"if model.nu != 1:\n    raise RuntimeError(\"expected exactly one actuator\")\n",[103,106754,106755,106767],{"__ignoreMap":25},[106,106756,106757,106759,106761,106763,106765],{"class":108,"line":109},[106,106758,1523],{"class":112},[106,106760,106543],{"class":116},[106,106762,20941],{"class":112},[106,106764,25112],{"class":165},[106,106766,3731],{"class":116},[106,106768,106769,106771,106773,106775,106777],{"class":108,"line":28},[106,106770,103880],{"class":112},[106,106772,103420],{"class":165},[106,106774,117],{"class":116},[106,106776,106560],{"class":221},[106,106778,123],{"class":116},[14,106780,106781,106783,106784,106786],{},[103,106782,102143],{}," 是控制输入维度。这个模型只有一个 motor，所以 ",[103,106785,101061],{}," 长度应该是 1。",[14,106788,106789],{},"产生正弦控制信号：",[97,106791,106793],{"className":30372,"code":106792,"language":30374,"meta":25,"style":25},"data.ctrl[0] = 1.5 * math.sin(2.0 * math.pi * 0.5 * t)\n",[103,106794,106795],{"__ignoreMap":25},[106,106796,106797,106799,106801,106803,106805,106807,106809,106811,106813,106815,106817,106819,106821,106823],{"class":108,"line":109},[106,106798,105856],{"class":116},[106,106800,308],{"class":165},[106,106802,4435],{"class":116},[106,106804,162],{"class":112},[106,106806,106611],{"class":165},[106,106808,6511],{"class":112},[106,106810,106616],{"class":116},[106,106812,105245],{"class":165},[106,106814,6511],{"class":112},[106,106816,106623],{"class":116},[106,106818,572],{"class":112},[106,106820,61861],{"class":165},[106,106822,6511],{"class":112},[106,106824,106632],{"class":116},[14,106826,106827],{},"这表示电机输入会在正负之间周期变化。你可以把它理解成一会儿往一个方向推，一会儿往反方向推。",[14,106829,101658],{},[97,106831,106832],{"className":30372,"code":104490,"language":30374,"meta":25,"style":25},[103,106833,106834],{"__ignoreMap":25},[106,106835,106836],{"class":108,"line":109},[106,106837,104490],{"class":116},[14,106839,106840],{},"MuJoCo 根据当前电机输入、重力、阻尼、质量等参数计算下一步状态。",[77,106842,101693],{"id":101693},[97,106844,106846],{"className":30372,"code":106845,"language":30374,"meta":25,"style":25},"import math\n",[103,106847,106848],{"__ignoreMap":25},[106,106849,106850,106852],{"class":108,"line":109},[106,106851,30386],{"class":112},[106,106853,106335],{"class":116},[14,106855,106856,106857,101003,106860,106863],{},"导入 Python 标准库里的数学模块。后面要用 ",[103,106858,106859],{},"math.sin",[103,106861,106862],{},"math.pi"," 生成周期变化的控制信号。",[97,106865,106866],{"className":30372,"code":103671,"language":30374,"meta":25,"style":25},[103,106867,106868,106874],{"__ignoreMap":25},[106,106869,106870,106872],{"class":108,"line":109},[106,106871,30386],{"class":112},[106,106873,101286],{"class":116},[106,106875,106876,106878,106880,106882],{"class":108,"line":28},[106,106877,30386],{"class":112},[106,106879,31374],{"class":116},[106,106881,31377],{"class":112},[106,106883,31380],{"class":116},[14,106885,106886],{},"导入 MuJoCo 和 NumPy。MuJoCo 负责仿真，NumPy 负责数组显示和数值处理。",[97,106888,106889],{"className":53061,"code":106172,"language":53063,"meta":25,"style":25},[103,106890,106891],{"__ignoreMap":25},[106,106892,106893,106895,106897,106899,106901,106903,106905,106907,106909,106911,106913,106915,106917,106919,106921],{"class":108,"line":109},[106,106894,1027],{"class":116},[106,106896,102941],{"class":51294},[106,106898,14913],{"class":1955},[106,106900,162],{"class":116},[106,106902,106004],{"class":221},[106,106904,53818],{"class":1955},[106,106906,162],{"class":116},[106,106908,106004],{"class":221},[106,106910,106013],{"class":1955},[106,106912,162],{"class":116},[106,106914,106018],{"class":221},[106,106916,106201],{"class":1955},[106,106918,162],{"class":116},[106,106920,106206],{"class":221},[106,106922,101129],{"class":116},[14,106924,106925,106926,106928,106929,106931,106932,106934],{},"这行定义关节。",[103,106927,105825],{}," 表示旋转关节。",[103,106930,106224],{}," 表示绕 y 轴旋转。",[103,106933,106230],{}," 表示有一点阻尼，运动不会完全无损耗。",[97,106936,106938],{"className":53061,"code":106937,"language":53063,"meta":25,"style":25},"\u003Cgeom name=\"link_geom\" type=\"capsule\" fromto=\"0 0 0 0 0 0.5\" size=\"0.03\" mass=\"0.5\"\u002F>\n",[103,106939,106940],{"__ignoreMap":25},[106,106941,106942,106944,106946,106948,106950,106953,106955,106957,106960,106963,106965,106968,106970,106972,106974,106976,106978,106981],{"class":108,"line":109},[106,106943,1027],{"class":116},[106,106945,101105],{"class":51294},[106,106947,14913],{"class":1955},[106,106949,162],{"class":116},[106,106951,106952],{"class":221},"\"link_geom\"",[106,106954,53818],{"class":1955},[106,106956,162],{"class":116},[106,106958,106959],{"class":221},"\"capsule\"",[106,106961,106962],{"class":1955}," fromto",[106,106964,162],{"class":116},[106,106966,106967],{"class":221},"\"0 0 0 0 0 0.5\"",[106,106969,101121],{"class":1955},[106,106971,162],{"class":116},[106,106973,103763],{"class":221},[106,106975,101986],{"class":1955},[106,106977,162],{"class":116},[106,106979,106980],{"class":221},"\"0.5\"",[106,106982,101129],{"class":116},[14,106984,106985,106986,106988,106989,106991,106992,106995,106996,28379,106999,107001],{},"这行定义摆杆的形状。",[103,106987,103150],{}," 是胶囊体，适合表示杆子。",[103,106990,103161],{}," 前三个数是起点，后三个数是终点，所以这根杆从 ",[103,106993,106994],{},"(0,0,0)"," 延伸到 ",[103,106997,106998],{},"(0,0,0.5)",[103,107000,103155],{}," 是半径。",[97,107003,107004],{"className":53061,"code":106238,"language":53063,"meta":25,"style":25},[103,107005,107006],{"__ignoreMap":25},[106,107007,107008,107010,107012,107014,107016,107018,107020,107022,107024,107026,107028,107030,107032,107034,107036,107038,107040,107042],{"class":108,"line":109},[106,107009,1027],{"class":116},[106,107011,106059],{"class":51294},[106,107013,14913],{"class":1955},[106,107015,162],{"class":116},[106,107017,106066],{"class":221},[106,107019,106069],{"class":1955},[106,107021,162],{"class":116},[106,107023,106004],{"class":221},[106,107025,106076],{"class":1955},[106,107027,162],{"class":116},[106,107029,3670],{"class":221},[106,107031,106083],{"class":1955},[106,107033,162],{"class":116},[106,107035,106088],{"class":221},[106,107037,106091],{"class":1955},[106,107039,162],{"class":116},[106,107041,106096],{"class":221},[106,107043,101129],{"class":116},[14,107045,107046,107047,107049,107050,107053,107054,107056],{},"这行定义电机。它作用在 ",[103,107048,105825],{}," 关节上。",[103,107051,107052],{},"gear"," 可以理解成放大倍数。",[103,107055,105840],{}," 限制控制输入范围。",[97,107058,107059],{"className":30372,"code":106752,"language":30374,"meta":25,"style":25},[103,107060,107061,107073],{"__ignoreMap":25},[106,107062,107063,107065,107067,107069,107071],{"class":108,"line":109},[106,107064,1523],{"class":112},[106,107066,106543],{"class":116},[106,107068,20941],{"class":112},[106,107070,25112],{"class":165},[106,107072,3731],{"class":116},[106,107074,107075,107077,107079,107081,107083],{"class":108,"line":28},[106,107076,103880],{"class":112},[106,107078,103420],{"class":165},[106,107080,117],{"class":116},[106,107082,106560],{"class":221},[106,107084,123],{"class":116},[14,107086,107087,107089],{},[103,107088,102143],{}," 是控制输入数量。这个 XML 只定义了一个 motor，所以应该等于 1。如果不是 1，说明模型和预期不一致，继续运行可能会出错。",[97,107091,107093],{"className":30372,"code":107092,"language":30374,"meta":25,"style":25},"for step in range(2000):\n",[103,107094,107095],{"__ignoreMap":25},[106,107096,107097,107099,107101,107103,107105,107107,107109],{"class":108,"line":109},[106,107098,3017],{"class":112},[106,107100,31610],{"class":116},[106,107102,26037],{"class":112},[106,107104,32437],{"class":165},[106,107106,117],{"class":116},[106,107108,106581],{"class":165},[106,107110,30780],{"class":116},[14,107112,107113,107114,107116,107117,107120],{},"循环 2000 步。这里没有用 ",[103,107115,1109],{},"，而是用 ",[103,107118,107119],{},"step","，因为后面要用当前步数计算时间。",[97,107122,107124],{"className":30372,"code":107123,"language":30374,"meta":25,"style":25},"t = step * model.opt.timestep\n",[103,107125,107126],{"__ignoreMap":25},[106,107127,107128,107131,107133,107135,107137],{"class":108,"line":109},[106,107129,107130],{"class":116},"t ",[106,107132,162],{"class":112},[106,107134,31610],{"class":116},[106,107136,572],{"class":112},[106,107138,106597],{"class":116},[14,107140,107141],{},"当前仿真时间可以用“步数乘以时间步长”估算。比如 step=100，timestep=0.002，那么 t=0.2 秒。",[97,107143,107144],{"className":30372,"code":106792,"language":30374,"meta":25,"style":25},[103,107145,107146],{"__ignoreMap":25},[106,107147,107148,107150,107152,107154,107156,107158,107160,107162,107164,107166,107168,107170,107172,107174],{"class":108,"line":109},[106,107149,105856],{"class":116},[106,107151,308],{"class":165},[106,107153,4435],{"class":116},[106,107155,162],{"class":112},[106,107157,106611],{"class":165},[106,107159,6511],{"class":112},[106,107161,106616],{"class":116},[106,107163,105245],{"class":165},[106,107165,6511],{"class":112},[106,107167,106623],{"class":116},[106,107169,572],{"class":112},[106,107171,61861],{"class":165},[106,107173,6511],{"class":112},[106,107175,106632],{"class":116},[14,107177,107178],{},"这行给电机输入一个正弦波。拆开看：",[60,107180,107181,107187,107193],{},[63,107182,107183,107186],{},[103,107184,107185],{},"math.sin(...)"," 产生 -1 到 1 之间周期变化的值。",[63,107188,107189,107192],{},[103,107190,107191],{},"1.5 *"," 把范围放大成 -1.5 到 1.5。",[63,107194,107195,107198],{},[103,107196,107197],{},"data.ctrl[0] = ..."," 把结果写入第 0 个 actuator。",[14,107200,107201],{},"因为正弦值一会儿正一会儿负，所以电机会来回推动关节。",[97,107203,107205],{"className":30372,"code":107204,"language":30374,"meta":25,"style":25},"print(\"joint qpos:\", np.round(data.qpos.copy(), 4))\n",[103,107206,107207],{"__ignoreMap":25},[106,107208,107209,107211,107213,107215,107217,107219],{"class":108,"line":109},[106,107210,30409],{"class":165},[106,107212,117],{"class":116},[106,107214,106660],{"class":221},[106,107216,104915],{"class":116},[106,107218,410],{"class":165},[106,107220,30491],{"class":116},[14,107222,107223,107224,107226],{},"打印关节角度。这个模型只有一个 hinge joint，所以 ",[103,107225,101055],{}," 只有一个数。",[48,107228,102301],{"id":102300},[14,107230,107231],{},"输出类似:",[97,107233,107236],{"className":107234,"code":107235,"language":5180,"meta":25},[5178],"nq: 1\nnv: 1\nnu: 1\ntime: 4.0\njoint qpos: [...]\njoint qvel: [...]\nlast ctrl: [...]\n",[103,107237,107235],{"__ignoreMap":25},[14,107239,107240,107241,107243],{},"这里 ",[103,107242,106111],{}," 是电机输入。",[14,107245,107246,107249,107250,107253],{},[103,107247,107248],{},"joint qpos"," 是关节角度，单位通常是弧度。",[103,107251,107252],{},"joint qvel"," 是角速度，单位通常是弧度每秒。",[14,107255,107256],{},"角度单位提示：",[97,107258,107261],{"className":107259,"code":107260,"language":5180,"meta":25},[5178],"pi rad ≈ 180 degrees\n1 rad ≈ 57.3 degrees\n",[103,107262,107260],{"__ignoreMap":25},[14,107264,107265,107266,107268,107269,107271],{},"如果你看到 ",[103,107267,104015],{}," 是 ",[103,107270,35323],{},"，大约就是 28.6 度。",[48,107273,102333],{"id":102332},[60,107275,107276,107283,107286,107293,107296,107304,107312],{},[63,107277,102396,107278,102399,107280,28379],{},[103,107279,106296],{},[103,107281,107282],{},"gear=\"5\"",[63,107284,107285],{},"重新运行，观察关节运动是否更剧烈。",[63,107287,102396,107288,102399,107290,28379],{},[103,107289,105840],{},[103,107291,107292],{},"-0.2 0.2",[63,107294,107295],{},"重新运行，观察控制能力是否变弱。",[63,107297,107298,107299,107301,107302,28379],{},"去掉 actuator，确认 ",[103,107300,102143],{}," 变成 ",[103,107303,308],{},[63,107305,102396,107306,102399,107308,107311],{},[103,107307,106230],{},[103,107309,107310],{},"damping=\"2.0\"","，观察运动是否更难被带动。",[63,107313,102396,107314,102399,107316,107319],{},[103,107315,106224],{},[103,107317,107318],{},"axis=\"1 0 0\"","，用 viewer 观察旋转方向变化。",[48,107321,102438],{"id":102437},[77,107323,107325],{"id":107324},"indexerror-index-0-is-out-of-bounds",[103,107326,107327],{},"IndexError: index 0 is out of bounds",[14,107329,107330,107331,107333],{},"原因是 ",[103,107332,105977],{},"，没有 actuator。",[77,107335,107336],{"id":107336},"关节几乎不动",[14,107338,107339],{},"可能原因:",[60,107341,107342,107347,107351,107357],{},[63,107343,107344,107346],{},[103,107345,107052],{}," 太小",[63,107348,107349,107346],{},[103,107350,105840],{},[63,107352,107353,107356],{},[103,107354,107355],{},"damping"," 太大",[63,107358,107359],{},"重力方向导致运动不明显",[77,107361,107362],{"id":107362},"模型编译失败",[14,107364,107365,107366,107368],{},"检查 actuator 引用的 ",[103,107367,106287],{}," 是否存在，joint 名称是否拼写一致。",[77,107370,107372,107374],{"id":107371},"datactrl0-写了但没有效果",[103,107373,106111],{}," 写了但没有效果",[14,107376,102560],{},[60,107378,107379,107384,107387,107392,107397],{},[63,107380,107381,107383],{},[103,107382,102143],{}," 是否大于 0。",[63,107385,107386],{},"motor 是否引用了正确 joint。",[63,107388,107389,107391],{},[103,107390,107052],{}," 是否太小。",[63,107393,107394,107396],{},[103,107395,105840],{}," 是否把输入限制得太小。",[63,107398,107399],{},"body 是否真的有可动 joint。",[77,107401,107402],{"id":107402},"控制输入超过范围会怎样",[14,107404,107405],{},"如果设置了：",[97,107407,107409],{"className":53061,"code":107408,"language":53063,"meta":25,"style":25},"ctrlrange=\"-2 2\" ctrllimited=\"true\"\n",[103,107410,107411],{"__ignoreMap":25},[106,107412,107413],{"class":108,"line":109},[106,107414,107408],{"class":116},[14,107416,107417],{},"MuJoCo 会把控制输入限制在这个范围附近。为了让代码更清晰，实际控制任务里仍建议在 Python 里自己写：",[97,107419,107421],{"className":30372,"code":107420,"language":30374,"meta":25,"style":25},"action = np.clip(action, -2.0, 2.0)\ndata.ctrl[0] = action\n",[103,107422,107423,107443],{"__ignoreMap":25},[106,107424,107425,107428,107430,107433,107435,107437,107439,107441],{"class":108,"line":109},[106,107426,107427],{"class":116},"action ",[106,107429,162],{"class":112},[106,107431,107432],{"class":116}," np.clip(action, ",[106,107434,649],{"class":112},[106,107436,105245],{"class":165},[106,107438,12428],{"class":116},[106,107440,105245],{"class":165},[106,107442,123],{"class":116},[106,107444,107445,107447,107449,107451,107453],{"class":108,"line":28},[106,107446,105856],{"class":116},[106,107448,308],{"class":165},[106,107450,4435],{"class":116},[106,107452,162],{"class":112},[106,107454,107455],{"class":116}," action\n",[48,107457,102592],{"id":102591},[14,107459,107460],{},"这一章建立了控制任务的基本形式：",[97,107462,107465],{"className":107463,"code":107464,"language":5180,"meta":25},[5178],"读取状态 qpos\u002Fqvel\n→ 计算控制 ctrl\n→ 写入 data.ctrl\n→ mj_step 推进仿真\n",[103,107466,107464],{"__ignoreMap":25},[14,107468,107469],{},"后面的 Cartpole 和 Reacher 只是把这个形式扩展到更多关节和更复杂的观测、奖励。",[5119,107471,107472],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":25,"searchDepth":28,"depth":28,"links":107474},[107475,107476,107477,107482,107486,107487,107488,107496],{"id":100631,"depth":28,"text":100632},{"id":100754,"depth":28,"text":100755},{"id":101029,"depth":28,"text":101030,"children":107478},[107479,107480,107481],{"id":106118,"depth":1172,"text":106119},{"id":106168,"depth":1172,"text":106169},{"id":106234,"depth":1172,"text":106235},{"id":101237,"depth":28,"text":101238,"children":107483},[107484,107485],{"id":101557,"depth":1172,"text":101557},{"id":101693,"depth":1172,"text":101693},{"id":102300,"depth":28,"text":102301},{"id":102332,"depth":28,"text":102333},{"id":102437,"depth":28,"text":102438,"children":107489},[107490,107491,107492,107493,107495],{"id":107324,"depth":1172,"text":107327},{"id":107336,"depth":1172,"text":107336},{"id":107362,"depth":1172,"text":107362},{"id":107371,"depth":1172,"text":107494},"data.ctrl[0] 写了但没有效果",{"id":107402,"depth":1172,"text":107402},{"id":102591,"depth":28,"text":102592},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch4-actuator",{"title":105806,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch4-关节Actuator与力控制","mt4nnL0lFlzEpGWxxST3l_nQ01XJuTf2fsJ_L9rP9Ag",{"id":107503,"title":107504,"body":107505,"description":25,"extension":31,"meta":109414,"navigation":33,"path":109415,"seo":109416,"stem":109417,"__hash__":109418},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer.md","5.Viewer 可视化与 Renderer 离屏渲染",{"type":7,"value":107506,"toc":109390},[107507,107510,107512,107515,107523,107526,107543,107546,107571,107574,107620,107622,107624,107679,107681,107700,107702,107745,107748,107765,107768,107784,107794,107801,107803,107806,107809,107843,107846,107894,107898,107901,107915,107924,107928,107931,107956,107959,107963,107976,107979,107985,107988,108003,108005,108008,108268,108270,108282,108285,108597,108599,108611,108613,108616,108631,108636,108639,108661,108664,108667,108701,108704,108708,108719,108722,108739,108742,108756,108763,108783,108790,108804,108807,108819,108834,108854,108857,108879,108882,108886,108901,108912,108927,108930,108960,108976,109005,109013,109037,109040,109058,109068,109080,109087,109096,109102,109111,109114,109116,109125,109128,109143,109145,109148,109159,109162,109173,109176,109194,109196,109213,109216,109244,109246,109250,109253,109283,109289,109292,109296,109304,109307,109309,109330,109333,109336,109352,109355,109371,109373,109376,109387],[10,107508,107504],{"id":107509},"_5viewer-可视化与-renderer-离屏渲染",[48,107511,100632],{"id":100631},[14,107513,107514],{},"本章掌握两类可视化方式:",[60,107516,107517,107520],{},[63,107518,107519],{},"交互式 viewer: 适合人工观察仿真",[63,107521,107522],{},"离屏 renderer: 适合生成图像观测、保存数据、训练视觉策略",[14,107524,107525],{},"使用官方接口:",[97,107527,107529],{"className":30372,"code":107528,"language":30374,"meta":25,"style":25},"import mujoco.viewer\nmujoco.viewer.launch_passive(model, data)\n",[103,107530,107531,107538],{"__ignoreMap":25},[106,107532,107533,107535],{"class":108,"line":109},[106,107534,30386],{"class":112},[106,107536,107537],{"class":116}," mujoco.viewer\n",[106,107539,107540],{"class":108,"line":28},[106,107541,107542],{"class":116},"mujoco.viewer.launch_passive(model, data)\n",[14,107544,107545],{},"以及:",[97,107547,107549],{"className":30372,"code":107548,"language":30374,"meta":25,"style":25},"renderer = mujoco.Renderer(model)\nimage = renderer.render()\n",[103,107550,107551,107561],{"__ignoreMap":25},[106,107552,107553,107556,107558],{"class":108,"line":109},[106,107554,107555],{"class":116},"renderer ",[106,107557,162],{"class":112},[106,107559,107560],{"class":116}," mujoco.Renderer(model)\n",[106,107562,107563,107566,107568],{"class":108,"line":28},[106,107564,107565],{"class":116},"image ",[106,107567,162],{"class":112},[106,107569,107570],{"class":116}," renderer.render()\n",[14,107572,107573],{},"新手建议先理解二者区别：",[254,107575,107576,107592],{},[257,107577,107578],{},[260,107579,107580,107583,107586,107589],{},[263,107581,107582],{"align":23729},"工具",[263,107584,107585],{"align":23729},"用途",[263,107587,107588],{"align":23729},"是否打开窗口",[263,107590,107591],{"align":23729},"常见场景",[301,107593,107594,107607],{},[260,107595,107596,107599,107602,107604],{},[306,107597,107598],{"align":23729},"Viewer",[306,107600,107601],{"align":23729},"人眼实时观察仿真",[306,107603,104650],{"align":23729},[306,107605,107606],{"align":23729},"调试模型、看控制效果",[260,107608,107609,107612,107615,107617],{},[306,107610,107611],{"align":23729},"Renderer",[306,107613,107614],{"align":23729},"生成图像数组",[306,107616,104663],{"align":23729},[306,107618,107619],{"align":23729},"保存图片、训练视觉策略、服务器批量采集",[48,107621,100755],{"id":100754},[14,107623,100758],{},[97,107625,107627],{"className":23815,"code":107626,"language":23817,"meta":25,"style":25},"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",[103,107628,107629,107641,107651,107659,107667],{"__ignoreMap":25},[106,107630,107631,107633,107635,107637,107639],{"class":108,"line":109},[106,107632,24570],{"class":1955},[106,107634,26309],{"class":221},[106,107636,23827],{"class":221},[106,107638,26394],{"class":165},[106,107640,24672],{"class":165},[106,107642,107643,107645,107647,107649],{"class":108,"line":28},[106,107644,100793],{"class":221},[106,107646,100796],{"class":221},[106,107648,100799],{"class":221},[106,107650,24672],{"class":165},[106,107652,107653,107655,107657],{"class":108,"line":1172},[106,107654,100806],{"class":221},[106,107656,100809],{"class":221},[106,107658,24672],{"class":165},[106,107660,107661,107663,107665],{"class":108,"line":1187},[106,107662,100816],{"class":221},[106,107664,100819],{"class":221},[106,107666,24672],{"class":165},[106,107668,107669,107671,107673,107675,107677],{"class":108,"line":1193},[106,107670,100826],{"class":221},[106,107672,100829],{"class":221},[106,107674,100832],{"class":221},[106,107676,100835],{"class":221},[106,107678,102501],{"class":221},[14,107680,102804],{},[97,107682,107684],{"className":23815,"code":107683,"language":23817,"meta":25,"style":25},"pip install \"mujoco>=2.3\" numpy pillow\n",[103,107685,107686],{"__ignoreMap":25},[106,107687,107688,107690,107692,107694,107697],{"class":108,"line":109},[106,107689,23824],{"class":1955},[106,107691,23827],{"class":221},[106,107693,100915],{"class":221},[106,107695,107696],{"class":221}," numpy",[106,107698,107699],{"class":221}," pillow\n",[14,107701,102821],{},[97,107703,107705],{"className":23815,"code":107704,"language":23817,"meta":25,"style":25},"conda create -n mujoco-render python=3.10 -y\nconda activate mujoco-render\npip install \"mujoco>=2.3\" numpy pillow\n",[103,107706,107707,107724,107733],{"__ignoreMap":25},[106,107708,107709,107711,107713,107715,107718,107720,107722],{"class":108,"line":109},[106,107710,30324],{"class":1955},[106,107712,29170],{"class":221},[106,107714,25109],{"class":165},[106,107716,107717],{"class":221}," mujoco-render",[106,107719,100960],{"class":221},[106,107721,100963],{"class":165},[106,107723,100966],{"class":165},[106,107725,107726,107728,107730],{"class":108,"line":28},[106,107727,30324],{"class":1955},[106,107729,100973],{"class":221},[106,107731,107732],{"class":221}," mujoco-render\n",[106,107734,107735,107737,107739,107741,107743],{"class":108,"line":1172},[106,107736,23824],{"class":1955},[106,107738,23827],{"class":221},[106,107740,100915],{"class":221},[106,107742,107696],{"class":221},[106,107744,107699],{"class":221},[14,107746,107747],{},"离屏渲染后端:",[97,107749,107751],{"className":23815,"code":107750,"language":23817,"meta":25,"style":25},"export MUJOCO_GL=egl\n",[103,107752,107753],{"__ignoreMap":25},[106,107754,107755,107757,107760,107762],{"class":108,"line":109},[106,107756,25036],{"class":112},[106,107758,107759],{"class":116}," MUJOCO_GL",[106,107761,162],{"class":112},[106,107763,107764],{"class":116},"egl\n",[14,107766,107767],{},"或:",[97,107769,107771],{"className":23815,"code":107770,"language":23817,"meta":25,"style":25},"export MUJOCO_GL=osmesa\n",[103,107772,107773],{"__ignoreMap":25},[106,107774,107775,107777,107779,107781],{"class":108,"line":109},[106,107776,25036],{"class":112},[106,107778,107759],{"class":116},[106,107780,162],{"class":112},[106,107782,107783],{"class":116},"osmesa\n",[14,107785,107786,107787,107790,107791,28379],{},"可能存在版本差异: 不同显卡驱动、Mesa、EGL 支持情况不同。如果 ",[103,107788,107789],{},"egl"," 失败，再尝试 ",[103,107792,107793],{},"osmesa",[14,107795,107796,107797,107800],{},"如果你在本机桌面环境运行，通常先不要设置 ",[103,107798,107799],{},"MUJOCO_GL","，直接运行 viewer。只有在远程服务器、无显示器环境或保存离屏图片时报 OpenGL 错误时，再尝试设置。",[48,107802,101030],{"id":101029},[14,107804,107805],{},"Viewer 是实时窗口。Renderer 是把仿真画面渲染成 NumPy 图像数组。",[14,107807,107808],{},"典型 viewer 流程:",[97,107810,107812],{"className":30372,"code":107811,"language":30374,"meta":25,"style":25},"with mujoco.viewer.launch_passive(model, data) as viewer:\n    while viewer.is_running():\n        mujoco.mj_step(model, data)\n        viewer.sync()\n",[103,107813,107814,107827,107834,107838],{"__ignoreMap":25},[106,107815,107816,107819,107822,107824],{"class":108,"line":109},[106,107817,107818],{"class":112},"with",[106,107820,107821],{"class":116}," mujoco.viewer.launch_passive(model, data) ",[106,107823,31377],{"class":112},[106,107825,107826],{"class":116}," viewer:\n",[106,107828,107829,107831],{"class":108,"line":28},[106,107830,2243],{"class":112},[106,107832,107833],{"class":116}," viewer.is_running():\n",[106,107835,107836],{"class":108,"line":1172},[106,107837,101501],{"class":116},[106,107839,107840],{"class":108,"line":1187},[106,107841,107842],{"class":116},"        viewer.sync()\n",[14,107844,107845],{},"典型 renderer 流程:",[97,107847,107849],{"className":30372,"code":107848,"language":30374,"meta":25,"style":25},"renderer = mujoco.Renderer(model, height=480, width=640)\nmujoco.mj_step(model, data)\nrenderer.update_scene(data)\nimage = renderer.render()\n",[103,107850,107851,107877,107881,107886],{"__ignoreMap":25},[106,107852,107853,107855,107857,107860,107862,107864,107866,107868,107870,107872,107875],{"class":108,"line":109},[106,107854,107555],{"class":116},[106,107856,162],{"class":112},[106,107858,107859],{"class":116}," mujoco.Renderer(model, ",[106,107861,24975],{"class":5209},[106,107863,162],{"class":112},[106,107865,42336],{"class":165},[106,107867,12428],{"class":116},[106,107869,24971],{"class":5209},[106,107871,162],{"class":112},[106,107873,107874],{"class":165},"640",[106,107876,123],{"class":116},[106,107878,107879],{"class":108,"line":28},[106,107880,104490],{"class":116},[106,107882,107883],{"class":108,"line":1172},[106,107884,107885],{"class":116},"renderer.update_scene(data)\n",[106,107887,107888,107890,107892],{"class":108,"line":1187},[106,107889,107565],{"class":116},[106,107891,162],{"class":112},[106,107893,107570],{"class":116},[77,107895,107897],{"id":107896},"viewer-的同步逻辑","viewer 的同步逻辑",[14,107899,107900],{},"viewer 只是显示窗口，不会自动帮你推进仿真。你仍然需要：",[97,107902,107904],{"className":30372,"code":107903,"language":30374,"meta":25,"style":25},"mujoco.mj_step(model, data)\nviewer.sync()\n",[103,107905,107906,107910],{"__ignoreMap":25},[106,107907,107908],{"class":108,"line":109},[106,107909,104490],{"class":116},[106,107911,107912],{"class":108,"line":28},[106,107913,107914],{"class":116},"viewer.sync()\n",[14,107916,107917,107919,107920,107923],{},[103,107918,101200],{}," 负责算物理，",[103,107921,107922],{},"viewer.sync()"," 负责把最新状态同步到窗口。",[77,107925,107927],{"id":107926},"为什么要-sleep","为什么要 sleep",[14,107929,107930],{},"如果不控制循环速度，仿真可能跑得非常快，窗口里一闪而过。示例代码用：",[97,107932,107934],{"className":30372,"code":107933,"language":30374,"meta":25,"style":25},"sleep_time = model.opt.timestep - (time.time() - step_start)\n",[103,107935,107936],{"__ignoreMap":25},[106,107937,107938,107941,107943,107946,107948,107951,107953],{"class":108,"line":109},[106,107939,107940],{"class":116},"sleep_time ",[106,107942,162],{"class":112},[106,107944,107945],{"class":116}," model.opt.timestep ",[106,107947,649],{"class":112},[106,107949,107950],{"class":116}," (time.time() ",[106,107952,649],{"class":112},[106,107954,107955],{"class":116}," step_start)\n",[14,107957,107958],{},"让真实时间尽量接近仿真时间。例如 timestep 是 0.01 秒，就尽量每 0.01 秒显示一步。",[77,107960,107962],{"id":107961},"renderer-输出是什么","renderer 输出是什么",[97,107964,107966],{"className":30372,"code":107965,"language":30374,"meta":25,"style":25},"image = renderer.render()\n",[103,107967,107968],{"__ignoreMap":25},[106,107969,107970,107972,107974],{"class":108,"line":109},[106,107971,107565],{"class":116},[106,107973,162],{"class":112},[106,107975,107570],{"class":116},[14,107977,107978],{},"得到的是 NumPy 数组，形状通常是：",[97,107980,107983],{"className":107981,"code":107982,"language":5180,"meta":25},[5178],"(height, width, 3)\n",[103,107984,107982],{"__ignoreMap":25},[14,107986,107987],{},"最后一维的 3 表示 RGB 三个颜色通道。保存图片时可以交给 Pillow：",[97,107989,107991],{"className":30372,"code":107990,"language":30374,"meta":25,"style":25},"Image.fromarray(image).save(\"render_output.png\")\n",[103,107992,107993],{"__ignoreMap":25},[106,107994,107995,107998,108001],{"class":108,"line":109},[106,107996,107997],{"class":116},"Image.fromarray(image).save(",[106,107999,108000],{"class":221},"\"render_output.png\"",[106,108002,123],{"class":116},[48,108004,101238],{"id":101237},[14,108006,108007],{},"交互式 Viewer:",[97,108009,108011],{"className":30372,"code":108010,"language":30374,"meta":25,"style":25},"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",[103,108012,108013,108019,108023,108029,108035,108039,108043,108051,108056,108060,108064,108068,108073,108078,108082,108086,108090,108095,108099,108103,108107,108111,108115,108119,108131,108143,108151,108155,108165,108185,108195,108200,108205,108209,108226,108239,108244,108248,108252,108264],{"__ignoreMap":25},[106,108014,108015,108017],{"class":108,"line":109},[106,108016,30386],{"class":112},[106,108018,31823],{"class":116},[106,108020,108021],{"class":108,"line":28},[106,108022,2392],{"emptyLinePlaceholder":33},[106,108024,108025,108027],{"class":108,"line":1172},[106,108026,30386],{"class":112},[106,108028,101286],{"class":116},[106,108030,108031,108033],{"class":108,"line":1187},[106,108032,30386],{"class":112},[106,108034,107537],{"class":116},[106,108036,108037],{"class":108,"line":1193},[106,108038,2392],{"emptyLinePlaceholder":33},[106,108040,108041],{"class":108,"line":1207},[106,108042,2392],{"emptyLinePlaceholder":33},[106,108044,108045,108047,108049],{"class":108,"line":1213},[106,108046,101299],{"class":165},[106,108048,13557],{"class":112},[106,108050,101304],{"class":221},[106,108052,108053],{"class":108,"line":1304},[106,108054,108055],{"class":221},"\u003Cmujoco model=\"viewer_demo\">\n",[106,108057,108058],{"class":108,"line":1310},[106,108059,101314],{"class":221},[106,108061,108062],{"class":108,"line":1322},[106,108063,2392],{"emptyLinePlaceholder":33},[106,108065,108066],{"class":108,"line":1604},[106,108067,101323],{"class":221},[106,108069,108070],{"class":108,"line":1609},[106,108071,108072],{"class":221},"    \u003Clight name=\"top_light\" pos=\"0 0 3\"\u002F>\n",[106,108074,108075],{"class":108,"line":1615},[106,108076,108077],{"class":221},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"3 3 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[106,108079,108080],{"class":108,"line":1620},[106,108081,2392],{"emptyLinePlaceholder":33},[106,108083,108084],{"class":108,"line":1634},[106,108085,101337],{"class":221},[106,108087,108088],{"class":108,"line":1639},[106,108089,101342],{"class":221},[106,108091,108092],{"class":108,"line":1645},[106,108093,108094],{"class":221},"      \u003Cgeom name=\"box_geom\" type=\"box\" size=\"0.15 0.15 0.15\" mass=\"1\" rgba=\"1 0 0 1\"\u002F>\n",[106,108096,108097],{"class":108,"line":1666},[106,108098,101352],{"class":221},[106,108100,108101],{"class":108,"line":1671},[106,108102,101357],{"class":221},[106,108104,108105],{"class":108,"line":1685},[106,108106,101362],{"class":221},[106,108108,108109],{"class":108,"line":1690},[106,108110,95683],{"class":221},[106,108112,108113],{"class":108,"line":1719},[106,108114,2392],{"emptyLinePlaceholder":33},[106,108116,108117],{"class":108,"line":1724},[106,108118,2392],{"emptyLinePlaceholder":33},[106,108120,108121,108123,108125,108127,108129],{"class":108,"line":1741},[106,108122,31941],{"class":112},[106,108124,1965],{"class":1955},[106,108126,101383],{"class":116},[106,108128,95671],{"class":165},[106,108130,3731],{"class":116},[106,108132,108133,108135,108137,108139,108141],{"class":108,"line":1746},[106,108134,101392],{"class":116},[106,108136,162],{"class":112},[106,108138,101397],{"class":116},[106,108140,101299],{"class":165},[106,108142,123],{"class":116},[106,108144,108145,108147,108149],{"class":108,"line":1751},[106,108146,101406],{"class":116},[106,108148,162],{"class":112},[106,108150,101411],{"class":116},[106,108152,108153],{"class":108,"line":1756},[106,108154,2392],{"emptyLinePlaceholder":33},[106,108156,108157,108159,108161,108163],{"class":108,"line":1770},[106,108158,34172],{"class":112},[106,108160,107821],{"class":116},[106,108162,31377],{"class":112},[106,108164,107826],{"class":116},[106,108166,108167,108170,108173,108175,108178,108180,108183],{"class":108,"line":1775},[106,108168,108169],{"class":112},"        while",[106,108171,108172],{"class":116}," viewer.is_running() ",[106,108174,30456],{"class":112},[106,108176,108177],{"class":116}," data.time ",[106,108179,1027],{"class":112},[106,108181,108182],{"class":165}," 5.0",[106,108184,3731],{"class":116},[106,108186,108187,108190,108192],{"class":108,"line":2569},[106,108188,108189],{"class":116},"            step_start ",[106,108191,162],{"class":112},[106,108193,108194],{"class":116}," time.time()\n",[106,108196,108197],{"class":108,"line":2583},[106,108198,108199],{"class":116},"            mujoco.mj_step(model, data)\n",[106,108201,108202],{"class":108,"line":2591},[106,108203,108204],{"class":116},"            viewer.sync()\n",[106,108206,108207],{"class":108,"line":2596},[106,108208,2392],{"emptyLinePlaceholder":33},[106,108210,108211,108214,108216,108218,108220,108222,108224],{"class":108,"line":2602},[106,108212,108213],{"class":116},"            sleep_time ",[106,108215,162],{"class":112},[106,108217,107945],{"class":116},[106,108219,649],{"class":112},[106,108221,107950],{"class":116},[106,108223,649],{"class":112},[106,108225,107955],{"class":116},[106,108227,108228,108230,108233,108235,108237],{"class":108,"line":2608},[106,108229,4634],{"class":112},[106,108231,108232],{"class":116}," sleep_time ",[106,108234,1077],{"class":112},[106,108236,4085],{"class":165},[106,108238,3731],{"class":116},[106,108240,108241],{"class":108,"line":2613},[106,108242,108243],{"class":116},"                time.sleep(sleep_time)\n",[106,108245,108246],{"class":108,"line":7941},[106,108247,2392],{"emptyLinePlaceholder":33},[106,108249,108250],{"class":108,"line":7965},[106,108251,2392],{"emptyLinePlaceholder":33},[106,108253,108254,108256,108258,108260,108262],{"class":108,"line":7970},[106,108255,1523],{"class":112},[106,108257,31214],{"class":165},[106,108259,101544],{"class":112},[106,108261,101547],{"class":221},[106,108263,3731],{"class":116},[106,108265,108266],{"class":108,"line":7976},[106,108267,101554],{"class":116},[14,108269,103555],{},[97,108271,108273],{"className":23815,"code":108272,"language":23817,"meta":25,"style":25},"touch ch5_viewer.py\n",[103,108274,108275],{"__ignoreMap":25},[106,108276,108277,108279],{"class":108,"line":109},[106,108278,101268],{"class":1955},[106,108280,108281],{"class":221}," ch5_viewer.py\n",[14,108283,108284],{},"离屏 Renderer 保存图片:",[97,108286,108288],{"className":30372,"code":108287,"language":30374,"meta":25,"style":25},"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",[103,108289,108290,108302,108306,108312,108322,108326,108330,108338,108343,108347,108351,108355,108359,108364,108368,108372,108376,108380,108384,108388,108392,108396,108400,108404,108408,108420,108432,108440,108465,108469,108485,108489,108493,108508,108517,108521,108535,108540,108545,108549,108561,108573,108577,108581,108593],{"__ignoreMap":25},[106,108291,108292,108294,108297,108299],{"class":108,"line":109},[106,108293,30731],{"class":112},[106,108295,108296],{"class":116}," pathlib ",[106,108298,30386],{"class":112},[106,108300,108301],{"class":116}," Path\n",[106,108303,108304],{"class":108,"line":28},[106,108305,2392],{"emptyLinePlaceholder":33},[106,108307,108308,108310],{"class":108,"line":1172},[106,108309,30386],{"class":112},[106,108311,101286],{"class":116},[106,108313,108314,108316,108318,108320],{"class":108,"line":1187},[106,108315,30731],{"class":112},[106,108317,47257],{"class":165},[106,108319,47260],{"class":112},[106,108321,47263],{"class":116},[106,108323,108324],{"class":108,"line":1193},[106,108325,2392],{"emptyLinePlaceholder":33},[106,108327,108328],{"class":108,"line":1207},[106,108329,2392],{"emptyLinePlaceholder":33},[106,108331,108332,108334,108336],{"class":108,"line":1213},[106,108333,101299],{"class":165},[106,108335,13557],{"class":112},[106,108337,101304],{"class":221},[106,108339,108340],{"class":108,"line":1304},[106,108341,108342],{"class":221},"\u003Cmujoco model=\"renderer_demo\">\n",[106,108344,108345],{"class":108,"line":1310},[106,108346,101314],{"class":221},[106,108348,108349],{"class":108,"line":1322},[106,108350,2392],{"emptyLinePlaceholder":33},[106,108352,108353],{"class":108,"line":1604},[106,108354,101323],{"class":221},[106,108356,108357],{"class":108,"line":1609},[106,108358,108072],{"class":221},[106,108360,108361],{"class":108,"line":1615},[106,108362,108363],{"class":221},"    \u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[106,108365,108366],{"class":108,"line":1620},[106,108367,108077],{"class":221},[106,108369,108370],{"class":108,"line":1634},[106,108371,2392],{"emptyLinePlaceholder":33},[106,108373,108374],{"class":108,"line":1639},[106,108375,101337],{"class":221},[106,108377,108378],{"class":108,"line":1645},[106,108379,101342],{"class":221},[106,108381,108382],{"class":108,"line":1666},[106,108383,108094],{"class":221},[106,108385,108386],{"class":108,"line":1671},[106,108387,101352],{"class":221},[106,108389,108390],{"class":108,"line":1685},[106,108391,101357],{"class":221},[106,108393,108394],{"class":108,"line":1690},[106,108395,101362],{"class":221},[106,108397,108398],{"class":108,"line":1719},[106,108399,95683],{"class":221},[106,108401,108402],{"class":108,"line":1724},[106,108403,2392],{"emptyLinePlaceholder":33},[106,108405,108406],{"class":108,"line":1741},[106,108407,2392],{"emptyLinePlaceholder":33},[106,108409,108410,108412,108414,108416,108418],{"class":108,"line":1746},[106,108411,31941],{"class":112},[106,108413,1965],{"class":1955},[106,108415,101383],{"class":116},[106,108417,95671],{"class":165},[106,108419,3731],{"class":116},[106,108421,108422,108424,108426,108428,108430],{"class":108,"line":1751},[106,108423,101392],{"class":116},[106,108425,162],{"class":112},[106,108427,101397],{"class":116},[106,108429,101299],{"class":165},[106,108431,123],{"class":116},[106,108433,108434,108436,108438],{"class":108,"line":1756},[106,108435,101406],{"class":116},[106,108437,162],{"class":112},[106,108439,101411],{"class":116},[106,108441,108442,108445,108447,108449,108451,108453,108455,108457,108459,108461,108463],{"class":108,"line":1770},[106,108443,108444],{"class":116},"    renderer ",[106,108446,162],{"class":112},[106,108448,107859],{"class":116},[106,108450,24975],{"class":5209},[106,108452,162],{"class":112},[106,108454,42336],{"class":165},[106,108456,12428],{"class":116},[106,108458,24971],{"class":5209},[106,108460,162],{"class":112},[106,108462,107874],{"class":165},[106,108464,123],{"class":116},[106,108466,108467],{"class":108,"line":1775},[106,108468,2392],{"emptyLinePlaceholder":33},[106,108470,108471,108473,108475,108477,108479,108481,108483],{"class":108,"line":2569},[106,108472,3193],{"class":112},[106,108474,101486],{"class":116},[106,108476,26037],{"class":112},[106,108478,32437],{"class":165},[106,108480,117],{"class":116},[106,108482,428],{"class":165},[106,108484,30780],{"class":116},[106,108486,108487],{"class":108,"line":2583},[106,108488,101501],{"class":116},[106,108490,108491],{"class":108,"line":2591},[106,108492,2392],{"emptyLinePlaceholder":33},[106,108494,108495,108498,108501,108503,108506],{"class":108,"line":2596},[106,108496,108497],{"class":116},"    renderer.update_scene(data, ",[106,108499,108500],{"class":5209},"camera",[106,108502,162],{"class":112},[106,108504,108505],{"class":221},"\"fixed_camera\"",[106,108507,123],{"class":116},[106,108509,108510,108513,108515],{"class":108,"line":2602},[106,108511,108512],{"class":116},"    image ",[106,108514,162],{"class":112},[106,108516,107570],{"class":116},[106,108518,108519],{"class":108,"line":2608},[106,108520,2392],{"emptyLinePlaceholder":33},[106,108522,108523,108526,108528,108531,108533],{"class":108,"line":2613},[106,108524,108525],{"class":116},"    output_path ",[106,108527,162],{"class":112},[106,108529,108530],{"class":116}," Path(",[106,108532,108000],{"class":221},[106,108534,123],{"class":116},[106,108536,108537],{"class":108,"line":7941},[106,108538,108539],{"class":116},"    Image.fromarray(image).save(output_path)\n",[106,108541,108542],{"class":108,"line":7965},[106,108543,108544],{"class":116},"    renderer.close()\n",[106,108546,108547],{"class":108,"line":7970},[106,108548,2392],{"emptyLinePlaceholder":33},[106,108550,108551,108553,108555,108558],{"class":108,"line":7976},[106,108552,31293],{"class":165},[106,108554,117],{"class":116},[106,108556,108557],{"class":221},"\"saved:\"",[106,108559,108560],{"class":116},", output_path.resolve())\n",[106,108562,108563,108565,108567,108570],{"class":108,"line":8003},[106,108564,31293],{"class":165},[106,108566,117],{"class":116},[106,108568,108569],{"class":221},"\"image shape:\"",[106,108571,108572],{"class":116},", image.shape)\n",[106,108574,108575],{"class":108,"line":8008},[106,108576,2392],{"emptyLinePlaceholder":33},[106,108578,108579],{"class":108,"line":8014},[106,108580,2392],{"emptyLinePlaceholder":33},[106,108582,108583,108585,108587,108589,108591],{"class":108,"line":8026},[106,108584,1523],{"class":112},[106,108586,31214],{"class":165},[106,108588,101544],{"class":112},[106,108590,101547],{"class":221},[106,108592,3731],{"class":116},[106,108594,108595],{"class":108,"line":8038},[106,108596,101554],{"class":116},[14,108598,103555],{},[97,108600,108602],{"className":23815,"code":108601,"language":23817,"meta":25,"style":25},"touch ch5_renderer.py\n",[103,108603,108604],{"__ignoreMap":25},[106,108605,108606,108608],{"class":108,"line":109},[106,108607,101268],{"class":1955},[106,108609,108610],{"class":221}," ch5_renderer.py\n",[77,108612,101557],{"id":101557},[14,108614,108615],{},"viewer 上下文：",[97,108617,108619],{"className":30372,"code":108618,"language":30374,"meta":25,"style":25},"with mujoco.viewer.launch_passive(model, data) as viewer:\n",[103,108620,108621],{"__ignoreMap":25},[106,108622,108623,108625,108627,108629],{"class":108,"line":109},[106,108624,107818],{"class":112},[106,108626,107821],{"class":116},[106,108628,31377],{"class":112},[106,108630,107826],{"class":116},[14,108632,108633,108635],{},[103,108634,107818],{}," 语句会创建窗口，并在退出时自动清理资源。",[14,108637,108638],{},"窗口循环：",[97,108640,108642],{"className":30372,"code":108641,"language":30374,"meta":25,"style":25},"while viewer.is_running() and data.time \u003C 5.0:\n",[103,108643,108644],{"__ignoreMap":25},[106,108645,108646,108649,108651,108653,108655,108657,108659],{"class":108,"line":109},[106,108647,108648],{"class":112},"while",[106,108650,108172],{"class":116},[106,108652,30456],{"class":112},[106,108654,108177],{"class":116},[106,108656,1027],{"class":112},[106,108658,108182],{"class":165},[106,108660,3731],{"class":116},[14,108662,108663],{},"只要窗口没有被关闭，并且仿真时间还没到 5 秒，就继续运行。",[14,108665,108666],{},"固定相机：",[97,108668,108670],{"className":53061,"code":108669,"language":53063,"meta":25,"style":25},"\u003Ccamera name=\"fixed_camera\" pos=\"1.5 -2.0 1.2\" xyaxes=\"1 0.75 0 0 0 1\"\u002F>\n",[103,108671,108672],{"__ignoreMap":25},[106,108673,108674,108676,108678,108680,108682,108684,108686,108688,108691,108694,108696,108699],{"class":108,"line":109},[106,108675,1027],{"class":116},[106,108677,108500],{"class":51294},[106,108679,14913],{"class":1955},[106,108681,162],{"class":116},[106,108683,108505],{"class":221},[106,108685,101091],{"class":1955},[106,108687,162],{"class":116},[106,108689,108690],{"class":221},"\"1.5 -2.0 1.2\"",[106,108692,108693],{"class":1955}," xyaxes",[106,108695,162],{"class":116},[106,108697,108698],{"class":221},"\"1 0.75 0 0 0 1\"",[106,108700,101129],{"class":116},[14,108702,108703],{},"Renderer 示例中定义了一个固定相机。这样每次保存的图片视角一致，适合做数据采集。",[77,108705,108707],{"id":108706},"viewer-代码逐行细讲","Viewer 代码逐行细讲",[97,108709,108711],{"className":30372,"code":108710,"language":30374,"meta":25,"style":25},"import time\n",[103,108712,108713],{"__ignoreMap":25},[106,108714,108715,108717],{"class":108,"line":109},[106,108716,30386],{"class":112},[106,108718,31823],{"class":116},[14,108720,108721],{},"导入时间模块。后面用它控制 viewer 循环速度，让画面不要跑得太快。",[97,108723,108725],{"className":30372,"code":108724,"language":30374,"meta":25,"style":25},"import mujoco\nimport mujoco.viewer\n",[103,108726,108727,108733],{"__ignoreMap":25},[106,108728,108729,108731],{"class":108,"line":109},[106,108730,30386],{"class":112},[106,108732,101286],{"class":116},[106,108734,108735,108737],{"class":108,"line":28},[106,108736,30386],{"class":112},[106,108738,107537],{"class":116},[14,108740,108741],{},"第一行导入 MuJoCo 基础功能。第二行导入 MuJoCo 的 viewer 模块，用来打开交互式窗口。",[97,108743,108744],{"className":30372,"code":108618,"language":30374,"meta":25,"style":25},[103,108745,108746],{"__ignoreMap":25},[106,108747,108748,108750,108752,108754],{"class":108,"line":109},[106,108749,107818],{"class":112},[106,108751,107821],{"class":116},[106,108753,31377],{"class":112},[106,108755,107826],{"class":116},[14,108757,108758,108759,108762],{},"打开一个 viewer 窗口。",[103,108760,108761],{},"launch_passive"," 的意思是“被动 viewer”：它负责显示，但仿真推进仍然由你的 Python 代码控制。",[97,108764,108765],{"className":30372,"code":108641,"language":30374,"meta":25,"style":25},[103,108766,108767],{"__ignoreMap":25},[106,108768,108769,108771,108773,108775,108777,108779,108781],{"class":108,"line":109},[106,108770,108648],{"class":112},[106,108772,108172],{"class":116},[106,108774,30456],{"class":112},[106,108776,108177],{"class":116},[106,108778,1027],{"class":112},[106,108780,108182],{"class":165},[106,108782,3731],{"class":116},[14,108784,108785,108786,108789],{},"只要窗口还开着，并且仿真时间小于 5 秒，就继续循环。如果你手动关闭窗口，",[103,108787,108788],{},"viewer.is_running()"," 会变成 false，循环结束。",[97,108791,108793],{"className":30372,"code":108792,"language":30374,"meta":25,"style":25},"step_start = time.time()\n",[103,108794,108795],{"__ignoreMap":25},[106,108796,108797,108800,108802],{"class":108,"line":109},[106,108798,108799],{"class":116},"step_start ",[106,108801,162],{"class":112},[106,108803,108194],{"class":116},[14,108805,108806],{},"记录当前真实时间。后面用它计算这一轮循环花了多久。",[97,108808,108809],{"className":30372,"code":107903,"language":30374,"meta":25,"style":25},[103,108810,108811,108815],{"__ignoreMap":25},[106,108812,108813],{"class":108,"line":109},[106,108814,104490],{"class":116},[106,108816,108817],{"class":108,"line":28},[106,108818,107914],{"class":116},[14,108820,108821,108823,108824,108826,108827,108829,108830,108833],{},[103,108822,101200],{}," 推进物理仿真。",[103,108825,107922],{}," 把最新的 ",[103,108828,33395],{}," 同步到窗口里显示。没有 ",[103,108831,108832],{},"sync()","，窗口可能看不到最新状态。",[97,108835,108836],{"className":30372,"code":107933,"language":30374,"meta":25,"style":25},[103,108837,108838],{"__ignoreMap":25},[106,108839,108840,108842,108844,108846,108848,108850,108852],{"class":108,"line":109},[106,108841,107940],{"class":116},[106,108843,162],{"class":112},[106,108845,107945],{"class":116},[106,108847,649],{"class":112},[106,108849,107950],{"class":116},[106,108851,649],{"class":112},[106,108853,107955],{"class":116},[14,108855,108856],{},"计算还需要等待多久。假设 timestep 是 0.01 秒，而这一轮计算只花了 0.003 秒，那就 sleep 约 0.007 秒。",[97,108858,108860],{"className":30372,"code":108859,"language":30374,"meta":25,"style":25},"if sleep_time > 0:\n    time.sleep(sleep_time)\n",[103,108861,108862,108874],{"__ignoreMap":25},[106,108863,108864,108866,108868,108870,108872],{"class":108,"line":109},[106,108865,1523],{"class":112},[106,108867,108232],{"class":116},[106,108869,1077],{"class":112},[106,108871,4085],{"class":165},[106,108873,3731],{"class":116},[106,108875,108876],{"class":108,"line":28},[106,108877,108878],{"class":116},"    time.sleep(sleep_time)\n",[14,108880,108881],{},"如果还有剩余时间，就暂停一会儿。这样 viewer 看起来更接近真实速度。",[77,108883,108885],{"id":108884},"renderer-代码逐行细讲","Renderer 代码逐行细讲",[97,108887,108889],{"className":30372,"code":108888,"language":30374,"meta":25,"style":25},"from pathlib import Path\n",[103,108890,108891],{"__ignoreMap":25},[106,108892,108893,108895,108897,108899],{"class":108,"line":109},[106,108894,30731],{"class":112},[106,108896,108296],{"class":116},[106,108898,30386],{"class":112},[106,108900,108301],{"class":116},[14,108902,108903,108904,108907,108908,108911],{},"导入 ",[103,108905,108906],{},"Path","，用来处理文件路径。相比直接写字符串，",[103,108909,108910],{},"Path(\"render_output.png\")"," 更清晰。",[97,108913,108915],{"className":30372,"code":108914,"language":30374,"meta":25,"style":25},"from PIL import Image\n",[103,108916,108917],{"__ignoreMap":25},[106,108918,108919,108921,108923,108925],{"class":108,"line":109},[106,108920,30731],{"class":112},[106,108922,47257],{"class":165},[106,108924,47260],{"class":112},[106,108926,47263],{"class":116},[14,108928,108929],{},"导入 Pillow 的图片工具。MuJoCo Renderer 输出的是数组，Pillow 可以把数组保存成 PNG 图片。",[97,108931,108932],{"className":53061,"code":108669,"language":53063,"meta":25,"style":25},[103,108933,108934],{"__ignoreMap":25},[106,108935,108936,108938,108940,108942,108944,108946,108948,108950,108952,108954,108956,108958],{"class":108,"line":109},[106,108937,1027],{"class":116},[106,108939,108500],{"class":51294},[106,108941,14913],{"class":1955},[106,108943,162],{"class":116},[106,108945,108505],{"class":221},[106,108947,101091],{"class":1955},[106,108949,162],{"class":116},[106,108951,108690],{"class":221},[106,108953,108693],{"class":1955},[106,108955,162],{"class":116},[106,108957,108698],{"class":221},[106,108959,101129],{"class":116},[14,108961,108962,108963,108965,108966,108968,108969,108972,108973,108975],{},"定义一个相机。",[103,108964,79804],{}," 是相机名字。",[103,108967,104131],{}," 是相机在世界里的位置。",[103,108970,108971],{},"xyaxes"," 控制相机朝向，初学时可以先照抄，后面通过改 ",[103,108974,104131],{}," 来调视角。",[97,108977,108979],{"className":30372,"code":108978,"language":30374,"meta":25,"style":25},"renderer = mujoco.Renderer(model, height=480, width=640)\n",[103,108980,108981],{"__ignoreMap":25},[106,108982,108983,108985,108987,108989,108991,108993,108995,108997,108999,109001,109003],{"class":108,"line":109},[106,108984,107555],{"class":116},[106,108986,162],{"class":112},[106,108988,107859],{"class":116},[106,108990,24975],{"class":5209},[106,108992,162],{"class":112},[106,108994,42336],{"class":165},[106,108996,12428],{"class":116},[106,108998,24971],{"class":5209},[106,109000,162],{"class":112},[106,109002,107874],{"class":165},[106,109004,123],{"class":116},[14,109006,109007,109008,101003,109010,109012],{},"创建离屏渲染器。",[103,109009,24975],{},[103,109011,24971],{}," 决定输出图片大小。",[97,109014,109015],{"className":30372,"code":101661,"language":30374,"meta":25,"style":25},[103,109016,109017,109033],{"__ignoreMap":25},[106,109018,109019,109021,109023,109025,109027,109029,109031],{"class":108,"line":109},[106,109020,3017],{"class":112},[106,109022,101486],{"class":116},[106,109024,26037],{"class":112},[106,109026,32437],{"class":165},[106,109028,117],{"class":116},[106,109030,428],{"class":165},[106,109032,30780],{"class":116},[106,109034,109035],{"class":108,"line":28},[106,109036,101684],{"class":116},[14,109038,109039],{},"先让仿真跑 100 步。这样保存图片时，方块已经下落了一段时间。",[97,109041,109043],{"className":30372,"code":109042,"language":30374,"meta":25,"style":25},"renderer.update_scene(data, camera=\"fixed_camera\")\n",[103,109044,109045],{"__ignoreMap":25},[106,109046,109047,109050,109052,109054,109056],{"class":108,"line":109},[106,109048,109049],{"class":116},"renderer.update_scene(data, ",[106,109051,108500],{"class":5209},[106,109053,162],{"class":112},[106,109055,108505],{"class":221},[106,109057,123],{"class":116},[14,109059,109060,109061,109063,109064,109067],{},"告诉 renderer：用当前 ",[103,109062,33395],{}," 的状态更新画面，并使用名为 ",[103,109065,109066],{},"fixed_camera"," 的相机视角。",[97,109069,109070],{"className":30372,"code":107965,"language":30374,"meta":25,"style":25},[103,109071,109072],{"__ignoreMap":25},[106,109073,109074,109076,109078],{"class":108,"line":109},[106,109075,107565],{"class":116},[106,109077,162],{"class":112},[106,109079,107570],{"class":116},[14,109081,109082,109083,109086],{},"真正渲染出图像。",[103,109084,109085],{},"image"," 是一个 NumPy 数组，不是文件。",[97,109088,109090],{"className":30372,"code":109089,"language":30374,"meta":25,"style":25},"Image.fromarray(image).save(output_path)\n",[103,109091,109092],{"__ignoreMap":25},[106,109093,109094],{"class":108,"line":109},[106,109095,109089],{"class":116},[14,109097,109098,109099,28379],{},"把数组转换成图片，并保存到 ",[103,109100,109101],{},"render_output.png",[97,109103,109105],{"className":30372,"code":109104,"language":30374,"meta":25,"style":25},"renderer.close()\n",[103,109106,109107],{"__ignoreMap":25},[106,109108,109109],{"class":108,"line":109},[106,109110,109104],{"class":116},[14,109112,109113],{},"关闭 renderer，释放图形资源。写小脚本时不一定马上出问题，但养成关闭资源的习惯更好。",[48,109115,102301],{"id":102300},[14,109117,109118,109119,109121,109122,28379],{},"Viewer 示例会打开窗口，显示红色方块下落。Renderer 示例会生成 ",[103,109120,109101],{},"，并输出图像数组形状，例如 ",[103,109123,109124],{},"(480, 640, 3)",[14,109126,109127],{},"如果图片里看不到方块，先检查：",[60,109129,109130,109133,109136],{},[63,109131,109132],{},"方块是否掉到相机视野外。",[63,109134,109135],{},"camera 位置是否合理。",[63,109137,109138,109139,109142],{},"是否在 ",[103,109140,109141],{},"renderer.update_scene(data, camera=\"fixed_camera\")"," 里指定了正确相机名。",[48,109144,102333],{"id":102332},[14,109146,109147],{},"运行 viewer:",[97,109149,109151],{"className":23815,"code":109150,"language":23817,"meta":25,"style":25},"python ch5_viewer.py\n",[103,109152,109153],{"__ignoreMap":25},[106,109154,109155,109157],{"class":108,"line":109},[106,109156,30374],{"class":1955},[106,109158,108281],{"class":221},[14,109160,109161],{},"运行 renderer:",[97,109163,109165],{"className":23815,"code":109164,"language":23817,"meta":25,"style":25},"python ch5_renderer.py\n",[103,109166,109167],{"__ignoreMap":25},[106,109168,109169,109171],{"class":108,"line":109},[106,109170,30374],{"class":1955},[106,109172,108610],{"class":221},[14,109174,109175],{},"如果在服务器上运行:",[97,109177,109179],{"className":23815,"code":109178,"language":23817,"meta":25,"style":25},"MUJOCO_GL=egl python ch5_renderer.py\n",[103,109180,109181],{"__ignoreMap":25},[106,109182,109183,109185,109187,109189,109192],{"class":108,"line":109},[106,109184,107799],{"class":116},[106,109186,162],{"class":112},[106,109188,107789],{"class":221},[106,109190,109191],{"class":1955}," python",[106,109193,108610],{"class":221},[14,109195,107767],{},[97,109197,109199],{"className":23815,"code":109198,"language":23817,"meta":25,"style":25},"MUJOCO_GL=osmesa python ch5_renderer.py\n",[103,109200,109201],{"__ignoreMap":25},[106,109202,109203,109205,109207,109209,109211],{"class":108,"line":109},[106,109204,107799],{"class":116},[106,109206,162],{"class":112},[106,109208,107793],{"class":221},[106,109210,109191],{"class":1955},[106,109212,108610],{"class":221},[14,109214,109215],{},"再做几个练习：",[60,109217,109218,109225,109228,109234],{},[63,109219,109220,109221,109224],{},"把 renderer 分辨率改成 ",[103,109222,109223],{},"height=240, width=320","，观察输出 shape。",[63,109226,109227],{},"把方块颜色改成蓝色，重新保存图片。",[63,109229,109230,109231,109233],{},"把相机 ",[103,109232,104131],{}," 改远一点，观察画面中物体是否变小。",[63,109235,109236,109237,102399,109240,109243],{},"把 viewer 示例中的 ",[103,109238,109239],{},"data.time \u003C 5.0",[103,109241,109242],{},"data.time \u003C 20.0","，观察更长时间。",[48,109245,102438],{"id":102437},[77,109247,109249],{"id":109248},"viewer-窗口打不开","viewer 窗口打不开",[14,109251,109252],{},"安装:",[97,109254,109256],{"className":23815,"code":109255,"language":23817,"meta":25,"style":25},"sudo dnf install -y glfw glfw-devel libX11 libXi libXrandr libXcursor libXinerama\n",[103,109257,109258],{"__ignoreMap":25},[106,109259,109260,109262,109264,109266,109268,109270,109272,109274,109276,109278,109280],{"class":108,"line":109},[106,109261,24570],{"class":1955},[106,109263,26309],{"class":221},[106,109265,23827],{"class":221},[106,109267,26394],{"class":165},[106,109269,102491],{"class":221},[106,109271,100819],{"class":221},[106,109273,102496],{"class":221},[106,109275,100832],{"class":221},[106,109277,100838],{"class":221},[106,109279,100829],{"class":221},[106,109281,109282],{"class":221}," libXinerama\n",[77,109284,109286],{"id":109285},"glfwerror",[103,109287,109288],{},"GLFWError",[14,109290,109291],{},"可能是图形环境不可用。本机桌面优先测试 X11；远程服务器优先使用 Renderer 离屏渲染。",[77,109293,109295],{"id":109294},"renderer-报-opengl-后端错误","Renderer 报 OpenGL 后端错误",[14,109297,109298,109299,82533,109301,109303],{},"尝试 ",[103,109300,101022],{},[103,109302,101025],{},"。可能存在版本差异。",[77,109305,109306],{"id":109306},"保存图片是黑的",[14,109308,102560],{},[60,109310,109311,109314,109317,109327],{},[63,109312,109313],{},"XML 里是否有 light。",[63,109315,109316],{},"相机是否对着模型。",[63,109318,109319,109320,109323,109324,28379],{},"是否先 ",[103,109321,109322],{},"renderer.update_scene(data, camera=\"...\")"," 再 ",[103,109325,109326],{},"renderer.render()",[63,109328,109329],{},"物体是否已经掉出视野。",[77,109331,109332],{"id":109332},"远程服务器没有显示器",[14,109334,109335],{},"不要强行打开 viewer。优先使用 Renderer，并尝试：",[97,109337,109338],{"className":23815,"code":109178,"language":23817,"meta":25,"style":25},[103,109339,109340],{"__ignoreMap":25},[106,109341,109342,109344,109346,109348,109350],{"class":108,"line":109},[106,109343,107799],{"class":116},[106,109345,162],{"class":112},[106,109347,107789],{"class":221},[106,109349,109191],{"class":1955},[106,109351,108610],{"class":221},[14,109353,109354],{},"如果 EGL 不可用，再尝试：",[97,109356,109357],{"className":23815,"code":109198,"language":23817,"meta":25,"style":25},[103,109358,109359],{"__ignoreMap":25},[106,109360,109361,109363,109365,109367,109369],{"class":108,"line":109},[106,109362,107799],{"class":116},[106,109364,162],{"class":112},[106,109366,107793],{"class":221},[106,109368,109191],{"class":1955},[106,109370,108610],{"class":221},[48,109372,102592],{"id":102591},[14,109374,109375],{},"Viewer 用来调试，Renderer 用来生成图像。实际项目里常见流程是：",[60,109377,109378,109381,109384],{},[63,109379,109380],{},"先用 viewer 看模型和控制是否正常。",[63,109382,109383],{},"再用 renderer 保存图片或构造视觉观测。",[63,109385,109386],{},"最后把状态、动作、图像、奖励组织成训练数据。",[5119,109388,109389],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":25,"searchDepth":28,"depth":28,"links":109391},[109392,109393,109394,109399,109404,109405,109406,109413],{"id":100631,"depth":28,"text":100632},{"id":100754,"depth":28,"text":100755},{"id":101029,"depth":28,"text":101030,"children":109395},[109396,109397,109398],{"id":107896,"depth":1172,"text":107897},{"id":107926,"depth":1172,"text":107927},{"id":107961,"depth":1172,"text":107962},{"id":101237,"depth":28,"text":101238,"children":109400},[109401,109402,109403],{"id":101557,"depth":1172,"text":101557},{"id":108706,"depth":1172,"text":108707},{"id":108884,"depth":1172,"text":108885},{"id":102300,"depth":28,"text":102301},{"id":102332,"depth":28,"text":102333},{"id":102437,"depth":28,"text":102438,"children":109407},[109408,109409,109410,109411,109412],{"id":109248,"depth":1172,"text":109249},{"id":109285,"depth":1172,"text":109288},{"id":109294,"depth":1172,"text":109295},{"id":109306,"depth":1172,"text":109306},{"id":109332,"depth":1172,"text":109332},{"id":102591,"depth":28,"text":102592},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch5-viewerrenderer",{"title":107504,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch5-Viewer与Renderer","jkU4Bk_-8dFZQfBSHYyB6vru9sna8eICeXSnh5-FQI8",{"id":109420,"title":109421,"body":109422,"description":25,"extension":31,"meta":111333,"navigation":33,"path":111334,"seo":111335,"stem":111336,"__hash__":111337},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务.md","6.控制任务：Cartpole",{"type":7,"value":109423,"toc":111309},[109424,109427,109429,109432,109434,109453,109456,109462,109465,109467,109469,109493,109495,109509,109511,109552,109554,109565,109567,109570,109576,109579,109613,109616,109648,109651,109683,109687,109690,109730,109733,109739,109742,109748,109752,109755,109761,109764,109768,109771,109811,109813,109826,109829,109831,110413,110415,110427,110430,110441,110443,110446,110465,110477,110480,110501,110504,110507,110550,110553,110556,110576,110583,110585,110603,110618,110621,110627,110630,110636,110653,110660,110691,110702,110736,110747,110764,110773,110781,110786,110800,110803,110824,110830,110844,110849,110879,110889,110914,110922,110945,110948,110964,110967,110975,110981,111003,111016,111037,111046,111085,111096,111098,111101,111107,111110,111113,111119,111122,111142,111145,111147,111186,111188,111191,111199,111202,111205,111232,111235,111245,111251,111254,111260,111262,111268,111272,111275,111277,111280,111304,111307],[10,109425,109421],{"id":109426},"_6控制任务cartpole",[48,109428,100632],{"id":100631},[14,109430,109431],{},"本章搭建一个最小 Cartpole 控制任务。",[14,109433,104316],{},[60,109435,109436,109439,109441,109444,109447,109450],{},[63,109437,109438],{},"slide joint",[63,109440,106169],{},[63,109442,109443],{},"cart force actuator",[63,109445,109446],{},"状态观测",[63,109448,109449],{},"简单控制循环",[63,109451,109452],{},"reward 设计雏形",[14,109454,109455],{},"Cartpole 是强化学习里最经典的入门任务之一。它的目标很直观：",[97,109457,109460],{"className":109458,"code":109459,"language":5180,"meta":25},[5178],"小车可以左右移动\n杆子铰接在小车上\n控制小车左右施力\n尽量让杆子保持不倒\n",[103,109461,109459],{"__ignoreMap":25},[14,109463,109464],{},"这章不是为了做出最强控制器，而是为了让你看懂一个 MuJoCo 控制任务由哪些部分组成。",[48,109466,100755],{"id":100754},[14,109468,100758],{},[97,109470,109471],{"className":23815,"code":104373,"language":23817,"meta":25,"style":25},[103,109472,109473],{"__ignoreMap":25},[106,109474,109475,109477,109479,109481,109483,109485,109487,109489,109491],{"class":108,"line":109},[106,109476,24570],{"class":1955},[106,109478,26309],{"class":221},[106,109480,23827],{"class":221},[106,109482,26394],{"class":165},[106,109484,104388],{"class":221},[106,109486,100783],{"class":221},[106,109488,102486],{"class":221},[106,109490,100799],{"class":221},[106,109492,104397],{"class":221},[14,109494,102804],{},[97,109496,109497],{"className":23815,"code":100904,"language":23817,"meta":25,"style":25},[103,109498,109499],{"__ignoreMap":25},[106,109500,109501,109503,109505,109507],{"class":108,"line":109},[106,109502,23824],{"class":1955},[106,109504,23827],{"class":221},[106,109506,100915],{"class":221},[106,109508,100918],{"class":221},[14,109510,102821],{},[97,109512,109514],{"className":23815,"code":109513,"language":23817,"meta":25,"style":25},"conda create -n mujoco-cartpole python=3.10 -y\nconda activate mujoco-cartpole\npip install \"mujoco>=2.3\" numpy\n",[103,109515,109516,109533,109542],{"__ignoreMap":25},[106,109517,109518,109520,109522,109524,109527,109529,109531],{"class":108,"line":109},[106,109519,30324],{"class":1955},[106,109521,29170],{"class":221},[106,109523,25109],{"class":165},[106,109525,109526],{"class":221}," mujoco-cartpole",[106,109528,100960],{"class":221},[106,109530,100963],{"class":165},[106,109532,100966],{"class":165},[106,109534,109535,109537,109539],{"class":108,"line":28},[106,109536,30324],{"class":1955},[106,109538,100973],{"class":221},[106,109540,109541],{"class":221}," mujoco-cartpole\n",[106,109543,109544,109546,109548,109550],{"class":108,"line":1172},[106,109545,23824],{"class":1955},[106,109547,23827],{"class":221},[106,109549,100915],{"class":221},[106,109551,100918],{"class":221},[14,109553,100989],{},[60,109555,109556,109559,109562],{},[63,109557,109558],{},"本章不依赖 Gymnasium。",[63,109560,109561],{},"Cartpole XML 是简化教学模型，不等同于 Gymnasium 官方 CartPole 参数。",[63,109563,109564],{},"如果后续要对齐 Gymnasium，需要单独匹配质量、长度、奖励、终止条件。",[48,109566,101030],{"id":101029},[14,109568,109569],{},"Cartpole 的模型结构:",[97,109571,109574],{"className":109572,"code":109573,"language":5180,"meta":25},[5178],"world\n└── cart body\n    ├── slide joint: cart_x\n    └── pole body\n        └── hinge joint: pole_hinge\n",[103,109575,109573],{"__ignoreMap":25},[14,109577,109578],{},"小车通过 slide joint 左右移动:",[97,109580,109582],{"className":53061,"code":109581,"language":53063,"meta":25,"style":25},"\u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\"\u002F>\n",[103,109583,109584],{"__ignoreMap":25},[106,109585,109586,109588,109590,109592,109594,109597,109599,109601,109604,109606,109608,109611],{"class":108,"line":109},[106,109587,1027],{"class":116},[106,109589,102941],{"class":51294},[106,109591,14913],{"class":1955},[106,109593,162],{"class":116},[106,109595,109596],{"class":221},"\"cart_x\"",[106,109598,53818],{"class":1955},[106,109600,162],{"class":116},[106,109602,109603],{"class":221},"\"slide\"",[106,109605,106013],{"class":1955},[106,109607,162],{"class":116},[106,109609,109610],{"class":221},"\"1 0 0\"",[106,109612,101129],{"class":116},[14,109614,109615],{},"杆子通过 hinge joint 旋转:",[97,109617,109619],{"className":53061,"code":109618,"language":53063,"meta":25,"style":25},"\u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\"\u002F>\n",[103,109620,109621],{"__ignoreMap":25},[106,109622,109623,109625,109627,109629,109631,109634,109636,109638,109640,109642,109644,109646],{"class":108,"line":109},[106,109624,1027],{"class":116},[106,109626,102941],{"class":51294},[106,109628,14913],{"class":1955},[106,109630,162],{"class":116},[106,109632,109633],{"class":221},"\"pole_hinge\"",[106,109635,53818],{"class":1955},[106,109637,162],{"class":116},[106,109639,106004],{"class":221},[106,109641,106013],{"class":1955},[106,109643,162],{"class":116},[106,109645,106018],{"class":221},[106,109647,101129],{"class":116},[14,109649,109650],{},"控制力作用在小车 slide joint 上:",[97,109652,109654],{"className":53061,"code":109653,"language":53063,"meta":25,"style":25},"\u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\"\u002F>\n",[103,109655,109656],{"__ignoreMap":25},[106,109657,109658,109660,109662,109664,109666,109669,109671,109673,109675,109677,109679,109681],{"class":108,"line":109},[106,109659,1027],{"class":116},[106,109661,106059],{"class":51294},[106,109663,14913],{"class":1955},[106,109665,162],{"class":116},[106,109667,109668],{"class":221},"\"cart_motor\"",[106,109670,106069],{"class":1955},[106,109672,162],{"class":116},[106,109674,109596],{"class":221},[106,109676,106076],{"class":1955},[106,109678,162],{"class":116},[106,109680,54310],{"class":221},[106,109682,101129],{"class":116},[77,109684,109686],{"id":109685},"cartpole-的状态是什么","Cartpole 的状态是什么",[14,109688,109689],{},"这个简化模型有两个关节：",[254,109691,109692,109703],{},[257,109693,109694],{},[260,109695,109696,109698,109700],{},[263,109697,102744],{"align":23729},[263,109699,23730],{"align":23729},[263,109701,109702],{"align":23729},"对应状态",[301,109704,109705,109718],{},[260,109706,109707,109712,109715],{},[306,109708,109709],{"align":23729},[103,109710,109711],{},"cart_x",[306,109713,109714],{"align":23729},"slide",[306,109716,109717],{"align":23729},"小车 x 位置",[260,109719,109720,109725,109727],{},[306,109721,109722],{"align":23729},[103,109723,109724],{},"pole_hinge",[306,109726,105825],{"align":23729},[306,109728,109729],{"align":23729},"杆子角度",[14,109731,109732],{},"所以：",[97,109734,109737],{"className":109735,"code":109736,"language":5180,"meta":25},[5178],"data.qpos = [cart_x, pole_angle]\ndata.qvel = [cart_x_velocity, pole_angular_velocity]\n",[103,109738,109736],{"__ignoreMap":25},[14,109740,109741],{},"把它们拼起来就是观测：",[97,109743,109746],{"className":109744,"code":109745,"language":5180,"meta":25},[5178],"obs = [cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[103,109747,109745],{"__ignoreMap":25},[77,109749,109751],{"id":109750},"action-是什么","action 是什么",[14,109753,109754],{},"本章只有一个 actuator：",[97,109756,109759],{"className":109757,"code":109758,"language":5180,"meta":25},[5178],"data.ctrl[0] = action\n",[103,109760,109758],{"__ignoreMap":25},[14,109762,109763],{},"这个 action 会通过 motor 作用在小车的 slide joint 上。action 为正，小车倾向于向 x 正方向运动；action 为负，小车倾向于向 x 负方向运动。",[77,109765,109767],{"id":109766},"reward-是什么","reward 是什么",[14,109769,109770],{},"奖励函数：",[97,109772,109774],{"className":30372,"code":109773,"language":30374,"meta":25,"style":25},"return float(1.0 - 0.1 * cart_x * cart_x - pole_angle * pole_angle)\n",[103,109775,109776],{"__ignoreMap":25},[106,109777,109778,109780,109783,109785,109787,109789,109792,109794,109797,109799,109801,109803,109806,109808],{"class":108,"line":109},[106,109779,17039],{"class":112},[106,109781,109782],{"class":165}," float",[106,109784,117],{"class":116},[106,109786,102388],{"class":165},[106,109788,52265],{"class":112},[106,109790,109791],{"class":165}," 0.1",[106,109793,6511],{"class":112},[106,109795,109796],{"class":116}," cart_x ",[106,109798,572],{"class":112},[106,109800,109796],{"class":116},[106,109802,649],{"class":112},[106,109804,109805],{"class":116}," pole_angle ",[106,109807,572],{"class":112},[106,109809,109810],{"class":116}," pole_angle)\n",[14,109812,106211],{},[60,109814,109815,109820,109823],{},[63,109816,109817,109818,28379],{},"基础奖励是 ",[103,109819,102388],{},[63,109821,109822],{},"小车离中心越远，扣分越多。",[63,109824,109825],{},"杆子角度越大，扣分越多。",[14,109827,109828],{},"这只是教学用 reward。真实任务还可能加入终止条件、角速度惩罚、动作惩罚等。",[48,109830,101238],{"id":101237},[97,109832,109834],{"className":30372,"code":109833,"language":30374,"meta":25,"style":25},"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",[103,109835,109836,109842,109852,109856,109860,109868,109873,109877,109881,109885,109890,109894,109899,109904,109909,109913,109918,109923,109928,109932,109936,109940,109944,109948,109953,109957,109961,109965,109969,109973,109983,109990,109994,109998,110012,110026,110039,110069,110073,110077,110089,110101,110109,110113,110126,110130,110134,110143,110147,110163,110173,110186,110199,110203,110226,110244,110248,110260,110264,110268,110278,110288,110292,110308,110349,110353,110373,110389,110393,110397,110409],{"__ignoreMap":25},[106,109837,109838,109840],{"class":108,"line":109},[106,109839,30386],{"class":112},[106,109841,101286],{"class":116},[106,109843,109844,109846,109848,109850],{"class":108,"line":28},[106,109845,30386],{"class":112},[106,109847,31374],{"class":116},[106,109849,31377],{"class":112},[106,109851,31380],{"class":116},[106,109853,109854],{"class":108,"line":1172},[106,109855,2392],{"emptyLinePlaceholder":33},[106,109857,109858],{"class":108,"line":1187},[106,109859,2392],{"emptyLinePlaceholder":33},[106,109861,109862,109864,109866],{"class":108,"line":1193},[106,109863,101299],{"class":165},[106,109865,13557],{"class":112},[106,109867,101304],{"class":221},[106,109869,109870],{"class":108,"line":1207},[106,109871,109872],{"class":221},"\u003Cmujoco model=\"cartpole\">\n",[106,109874,109875],{"class":108,"line":1213},[106,109876,101314],{"class":221},[106,109878,109879],{"class":108,"line":1304},[106,109880,2392],{"emptyLinePlaceholder":33},[106,109882,109883],{"class":108,"line":1310},[106,109884,101323],{"class":221},[106,109886,109887],{"class":108,"line":1322},[106,109888,109889],{"class":221},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"4 1 0.1\" rgba=\"0.8 0.8 0.8 1\"\u002F>\n",[106,109891,109892],{"class":108,"line":1604},[106,109893,2392],{"emptyLinePlaceholder":33},[106,109895,109896],{"class":108,"line":1609},[106,109897,109898],{"class":221},"    \u003Cbody name=\"cart\" pos=\"0 0 0.2\">\n",[106,109900,109901],{"class":108,"line":1615},[106,109902,109903],{"class":221},"      \u003Cjoint name=\"cart_x\" type=\"slide\" axis=\"1 0 0\" damping=\"0.05\"\u002F>\n",[106,109905,109906],{"class":108,"line":1620},[106,109907,109908],{"class":221},"      \u003Cgeom name=\"cart_geom\" type=\"box\" size=\"0.2 0.1 0.1\" mass=\"1\" rgba=\"0.1 0.3 1 1\"\u002F>\n",[106,109910,109911],{"class":108,"line":1634},[106,109912,2392],{"emptyLinePlaceholder":33},[106,109914,109915],{"class":108,"line":1639},[106,109916,109917],{"class":221},"      \u003Cbody name=\"pole\" pos=\"0 0 0.1\">\n",[106,109919,109920],{"class":108,"line":1645},[106,109921,109922],{"class":221},"        \u003Cjoint name=\"pole_hinge\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.01\"\u002F>\n",[106,109924,109925],{"class":108,"line":1666},[106,109926,109927],{"class":221},"        \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",[106,109929,109930],{"class":108,"line":1671},[106,109931,106423],{"class":221},[106,109933,109934],{"class":108,"line":1685},[106,109935,101352],{"class":221},[106,109937,109938],{"class":108,"line":1690},[106,109939,101357],{"class":221},[106,109941,109942],{"class":108,"line":1719},[106,109943,2392],{"emptyLinePlaceholder":33},[106,109945,109946],{"class":108,"line":1724},[106,109947,106440],{"class":221},[106,109949,109950],{"class":108,"line":1741},[106,109951,109952],{"class":221},"    \u003Cmotor name=\"cart_motor\" joint=\"cart_x\" gear=\"10\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[106,109954,109955],{"class":108,"line":1746},[106,109956,106450],{"class":221},[106,109958,109959],{"class":108,"line":1751},[106,109960,101362],{"class":221},[106,109962,109963],{"class":108,"line":1756},[106,109964,95683],{"class":221},[106,109966,109967],{"class":108,"line":1770},[106,109968,2392],{"emptyLinePlaceholder":33},[106,109970,109971],{"class":108,"line":1775},[106,109972,2392],{"emptyLinePlaceholder":33},[106,109974,109975,109977,109980],{"class":108,"line":2569},[106,109976,31941],{"class":112},[106,109978,109979],{"class":1955}," get_observation",[106,109981,109982],{"class":116},"(data: mujoco.MjData) -> np.ndarray:\n",[106,109984,109985,109987],{"class":108,"line":2583},[106,109986,4082],{"class":112},[106,109988,109989],{"class":116}," np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[106,109991,109992],{"class":108,"line":2591},[106,109993,2392],{"emptyLinePlaceholder":33},[106,109995,109996],{"class":108,"line":2596},[106,109997,2392],{"emptyLinePlaceholder":33},[106,109999,110000,110002,110005,110008,110010],{"class":108,"line":2602},[106,110001,31941],{"class":112},[106,110003,110004],{"class":1955}," compute_reward",[106,110006,110007],{"class":116},"(obs: np.ndarray) -> ",[106,110009,156],{"class":165},[106,110011,3731],{"class":116},[106,110013,110014,110017,110019,110022,110024],{"class":108,"line":2608},[106,110015,110016],{"class":116},"    cart_x ",[106,110018,162],{"class":112},[106,110020,110021],{"class":116}," obs[",[106,110023,308],{"class":165},[106,110025,33240],{"class":116},[106,110027,110028,110031,110033,110035,110037],{"class":108,"line":2613},[106,110029,110030],{"class":116},"    pole_angle ",[106,110032,162],{"class":112},[106,110034,110021],{"class":116},[106,110036,334],{"class":165},[106,110038,33240],{"class":116},[106,110040,110041,110043,110045,110047,110049,110051,110053,110055,110057,110059,110061,110063,110065,110067],{"class":108,"line":7941},[106,110042,4082],{"class":112},[106,110044,109782],{"class":165},[106,110046,117],{"class":116},[106,110048,102388],{"class":165},[106,110050,52265],{"class":112},[106,110052,109791],{"class":165},[106,110054,6511],{"class":112},[106,110056,109796],{"class":116},[106,110058,572],{"class":112},[106,110060,109796],{"class":116},[106,110062,649],{"class":112},[106,110064,109805],{"class":116},[106,110066,572],{"class":112},[106,110068,109810],{"class":116},[106,110070,110071],{"class":108,"line":7965},[106,110072,2392],{"emptyLinePlaceholder":33},[106,110074,110075],{"class":108,"line":7970},[106,110076,2392],{"emptyLinePlaceholder":33},[106,110078,110079,110081,110083,110085,110087],{"class":108,"line":7976},[106,110080,31941],{"class":112},[106,110082,1965],{"class":1955},[106,110084,101383],{"class":116},[106,110086,95671],{"class":165},[106,110088,3731],{"class":116},[106,110090,110091,110093,110095,110097,110099],{"class":108,"line":8003},[106,110092,101392],{"class":116},[106,110094,162],{"class":112},[106,110096,101397],{"class":116},[106,110098,101299],{"class":165},[106,110100,123],{"class":116},[106,110102,110103,110105,110107],{"class":108,"line":8008},[106,110104,101406],{"class":116},[106,110106,162],{"class":112},[106,110108,101411],{"class":116},[106,110110,110111],{"class":108,"line":8014},[106,110112,2392],{"emptyLinePlaceholder":33},[106,110114,110115,110117,110119,110121,110123],{"class":108,"line":8026},[106,110116,105054],{"class":116},[106,110118,334],{"class":165},[106,110120,4435],{"class":116},[106,110122,162],{"class":112},[106,110124,110125],{"class":165}," 0.1\n",[106,110127,110128],{"class":108,"line":8038},[106,110129,105067],{"class":116},[106,110131,110132],{"class":108,"line":8050},[106,110133,2392],{"emptyLinePlaceholder":33},[106,110135,110136,110139,110141],{"class":108,"line":9709},[106,110137,110138],{"class":116},"    total_reward ",[106,110140,162],{"class":112},[106,110142,104746],{"class":165},[106,110144,110145],{"class":108,"line":9734},[106,110146,2392],{"emptyLinePlaceholder":33},[106,110148,110149,110151,110153,110155,110157,110159,110161],{"class":108,"line":9757},[106,110150,3193],{"class":112},[106,110152,31610],{"class":116},[106,110154,26037],{"class":112},[106,110156,32437],{"class":165},[106,110158,117],{"class":116},[106,110160,6403],{"class":165},[106,110162,30780],{"class":116},[106,110164,110165,110168,110170],{"class":108,"line":9781},[106,110166,110167],{"class":116},"        obs ",[106,110169,162],{"class":112},[106,110171,110172],{"class":116}," get_observation(data)\n",[106,110174,110175,110178,110180,110182,110184],{"class":108,"line":9786},[106,110176,110177],{"class":116},"        pole_angle ",[106,110179,162],{"class":112},[106,110181,110021],{"class":116},[106,110183,334],{"class":165},[106,110185,33240],{"class":116},[106,110187,110188,110191,110193,110195,110197],{"class":108,"line":9791},[106,110189,110190],{"class":116},"        pole_angular_velocity ",[106,110192,162],{"class":112},[106,110194,110021],{"class":116},[106,110196,188],{"class":165},[106,110198,33240],{"class":116},[106,110200,110201],{"class":108,"line":9796},[106,110202,2392],{"emptyLinePlaceholder":33},[106,110204,110205,110208,110210,110213,110215,110217,110219,110221,110223],{"class":108,"line":9805},[106,110206,110207],{"class":116},"        action ",[106,110209,162],{"class":112},[106,110211,110212],{"class":165}," 2.0",[106,110214,6511],{"class":112},[106,110216,109805],{"class":116},[106,110218,598],{"class":112},[106,110220,61861],{"class":165},[106,110222,6511],{"class":112},[106,110224,110225],{"class":116}," pole_angular_velocity\n",[106,110227,110228,110230,110232,110234,110236,110238,110240,110242],{"class":108,"line":9810},[106,110229,110207],{"class":116},[106,110231,162],{"class":112},[106,110233,107432],{"class":116},[106,110235,649],{"class":112},[106,110237,102388],{"class":165},[106,110239,12428],{"class":116},[106,110241,102388],{"class":165},[106,110243,123],{"class":116},[106,110245,110246],{"class":108,"line":9816},[106,110247,2392],{"emptyLinePlaceholder":33},[106,110249,110250,110252,110254,110256,110258],{"class":108,"line":9837},[106,110251,106602],{"class":116},[106,110253,308],{"class":165},[106,110255,4435],{"class":116},[106,110257,162],{"class":112},[106,110259,107455],{"class":116},[106,110261,110262],{"class":108,"line":9843},[106,110263,101501],{"class":116},[106,110265,110266],{"class":108,"line":9857},[106,110267,2392],{"emptyLinePlaceholder":33},[106,110269,110270,110273,110275],{"class":108,"line":9863},[106,110271,110272],{"class":116},"        reward ",[106,110274,162],{"class":112},[106,110276,110277],{"class":116}," compute_reward(get_observation(data))\n",[106,110279,110280,110283,110285],{"class":108,"line":9890},[106,110281,110282],{"class":116},"        total_reward ",[106,110284,9470],{"class":112},[106,110286,110287],{"class":116}," reward\n",[106,110289,110290],{"class":108,"line":9899},[106,110291,2392],{"emptyLinePlaceholder":33},[106,110293,110294,110296,110298,110300,110302,110304,110306],{"class":108,"line":9905},[106,110295,2489],{"class":112},[106,110297,31610],{"class":116},[106,110299,445],{"class":112},[106,110301,5747],{"class":165},[106,110303,101544],{"class":112},[106,110305,4085],{"class":165},[106,110307,3731],{"class":116},[106,110309,110310,110312,110314,110317,110320,110323,110326,110328,110331,110334,110336,110338,110340,110342,110345,110347],{"class":108,"line":9913},[106,110311,34644],{"class":165},[106,110313,117],{"class":116},[106,110315,110316],{"class":221},"\"step:\"",[106,110318,110319],{"class":116},", step, ",[106,110321,110322],{"class":221},"\"obs:\"",[106,110324,110325],{"class":116},", np.round(obs, ",[106,110327,188],{"class":165},[106,110329,110330],{"class":116},"), ",[106,110332,110333],{"class":221},"\"action:\"",[106,110335,12428],{"class":116},[106,110337,32012],{"class":165},[106,110339,117],{"class":116},[106,110341,156],{"class":165},[106,110343,110344],{"class":116},"(action), ",[106,110346,188],{"class":165},[106,110348,30491],{"class":116},[106,110350,110351],{"class":108,"line":9918},[106,110352,2392],{"emptyLinePlaceholder":33},[106,110354,110355,110357,110359,110362,110364,110366,110369,110371],{"class":108,"line":16597},[106,110356,31293],{"class":165},[106,110358,117],{"class":116},[106,110360,110361],{"class":221},"\"total_reward:\"",[106,110363,12428],{"class":116},[106,110365,32012],{"class":165},[106,110367,110368],{"class":116},"(total_reward, ",[106,110370,188],{"class":165},[106,110372,30491],{"class":116},[106,110374,110375,110377,110379,110382,110385,110387],{"class":108,"line":16603},[106,110376,31293],{"class":165},[106,110378,117],{"class":116},[106,110380,110381],{"class":221},"\"final obs:\"",[106,110383,110384],{"class":116},", np.round(get_observation(data), ",[106,110386,188],{"class":165},[106,110388,30491],{"class":116},[106,110390,110391],{"class":108,"line":16626},[106,110392,2392],{"emptyLinePlaceholder":33},[106,110394,110395],{"class":108,"line":16632},[106,110396,2392],{"emptyLinePlaceholder":33},[106,110398,110399,110401,110403,110405,110407],{"class":108,"line":16655},[106,110400,1523],{"class":112},[106,110402,31214],{"class":165},[106,110404,101544],{"class":112},[106,110406,101547],{"class":221},[106,110408,3731],{"class":116},[106,110410,110411],{"class":108,"line":16669},[106,110412,101554],{"class":116},[14,110414,103555],{},[97,110416,110418],{"className":23815,"code":110417,"language":23817,"meta":25,"style":25},"touch ch6_cartpole.py\n",[103,110419,110420],{"__ignoreMap":25},[106,110421,110422,110424],{"class":108,"line":109},[106,110423,101268],{"class":1955},[106,110425,110426],{"class":221}," ch6_cartpole.py\n",[14,110428,110429],{},"运行：",[97,110431,110433],{"className":23815,"code":110432,"language":23817,"meta":25,"style":25},"python ch6_cartpole.py\n",[103,110434,110435],{"__ignoreMap":25},[106,110436,110437,110439],{"class":108,"line":109},[106,110438,30374],{"class":1955},[106,110440,110426],{"class":221},[77,110442,101557],{"id":101557},[14,110444,110445],{},"构造观测：",[97,110447,110449],{"className":30372,"code":110448,"language":30374,"meta":25,"style":25},"def get_observation(data: mujoco.MjData) -> np.ndarray:\n    return np.concatenate([data.qpos.copy(), data.qvel.copy()])\n",[103,110450,110451,110459],{"__ignoreMap":25},[106,110452,110453,110455,110457],{"class":108,"line":109},[106,110454,31941],{"class":112},[106,110456,109979],{"class":1955},[106,110458,109982],{"class":116},[106,110460,110461,110463],{"class":108,"line":28},[106,110462,4082],{"class":112},[106,110464,109989],{"class":116},[14,110466,110467,110470,110471,110473,110474,110476],{},[103,110468,110469],{},"np.concatenate"," 把位置数组和速度数组拼成一个更长的数组。这里 ",[103,110472,104015],{}," 2 维，",[103,110475,104345],{}," 2 维，所以 obs 是 4 维。",[14,110478,110479],{},"设置初始角度：",[97,110481,110483],{"className":30372,"code":110482,"language":30374,"meta":25,"style":25},"data.qpos[1] = 0.1\nmujoco.mj_forward(model, data)\n",[103,110484,110485,110497],{"__ignoreMap":25},[106,110486,110487,110489,110491,110493,110495],{"class":108,"line":109},[106,110488,104684],{"class":116},[106,110490,334],{"class":165},[106,110492,4435],{"class":116},[106,110494,162],{"class":112},[106,110496,110125],{"class":165},[106,110498,110499],{"class":108,"line":28},[106,110500,104528],{"class":116},[14,110502,110503],{},"这让杆子一开始有一点倾斜。如果完全竖直且没有扰动，系统可能太“安静”，不利于观察控制效果。",[14,110505,110506],{},"简单反馈控制：",[97,110508,110510],{"className":30372,"code":110509,"language":30374,"meta":25,"style":25},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\naction = np.clip(action, -1.0, 1.0)\n",[103,110511,110512,110532],{"__ignoreMap":25},[106,110513,110514,110516,110518,110520,110522,110524,110526,110528,110530],{"class":108,"line":109},[106,110515,107427],{"class":116},[106,110517,162],{"class":112},[106,110519,110212],{"class":165},[106,110521,6511],{"class":112},[106,110523,109805],{"class":116},[106,110525,598],{"class":112},[106,110527,61861],{"class":165},[106,110529,6511],{"class":112},[106,110531,110225],{"class":116},[106,110533,110534,110536,110538,110540,110542,110544,110546,110548],{"class":108,"line":28},[106,110535,107427],{"class":116},[106,110537,162],{"class":112},[106,110539,107432],{"class":116},[106,110541,649],{"class":112},[106,110543,102388],{"class":165},[106,110545,12428],{"class":116},[106,110547,102388],{"class":165},[106,110549,123],{"class":116},[14,110551,110552],{},"这不是严格推导出来的最优控制，只是一个教学例子：根据杆子的角度和角速度，决定给小车施加多大力。",[14,110554,110555],{},"限制动作：",[97,110557,110559],{"className":30372,"code":110558,"language":30374,"meta":25,"style":25},"np.clip(action, -1.0, 1.0)\n",[103,110560,110561],{"__ignoreMap":25},[106,110562,110563,110566,110568,110570,110572,110574],{"class":108,"line":109},[106,110564,110565],{"class":116},"np.clip(action, ",[106,110567,649],{"class":112},[106,110569,102388],{"class":165},[106,110571,12428],{"class":116},[106,110573,102388],{"class":165},[106,110575,123],{"class":116},[14,110577,110578,110579,110582],{},"因为 XML 里 ",[103,110580,110581],{},"ctrlrange=\"-1 1\"","，所以 Python 里也把 action 限制在这个范围内。",[77,110584,101693],{"id":101693},[97,110586,110587],{"className":30372,"code":110448,"language":30374,"meta":25,"style":25},[103,110588,110589,110597],{"__ignoreMap":25},[106,110590,110591,110593,110595],{"class":108,"line":109},[106,110592,31941],{"class":112},[106,110594,109979],{"class":1955},[106,110596,109982],{"class":116},[106,110598,110599,110601],{"class":108,"line":28},[106,110600,4082],{"class":112},[106,110602,109989],{"class":116},[14,110604,110605,110606,110609,110610,110613,110614,110617],{},"这段定义了一个函数，用来获取当前观测。",[103,110607,110608],{},"data.qpos.copy()"," 是位置数组副本，",[103,110611,110612],{},"data.qvel.copy()"," 是速度数组副本。",[103,110615,110616],{},"np.concatenate(...)"," 把两个数组首尾拼接起来。",[14,110619,110620],{},"在本章模型里：",[97,110622,110625],{"className":110623,"code":110624,"language":5180,"meta":25},[5178],"data.qpos = [小车位置, 杆子角度]\ndata.qvel = [小车速度, 杆子角速度]\n",[103,110626,110624],{"__ignoreMap":25},[14,110628,110629],{},"所以返回的 obs 是：",[97,110631,110634],{"className":110632,"code":110633,"language":5180,"meta":25},[5178],"[小车位置, 杆子角度, 小车速度, 杆子角速度]\n",[103,110635,110633],{"__ignoreMap":25},[97,110637,110639],{"className":30372,"code":110638,"language":30374,"meta":25,"style":25},"def compute_reward(obs: np.ndarray) -> float:\n",[103,110640,110641],{"__ignoreMap":25},[106,110642,110643,110645,110647,110649,110651],{"class":108,"line":109},[106,110644,31941],{"class":112},[106,110646,110004],{"class":1955},[106,110648,110007],{"class":116},[106,110650,156],{"class":165},[106,110652,3731],{"class":116},[14,110654,110655,110656,110659],{},"这行定义奖励函数。输入是观测 ",[103,110657,110658],{},"obs","，输出是一个浮点数奖励。",[97,110661,110663],{"className":30372,"code":110662,"language":30374,"meta":25,"style":25},"cart_x = obs[0]\npole_angle = obs[1]\n",[103,110664,110665,110678],{"__ignoreMap":25},[106,110666,110667,110670,110672,110674,110676],{"class":108,"line":109},[106,110668,110669],{"class":116},"cart_x ",[106,110671,162],{"class":112},[106,110673,110021],{"class":116},[106,110675,308],{"class":165},[106,110677,33240],{"class":116},[106,110679,110680,110683,110685,110687,110689],{"class":108,"line":28},[106,110681,110682],{"class":116},"pole_angle ",[106,110684,162],{"class":112},[106,110686,110021],{"class":116},[106,110688,334],{"class":165},[106,110690,33240],{"class":116},[14,110692,110693,110694,110697,110698,110701],{},"数组索引从 0 开始。",[103,110695,110696],{},"obs[0]"," 是第一个元素，也就是小车位置。",[103,110699,110700],{},"obs[1]"," 是第二个元素，也就是杆子角度。",[97,110703,110704],{"className":30372,"code":109773,"language":30374,"meta":25,"style":25},[103,110705,110706],{"__ignoreMap":25},[106,110707,110708,110710,110712,110714,110716,110718,110720,110722,110724,110726,110728,110730,110732,110734],{"class":108,"line":109},[106,110709,17039],{"class":112},[106,110711,109782],{"class":165},[106,110713,117],{"class":116},[106,110715,102388],{"class":165},[106,110717,52265],{"class":112},[106,110719,109791],{"class":165},[106,110721,6511],{"class":112},[106,110723,109796],{"class":116},[106,110725,572],{"class":112},[106,110727,109796],{"class":116},[106,110729,649],{"class":112},[106,110731,109805],{"class":116},[106,110733,572],{"class":112},[106,110735,109810],{"class":116},[14,110737,110738,110739,110742,110743,110746],{},"这行计算奖励。",[103,110740,110741],{},"cart_x * cart_x"," 是小车位置的平方，",[103,110744,110745],{},"pole_angle * pole_angle"," 是杆子角度的平方。平方的特点是无论正负都会变成正数，所以偏离中心和角度偏离都会扣分。",[97,110748,110750],{"className":30372,"code":110749,"language":30374,"meta":25,"style":25},"data.qpos[1] = 0.1\n",[103,110751,110752],{"__ignoreMap":25},[106,110753,110754,110756,110758,110760,110762],{"class":108,"line":109},[106,110755,104684],{"class":116},[106,110757,334],{"class":165},[106,110759,4435],{"class":116},[106,110761,162],{"class":112},[106,110763,110125],{"class":165},[14,110765,110766,110767,110769,110770,110772],{},"手动设置杆子的初始角度。因为 ",[103,110768,105441],{}," 是小车位置，",[103,110771,105444],{}," 是杆子角度，所以这里改的是杆子。",[97,110774,110775],{"className":30372,"code":104528,"language":30374,"meta":25,"style":25},[103,110776,110777],{"__ignoreMap":25},[106,110778,110779],{"class":108,"line":109},[106,110780,104528],{"class":116},[14,110782,105487,110783,110785],{},[103,110784,104015],{}," 后，刷新 MuJoCo 内部派生状态。否则有些坐标、碰撞或可视化信息可能还停留在旧状态。",[97,110787,110789],{"className":30372,"code":110788,"language":30374,"meta":25,"style":25},"total_reward = 0.0\n",[103,110790,110791],{"__ignoreMap":25},[106,110792,110793,110796,110798],{"class":108,"line":109},[106,110794,110795],{"class":116},"total_reward ",[106,110797,162],{"class":112},[106,110799,104746],{"class":165},[14,110801,110802],{},"创建一个变量，用来累计整个 episode 的奖励。初始值是 0。",[97,110804,110806],{"className":30372,"code":110805,"language":30374,"meta":25,"style":25},"for step in range(1000):\n",[103,110807,110808],{"__ignoreMap":25},[106,110809,110810,110812,110814,110816,110818,110820,110822],{"class":108,"line":109},[106,110811,3017],{"class":112},[106,110813,31610],{"class":116},[106,110815,26037],{"class":112},[106,110817,32437],{"class":165},[106,110819,117],{"class":116},[106,110821,6403],{"class":165},[106,110823,30780],{"class":116},[14,110825,110826,110827,110829],{},"循环 1000 步。",[103,110828,107119],{}," 是当前步数，从 0 到 999。",[97,110831,110833],{"className":30372,"code":110832,"language":30374,"meta":25,"style":25},"obs = get_observation(data)\n",[103,110834,110835],{"__ignoreMap":25},[106,110836,110837,110840,110842],{"class":108,"line":109},[106,110838,110839],{"class":116},"obs ",[106,110841,162],{"class":112},[106,110843,110172],{"class":116},[14,110845,110846,110847,28379],{},"读取当前状态，保存到 ",[103,110848,110658],{},[97,110850,110852],{"className":30372,"code":110851,"language":30374,"meta":25,"style":25},"pole_angle = obs[1]\npole_angular_velocity = obs[3]\n",[103,110853,110854,110866],{"__ignoreMap":25},[106,110855,110856,110858,110860,110862,110864],{"class":108,"line":109},[106,110857,110682],{"class":116},[106,110859,162],{"class":112},[106,110861,110021],{"class":116},[106,110863,334],{"class":165},[106,110865,33240],{"class":116},[106,110867,110868,110871,110873,110875,110877],{"class":108,"line":28},[106,110869,110870],{"class":116},"pole_angular_velocity ",[106,110872,162],{"class":112},[106,110874,110021],{"class":116},[106,110876,188],{"class":165},[106,110878,33240],{"class":116},[14,110880,110881,110882,110885,110886,28379],{},"取出杆子角度和杆子角速度。为什么角速度是 ",[103,110883,110884],{},"obs[3]","？因为 obs 的顺序是 ",[103,110887,110888],{},"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]",[97,110890,110892],{"className":30372,"code":110891,"language":30374,"meta":25,"style":25},"action = 2.0 * pole_angle + 0.5 * pole_angular_velocity\n",[103,110893,110894],{"__ignoreMap":25},[106,110895,110896,110898,110900,110902,110904,110906,110908,110910,110912],{"class":108,"line":109},[106,110897,107427],{"class":116},[106,110899,162],{"class":112},[106,110901,110212],{"class":165},[106,110903,6511],{"class":112},[106,110905,109805],{"class":116},[106,110907,598],{"class":112},[106,110909,61861],{"class":165},[106,110911,6511],{"class":112},[106,110913,110225],{"class":116},[14,110915,110916,110917,101003,110919,110921],{},"这是一个简单反馈控制器。它根据杆子当前角度和角速度算出动作。",[103,110918,105245],{},[103,110920,35323],{}," 是人为设置的系数，不是固定公式。",[97,110923,110925],{"className":30372,"code":110924,"language":30374,"meta":25,"style":25},"action = np.clip(action, -1.0, 1.0)\n",[103,110926,110927],{"__ignoreMap":25},[106,110928,110929,110931,110933,110935,110937,110939,110941,110943],{"class":108,"line":109},[106,110930,107427],{"class":116},[106,110932,162],{"class":112},[106,110934,107432],{"class":116},[106,110936,649],{"class":112},[106,110938,102388],{"class":165},[106,110940,12428],{"class":116},[106,110942,102388],{"class":165},[106,110944,123],{"class":116},[14,110946,110947],{},"把 action 限制在 -1 到 1 之间。如果 action 算出来是 3，会变成 1；如果是 -4，会变成 -1。",[97,110949,110950],{"className":30372,"code":109758,"language":30374,"meta":25,"style":25},[103,110951,110952],{"__ignoreMap":25},[106,110953,110954,110956,110958,110960,110962],{"class":108,"line":109},[106,110955,105856],{"class":116},[106,110957,308],{"class":165},[106,110959,4435],{"class":116},[106,110961,162],{"class":112},[106,110963,107455],{"class":116},[14,110965,110966],{},"把动作写入第 0 个 actuator，也就是小车电机。真正的“控制 MuJoCo”就是通过这行发生的。",[97,110968,110969],{"className":30372,"code":104490,"language":30374,"meta":25,"style":25},[103,110970,110971],{"__ignoreMap":25},[106,110972,110973],{"class":108,"line":109},[106,110974,104490],{"class":116},[14,110976,110977,110978,110980],{},"让仿真前进一步。MuJoCo 会根据刚刚写入的 ",[103,110979,106111],{}," 计算小车和杆子的下一刻状态。",[97,110982,110984],{"className":30372,"code":110983,"language":30374,"meta":25,"style":25},"reward = compute_reward(get_observation(data))\ntotal_reward += reward\n",[103,110985,110986,110995],{"__ignoreMap":25},[106,110987,110988,110991,110993],{"class":108,"line":109},[106,110989,110990],{"class":116},"reward ",[106,110992,162],{"class":112},[106,110994,110277],{"class":116},[106,110996,110997,110999,111001],{"class":108,"line":28},[106,110998,110795],{"class":116},[106,111000,9470],{"class":112},[106,111002,110287],{"class":116},[14,111004,111005,111006,111008,111009,111012,111013,28379],{},"先根据新状态计算奖励，再把它加到累计奖励中。",[103,111007,9470],{}," 是简写，",[103,111010,111011],{},"total_reward += reward"," 等价于 ",[103,111014,111015],{},"total_reward = total_reward + reward",[97,111017,111019],{"className":30372,"code":111018,"language":30374,"meta":25,"style":25},"if step % 100 == 0:\n",[103,111020,111021],{"__ignoreMap":25},[106,111022,111023,111025,111027,111029,111031,111033,111035],{"class":108,"line":109},[106,111024,1523],{"class":112},[106,111026,31610],{"class":116},[106,111028,445],{"class":112},[106,111030,5747],{"class":165},[106,111032,101544],{"class":112},[106,111034,4085],{"class":165},[106,111036,3731],{"class":116},[14,111038,111039,111041,111042,111045],{},[103,111040,445],{}," 是取余数。",[103,111043,111044],{},"step % 100 == 0"," 表示每 100 步打印一次，比如第 0、100、200 步。",[97,111047,111049],{"className":30372,"code":111048,"language":30374,"meta":25,"style":25},"print(\"step:\", step, \"obs:\", np.round(obs, 3), \"action:\", round(float(action), 3))\n",[103,111050,111051],{"__ignoreMap":25},[106,111052,111053,111055,111057,111059,111061,111063,111065,111067,111069,111071,111073,111075,111077,111079,111081,111083],{"class":108,"line":109},[106,111054,30409],{"class":165},[106,111056,117],{"class":116},[106,111058,110316],{"class":221},[106,111060,110319],{"class":116},[106,111062,110322],{"class":221},[106,111064,110325],{"class":116},[106,111066,188],{"class":165},[106,111068,110330],{"class":116},[106,111070,110333],{"class":221},[106,111072,12428],{"class":116},[106,111074,32012],{"class":165},[106,111076,117],{"class":116},[106,111078,156],{"class":165},[106,111080,110344],{"class":116},[106,111082,188],{"class":165},[106,111084,30491],{"class":116},[14,111086,111087,111088,111091,111092,111095],{},"打印当前步数、观测和动作。",[103,111089,111090],{},"np.round(obs, 3)"," 表示 obs 保留 3 位小数。",[103,111093,111094],{},"round(float(action), 3)"," 表示 action 保留 3 位小数。",[48,111097,102301],{"id":102300},[14,111099,111100],{},"观测向量:",[97,111102,111105],{"className":111103,"code":111104,"language":5180,"meta":25},[5178],"[cart_x, pole_angle, cart_x_velocity, pole_angular_velocity]\n",[103,111106,111104],{"__ignoreMap":25},[14,111108,111109],{},"控制器是教学用的简单线性反馈，不保证最优。",[14,111111,111112],{},"每隔 100 步会打印一次：",[97,111114,111117],{"className":111115,"code":111116,"language":5180,"meta":25},[5178],"step: 当前步数\nobs: 当前观测\naction: 当前控制输入\n",[103,111118,111116],{"__ignoreMap":25},[14,111120,111121],{},"重点观察：",[60,111123,111124,111130,111135],{},[63,111125,111126,111129],{},[103,111127,111128],{},"pole_angle"," 是否越来越大。",[63,111131,111132,111134],{},[103,111133,109711],{}," 是否跑得太远。",[63,111136,111137,111138,82533,111140,28379],{},"action 是否经常被 clip 到 ",[103,111139,103900],{},[103,111141,334],{},[14,111143,111144],{},"如果 action 长期贴着边界，说明控制器可能太激进，或者 actuator 力不够。",[48,111146,102333],{"id":102332},[60,111148,111149,111155,111158,111164,111174,111180,111183],{},[63,111150,111151,111152,28379],{},"把初始角度改为 ",[103,111153,111154],{},"data.qpos[1] = 0.3",[63,111156,111157],{},"重新运行，观察控制是否变差。",[63,111159,111160,111161,111163],{},"把 actuator ",[103,111162,107052],{}," 改小。",[63,111165,111166,111167,111170,111171,28379],{},"打印 ",[103,111168,111169],{},"model.nq, model.nv, model.nu","，应为 ",[103,111172,111173],{},"2 2 1",[63,111175,111176,111177,111179],{},"把 reward 里的 ",[103,111178,110745],{}," 系数改大，观察总奖励变化。",[63,111181,111182],{},"把控制器改成反号，观察杆子是否更容易倒。",[63,111184,111185],{},"用第 5 章 viewer 把这个 XML 放进去，可视化看小车和杆子的运动。",[48,111187,102438],{"id":102437},[77,111189,111190],{"id":111190},"杆子方向和预期不一致",[14,111192,102381,111193,111195,111196,111198],{},[103,111194,106224],{}," 和 capsule 的 ",[103,111197,103161],{},"，必要时用 viewer 可视化确认。",[77,111200,111201],{"id":111201},"控制器越控越倒",[14,111203,111204],{},"说明反馈符号可能反了，尝试:",[97,111206,111208],{"className":30372,"code":111207,"language":30374,"meta":25,"style":25},"action = -2.0 * pole_angle - 0.5 * pole_angular_velocity\n",[103,111209,111210],{"__ignoreMap":25},[106,111211,111212,111214,111216,111218,111220,111222,111224,111226,111228,111230],{"class":108,"line":109},[106,111213,107427],{"class":116},[106,111215,162],{"class":112},[106,111217,52265],{"class":112},[106,111219,105245],{"class":165},[106,111221,6511],{"class":112},[106,111223,109805],{"class":116},[106,111225,649],{"class":112},[106,111227,61861],{"class":165},[106,111229,6511],{"class":112},[106,111231,110225],{"class":116},[77,111233,111234],{"id":111234},"小车飞走",[14,111236,111237,111238,111240,111241,111244],{},"降低 ",[103,111239,107052],{}," 或缩小 ",[103,111242,111243],{},"action"," 的 clip 范围。",[77,111246,111248,111250],{"id":111247},"obs3-为什么是杆子角速度",[103,111249,110884],{}," 为什么是杆子角速度",[14,111252,111253],{},"因为这个模型里：",[97,111255,111258],{"className":111256,"code":111257,"language":5180,"meta":25},[5178],"qpos = [cart_x, pole_angle]\nqvel = [cart_x_velocity, pole_angular_velocity]\nobs = qpos + qvel\n",[103,111259,111257],{"__ignoreMap":25},[14,111261,109732],{},[97,111263,111266],{"className":111264,"code":111265,"language":5180,"meta":25},[5178],"obs[0] = cart_x\nobs[1] = pole_angle\nobs[2] = cart_x_velocity\nobs[3] = pole_angular_velocity\n",[103,111267,111265],{"__ignoreMap":25},[77,111269,111271],{"id":111270},"reward-变成负数是否错误","reward 变成负数是否错误",[14,111273,111274],{},"不是。reward 可以是负数。它只是一个分数，强化学习算法关心的是“长期总奖励尽量大”。如果杆子角度很大或小车离中心很远，reward 变负是合理的。",[48,111276,102592],{"id":102591},[14,111278,111279],{},"一个控制任务通常包含：",[60,111281,111282,111285,111293,111298,111301],{},[63,111283,111284],{},"模型：Cartpole 的 body、joint、actuator。",[63,111286,111287,111288,329,111290,111292],{},"观测：从 ",[103,111289,104015],{},[103,111291,104345],{}," 里取状态。",[63,111294,111295,111296,28379],{},"动作：写入 ",[103,111297,101061],{},[63,111299,111300],{},"奖励：根据任务目标打分。",[63,111302,111303],{},"循环：obs -> action -> step -> reward。",[14,111305,111306],{},"这就是后面 Gymnasium 环境的基本骨架。",[5119,111308,104271],{},{"title":25,"searchDepth":28,"depth":28,"links":111310},[111311,111312,111313,111318,111322,111323,111324,111332],{"id":100631,"depth":28,"text":100632},{"id":100754,"depth":28,"text":100755},{"id":101029,"depth":28,"text":101030,"children":111314},[111315,111316,111317],{"id":109685,"depth":1172,"text":109686},{"id":109750,"depth":1172,"text":109751},{"id":109766,"depth":1172,"text":109767},{"id":101237,"depth":28,"text":101238,"children":111319},[111320,111321],{"id":101557,"depth":1172,"text":101557},{"id":101693,"depth":1172,"text":101693},{"id":102300,"depth":28,"text":102301},{"id":102332,"depth":28,"text":102333},{"id":102437,"depth":28,"text":102438,"children":111325},[111326,111327,111328,111329,111331],{"id":111190,"depth":1172,"text":111190},{"id":111201,"depth":1172,"text":111201},{"id":111234,"depth":1172,"text":111234},{"id":111247,"depth":1172,"text":111330},"obs[3] 为什么是杆子角速度",{"id":111270,"depth":1172,"text":111271},{"id":102591,"depth":28,"text":102592},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch6-cartpole",{"title":109421,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch6-Cartpole控制任务","8dC1kTOiSwNp3zaPqtqpgrKIv_o7u33VnKDYsswth_E",{"id":111339,"title":111340,"body":111341,"description":25,"extension":31,"meta":113355,"navigation":33,"path":113356,"seo":113357,"stem":113358,"__hash__":113359},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务.md","7.控制任务：Reacher 机械臂到达目标",{"type":7,"value":111342,"toc":113331},[111343,111346,111348,111351,111353,111370,111373,111376,111382,111385,111387,111389,111413,111415,111429,111431,111472,111474,111492,111494,111497,111503,111506,111534,111538,111544,111569,111572,111603,111610,111613,111616,111622,111625,111631,111634,111640,111644,111647,111672,111675,111677,112437,112439,112451,112453,112464,112466,112469,112486,112489,112491,112502,112505,112507,112553,112556,112569,112572,112654,112657,112659,112675,112685,112698,112701,112740,112750,112761,112771,112784,112787,112816,112819,112829,112832,112838,112855,112866,112868,112874,112891,112902,112923,112926,112938,112941,112962,112965,112973,112981,112998,113001,113070,113077,113085,113088,113101,113108,113110,113113,113119,113122,113125,113131,113137,113139,113179,113181,113187,113196,113199,113201,113221,113224,113227,113233,113237,113239,113266,113269,113272,113299,113305,113308,113311,113313,113316,113319,113325,113328],[10,111344,111340],{"id":111345},"_7控制任务reacher-机械臂到达目标",[48,111347,100632],{"id":100631},[14,111349,111350],{},"本章搭建一个二维两关节 reacher 任务。",[14,111352,104316],{},[60,111354,111355,111358,111361,111364,111367],{},[63,111356,111357],{},"两个 hinge joint",[63,111359,111360],{},"两个 motor actuator",[63,111362,111363],{},"site 作为末端点和目标点",[63,111365,111366],{},"根据末端和目标距离设计 reward",[63,111368,111369],{},"构造机械臂任务的基本形式",[14,111371,111372],{},"这是后续机械臂模仿学习、VLA 任务的基础。",[14,111374,111375],{},"Reacher 任务可以理解为：",[97,111377,111380],{"className":111378,"code":111379,"language":5180,"meta":25},[5178],"一条两段机械臂\n末端有一个蓝色 tip\n空间里有一个红色 target\n控制两个关节转动\n让 tip 靠近 target\n",[103,111381,111379],{"__ignoreMap":25},[14,111383,111384],{},"相比 Cartpole，Reacher 更接近机械臂任务，因为它开始关注“末端位置”和“目标位置”。",[48,111386,100755],{"id":100754},[14,111388,100758],{},[97,111390,111391],{"className":23815,"code":104373,"language":23817,"meta":25,"style":25},[103,111392,111393],{"__ignoreMap":25},[106,111394,111395,111397,111399,111401,111403,111405,111407,111409,111411],{"class":108,"line":109},[106,111396,24570],{"class":1955},[106,111398,26309],{"class":221},[106,111400,23827],{"class":221},[106,111402,26394],{"class":165},[106,111404,104388],{"class":221},[106,111406,100783],{"class":221},[106,111408,102486],{"class":221},[106,111410,100799],{"class":221},[106,111412,104397],{"class":221},[14,111414,102804],{},[97,111416,111417],{"className":23815,"code":100904,"language":23817,"meta":25,"style":25},[103,111418,111419],{"__ignoreMap":25},[106,111420,111421,111423,111425,111427],{"class":108,"line":109},[106,111422,23824],{"class":1955},[106,111424,23827],{"class":221},[106,111426,100915],{"class":221},[106,111428,100918],{"class":221},[14,111430,102821],{},[97,111432,111434],{"className":23815,"code":111433,"language":23817,"meta":25,"style":25},"conda create -n mujoco-reacher python=3.10 -y\nconda activate mujoco-reacher\npip install \"mujoco>=2.3\" numpy\n",[103,111435,111436,111453,111462],{"__ignoreMap":25},[106,111437,111438,111440,111442,111444,111447,111449,111451],{"class":108,"line":109},[106,111439,30324],{"class":1955},[106,111441,29170],{"class":221},[106,111443,25109],{"class":165},[106,111445,111446],{"class":221}," mujoco-reacher",[106,111448,100960],{"class":221},[106,111450,100963],{"class":165},[106,111452,100966],{"class":165},[106,111454,111455,111457,111459],{"class":108,"line":28},[106,111456,30324],{"class":1955},[106,111458,100973],{"class":221},[106,111460,111461],{"class":221}," mujoco-reacher\n",[106,111463,111464,111466,111468,111470],{"class":108,"line":1172},[106,111465,23824],{"class":1955},[106,111467,23827],{"class":221},[106,111469,100915],{"class":221},[106,111471,100918],{"class":221},[14,111473,100989],{},[60,111475,111476,111479,111482],{},[63,111477,111478],{},"本章使用低维状态，不使用图像输入。",[63,111480,111481],{},"机械臂是教学模型，不是 Franka、UR5 等真实机器人模型。",[63,111483,111484,111485,329,111487,329,111489,111491],{},"如果后续使用 MuJoCo Menagerie，模型结构会更复杂，但读取 ",[103,111486,104015],{},[103,111488,104345],{},[103,111490,103665],{}," 的方法一致。",[48,111493,101030],{"id":101029},[14,111495,111496],{},"Reacher 任务核心:",[97,111498,111501],{"className":111499,"code":111500,"language":5180,"meta":25},[5178],"观测：关节角、关节速度、末端位置、目标位置\n动作：两个关节的 motor 输入\n奖励：末端到目标距离越小越好\n",[103,111502,111500],{"__ignoreMap":25},[14,111504,111505],{},"读取 site 世界坐标:",[97,111507,111509],{"className":30372,"code":111508,"language":30374,"meta":25,"style":25},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, \"tip\")\ntip_pos = data.site_xpos[site_id]\n",[103,111510,111511,111524],{"__ignoreMap":25},[106,111512,111513,111515,111517,111519,111522],{"class":108,"line":109},[106,111514,103619],{"class":116},[106,111516,162],{"class":112},[106,111518,103390],{"class":116},[106,111520,111521],{"class":221},"\"tip\"",[106,111523,123],{"class":116},[106,111525,111526,111529,111531],{"class":108,"line":28},[106,111527,111528],{"class":116},"tip_pos ",[106,111530,162],{"class":112},[106,111532,111533],{"class":116}," data.site_xpos[site_id]\n",[77,111535,111537],{"id":111536},"为什么用-site-表示-tip-和-target","为什么用 site 表示 tip 和 target",[14,111539,111540,111541,111543],{},"机械臂控制里经常关心“末端执行器在哪里”。如果只看关节角 ",[103,111542,104015],{},"，你还要自己做正运动学计算。MuJoCo 已经帮你算好了 site 的世界坐标，所以可以直接读：",[97,111545,111547],{"className":30372,"code":111546,"language":30374,"meta":25,"style":25},"tip = data.site_xpos[tip_site_id]\ntarget = data.site_xpos[target_site_id]\n",[103,111548,111549,111559],{"__ignoreMap":25},[106,111550,111551,111554,111556],{"class":108,"line":109},[106,111552,111553],{"class":116},"tip ",[106,111555,162],{"class":112},[106,111557,111558],{"class":116}," data.site_xpos[tip_site_id]\n",[106,111560,111561,111564,111566],{"class":108,"line":28},[106,111562,111563],{"class":116},"target ",[106,111565,162],{"class":112},[106,111567,111568],{"class":116}," data.site_xpos[target_site_id]\n",[14,111570,111571],{},"这样 reward 就很容易写：",[97,111573,111575],{"className":30372,"code":111574,"language":30374,"meta":25,"style":25},"dist = np.linalg.norm(tip - target)\nreward = -dist\n",[103,111576,111577,111592],{"__ignoreMap":25},[106,111578,111579,111582,111584,111587,111589],{"class":108,"line":109},[106,111580,111581],{"class":116},"dist ",[106,111583,162],{"class":112},[106,111585,111586],{"class":116}," np.linalg.norm(tip ",[106,111588,649],{"class":112},[106,111590,111591],{"class":116}," target)\n",[106,111593,111594,111596,111598,111600],{"class":108,"line":28},[106,111595,110990],{"class":116},[106,111597,162],{"class":112},[106,111599,52265],{"class":112},[106,111601,111602],{"class":116},"dist\n",[14,111604,111605,111606,111609],{},"距离越小，",[103,111607,111608],{},"-dist"," 越接近 0，奖励越高。",[77,111611,111612],{"id":111612},"两关节机械臂的状态",[14,111614,111615],{},"这个模型有两个 hinge joint：",[97,111617,111620],{"className":111618,"code":111619,"language":5180,"meta":25},[5178],"data.qpos = [joint1_angle, joint2_angle]\ndata.qvel = [joint1_velocity, joint2_velocity]\n",[103,111621,111619],{"__ignoreMap":25},[14,111623,111624],{},"再加上末端和目标位置：",[97,111626,111629],{"className":111627,"code":111628,"language":5180,"meta":25},[5178],"obs = [qpos, qvel, tip_xyz, target_xyz]\n",[103,111630,111628],{"__ignoreMap":25},[14,111632,111633],{},"总维度：",[97,111635,111638],{"className":111636,"code":111637,"language":5180,"meta":25},[5178],"2 + 2 + 3 + 3 = 10\n",[103,111639,111637],{"__ignoreMap":25},[77,111641,111643],{"id":111642},"为什么-gravity-是-0","为什么 gravity 是 0",[14,111645,111646],{},"本章把重力设为：",[97,111648,111650],{"className":53061,"code":111649,"language":53063,"meta":25,"style":25},"\u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[103,111651,111652],{"__ignoreMap":25},[106,111653,111654,111656,111658,111660,111662,111664,111666,111668,111670],{"class":108,"line":109},[106,111655,1027],{"class":116},[106,111657,69160],{"class":51294},[106,111659,101179],{"class":1955},[106,111661,162],{"class":116},[106,111663,101184],{"class":221},[106,111665,101187],{"class":1955},[106,111667,162],{"class":116},[106,111669,103756],{"class":221},[106,111671,101129],{"class":116},[14,111673,111674],{},"这是为了让问题更简单。没有重力时，控制器只需要考虑让末端靠近目标，不需要额外对抗机械臂下垂。真实机器人任务通常会有重力，并需要更好的控制器或重力补偿。",[48,111676,101238],{"id":101237},[97,111678,111680],{"className":30372,"code":111679,"language":30374,"meta":25,"style":25},"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",[103,111681,111682,111688,111698,111702,111706,111714,111719,111724,111728,111732,111737,111742,111746,111751,111756,111761,111765,111770,111775,111780,111785,111789,111793,111797,111801,111805,111810,111815,111819,111823,111827,111831,111835,111850,111859,111871,111894,111901,111905,111909,111919,111933,111947,111954,111958,111962,111976,111988,112000,112013,112028,112045,112049,112053,112065,112077,112085,112093,112097,112113,112118,112131,112144,112159,112163,112198,112230,112234,112238,112247,112251,112267,112277,112288,112304,112320,112336,112352,112356,112374,112394,112413,112417,112421,112433],{"__ignoreMap":25},[106,111683,111684,111686],{"class":108,"line":109},[106,111685,30386],{"class":112},[106,111687,101286],{"class":116},[106,111689,111690,111692,111694,111696],{"class":108,"line":28},[106,111691,30386],{"class":112},[106,111693,31374],{"class":116},[106,111695,31377],{"class":112},[106,111697,31380],{"class":116},[106,111699,111700],{"class":108,"line":1172},[106,111701,2392],{"emptyLinePlaceholder":33},[106,111703,111704],{"class":108,"line":1187},[106,111705,2392],{"emptyLinePlaceholder":33},[106,111707,111708,111710,111712],{"class":108,"line":1193},[106,111709,101299],{"class":165},[106,111711,13557],{"class":112},[106,111713,101304],{"class":221},[106,111715,111716],{"class":108,"line":1207},[106,111717,111718],{"class":221},"\u003Cmujoco model=\"two_link_reacher\">\n",[106,111720,111721],{"class":108,"line":1213},[106,111722,111723],{"class":221},"  \u003Coption timestep=\"0.01\" gravity=\"0 0 0\"\u002F>\n",[106,111725,111726],{"class":108,"line":1304},[106,111727,2392],{"emptyLinePlaceholder":33},[106,111729,111730],{"class":108,"line":1310},[106,111731,101323],{"class":221},[106,111733,111734],{"class":108,"line":1322},[106,111735,111736],{"class":221},"    \u003Cgeom name=\"floor\" type=\"plane\" size=\"2 2 0.1\" rgba=\"0.9 0.9 0.9 1\"\u002F>\n",[106,111738,111739],{"class":108,"line":1604},[106,111740,111741],{"class":221},"    \u003Csite name=\"target\" pos=\"0.5 0 0.4\" size=\"0.04\" rgba=\"1 0 0 1\"\u002F>\n",[106,111743,111744],{"class":108,"line":1609},[106,111745,2392],{"emptyLinePlaceholder":33},[106,111747,111748],{"class":108,"line":1615},[106,111749,111750],{"class":221},"    \u003Cbody name=\"link1\" pos=\"0 0 0.4\">\n",[106,111752,111753],{"class":108,"line":1620},[106,111754,111755],{"class":221},"      \u003Cjoint name=\"joint1\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[106,111757,111758],{"class":108,"line":1634},[106,111759,111760],{"class":221},"      \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",[106,111762,111763],{"class":108,"line":1639},[106,111764,2392],{"emptyLinePlaceholder":33},[106,111766,111767],{"class":108,"line":1645},[106,111768,111769],{"class":221},"      \u003Cbody name=\"link2\" pos=\"0.3 0 0\">\n",[106,111771,111772],{"class":108,"line":1666},[106,111773,111774],{"class":221},"        \u003Cjoint name=\"joint2\" type=\"hinge\" axis=\"0 1 0\" damping=\"0.1\"\u002F>\n",[106,111776,111777],{"class":108,"line":1671},[106,111778,111779],{"class":221},"        \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",[106,111781,111782],{"class":108,"line":1685},[106,111783,111784],{"class":221},"        \u003Csite name=\"tip\" pos=\"0.3 0 0\" size=\"0.03\" rgba=\"0 0 1 1\"\u002F>\n",[106,111786,111787],{"class":108,"line":1690},[106,111788,106423],{"class":221},[106,111790,111791],{"class":108,"line":1719},[106,111792,101352],{"class":221},[106,111794,111795],{"class":108,"line":1724},[106,111796,101357],{"class":221},[106,111798,111799],{"class":108,"line":1741},[106,111800,2392],{"emptyLinePlaceholder":33},[106,111802,111803],{"class":108,"line":1746},[106,111804,106440],{"class":221},[106,111806,111807],{"class":108,"line":1751},[106,111808,111809],{"class":221},"    \u003Cmotor name=\"motor1\" joint=\"joint1\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[106,111811,111812],{"class":108,"line":1756},[106,111813,111814],{"class":221},"    \u003Cmotor name=\"motor2\" joint=\"joint2\" gear=\"1\" ctrlrange=\"-1 1\" ctrllimited=\"true\"\u002F>\n",[106,111816,111817],{"class":108,"line":1770},[106,111818,106450],{"class":221},[106,111820,111821],{"class":108,"line":1775},[106,111822,101362],{"class":221},[106,111824,111825],{"class":108,"line":2569},[106,111826,95683],{"class":221},[106,111828,111829],{"class":108,"line":2583},[106,111830,2392],{"emptyLinePlaceholder":33},[106,111832,111833],{"class":108,"line":2591},[106,111834,2392],{"emptyLinePlaceholder":33},[106,111836,111837,111839,111842,111845,111847],{"class":108,"line":2596},[106,111838,31941],{"class":112},[106,111840,111841],{"class":1955}," site_position",[106,111843,111844],{"class":116},"(model: mujoco.MjModel, data: mujoco.MjData, name: ",[106,111846,1292],{"class":165},[106,111848,111849],{"class":116},") -> np.ndarray:\n",[106,111851,111852,111854,111856],{"class":108,"line":2602},[106,111853,103385],{"class":116},[106,111855,162],{"class":112},[106,111857,111858],{"class":116}," mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[106,111860,111861,111863,111865,111867,111869],{"class":108,"line":2608},[106,111862,3093],{"class":112},[106,111864,103434],{"class":116},[106,111866,1027],{"class":112},[106,111868,4085],{"class":165},[106,111870,3731],{"class":116},[106,111872,111873,111875,111877,111879,111881,111884,111886,111888,111890,111892],{"class":108,"line":2613},[106,111874,103417],{"class":112},[106,111876,103420],{"class":165},[106,111878,117],{"class":116},[106,111880,169],{"class":112},[106,111882,111883],{"class":221},"\"site not found: ",[106,111885,1013],{"class":165},[106,111887,79804],{"class":116},[106,111889,1063],{"class":165},[106,111891,368],{"class":221},[106,111893,123],{"class":116},[106,111895,111896,111898],{"class":108,"line":7941},[106,111897,4082],{"class":112},[106,111899,111900],{"class":116}," data.site_xpos[site_id].copy()\n",[106,111902,111903],{"class":108,"line":7965},[106,111904,2392],{"emptyLinePlaceholder":33},[106,111906,111907],{"class":108,"line":7970},[106,111908,2392],{"emptyLinePlaceholder":33},[106,111910,111911,111913,111916],{"class":108,"line":7976},[106,111912,31941],{"class":112},[106,111914,111915],{"class":1955}," get_obs",[106,111917,111918],{"class":116},"(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[106,111920,111921,111924,111926,111929,111931],{"class":108,"line":8003},[106,111922,111923],{"class":116},"    tip ",[106,111925,162],{"class":112},[106,111927,111928],{"class":116}," site_position(model, data, ",[106,111930,111521],{"class":221},[106,111932,123],{"class":116},[106,111934,111935,111938,111940,111942,111945],{"class":108,"line":8008},[106,111936,111937],{"class":116},"    target ",[106,111939,162],{"class":112},[106,111941,111928],{"class":116},[106,111943,111944],{"class":221},"\"target\"",[106,111946,123],{"class":116},[106,111948,111949,111951],{"class":108,"line":8014},[106,111950,4082],{"class":112},[106,111952,111953],{"class":116}," np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[106,111955,111956],{"class":108,"line":8026},[106,111957,2392],{"emptyLinePlaceholder":33},[106,111959,111960],{"class":108,"line":8038},[106,111961,2392],{"emptyLinePlaceholder":33},[106,111963,111964,111966,111969,111972,111974],{"class":108,"line":8050},[106,111965,31941],{"class":112},[106,111967,111968],{"class":1955}," reward",[106,111970,111971],{"class":116},"(model: mujoco.MjModel, data: mujoco.MjData) -> ",[106,111973,156],{"class":165},[106,111975,3731],{"class":116},[106,111977,111978,111980,111982,111984,111986],{"class":108,"line":9709},[106,111979,111923],{"class":116},[106,111981,162],{"class":112},[106,111983,111928],{"class":116},[106,111985,111521],{"class":221},[106,111987,123],{"class":116},[106,111989,111990,111992,111994,111996,111998],{"class":108,"line":9734},[106,111991,111937],{"class":116},[106,111993,162],{"class":112},[106,111995,111928],{"class":116},[106,111997,111944],{"class":221},[106,111999,123],{"class":116},[106,112001,112002,112005,112007,112009,112011],{"class":108,"line":9757},[106,112003,112004],{"class":116},"    dist ",[106,112006,162],{"class":112},[106,112008,111586],{"class":116},[106,112010,649],{"class":112},[106,112012,111591],{"class":116},[106,112014,112015,112018,112020,112023,112025],{"class":108,"line":9781},[106,112016,112017],{"class":116},"    control_cost ",[106,112019,162],{"class":112},[106,112021,112022],{"class":165}," 0.01",[106,112024,6511],{"class":112},[106,112026,112027],{"class":116}," np.sum(np.square(data.ctrl))\n",[106,112029,112030,112032,112034,112036,112038,112040,112042],{"class":108,"line":9786},[106,112031,4082],{"class":112},[106,112033,109782],{"class":165},[106,112035,117],{"class":116},[106,112037,649],{"class":112},[106,112039,111581],{"class":116},[106,112041,649],{"class":112},[106,112043,112044],{"class":116}," control_cost)\n",[106,112046,112047],{"class":108,"line":9791},[106,112048,2392],{"emptyLinePlaceholder":33},[106,112050,112051],{"class":108,"line":9796},[106,112052,2392],{"emptyLinePlaceholder":33},[106,112054,112055,112057,112059,112061,112063],{"class":108,"line":9805},[106,112056,31941],{"class":112},[106,112058,1965],{"class":1955},[106,112060,101383],{"class":116},[106,112062,95671],{"class":165},[106,112064,3731],{"class":116},[106,112066,112067,112069,112071,112073,112075],{"class":108,"line":9810},[106,112068,101392],{"class":116},[106,112070,162],{"class":112},[106,112072,101397],{"class":116},[106,112074,101299],{"class":165},[106,112076,123],{"class":116},[106,112078,112079,112081,112083],{"class":108,"line":9816},[106,112080,101406],{"class":116},[106,112082,162],{"class":112},[106,112084,101411],{"class":116},[106,112086,112087,112089,112091],{"class":108,"line":9837},[106,112088,110138],{"class":116},[106,112090,162],{"class":112},[106,112092,104746],{"class":165},[106,112094,112095],{"class":108,"line":9843},[106,112096,2392],{"emptyLinePlaceholder":33},[106,112098,112099,112101,112103,112105,112107,112109,112111],{"class":108,"line":9857},[106,112100,3193],{"class":112},[106,112102,31610],{"class":116},[106,112104,26037],{"class":112},[106,112106,32437],{"class":165},[106,112108,117],{"class":116},[106,112110,65068],{"class":165},[106,112112,30780],{"class":116},[106,112114,112115],{"class":108,"line":9863},[106,112116,112117],{"class":116},"        mujoco.mj_forward(model, data)\n",[106,112119,112120,112123,112125,112127,112129],{"class":108,"line":9890},[106,112121,112122],{"class":116},"        tip ",[106,112124,162],{"class":112},[106,112126,111928],{"class":116},[106,112128,111521],{"class":221},[106,112130,123],{"class":116},[106,112132,112133,112136,112138,112140,112142],{"class":108,"line":9899},[106,112134,112135],{"class":116},"        target ",[106,112137,162],{"class":112},[106,112139,111928],{"class":116},[106,112141,111944],{"class":221},[106,112143,123],{"class":116},[106,112145,112146,112149,112151,112154,112156],{"class":108,"line":9905},[106,112147,112148],{"class":116},"        error ",[106,112150,162],{"class":112},[106,112152,112153],{"class":116}," target ",[106,112155,649],{"class":112},[106,112157,112158],{"class":116}," tip\n",[106,112160,112161],{"class":108,"line":9913},[106,112162,2392],{"emptyLinePlaceholder":33},[106,112164,112165,112167,112169,112171,112173,112176,112178,112180,112183,112185,112188,112190,112192,112194,112196],{"class":108,"line":9918},[106,112166,106602],{"class":116},[106,112168,308],{"class":165},[106,112170,4435],{"class":116},[106,112172,162],{"class":112},[106,112174,112175],{"class":116}," np.clip(",[106,112177,105245],{"class":165},[106,112179,6511],{"class":112},[106,112181,112182],{"class":116}," error[",[106,112184,194],{"class":165},[106,112186,112187],{"class":116},"], ",[106,112189,649],{"class":112},[106,112191,102388],{"class":165},[106,112193,12428],{"class":116},[106,112195,102388],{"class":165},[106,112197,123],{"class":116},[106,112199,112200,112202,112204,112206,112208,112210,112212,112214,112216,112218,112220,112222,112224,112226,112228],{"class":108,"line":16597},[106,112201,106602],{"class":116},[106,112203,334],{"class":165},[106,112205,4435],{"class":116},[106,112207,162],{"class":112},[106,112209,112175],{"class":116},[106,112211,105245],{"class":165},[106,112213,6511],{"class":112},[106,112215,112182],{"class":116},[106,112217,308],{"class":165},[106,112219,112187],{"class":116},[106,112221,649],{"class":112},[106,112223,102388],{"class":165},[106,112225,12428],{"class":116},[106,112227,102388],{"class":165},[106,112229,123],{"class":116},[106,112231,112232],{"class":108,"line":16603},[106,112233,2392],{"emptyLinePlaceholder":33},[106,112235,112236],{"class":108,"line":16626},[106,112237,101501],{"class":116},[106,112239,112240,112242,112244],{"class":108,"line":16632},[106,112241,110282],{"class":116},[106,112243,9470],{"class":112},[106,112245,112246],{"class":116}," reward(model, data)\n",[106,112248,112249],{"class":108,"line":16655},[106,112250,2392],{"emptyLinePlaceholder":33},[106,112252,112253,112255,112257,112259,112261,112263,112265],{"class":108,"line":16669},[106,112254,2489],{"class":112},[106,112256,31610],{"class":116},[106,112258,445],{"class":112},[106,112260,5747],{"class":165},[106,112262,101544],{"class":112},[106,112264,4085],{"class":165},[106,112266,3731],{"class":116},[106,112268,112269,112272,112274],{"class":108,"line":16689},[106,112270,112271],{"class":116},"            obs ",[106,112273,162],{"class":112},[106,112275,112276],{"class":116}," get_obs(model, data)\n",[106,112278,112279,112281,112283,112285],{"class":108,"line":16695},[106,112280,34644],{"class":165},[106,112282,117],{"class":116},[106,112284,110316],{"class":221},[106,112286,112287],{"class":116},", step)\n",[106,112289,112290,112292,112294,112297,112300,112302],{"class":108,"line":16706},[106,112291,34644],{"class":165},[106,112293,117],{"class":116},[106,112295,112296],{"class":221},"\"  tip:\"",[106,112298,112299],{"class":116},", np.round(tip, ",[106,112301,188],{"class":165},[106,112303,30491],{"class":116},[106,112305,112306,112308,112310,112313,112316,112318],{"class":108,"line":16729},[106,112307,34644],{"class":165},[106,112309,117],{"class":116},[106,112311,112312],{"class":221},"\"  target:\"",[106,112314,112315],{"class":116},", np.round(target, ",[106,112317,188],{"class":165},[106,112319,30491],{"class":116},[106,112321,112322,112324,112326,112329,112332,112334],{"class":108,"line":16751},[106,112323,34644],{"class":165},[106,112325,117],{"class":116},[106,112327,112328],{"class":221},"\"  ctrl:\"",[106,112330,112331],{"class":116},", np.round(data.ctrl.copy(), ",[106,112333,188],{"class":165},[106,112335,30491],{"class":116},[106,112337,112338,112340,112342,112345,112348,112350],{"class":108,"line":16756},[106,112339,34644],{"class":165},[106,112341,117],{"class":116},[106,112343,112344],{"class":221},"\"  obs_dim:\"",[106,112346,112347],{"class":116},", obs.shape[",[106,112349,308],{"class":165},[106,112351,4649],{"class":116},[106,112353,112354],{"class":108,"line":16762},[106,112355,2392],{"emptyLinePlaceholder":33},[106,112357,112358,112360,112362,112364,112366,112368,112370,112372],{"class":108,"line":16776},[106,112359,31293],{"class":165},[106,112361,117],{"class":116},[106,112363,110361],{"class":221},[106,112365,12428],{"class":116},[106,112367,32012],{"class":165},[106,112369,110368],{"class":116},[106,112371,188],{"class":165},[106,112373,30491],{"class":116},[106,112375,112376,112378,112380,112383,112386,112388,112390,112392],{"class":108,"line":16789},[106,112377,31293],{"class":165},[106,112379,117],{"class":116},[106,112381,112382],{"class":221},"\"final tip:\"",[106,112384,112385],{"class":116},", np.round(site_position(model, data, ",[106,112387,111521],{"class":221},[106,112389,110330],{"class":116},[106,112391,188],{"class":165},[106,112393,30491],{"class":116},[106,112395,112396,112398,112400,112403,112405,112407,112409,112411],{"class":108,"line":16794},[106,112397,31293],{"class":165},[106,112399,117],{"class":116},[106,112401,112402],{"class":221},"\"target:\"",[106,112404,112385],{"class":116},[106,112406,111944],{"class":221},[106,112408,110330],{"class":116},[106,112410,188],{"class":165},[106,112412,30491],{"class":116},[106,112414,112415],{"class":108,"line":16808},[106,112416,2392],{"emptyLinePlaceholder":33},[106,112418,112419],{"class":108,"line":16813},[106,112420,2392],{"emptyLinePlaceholder":33},[106,112422,112423,112425,112427,112429,112431],{"class":108,"line":16819},[106,112424,1523],{"class":112},[106,112426,31214],{"class":165},[106,112428,101544],{"class":112},[106,112430,101547],{"class":221},[106,112432,3731],{"class":116},[106,112434,112435],{"class":108,"line":16824},[106,112436,101554],{"class":116},[14,112438,103555],{},[97,112440,112442],{"className":23815,"code":112441,"language":23817,"meta":25,"style":25},"touch ch7_reacher.py\n",[103,112443,112444],{"__ignoreMap":25},[106,112445,112446,112448],{"class":108,"line":109},[106,112447,101268],{"class":1955},[106,112449,112450],{"class":221}," ch7_reacher.py\n",[14,112452,110429],{},[97,112454,112456],{"className":23815,"code":112455,"language":23817,"meta":25,"style":25},"python ch7_reacher.py\n",[103,112457,112458],{"__ignoreMap":25},[106,112459,112460,112462],{"class":108,"line":109},[106,112461,30374],{"class":1955},[106,112463,112450],{"class":221},[77,112465,101557],{"id":101557},[14,112467,112468],{},"读取 site 坐标：",[97,112470,112472],{"className":30372,"code":112471,"language":30374,"meta":25,"style":25},"def site_position(model: mujoco.MjModel, data: mujoco.MjData, name: str) -> np.ndarray:\n",[103,112473,112474],{"__ignoreMap":25},[106,112475,112476,112478,112480,112482,112484],{"class":108,"line":109},[106,112477,31941],{"class":112},[106,112479,111841],{"class":1955},[106,112481,111844],{"class":116},[106,112483,1292],{"class":165},[106,112485,111849],{"class":116},[14,112487,112488],{},"这个函数把“按名字查找 site ID”和“读取 site 世界坐标”封装到一起，避免重复写。",[14,112490,110445],{},[97,112492,112494],{"className":30372,"code":112493,"language":30374,"meta":25,"style":25},"return np.concatenate([data.qpos.copy(), data.qvel.copy(), tip, target])\n",[103,112495,112496],{"__ignoreMap":25},[106,112497,112498,112500],{"class":108,"line":109},[106,112499,17039],{"class":112},[106,112501,111953],{"class":116},[14,112503,112504],{},"这让策略或控制器能同时看到关节状态、末端位置和目标位置。",[14,112506,109770],{},[97,112508,112510],{"className":30372,"code":112509,"language":30374,"meta":25,"style":25},"dist = np.linalg.norm(tip - target)\ncontrol_cost = 0.01 * np.sum(np.square(data.ctrl))\nreturn float(-dist - control_cost)\n",[103,112511,112512,112524,112537],{"__ignoreMap":25},[106,112513,112514,112516,112518,112520,112522],{"class":108,"line":109},[106,112515,111581],{"class":116},[106,112517,162],{"class":112},[106,112519,111586],{"class":116},[106,112521,649],{"class":112},[106,112523,111591],{"class":116},[106,112525,112526,112529,112531,112533,112535],{"class":108,"line":28},[106,112527,112528],{"class":116},"control_cost ",[106,112530,162],{"class":112},[106,112532,112022],{"class":165},[106,112534,6511],{"class":112},[106,112536,112027],{"class":116},[106,112538,112539,112541,112543,112545,112547,112549,112551],{"class":108,"line":1172},[106,112540,17039],{"class":112},[106,112542,109782],{"class":165},[106,112544,117],{"class":116},[106,112546,649],{"class":112},[106,112548,111581],{"class":116},[106,112550,649],{"class":112},[106,112552,112044],{"class":116},[14,112554,112555],{},"奖励由两部分组成：",[60,112557,112558,112563],{},[63,112559,112560,112562],{},[103,112561,111608],{},"：末端离目标越远，奖励越低。",[63,112564,112565,112568],{},[103,112566,112567],{},"control_cost","：动作越大，扣分越多，避免控制输入过于剧烈。",[14,112570,112571],{},"简单控制器：",[97,112573,112575],{"className":30372,"code":112574,"language":30374,"meta":25,"style":25},"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",[103,112576,112577,112590,112622],{"__ignoreMap":25},[106,112578,112579,112582,112584,112586,112588],{"class":108,"line":109},[106,112580,112581],{"class":116},"error ",[106,112583,162],{"class":112},[106,112585,112153],{"class":116},[106,112587,649],{"class":112},[106,112589,112158],{"class":116},[106,112591,112592,112594,112596,112598,112600,112602,112604,112606,112608,112610,112612,112614,112616,112618,112620],{"class":108,"line":28},[106,112593,105856],{"class":116},[106,112595,308],{"class":165},[106,112597,4435],{"class":116},[106,112599,162],{"class":112},[106,112601,112175],{"class":116},[106,112603,105245],{"class":165},[106,112605,6511],{"class":112},[106,112607,112182],{"class":116},[106,112609,194],{"class":165},[106,112611,112187],{"class":116},[106,112613,649],{"class":112},[106,112615,102388],{"class":165},[106,112617,12428],{"class":116},[106,112619,102388],{"class":165},[106,112621,123],{"class":116},[106,112623,112624,112626,112628,112630,112632,112634,112636,112638,112640,112642,112644,112646,112648,112650,112652],{"class":108,"line":1172},[106,112625,105856],{"class":116},[106,112627,334],{"class":165},[106,112629,4435],{"class":116},[106,112631,162],{"class":112},[106,112633,112175],{"class":116},[106,112635,105245],{"class":165},[106,112637,6511],{"class":112},[106,112639,112182],{"class":116},[106,112641,308],{"class":165},[106,112643,112187],{"class":116},[106,112645,649],{"class":112},[106,112647,102388],{"class":165},[106,112649,12428],{"class":116},[106,112651,102388],{"class":165},[106,112653,123],{"class":116},[14,112655,112656],{},"这只是为了演示控制闭环，不是严格的逆运动学。真实 reacher 通常需要更系统的方法。",[77,112658,101693],{"id":101693},[97,112660,112661],{"className":30372,"code":112471,"language":30374,"meta":25,"style":25},[103,112662,112663],{"__ignoreMap":25},[106,112664,112665,112667,112669,112671,112673],{"class":108,"line":109},[106,112666,31941],{"class":112},[106,112668,111841],{"class":1955},[106,112670,111844],{"class":116},[106,112672,1292],{"class":165},[106,112674,111849],{"class":116},[14,112676,112677,112678,112680,112681,82533,112683,28379],{},"定义一个函数，用名字读取 site 的世界坐标。参数 ",[103,112679,79804],{}," 是 site 的名字，比如 ",[103,112682,111521],{},[103,112684,111944],{},[97,112686,112688],{"className":30372,"code":112687,"language":30374,"meta":25,"style":25},"site_id = mujoco.mj_name2id(model, mujoco.mjtObj.mjOBJ_SITE, name)\n",[103,112689,112690],{"__ignoreMap":25},[106,112691,112692,112694,112696],{"class":108,"line":109},[106,112693,103619],{"class":116},[106,112695,162],{"class":112},[106,112697,111858],{"class":116},[14,112699,112700],{},"根据 site 名字查找数字 ID。MuJoCo 内部数组需要用 ID 访问，不能直接用字符串名字访问。",[97,112702,112704],{"className":30372,"code":112703,"language":30374,"meta":25,"style":25},"if site_id \u003C 0:\n    raise RuntimeError(f\"site not found: {name}\")\n",[103,112705,112706,112718],{"__ignoreMap":25},[106,112707,112708,112710,112712,112714,112716],{"class":108,"line":109},[106,112709,1523],{"class":112},[106,112711,103434],{"class":116},[106,112713,1027],{"class":112},[106,112715,4085],{"class":165},[106,112717,3731],{"class":116},[106,112719,112720,112722,112724,112726,112728,112730,112732,112734,112736,112738],{"class":108,"line":28},[106,112721,103880],{"class":112},[106,112723,103420],{"class":165},[106,112725,117],{"class":116},[106,112727,169],{"class":112},[106,112729,111883],{"class":221},[106,112731,1013],{"class":165},[106,112733,79804],{"class":116},[106,112735,1063],{"class":165},[106,112737,368],{"class":221},[106,112739,123],{"class":116},[14,112741,112742,112743,112746,112747,112749],{},"如果 site 没找到，就主动报错。",[103,112744,112745],{},"f\"site not found: {name}\""," 是 Python 的 f-string，会把变量 ",[103,112748,79804],{}," 的值放进字符串里。",[97,112751,112753],{"className":30372,"code":112752,"language":30374,"meta":25,"style":25},"return data.site_xpos[site_id].copy()\n",[103,112754,112755],{"__ignoreMap":25},[106,112756,112757,112759],{"class":108,"line":109},[106,112758,17039],{"class":112},[106,112760,111900],{"class":116},[14,112762,112763,112764,112766,112767,112770],{},"返回这个 site 的世界坐标。",[103,112765,103665],{}," 里的每一行都是一个 site 的 ",[103,112768,112769],{},"(x, y, z)"," 坐标。",[97,112772,112774],{"className":30372,"code":112773,"language":30374,"meta":25,"style":25},"def get_obs(model: mujoco.MjModel, data: mujoco.MjData) -> np.ndarray:\n",[103,112775,112776],{"__ignoreMap":25},[106,112777,112778,112780,112782],{"class":108,"line":109},[106,112779,31941],{"class":112},[106,112781,111915],{"class":1955},[106,112783,111918],{"class":116},[14,112785,112786],{},"定义获取观测的函数。Reacher 的观测不仅包含关节角和速度，还包含末端位置和目标位置。",[97,112788,112790],{"className":30372,"code":112789,"language":30374,"meta":25,"style":25},"tip = site_position(model, data, \"tip\")\ntarget = site_position(model, data, \"target\")\n",[103,112791,112792,112804],{"__ignoreMap":25},[106,112793,112794,112796,112798,112800,112802],{"class":108,"line":109},[106,112795,111553],{"class":116},[106,112797,162],{"class":112},[106,112799,111928],{"class":116},[106,112801,111521],{"class":221},[106,112803,123],{"class":116},[106,112805,112806,112808,112810,112812,112814],{"class":108,"line":28},[106,112807,111563],{"class":116},[106,112809,162],{"class":112},[106,112811,111928],{"class":116},[106,112813,111944],{"class":221},[106,112815,123],{"class":116},[14,112817,112818],{},"分别读取末端点和目标点的世界坐标。",[97,112820,112821],{"className":30372,"code":112493,"language":30374,"meta":25,"style":25},[103,112822,112823],{"__ignoreMap":25},[106,112824,112825,112827],{"class":108,"line":109},[106,112826,17039],{"class":112},[106,112828,111953],{"class":116},[14,112830,112831],{},"把四部分拼成一个观测数组：",[97,112833,112836],{"className":112834,"code":112835,"language":5180,"meta":25},[5178],"关节角 qpos\n关节速度 qvel\n末端坐标 tip\n目标坐标 target\n",[103,112837,112835],{"__ignoreMap":25},[97,112839,112841],{"className":30372,"code":112840,"language":30374,"meta":25,"style":25},"dist = np.linalg.norm(tip - target)\n",[103,112842,112843],{"__ignoreMap":25},[106,112844,112845,112847,112849,112851,112853],{"class":108,"line":109},[106,112846,111581],{"class":116},[106,112848,162],{"class":112},[106,112850,111586],{"class":116},[106,112852,649],{"class":112},[106,112854,111591],{"class":116},[14,112856,112857,112858,112861,112862,112865],{},"计算 tip 到 target 的距离。",[103,112859,112860],{},"tip - target"," 得到一个三维向量，",[103,112863,112864],{},"np.linalg.norm(...)"," 计算这个向量的长度。",[14,112867,14626],{},[97,112869,112872],{"className":112870,"code":112871,"language":5180,"meta":25},[5178],"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",[103,112873,112871],{"__ignoreMap":25},[97,112875,112877],{"className":30372,"code":112876,"language":30374,"meta":25,"style":25},"control_cost = 0.01 * np.sum(np.square(data.ctrl))\n",[103,112878,112879],{"__ignoreMap":25},[106,112880,112881,112883,112885,112887,112889],{"class":108,"line":109},[106,112882,112528],{"class":116},[106,112884,162],{"class":112},[106,112886,112022],{"class":165},[106,112888,6511],{"class":112},[106,112890,112027],{"class":116},[14,112892,112893,112894,112897,112898,112901],{},"计算动作惩罚。",[103,112895,112896],{},"np.square(data.ctrl)"," 把每个控制输入平方，",[103,112899,112900],{},"np.sum(...)"," 把它们加起来。动作越大，惩罚越大。",[97,112903,112905],{"className":30372,"code":112904,"language":30374,"meta":25,"style":25},"return float(-dist - control_cost)\n",[103,112906,112907],{"__ignoreMap":25},[106,112908,112909,112911,112913,112915,112917,112919,112921],{"class":108,"line":109},[106,112910,17039],{"class":112},[106,112912,109782],{"class":165},[106,112914,117],{"class":116},[106,112916,649],{"class":112},[106,112918,111581],{"class":116},[106,112920,649],{"class":112},[106,112922,112044],{"class":116},[14,112924,112925],{},"奖励是负距离再减去动作惩罚。距离越小，奖励越接近 0；动作越大，奖励越低。",[97,112927,112928],{"className":30372,"code":110788,"language":30374,"meta":25,"style":25},[103,112929,112930],{"__ignoreMap":25},[106,112931,112932,112934,112936],{"class":108,"line":109},[106,112933,110795],{"class":116},[106,112935,162],{"class":112},[106,112937,104746],{"class":165},[14,112939,112940],{},"累计奖励变量，记录整个运行过程的总分。",[97,112942,112944],{"className":30372,"code":112943,"language":30374,"meta":25,"style":25},"for step in range(500):\n",[103,112945,112946],{"__ignoreMap":25},[106,112947,112948,112950,112952,112954,112956,112958,112960],{"class":108,"line":109},[106,112949,3017],{"class":112},[106,112951,31610],{"class":116},[106,112953,26037],{"class":112},[106,112955,32437],{"class":165},[106,112957,117],{"class":116},[106,112959,65068],{"class":165},[106,112961,30780],{"class":116},[14,112963,112964],{},"运行 500 个控制步。",[97,112966,112967],{"className":30372,"code":104528,"language":30374,"meta":25,"style":25},[103,112968,112969],{"__ignoreMap":25},[106,112970,112971],{"class":108,"line":109},[106,112972,104528],{"class":116},[14,112974,112975,112976,101003,112978,112980],{},"刷新当前状态对应的 site 坐标。这里每步开头调用一次，确保读取到的 ",[103,112977,103216],{},[103,112979,103219],{}," 是当前状态下的坐标。",[97,112982,112984],{"className":30372,"code":112983,"language":30374,"meta":25,"style":25},"error = target - tip\n",[103,112985,112986],{"__ignoreMap":25},[106,112987,112988,112990,112992,112994,112996],{"class":108,"line":109},[106,112989,112581],{"class":116},[106,112991,162],{"class":112},[106,112993,112153],{"class":116},[106,112995,649],{"class":112},[106,112997,112158],{"class":116},[14,112999,113000],{},"计算目标点相对末端点的误差向量。它表示“从 tip 指向 target 还差多少”。",[97,113002,113004],{"className":30372,"code":113003,"language":30374,"meta":25,"style":25},"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",[103,113005,113006,113038],{"__ignoreMap":25},[106,113007,113008,113010,113012,113014,113016,113018,113020,113022,113024,113026,113028,113030,113032,113034,113036],{"class":108,"line":109},[106,113009,105856],{"class":116},[106,113011,308],{"class":165},[106,113013,4435],{"class":116},[106,113015,162],{"class":112},[106,113017,112175],{"class":116},[106,113019,105245],{"class":165},[106,113021,6511],{"class":112},[106,113023,112182],{"class":116},[106,113025,194],{"class":165},[106,113027,112187],{"class":116},[106,113029,649],{"class":112},[106,113031,102388],{"class":165},[106,113033,12428],{"class":116},[106,113035,102388],{"class":165},[106,113037,123],{"class":116},[106,113039,113040,113042,113044,113046,113048,113050,113052,113054,113056,113058,113060,113062,113064,113066,113068],{"class":108,"line":28},[106,113041,105856],{"class":116},[106,113043,334],{"class":165},[106,113045,4435],{"class":116},[106,113047,162],{"class":112},[106,113049,112175],{"class":116},[106,113051,105245],{"class":165},[106,113053,6511],{"class":112},[106,113055,112182],{"class":116},[106,113057,308],{"class":165},[106,113059,112187],{"class":116},[106,113061,649],{"class":112},[106,113063,102388],{"class":165},[106,113065,12428],{"class":116},[106,113067,102388],{"class":165},[106,113069,123],{"class":116},[14,113071,113072,113073,113076],{},"给两个关节写控制输入。这里用 z 方向误差控制第一个关节，用 x 方向误差控制第二个关节。这是非常粗糙的教学控制器，只是为了展示 ",[103,113074,113075],{},"error -> ctrl -> step"," 的流程。",[97,113078,113079],{"className":30372,"code":104490,"language":30374,"meta":25,"style":25},[103,113080,113081],{"__ignoreMap":25},[106,113082,113083],{"class":108,"line":109},[106,113084,104490],{"class":116},[14,113086,113087],{},"推进仿真。机械臂会根据两个 motor 的输入改变姿态。",[97,113089,113091],{"className":30372,"code":113090,"language":30374,"meta":25,"style":25},"obs = get_obs(model, data)\n",[103,113092,113093],{"__ignoreMap":25},[106,113094,113095,113097,113099],{"class":108,"line":109},[106,113096,110839],{"class":116},[106,113098,162],{"class":112},[106,113100,112276],{"class":116},[14,113102,113103,113104,113107],{},"读取最新观测。后面打印 ",[103,113105,113106],{},"obs.shape[0]","，用来确认观测维度是 10。",[48,113109,102301],{"id":102300},[14,113111,113112],{},"观测维度为:",[97,113114,113117],{"className":113115,"code":113116,"language":5180,"meta":25},[5178],"2 个 qpos\n2 个 qvel\n3 个 tip position\n3 个 target position\n= 10\n",[103,113118,113116],{"__ignoreMap":25},[14,113120,113121],{},"控制器只是教学控制器。真实机械臂 reacher 通常会用逆运动学、Operational Space Control、RL policy 或模仿学习 policy。",[14,113123,113124],{},"程序每 100 步打印：",[97,113126,113129],{"className":113127,"code":113128,"language":5180,"meta":25},[5178],"tip: 末端点世界坐标\ntarget: 目标点世界坐标\nctrl: 两个关节的控制输入\nobs_dim: 观测维度\n",[103,113130,113128],{"__ignoreMap":25},[14,113132,113133,113134,113136],{},"如果控制有效，你应该看到最终 ",[103,113135,103216],{}," 的位置相对初始位置发生变化。它不一定能精准到达目标，因为这个控制器很粗糙。",[48,113138,102333],{"id":102332},[60,113140,113141,113144,113147,113153,113159,113166,113176],{},[63,113142,113143],{},"修改目标点位置。",[63,113145,113146],{},"重新运行，观察最终 tip 是否变化。",[63,113148,113149,113150,113152],{},"把 gravity 改成 ",[103,113151,102574],{},"，观察控制是否变差。",[63,113154,111166,113155,111170,113157,28379],{},[103,113156,102143],{},[103,113158,194],{},[63,113160,102396,113161,102399,113163,113165],{},[103,113162,110581],{},[103,113164,107292],{},"，观察机械臂是否更难移动。",[63,113167,102396,113168,82524,113170,102399,113172,113175],{},[103,113169,103219],{},[103,113171,104131],{},[103,113173,113174],{},"0.2 0 0.6","，观察 reward 和 final tip。",[63,113177,113178],{},"用 viewer 可视化，确认 link1、link2 和 target 的位置符合预期。",[48,113180,102438],{"id":102437},[77,113182,113184],{"id":113183},"site-not-found",[103,113185,113186],{},"site not found",[14,113188,113189,113190,101003,113193,28379],{},"检查 XML 中是否有 ",[103,113191,113192],{},"site name=\"tip\"",[103,113194,113195],{},"site name=\"target\"",[77,113197,113198],{"id":113198},"机械臂完全不动",[14,113200,102508],{},[60,113202,113203,113208,113211,113216],{},[63,113204,113205,113207],{},[103,113206,102143],{}," 是否为 2",[63,113209,113210],{},"actuator 是否引用正确 joint",[63,113212,113213,113215],{},[103,113214,101061],{}," 是否被赋值",[63,113217,113218,113219],{},"是否执行了 ",[103,113220,100670],{},[77,113222,113223],{"id":113223},"控制效果不好",[14,113225,113226],{},"正常。本章重点不是控制器最优，而是任务结构:",[97,113228,113231],{"className":113229,"code":113230,"language":5180,"meta":25},[5178],"obs → action → mj_step → reward → next_obs\n",[103,113232,113230],{"__ignoreMap":25},[77,113234,113236],{"id":113235},"tip-坐标不变化","tip 坐标不变化",[14,113238,102560],{},[60,113240,113241,113246,113254,113263],{},[63,113242,113243,113244,28379],{},"是否每步调用了 ",[103,113245,100670],{},[63,113247,113248,113249,101003,113251,28379],{},"是否写入了 ",[103,113250,106111],{},[103,113252,113253],{},"data.ctrl[1]",[63,113255,113256,113257,329,113260,28379],{},"actuator 是否正确引用 ",[103,113258,113259],{},"joint1",[103,113261,113262],{},"joint2",[63,113264,113265],{},"控制输入是否太小。",[77,113267,113268],{"id":113268},"目标点不会动",[14,113270,113271],{},"本章的 target 是固定 site：",[97,113273,113275],{"className":53061,"code":113274,"language":53063,"meta":25,"style":25},"\u003Csite name=\"target\" pos=\"0.5 0 0.4\" ...\u002F>\n",[103,113276,113277],{"__ignoreMap":25},[106,113278,113279,113281,113283,113285,113287,113289,113291,113293,113296],{"class":108,"line":109},[106,113280,1027],{"class":116},[106,113282,103195],{"class":51294},[106,113284,14913],{"class":1955},[106,113286,162],{"class":116},[106,113288,111944],{"class":221},[106,113290,101091],{"class":1955},[106,113292,162],{"class":116},[106,113294,113295],{"class":221},"\"0.5 0 0.4\"",[106,113297,113298],{"class":116}," ...\u002F>\n",[14,113300,113301,113302,113304],{},"它直接挂在 ",[103,113303,101826],{}," 下，所以不会随机械臂运动。如果你想每次 reset 随机目标，后续可以把目标放在 mocap body 或通过修改模型\u002F数据实现，本章先不展开。",[77,113306,113307],{"id":113307},"机械臂不像真实机械臂",[14,113309,113310],{},"正常。本章模型是教学用二维两连杆，没有电机真实参数、关节限位、摩擦、真实机器人 URDF\u002FMJCF 结构。它的价值是帮你理解任务结构，而不是模拟某台真实机器人。",[48,113312,102592],{"id":102591},[14,113314,113315],{},"Reacher 比 Cartpole 多了一个关键概念：任务目标往往不是直接由关节角定义，而是由末端点和目标点的空间关系定义。",[14,113317,113318],{},"核心公式：",[97,113320,113323],{"className":113321,"code":113322,"language":5180,"meta":25},[5178],"distance = ||tip - target||\nreward = -distance - action_cost\n",[103,113324,113322],{"__ignoreMap":25},[14,113326,113327],{},"掌握这个模式后，就能理解很多机械臂 reach、push、pick、place 任务的基本奖励设计。",[5119,113329,113330],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":25,"searchDepth":28,"depth":28,"links":113332},[113333,113334,113335,113340,113344,113345,113346,113354],{"id":100631,"depth":28,"text":100632},{"id":100754,"depth":28,"text":100755},{"id":101029,"depth":28,"text":101030,"children":113336},[113337,113338,113339],{"id":111536,"depth":1172,"text":111537},{"id":111612,"depth":1172,"text":111612},{"id":111642,"depth":1172,"text":111643},{"id":101237,"depth":28,"text":101238,"children":113341},[113342,113343],{"id":101557,"depth":1172,"text":101557},{"id":101693,"depth":1172,"text":101693},{"id":102300,"depth":28,"text":102301},{"id":102332,"depth":28,"text":102333},{"id":102437,"depth":28,"text":102438,"children":113347},[113348,113349,113350,113351,113352,113353],{"id":113183,"depth":1172,"text":113186},{"id":113198,"depth":1172,"text":113198},{"id":113223,"depth":1172,"text":113223},{"id":113235,"depth":1172,"text":113236},{"id":113268,"depth":1172,"text":113268},{"id":113307,"depth":1172,"text":113307},{"id":102591,"depth":28,"text":102592},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch7-reacher",{"title":111340,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch7-Reacher控制任务","7afYiYudLCszldKNM9vonhx27bDG_0sI4vgwQYeRqd4",{"id":113361,"title":113362,"body":113363,"description":25,"extension":31,"meta":116825,"navigation":33,"path":116826,"seo":116827,"stem":116828,"__hash__":116829},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础.md","8.Gymnasium 风格强化学习接口基础",{"type":7,"value":113364,"toc":116796},[113365,113368,113370,113373,113376,113401,113404,113410,113413,113419,113421,113423,113447,113449,113467,113469,113512,113514,113541,113543,113546,113598,113601,113607,113616,113619,113657,113660,113699,113702,113710,113717,113720,113726,113728,113782,113789,113834,113837,113841,113857,113867,113869,115130,115132,115144,115146,115157,115159,115162,115183,115186,115189,115222,115228,115231,115264,115267,115270,115311,115316,115330,115333,115346,115351,115374,115376,115391,115401,115416,115423,115443,115458,115476,115479,115496,115504,115520,115526,115558,115571,115603,115613,115648,115662,115708,115722,115764,115775,115788,115794,115827,115830,115857,115867,115907,115917,115934,115941,115959,115962,116003,116016,116031,116034,116057,116060,116072,116075,116094,116099,116120,116123,116138,116141,116175,116187,116202,116205,116230,116233,116252,116255,116287,116290,116314,116320,116350,116357,116370,116373,116375,116377,116383,116386,116389,116401,116404,116406,116460,116462,116466,116472,116481,116484,116491,116493,116516,116519,116523,116525,116543,116549,116551,116584,116587,116593,116597,116600,116620,116625,116629,116636,116656,116661,116665,116668,116688,116691,116777,116781,116784,116790,116793],[10,113366,113362],{"id":113367},"_8gymnasium-风格强化学习接口基础",[48,113369,100632],{"id":100631},[14,113371,113372],{},"本章把 MuJoCo 任务封装成类似 Gymnasium 的接口。",[14,113374,113375],{},"你将实现:",[97,113377,113379],{"className":30372,"code":113378,"language":30374,"meta":25,"style":25},"obs, info = env.reset()\nobs, reward, terminated, truncated, info = env.step(action)\n",[103,113380,113381,113391],{"__ignoreMap":25},[106,113382,113383,113386,113388],{"class":108,"line":109},[106,113384,113385],{"class":116},"obs, info ",[106,113387,162],{"class":112},[106,113389,113390],{"class":116}," env.reset()\n",[106,113392,113393,113396,113398],{"class":108,"line":28},[106,113394,113395],{"class":116},"obs, reward, terminated, truncated, info ",[106,113397,162],{"class":112},[106,113399,113400],{"class":116}," env.step(action)\n",[14,113402,113403],{},"这为后续强化学习、模仿学习、VLA 数据采集打基础。",[14,113405,113406,113407,113409],{},"前面章节的代码都是“脚本式”的：在 ",[103,113408,102280],{}," 里写循环。本章要把同样的逻辑封装成环境类。这样强化学习算法就可以用统一方式调用你的 MuJoCo 任务。",[14,113411,113412],{},"可以先记住 Gymnasium 环境的核心交互：",[97,113414,113417],{"className":113415,"code":113416,"language":5180,"meta":25},[5178],"reset 得到初始 obs\n循环：\n  policy 根据 obs 产生 action\n  env.step(action) 返回 next_obs、reward、done 信息\n",[103,113418,113416],{"__ignoreMap":25},[48,113420,100755],{"id":100754},[14,113422,100758],{},[97,113424,113425],{"className":23815,"code":104373,"language":23817,"meta":25,"style":25},[103,113426,113427],{"__ignoreMap":25},[106,113428,113429,113431,113433,113435,113437,113439,113441,113443,113445],{"class":108,"line":109},[106,113430,24570],{"class":1955},[106,113432,26309],{"class":221},[106,113434,23827],{"class":221},[106,113436,26394],{"class":165},[106,113438,104388],{"class":221},[106,113440,100783],{"class":221},[106,113442,102486],{"class":221},[106,113444,100799],{"class":221},[106,113446,104397],{"class":221},[14,113448,102804],{},[97,113450,113452],{"className":23815,"code":113451,"language":23817,"meta":25,"style":25},"pip install \"mujoco>=2.3\" numpy gymnasium\n",[103,113453,113454],{"__ignoreMap":25},[106,113455,113456,113458,113460,113462,113464],{"class":108,"line":109},[106,113457,23824],{"class":1955},[106,113459,23827],{"class":221},[106,113461,100915],{"class":221},[106,113463,107696],{"class":221},[106,113465,113466],{"class":221}," gymnasium\n",[14,113468,102821],{},[97,113470,113472],{"className":23815,"code":113471,"language":23817,"meta":25,"style":25},"conda create -n mujoco-gym-api python=3.10 -y\nconda activate mujoco-gym-api\npip install \"mujoco>=2.3\" numpy gymnasium\n",[103,113473,113474,113491,113500],{"__ignoreMap":25},[106,113475,113476,113478,113480,113482,113485,113487,113489],{"class":108,"line":109},[106,113477,30324],{"class":1955},[106,113479,29170],{"class":221},[106,113481,25109],{"class":165},[106,113483,113484],{"class":221}," mujoco-gym-api",[106,113486,100960],{"class":221},[106,113488,100963],{"class":165},[106,113490,100966],{"class":165},[106,113492,113493,113495,113497],{"class":108,"line":28},[106,113494,30324],{"class":1955},[106,113496,100973],{"class":221},[106,113498,113499],{"class":221}," mujoco-gym-api\n",[106,113501,113502,113504,113506,113508,113510],{"class":108,"line":1172},[106,113503,23824],{"class":1955},[106,113505,23827],{"class":221},[106,113507,100915],{"class":221},[106,113509,107696],{"class":221},[106,113511,113466],{"class":221},[14,113513,100989],{},[60,113515,113516,113526,113529,113535],{},[63,113517,113518,113519,113522,113523,28379],{},"本章使用 ",[103,113520,113521],{},"gymnasium","，不是旧版 ",[103,113524,113525],{},"gym",[63,113527,113528],{},"Gymnasium API 与旧 Gym API 有差异。",[63,113530,113531,113532,28379],{},"旧 Gym 常见返回值是 4 个: ",[103,113533,113534],{},"obs, reward, done, info",[63,113536,113537,113538,28379],{},"Gymnasium 返回值是 5 个: ",[103,113539,113540],{},"obs, reward, terminated, truncated, info",[48,113542,101030],{"id":101029},[14,113544,113545],{},"强化学习环境接口包含:",[254,113547,113548,113557],{},[257,113549,113550],{},[260,113551,113552,113555],{},[263,113553,113554],{"align":23729},"方法",[263,113556,102681],{"align":23729},[301,113558,113559,113569,113579,113589],{},[260,113560,113561,113566],{},[306,113562,113563],{"align":23729},[103,113564,113565],{},"reset()",[306,113567,113568],{"align":23729},"重置环境",[260,113570,113571,113576],{},[306,113572,113573],{"align":23729},[103,113574,113575],{},"step(action)",[306,113577,113578],{"align":23729},"执行动作",[260,113580,113581,113586],{},[306,113582,113583],{"align":23729},[103,113584,113585],{},"observation_space",[306,113587,113588],{"align":23729},"观测空间",[260,113590,113591,113596],{},[306,113592,113593],{"align":23729},[103,113594,113595],{},"action_space",[306,113597,23647],{"align":23729},[14,113599,113600],{},"一个最小环境需要完成:",[97,113602,113605],{"className":113603,"code":113604,"language":5180,"meta":25},[5178],"reset 初始化状态\nstep 写入 data.ctrl\nmj_step 推进仿真\n计算 obs\u002Freward\u002Fdone\n返回结果\n",[103,113606,113604],{"__ignoreMap":25},[77,113608,113610,101003,113613,104623],{"id":113609},"terminated-和-truncated-的区别",[103,113611,113612],{},"terminated",[103,113614,113615],{},"truncated",[14,113617,113618],{},"Gymnasium 把“结束”拆成两个概念：",[254,113620,113621,113631],{},[257,113622,113623],{},[260,113624,113625,113627,113629],{},[263,113626,104559],{"align":23729},[263,113628,100685],{"align":23729},[263,113630,21180],{"align":23729},[301,113632,113633,113645],{},[260,113634,113635,113639,113642],{},[306,113636,113637],{"align":23729},[103,113638,113612],{},[306,113640,113641],{"align":23729},"任务自然结束",[306,113643,113644],{"align":23729},"机械臂到达目标、机器人摔倒",[260,113646,113647,113651,113654],{},[306,113648,113649],{"align":23729},[103,113650,113615],{},[306,113652,113653],{"align":23729},"因外部限制截断",[306,113655,113656],{"align":23729},"达到最大步数、时间限制",[14,113658,113659],{},"本章中：",[97,113661,113663],{"className":30372,"code":113662,"language":30374,"meta":25,"style":25},"terminated = dist \u003C 0.05\ntruncated = self.steps >= self.max_steps\n",[103,113664,113665,113680],{"__ignoreMap":25},[106,113666,113667,113670,113672,113675,113677],{"class":108,"line":109},[106,113668,113669],{"class":116},"terminated ",[106,113671,162],{"class":112},[106,113673,113674],{"class":116}," dist ",[106,113676,1027],{"class":112},[106,113678,113679],{"class":165}," 0.05\n",[106,113681,113682,113685,113687,113689,113692,113694,113696],{"class":108,"line":28},[106,113683,113684],{"class":116},"truncated ",[106,113686,162],{"class":112},[106,113688,38867],{"class":165},[106,113690,113691],{"class":116},".steps ",[106,113693,1702],{"class":112},[106,113695,38867],{"class":165},[106,113697,113698],{"class":116},".max_steps\n",[14,113700,113701],{},"也就是：",[60,113703,113704,113707],{},[63,113705,113706],{},"末端距离目标小于 0.05，任务成功结束。",[63,113708,113709],{},"步数超过上限，episode 被截断。",[77,113711,113713,101003,113715],{"id":113712},"observation_space-和-action_space",[103,113714,113585],{},[103,113716,113595],{},[14,113718,113719],{},"这两个对象告诉算法：",[97,113721,113724],{"className":113722,"code":113723,"language":5180,"meta":25},[5178],"观测长什么样\n动作允许多大\n",[103,113725,113723],{"__ignoreMap":25},[14,113727,14626],{},[97,113729,113731],{"className":30372,"code":113730,"language":30374,"meta":25,"style":25},"self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)\n",[103,113732,113733],{"__ignoreMap":25},[106,113734,113735,113737,113740,113742,113745,113748,113751,113753,113755,113758,113760,113762,113764,113766,113768,113770,113772,113775,113777,113779],{"class":108,"line":109},[106,113736,30817],{"class":165},[106,113738,113739],{"class":116},".action_space ",[106,113741,162],{"class":112},[106,113743,113744],{"class":116}," spaces.Box(",[106,113746,113747],{"class":5209},"low",[106,113749,113750],{"class":112},"=-",[106,113752,102388],{"class":165},[106,113754,12428],{"class":116},[106,113756,113757],{"class":5209},"high",[106,113759,162],{"class":112},[106,113761,102388],{"class":165},[106,113763,12428],{"class":116},[106,113765,95948],{"class":5209},[106,113767,162],{"class":112},[106,113769,117],{"class":116},[106,113771,194],{"class":165},[106,113773,113774],{"class":116},",), ",[106,113776,93494],{"class":5209},[106,113778,162],{"class":112},[106,113780,113781],{"class":116},"np.float32)\n",[14,113783,113784,113785,113788],{},"表示动作是 2 维数组，每个值都在 ",[103,113786,113787],{},"[-1, 1]"," 范围内。",[97,113790,113792],{"className":30372,"code":113791,"language":30374,"meta":25,"style":25},"self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)\n",[103,113793,113794],{"__ignoreMap":25},[106,113795,113796,113798,113801,113803,113805,113807,113809,113812,113814,113816,113818,113820,113822,113824,113826,113828,113830,113832],{"class":108,"line":109},[106,113797,30817],{"class":165},[106,113799,113800],{"class":116},".observation_space ",[106,113802,162],{"class":112},[106,113804,113744],{"class":116},[106,113806,113747],{"class":5209},[106,113808,113750],{"class":112},[106,113810,113811],{"class":116},"np.inf, ",[106,113813,113757],{"class":5209},[106,113815,162],{"class":112},[106,113817,113811],{"class":116},[106,113819,95948],{"class":5209},[106,113821,162],{"class":112},[106,113823,117],{"class":116},[106,113825,563],{"class":165},[106,113827,113774],{"class":116},[106,113829,93494],{"class":5209},[106,113831,162],{"class":112},[106,113833,113781],{"class":116},[14,113835,113836],{},"表示观测是 10 维浮点数组，数值范围不强行限制。",[77,113838,113840],{"id":113839},"frame_skip-是什么","frame_skip 是什么",[97,113842,113844],{"className":30372,"code":113843,"language":30374,"meta":25,"style":25},"self.frame_skip = 5\n",[103,113845,113846],{"__ignoreMap":25},[106,113847,113848,113850,113853,113855],{"class":108,"line":109},[106,113849,30817],{"class":165},[106,113851,113852],{"class":116},".frame_skip ",[106,113854,162],{"class":112},[106,113856,54421],{"class":165},[14,113858,113859,113860,113863,113864,113866],{},"表示外部调用一次 ",[103,113861,113862],{},"env.step(action)","，内部连续执行 5 次 MuJoCo ",[103,113865,101200],{},"。这样做很常见，因为控制策略不一定需要每个物理时间步都重新给动作。",[48,113868,101238],{"id":101237},[97,113870,113872],{"className":30372,"code":113871,"language":30374,"meta":25,"style":25},"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",[103,113873,113874,113886,113892,113902,113913,113917,113921,113929,113934,113938,113942,113946,113950,113954,113958,113962,113967,113971,113975,113979,113984,113988,113992,113996,114000,114004,114008,114012,114016,114020,114024,114028,114032,114036,114054,114069,114073,114086,114096,114111,114128,114132,114153,114172,114197,114211,114215,114225,114237,114247,114251,114293,114331,114335,114345,114361,114376,114395,114402,114406,114419,114434,114449,114462,114481,114497,114501,114542,114557,114572,114576,114615,114626,114639,114643,114653,114662,114666,114676,114691,114709,114713,114724,114741,114754,114758,114768,114772,114783,114794,114798,114812,114826,114842,114846,114859,114876,114891,114898,114902,114906,114918,114928,114946,114958,114970,114974,114982,114998,115007,115016,115024,115066,115079,115084,115088,115106,115110,115114,115126],{"__ignoreMap":25},[106,113875,113876,113878,113881,113883],{"class":108,"line":109},[106,113877,30386],{"class":112},[106,113879,113880],{"class":116}," gymnasium ",[106,113882,31377],{"class":112},[106,113884,113885],{"class":116}," gym\n",[106,113887,113888,113890],{"class":108,"line":28},[106,113889,30386],{"class":112},[106,113891,101286],{"class":116},[106,113893,113894,113896,113898,113900],{"class":108,"line":1172},[106,113895,30386],{"class":112},[106,113897,31374],{"class":116},[106,113899,31377],{"class":112},[106,113901,31380],{"class":116},[106,113903,113904,113906,113908,113910],{"class":108,"line":1187},[106,113905,30731],{"class":112},[106,113907,113880],{"class":116},[106,113909,30386],{"class":112},[106,113911,113912],{"class":116}," spaces\n",[106,113914,113915],{"class":108,"line":1193},[106,113916,2392],{"emptyLinePlaceholder":33},[106,113918,113919],{"class":108,"line":1207},[106,113920,2392],{"emptyLinePlaceholder":33},[106,113922,113923,113925,113927],{"class":108,"line":1213},[106,113924,101299],{"class":165},[106,113926,13557],{"class":112},[106,113928,101304],{"class":221},[106,113930,113931],{"class":108,"line":1304},[106,113932,113933],{"class":221},"\u003Cmujoco model=\"gym_reacher\">\n",[106,113935,113936],{"class":108,"line":1310},[106,113937,111723],{"class":221},[106,113939,113940],{"class":108,"line":1322},[106,113941,2392],{"emptyLinePlaceholder":33},[106,113943,113944],{"class":108,"line":1604},[106,113945,101323],{"class":221},[106,113947,113948],{"class":108,"line":1609},[106,113949,111741],{"class":221},[106,113951,113952],{"class":108,"line":1615},[106,113953,2392],{"emptyLinePlaceholder":33},[106,113955,113956],{"class":108,"line":1620},[106,113957,111750],{"class":221},[106,113959,113960],{"class":108,"line":1634},[106,113961,111755],{"class":221},[106,113963,113964],{"class":108,"line":1639},[106,113965,113966],{"class":221},"      \u003Cgeom name=\"link1_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[106,113968,113969],{"class":108,"line":1645},[106,113970,2392],{"emptyLinePlaceholder":33},[106,113972,113973],{"class":108,"line":1666},[106,113974,111769],{"class":221},[106,113976,113977],{"class":108,"line":1671},[106,113978,111774],{"class":221},[106,113980,113981],{"class":108,"line":1685},[106,113982,113983],{"class":221},"        \u003Cgeom name=\"link2_geom\" type=\"capsule\" fromto=\"0 0 0 0.3 0 0\" size=\"0.025\" mass=\"0.2\"\u002F>\n",[106,113985,113986],{"class":108,"line":1690},[106,113987,111784],{"class":221},[106,113989,113990],{"class":108,"line":1719},[106,113991,106423],{"class":221},[106,113993,113994],{"class":108,"line":1724},[106,113995,101352],{"class":221},[106,113997,113998],{"class":108,"line":1741},[106,113999,101357],{"class":221},[106,114001,114002],{"class":108,"line":1746},[106,114003,2392],{"emptyLinePlaceholder":33},[106,114005,114006],{"class":108,"line":1751},[106,114007,106440],{"class":221},[106,114009,114010],{"class":108,"line":1756},[106,114011,111809],{"class":221},[106,114013,114014],{"class":108,"line":1770},[106,114015,111814],{"class":221},[106,114017,114018],{"class":108,"line":1775},[106,114019,106450],{"class":221},[106,114021,114022],{"class":108,"line":2569},[106,114023,101362],{"class":221},[106,114025,114026],{"class":108,"line":2583},[106,114027,95683],{"class":221},[106,114029,114030],{"class":108,"line":2591},[106,114031,2392],{"emptyLinePlaceholder":33},[106,114033,114034],{"class":108,"line":2596},[106,114035,2392],{"emptyLinePlaceholder":33},[106,114037,114038,114040,114043,114045,114047,114049,114052],{"class":108,"line":2602},[106,114039,14687],{"class":112},[106,114041,114042],{"class":1955}," ReacherEnv",[106,114044,117],{"class":116},[106,114046,113525],{"class":1955},[106,114048,675],{"class":116},[106,114050,114051],{"class":1955},"Env",[106,114053,30780],{"class":116},[106,114055,114056,114059,114061,114063,114066],{"class":108,"line":2608},[106,114057,114058],{"class":116},"    metadata ",[106,114060,162],{"class":112},[106,114062,4440],{"class":116},[106,114064,114065],{"class":221},"\"render_modes\"",[106,114067,114068],{"class":116},": []}\n",[106,114070,114071],{"class":108,"line":2613},[106,114072,2392],{"emptyLinePlaceholder":33},[106,114074,114075,114077,114079,114082,114084],{"class":108,"line":7941},[106,114076,30795],{"class":112},[106,114078,30798],{"class":165},[106,114080,114081],{"class":116},"(self) -> ",[106,114083,95671],{"class":165},[106,114085,3731],{"class":116},[106,114087,114088,114090,114092,114094],{"class":108,"line":7965},[106,114089,30811],{"class":165},[106,114091,17254],{"class":116},[106,114093,30823],{"class":165},[106,114095,1968],{"class":116},[106,114097,114098,114100,114103,114105,114107,114109],{"class":108,"line":7970},[106,114099,30839],{"class":165},[106,114101,114102],{"class":116},".model ",[106,114104,162],{"class":112},[106,114106,101397],{"class":116},[106,114108,101299],{"class":165},[106,114110,123],{"class":116},[106,114112,114113,114115,114118,114120,114123,114125],{"class":108,"line":7976},[106,114114,30839],{"class":165},[106,114116,114117],{"class":116},".data ",[106,114119,162],{"class":112},[106,114121,114122],{"class":116}," mujoco.MjData(",[106,114124,30817],{"class":165},[106,114126,114127],{"class":116},".model)\n",[106,114129,114130],{"class":108,"line":8003},[106,114131,2392],{"emptyLinePlaceholder":33},[106,114133,114134,114136,114139,114141,114144,114146,114149,114151],{"class":108,"line":8008},[106,114135,30839],{"class":165},[106,114137,114138],{"class":116},".tip_site_id ",[106,114140,162],{"class":112},[106,114142,114143],{"class":116}," mujoco.mj_name2id(",[106,114145,30817],{"class":165},[106,114147,114148],{"class":116},".model, mujoco.mjtObj.mjOBJ_SITE, ",[106,114150,111521],{"class":221},[106,114152,123],{"class":116},[106,114154,114155,114157,114160,114162,114164,114166,114168,114170],{"class":108,"line":8014},[106,114156,30839],{"class":165},[106,114158,114159],{"class":116},".target_site_id ",[106,114161,162],{"class":112},[106,114163,114143],{"class":116},[106,114165,30817],{"class":165},[106,114167,114148],{"class":116},[106,114169,111944],{"class":221},[106,114171,123],{"class":116},[106,114173,114174,114176,114178,114180,114182,114184,114187,114189,114191,114193,114195],{"class":108,"line":8026},[106,114175,2489],{"class":112},[106,114177,38867],{"class":165},[106,114179,114138],{"class":116},[106,114181,1027],{"class":112},[106,114183,4085],{"class":165},[106,114185,114186],{"class":112}," or",[106,114188,38867],{"class":165},[106,114190,114159],{"class":116},[106,114192,1027],{"class":112},[106,114194,4085],{"class":165},[106,114196,3731],{"class":116},[106,114198,114199,114202,114204,114206,114209],{"class":108,"line":8038},[106,114200,114201],{"class":112},"            raise",[106,114203,103420],{"class":165},[106,114205,117],{"class":116},[106,114207,114208],{"class":221},"\"required sites not found\"",[106,114210,123],{"class":116},[106,114212,114213],{"class":108,"line":8050},[106,114214,2392],{"emptyLinePlaceholder":33},[106,114216,114217,114219,114221,114223],{"class":108,"line":9709},[106,114218,30839],{"class":165},[106,114220,113852],{"class":116},[106,114222,162],{"class":112},[106,114224,54421],{"class":165},[106,114226,114227,114229,114232,114234],{"class":108,"line":9734},[106,114228,30839],{"class":165},[106,114230,114231],{"class":116},".max_steps ",[106,114233,162],{"class":112},[106,114235,114236],{"class":165}," 200\n",[106,114238,114239,114241,114243,114245],{"class":108,"line":9757},[106,114240,30839],{"class":165},[106,114242,113691],{"class":116},[106,114244,162],{"class":112},[106,114246,47327],{"class":165},[106,114248,114249],{"class":108,"line":9781},[106,114250,2392],{"emptyLinePlaceholder":33},[106,114252,114253,114255,114257,114259,114261,114263,114265,114267,114269,114271,114273,114275,114277,114279,114281,114283,114285,114287,114289,114291],{"class":108,"line":9786},[106,114254,30839],{"class":165},[106,114256,113739],{"class":116},[106,114258,162],{"class":112},[106,114260,113744],{"class":116},[106,114262,113747],{"class":5209},[106,114264,113750],{"class":112},[106,114266,102388],{"class":165},[106,114268,12428],{"class":116},[106,114270,113757],{"class":5209},[106,114272,162],{"class":112},[106,114274,102388],{"class":165},[106,114276,12428],{"class":116},[106,114278,95948],{"class":5209},[106,114280,162],{"class":112},[106,114282,117],{"class":116},[106,114284,194],{"class":165},[106,114286,113774],{"class":116},[106,114288,93494],{"class":5209},[106,114290,162],{"class":112},[106,114292,113781],{"class":116},[106,114294,114295,114297,114299,114301,114303,114305,114307,114309,114311,114313,114315,114317,114319,114321,114323,114325,114327,114329],{"class":108,"line":9791},[106,114296,30839],{"class":165},[106,114298,113800],{"class":116},[106,114300,162],{"class":112},[106,114302,113744],{"class":116},[106,114304,113747],{"class":5209},[106,114306,113750],{"class":112},[106,114308,113811],{"class":116},[106,114310,113757],{"class":5209},[106,114312,162],{"class":112},[106,114314,113811],{"class":116},[106,114316,95948],{"class":5209},[106,114318,162],{"class":112},[106,114320,117],{"class":116},[106,114322,563],{"class":165},[106,114324,113774],{"class":116},[106,114326,93494],{"class":5209},[106,114328,162],{"class":112},[106,114330,113781],{"class":116},[106,114332,114333],{"class":108,"line":9796},[106,114334,2392],{"emptyLinePlaceholder":33},[106,114336,114337,114339,114342],{"class":108,"line":9805},[106,114338,30795],{"class":112},[106,114340,114341],{"class":1955}," _get_obs",[106,114343,114344],{"class":116},"(self) -> np.ndarray:\n",[106,114346,114347,114349,114351,114353,114356,114358],{"class":108,"line":9810},[106,114348,112122],{"class":116},[106,114350,162],{"class":112},[106,114352,38867],{"class":165},[106,114354,114355],{"class":116},".data.site_xpos[",[106,114357,30817],{"class":165},[106,114359,114360],{"class":116},".tip_site_id].copy()\n",[106,114362,114363,114365,114367,114369,114371,114373],{"class":108,"line":9816},[106,114364,112135],{"class":116},[106,114366,162],{"class":112},[106,114368,38867],{"class":165},[106,114370,114355],{"class":116},[106,114372,30817],{"class":165},[106,114374,114375],{"class":116},".target_site_id].copy()\n",[106,114377,114378,114380,114382,114385,114387,114390,114392],{"class":108,"line":9837},[106,114379,110167],{"class":116},[106,114381,162],{"class":112},[106,114383,114384],{"class":116}," np.concatenate([",[106,114386,30817],{"class":165},[106,114388,114389],{"class":116},".data.qpos.copy(), ",[106,114391,30817],{"class":165},[106,114393,114394],{"class":116},".data.qvel.copy(), tip, target])\n",[106,114396,114397,114399],{"class":108,"line":9843},[106,114398,14745],{"class":112},[106,114400,114401],{"class":116}," obs.astype(np.float32)\n",[106,114403,114404],{"class":108,"line":9857},[106,114405,2392],{"emptyLinePlaceholder":33},[106,114407,114408,114410,114413,114415,114417],{"class":108,"line":9863},[106,114409,30795],{"class":112},[106,114411,114412],{"class":1955}," _get_reward",[106,114414,114081],{"class":116},[106,114416,156],{"class":165},[106,114418,3731],{"class":116},[106,114420,114421,114423,114425,114427,114429,114431],{"class":108,"line":9890},[106,114422,112122],{"class":116},[106,114424,162],{"class":112},[106,114426,38867],{"class":165},[106,114428,114355],{"class":116},[106,114430,30817],{"class":165},[106,114432,114433],{"class":116},".tip_site_id]\n",[106,114435,114436,114438,114440,114442,114444,114446],{"class":108,"line":9899},[106,114437,112135],{"class":116},[106,114439,162],{"class":112},[106,114441,38867],{"class":165},[106,114443,114355],{"class":116},[106,114445,30817],{"class":165},[106,114447,114448],{"class":116},".target_site_id]\n",[106,114450,114451,114454,114456,114458,114460],{"class":108,"line":9905},[106,114452,114453],{"class":116},"        dist ",[106,114455,162],{"class":112},[106,114457,111586],{"class":116},[106,114459,649],{"class":112},[106,114461,111591],{"class":116},[106,114463,114464,114467,114469,114471,114473,114476,114478],{"class":108,"line":9913},[106,114465,114466],{"class":116},"        control_cost ",[106,114468,162],{"class":112},[106,114470,112022],{"class":165},[106,114472,6511],{"class":112},[106,114474,114475],{"class":116}," np.sum(np.square(",[106,114477,30817],{"class":165},[106,114479,114480],{"class":116},".data.ctrl))\n",[106,114482,114483,114485,114487,114489,114491,114493,114495],{"class":108,"line":9918},[106,114484,14745],{"class":112},[106,114486,109782],{"class":165},[106,114488,117],{"class":116},[106,114490,649],{"class":112},[106,114492,111581],{"class":116},[106,114494,649],{"class":112},[106,114496,112044],{"class":116},[106,114498,114499],{"class":108,"line":16597},[106,114500,2392],{"emptyLinePlaceholder":33},[106,114502,114503,114505,114508,114511,114513,114516,114518,114520,114522,114524,114526,114529,114532,114534,114536,114538,114540],{"class":108,"line":16603},[106,114504,30795],{"class":112},[106,114506,114507],{"class":1955}," reset",[106,114509,114510],{"class":116},"(self, ",[106,114512,572],{"class":112},[106,114514,114515],{"class":116},", seed: ",[106,114517,120],{"class":165},[106,114519,25103],{"class":112},[106,114521,38927],{"class":165},[106,114523,13557],{"class":112},[106,114525,38927],{"class":165},[106,114527,114528],{"class":116},", options: ",[106,114530,114531],{"class":165},"dict",[106,114533,25103],{"class":112},[106,114535,38927],{"class":165},[106,114537,13557],{"class":112},[106,114539,38927],{"class":165},[106,114541,30780],{"class":116},[106,114543,114544,114546,114549,114552,114554],{"class":108,"line":16626},[106,114545,30811],{"class":165},[106,114547,114548],{"class":116},"().reset(",[106,114550,114551],{"class":5209},"seed",[106,114553,162],{"class":112},[106,114555,114556],{"class":116},"seed)\n",[106,114558,114559,114562,114564,114567,114569],{"class":108,"line":16632},[106,114560,114561],{"class":116},"        mujoco.mj_resetData(",[106,114563,30817],{"class":165},[106,114565,114566],{"class":116},".model, ",[106,114568,30817],{"class":165},[106,114570,114571],{"class":116},".data)\n",[106,114573,114574],{"class":108,"line":16655},[106,114575,2392],{"emptyLinePlaceholder":33},[106,114577,114578,114580,114583,114585,114587,114590,114592,114594,114596,114598,114600,114602,114604,114606,114608,114610,114612],{"class":108,"line":16669},[106,114579,30839],{"class":165},[106,114581,114582],{"class":116},".data.qpos[:] ",[106,114584,162],{"class":112},[106,114586,38867],{"class":165},[106,114588,114589],{"class":116},".np_random.uniform(",[106,114591,113747],{"class":5209},[106,114593,113750],{"class":112},[106,114595,86204],{"class":165},[106,114597,12428],{"class":116},[106,114599,113757],{"class":5209},[106,114601,162],{"class":112},[106,114603,86204],{"class":165},[106,114605,12428],{"class":116},[106,114607,31490],{"class":5209},[106,114609,162],{"class":112},[106,114611,30817],{"class":165},[106,114613,114614],{"class":116},".model.nq)\n",[106,114616,114617,114619,114622,114624],{"class":108,"line":16689},[106,114618,30839],{"class":165},[106,114620,114621],{"class":116},".data.qvel[:] ",[106,114623,162],{"class":112},[106,114625,104746],{"class":165},[106,114627,114628,114631,114633,114635,114637],{"class":108,"line":16695},[106,114629,114630],{"class":116},"        mujoco.mj_forward(",[106,114632,30817],{"class":165},[106,114634,114566],{"class":116},[106,114636,30817],{"class":165},[106,114638,114571],{"class":116},[106,114640,114641],{"class":108,"line":16706},[106,114642,2392],{"emptyLinePlaceholder":33},[106,114644,114645,114647,114649,114651],{"class":108,"line":16729},[106,114646,30839],{"class":165},[106,114648,113691],{"class":116},[106,114650,162],{"class":112},[106,114652,47327],{"class":165},[106,114654,114655,114657,114659],{"class":108,"line":16751},[106,114656,14745],{"class":112},[106,114658,38867],{"class":165},[106,114660,114661],{"class":116},"._get_obs(), {}\n",[106,114663,114664],{"class":108,"line":16756},[106,114665,2392],{"emptyLinePlaceholder":33},[106,114667,114668,114670,114673],{"class":108,"line":16762},[106,114669,30795],{"class":112},[106,114671,114672],{"class":1955}," step",[106,114674,114675],{"class":116},"(self, action):\n",[106,114677,114678,114680,114682,114685,114687,114689],{"class":108,"line":16776},[106,114679,110207],{"class":116},[106,114681,162],{"class":112},[106,114683,114684],{"class":116}," np.asarray(action, ",[106,114686,93494],{"class":5209},[106,114688,162],{"class":112},[106,114690,113781],{"class":116},[106,114692,114693,114695,114697,114699,114701,114704,114706],{"class":108,"line":16789},[106,114694,110207],{"class":116},[106,114696,162],{"class":112},[106,114698,107432],{"class":116},[106,114700,30817],{"class":165},[106,114702,114703],{"class":116},".action_space.low, ",[106,114705,30817],{"class":165},[106,114707,114708],{"class":116},".action_space.high)\n",[106,114710,114711],{"class":108,"line":16794},[106,114712,2392],{"emptyLinePlaceholder":33},[106,114714,114715,114717,114720,114722],{"class":108,"line":16808},[106,114716,30839],{"class":165},[106,114718,114719],{"class":116},".data.ctrl[:] ",[106,114721,162],{"class":112},[106,114723,107455],{"class":116},[106,114725,114726,114728,114730,114732,114734,114736,114738],{"class":108,"line":16813},[106,114727,3395],{"class":112},[106,114729,101486],{"class":116},[106,114731,26037],{"class":112},[106,114733,32437],{"class":165},[106,114735,117],{"class":116},[106,114737,30817],{"class":165},[106,114739,114740],{"class":116},".frame_skip):\n",[106,114742,114743,114746,114748,114750,114752],{"class":108,"line":16819},[106,114744,114745],{"class":116},"            mujoco.mj_step(",[106,114747,30817],{"class":165},[106,114749,114566],{"class":116},[106,114751,30817],{"class":165},[106,114753,114571],{"class":116},[106,114755,114756],{"class":108,"line":16824},[106,114757,2392],{"emptyLinePlaceholder":33},[106,114759,114760,114762,114764,114766],{"class":108,"line":16838},[106,114761,30839],{"class":165},[106,114763,113691],{"class":116},[106,114765,9470],{"class":112},[106,114767,55693],{"class":165},[106,114769,114770],{"class":108,"line":16843},[106,114771,2392],{"emptyLinePlaceholder":33},[106,114773,114774,114776,114778,114780],{"class":108,"line":16848},[106,114775,110167],{"class":116},[106,114777,162],{"class":112},[106,114779,38867],{"class":165},[106,114781,114782],{"class":116},"._get_obs()\n",[106,114784,114785,114787,114789,114791],{"class":108,"line":16862},[106,114786,110272],{"class":116},[106,114788,162],{"class":112},[106,114790,38867],{"class":165},[106,114792,114793],{"class":116},"._get_reward()\n",[106,114795,114796],{"class":108,"line":16874},[106,114797,2392],{"emptyLinePlaceholder":33},[106,114799,114800,114802,114804,114806,114808,114810],{"class":108,"line":16879},[106,114801,112122],{"class":116},[106,114803,162],{"class":112},[106,114805,38867],{"class":165},[106,114807,114355],{"class":116},[106,114809,30817],{"class":165},[106,114811,114433],{"class":116},[106,114813,114814,114816,114818,114820,114822,114824],{"class":108,"line":16892},[106,114815,112135],{"class":116},[106,114817,162],{"class":112},[106,114819,38867],{"class":165},[106,114821,114355],{"class":116},[106,114823,30817],{"class":165},[106,114825,114448],{"class":116},[106,114827,114828,114830,114832,114834,114837,114839],{"class":108,"line":16897},[106,114829,114453],{"class":116},[106,114831,162],{"class":112},[106,114833,109782],{"class":165},[106,114835,114836],{"class":116},"(np.linalg.norm(tip ",[106,114838,649],{"class":112},[106,114840,114841],{"class":116}," target))\n",[106,114843,114844],{"class":108,"line":16902},[106,114845,2392],{"emptyLinePlaceholder":33},[106,114847,114848,114851,114853,114855,114857],{"class":108,"line":16907},[106,114849,114850],{"class":116},"        terminated ",[106,114852,162],{"class":112},[106,114854,113674],{"class":116},[106,114856,1027],{"class":112},[106,114858,113679],{"class":165},[106,114860,114861,114864,114866,114868,114870,114872,114874],{"class":108,"line":16920},[106,114862,114863],{"class":116},"        truncated ",[106,114865,162],{"class":112},[106,114867,38867],{"class":165},[106,114869,113691],{"class":116},[106,114871,1702],{"class":112},[106,114873,38867],{"class":165},[106,114875,113698],{"class":116},[106,114877,114878,114881,114883,114885,114888],{"class":108,"line":16925},[106,114879,114880],{"class":116},"        info ",[106,114882,162],{"class":112},[106,114884,4440],{"class":116},[106,114886,114887],{"class":221},"\"distance\"",[106,114889,114890],{"class":116},": dist}\n",[106,114892,114893,114895],{"class":108,"line":32627},[106,114894,14745],{"class":112},[106,114896,114897],{"class":116}," obs, reward, terminated, truncated, info\n",[106,114899,114900],{"class":108,"line":32633},[106,114901,2392],{"emptyLinePlaceholder":33},[106,114903,114904],{"class":108,"line":32639},[106,114905,2392],{"emptyLinePlaceholder":33},[106,114907,114908,114910,114912,114914,114916],{"class":108,"line":32645},[106,114909,31941],{"class":112},[106,114911,1965],{"class":1955},[106,114913,101383],{"class":116},[106,114915,95671],{"class":165},[106,114917,3731],{"class":116},[106,114919,114920,114923,114925],{"class":108,"line":32651},[106,114921,114922],{"class":116},"    env ",[106,114924,162],{"class":112},[106,114926,114927],{"class":116}," ReacherEnv()\n",[106,114929,114930,114933,114935,114938,114940,114942,114944],{"class":108,"line":32662},[106,114931,114932],{"class":116},"    obs, info ",[106,114934,162],{"class":112},[106,114936,114937],{"class":116}," env.reset(",[106,114939,114551],{"class":5209},[106,114941,162],{"class":112},[106,114943,308],{"class":165},[106,114945,123],{"class":116},[106,114947,114948,114950,114952,114955],{"class":108,"line":32668},[106,114949,31293],{"class":165},[106,114951,117],{"class":116},[106,114953,114954],{"class":221},"\"initial obs shape:\"",[106,114956,114957],{"class":116},", obs.shape)\n",[106,114959,114960,114962,114964,114967],{"class":108,"line":32688},[106,114961,31293],{"class":165},[106,114963,117],{"class":116},[106,114965,114966],{"class":221},"\"initial info:\"",[106,114968,114969],{"class":116},", info)\n",[106,114971,114972],{"class":108,"line":32694},[106,114973,2392],{"emptyLinePlaceholder":33},[106,114975,114976,114978,114980],{"class":108,"line":32705},[106,114977,110138],{"class":116},[106,114979,162],{"class":112},[106,114981,104746],{"class":165},[106,114983,114984,114986,114988,114990,114992,114994,114996],{"class":108,"line":32711},[106,114985,3193],{"class":112},[106,114987,31610],{"class":116},[106,114989,26037],{"class":112},[106,114991,32437],{"class":165},[106,114993,117],{"class":116},[106,114995,817],{"class":165},[106,114997,30780],{"class":116},[106,114999,115000,115002,115004],{"class":108,"line":32717},[106,115001,110207],{"class":116},[106,115003,162],{"class":112},[106,115005,115006],{"class":116}," env.action_space.sample()\n",[106,115008,115009,115012,115014],{"class":108,"line":32723},[106,115010,115011],{"class":116},"        obs, reward, terminated, truncated, info ",[106,115013,162],{"class":112},[106,115015,113400],{"class":116},[106,115017,115018,115020,115022],{"class":108,"line":32729},[106,115019,110282],{"class":116},[106,115021,9470],{"class":112},[106,115023,110287],{"class":116},[106,115025,115026,115028,115030,115032,115034,115037,115039,115041,115044,115046,115048,115051,115053,115055,115058,115060,115062,115064],{"class":108,"line":32735},[106,115027,32445],{"class":165},[106,115029,117],{"class":116},[106,115031,110316],{"class":221},[106,115033,110319],{"class":116},[106,115035,115036],{"class":221},"\"reward:\"",[106,115038,12428],{"class":116},[106,115040,32012],{"class":165},[106,115042,115043],{"class":116},"(reward, ",[106,115045,188],{"class":165},[106,115047,110330],{"class":116},[106,115049,115050],{"class":221},"\"distance:\"",[106,115052,12428],{"class":116},[106,115054,32012],{"class":165},[106,115056,115057],{"class":116},"(info[",[106,115059,114887],{"class":221},[106,115061,112187],{"class":116},[106,115063,188],{"class":165},[106,115065,30491],{"class":116},[106,115067,115068,115070,115073,115076],{"class":108,"line":32741},[106,115069,2489],{"class":112},[106,115071,115072],{"class":116}," terminated ",[106,115074,115075],{"class":112},"or",[106,115077,115078],{"class":116}," truncated:\n",[106,115080,115081],{"class":108,"line":32747},[106,115082,115083],{"class":112},"            break\n",[106,115085,115086],{"class":108,"line":32767},[106,115087,2392],{"emptyLinePlaceholder":33},[106,115089,115090,115092,115094,115096,115098,115100,115102,115104],{"class":108,"line":32773},[106,115091,31293],{"class":165},[106,115093,117],{"class":116},[106,115095,110361],{"class":221},[106,115097,12428],{"class":116},[106,115099,32012],{"class":165},[106,115101,110368],{"class":116},[106,115103,188],{"class":165},[106,115105,30491],{"class":116},[106,115107,115108],{"class":108,"line":32789},[106,115109,2392],{"emptyLinePlaceholder":33},[106,115111,115112],{"class":108,"line":32795},[106,115113,2392],{"emptyLinePlaceholder":33},[106,115115,115116,115118,115120,115122,115124],{"class":108,"line":32809},[106,115117,1523],{"class":112},[106,115119,31214],{"class":165},[106,115121,101544],{"class":112},[106,115123,101547],{"class":221},[106,115125,3731],{"class":116},[106,115127,115128],{"class":108,"line":32815},[106,115129,101554],{"class":116},[14,115131,103555],{},[97,115133,115135],{"className":23815,"code":115134,"language":23817,"meta":25,"style":25},"touch ch8_gym_env.py\n",[103,115136,115137],{"__ignoreMap":25},[106,115138,115139,115141],{"class":108,"line":109},[106,115140,101268],{"class":1955},[106,115142,115143],{"class":221}," ch8_gym_env.py\n",[14,115145,110429],{},[97,115147,115149],{"className":23815,"code":115148,"language":23817,"meta":25,"style":25},"python ch8_gym_env.py\n",[103,115150,115151],{"__ignoreMap":25},[106,115152,115153,115155],{"class":108,"line":109},[106,115154,30374],{"class":1955},[106,115156,115143],{"class":221},[77,115158,101557],{"id":101557},[14,115160,115161],{},"继承 Gymnasium 环境：",[97,115163,115165],{"className":30372,"code":115164,"language":30374,"meta":25,"style":25},"class ReacherEnv(gym.Env):\n",[103,115166,115167],{"__ignoreMap":25},[106,115168,115169,115171,115173,115175,115177,115179,115181],{"class":108,"line":109},[106,115170,14687],{"class":112},[106,115172,114042],{"class":1955},[106,115174,117],{"class":116},[106,115176,113525],{"class":1955},[106,115178,675],{"class":116},[106,115180,114051],{"class":1955},[106,115182,30780],{"class":116},[14,115184,115185],{},"这表示你在定义一个符合 Gymnasium 规范的环境。",[14,115187,115188],{},"初始化模型：",[97,115190,115192],{"className":30372,"code":115191,"language":30374,"meta":25,"style":25},"self.model = mujoco.MjModel.from_xml_string(XML)\nself.data = mujoco.MjData(self.model)\n",[103,115193,115194,115208],{"__ignoreMap":25},[106,115195,115196,115198,115200,115202,115204,115206],{"class":108,"line":109},[106,115197,30817],{"class":165},[106,115199,114102],{"class":116},[106,115201,162],{"class":112},[106,115203,101397],{"class":116},[106,115205,101299],{"class":165},[106,115207,123],{"class":116},[106,115209,115210,115212,115214,115216,115218,115220],{"class":108,"line":28},[106,115211,30817],{"class":165},[106,115213,114117],{"class":116},[106,115215,162],{"class":112},[106,115217,114122],{"class":116},[106,115219,30817],{"class":165},[106,115221,114127],{"class":116},[14,115223,115224,115225,115227],{},"这和前面章节一样，只是现在放到了类的 ",[103,115226,30823],{}," 里。",[14,115229,115230],{},"缓存 site ID：",[97,115232,115234],{"className":30372,"code":115233,"language":30374,"meta":25,"style":25},"self.tip_site_id = mujoco.mj_name2id(...)\nself.target_site_id = mujoco.mj_name2id(...)\n",[103,115235,115236,115250],{"__ignoreMap":25},[106,115237,115238,115240,115242,115244,115246,115248],{"class":108,"line":109},[106,115239,30817],{"class":165},[106,115241,114138],{"class":116},[106,115243,162],{"class":112},[106,115245,114143],{"class":116},[106,115247,89548],{"class":165},[106,115249,123],{"class":116},[106,115251,115252,115254,115256,115258,115260,115262],{"class":108,"line":28},[106,115253,30817],{"class":165},[106,115255,114159],{"class":116},[106,115257,162],{"class":112},[106,115259,114143],{"class":116},[106,115261,89548],{"class":165},[106,115263,123],{"class":116},[14,115265,115266],{},"不要每次 step 都重复查名字。初始化时查一次 ID，后面直接用 ID 读取数组更清晰。",[14,115268,115269],{},"reset：",[97,115271,115273],{"className":30372,"code":115272,"language":30374,"meta":25,"style":25},"def reset(self, *, seed: int | None = None, options: dict | None = None):\n",[103,115274,115275],{"__ignoreMap":25},[106,115276,115277,115279,115281,115283,115285,115287,115289,115291,115293,115295,115297,115299,115301,115303,115305,115307,115309],{"class":108,"line":109},[106,115278,31941],{"class":112},[106,115280,114507],{"class":1955},[106,115282,114510],{"class":116},[106,115284,572],{"class":112},[106,115286,114515],{"class":116},[106,115288,120],{"class":165},[106,115290,25103],{"class":112},[106,115292,38927],{"class":165},[106,115294,13557],{"class":112},[106,115296,38927],{"class":165},[106,115298,114528],{"class":116},[106,115300,114531],{"class":165},[106,115302,25103],{"class":112},[106,115304,38927],{"class":165},[106,115306,13557],{"class":112},[106,115308,38927],{"class":165},[106,115310,30780],{"class":116},[14,115312,115313,115315],{},[103,115314,70050],{}," 做四件事：",[60,115317,115318,115321,115324,115327],{},[63,115319,115320],{},"设置随机种子。",[63,115322,115323],{},"重置 MuJoCo data。",[63,115325,115326],{},"随机初始化关节角。",[63,115328,115329],{},"返回初始观测和 info。",[14,115331,115332],{},"step：",[97,115334,115336],{"className":30372,"code":115335,"language":30374,"meta":25,"style":25},"def step(self, action):\n",[103,115337,115338],{"__ignoreMap":25},[106,115339,115340,115342,115344],{"class":108,"line":109},[106,115341,31941],{"class":112},[106,115343,114672],{"class":1955},[106,115345,114675],{"class":116},[14,115347,115348,115350],{},[103,115349,107119],{}," 做六件事：",[60,115352,115353,115356,115362,115365,115368,115371],{},[63,115354,115355],{},"检查并裁剪 action。",[63,115357,115358,115359,28379],{},"写入 ",[103,115360,115361],{},"self.data.ctrl",[63,115363,115364],{},"连续推进若干个 MuJoCo 物理步。",[63,115366,115367],{},"计算新观测。",[63,115369,115370],{},"计算奖励和结束条件。",[63,115372,115373],{},"返回 Gymnasium 标准五元组。",[77,115375,101693],{"id":101693},[97,115377,115379],{"className":30372,"code":115378,"language":30374,"meta":25,"style":25},"import gymnasium as gym\n",[103,115380,115381],{"__ignoreMap":25},[106,115382,115383,115385,115387,115389],{"class":108,"line":109},[106,115384,30386],{"class":112},[106,115386,113880],{"class":116},[106,115388,31377],{"class":112},[106,115390,113885],{"class":116},[14,115392,115393,115394,115396,115397,115400],{},"导入 Gymnasium，并起别名 ",[103,115395,113525],{},"。后面写 ",[103,115398,115399],{},"gym.Env"," 就表示 Gymnasium 的环境基类。",[97,115402,115404],{"className":30372,"code":115403,"language":30374,"meta":25,"style":25},"from gymnasium import spaces\n",[103,115405,115406],{"__ignoreMap":25},[106,115407,115408,115410,115412,115414],{"class":108,"line":109},[106,115409,30731],{"class":112},[106,115411,113880],{"class":116},[106,115413,30386],{"class":112},[106,115415,113912],{"class":116},[14,115417,115418,115419,115422],{},"导入空间定义工具。",[103,115420,115421],{},"spaces.Box"," 用来描述连续动作空间和连续观测空间。",[97,115424,115425],{"className":30372,"code":115164,"language":30374,"meta":25,"style":25},[103,115426,115427],{"__ignoreMap":25},[106,115428,115429,115431,115433,115435,115437,115439,115441],{"class":108,"line":109},[106,115430,14687],{"class":112},[106,115432,114042],{"class":1955},[106,115434,117],{"class":116},[106,115436,113525],{"class":1955},[106,115438,675],{"class":116},[106,115440,114051],{"class":1955},[106,115442,30780],{"class":116},[14,115444,115445,115446,115449,115450,115452,115453,101003,115455,115457],{},"定义一个类，名字叫 ",[103,115447,115448],{},"ReacherEnv","。括号里的 ",[103,115451,115399],{}," 表示它继承 Gymnasium 环境基类。继承后，你需要实现 ",[103,115454,70050],{},[103,115456,107119],{}," 这两个核心方法。",[97,115459,115461],{"className":30372,"code":115460,"language":30374,"meta":25,"style":25},"metadata = {\"render_modes\": []}\n",[103,115462,115463],{"__ignoreMap":25},[106,115464,115465,115468,115470,115472,115474],{"class":108,"line":109},[106,115466,115467],{"class":116},"metadata ",[106,115469,162],{"class":112},[106,115471,4440],{"class":116},[106,115473,114065],{"class":221},[106,115475,114068],{"class":116},[14,115477,115478],{},"Gymnasium 环境可以声明支持哪些渲染模式。这里暂时不实现 render，所以写空列表。",[97,115480,115482],{"className":30372,"code":115481,"language":30374,"meta":25,"style":25},"def __init__(self) -> None:\n",[103,115483,115484],{"__ignoreMap":25},[106,115485,115486,115488,115490,115492,115494],{"class":108,"line":109},[106,115487,31941],{"class":112},[106,115489,30798],{"class":165},[106,115491,114081],{"class":116},[106,115493,95671],{"class":165},[106,115495,3731],{"class":116},[14,115497,115498,115500,115501,28379],{},[103,115499,30823],{}," 是类的初始化函数。创建环境时会自动调用，比如 ",[103,115502,115503],{},"env = ReacherEnv()",[97,115505,115507],{"className":30372,"code":115506,"language":30374,"meta":25,"style":25},"super().__init__()\n",[103,115508,115509],{"__ignoreMap":25},[106,115510,115511,115514,115516,115518],{"class":108,"line":109},[106,115512,115513],{"class":165},"super",[106,115515,17254],{"class":116},[106,115517,30823],{"class":165},[106,115519,1968],{"class":116},[14,115521,115522,115523,115525],{},"调用父类 ",[103,115524,115399],{}," 的初始化逻辑。写自定义 Gymnasium 环境时通常保留这行。",[97,115527,115528],{"className":30372,"code":115191,"language":30374,"meta":25,"style":25},[103,115529,115530,115544],{"__ignoreMap":25},[106,115531,115532,115534,115536,115538,115540,115542],{"class":108,"line":109},[106,115533,30817],{"class":165},[106,115535,114102],{"class":116},[106,115537,162],{"class":112},[106,115539,101397],{"class":116},[106,115541,101299],{"class":165},[106,115543,123],{"class":116},[106,115545,115546,115548,115550,115552,115554,115556],{"class":108,"line":28},[106,115547,30817],{"class":165},[106,115549,114117],{"class":116},[106,115551,162],{"class":112},[106,115553,114122],{"class":116},[106,115555,30817],{"class":165},[106,115557,114127],{"class":116},[14,115559,115560,115561,115563,115564,101003,115567,115570],{},"把 MuJoCo 模型和状态保存到 ",[103,115562,30817],{}," 上。",[103,115565,115566],{},"self.model",[103,115568,115569],{},"self.data"," 表示这个环境对象自己的模型和状态。",[97,115572,115573],{"className":30372,"code":115233,"language":30374,"meta":25,"style":25},[103,115574,115575,115589],{"__ignoreMap":25},[106,115576,115577,115579,115581,115583,115585,115587],{"class":108,"line":109},[106,115578,30817],{"class":165},[106,115580,114138],{"class":116},[106,115582,162],{"class":112},[106,115584,114143],{"class":116},[106,115586,89548],{"class":165},[106,115588,123],{"class":116},[106,115590,115591,115593,115595,115597,115599,115601],{"class":108,"line":28},[106,115592,30817],{"class":165},[106,115594,114159],{"class":116},[106,115596,162],{"class":112},[106,115598,114143],{"class":116},[106,115600,89548],{"class":165},[106,115602,123],{"class":116},[14,115604,115605,115606,101003,115609,115612],{},"提前查好 tip 和 target 的 site ID。这样 ",[103,115607,115608],{},"_get_obs",[103,115610,115611],{},"_get_reward"," 里就不用每次按名字查找。",[97,115614,115616],{"className":30372,"code":115615,"language":30374,"meta":25,"style":25},"self.frame_skip = 5\nself.max_steps = 200\nself.steps = 0\n",[103,115617,115618,115628,115638],{"__ignoreMap":25},[106,115619,115620,115622,115624,115626],{"class":108,"line":109},[106,115621,30817],{"class":165},[106,115623,113852],{"class":116},[106,115625,162],{"class":112},[106,115627,54421],{"class":165},[106,115629,115630,115632,115634,115636],{"class":108,"line":28},[106,115631,30817],{"class":165},[106,115633,114231],{"class":116},[106,115635,162],{"class":112},[106,115637,114236],{"class":165},[106,115639,115640,115642,115644,115646],{"class":108,"line":1172},[106,115641,30817],{"class":165},[106,115643,113691],{"class":116},[106,115645,162],{"class":112},[106,115647,47327],{"class":165},[14,115649,115650,115653,115654,115657,115658,115661],{},[103,115651,115652],{},"frame_skip"," 表示一次环境 step 内部跑几个 MuJoCo 物理步。",[103,115655,115656],{},"max_steps"," 是一个 episode 最多运行多少步。",[103,115659,115660],{},"steps"," 记录当前 episode 已经走了多少步。",[97,115663,115664],{"className":30372,"code":113730,"language":30374,"meta":25,"style":25},[103,115665,115666],{"__ignoreMap":25},[106,115667,115668,115670,115672,115674,115676,115678,115680,115682,115684,115686,115688,115690,115692,115694,115696,115698,115700,115702,115704,115706],{"class":108,"line":109},[106,115669,30817],{"class":165},[106,115671,113739],{"class":116},[106,115673,162],{"class":112},[106,115675,113744],{"class":116},[106,115677,113747],{"class":5209},[106,115679,113750],{"class":112},[106,115681,102388],{"class":165},[106,115683,12428],{"class":116},[106,115685,113757],{"class":5209},[106,115687,162],{"class":112},[106,115689,102388],{"class":165},[106,115691,12428],{"class":116},[106,115693,95948],{"class":5209},[106,115695,162],{"class":112},[106,115697,117],{"class":116},[106,115699,194],{"class":165},[106,115701,113774],{"class":116},[106,115703,93494],{"class":5209},[106,115705,162],{"class":112},[106,115707,113781],{"class":116},[14,115709,115710,115711,115714,115715,101003,115718,115721],{},"定义动作空间。",[103,115712,115713],{},"shape=(2,)"," 表示动作是两个数，因为有两个 motor。",[103,115716,115717],{},"low=-1.0",[103,115719,115720],{},"high=1.0"," 表示每个动作值都限制在 -1 到 1。",[97,115723,115724],{"className":30372,"code":113791,"language":30374,"meta":25,"style":25},[103,115725,115726],{"__ignoreMap":25},[106,115727,115728,115730,115732,115734,115736,115738,115740,115742,115744,115746,115748,115750,115752,115754,115756,115758,115760,115762],{"class":108,"line":109},[106,115729,30817],{"class":165},[106,115731,113800],{"class":116},[106,115733,162],{"class":112},[106,115735,113744],{"class":116},[106,115737,113747],{"class":5209},[106,115739,113750],{"class":112},[106,115741,113811],{"class":116},[106,115743,113757],{"class":5209},[106,115745,162],{"class":112},[106,115747,113811],{"class":116},[106,115749,95948],{"class":5209},[106,115751,162],{"class":112},[106,115753,117],{"class":116},[106,115755,563],{"class":165},[106,115757,113774],{"class":116},[106,115759,93494],{"class":5209},[106,115761,162],{"class":112},[106,115763,113781],{"class":116},[14,115765,115766,115767,115770,115771,115774],{},"定义观测空间。",[103,115768,115769],{},"shape=(10,)"," 表示观测是 10 个数。",[103,115772,115773],{},"np.inf"," 表示无穷大，这里表示不限制观测数值范围。",[97,115776,115778],{"className":30372,"code":115777,"language":30374,"meta":25,"style":25},"def _get_obs(self) -> np.ndarray:\n",[103,115779,115780],{"__ignoreMap":25},[106,115781,115782,115784,115786],{"class":108,"line":109},[106,115783,31941],{"class":112},[106,115785,114341],{"class":1955},[106,115787,114344],{"class":116},[14,115789,115790,115791,115793],{},"定义内部函数，用来生成观测。函数名前面的 ",[103,115792,1109],{}," 是习惯写法，表示这是类内部使用的辅助函数。",[97,115795,115797],{"className":30372,"code":115796,"language":30374,"meta":25,"style":25},"tip = self.data.site_xpos[self.tip_site_id].copy()\ntarget = self.data.site_xpos[self.target_site_id].copy()\n",[103,115798,115799,115813],{"__ignoreMap":25},[106,115800,115801,115803,115805,115807,115809,115811],{"class":108,"line":109},[106,115802,111553],{"class":116},[106,115804,162],{"class":112},[106,115806,38867],{"class":165},[106,115808,114355],{"class":116},[106,115810,30817],{"class":165},[106,115812,114360],{"class":116},[106,115814,115815,115817,115819,115821,115823,115825],{"class":108,"line":28},[106,115816,111563],{"class":116},[106,115818,162],{"class":112},[106,115820,38867],{"class":165},[106,115822,114355],{"class":116},[106,115824,30817],{"class":165},[106,115826,114375],{"class":116},[14,115828,115829],{},"从 MuJoCo data 中读取末端点和目标点坐标。",[97,115831,115833],{"className":30372,"code":115832,"language":30374,"meta":25,"style":25},"obs = np.concatenate([self.data.qpos.copy(), self.data.qvel.copy(), tip, target])\nreturn obs.astype(np.float32)\n",[103,115834,115835,115851],{"__ignoreMap":25},[106,115836,115837,115839,115841,115843,115845,115847,115849],{"class":108,"line":109},[106,115838,110839],{"class":116},[106,115840,162],{"class":112},[106,115842,114384],{"class":116},[106,115844,30817],{"class":165},[106,115846,114389],{"class":116},[106,115848,30817],{"class":165},[106,115850,114394],{"class":116},[106,115852,115853,115855],{"class":108,"line":28},[106,115854,17039],{"class":112},[106,115856,114401],{"class":116},[14,115858,115859,115860,115863,115864,115866],{},"拼接观测，并转换成 ",[103,115861,115862],{},"float32","。很多强化学习库默认使用 ",[103,115865,115862],{},"，所以这里主动转换。",[97,115868,115869],{"className":30372,"code":115272,"language":30374,"meta":25,"style":25},[103,115870,115871],{"__ignoreMap":25},[106,115872,115873,115875,115877,115879,115881,115883,115885,115887,115889,115891,115893,115895,115897,115899,115901,115903,115905],{"class":108,"line":109},[106,115874,31941],{"class":112},[106,115876,114507],{"class":1955},[106,115878,114510],{"class":116},[106,115880,572],{"class":112},[106,115882,114515],{"class":116},[106,115884,120],{"class":165},[106,115886,25103],{"class":112},[106,115888,38927],{"class":165},[106,115890,13557],{"class":112},[106,115892,38927],{"class":165},[106,115894,114528],{"class":116},[106,115896,114531],{"class":165},[106,115898,25103],{"class":112},[106,115900,38927],{"class":165},[106,115902,13557],{"class":112},[106,115904,38927],{"class":165},[106,115906,30780],{"class":116},[14,115908,115909,115910,115912,115913,115916],{},"定义 reset。",[103,115911,114551],{}," 用来控制随机数，保证实验可以复现。",[103,115914,115915],{},"options"," 用来接收额外配置，本章暂时不用。",[97,115918,115920],{"className":30372,"code":115919,"language":30374,"meta":25,"style":25},"super().reset(seed=seed)\n",[103,115921,115922],{"__ignoreMap":25},[106,115923,115924,115926,115928,115930,115932],{"class":108,"line":109},[106,115925,115513],{"class":165},[106,115927,114548],{"class":116},[106,115929,114551],{"class":5209},[106,115931,162],{"class":112},[106,115933,114556],{"class":116},[14,115935,115936,115937,115940],{},"把随机种子交给 Gymnasium 父类处理。之后可以使用 ",[103,115938,115939],{},"self.np_random"," 生成可复现的随机数。",[97,115942,115944],{"className":30372,"code":115943,"language":30374,"meta":25,"style":25},"mujoco.mj_resetData(self.model, self.data)\n",[103,115945,115946],{"__ignoreMap":25},[106,115947,115948,115951,115953,115955,115957],{"class":108,"line":109},[106,115949,115950],{"class":116},"mujoco.mj_resetData(",[106,115952,30817],{"class":165},[106,115954,114566],{"class":116},[106,115956,30817],{"class":165},[106,115958,114571],{"class":116},[14,115960,115961],{},"把 MuJoCo 状态重置到默认状态。",[97,115963,115965],{"className":30372,"code":115964,"language":30374,"meta":25,"style":25},"self.data.qpos[:] = self.np_random.uniform(low=-0.1, high=0.1, size=self.model.nq)\n",[103,115966,115967],{"__ignoreMap":25},[106,115968,115969,115971,115973,115975,115977,115979,115981,115983,115985,115987,115989,115991,115993,115995,115997,115999,116001],{"class":108,"line":109},[106,115970,30817],{"class":165},[106,115972,114582],{"class":116},[106,115974,162],{"class":112},[106,115976,38867],{"class":165},[106,115978,114589],{"class":116},[106,115980,113747],{"class":5209},[106,115982,113750],{"class":112},[106,115984,86204],{"class":165},[106,115986,12428],{"class":116},[106,115988,113757],{"class":5209},[106,115990,162],{"class":112},[106,115992,86204],{"class":165},[106,115994,12428],{"class":116},[106,115996,31490],{"class":5209},[106,115998,162],{"class":112},[106,116000,30817],{"class":165},[106,116002,114614],{"class":116},[14,116004,115326,116005,116008,116009,116012,116013,116015],{},[103,116006,116007],{},"[:]"," 表示修改整个数组。",[103,116010,116011],{},"uniform(low=-0.1, high=0.1, size=self.model.nq)"," 表示生成 ",[103,116014,102135],{}," 个随机数，每个数在 -0.1 到 0.1 之间。",[97,116017,116019],{"className":30372,"code":116018,"language":30374,"meta":25,"style":25},"self.data.qvel[:] = 0.0\n",[103,116020,116021],{"__ignoreMap":25},[106,116022,116023,116025,116027,116029],{"class":108,"line":109},[106,116024,30817],{"class":165},[106,116026,114621],{"class":116},[106,116028,162],{"class":112},[106,116030,104746],{"class":165},[14,116032,116033],{},"把所有速度清零。也就是每次 reset 时，机械臂从静止开始。",[97,116035,116037],{"className":30372,"code":116036,"language":30374,"meta":25,"style":25},"self.steps = 0\nreturn self._get_obs(), {}\n",[103,116038,116039,116049],{"__ignoreMap":25},[106,116040,116041,116043,116045,116047],{"class":108,"line":109},[106,116042,30817],{"class":165},[106,116044,113691],{"class":116},[106,116046,162],{"class":112},[106,116048,47327],{"class":165},[106,116050,116051,116053,116055],{"class":108,"line":28},[106,116052,17039],{"class":112},[106,116054,38867],{"class":165},[106,116056,114661],{"class":116},[14,116058,116059],{},"步数清零，并返回初始观测和空 info。Gymnasium 要求 reset 返回两个值。",[97,116061,116062],{"className":30372,"code":115335,"language":30374,"meta":25,"style":25},[103,116063,116064],{"__ignoreMap":25},[106,116065,116066,116068,116070],{"class":108,"line":109},[106,116067,31941],{"class":112},[106,116069,114672],{"class":1955},[106,116071,114675],{"class":116},[14,116073,116074],{},"定义 step。外部算法传入动作，环境返回下一步结果。",[97,116076,116078],{"className":30372,"code":116077,"language":30374,"meta":25,"style":25},"action = np.asarray(action, dtype=np.float32)\n",[103,116079,116080],{"__ignoreMap":25},[106,116081,116082,116084,116086,116088,116090,116092],{"class":108,"line":109},[106,116083,107427],{"class":116},[106,116085,162],{"class":112},[106,116087,114684],{"class":116},[106,116089,93494],{"class":5209},[106,116091,162],{"class":112},[106,116093,113781],{"class":116},[14,116095,116096,116097,28379],{},"把传入的 action 转成 NumPy 数组，并指定类型为 ",[103,116098,115862],{},[97,116100,116102],{"className":30372,"code":116101,"language":30374,"meta":25,"style":25},"action = np.clip(action, self.action_space.low, self.action_space.high)\n",[103,116103,116104],{"__ignoreMap":25},[106,116105,116106,116108,116110,116112,116114,116116,116118],{"class":108,"line":109},[106,116107,107427],{"class":116},[106,116109,162],{"class":112},[106,116111,107432],{"class":116},[106,116113,30817],{"class":165},[106,116115,114703],{"class":116},[106,116117,30817],{"class":165},[106,116119,114708],{"class":116},[14,116121,116122],{},"把动作裁剪到动作空间允许范围内，避免传入过大控制值。",[97,116124,116126],{"className":30372,"code":116125,"language":30374,"meta":25,"style":25},"self.data.ctrl[:] = action\n",[103,116127,116128],{"__ignoreMap":25},[106,116129,116130,116132,116134,116136],{"class":108,"line":109},[106,116131,30817],{"class":165},[106,116133,114719],{"class":116},[106,116135,162],{"class":112},[106,116137,107455],{"class":116},[14,116139,116140],{},"把动作写入 MuJoCo 控制数组。因为这个环境有两个 actuator，所以 action 也必须是两个数。",[97,116142,116144],{"className":30372,"code":116143,"language":30374,"meta":25,"style":25},"for _ in range(self.frame_skip):\n    mujoco.mj_step(self.model, self.data)\n",[103,116145,116146,116162],{"__ignoreMap":25},[106,116147,116148,116150,116152,116154,116156,116158,116160],{"class":108,"line":109},[106,116149,3017],{"class":112},[106,116151,101486],{"class":116},[106,116153,26037],{"class":112},[106,116155,32437],{"class":165},[106,116157,117],{"class":116},[106,116159,30817],{"class":165},[106,116161,114740],{"class":116},[106,116163,116164,116167,116169,116171,116173],{"class":108,"line":28},[106,116165,116166],{"class":116},"    mujoco.mj_step(",[106,116168,30817],{"class":165},[106,116170,114566],{"class":116},[106,116172,30817],{"class":165},[106,116174,114571],{"class":116},[14,116176,116177,116178,116181,116182,116184,116185,28379],{},"一次环境 step 内部推进多个 MuJoCo 物理步。这里 ",[103,116179,116180],{},"frame_skip=5","，所以外部调用一次 ",[103,116183,113862],{},"，内部实际执行 5 次 ",[103,116186,101200],{},[97,116188,116190],{"className":30372,"code":116189,"language":30374,"meta":25,"style":25},"self.steps += 1\n",[103,116191,116192],{"__ignoreMap":25},[106,116193,116194,116196,116198,116200],{"class":108,"line":109},[106,116195,30817],{"class":165},[106,116197,113691],{"class":116},[106,116199,9470],{"class":112},[106,116201,55693],{"class":165},[14,116203,116204],{},"环境步数加 1。注意这里加的是环境 step，不是 MuJoCo 物理步。",[97,116206,116208],{"className":30372,"code":116207,"language":30374,"meta":25,"style":25},"obs = self._get_obs()\nreward = self._get_reward()\n",[103,116209,116210,116220],{"__ignoreMap":25},[106,116211,116212,116214,116216,116218],{"class":108,"line":109},[106,116213,110839],{"class":116},[106,116215,162],{"class":112},[106,116217,38867],{"class":165},[106,116219,114782],{"class":116},[106,116221,116222,116224,116226,116228],{"class":108,"line":28},[106,116223,110990],{"class":116},[106,116225,162],{"class":112},[106,116227,38867],{"class":165},[106,116229,114793],{"class":116},[14,116231,116232],{},"计算新的观测和奖励。",[97,116234,116236],{"className":30372,"code":116235,"language":30374,"meta":25,"style":25},"dist = float(np.linalg.norm(tip - target))\n",[103,116237,116238],{"__ignoreMap":25},[106,116239,116240,116242,116244,116246,116248,116250],{"class":108,"line":109},[106,116241,111581],{"class":116},[106,116243,162],{"class":112},[106,116245,109782],{"class":165},[106,116247,114836],{"class":116},[106,116249,649],{"class":112},[106,116251,114841],{"class":116},[14,116253,116254],{},"计算末端到目标的距离，并转换成 Python float。",[97,116256,116257],{"className":30372,"code":113662,"language":30374,"meta":25,"style":25},[103,116258,116259,116271],{"__ignoreMap":25},[106,116260,116261,116263,116265,116267,116269],{"class":108,"line":109},[106,116262,113669],{"class":116},[106,116264,162],{"class":112},[106,116266,113674],{"class":116},[106,116268,1027],{"class":112},[106,116270,113679],{"class":165},[106,116272,116273,116275,116277,116279,116281,116283,116285],{"class":108,"line":28},[106,116274,113684],{"class":116},[106,116276,162],{"class":112},[106,116278,38867],{"class":165},[106,116280,113691],{"class":116},[106,116282,1702],{"class":112},[106,116284,38867],{"class":165},[106,116286,113698],{"class":116},[14,116288,116289],{},"如果距离小于 0.05，任务成功结束。若步数达到上限，episode 被截断。",[97,116291,116293],{"className":30372,"code":116292,"language":30374,"meta":25,"style":25},"info = {\"distance\": dist}\nreturn obs, reward, terminated, truncated, info\n",[103,116294,116295,116308],{"__ignoreMap":25},[106,116296,116297,116300,116302,116304,116306],{"class":108,"line":109},[106,116298,116299],{"class":116},"info ",[106,116301,162],{"class":112},[106,116303,4440],{"class":116},[106,116305,114887],{"class":221},[106,116307,114890],{"class":116},[106,116309,116310,116312],{"class":108,"line":28},[106,116311,17039],{"class":112},[106,116313,114897],{"class":116},[14,116315,116316,116319],{},[103,116317,116318],{},"info"," 用来放调试信息。最后返回 Gymnasium 标准五元组。",[97,116321,116323],{"className":30372,"code":116322,"language":30374,"meta":25,"style":25},"env = ReacherEnv()\nobs, info = env.reset(seed=0)\n",[103,116324,116325,116334],{"__ignoreMap":25},[106,116326,116327,116330,116332],{"class":108,"line":109},[106,116328,116329],{"class":116},"env ",[106,116331,162],{"class":112},[106,116333,114927],{"class":116},[106,116335,116336,116338,116340,116342,116344,116346,116348],{"class":108,"line":28},[106,116337,113385],{"class":116},[106,116339,162],{"class":112},[106,116341,114937],{"class":116},[106,116343,114551],{"class":5209},[106,116345,162],{"class":112},[106,116347,308],{"class":165},[106,116349,123],{"class":116},[14,116351,116352,116353,116356],{},"创建环境并重置。",[103,116354,116355],{},"seed=0"," 表示使用固定随机种子，方便复现实验。",[97,116358,116360],{"className":30372,"code":116359,"language":30374,"meta":25,"style":25},"action = env.action_space.sample()\n",[103,116361,116362],{"__ignoreMap":25},[106,116363,116364,116366,116368],{"class":108,"line":109},[106,116365,107427],{"class":116},[106,116367,162],{"class":112},[106,116369,115006],{"class":116},[14,116371,116372],{},"从动作空间里随机采样一个动作。这里还没有训练策略，所以用随机动作测试环境是否能跑。",[48,116374,102301],{"id":102300},[14,116376,105469],{},[97,116378,116381],{"className":116379,"code":116380,"language":5180,"meta":25},[5178],"initial obs shape: (10,)\ninitial info: {}\nstep: 0 reward: ...\n...\ntotal_reward: ...\n",[103,116382,116380],{"__ignoreMap":25},[14,116384,116385],{},"这个环境已经具备强化学习环境的基本结构。",[14,116387,116388],{},"主函数里使用随机动作：",[97,116390,116391],{"className":30372,"code":116359,"language":30374,"meta":25,"style":25},[103,116392,116393],{"__ignoreMap":25},[106,116394,116395,116397,116399],{"class":108,"line":109},[106,116396,107427],{"class":116},[106,116398,162],{"class":112},[106,116400,115006],{"class":116},[14,116402,116403],{},"所以每次运行的 reward 可能不同。这里的目标不是训练成功，而是验证环境接口能正常工作。",[48,116405,102333],{"id":102332},[60,116407,116408,116411,116417,116426,116435,116444,116450],{},[63,116409,116410],{},"运行程序。",[63,116412,116413,116414,28379],{},"确认 ",[103,116415,116416],{},"obs.shape == (10,)",[63,116418,111166,116419,116422,116423,28379],{},[103,116420,116421],{},"env.action_space","，应类似 ",[103,116424,116425],{},"Box(-1.0, 1.0, (2,), float32)",[63,116427,105570,116428,116431,116432,28379],{},[103,116429,116430],{},"self.max_steps = 10","，确认环境会更快 ",[103,116433,116434],{},"truncated=True",[63,116436,102396,116437,102399,116440,116443],{},[103,116438,116439],{},"terminated = dist \u003C 0.05",[103,116441,116442],{},"dist \u003C 0.2","，观察是否更容易结束。",[63,116445,102396,116446,116449],{},[103,116447,116448],{},"self.frame_skip = 1","，观察每次 step 的物理推进变少。",[63,116451,116452,116453,116455,116456,116459],{},"在 ",[103,116454,116318],{}," 里加入 ",[103,116457,116458],{},"\"is_success\": dist \u003C 0.05","，模拟常见机器人环境输出。",[48,116461,102438],{"id":102437},[77,116463,116465],{"id":116464},"gymnasium-返回值数量不匹配","Gymnasium 返回值数量不匹配",[14,116467,116468,116469,116471],{},"Gymnasium 的 ",[103,116470,107119],{}," 返回 5 个值:",[97,116473,116475],{"className":30372,"code":116474,"language":30374,"meta":25,"style":25},"obs, reward, terminated, truncated, info\n",[103,116476,116477],{"__ignoreMap":25},[106,116478,116479],{"class":108,"line":109},[106,116480,116474],{"class":116},[14,116482,116483],{},"不是旧 Gym 的 4 个值。",[77,116485,116487,116490],{"id":116486},"datactrl-action-维度错误",[103,116488,116489],{},"data.ctrl[:] = action"," 维度错误",[14,116492,102508],{},[97,116494,116496],{"className":30372,"code":116495,"language":30374,"meta":25,"style":25},"print(self.model.nu)\nprint(action.shape)\n",[103,116497,116498,116509],{"__ignoreMap":25},[106,116499,116500,116502,116504,116506],{"class":108,"line":109},[106,116501,30409],{"class":165},[106,116503,117],{"class":116},[106,116505,30817],{"class":165},[106,116507,116508],{"class":116},".model.nu)\n",[106,116510,116511,116513],{"class":108,"line":28},[106,116512,30409],{"class":165},[106,116514,116515],{"class":116},"(action.shape)\n",[14,116517,116518],{},"两者必须匹配。",[77,116520,116522],{"id":116521},"reset-后-site-坐标不更新","reset 后 site 坐标不更新",[14,116524,102447],{},[97,116526,116528],{"className":30372,"code":116527,"language":30374,"meta":25,"style":25},"mujoco.mj_forward(self.model, self.data)\n",[103,116529,116530],{"__ignoreMap":25},[106,116531,116532,116535,116537,116539,116541],{"class":108,"line":109},[106,116533,116534],{"class":116},"mujoco.mj_forward(",[106,116536,30817],{"class":165},[106,116538,114566],{"class":116},[106,116540,30817],{"class":165},[106,116542,114571],{"class":116},[77,116544,116546,116548],{"id":116545},"observation_space-维度和-obs-不一致",[103,116547,113585],{}," 维度和 obs 不一致",[14,116550,102560],{},[97,116552,116554],{"className":30372,"code":116553,"language":30374,"meta":25,"style":25},"obs = self._get_obs()\nprint(obs.shape)\nprint(self.observation_space.shape)\n",[103,116555,116556,116566,116573],{"__ignoreMap":25},[106,116557,116558,116560,116562,116564],{"class":108,"line":109},[106,116559,110839],{"class":116},[106,116561,162],{"class":112},[106,116563,38867],{"class":165},[106,116565,114782],{"class":116},[106,116567,116568,116570],{"class":108,"line":28},[106,116569,30409],{"class":165},[106,116571,116572],{"class":116},"(obs.shape)\n",[106,116574,116575,116577,116579,116581],{"class":108,"line":1172},[106,116576,30409],{"class":165},[106,116578,117],{"class":116},[106,116580,30817],{"class":165},[106,116582,116583],{"class":116},".observation_space.shape)\n",[14,116585,116586],{},"两者必须一致。本章观测是：",[97,116588,116591],{"className":116589,"code":116590,"language":5180,"meta":25},[5178],"qpos 2 + qvel 2 + tip 3 + target 3 = 10\n",[103,116592,116590],{"__ignoreMap":25},[77,116594,116596],{"id":116595},"action-超过范围","action 超过范围",[14,116598,116599],{},"外部算法可能传入超过 action space 的值，所以 step 里要写：",[97,116601,116602],{"className":30372,"code":116101,"language":30374,"meta":25,"style":25},[103,116603,116604],{"__ignoreMap":25},[106,116605,116606,116608,116610,116612,116614,116616,116618],{"class":108,"line":109},[106,116607,107427],{"class":116},[106,116609,162],{"class":112},[106,116611,107432],{"class":116},[106,116613,30817],{"class":165},[106,116615,114703],{"class":116},[106,116617,30817],{"class":165},[106,116619,114708],{"class":116},[14,116621,116622,116623,28379],{},"这能避免无效动作直接写入 ",[103,116624,101061],{},[77,116626,116628],{"id":116627},"忘记返回-info","忘记返回 info",[14,116630,116468,116631,101003,116633,116635],{},[103,116632,70050],{},[103,116634,107119],{}," 都会返回 info：",[97,116637,116638],{"className":30372,"code":113378,"language":30374,"meta":25,"style":25},[103,116639,116640,116648],{"__ignoreMap":25},[106,116641,116642,116644,116646],{"class":108,"line":109},[106,116643,113385],{"class":116},[106,116645,162],{"class":112},[106,116647,113390],{"class":116},[106,116649,116650,116652,116654],{"class":108,"line":28},[106,116651,113395],{"class":116},[106,116653,162],{"class":112},[106,116655,113400],{"class":116},[14,116657,116658,116659,28379],{},"即使暂时没有额外信息，也返回 ",[103,116660,32453],{},[48,116662,116664],{"id":116663},"_8下一步怎么接强化学习","8.下一步怎么接强化学习",[14,116666,116667],{},"这个环境已经可以被很多强化学习库包装，但正式训练前还应补充：",[60,116669,116670,116673,116676,116679,116682,116685],{},[63,116671,116672],{},"更稳定的 reward。",[63,116674,116675],{},"合理的 episode 长度。",[63,116677,116678],{},"可重复的随机目标采样。",[63,116680,116681],{},"render 接口。",[63,116683,116684],{},"环境注册代码。",[63,116686,116687],{},"单元测试，检查 reset\u002Fstep 返回值维度和 dtype。",[14,116689,116690],{},"如果只是自己写训练循环，最小形式是：",[97,116692,116694],{"className":30372,"code":116693,"language":30374,"meta":25,"style":25},"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",[103,116695,116696,116704,116720,116724,116740,116749,116758,116768],{"__ignoreMap":25},[106,116697,116698,116700,116702],{"class":108,"line":109},[106,116699,116329],{"class":116},[106,116701,162],{"class":112},[106,116703,114927],{"class":116},[106,116705,116706,116708,116710,116712,116714,116716,116718],{"class":108,"line":28},[106,116707,113385],{"class":116},[106,116709,162],{"class":112},[106,116711,114937],{"class":116},[106,116713,114551],{"class":5209},[106,116715,162],{"class":112},[106,116717,308],{"class":165},[106,116719,123],{"class":116},[106,116721,116722],{"class":108,"line":1172},[106,116723,2392],{"emptyLinePlaceholder":33},[106,116725,116726,116728,116730,116732,116734,116736,116738],{"class":108,"line":1187},[106,116727,3017],{"class":112},[106,116729,101486],{"class":116},[106,116731,26037],{"class":112},[106,116733,32437],{"class":165},[106,116735,117],{"class":116},[106,116737,6403],{"class":165},[106,116739,30780],{"class":116},[106,116741,116742,116745,116747],{"class":108,"line":1193},[106,116743,116744],{"class":116},"    action ",[106,116746,162],{"class":112},[106,116748,115006],{"class":116},[106,116750,116751,116754,116756],{"class":108,"line":1207},[106,116752,116753],{"class":116},"    obs, reward, terminated, truncated, info ",[106,116755,162],{"class":112},[106,116757,113400],{"class":116},[106,116759,116760,116762,116764,116766],{"class":108,"line":1213},[106,116761,3093],{"class":112},[106,116763,115072],{"class":116},[106,116765,115075],{"class":112},[106,116767,115078],{"class":116},[106,116769,116770,116773,116775],{"class":108,"line":1304},[106,116771,116772],{"class":116},"        obs, info ",[106,116774,162],{"class":112},[106,116776,113390],{"class":116},[48,116778,116780],{"id":116779},"_9本章小结","9.本章小结",[14,116782,116783],{},"Gymnasium 封装并没有改变 MuJoCo 的本质。它只是把前面章节的流程整理成标准接口：",[97,116785,116788],{"className":116786,"code":116787,"language":5180,"meta":25},[5178],"reset:\n  mj_resetData → 设置初始状态 → mj_forward → obs\n\nstep:\n  action → data.ctrl → mj_step → obs\u002Freward\u002Fterminated\u002Ftruncated\u002Finfo\n",[103,116789,116787],{"__ignoreMap":25},[14,116791,116792],{},"掌握这个接口后，你就可以把 MuJoCo 模型接入强化学习、模仿学习和数据采集流程。",[5119,116794,116795],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":28,"depth":28,"links":116797},[116798,116799,116800,116807,116811,116812,116813,116823,116824],{"id":100631,"depth":28,"text":100632},{"id":100754,"depth":28,"text":100755},{"id":101029,"depth":28,"text":101030,"children":116801},[116802,116804,116806],{"id":113609,"depth":1172,"text":116803},"terminated 和 truncated 的区别",{"id":113712,"depth":1172,"text":116805},"observation_space 和 action_space",{"id":113839,"depth":1172,"text":113840},{"id":101237,"depth":28,"text":101238,"children":116808},[116809,116810],{"id":101557,"depth":1172,"text":101557},{"id":101693,"depth":1172,"text":101693},{"id":102300,"depth":28,"text":102301},{"id":102332,"depth":28,"text":102333},{"id":102437,"depth":28,"text":102438,"children":116814},[116815,116816,116818,116819,116821,116822],{"id":116464,"depth":1172,"text":116465},{"id":116486,"depth":1172,"text":116817},"data.ctrl[:] = action 维度错误",{"id":116521,"depth":1172,"text":116522},{"id":116545,"depth":1172,"text":116820},"observation_space 维度和 obs 不一致",{"id":116595,"depth":1172,"text":116596},{"id":116627,"depth":1172,"text":116628},{"id":116663,"depth":28,"text":116664},{"id":116779,"depth":28,"text":116780},{},"\u002Fwiki\u002F2025-05-17-mujoco\u002Fch8-gymnasium",{"title":113362,"description":25},"wiki\u002F2025-05-17-mujoco学习\u002Fch8-Gymnasium接口基础","KSF1Xw_aHmvJI12WCxfcd5RyipozYaMsgXOORoNp9lo",{"id":116831,"title":116832,"body":116833,"description":117256,"extension":31,"meta":117257,"navigation":33,"path":117258,"seo":117259,"stem":117260,"__hash__":117261},"wiki\u002Fwiki\u002F2025-05-17-mujoco学习\u002Findex.md","mujoco学习",{"type":7,"value":116834,"toc":117246},[116835,116839,116842,116845,116865,116871,116877,116887,116890,116893,116913,116916,116920,116923,116929,116932,116946,116949,116952,117026,117029,117035,117038,117061,117064,117114,117117,117123,117126,117129,117132,117151,117154,117160,117163,117166,117169,117189,117192,117195,117198,117243],[10,116836,116838],{"id":116837},"mujoco-学习","MuJoCo 学习",[14,116840,116841],{},"初版",[14,116843,116844],{},"这套笔记面向从零开始学习 MuJoCo 的工程复现路线。目标不是只让你复制代码跑通，而是让你看懂：",[60,116846,116847,116850,116853,116862],{},[63,116848,116849],{},"MuJoCo 模型文件在描述什么。",[63,116851,116852],{},"Python 代码怎样读取和推进仿真。",[63,116854,116855,329,116857,329,116859,116861],{},[103,116856,104015],{},[103,116858,104345],{},[103,116860,104348],{}," 这些数组为什么重要。",[63,116863,116864],{},"如何从一个会掉落的小方块，逐步搭出 Cartpole、Reacher 和 Gymnasium 风格环境。",[14,116866,116867,116868,116870],{},"默认环境为 Fedora 44、Python >= 3.10、",[103,116869,101012],{}," 官方 Python bindings。",[14,116872,116873,116874,116876],{},"注意：本文禁止使用 ",[103,116875,100997],{},"。所有示例均使用：",[97,116878,116879],{"className":30372,"code":101563,"language":30374,"meta":25,"style":25},[103,116880,116881],{"__ignoreMap":25},[106,116882,116883,116885],{"class":108,"line":109},[106,116884,30386],{"class":112},[106,116886,101286],{"class":116},[48,116888,116889],{"id":116889},"适合谁阅读",[14,116891,116892],{},"如果你符合下面任意一种情况，可以从第 1 章开始按顺序学：",[60,116894,116895,116898,116901,116904],{},[63,116896,116897],{},"没学过 MuJoCo，只会一点 Python。",[63,116899,116900],{},"看过强化学习环境，但不知道 MuJoCo 环境是怎么写出来的。",[63,116902,116903],{},"想复现机器人控制、模仿学习、VLA 数据采集，但对仿真模型没有概念。",[63,116905,116906,116907,116909,116910,116912],{},"以前接触过 ",[103,116908,100997],{},"，现在想迁移到官方 ",[103,116911,101006],{}," Python bindings。",[14,116914,116915],{},"阅读前只需要知道 Python 的变量、函数、列表或数组大概是什么。NumPy 不熟也没关系，教程会尽量解释每个数组的含义。",[48,116917,116919],{"id":116918},"mujoco-到底是什么","MuJoCo 到底是什么",[14,116921,116922],{},"MuJoCo 是一个物理仿真引擎。你可以把它理解成一个“机器人和物体的虚拟实验室”：",[97,116924,116927],{"className":116925,"code":116926,"language":5180,"meta":25},[5178],"你写 XML 描述世界里有什么\n          ↓\nMuJoCo 编译成物理模型\n          ↓\nPython 程序给关节或电机输入控制量\n          ↓\nMuJoCo 按物理规律更新位置、速度、碰撞、力\n          ↓\n你读取状态、计算奖励、保存数据或训练策略\n",[103,116928,116926],{"__ignoreMap":25},[14,116930,116931],{},"在机器人、强化学习和具身智能里，MuJoCo 常用于：",[60,116933,116934,116937,116940,116943],{},[63,116935,116936],{},"搭建机械臂、小车、摆杆、多足机器人等模型。",[63,116938,116939],{},"快速测试控制算法，不必一开始就上真实机器人。",[63,116941,116942],{},"生成强化学习环境。",[63,116944,116945],{},"采集状态、动作、图像、奖励等训练数据。",[48,116947,116948],{"id":116948},"学习前的心智模型",[14,116950,116951],{},"新手最容易卡在“XML 和 Python 代码到底谁负责什么”。可以先记住这个分工：",[254,116953,116954,116966],{},[257,116955,116956],{},[260,116957,116958,116961,116964],{},[263,116959,116960],{"align":23729},"部分",[263,116962,116963],{"align":23729},"负责什么",[263,116965,21180],{"align":23729},[301,116967,116968,116979,116991,117003,117015],{},[260,116969,116970,116973,116976],{},[306,116971,116972],{"align":23729},"MJCF XML",[306,116974,116975],{"align":23729},"定义世界和机器人结构",[306,116977,116978],{"align":23729},"地面、盒子、关节、电机、摄像头",[260,116980,116981,116985,116988],{},[306,116982,116983],{"align":23729},[103,116984,100694],{},[306,116986,116987],{"align":23729},"编译后的静态模型",[306,116989,116990],{"align":23729},"有几个关节、有几个电机、时间步长是多少",[260,116992,116993,116997,117000],{},[306,116994,116995],{"align":23729},[103,116996,100704],{},[306,116998,116999],{"align":23729},"运行中的动态状态",[306,117001,117002],{"align":23729},"当前时间、位置、速度、电机输入",[260,117004,117005,117009,117012],{},[306,117006,117007],{"align":23729},[103,117008,101200],{},[306,117010,117011],{"align":23729},"推进一步物理仿真",[306,117013,117014],{"align":23729},"根据重力、力、碰撞更新状态",[260,117016,117017,117020,117023],{},[306,117018,117019],{"align":23729},"Viewer \u002F Renderer",[306,117021,117022],{"align":23729},"把仿真显示出来",[306,117024,117025],{"align":23729},"打开窗口或保存图片",[14,117027,117028],{},"一句话总结：",[97,117030,117033],{"className":117031,"code":117032,"language":5180,"meta":25},[5178],"XML 决定“有什么”，MjModel 记住“结构”，MjData 记录“现在怎样”，mj_step 让时间往前走。\n",[103,117034,117032],{"__ignoreMap":25},[14,117036,117037],{},"参考来源：",[1124,117039,117040,117047,117054],{},[63,117041,117042,117043],{},"MuJoCo Python 官方文档：",[355,117044,117045],{"href":117045,"rel":117046},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Fpython.html",[23858],[63,117048,117049,117050],{},"MuJoCo XML Reference：",[355,117051,117052],{"href":117052,"rel":117053},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002FXMLreference.html",[23858],[63,117055,117056,117057],{},"MuJoCo Overview：",[355,117058,117059],{"href":117059,"rel":117060},"https:\u002F\u002Fmujoco.readthedocs.io\u002Fen\u002Fstable\u002Foverview.html",[23858],[48,117062,117063],{"id":117063},"章节目录",[60,117065,117066,117072,117078,117084,117090,117096,117102,117108],{},[63,117067,117068],{},[355,117069,117071],{"href":117070},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch1-huan-jing-an-zhuang-yu-di-yi-ge-mujoco-cheng-xu","环境安装与第一个 MuJoCo 程序",[63,117073,117074],{},[355,117075,117077],{"href":117076},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch2-xml-yu-mjcf-wu-li-jian-mo-ji-chu","XML 与 MJCF 物理建模基础",[63,117079,117080],{},[355,117081,117083],{"href":117082},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch3-python-kong-zhi-jie-kou","Python 控制接口：读取状态与推进仿真",[63,117085,117086],{},[355,117087,117089],{"href":117088},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch4-guan-jie-actuator-yu-li-kong-zhi","关节、Actuator 与力控制",[63,117091,117092],{},[355,117093,117095],{"href":117094},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch5-viewer-yu-renderer","Viewer 可视化与 Renderer 离屏渲染",[63,117097,117098],{},[355,117099,117101],{"href":117100},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch6-cartpole-kong-zhi-ren-wu","控制任务：Cartpole",[63,117103,117104],{},[355,117105,117107],{"href":117106},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch7-reacher-kong-zhi-ren-wu","控制任务：Reacher 机械臂到达目标",[63,117109,117110],{},[355,117111,117113],{"href":117112},"\u002Fwiki\u002F2025-05-17-mujoco-xue-xi\u002Fch8-gymnasium-jie-kou-ji-chu","Gymnasium 风格强化学习接口基础",[48,117115,117116],{"id":117116},"推荐学习路线",[97,117118,117121],{"className":117119,"code":117120,"language":5180,"meta":25},[5178],"环境安装\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",[103,117122,117120],{"__ignoreMap":25},[14,117124,117125],{},"不要跳过第 1 到第 4 章。后面的 Cartpole、Reacher 和 Gymnasium 环境，本质上都是在反复使用前面这几个核心概念。",[48,117127,117128],{"id":117128},"建议的目录结构",[14,117130,117131],{},"为了避免代码散落，建议你在任意工作目录下新建一个学习文件夹：",[97,117133,117135],{"className":23815,"code":117134,"language":23817,"meta":25,"style":25},"mkdir -p mujoco_tutorial\ncd mujoco_tutorial\n",[103,117136,117137,117145],{"__ignoreMap":25},[106,117138,117139,117141,117143],{"class":108,"line":109},[106,117140,101251],{"class":1955},[106,117142,29210],{"class":165},[106,117144,101256],{"class":221},[106,117146,117147,117149],{"class":108,"line":28},[106,117148,101261],{"class":165},[106,117150,101256],{"class":221},[14,117152,117153],{},"每一章的代码都单独保存：",[97,117155,117158],{"className":117156,"code":117157,"language":5180,"meta":25},[5178],"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",[103,117159,117157],{"__ignoreMap":25},[14,117161,117162],{},"这样出错时，你可以确认到底是哪一章的代码有问题。",[48,117164,117165],{"id":117165},"学习方法",[14,117167,117168],{},"每章建议按这个顺序操作：",[60,117170,117171,117174,117177,117180,117183,117186],{},[63,117172,117173],{},"先读“核心概念解释”，不用追求一次看懂所有细节。",[63,117175,117176],{},"复制最小可运行代码，保存成指定文件。",[63,117178,117179],{},"运行代码，确认没有报错。",[63,117181,117182],{},"对照“运行结果说明”理解输出。",[63,117184,117185],{},"做“验证步骤”，主动改一两个参数。",[63,117187,117188],{},"遇到报错先看“常见错误与解决方案”。",[14,117190,117191],{},"不要只看不跑。MuJoCo 的学习重点是“改参数以后观察物理结果”，比如把重力变小、把电机力变大、把初始高度变高。只要你能预测并解释这些变化，就说明你真正理解了。",[48,117193,117194],{"id":117194},"全局排错顺序",[14,117196,117197],{},"遇到问题时，按下面顺序查：",[60,117199,117200,117206,117212,117217,117220,117223,117230,117240],{},[63,117201,117202,117203],{},"Python 环境是否激活：",[103,117204,117205],{},"which python",[63,117207,117208,117209],{},"MuJoCo 是否能导入：",[103,117210,117211],{},"python -c \"import mujoco; print(mujoco.__version__)\"",[63,117213,117214,117215],{},"是否误装了 ",[103,117216,100997],{},[63,117218,117219],{},"XML 标签是否闭合、属性是否拼写正确",[63,117221,117222],{},"actuator 引用的 joint 名字是否存在",[63,117224,117225,117227,117228],{},[103,117226,101061],{}," 的长度是否等于 ",[103,117229,102143],{},[63,117231,105570,117232,82533,117234,117236,117237],{},[103,117233,104015],{},[103,117235,104345],{}," 后是否调用了 ",[103,117238,117239],{},"mujoco.mj_forward",[63,117241,117242],{},"图形显示问题是否和 OpenGL、GLFW、远程服务器有关",[5119,117244,117245],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":25,"searchDepth":28,"depth":28,"links":117247},[117248,117249,117250,117251,117252,117253,117254,117255],{"id":116889,"depth":28,"text":116889},{"id":116918,"depth":28,"text":116919},{"id":116948,"depth":28,"text":116948},{"id":117063,"depth":28,"text":117063},{"id":117116,"depth":28,"text":117116},{"id":117128,"depth":28,"text":117128},{"id":117165,"depth":28,"text":117165},{"id":117194,"depth":28,"text":117194},"仿真搭建。",{"category":23371},"\u002Fwiki\u002F2025-05-17-mujoco",{"title":116832,"description":117256},"wiki\u002F2025-05-17-mujoco学习\u002Findex","Y9Rv9JgXjVCbeZHS_U4izJnnZcIId184s39EpFx-Co4",{"id":117263,"title":117264,"body":117265,"description":30,"extension":31,"meta":117720,"navigation":33,"path":117721,"seo":117722,"stem":117723,"__hash__":117724},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）.md","1. 最常用的基本操作（更新）",{"type":7,"value":117266,"toc":117718},[117267,117270,117273,117279,117715],[10,117268,117264],{"id":117269},"_1-最常用的基本操作更新",[14,117271,117272],{},"装linux系统教程：",[14,117274,117275],{},[355,117276,117277],{"href":117277,"rel":117278},"https:\u002F\u002Fme.tungchiahui.cn\u002Fblog\u002Flinux-tutorial\u002F",[23858],[97,117280,117284],{"className":117281,"code":117282,"language":117283,"meta":25,"style":25},"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",[103,117285,117286,117291,117296,117305,117310,117319,117324,117344,117349,117360,117365,117374,117379,117407,117412,117431,117436,117455,117459,117464,117480,117484,117489,117519,117523,117528,117544,117548,117553,117568,117572,117577,117593,117597,117602,117614,117626,117630,117635,117652,117656,117661,117679,117683,117688,117697,117701,117706],{"__ignoreMap":25},[106,117287,117288],{"class":108,"line":109},[106,117289,117290],{"class":175},"#更新相关的知识\n",[106,117292,117293],{"class":108,"line":28},[106,117294,117295],{"class":175},"# 更新软件包列表（从服务器获取最新软件信息）\n",[106,117297,117298,117300,117303],{"class":108,"line":1172},[106,117299,24570],{"class":1955},[106,117301,117302],{"class":221}," apt",[106,117304,26236],{"class":221},[106,117306,117307],{"class":108,"line":1187},[106,117308,117309],{"class":175},"# 升级所有可更新的软件包（不删除旧包）\n",[106,117311,117312,117314,117316],{"class":108,"line":1193},[106,117313,24570],{"class":1955},[106,117315,117302],{"class":221},[106,117317,117318],{"class":221}," upgrade\n",[106,117320,117321],{"class":108,"line":1207},[106,117322,117323],{"class":175},"#更新和升级软件包\n",[106,117325,117326,117328,117330,117333,117335,117337,117339,117342],{"class":108,"line":1213},[106,117327,24570],{"class":1955},[106,117329,117302],{"class":221},[106,117331,117332],{"class":221}," update",[106,117334,26184],{"class":116},[106,117336,24570],{"class":1955},[106,117338,117302],{"class":221},[106,117340,117341],{"class":221}," upgrade",[106,117343,100966],{"class":165},[106,117345,117346],{"class":108,"line":1304},[106,117347,117348],{"class":175},"#列出可更新的软件包及版本信息\n",[106,117350,117351,117354,117357],{"class":108,"line":1310},[106,117352,117353],{"class":1955},"apt",[106,117355,117356],{"class":221}," list",[106,117358,117359],{"class":165}," --upgradable\n",[106,117361,117362],{"class":108,"line":1322},[106,117363,117364],{"class":175},"#彻底升级（处理依赖关系，可能删除旧包）\n",[106,117366,117367,117369,117371],{"class":108,"line":1604},[106,117368,24570],{"class":1955},[106,117370,117302],{"class":221},[106,117372,117373],{"class":221}," full-upgrade\n",[106,117375,117376],{"class":108,"line":1609},[106,117377,117378],{"class":175},"#设置指定版本\n",[106,117380,117381,117383,117385,117387,117389,117392,117394,117396,117398,117400,117403,117405],{"class":108,"line":1615},[106,117382,24570],{"class":1955},[106,117384,117302],{"class":221},[106,117386,23827],{"class":221},[106,117388,28896],{"class":112},[106,117390,117391],{"class":221},"package_nam",[106,117393,191],{"class":116},[106,117395,1077],{"class":112},[106,117397,162],{"class":221},[106,117399,1027],{"class":112},[106,117401,117402],{"class":221},"version_numbe",[106,117404,787],{"class":116},[106,117406,51301],{"class":112},[106,117408,117409],{"class":108,"line":1620},[106,117410,117411],{"class":175},"#只安装软件包不升级\n",[106,117413,117414,117416,117418,117420,117422,117424,117426,117428],{"class":108,"line":1634},[106,117415,24570],{"class":1955},[106,117417,117302],{"class":221},[106,117419,23827],{"class":221},[106,117421,28896],{"class":112},[106,117423,117391],{"class":221},[106,117425,191],{"class":116},[106,117427,1077],{"class":112},[106,117429,117430],{"class":165}," --no-upgrade\n",[106,117432,117433],{"class":108,"line":1639},[106,117434,117435],{"class":175},"#只升级，不存在就不安装\n",[106,117437,117438,117440,117442,117444,117446,117448,117450,117452],{"class":108,"line":1645},[106,117439,24570],{"class":1955},[106,117441,117302],{"class":221},[106,117443,23827],{"class":221},[106,117445,28896],{"class":112},[106,117447,117391],{"class":221},[106,117449,191],{"class":116},[106,117451,1077],{"class":112},[106,117453,117454],{"class":165}," --only-upgrade\n",[106,117456,117457],{"class":108,"line":1666},[106,117458,2392],{"emptyLinePlaceholder":33},[106,117460,117461],{"class":108,"line":1671},[106,117462,117463],{"class":175},"#安装指定的软件命令\n",[106,117465,117466,117468,117470,117472,117474,117476,117478],{"class":108,"line":1685},[106,117467,24570],{"class":1955},[106,117469,117302],{"class":221},[106,117471,23827],{"class":221},[106,117473,28896],{"class":112},[106,117475,117391],{"class":221},[106,117477,191],{"class":116},[106,117479,51301],{"class":112},[106,117481,117482],{"class":108,"line":1690},[106,117483,2392],{"emptyLinePlaceholder":33},[106,117485,117486],{"class":108,"line":1719},[106,117487,117488],{"class":175},"#安装多个软件包\n",[106,117490,117491,117493,117495,117497,117499,117502,117505,117507,117509,117512,117514,117516],{"class":108,"line":1724},[106,117492,24570],{"class":1955},[106,117494,117302],{"class":221},[106,117496,23827],{"class":221},[106,117498,28896],{"class":112},[106,117500,117501],{"class":221},"package_",[106,117503,117504],{"class":112},"1>",[106,117506,28896],{"class":112},[106,117508,117501],{"class":221},[106,117510,117511],{"class":112},"2>",[106,117513,28896],{"class":112},[106,117515,117501],{"class":221},[106,117517,117518],{"class":112},"3>\n",[106,117520,117521],{"class":108,"line":1741},[106,117522,2392],{"emptyLinePlaceholder":33},[106,117524,117525],{"class":108,"line":1746},[106,117526,117527],{"class":175},"#更新指定的软件命令\n",[106,117529,117530,117532,117534,117536,117538,117540,117542],{"class":108,"line":1751},[106,117531,24570],{"class":1955},[106,117533,117302],{"class":221},[106,117535,117332],{"class":221},[106,117537,28896],{"class":112},[106,117539,117391],{"class":221},[106,117541,191],{"class":116},[106,117543,51301],{"class":112},[106,117545,117546],{"class":108,"line":1756},[106,117547,2392],{"emptyLinePlaceholder":33},[106,117549,117550],{"class":108,"line":1770},[106,117551,117552],{"class":175},"#显示软件包具体信息,例如：版本号，安装大小，依赖关系等等\n",[106,117554,117555,117557,117560,117562,117564,117566],{"class":108,"line":1775},[106,117556,117353],{"class":1955},[106,117558,117559],{"class":221}," show",[106,117561,28896],{"class":112},[106,117563,117391],{"class":221},[106,117565,191],{"class":116},[106,117567,51301],{"class":112},[106,117569,117570],{"class":108,"line":2569},[106,117571,2392],{"emptyLinePlaceholder":33},[106,117573,117574],{"class":108,"line":2583},[106,117575,117576],{"class":175},"#删除软件包命令\n",[106,117578,117579,117581,117583,117585,117587,117589,117591],{"class":108,"line":2591},[106,117580,24570],{"class":1955},[106,117582,117302],{"class":221},[106,117584,26073],{"class":221},[106,117586,28896],{"class":112},[106,117588,117391],{"class":221},[106,117590,191],{"class":116},[106,117592,51301],{"class":112},[106,117594,117595],{"class":108,"line":2596},[106,117596,2392],{"emptyLinePlaceholder":33},[106,117598,117599],{"class":108,"line":2602},[106,117600,117601],{"class":175},"# 清理旧版本和缓存（释放磁盘空间）\n",[106,117603,117604,117606,117608,117611],{"class":108,"line":2608},[106,117605,24570],{"class":1955},[106,117607,117302],{"class":221},[106,117609,117610],{"class":221}," autoremove",[106,117612,117613],{"class":175},"  # 删除不再需要的依赖和库文件\n",[106,117615,117616,117618,117620,117623],{"class":108,"line":2613},[106,117617,24570],{"class":1955},[106,117619,117302],{"class":221},[106,117621,117622],{"class":221}," clean",[106,117624,117625],{"class":175},"       # 清理下载的缓存包\n",[106,117627,117628],{"class":108,"line":7941},[106,117629,2392],{"emptyLinePlaceholder":33},[106,117631,117632],{"class":108,"line":7965},[106,117633,117634],{"class":175},"#移除软件包及配置文件\n",[106,117636,117637,117639,117641,117644,117646,117648,117650],{"class":108,"line":7970},[106,117638,24570],{"class":1955},[106,117640,117302],{"class":221},[106,117642,117643],{"class":221}," purge",[106,117645,28896],{"class":112},[106,117647,117391],{"class":221},[106,117649,191],{"class":116},[106,117651,51301],{"class":112},[106,117653,117654],{"class":108,"line":7976},[106,117655,2392],{"emptyLinePlaceholder":33},[106,117657,117658],{"class":108,"line":8003},[106,117659,117660],{"class":175},"#查找软件包命令\n",[106,117662,117663,117665,117667,117670,117672,117675,117677],{"class":108,"line":8008},[106,117664,24570],{"class":1955},[106,117666,117302],{"class":221},[106,117668,117669],{"class":221}," search",[106,117671,28896],{"class":112},[106,117673,117674],{"class":221},"keywor",[106,117676,431],{"class":116},[106,117678,51301],{"class":112},[106,117680,117681],{"class":108,"line":8014},[106,117682,2392],{"emptyLinePlaceholder":33},[106,117684,117685],{"class":108,"line":8026},[106,117686,117687],{"class":175},"#列出所有已安装的包\n",[106,117689,117690,117692,117694],{"class":108,"line":8038},[106,117691,117353],{"class":1955},[106,117693,117356],{"class":221},[106,117695,117696],{"class":165}," --installed\n",[106,117698,117699],{"class":108,"line":8050},[106,117700,2392],{"emptyLinePlaceholder":33},[106,117702,117703],{"class":108,"line":9709},[106,117704,117705],{"class":175},"#列出所有已安装的包的版本信息\n",[106,117707,117708,117710,117712],{"class":108,"line":9734},[106,117709,117353],{"class":1955},[106,117711,117356],{"class":221},[106,117713,117714],{"class":165}," --all-versions\n",[5119,117716,117717],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":28,"depth":28,"links":117719},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch1",{"title":117264,"description":30},"wiki\u002F2025-01-27-Linux基本操作\u002Fch1-最常用的基本操作（更新）","0qHSF2CcfIvVp9KNbVlIRaabWQyFrf-TGaOhET23zi8",{"id":117726,"title":117727,"body":117728,"description":30,"extension":31,"meta":118469,"navigation":33,"path":118470,"seo":118471,"stem":118472,"__hash__":118473},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程.md","2. Linux装机教程",{"type":7,"value":117729,"toc":118456},[117730,117733,117737,117740,117746,117750,117754,117760,117765,117770,117775,117780,117785,117788,117791,117794,117797,117801,117804,117809,117812,117817,117820,117825,117832,117835,117838,117841,117844,117847,117858,117862,117866,117871,117876,117880,117885,117889,117894,117898,117902,117907,117910,117955,117960,117964,117968,117973,117979,117984,117994,117999,118009,118014,118019,118046,118050,118053,118058,118061,118086,118090,118095,118098,118103,118108,118128,118133,118136,118151,118155,118208,118211,118216,118220,118223,118238,118241,118244,118249,118253,118257,118260,118264,118268,118271,118276,118281,118285,118292,118300,118303,118310,118315,118320,118323,118328,118335,118340,118347,118351,118353,118358,118362,118365,118368,118373,118376,118381,118384,118389,118394,118399,118403,118408,118412,118453],[10,117731,117727],{"id":117732},"_2-linux装机教程",[48,117734,117736],{"id":117735},"_21-实体机","2.1 实体机",[14,117738,117739],{},"使用清华源：（Ubuntu24.04）",[14,117741,117742],{},[355,117743,117744],{"href":117744,"rel":117745},"https:\u002F\u002Fmirrors.tuna.tsinghua.edu.cn\u002Fubuntu-releases\u002F24.04\u002F",[23858],[48,117747,117749],{"id":117748},"_22-普通虚拟机","2.2 普通虚拟机",[77,117751,117753],{"id":117752},"_221-下载virtualbox虚拟机","2.2.1 下载VirtualBox虚拟机",[14,117755,117756],{},[355,117757,117758],{"href":117758,"rel":117759},"https:\u002F\u002Fwww.virtualbox.org\u002Fwiki\u002FDownload_Old_Builds_7_0",[23858],[14,117761,117762],{},[23,117763],{"alt":25,"src":117764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-001.png",[14,117766,117767],{},[23,117768],{"alt":25,"src":117769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-002.png",[14,117771,117772],{},[23,117773],{"alt":25,"src":117774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-003.png",[14,117776,117777],{},[23,117778],{"alt":25,"src":117779},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-004.png",[14,117781,117782],{},[23,117783],{"alt":25,"src":117784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-005.png",[14,117786,117787],{},"内存4G（4096MB）；",[14,117789,117790],{},"CPU给4个核；",[14,117792,117793],{},"硬盘动态分配60G；",[14,117795,117796],{},"除了上面这三项，其它的默认即可，最后点击“Finish”。",[77,117798,117800],{"id":117799},"_222-安装ubuntu","2.2.2 安装Ubuntu",[14,117802,117803],{},"按照1.1的步骤下载Ubuntu",[14,117805,117806],{},[23,117807],{"alt":25,"src":117808},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-006.png",[14,117810,117811],{},"点击启动(绿色大箭头)，过一段时间出现下图中的小界面，往下拉选择中文简体，然后点击“安装Ubuntu”",[14,117813,117814],{},[23,117815],{"alt":25,"src":117816},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-007.png",[14,117818,117819],{},"键盘布局默认“Chinese”并点击“继续”，如果找不到“继续”就用Alt+F7，然后往上拖鼠标即可看到（注意拖鼠标的过程中不要点击鼠标，拖到目标位置后再点击鼠标）。",[14,117821,117822],{},[23,117823],{"alt":25,"src":117824},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-008.png",[14,117826,117827,117828,117831],{},"选择“正常安装”(找不到都用Alt+F7)， ",[266,117829,117830],{},"不选"," “安装Ubuntu时下载更新”，其余都默认并继续",[14,117833,117834],{},"清除整个磁盘并安装Ubuntu，现在安装。(不会清除windows的磁盘，放心安装)",[14,117836,117837],{},"将改动写入磁盘吗 继续",[14,117839,117840],{},"选择东八区（shanghai，大致在地图上点一下），继续",[14,117842,117843],{},"姓名、计算机名、用户名、密码都自己设置，越简单越好(密码需牢记)。 自动登录 继续",[14,117845,117846],{},"就开始安装了,比较耗时，只要Skip高亮了就点击之（这样省时，光标是圆圈也能点击）",[14,117848,117849,117850,117853,117854,117857],{},"安装完成后，现在重启，重启过程中根据提示按回车键。 进入系统后不要升级，且第一次进系统需设置一些信息，根据提示 ",[266,117851,117852],{},"除了"," 选不发送系统信息与不升级之外， ",[266,117855,117856],{},"其它"," 都跳过或前进）",[77,117859,117861],{"id":117860},"_223-增强虚拟机体验感","2.2.3 增强虚拟机体验感",[21991,117863,117865],{"id":117864},"_2231-全屏","2.2.3.1 全屏",[14,117867,117868],{},[23,117869],{"alt":25,"src":117870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-009.png",[14,117872,117873],{},[23,117874],{"alt":25,"src":117875},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-010.png",[21991,117877,117879],{"id":117878},"_2232-文件交换","2.2.3.2 文件交换",[14,117881,117882],{},[23,117883],{"alt":25,"src":117884},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-011.png",[21991,117886,117888],{"id":117887},"_2233-新建文本文档","2.2.3.3 新建文本文档",[14,117890,117891],{},[23,117892],{"alt":25,"src":117893},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-012.png",[48,117895,117897],{"id":117896},"_23-windows-subsystem-for-linux-2windows的linux子系统2","2.3 Windows Subsystem For Linux 2(Windows的Linux子系统2)",[77,117899,117901],{"id":117900},"_231-简介与优缺点","2.3.1 简介与优缺点",[60,117903,117904],{},[63,117905,117906],{},"什么情况下推荐？",[14,117908,117909],{},"无多余硬盘，没法实体装Linux。此时最优选择就是WSL2。而非VMware等虚拟机。",[60,117911,117912],{"start":28},[63,117913,117914,117915],{},"优缺点：",[60,117916,117917,117947],{},[63,117918,117919,117920],{},"优点：",[60,117921,117922,117925,117932,117935,117938,117941,117944],{},[63,117923,117924],{},"WSL2是最好的Linux发行版;(bushi)",[63,117926,117927,117928,117931],{},"性能损耗极低。且比在Windows上跑深度性能 ",[266,117929,117930],{},"强非常非常多;"," （如下图，时间的数值越低证明性能越高）",[63,117933,117934],{},"非常方便调用USB设备，可以USB直通;",[63,117936,117937],{},"非常方便使用英伟达显卡的CUDA与cuDNN;",[63,117939,117940],{},"非常方便Win与WSL2互相传文件等协同操作;",[63,117942,117943],{},"WSL2中甚至可以在Linux的终端中使用Windows软件;",[63,117945,117946],{},"非常方便使用Windows的VScode远程开发;",[63,117948,117949,117950],{},"缺点：",[60,117951,117952],{},[63,117953,117954],{},"无法调用本机摄像头，或说调用本机摄像头会巨麻烦。（虽无法调用本机摄像头，但是可以使用USB的摄像头）",[14,117956,117957],{},[23,117958],{"alt":25,"src":117959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-013.png",[77,117961,117963],{"id":117962},"_232-安装教程","2.3.2 安装教程",[21991,117965,117967],{"id":117966},"_2321-启动wsl2子系统和虚拟平台","2.3.2.1 启动WSL2子系统和虚拟平台",[60,117969,117970],{},[63,117971,117972],{},"方法一(图形界面)",[14,117974,117975,117976,24612],{},"用Win+R输入",[103,117977,117978],{},"appwiz.cpl",[14,117980,117981],{},[23,117982],{"alt":25,"src":117983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-014.png",[14,117985,117986,117987,117990,117991,26467],{},"点击OK进入 ",[266,117988,117989],{},"程序和功能\u002FPrograms and Features"," 界面，点击 ",[266,117992,117993],{},"启用或关闭Windows功能\u002FTurn Windows features on or off",[14,117995,117996],{},[23,117997],{"alt":25,"src":117998},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-015.png",[14,118000,118001,118002,101003,118005,118008],{},"选择 ",[266,118003,118004],{},"适用于Linux的Windows子系统\u002FWindows Subsystem for Linux",[266,118006,118007],{},"虚拟机平台\u002FVirtual Machine Platform"," 功能：",[14,118010,118011],{},[23,118012],{"alt":25,"src":118013},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-016.png",[60,118015,118016],{"start":28},[63,118017,118018],{},"方法二(命令行)",[97,118020,118024],{"className":118021,"code":118022,"language":118023,"meta":25,"style":25},"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",[103,118025,118026,118031,118036,118041],{"__ignoreMap":25},[106,118027,118028],{"class":108,"line":109},[106,118029,118030],{},"# 开启 Linux 子系统\n",[106,118032,118033],{"class":108,"line":28},[106,118034,118035],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:Microsoft-Windows-Subsystem-Linux \u002Fall \u002Fnorestart\n",[106,118037,118038],{"class":108,"line":1172},[106,118039,118040],{},"# 开启虚拟机平台\n",[106,118042,118043],{"class":108,"line":1187},[106,118044,118045],{},"dism.exe \u002Fonline \u002Fenable-feature \u002Ffeaturename:VirtualMachinePlatform \u002Fall \u002Fnorestart\n",[21991,118047,118049],{"id":118048},"_2322-将wsl2设置为默认版本","2.3.2.2 将WSL2设置为默认版本",[14,118051,118052],{},"用管理员权限打开powershell",[14,118054,118055],{},[23,118056],{"alt":25,"src":118057},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-017.png",[14,118059,118060],{},"升级WSL并设置默认版本为WSL2",[97,118062,118064],{"className":118021,"code":118063,"language":118023,"meta":25,"style":25},"# 更新 wsl\nwsl --update\n# 将 wsl 版本设置为 wsl2\nwsl --set-default-version 2\n",[103,118065,118066,118071,118076,118081],{"__ignoreMap":25},[106,118067,118068],{"class":108,"line":109},[106,118069,118070],{},"# 更新 wsl\n",[106,118072,118073],{"class":108,"line":28},[106,118074,118075],{},"wsl --update\n",[106,118077,118078],{"class":108,"line":1172},[106,118079,118080],{},"# 将 wsl 版本设置为 wsl2\n",[106,118082,118083],{"class":108,"line":1187},[106,118084,118085],{},"wsl --set-default-version 2\n",[21991,118087,118089],{"id":118088},"_2323-安装linux发行版","2.3.2.3 安装Linux发行版",[60,118091,118092],{},[63,118093,118094],{},"方式一(商店下载)",[14,118096,118097],{},"直接打开Microsoft Store搜索对应的发行版下载即可(比如Ubuntu 24.04 LTS)",[14,118099,118100],{},[23,118101],{"alt":25,"src":118102},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-018.png",[60,118104,118105],{"start":28},[63,118106,118107],{},"方式二(命令行安装)",[97,118109,118111],{"className":118021,"code":118110,"language":118023,"meta":25,"style":25},"# 列出可安装的 Linux 版本\n#（需要科学手段）\nwsl --list --online\n",[103,118112,118113,118118,118123],{"__ignoreMap":25},[106,118114,118115],{"class":108,"line":109},[106,118116,118117],{},"# 列出可安装的 Linux 版本\n",[106,118119,118120],{"class":108,"line":28},[106,118121,118122],{},"#（需要科学手段）\n",[106,118124,118125],{"class":108,"line":1172},[106,118126,118127],{},"wsl --list --online\n",[14,118129,118130],{},[23,118131],{"alt":25,"src":118132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-019.png",[14,118134,118135],{},"选择对应发行版并安装",[97,118137,118139],{"className":118021,"code":118138,"language":118023,"meta":25,"style":25},"# Ubuntu安装完毕后需要重启系统\nwsl --install -d Ubuntu-24.04\n",[103,118140,118141,118146],{"__ignoreMap":25},[106,118142,118143],{"class":108,"line":109},[106,118144,118145],{},"# Ubuntu安装完毕后需要重启系统\n",[106,118147,118148],{"class":108,"line":28},[106,118149,118150],{},"wsl --install -d Ubuntu-24.04\n",[21991,118152,118154],{"id":118153},"_2324-查看系统状态","2.3.2.4 查看系统状态",[97,118156,118158],{"className":118021,"code":118157,"language":118023,"meta":25,"style":25},"# 查看 wsl\nwsl -l\n# 查看 wsl 运行版本或模式\nwsl -l -v\n\n\n# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\nwsl --set-version \u003Cdistro> 2\n# 选择要注销的版本 （如果想卸载再用此命令）\nwsl --unregister \u003Cdistro>\n",[103,118159,118160,118165,118170,118175,118180,118184,118188,118193,118198,118203],{"__ignoreMap":25},[106,118161,118162],{"class":108,"line":109},[106,118163,118164],{},"# 查看 wsl\n",[106,118166,118167],{"class":108,"line":28},[106,118168,118169],{},"wsl -l\n",[106,118171,118172],{"class":108,"line":1172},[106,118173,118174],{},"# 查看 wsl 运行版本或模式\n",[106,118176,118177],{"class":108,"line":1187},[106,118178,118179],{},"wsl -l -v\n",[106,118181,118182],{"class":108,"line":1193},[106,118183,2392],{"emptyLinePlaceholder":33},[106,118185,118186],{"class":108,"line":1207},[106,118187,2392],{"emptyLinePlaceholder":33},[106,118189,118190],{"class":108,"line":1213},[106,118191,118192],{},"# 设置发行版为使用 wsl 2 （如果版本为 2 则不需要）\n",[106,118194,118195],{"class":108,"line":1304},[106,118196,118197],{},"wsl --set-version \u003Cdistro> 2\n",[106,118199,118200],{"class":108,"line":1310},[106,118201,118202],{},"# 选择要注销的版本 （如果想卸载再用此命令）\n",[106,118204,118205],{"class":108,"line":1322},[106,118206,118207],{},"wsl --unregister \u003Cdistro>\n",[14,118209,118210],{},"输出Version为2即正常",[14,118212,118213],{},[23,118214],{"alt":25,"src":118215},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-020.png",[21991,118217,118219],{"id":118218},"_2325-设置用户名与密码","2.3.2.5 设置用户名与密码",[14,118221,118222],{},"直接在Powershell里输入wsl命令进入子系统",[97,118224,118226],{"className":118021,"code":118225,"language":118023,"meta":25,"style":25},"# 进入子系统\nwsl\n",[103,118227,118228,118233],{"__ignoreMap":25},[106,118229,118230],{"class":108,"line":109},[106,118231,118232],{},"# 进入子系统\n",[106,118234,118235],{"class":108,"line":28},[106,118236,118237],{},"wsl\n",[14,118239,118240],{},"输入用户名(随便设置，建议字母+数字，或者纯字母)",[14,118242,118243],{},"输入密码(建议低于6位的数字，并且在输入密码时，终端上不会显示输入的字符，但是已经正常输入了)",[14,118245,118246],{},[23,118247],{"alt":25,"src":118248},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-021.png",[77,118250,118252],{"id":118251},"_233-配置各种环境","2.3.3 配置各种环境",[21991,118254,118256],{"id":118255},"_2331-换源","2.3.3.1 换源",[14,118258,118259],{},"(同实体机LINUX，往下找教程)",[21991,118261,118263],{"id":118262},"_2332-英伟达显卡","2.3.3.2 英伟达显卡",[22903,118265,118267],{"id":118266},"_23321-显卡驱动","2.3.3.2.1 显卡驱动",[14,118269,118270],{},"不用安装，只要你的Windows安装了驱动，你的WSL2就已经安装好驱动了。",[14,118272,118273],{},[23,118274],{"alt":25,"src":118275},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-022.png",[14,118277,118278],{},[23,118279],{"alt":25,"src":118280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-023.png",[22903,118282,118284],{"id":118283},"_23322-cuda","2.3.3.2.2 CUDA",[14,118286,118287,118288],{},"前往 NVIDIA CUDA Toolkit 下载页面：",[355,118289,118290],{"href":118290,"rel":118291},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads",[23858],[14,118293,118294,118297],{},[23,118295],{"alt":25,"src":118296},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-024.png",[23,118298],{"alt":25,"src":118299},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-025.png",[14,118301,118302],{},"在下方的网站，选择合适的版本。",[14,118304,118305,118306],{},"WSL2 专属 CUDA 指南：",[355,118307,118308],{"href":118308,"rel":118309},"https:\u002F\u002Fdocs.nvidia.com\u002Fcuda\u002Fwsl-user-guide\u002Findex.html",[23858],[14,118311,118312],{},[266,118313,118314],{},"(同实体机LINUX，往下找教程，唯一与实体机不同的地方如下图)",[14,118316,118317],{},[23,118318],{"alt":25,"src":118319},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-026.png",[14,118321,118322],{},"挨行敲一遍",[14,118324,118325],{},[23,118326],{"alt":25,"src":118327},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-027.png",[14,118329,118330,118331,118334],{},"敲完后，输入",[103,118332,118333],{},"nvcc -V","检测是否安装成功，如果出现下图，证明没配置环境。",[14,118336,118337],{},[23,118338],{"alt":25,"src":118339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-028.png",[14,118341,118342,118343,118346],{},"（请详看下方教程的",[266,118344,118345],{},"安装CUDA的配置环境来看","如何配置环境）",[22903,118348,118350],{"id":118349},"_23323-cudnn","2.3.3.2.3 cuDNN",[14,118352,118259],{},[14,118354,118355],{},[23,118356],{"alt":25,"src":118357},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-029.png",[21991,118359,118361],{"id":118360},"_2333-vscode远程开发","2.3.3.3 VScode远程开发",[14,118363,118364],{},"(一定要把工程放在Linux中开发，别放在Win磁盘中，否则I\u002FO效率会很低)",[14,118366,118367],{},"安装该插件(WSL2有自己的远程开发插件，无需使用SSH）。",[14,118369,118370],{},[23,118371],{"alt":25,"src":118372},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-030.png",[14,118374,118375],{},"连接WSL2",[14,118377,118378],{},[23,118379],{"alt":25,"src":118380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-031.png",[14,118382,118383],{},"远程开发成功。",[14,118385,118386],{},[23,118387],{"alt":25,"src":118388},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-032.png",[14,118390,118391],{},[23,118392],{"alt":25,"src":118393},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-033.png",[14,118395,118396],{},[23,118397],{"alt":25,"src":118398},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-034.png",[21991,118400,118402],{"id":118401},"_2334-linux终端使用windows软件","2.3.3.4 Linux终端使用Windows软件",[14,118404,118405],{},[23,118406],{"alt":25,"src":118407},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-035.png",[21991,118409,118411],{"id":118410},"_2335-opengl有问题","2.3.3.5 OpenGL有问题",[97,118413,118415],{"className":117281,"code":118414,"language":117283,"meta":25,"style":25},"sudo apt update\nsudo apt upgrade\nsudo apt install mesa-utils\n\n#然后重启wsl2即可\n",[103,118416,118417,118425,118433,118444,118448],{"__ignoreMap":25},[106,118418,118419,118421,118423],{"class":108,"line":109},[106,118420,24570],{"class":1955},[106,118422,117302],{"class":221},[106,118424,26236],{"class":221},[106,118426,118427,118429,118431],{"class":108,"line":28},[106,118428,24570],{"class":1955},[106,118430,117302],{"class":221},[106,118432,117318],{"class":221},[106,118434,118435,118437,118439,118441],{"class":108,"line":1172},[106,118436,24570],{"class":1955},[106,118438,117302],{"class":221},[106,118440,23827],{"class":221},[106,118442,118443],{"class":221}," mesa-utils\n",[106,118445,118446],{"class":108,"line":1187},[106,118447,2392],{"emptyLinePlaceholder":33},[106,118449,118450],{"class":108,"line":1193},[106,118451,118452],{"class":175},"#然后重启wsl2即可\n",[5119,118454,118455],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":25,"searchDepth":28,"depth":28,"links":118457},[118458,118459,118464],{"id":117735,"depth":28,"text":117736},{"id":117748,"depth":28,"text":117749,"children":118460},[118461,118462,118463],{"id":117752,"depth":1172,"text":117753},{"id":117799,"depth":1172,"text":117800},{"id":117860,"depth":1172,"text":117861},{"id":117896,"depth":28,"text":117897,"children":118465},[118466,118467,118468],{"id":117900,"depth":1172,"text":117901},{"id":117962,"depth":1172,"text":117963},{"id":118251,"depth":1172,"text":118252},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch2-linux",{"title":117727,"description":30},"wiki\u002F2025-01-27-Linux基本操作\u002Fch2-Linux装机教程","z8-bvEu-95_o87t1vYlvhP_0vkUfK8DDJy87xhuIF4E",{"id":118475,"title":118476,"body":118477,"description":30,"extension":31,"meta":121413,"navigation":33,"path":121414,"seo":121415,"stem":121416,"__hash__":121417},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置.md","3. 安装必备配置",{"type":7,"value":118478,"toc":121385},[118479,118482,118486,118492,118496,118502,118506,118694,118697,118702,118706,118710,118713,118716,118722,118727,118730,118733,118738,118771,118776,118780,118857,118860,118865,118869,118872,118911,118914,118923,118941,118946,118953,119070,119075,119078,119105,119110,119114,119123,119173,119180,119184,119187,119201,119208,119242,119247,119251,119274,119277,119282,119286,119289,119292,119295,119337,119341,119344,119347,119388,119392,119396,119399,119404,119409,119412,119435,119438,119446,119451,119454,119459,119464,119467,119472,119476,119481,119504,119509,119571,119579,119584,119589,119592,119597,119600,119605,119610,119628,119633,119639,119644,119658,119662,119665,119668,119671,119714,119717,119722,119823,119826,119831,119835,119839,119876,119880,119884,119888,119934,119938,119983,119987,119994,120002,120057,120060,120137,120140,120163,120167,120170,120175,120180,120188,120191,120196,120201,120206,120209,120214,120223,120226,120231,120234,120305,120310,120313,120318,120321,120326,120329,120334,120337,120342,120347,120350,120425,120428,120441,120446,120449,120463,120466,120495,120500,120529,120532,120537,120541,120546,120555,120558,120563,120566,120571,120574,120577,120582,120585,120590,120595,120598,120603,120606,120731,120736,120766,120769,120774,120779,120796,120799,120842,120845,120872,120877,120890,121033,121037,121042,121056,121059,121110,121113,121143,121146,121162,121167,121181,121184,121251,121256,121265,121270,121273,121285,121290,121297,121321,121324,121329,121332,121351,121356,121363,121375,121382],[10,118480,118476],{"id":118481},"_3-安装必备配置",[48,118483,118485],{"id":118484},"_31-软件包换源以debian系的发行版为例","3.1 软件包换源（以Debian系的发行版为例）",[97,118487,118490],{"className":118488,"code":118489,"language":5180},[5178],"  打开下方网站（注意，该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",[103,118491,118489],{"__ignoreMap":25},[77,118493,118495],{"id":118494},"_311-ubuntu2204及debian10及以下版本","3.1.1 Ubuntu22.04(及Debian10)及以下版本",[97,118497,118500],{"className":118498,"code":118499,"language":5180},[5178],"  输入以下命令\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",[103,118501,118499],{"__ignoreMap":25},[77,118503,118505],{"id":118504},"_312-ubuntu2404及debian12及以上版本","3.1.2 Ubuntu24.04(及Debian12)及以上版本",[97,118507,118511],{"className":118508,"code":118509,"language":118510,"meta":25,"style":25},"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",[103,118512,118513,118521,118532,118544,118558,118562,118572,118577,118581,118585,118590,118594,118606,118610,118615,118619,118630,118634,118650,118654,118665,118669,118674,118678,118686],{"__ignoreMap":25},[106,118514,118515,118517,118519],{"class":108,"line":109},[106,118516,24570],{"class":1955},[106,118518,117302],{"class":221},[106,118520,26236],{"class":221},[106,118522,118523,118525,118527,118529],{"class":108,"line":28},[106,118524,24570],{"class":1955},[106,118526,117302],{"class":221},[106,118528,23827],{"class":221},[106,118530,118531],{"class":221}," vim\n",[106,118533,118534,118536,118539,118541],{"class":108,"line":1172},[106,118535,24570],{"class":1955},[106,118537,118538],{"class":221}," rm",[106,118540,25319],{"class":165},[106,118542,118543],{"class":221}," \u002Fetc\u002Fapt\u002Fsources.list\n",[106,118545,118546,118548,118550,118552,118555],{"class":108,"line":1187},[106,118547,24570],{"class":1955},[106,118549,118538],{"class":221},[106,118551,25319],{"class":165},[106,118553,118554],{"class":221}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002F",[106,118556,118557],{"class":165},"**\n",[106,118559,118560],{"class":108,"line":1193},[106,118561,2392],{"emptyLinePlaceholder":33},[106,118563,118564,118566,118569],{"class":108,"line":1207},[106,118565,24570],{"class":1955},[106,118567,118568],{"class":221}," vim",[106,118570,118571],{"class":221}," \u002Fetc\u002Fapt\u002Fsources.list.d\u002Fubuntu.sources\n",[106,118573,118574],{"class":108,"line":1213},[106,118575,118576],{"class":221},"```\n",[106,118578,118579],{"class":108,"line":1304},[106,118580,2392],{"emptyLinePlaceholder":33},[106,118582,118583],{"class":108,"line":1310},[106,118584,2392],{"emptyLinePlaceholder":33},[106,118586,118587],{"class":108,"line":1322},[106,118588,118589],{"class":1955},"选择好Ubuntu版本后，复制下方的内容。\n",[106,118591,118592],{"class":108,"line":1604},[106,118593,2392],{"emptyLinePlaceholder":33},[106,118595,118596,118598,118601,118604],{"class":108,"line":1609},[106,118597,343],{"class":112},[106,118599,118600],{"class":221},"[](",[106,118602,118603],{"class":1955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-044.png",[106,118605,123],{"class":221},[106,118607,118608],{"class":108,"line":1615},[106,118609,2392],{"emptyLinePlaceholder":33},[106,118611,118612],{"class":108,"line":1620},[106,118613,118614],{"class":1955},"粘贴进去\n",[106,118616,118617],{"class":108,"line":1634},[106,118618,2392],{"emptyLinePlaceholder":33},[106,118620,118621,118623,118625,118628],{"class":108,"line":1639},[106,118622,343],{"class":112},[106,118624,118600],{"class":221},[106,118626,118627],{"class":1955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-045.png",[106,118629,123],{"class":221},[106,118631,118632],{"class":108,"line":1645},[106,118633,2392],{"emptyLinePlaceholder":33},[106,118635,118636,118639,118642,118645,118647],{"class":108,"line":1666},[106,118637,118638],{"class":1955},"按一下ESC，然后英文冒号，输入",[106,118640,118641],{"class":221}," `",[106,118643,118644],{"class":1955},":wq!",[106,118646,1089],{"class":221},[106,118648,118649],{"class":1955},"然后回车\n",[106,118651,118652],{"class":108,"line":1671},[106,118653,2392],{"emptyLinePlaceholder":33},[106,118655,118656,118658,118660,118663],{"class":108,"line":1685},[106,118657,343],{"class":112},[106,118659,118600],{"class":221},[106,118661,118662],{"class":1955},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux基本操作-046.png",[106,118664,123],{"class":221},[106,118666,118667],{"class":108,"line":1690},[106,118668,2392],{"emptyLinePlaceholder":33},[106,118670,118671],{"class":108,"line":1719},[106,118672,118673],{"class":1955},"输入以下命令\n",[106,118675,118676],{"class":108,"line":1724},[106,118677,2392],{"emptyLinePlaceholder":33},[106,118679,118680,118683],{"class":108,"line":1741},[106,118681,118682],{"class":221},"```",[106,118684,118685],{"class":1955},"Bash\n",[106,118687,118688,118690,118692],{"class":108,"line":1746},[106,118689,24570],{"class":1955},[106,118691,117302],{"class":221},[106,118693,26236],{"class":221},[14,118695,118696],{},"这里被替换成对应学校则成功",[14,118698,118699],{},[23,118700],{"alt":25,"src":118701},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-047.png",[48,118703,118705],{"id":118704},"_32-卸载恶心的snapubuntu及其衍生版","3.2 卸载恶心的snap(Ubuntu及其衍生版)",[77,118707,118709],{"id":118708},"_321-安装非firefox浏览器","3.2.1 安装非firefox浏览器",[14,118711,118712],{},"卸载snap前，请先安装一个浏览器（以Google Chrome为例）(这里是因为Ubuntu默认安装的是snap版本的FireFox)",[14,118714,118715],{},"以下是Google上海服务器的Chrome官网（无需挂梯）",[14,118717,118718],{},[355,118719,118720],{"href":118720,"rel":118721},"https:\u002F\u002Fwww.google.com\u002Fchrome\u002F",[23858],[14,118723,118724],{},[23,118725],{"alt":25,"src":118726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-048.png",[14,118728,118729],{},"咱们这里是Ubuntu所以是Debian系的系统，所以选deb扩展名的程序包。（也就是红色框框）",[14,118731,118732],{},"红帽系则需要安装的是rpm扩展名程序包。（也就是蓝色框框）",[14,118734,118735],{},[23,118736],{"alt":25,"src":118737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-049.png",[97,118739,118741],{"className":117281,"code":118740,"language":117283,"meta":25,"style":25},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\ncd ~\u002FDownloads\n#下方chrome安装包名不一定是这个，根据名字来看\nsudo apt install .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[103,118742,118743,118748,118755,118760],{"__ignoreMap":25},[106,118744,118745],{"class":108,"line":109},[106,118746,118747],{"class":175},"#某些发行版中，可能Downloads是中文下载，所以就需要  cd ~\u002F下载\n",[106,118749,118750,118752],{"class":108,"line":28},[106,118751,101261],{"class":165},[106,118753,118754],{"class":221}," ~\u002FDownloads\n",[106,118756,118757],{"class":108,"line":1172},[106,118758,118759],{"class":175},"#下方chrome安装包名不一定是这个，根据名字来看\n",[106,118761,118762,118764,118766,118768],{"class":108,"line":1187},[106,118763,24570],{"class":1955},[106,118765,117302],{"class":221},[106,118767,23827],{"class":221},[106,118769,118770],{"class":221}," .\u002Fgoogle-chrome-stable_current_amd64.deb\n",[14,118772,118773],{},[23,118774],{"alt":25,"src":118775},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-050.png",[77,118777,118779],{"id":118778},"_322-查看snap包应用数量","3.2.2 查看snap包应用数量",[97,118781,118783],{"className":117281,"code":118782,"language":117283,"meta":25,"style":25},"# 老版\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",[103,118784,118785,118790,118798,118809,118814,118818,118823,118833,118841,118852],{"__ignoreMap":25},[106,118786,118787],{"class":108,"line":109},[106,118788,118789],{"class":175},"# 老版\n",[106,118791,118792,118794,118796],{"class":108,"line":28},[106,118793,24570],{"class":1955},[106,118795,117302],{"class":221},[106,118797,26236],{"class":221},[106,118799,118800,118802,118804,118806],{"class":108,"line":1172},[106,118801,24570],{"class":1955},[106,118803,117302],{"class":221},[106,118805,23827],{"class":221},[106,118807,118808],{"class":221}," neofetch\n",[106,118810,118811],{"class":108,"line":1187},[106,118812,118813],{"class":1955},"neofetch\n",[106,118815,118816],{"class":108,"line":1193},[106,118817,2392],{"emptyLinePlaceholder":33},[106,118819,118820],{"class":108,"line":1207},[106,118821,118822],{"class":175},"# 新版\n",[106,118824,118825,118827,118830],{"class":108,"line":1213},[106,118826,24570],{"class":1955},[106,118828,118829],{"class":221}," add-apt-repository",[106,118831,118832],{"class":221}," ppa:zhangsongcui3371\u002Ffastfetch\n",[106,118834,118835,118837,118839],{"class":108,"line":1304},[106,118836,24570],{"class":1955},[106,118838,117302],{"class":221},[106,118840,26236],{"class":221},[106,118842,118843,118845,118847,118849],{"class":108,"line":1310},[106,118844,24570],{"class":1955},[106,118846,117302],{"class":221},[106,118848,23827],{"class":221},[106,118850,118851],{"class":221}," fastfetch\n",[106,118853,118854],{"class":108,"line":1322},[106,118855,118856],{"class":1955},"fastfetch\n",[14,118858,118859],{},"这里显示，一共有3162个debian的程序，7个snap程序",[14,118861,118862],{},[23,118863],{"alt":25,"src":118864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-051.png",[77,118866,118868],{"id":118867},"_323-移除snap应用","3.2.3 移除snap应用",[14,118870,118871],{},"系统在启动时，会自动启动Snap相关服务，我们先禁用掉这些服务",[97,118873,118875],{"className":117281,"code":118874,"language":117283,"meta":25,"style":25},"sudo systemctl disable snapd.service\nsudo systemctl disable snapd.socket\nsudo systemctl disable snapd.seeded.service\n",[103,118876,118877,118889,118900],{"__ignoreMap":25},[106,118878,118879,118881,118883,118886],{"class":108,"line":109},[106,118880,24570],{"class":1955},[106,118882,26507],{"class":221},[106,118884,118885],{"class":221}," disable",[106,118887,118888],{"class":221}," snapd.service\n",[106,118890,118891,118893,118895,118897],{"class":108,"line":28},[106,118892,24570],{"class":1955},[106,118894,26507],{"class":221},[106,118896,118885],{"class":221},[106,118898,118899],{"class":221}," snapd.socket\n",[106,118901,118902,118904,118906,118908],{"class":108,"line":1172},[106,118903,24570],{"class":1955},[106,118905,26507],{"class":221},[106,118907,118885],{"class":221},[106,118909,118910],{"class":221}," snapd.seeded.service\n",[14,118912,118913],{},"然后查看snap应用列表",[14,118915,118916,118917,118922],{},"根据你安装的选择不同（最小安装或普通安装），有",[355,118918,118921],{"href":118919,"rel":118920},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=%E4%B8%8D%E5%90%8C%E7%9A%84&spm=1001.2101.3001.7020",[23858],"不同的","Snap软件会被预装到系统，在删除Snap服务之前，我们需要移除Snap安装的这些",[97,118924,118926],{"className":117281,"code":118925,"language":117283,"meta":25,"style":25},"# 查询当前系统上snap安装了哪些app\nsnap list\n",[103,118927,118928,118933],{"__ignoreMap":25},[106,118929,118930],{"class":108,"line":109},[106,118931,118932],{"class":175},"# 查询当前系统上snap安装了哪些app\n",[106,118934,118935,118938],{"class":108,"line":28},[106,118936,118937],{"class":1955},"snap",[106,118939,118940],{"class":221}," list\n",[14,118942,118943],{},[23,118944],{"alt":25,"src":118945},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-052.png",[14,118947,118948,118949,118952],{},"卸载掉图中所有应用，按照 ",[266,118950,118951],{},"先删除应用软件，再删除非应用软件"," 的顺序进行删除",[97,118954,118956],{"className":117281,"code":118955,"language":117283,"meta":25,"style":25},"#移除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",[103,118957,118958,118963,118975,118980,118991,118996,119007,119012,119023,119028,119032,119037,119048,119059],{"__ignoreMap":25},[106,118959,118960],{"class":108,"line":109},[106,118961,118962],{"class":175},"#移除snap-store，如果是Kubuntu，则没有这个东西，测不需要卸载\n",[106,118964,118965,118967,118970,118972],{"class":108,"line":28},[106,118966,24570],{"class":1955},[106,118968,118969],{"class":221}," snap",[106,118971,26073],{"class":221},[106,118973,118974],{"class":221}," snap-store\n",[106,118976,118977],{"class":108,"line":1172},[106,118978,118979],{"class":175},"#移除firefox浏览器\n",[106,118981,118982,118984,118986,118988],{"class":108,"line":1187},[106,118983,24570],{"class":1955},[106,118985,118969],{"class":221},[106,118987,26073],{"class":221},[106,118989,118990],{"class":221}," firefox\n",[106,118992,118993],{"class":108,"line":1193},[106,118994,118995],{"class":175},"#移除gnome-42-2204\n",[106,118997,118998,119000,119002,119004],{"class":108,"line":1207},[106,118999,24570],{"class":1955},[106,119001,118969],{"class":221},[106,119003,26073],{"class":221},[106,119005,119006],{"class":221}," gnome-42-2204\n",[106,119008,119009],{"class":108,"line":1213},[106,119010,119011],{"class":175},"#移除gtk-common-themes\n",[106,119013,119014,119016,119018,119020],{"class":108,"line":1304},[106,119015,24570],{"class":1955},[106,119017,118969],{"class":221},[106,119019,26073],{"class":221},[106,119021,119022],{"class":221}," gtk-common-themes\n",[106,119024,119025],{"class":108,"line":1310},[106,119026,119027],{"class":175},"#移除其它...\n",[106,119029,119030],{"class":108,"line":1322},[106,119031,2666],{"class":116},[106,119033,119034],{"class":108,"line":1604},[106,119035,119036],{"class":175},"#移除core22,bare以及snapd\n",[106,119038,119039,119041,119043,119045],{"class":108,"line":1609},[106,119040,24570],{"class":1955},[106,119042,118969],{"class":221},[106,119044,26073],{"class":221},[106,119046,119047],{"class":221}," core22\n",[106,119049,119050,119052,119054,119056],{"class":108,"line":1615},[106,119051,24570],{"class":1955},[106,119053,118969],{"class":221},[106,119055,26073],{"class":221},[106,119057,119058],{"class":221}," bare\n",[106,119060,119061,119063,119065,119067],{"class":108,"line":1620},[106,119062,24570],{"class":1955},[106,119064,118969],{"class":221},[106,119066,26073],{"class":221},[106,119068,119069],{"class":221}," snapd\n",[14,119071,119072],{},[23,119073],{"alt":25,"src":119074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-053.png",[14,119076,119077],{},"输入以下命令查看是否还有snap包",[97,119079,119081],{"className":117281,"code":119080,"language":117283,"meta":25,"style":25},"snap list\n# 老版\nneofetch\n# 新版\nfastfetch\n",[103,119082,119083,119089,119093,119097,119101],{"__ignoreMap":25},[106,119084,119085,119087],{"class":108,"line":109},[106,119086,118937],{"class":1955},[106,119088,118940],{"class":221},[106,119090,119091],{"class":108,"line":28},[106,119092,118789],{"class":175},[106,119094,119095],{"class":108,"line":1172},[106,119096,118813],{"class":1955},[106,119098,119099],{"class":108,"line":1187},[106,119100,118822],{"class":175},[106,119102,119103],{"class":108,"line":1193},[106,119104,118856],{"class":1955},[14,119106,119107],{},[23,119108],{"alt":25,"src":119109},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-054.png",[77,119111,119113],{"id":119112},"_324-移除snap","3.2.4 移除snap",[14,119115,119116,119117,119122],{},"在删除掉",[355,119118,119121],{"href":119119,"rel":119120},"https:\u002F\u002Fso.csdn.net\u002Fso\u002Fsearch?q=Snap%E5%AE%89%E8%A3%85&spm=1001.2101.3001.7020",[23858],"Snap安装","的软件后，下一步就是把Snap本身也删除掉，这里需要使用Apt来实现",[97,119124,119126],{"className":117281,"code":119125,"language":117283,"meta":25,"style":25}," #使用apt移除掉snap\nsudo apt autoremove --purge snapd\n#移除snapd的一些目录\nsudo rm -rf \u002Fvar\u002Fcache\u002Fsnapd\nsudo rm -rf ~\u002Fsnap\n",[103,119127,119128,119133,119146,119151,119162],{"__ignoreMap":25},[106,119129,119130],{"class":108,"line":109},[106,119131,119132],{"class":175}," #使用apt移除掉snap\n",[106,119134,119135,119137,119139,119141,119144],{"class":108,"line":28},[106,119136,24570],{"class":1955},[106,119138,117302],{"class":221},[106,119140,117610],{"class":221},[106,119142,119143],{"class":165}," --purge",[106,119145,119069],{"class":221},[106,119147,119148],{"class":108,"line":1172},[106,119149,119150],{"class":175},"#移除snapd的一些目录\n",[106,119152,119153,119155,119157,119159],{"class":108,"line":1187},[106,119154,24570],{"class":1955},[106,119156,118538],{"class":221},[106,119158,25319],{"class":165},[106,119160,119161],{"class":221}," \u002Fvar\u002Fcache\u002Fsnapd\n",[106,119163,119164,119166,119168,119170],{"class":108,"line":1193},[106,119165,24570],{"class":1955},[106,119167,118538],{"class":221},[106,119169,25319],{"class":165},[106,119171,119172],{"class":221}," ~\u002Fsnap\n",[14,119174,119175,119176,119179],{},"至此，其实snap已经被删除掉了。但是这个并不足够，如果你使用apt安装一些软件 ",[103,119177,119178],{},"sudo apt install firefox","时，会自动下载并重新安装snap服务。因为Ubuntu源中的一些软件已经是snap版本，而非deb版本，下载snap版本时，会自动检查并在必要时重新安装snap服务。这也是Canonical为了推广自己的Snap Store而做的一些额外的努力吧。(这一点最被很多人不喜欢)",[77,119181,119183],{"id":119182},"_325-禁止系统自动安装snap","3.2.5 禁止系统自动安装snap",[14,119185,119186],{},"我们可以利用APT可配置禁用安装哪些依赖的特性，来实现禁止重新自动安装Snap服务",[97,119188,119190],{"className":117281,"code":119189,"language":117283,"meta":25,"style":25},"sudo vim \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[103,119191,119192],{"__ignoreMap":25},[106,119193,119194,119196,119198],{"class":108,"line":109},[106,119195,24570],{"class":1955},[106,119197,118568],{"class":221},[106,119199,119200],{"class":221}," \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\n",[14,119202,119203,119204,119207],{},"按insert进入编辑模式，然后复制以下内容，最后按ESC，切换为英文输入法模式，然后敲 ",[103,119205,119206],{},":wq"," 回车",[97,119209,119211],{"className":117281,"code":119210,"language":117283,"meta":25,"style":25},"Package: snapd\nPin: release a=*\nPin-Priority: -10\n",[103,119212,119213,119220,119234],{"__ignoreMap":25},[106,119214,119215,119218],{"class":108,"line":109},[106,119216,119217],{"class":1955},"Package:",[106,119219,119069],{"class":221},[106,119221,119222,119225,119228,119231],{"class":108,"line":28},[106,119223,119224],{"class":1955},"Pin:",[106,119226,119227],{"class":221}," release",[106,119229,119230],{"class":221}," a=",[106,119232,119233],{"class":165},"*\n",[106,119235,119236,119239],{"class":108,"line":1172},[106,119237,119238],{"class":1955},"Pin-Priority:",[106,119240,119241],{"class":165}," -10\n",[14,119243,119244],{},[23,119245],{"alt":25,"src":119246},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-055.png",[77,119248,119250],{"id":119249},"_326-测试是否成功","3.2.6 测试是否成功",[97,119252,119254],{"className":117281,"code":119253,"language":117283,"meta":25,"style":25},"sudo apt update\nsudo apt install firefox\n",[103,119255,119256,119264],{"__ignoreMap":25},[106,119257,119258,119260,119262],{"class":108,"line":109},[106,119259,24570],{"class":1955},[106,119261,117302],{"class":221},[106,119263,26236],{"class":221},[106,119265,119266,119268,119270,119272],{"class":108,"line":28},[106,119267,24570],{"class":1955},[106,119269,117302],{"class":221},[106,119271,23827],{"class":221},[106,119273,118990],{"class":221},[14,119275,119276],{},"这里提示snapd无法被安装，就证明成功了",[14,119278,119279],{},[23,119280],{"alt":25,"src":119281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-056.png",[77,119283,119285],{"id":119284},"_327-重新安装firefox浏览器没大有必要","3.2.7 重新安装FireFox浏览器（没大有必要）",[14,119287,119288],{},"我个人其实更偏好Google Chrome浏览器，浏览器是从Chrome官网下载deb进行安装的。所以我有浏览器了，就没必要安装火狐浏览器了，",[14,119290,119291],{},"但如果你确实喜欢Firefox，在删除掉Snap后，其实没法再通过Snap或Apt来安装Firefox了，而Firefox官网提供的下载，又没有deb包，没有桌面快捷方式，不是非常方便。",[14,119293,119294],{},"所以，你可以考虑使用Mozilla提供的源来安装debian版本的Firefox",[97,119296,119298],{"className":117281,"code":119297,"language":117283,"meta":25,"style":25},"# 添加Mozilla提供的源\nsudo add-apt-repository ppa:mozillateam\u002Fppa\n# 安装Firefox\nsudo apt update\nsudo apt install firefox\n",[103,119299,119300,119305,119314,119319,119327],{"__ignoreMap":25},[106,119301,119302],{"class":108,"line":109},[106,119303,119304],{"class":175},"# 添加Mozilla提供的源\n",[106,119306,119307,119309,119311],{"class":108,"line":28},[106,119308,24570],{"class":1955},[106,119310,118829],{"class":221},[106,119312,119313],{"class":221}," ppa:mozillateam\u002Fppa\n",[106,119315,119316],{"class":108,"line":1172},[106,119317,119318],{"class":175},"# 安装Firefox\n",[106,119320,119321,119323,119325],{"class":108,"line":1187},[106,119322,24570],{"class":1955},[106,119324,117302],{"class":221},[106,119326,26236],{"class":221},[106,119328,119329,119331,119333,119335],{"class":108,"line":1193},[106,119330,24570],{"class":1955},[106,119332,117302],{"class":221},[106,119334,23827],{"class":221},[106,119336,118990],{"class":221},[77,119338,119340],{"id":119339},"_328-跨ubuntu大版本更新","3.2.8 跨Ubuntu大版本更新",[14,119342,119343],{},"跨Ubuntu大版本更新，是指从Ubuntu22.04LTS更新到Ubuntu24.04LTS这种大版本更新。",[14,119345,119346],{},"跨Ubuntu大版本更新时，建议恢复snap，等更新完毕后再删掉snap，以防止Canonical公司从中作妖。",[97,119348,119350],{"className":117281,"code":119349,"language":117283,"meta":25,"style":25},"#删掉禁止安装snap的配置文件\nsudo rm -rf \u002Fetc\u002Fapt\u002Fpreferences.d\u002Fnosnap.pref\nsudo apt update\n\nsudo apt dist-update\n",[103,119351,119352,119357,119367,119375,119379],{"__ignoreMap":25},[106,119353,119354],{"class":108,"line":109},[106,119355,119356],{"class":175},"#删掉禁止安装snap的配置文件\n",[106,119358,119359,119361,119363,119365],{"class":108,"line":28},[106,119360,24570],{"class":1955},[106,119362,118538],{"class":221},[106,119364,25319],{"class":165},[106,119366,119200],{"class":221},[106,119368,119369,119371,119373],{"class":108,"line":1172},[106,119370,24570],{"class":1955},[106,119372,117302],{"class":221},[106,119374,26236],{"class":221},[106,119376,119377],{"class":108,"line":1187},[106,119378,2392],{"emptyLinePlaceholder":33},[106,119380,119381,119383,119385],{"class":108,"line":1193},[106,119382,24570],{"class":1955},[106,119384,117302],{"class":221},[106,119386,119387],{"class":221}," dist-update\n",[48,119389,119391],{"id":119390},"_33-中文输入法","3.3 中文输入法",[77,119393,119395],{"id":119394},"_331-搜狗ubuntu2204及以下","3.3.1 搜狗(Ubuntu22.04及以下)",[14,119397,119398],{},"官网下载搜狗输入法",[14,119400,119401],{},[23,119402],{"alt":25,"src":119403},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-057.png",[14,119405,119406],{},[23,119407],{"alt":25,"src":119408},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-058.png",[14,119410,119411],{},"打开终端输入如下",[97,119413,119415],{"className":117281,"code":119414,"language":117283,"meta":25,"style":25},"cd ~\u002FDownloads\u002F\nsudo apt install .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[103,119416,119417,119424],{"__ignoreMap":25},[106,119418,119419,119421],{"class":108,"line":109},[106,119420,101261],{"class":165},[106,119422,119423],{"class":221}," ~\u002FDownloads\u002F\n",[106,119425,119426,119428,119430,119432],{"class":108,"line":28},[106,119427,24570],{"class":1955},[106,119429,117302],{"class":221},[106,119431,23827],{"class":221},[106,119433,119434],{"class":221}," .\u002Fsogoupinyin_4.2.1.145_amd64.deb\n",[14,119436,119437],{},"打开Fcitx",[14,119439,119440,119443],{},[23,119441],{"alt":25,"src":119442},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-059.png",[23,119444],{"alt":25,"src":119445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-060.png",[14,119447,119448],{},[23,119449],{"alt":25,"src":119450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-061.png",[14,119452,119453],{},"添加搜狗输入法",[14,119455,119456],{},[23,119457],{"alt":25,"src":119458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-062.png",[14,119460,119461],{},[23,119462],{"alt":25,"src":119463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-063.png",[14,119465,119466],{},"将搜狗输入法设置为唯一输入法",[14,119468,119469],{},[23,119470],{"alt":25,"src":119471},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-064.png",[77,119473,119475],{"id":119474},"_332-fcitx5ubuntu2204及以上debian12及以上","3.3.2 Fcitx5(Ubuntu22.04及以上、Debian12及以上)",[60,119477,119478],{},[63,119479,119480],{},"卸载旧输入法",[97,119482,119484],{"className":118508,"code":119483,"language":118510,"meta":25,"style":25},"sudo apt purge fcitx* ibus*\n",[103,119485,119486],{"__ignoreMap":25},[106,119487,119488,119490,119492,119494,119497,119499,119502],{"class":108,"line":109},[106,119489,24570],{"class":1955},[106,119491,117302],{"class":221},[106,119493,117643],{"class":221},[106,119495,119496],{"class":221}," fcitx",[106,119498,572],{"class":165},[106,119500,119501],{"class":221}," ibus",[106,119503,119233],{"class":165},[60,119505,119506],{"start":28},[63,119507,119508],{},"安装Fcitx5",[97,119510,119512],{"className":117281,"code":119511,"language":117283,"meta":25,"style":25},"# 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",[103,119513,119514,119519,119533,119537,119542,119551,119559],{"__ignoreMap":25},[106,119515,119516],{"class":108,"line":109},[106,119517,119518],{"class":175},"# Ubuntu22.04及以上、Debian12及以上\n",[106,119520,119521,119523,119525,119527,119530],{"class":108,"line":28},[106,119522,24570],{"class":1955},[106,119524,117302],{"class":221},[106,119526,23827],{"class":221},[106,119528,119529],{"class":221}," fcitx5",[106,119531,119532],{"class":221}," fcitx5-chinese-addons\n",[106,119534,119535],{"class":108,"line":1172},[106,119536,2392],{"emptyLinePlaceholder":33},[106,119538,119539],{"class":108,"line":1187},[106,119540,119541],{"class":175},"# Ubuntu20.04\n",[106,119543,119544,119546,119548],{"class":108,"line":1193},[106,119545,24570],{"class":1955},[106,119547,118829],{"class":221},[106,119549,119550],{"class":221}," ppa:zhsj\u002Ffcitx5\n",[106,119552,119553,119555,119557],{"class":108,"line":1207},[106,119554,24570],{"class":1955},[106,119556,117302],{"class":221},[106,119558,26236],{"class":221},[106,119560,119561,119563,119565,119567,119569],{"class":108,"line":1213},[106,119562,24570],{"class":1955},[106,119564,117302],{"class":221},[106,119566,23827],{"class":221},[106,119568,119529],{"class":221},[106,119570,119532],{"class":221},[60,119572,119573,119576],{"start":1172},[63,119574,119575],{},"Reboot System",[63,119577,119578],{},"启动Fcitx5",[14,119580,119581],{},[23,119582],{"alt":25,"src":119583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-065.png",[60,119585,119586],{"start":1193},[63,119587,119588],{},"修改一些设置",[14,119590,119591],{},"将Pinyin和Keyboard - English US加入到左边。",[14,119593,119594],{},[23,119595],{"alt":25,"src":119596},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-066.png",[14,119598,119599],{},"添加快捷键以便于更好切换中英文",[14,119601,119602],{},[23,119603],{"alt":25,"src":119604},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-067.png",[60,119606,119607],{"start":1207},[63,119608,119609],{},"重启",[97,119611,119613],{"className":118508,"code":119612,"language":118510,"meta":25,"style":25},"sudo shutdown -r now\n",[103,119614,119615],{"__ignoreMap":25},[106,119616,119617,119619,119622,119625],{"class":108,"line":109},[106,119618,24570],{"class":1955},[106,119620,119621],{"class":221}," shutdown",[106,119623,119624],{"class":165}," -r",[106,119626,119627],{"class":221}," now\n",[60,119629,119630],{"start":1213},[63,119631,119632],{},"使用Fcitx5工具箱优化Fcitx5(进入Github自己看说明书安装)",[14,119634,119635],{},[355,119636,119637],{"href":119637,"rel":119638},"https:\u002F\u002Fgithub.com\u002Ffcitx\u002Ffcitx5",[23858],[60,119640,119641],{"start":1304},[63,119642,119643],{},"再重启",[97,119645,119646],{"className":118508,"code":119612,"language":118510,"meta":25,"style":25},[103,119647,119648],{"__ignoreMap":25},[106,119649,119650,119652,119654,119656],{"class":108,"line":109},[106,119651,24570],{"class":1955},[106,119653,119621],{"class":221},[106,119655,119624],{"class":165},[106,119657,119627],{"class":221},[48,119659,119661],{"id":119660},"_34-pip3源替换","3.4 pip3源替换",[14,119663,119664],{},"非Debian系发行版需要做。",[14,119666,119667],{},"像Ubuntu、Debian这类使用apt工具的发行版不需要此操作。",[14,119669,119670],{},"使用dnf的系统也可能不用做。",[97,119672,119674],{"className":117281,"code":119673,"language":117283,"meta":25,"style":25},"# 检查是否已安装 pip\npip3 --version\n# 如果未安装，先安装 pip3（见下方）\n# 配置 pip 使用清华源\npip3 config set global.index-url https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[103,119675,119676,119681,119688,119693,119698],{"__ignoreMap":25},[106,119677,119678],{"class":108,"line":109},[106,119679,119680],{"class":175},"# 检查是否已安装 pip\n",[106,119682,119683,119686],{"class":108,"line":28},[106,119684,119685],{"class":1955},"pip3",[106,119687,26287],{"class":165},[106,119689,119690],{"class":108,"line":1172},[106,119691,119692],{"class":175},"# 如果未安装，先安装 pip3（见下方）\n",[106,119694,119695],{"class":108,"line":1187},[106,119696,119697],{"class":175},"# 配置 pip 使用清华源\n",[106,119699,119700,119702,119705,119708,119711],{"class":108,"line":1193},[106,119701,119685],{"class":1955},[106,119703,119704],{"class":221}," config",[106,119706,119707],{"class":221}," set",[106,119709,119710],{"class":221}," global.index-url",[106,119712,119713],{"class":221}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[14,119715,119716],{},"按图中顺序敲，但是不出意外的话，会报错，因为大部分发行版不自带pip，所以请接着往下看。",[14,119718,119719],{},[23,119720],{"alt":25,"src":119721},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-068.png",[97,119723,119725],{"className":117281,"code":119724,"language":117283,"meta":25,"style":25},"#安装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",[103,119726,119727,119732,119740,119751,119755,119760,119779,119783,119788,119800,119804,119809],{"__ignoreMap":25},[106,119728,119729],{"class":108,"line":109},[106,119730,119731],{"class":175},"#安装pip3\n",[106,119733,119734,119736,119738],{"class":108,"line":28},[106,119735,24570],{"class":1955},[106,119737,117302],{"class":221},[106,119739,26236],{"class":221},[106,119741,119742,119744,119746,119748],{"class":108,"line":1172},[106,119743,24570],{"class":1955},[106,119745,26070],{"class":221},[106,119747,23827],{"class":221},[106,119749,119750],{"class":221}," python3-pip\n",[106,119752,119753],{"class":108,"line":1187},[106,119754,2392],{"emptyLinePlaceholder":33},[106,119756,119757],{"class":108,"line":1193},[106,119758,119759],{"class":175},"#更新pip3\n",[106,119761,119762,119764,119766,119768,119770,119772,119775,119777],{"class":108,"line":1207},[106,119763,100864],{"class":1955},[106,119765,100867],{"class":165},[106,119767,100890],{"class":221},[106,119769,23827],{"class":221},[106,119771,26424],{"class":165},[106,119773,119774],{"class":221}," https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple",[106,119776,100895],{"class":165},[106,119778,100898],{"class":221},[106,119780,119781],{"class":108,"line":1213},[106,119782,2392],{"emptyLinePlaceholder":33},[106,119784,119785],{"class":108,"line":1304},[106,119786,119787],{"class":175},"#设置pip源为清华源\n",[106,119789,119790,119792,119794,119796,119798],{"class":108,"line":1310},[106,119791,119685],{"class":1955},[106,119793,119704],{"class":221},[106,119795,119707],{"class":221},[106,119797,119710],{"class":221},[106,119799,119713],{"class":221},[106,119801,119802],{"class":108,"line":1322},[106,119803,2392],{"emptyLinePlaceholder":33},[106,119805,119806],{"class":108,"line":1604},[106,119807,119808],{"class":175},"#测试\n",[106,119810,119811,119813,119815,119817,119819,119821],{"class":108,"line":1609},[106,119812,100864],{"class":1955},[106,119814,100867],{"class":165},[106,119816,100890],{"class":221},[106,119818,23827],{"class":221},[106,119820,100895],{"class":165},[106,119822,100898],{"class":221},[14,119824,119825],{},"成功的话，会看到Looking后面是tsinghua字样。",[14,119827,119828],{},[23,119829],{"alt":25,"src":119830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-069.png",[48,119832,119834],{"id":119833},"_35-显卡驱动安装","3.5 显卡驱动安装",[77,119836,119838],{"id":119837},"_351-卸载显卡驱动卸载干净","3.5.1 卸载显卡驱动(卸载干净)",[97,119840,119842],{"className":118508,"code":119841,"language":118510,"meta":25,"style":25},"# 如果是使用apt安装的驱动\nsudo apt-get remove --purge nvidia*\n# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\nsudo \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[103,119843,119844,119849,119864,119869],{"__ignoreMap":25},[106,119845,119846],{"class":108,"line":109},[106,119847,119848],{"class":175},"# 如果是使用apt安装的驱动\n",[106,119850,119851,119853,119855,119857,119859,119862],{"class":108,"line":28},[106,119852,24570],{"class":1955},[106,119854,26070],{"class":221},[106,119856,26073],{"class":221},[106,119858,119143],{"class":165},[106,119860,119861],{"class":221}," nvidia",[106,119863,119233],{"class":165},[106,119865,119866],{"class":108,"line":1172},[106,119867,119868],{"class":175},"# 如果使用了.run文件进行安装的，再使用下面命令卸载干净\n",[106,119870,119871,119873],{"class":108,"line":1187},[106,119872,24570],{"class":1955},[106,119874,119875],{"class":221}," \u002Fusr\u002Fbin\u002Fnvidia-uninstall\n",[77,119877,119879],{"id":119878},"_352-安装显卡驱动","3.5.2 安装显卡驱动",[21991,119881,119883],{"id":119882},"_3521-apt安装英伟达驱动方式一","3.5.2.1 APT安装英伟达驱动（方式一）",[22903,119885,119887],{"id":119886},"_35211-ubuntu","3.5.2.1.1 Ubuntu",[97,119889,119891],{"className":118508,"code":119890,"language":118510,"meta":25,"style":25},"# 安装英伟达驱动\nsudo apt install nvidia-driver-版本号\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[103,119892,119893,119898,119909,119914,119924,119929],{"__ignoreMap":25},[106,119894,119895],{"class":108,"line":109},[106,119896,119897],{"class":175},"# 安装英伟达驱动\n",[106,119899,119900,119902,119904,119906],{"class":108,"line":28},[106,119901,24570],{"class":1955},[106,119903,117302],{"class":221},[106,119905,23827],{"class":221},[106,119907,119908],{"class":221}," nvidia-driver-版本号\n",[106,119910,119911],{"class":108,"line":1172},[106,119912,119913],{"class":175},"# 重启 \n",[106,119915,119916,119918,119920,119922],{"class":108,"line":1187},[106,119917,24570],{"class":1955},[106,119919,119621],{"class":221},[106,119921,119624],{"class":165},[106,119923,119627],{"class":221},[106,119925,119926],{"class":108,"line":1193},[106,119927,119928],{"class":175},"# 检查驱动是否安装成功\n",[106,119930,119931],{"class":108,"line":1207},[106,119932,119933],{"class":1955},"nvidia-smi\n",[22903,119935,119937],{"id":119936},"_35212-debian","3.5.2.1.2 Debian",[97,119939,119941],{"className":118508,"code":119940,"language":118510,"meta":25,"style":25},"# 安装英伟达驱动\nsudo apt install nvidia-driver nvidia-settings\n# 重启 \nsudo shutdown -r now\n# 检查驱动是否安装成功\nnvidia-smi\n",[103,119942,119943,119947,119961,119965,119975,119979],{"__ignoreMap":25},[106,119944,119945],{"class":108,"line":109},[106,119946,119897],{"class":175},[106,119948,119949,119951,119953,119955,119958],{"class":108,"line":28},[106,119950,24570],{"class":1955},[106,119952,117302],{"class":221},[106,119954,23827],{"class":221},[106,119956,119957],{"class":221}," nvidia-driver",[106,119959,119960],{"class":221}," nvidia-settings\n",[106,119962,119963],{"class":108,"line":1172},[106,119964,119913],{"class":175},[106,119966,119967,119969,119971,119973],{"class":108,"line":1187},[106,119968,24570],{"class":1955},[106,119970,119621],{"class":221},[106,119972,119624],{"class":165},[106,119974,119627],{"class":221},[106,119976,119977],{"class":108,"line":1193},[106,119978,119928],{"class":175},[106,119980,119981],{"class":108,"line":1207},[106,119982,119933],{"class":1955},[21991,119984,119986],{"id":119985},"_3522-官网下载驱动方式二","3.5.2.2 官网下载驱动（方式二）",[14,119988,119989,119990,119993],{},"使用这种方式安装，需要先禁用掉nouveau，请先往下翻，找到",[266,119991,119992],{},"常见问题","那节内容里的禁用nouveau，将nouveau禁用。",[14,119995,119996,119997],{},"用以下命令停止可视化桌面环境（用ctrl alt f*也可以）",[23546,119998,119999],{},[266,120000,120001],{},"（也可以不禁用桌面环境，直接进行下一步。）",[97,120003,120005],{"className":118508,"code":120004,"language":118510,"meta":25,"style":25},"# 通用的命令（sudo telinit 5是打开图形界面）\nsudo telinit 3\n# ubuntu 使用下方命令\nsudo service lightdm stop\n# Fedora 使用下方命令\nsudo systemctl isolate multi-user.target\n",[103,120006,120007,120012,120022,120027,120040,120045],{"__ignoreMap":25},[106,120008,120009],{"class":108,"line":109},[106,120010,120011],{"class":175},"# 通用的命令（sudo telinit 5是打开图形界面）\n",[106,120013,120014,120016,120019],{"class":108,"line":28},[106,120015,24570],{"class":1955},[106,120017,120018],{"class":221}," telinit",[106,120020,120021],{"class":165}," 3\n",[106,120023,120024],{"class":108,"line":1172},[106,120025,120026],{"class":175},"# ubuntu 使用下方命令\n",[106,120028,120029,120031,120034,120037],{"class":108,"line":1187},[106,120030,24570],{"class":1955},[106,120032,120033],{"class":221}," service",[106,120035,120036],{"class":221}," lightdm",[106,120038,120039],{"class":221}," stop\n",[106,120041,120042],{"class":108,"line":1193},[106,120043,120044],{"class":175},"# Fedora 使用下方命令\n",[106,120046,120047,120049,120051,120054],{"class":108,"line":1207},[106,120048,24570],{"class":1955},[106,120050,26507],{"class":221},[106,120052,120053],{"class":221}," isolate",[106,120055,120056],{"class":221}," multi-user.target\n",[14,120058,120059],{},"之后会进入一个新的命令行会话，使用当前的用户名密码登录。(不用使用root用户)",[97,120061,120063],{"className":118508,"code":120062,"language":118510,"meta":25,"style":25},"# 编译环境+准备工作\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",[103,120064,120065,120070,120081,120086,120093,120098,120110,120115,120122,120127],{"__ignoreMap":25},[106,120066,120067],{"class":108,"line":109},[106,120068,120069],{"class":175},"# 编译环境+准备工作\n",[106,120071,120072,120074,120076,120078],{"class":108,"line":28},[106,120073,24570],{"class":1955},[106,120075,117302],{"class":221},[106,120077,23827],{"class":221},[106,120079,120080],{"class":221}," build-essential\n",[106,120082,120083],{"class":108,"line":1172},[106,120084,120085],{"class":175},"# 进入到.run目录中\n",[106,120087,120088,120090],{"class":108,"line":1187},[106,120089,101261],{"class":165},[106,120091,120092],{"class":221}," \u002Fhome\u002Ftungchiahui\u002FDownloads\u002F\n",[106,120094,120095],{"class":108,"line":1193},[106,120096,120097],{"class":175},"# 给驱动文件增加可执行权限：\n",[106,120099,120100,120102,120104,120107],{"class":108,"line":1207},[106,120101,24570],{"class":1955},[106,120103,24573],{"class":221},[106,120105,120106],{"class":221}," a+x",[106,120108,120109],{"class":221}," NVIDIA-Linux-x86_64-550.107.02.run\n",[106,120111,120112],{"class":108,"line":1213},[106,120113,120114],{"class":175},"# 然后执行安装：\n",[106,120116,120117,120119],{"class":108,"line":1304},[106,120118,24570],{"class":1955},[106,120120,120121],{"class":221}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run\n",[106,120123,120124],{"class":108,"line":1310},[106,120125,120126],{"class":175},"# 如果有异常则：(一般不用下方这条，会导致OPENGL没法被安装，这样ROS有些功能无法使用)\n",[106,120128,120129,120131,120134],{"class":108,"line":1322},[106,120130,24570],{"class":1955},[106,120132,120133],{"class":221}," .\u002FNVIDIA-Linux-x86_64-550.107.02.run",[106,120135,120136],{"class":165},"  --no-opengl-files\n",[14,120138,120139],{},"安装完毕重启即可",[97,120141,120143],{"className":118508,"code":120142,"language":118510,"meta":25,"style":25},"# 重启 \nsudo reboot\n# 检查驱动是否安装成功\nnvidia-smi\n",[103,120144,120145,120149,120155,120159],{"__ignoreMap":25},[106,120146,120147],{"class":108,"line":109},[106,120148,119913],{"class":175},[106,120150,120151,120153],{"class":108,"line":28},[106,120152,24570],{"class":1955},[106,120154,26641],{"class":221},[106,120156,120157],{"class":108,"line":1172},[106,120158,119928],{"class":175},[106,120160,120161],{"class":108,"line":1187},[106,120162,119933],{"class":1955},[77,120164,120166],{"id":120165},"_353-安装cuda","3.5.3 安装CUDA",[14,120168,120169],{},"（此教程以Debian 12 Bookworm和RTX3060Laptop为例）(Ubuntu也类似)",[14,120171,120172],{},[23,120173],{"alt":25,"src":120174},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-070.png",[60,120176,120177],{},[63,120178,120179],{},"先查看显卡驱动所支持的最高CUDA版本",[97,120181,120182],{"className":118508,"code":119933,"language":118510,"meta":25,"style":25},[103,120183,120184],{"__ignoreMap":25},[106,120185,120186],{"class":108,"line":109},[106,120187,119933],{"class":1955},[14,120189,120190],{},"左边是英伟达驱动版本，右边是所支持CUDA的最高版本，注意是最高版本，比这个版本低的CUDA都是可以安装的。(不用追求最高，稳定即可，虽然都很稳定)",[14,120192,120193],{},[23,120194],{"alt":25,"src":120195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-071.png",[60,120197,120198],{"start":28},[63,120199,120200],{},"下载CUDA并安装CUDA",[14,120202,118287,120203],{},[355,120204,118290],{"href":118290,"rel":120205},[23858],[14,120207,120208],{},"选择一个版本，这里以CUDA12.4为例（绿色框住的都是我这台电脑对应可安装的版本，而红色框则不能）",[14,120210,120211],{},[23,120212],{"alt":25,"src":120213},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-072.png",[14,120215,120216,120217,120222],{},"我这里是Intel CPU(X86_64架构或者叫amd64架构)，所以选择X86_64。（AMD和Intel全是X86的，如果分不清，请看",[355,120218,120221],{"href":120219,"rel":120220},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FPqsGwcPCuidbN6k13jfcGWtWn0b",[23858],"Vinci机器人队单片机教程","）",[14,120224,120225],{},"我是Debian12，所以选择了Debian12 ,(你是Ubuntu要选择Ubuntu)如下图所示，建议选择runfile文件进行安装。",[14,120227,120228],{},[23,120229],{"alt":25,"src":120230},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-073.png",[14,120232,120233],{},"将最下方框框里的命令敲入终端",[97,120235,120237],{"className":118508,"code":120236,"language":118510,"meta":25,"style":25},"# 在当前文件夹下创建一个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",[103,120238,120239,120244,120253,120258,120265,120270,120278,120283,120294,120299],{"__ignoreMap":25},[106,120240,120241],{"class":108,"line":109},[106,120242,120243],{"class":175},"# 在当前文件夹下创建一个ttt的子文件夹\n",[106,120245,120246,120248,120250],{"class":108,"line":28},[106,120247,101251],{"class":1955},[106,120249,29210],{"class":165},[106,120251,120252],{"class":221}," .\u002Fttt\n",[106,120254,120255],{"class":108,"line":1172},[106,120256,120257],{"class":175},"# 进入ttt文件夹\n",[106,120259,120260,120262],{"class":108,"line":1187},[106,120261,101261],{"class":165},[106,120263,120264],{"class":221}," ttt\n",[106,120266,120267],{"class":108,"line":1193},[106,120268,120269],{"class":175},"# 输入复制的第一条命令（用来下载cuda的runfile文件）\n",[106,120271,120272,120275],{"class":108,"line":1207},[106,120273,120274],{"class":1955},"wget",[106,120276,120277],{"class":221}," https:\u002F\u002Fdeveloper.download.nvidia.com\u002Fcompute\u002Fcuda\u002F12.4.0\u002Flocal_installers\u002Fcuda_12.4.0_550.54.14_linux.run\n",[106,120279,120280],{"class":108,"line":1213},[106,120281,120282],{"class":175},"# 给予权限\n",[106,120284,120285,120287,120289,120291],{"class":108,"line":1304},[106,120286,24570],{"class":1955},[106,120288,24573],{"class":221},[106,120290,120106],{"class":221},[106,120292,120293],{"class":221}," .\u002Fcuda_12.4.0_550.54.14_linux.run\n",[106,120295,120296],{"class":108,"line":1310},[106,120297,120298],{"class":175},"# 运行脚本\n",[106,120300,120301,120303],{"class":108,"line":1322},[106,120302,24570],{"class":1955},[106,120304,120293],{"class":221},[14,120306,120307],{},[23,120308],{"alt":25,"src":120309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-074.png",[14,120311,120312],{},"正在安装中：",[14,120314,120315],{},[23,120316],{"alt":25,"src":120317},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-075.png",[14,120319,120320],{},"输入accept接受即可",[14,120322,120323],{},[23,120324],{"alt":25,"src":120325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-076.png",[14,120327,120328],{},"因为我们已经安装了驱动，所以删掉该项，Install即可。",[14,120330,120331],{},[23,120332],{"alt":25,"src":120333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-077.png",[14,120335,120336],{},"等待片刻后，一般不出红色字体就是安装成功了，可以读读英语确认一下。(顺便确定一下位置)",[14,120338,120339],{},[23,120340],{"alt":25,"src":120341},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-078.png",[60,120343,120344],{"start":1172},[63,120345,120346],{},"配置环境",[14,120348,120349],{},"根据上方确认一下路径，比如我上面红色框起来的为",[97,120351,120353],{"className":118508,"code":120352,"language":118510,"meta":25,"style":25},"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",[103,120354,120355,120371,120386],{"__ignoreMap":25},[106,120356,120357,120360,120363,120366,120369],{"class":108,"line":109},[106,120358,120359],{"class":1955},"Please",[106,120361,120362],{"class":221}," make",[106,120364,120365],{"class":221}," sure",[106,120367,120368],{"class":221}," that",[106,120370,2666],{"class":116},[106,120372,120373,120375,120378,120381,120384],{"class":108,"line":28},[106,120374,52265],{"class":1955},[106,120376,120377],{"class":221},"   PATH",[106,120379,120380],{"class":221}," includes",[106,120382,120383],{"class":221}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin",[106,120385,2666],{"class":116},[106,120387,120388,120390,120393,120395,120398,120401,120403,120406,120409,120412,120415,120417,120420,120422],{"class":108,"line":1172},[106,120389,52265],{"class":1955},[106,120391,120392],{"class":221},"   LD_LIBRARY_PATH",[106,120394,120380],{"class":221},[106,120396,120397],{"class":221}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64,",[106,120399,120400],{"class":221}," or,",[106,120402,5202],{"class":221},[106,120404,120405],{"class":221}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64",[106,120407,120408],{"class":221}," to",[106,120410,120411],{"class":221}," \u002Fetc\u002Fld.so.conf",[106,120413,120414],{"class":221}," and",[106,120416,27224],{"class":221},[106,120418,120419],{"class":221}," ldconfig",[106,120421,64598],{"class":221},[106,120423,120424],{"class":221}," root\n",[14,120426,120427],{},"如果刚才忘记查看了，也可以使用下方命令查看路径：",[97,120429,120431],{"className":118508,"code":120430,"language":118510,"meta":25,"style":25},"which nvcc\n",[103,120432,120433],{"__ignoreMap":25},[106,120434,120435,120438],{"class":108,"line":109},[106,120436,120437],{"class":165},"which",[106,120439,120440],{"class":221}," nvcc\n",[14,120442,120443],{},[23,120444],{"alt":25,"src":120445},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-079.png",[14,120447,120448],{},"所以我进行以下操作：",[97,120450,120452],{"className":118508,"code":120451,"language":118510,"meta":25,"style":25},"sudo vim ~\u002F.bashrc\n",[103,120453,120454],{"__ignoreMap":25},[106,120455,120456,120458,120460],{"class":108,"line":109},[106,120457,24570],{"class":1955},[106,120459,118568],{"class":221},[106,120461,120462],{"class":221}," ~\u002F.bashrc\n",[14,120464,120465],{},"复制下面这一串到~\u002F.bashrc文件中，并保存，不会用vim编辑器的请自行百度。",[97,120467,120469],{"className":118508,"code":120468,"language":118510,"meta":25,"style":25},"export PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\nexport LD_LIBRARY_PATH=\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[103,120470,120471,120483],{"__ignoreMap":25},[106,120472,120473,120475,120478,120480],{"class":108,"line":109},[106,120474,25036],{"class":112},[106,120476,120477],{"class":116}," PATH",[106,120479,162],{"class":112},[106,120481,120482],{"class":116},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Fbin:$PATH\n",[106,120484,120485,120487,120490,120492],{"class":108,"line":28},[106,120486,25036],{"class":112},[106,120488,120489],{"class":116}," LD_LIBRARY_PATH",[106,120491,162],{"class":112},[106,120493,120494],{"class":116},"\u002Fusr\u002Flocal\u002Fcuda-12.4\u002Flib64:$LD_LIBRARY_PATH\n",[14,120496,120497],{},[23,120498],{"alt":25,"src":120499},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-080.png",[97,120501,120503],{"className":118508,"code":120502,"language":118510,"meta":25,"style":25},"# 刷新当前终端的环境变量\nsource ~\u002F.bashrc\n# 验证CUDA是否安装成功\nnvcc -V\n",[103,120504,120505,120510,120516,120521],{"__ignoreMap":25},[106,120506,120507],{"class":108,"line":109},[106,120508,120509],{"class":175},"# 刷新当前终端的环境变量\n",[106,120511,120512,120514],{"class":108,"line":28},[106,120513,100878],{"class":165},[106,120515,120462],{"class":221},[106,120517,120518],{"class":108,"line":1172},[106,120519,120520],{"class":175},"# 验证CUDA是否安装成功\n",[106,120522,120523,120526],{"class":108,"line":1187},[106,120524,120525],{"class":1955},"nvcc",[106,120527,120528],{"class":165}," -V\n",[14,120530,120531],{},"出现下图这种则安装成功。",[14,120533,120534],{},[23,120535],{"alt":25,"src":120536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-081.png",[77,120538,120540],{"id":120539},"_354-安装cudnn","3.5.4 安装cuDNN",[60,120542,120543],{},[63,120544,120545],{},"据安装好的CUDA版本选择合适的cuDNN版本进行下载，注意这里是需要注册登录的：",[14,120547,120548,120549,120554],{},"前往 NVIDIA cuDNN 下载页面：",[355,120550,120553],{"href":120551,"rel":120552},"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn%EF%BC%88%E9%9C%80%E8%A6%81%E6%B3%A8%E5%86%8C",[23858],"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcudnn（需要注册"," NVIDIA 开发者账号并登录）",[14,120556,120557],{},"因为我是CUDA12.4，所以下方红圈版本都是可以安装的，越新越好。",[14,120559,120560],{},[23,120561],{"alt":25,"src":120562},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-082.png",[14,120564,120565],{},"红色是X86架构的所有Linux通用的，所以我选择红色的。",[14,120567,120568],{},[23,120569],{"alt":25,"src":120570},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-083.png",[14,120572,120573],{},"绿色的是X86架构的Ubuntu，是Ubuntu且CPU为X86架构的可以选择下载。",[14,120575,120576],{},"蓝色的是arm64(aarch64)架构的Ubuntu，是Ubuntu且CPU为arm64(aarch64)架构的可以选择下载。",[14,120578,120579],{},[266,120580,120581],{},"我这里选择所有Linux X86_64最通用的办法：",[14,120583,120584],{},"下载好的：",[14,120586,120587],{},[23,120588],{"alt":25,"src":120589},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-084.png",[60,120591,120592],{"start":28},[63,120593,120594],{},"安装cuDNN",[14,120596,120597],{},"找到该文件所在目录，并打开终端，cd到该目录。",[14,120599,120600],{},[23,120601],{"alt":25,"src":120602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-085.png",[14,120604,120605],{},"解压文件，并复制到对应位置完成安装",[97,120607,120609],{"className":118508,"code":120608,"language":118510,"meta":25,"style":25},"# 解压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",[103,120610,120611,120616,120627,120632,120639,120644,120660,120674,120679,120690,120699,120703,120719],{"__ignoreMap":25},[106,120612,120613],{"class":108,"line":109},[106,120614,120615],{"class":175},"# 解压cuDNN文件\n",[106,120617,120618,120621,120624],{"class":108,"line":28},[106,120619,120620],{"class":1955},"tar",[106,120622,120623],{"class":165}," -xvf",[106,120625,120626],{"class":221}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz\n",[106,120628,120629],{"class":108,"line":1172},[106,120630,120631],{"class":175},"# cd进文件夹\n",[106,120633,120634,120636],{"class":108,"line":1187},[106,120635,101261],{"class":165},[106,120637,120638],{"class":221}," .\u002Fcudnn-linux-x86_64-8.9.7.29_cuda12-archive\n",[106,120640,120641],{"class":108,"line":1193},[106,120642,120643],{"class":175},"# 复制cuDNN文件到CUDA目录\n",[106,120645,120646,120648,120650,120653,120655,120658],{"class":108,"line":1207},[106,120647,24570],{"class":1955},[106,120649,27855],{"class":221},[106,120651,120652],{"class":221}," include\u002Fcudnn",[106,120654,572],{"class":165},[106,120656,120657],{"class":221},"    \u002Fusr\u002Flocal\u002Fcuda\u002Finclude",[106,120659,2666],{"class":116},[106,120661,120662,120664,120666,120669,120671],{"class":108,"line":1213},[106,120663,24570],{"class":1955},[106,120665,27855],{"class":221},[106,120667,120668],{"class":221}," lib\u002Flibcudnn",[106,120670,572],{"class":165},[106,120672,120673],{"class":221},"    \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\n",[106,120675,120676],{"class":108,"line":1304},[106,120677,120678],{"class":175},"# 对比一下有没有缺文件\n",[106,120680,120681,120683,120686,120688],{"class":108,"line":1310},[106,120682,26755],{"class":1955},[106,120684,120685],{"class":221}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn",[106,120687,572],{"class":165},[106,120689,2666],{"class":116},[106,120691,120692,120694,120697],{"class":108,"line":1322},[106,120693,26755],{"class":1955},[106,120695,120696],{"class":221}," \u002Fusr\u002Flocal\u002Fcuda\u002Flib64\u002Flibcudnn",[106,120698,119233],{"class":165},[106,120700,120701],{"class":108,"line":1604},[106,120702,120282],{"class":175},[106,120704,120705,120707,120709,120712,120714,120716],{"class":108,"line":1609},[106,120706,24570],{"class":1955},[106,120708,24573],{"class":221},[106,120710,120711],{"class":221}," a+r",[106,120713,120685],{"class":221},[106,120715,572],{"class":165},[106,120717,120718],{"class":116},"   \n",[106,120720,120721,120723,120725,120727,120729],{"class":108,"line":1615},[106,120722,24570],{"class":1955},[106,120724,24573],{"class":221},[106,120726,120711],{"class":221},[106,120728,120696],{"class":221},[106,120730,119233],{"class":165},[60,120732,120733],{"start":1172},[63,120734,120735],{},"检查是否安装成功",[97,120737,120739],{"className":118508,"code":120738,"language":118510,"meta":25,"style":25},"# 检查cuDNN版本命令\ncat \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h | grep CUDNN_MAJOR -A 2\n",[103,120740,120741,120746],{"__ignoreMap":25},[106,120742,120743],{"class":108,"line":109},[106,120744,120745],{"class":175},"# 检查cuDNN版本命令\n",[106,120747,120748,120751,120754,120756,120758,120761,120764],{"class":108,"line":28},[106,120749,120750],{"class":1955},"cat",[106,120752,120753],{"class":221}," \u002Fusr\u002Flocal\u002Fcuda\u002Finclude\u002Fcudnn_version.h",[106,120755,25103],{"class":112},[106,120757,30230],{"class":1955},[106,120759,120760],{"class":221}," CUDNN_MAJOR",[106,120762,120763],{"class":165}," -A",[106,120765,47717],{"class":165},[14,120767,120768],{},"出现下图这样的就是安装成功了",[14,120770,120771],{},[23,120772],{"alt":25,"src":120773},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-086.png",[60,120775,120776],{"start":1187},[63,120777,120778],{},"软链接(一般不需要)",[97,120780,120782],{"className":118508,"code":120781,"language":118510,"meta":25,"style":25},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\nsudo ldconfig\n",[103,120783,120784,120789],{"__ignoreMap":25},[106,120785,120786],{"class":108,"line":109},[106,120787,120788],{"class":175},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何错误，说明配置已经完成。）\n",[106,120790,120791,120793],{"class":108,"line":28},[106,120792,24570],{"class":1955},[106,120794,120795],{"class":221}," ldconfig\n",[14,120797,120798],{},"如果出现下列提示，则需要软链接**(如果没有下列提示，则什么都不需要做)**",[97,120800,120805],{"className":120801,"code":120802,"language":120803,"meta":120804,"style":25},"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",[103,120806,120807,120812,120817,120822,120827,120832,120837],{"__ignoreMap":25},[106,120808,120809],{"class":108,"line":109},[106,120810,120811],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_train.so.8 is not a symbolic link  \n",[106,120813,120814],{"class":108,"line":28},[106,120815,120816],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_train.so.8 is not a symbolic link  \n",[106,120818,120819],{"class":108,"line":1172},[106,120820,120821],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_ops_infer.so.8 is not a symbolic link  \n",[106,120823,120824],{"class":108,"line":1187},[106,120825,120826],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_infer.so.8 is not a symbolic link  \n",[106,120828,120829],{"class":108,"line":1193},[106,120830,120831],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_cnn_infer.so.8 is not a symbolic link  \n",[106,120833,120834],{"class":108,"line":1207},[106,120835,120836],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn.so.8 is not a symbolic link  \n",[106,120838,120839],{"class":108,"line":1213},[106,120840,120841],{},"ldconfig: \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_adv_train.so.8 is not a symbolic link\n",[14,120843,120844],{},"运行下方的命令",[97,120846,120848],{"className":118508,"code":120847,"language":118510,"meta":25,"style":25},"# cd进入CUDA路径\ncd \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n # 查看本路径下的需要软链接的文件名\n ls\n",[103,120849,120850,120855,120862,120867],{"__ignoreMap":25},[106,120851,120852],{"class":108,"line":109},[106,120853,120854],{"class":175},"# cd进入CUDA路径\n",[106,120856,120857,120859],{"class":108,"line":28},[106,120858,101261],{"class":165},[106,120860,120861],{"class":221}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\n",[106,120863,120864],{"class":108,"line":1172},[106,120865,120866],{"class":175}," # 查看本路径下的需要软链接的文件名\n",[106,120868,120869],{"class":108,"line":1187},[106,120870,120871],{"class":1955}," ls\n",[14,120873,120874],{},[23,120875],{"alt":25,"src":120876},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-087.png",[14,120878,120879,120880,18403,120883,18403,120886,120889],{},"如上图，我需要将",[103,120881,120882],{},"libcudnn_xxx_xxxxx.so.8.9.7",[103,120884,120885],{},"libcudnn_xxx_xxxxx.so.8",[103,120887,120888],{},"libcudnn_xxx_xxxxx.so","软链接",[97,120891,120893],{"className":118508,"code":120892,"language":118510,"meta":25,"style":25},"# 创建符号链接。对于每个 .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",[103,120894,120895,120900,120916,120930,120944,120958,120972,120986,121000,121005,121011,121016],{"__ignoreMap":25},[106,120896,120897],{"class":108,"line":109},[106,120898,120899],{"class":175},"# 创建符号链接。对于每个 .so.8 文件，需要创建一个指向该文件的符号链接，通常链接的名称是不包含 .8 的文件名。\n",[106,120901,120902,120904,120907,120910,120913],{"class":108,"line":28},[106,120903,24570],{"class":1955},[106,120905,120906],{"class":221}," ln",[106,120908,120909],{"class":165}," -sf",[106,120911,120912],{"class":221}," libcudnn_cnn_train.so.8.9.7",[106,120914,120915],{"class":221}," libcudnn_cnn_train.so.8\n",[106,120917,120918,120920,120922,120924,120927],{"class":108,"line":1172},[106,120919,24570],{"class":1955},[106,120921,120906],{"class":221},[106,120923,120909],{"class":165},[106,120925,120926],{"class":221}," libcudnn_adv_infer.so.8.9.7",[106,120928,120929],{"class":221}," libcudnn_adv_infer.so.8\n",[106,120931,120932,120934,120936,120938,120941],{"class":108,"line":1187},[106,120933,24570],{"class":1955},[106,120935,120906],{"class":221},[106,120937,120909],{"class":165},[106,120939,120940],{"class":221}," libcudnn_adv_train.so.8.9.7",[106,120942,120943],{"class":221}," libcudnn_adv_train.so.8\n",[106,120945,120946,120948,120950,120952,120955],{"class":108,"line":1193},[106,120947,24570],{"class":1955},[106,120949,120906],{"class":221},[106,120951,120909],{"class":165},[106,120953,120954],{"class":221}," libcudnn_cnn_infer.so.8.9.7",[106,120956,120957],{"class":221}," libcudnn_cnn_infer.so.8\n",[106,120959,120960,120962,120964,120966,120969],{"class":108,"line":1207},[106,120961,24570],{"class":1955},[106,120963,120906],{"class":221},[106,120965,120909],{"class":165},[106,120967,120968],{"class":221}," libcudnn.so.8.9.7",[106,120970,120971],{"class":221}," libcudnn.so.8\n",[106,120973,120974,120976,120978,120980,120983],{"class":108,"line":1213},[106,120975,24570],{"class":1955},[106,120977,120906],{"class":221},[106,120979,120909],{"class":165},[106,120981,120982],{"class":221}," libcudnn_ops_infer.so.8.9.7",[106,120984,120985],{"class":221}," libcudnn_ops_infer.so.8\n",[106,120987,120988,120990,120992,120994,120997],{"class":108,"line":1304},[106,120989,24570],{"class":1955},[106,120991,120906],{"class":221},[106,120993,120909],{"class":165},[106,120995,120996],{"class":221}," libcudnn_ops_train.so.8.9.7",[106,120998,120999],{"class":221}," libcudnn_ops_train.so.8\n",[106,121001,121002],{"class":108,"line":1310},[106,121003,121004],{"class":175},"# 运行 ldconfig 以更新库缓存：（如果运行 ldconfig 后没有出现任何提示，说明配置已经完成。）\n",[106,121006,121007,121009],{"class":108,"line":1322},[106,121008,24570],{"class":1955},[106,121010,120795],{"class":221},[106,121012,121013],{"class":108,"line":1604},[106,121014,121015],{"class":175},"# 使用 ls -l 来确认符号链接是否创建成功：(再次确认链接）\n",[106,121017,121018,121020,121023,121026,121028,121031],{"class":108,"line":1609},[106,121019,26755],{"class":1955},[106,121021,121022],{"class":165}," -l",[106,121024,121025],{"class":221}," \u002Fusr\u002Flocal\u002Fcuda-12.4\u002Ftargets\u002Fx86_64-linux\u002Flib\u002Flibcudnn_",[106,121027,572],{"class":165},[106,121029,121030],{"class":221},".so",[106,121032,119233],{"class":165},[77,121034,121036],{"id":121035},"_355-常见问题","3.5.5 常见问题",[60,121038,121039],{},[63,121040,121041],{},"禁用开源驱动nouveau，nouveau经常会引起卡顿黑屏，所以要禁用",[97,121043,121045],{"className":118508,"code":121044,"language":118510,"meta":25,"style":25},"sudo vim \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[103,121046,121047],{"__ignoreMap":25},[106,121048,121049,121051,121053],{"class":108,"line":109},[106,121050,24570],{"class":1955},[106,121052,118568],{"class":221},[106,121054,121055],{"class":221}," \u002Fetc\u002Fmodprobe.d\u002Fblacklist-nouveau.conf\n",[14,121057,121058],{},"blacklist-nouveau.conf文件内容如下：",[97,121060,121062],{"className":118508,"code":121061,"language":118510,"meta":25,"style":25},"blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n",[103,121063,121064,121072,121079,121091,121101],{"__ignoreMap":25},[106,121065,121066,121069],{"class":108,"line":109},[106,121067,121068],{"class":1955},"blacklist",[106,121070,121071],{"class":221}," nouveau\n",[106,121073,121074,121076],{"class":108,"line":28},[106,121075,121068],{"class":1955},[106,121077,121078],{"class":221}," lbm-nouveau\n",[106,121080,121081,121083,121086,121089],{"class":108,"line":1172},[106,121082,115915],{"class":1955},[106,121084,121085],{"class":221}," nouveau",[106,121087,121088],{"class":221}," modeset=",[106,121090,3077],{"class":165},[106,121092,121093,121096,121098],{"class":108,"line":1187},[106,121094,121095],{"class":165},"alias",[106,121097,121085],{"class":221},[106,121099,121100],{"class":221}," off\n",[106,121102,121103,121105,121108],{"class":108,"line":1193},[106,121104,121095],{"class":165},[106,121106,121107],{"class":221}," lbm-nouveau",[106,121109,121100],{"class":221},[14,121111,121112],{},"接着运行下方命令",[97,121114,121116],{"className":118508,"code":121115,"language":118510,"meta":25,"style":25},"sudo update-initramfs -u\n或者\nsudo dracut --force\n",[103,121117,121118,121128,121133],{"__ignoreMap":25},[106,121119,121120,121122,121125],{"class":108,"line":109},[106,121121,24570],{"class":1955},[106,121123,121124],{"class":221}," update-initramfs",[106,121126,121127],{"class":165}," -u\n",[106,121129,121130],{"class":108,"line":28},[106,121131,121132],{"class":1955},"或者\n",[106,121134,121135,121137,121140],{"class":108,"line":1172},[106,121136,24570],{"class":1955},[106,121138,121139],{"class":221}," dracut",[106,121141,121142],{"class":165}," --force\n",[14,121144,121145],{},"重启后，查询nouveau是否还开着，如果什么都不出现，说明禁用成功。",[97,121147,121149],{"className":118508,"code":121148,"language":118510,"meta":25,"style":25},"lsmod | grep nouveau\n",[103,121150,121151],{"__ignoreMap":25},[106,121152,121153,121156,121158,121160],{"class":108,"line":109},[106,121154,121155],{"class":1955},"lsmod",[106,121157,25103],{"class":112},[106,121159,30230],{"class":1955},[106,121161,121071],{"class":221},[60,121163,121164],{"start":28},[63,121165,121166],{},"无法调节屏幕亮度，无法使用HDMI插口(这是因为xorg文件没配置)",[97,121168,121170],{"className":118508,"code":121169,"language":118510,"meta":25,"style":25},"sudo vim \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[103,121171,121172],{"__ignoreMap":25},[106,121173,121174,121176,121178],{"class":108,"line":109},[106,121175,24570],{"class":1955},[106,121177,118568],{"class":221},[106,121179,121180],{"class":221}," \u002Fusr\u002Fshare\u002FX11\u002Fxorg.conf.d\u002F10-nvidia.conf\n",[14,121182,121183],{},"并把10-nvidia.conf里的内容修改为下方内容并保存，然后重启即可。",[97,121185,121187],{"className":118508,"code":121186,"language":118510,"meta":25,"style":25},"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",[103,121188,121189,121197,121205,121213,121220,121228,121238,121246],{"__ignoreMap":25},[106,121190,121191,121194],{"class":108,"line":109},[106,121192,121193],{"class":1955},"Section",[106,121195,121196],{"class":221}," \"OutputClass\"\n",[106,121198,121199,121202],{"class":108,"line":28},[106,121200,121201],{"class":1955},"   Identifier",[106,121203,121204],{"class":221}," \"nvidia\"\n",[106,121206,121207,121210],{"class":108,"line":1172},[106,121208,121209],{"class":1955},"   MatchDriver",[106,121211,121212],{"class":221}," \"nvidia-drm\"\n",[106,121214,121215,121218],{"class":108,"line":1187},[106,121216,121217],{"class":1955},"   Driver",[106,121219,121204],{"class":221},[106,121221,121222,121225],{"class":108,"line":1193},[106,121223,121224],{"class":1955},"   Option",[106,121226,121227],{"class":221}," \"AllowEmptyInitialConfiguration\"\n",[106,121229,121230,121232,121235],{"class":108,"line":1207},[106,121231,121224],{"class":1955},[106,121233,121234],{"class":221}," \"PrimaryGPU\"",[106,121236,121237],{"class":221}," \"yes\"\n",[106,121239,121240,121243],{"class":108,"line":1213},[106,121241,121242],{"class":1955},"   ModulePath",[106,121244,121245],{"class":221}," \"\u002Fusr\u002Flib\u002Fx86_64-linux-gnu\u002Fnvidia\u002Fxorg\"\n",[106,121247,121248],{"class":108,"line":1304},[106,121249,121250],{"class":1955},"EndSection\n",[60,121252,121253],{"start":1172},[63,121254,121255],{},"安装N卡驱动提示错误",[97,121257,121259],{"className":120801,"code":121258,"language":120803,"meta":120804,"style":25},"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",[103,121260,121261],{"__ignoreMap":25},[106,121262,121263],{"class":108,"line":109},[106,121264,121258],{},[60,121266,121267],{},[63,121268,121269],{},"检查当前运行的内核版本：",[14,121271,121272],{},"运行以下命令以查看你当前正在使用的内核版本：",[97,121274,121276],{"className":117281,"code":121275,"language":117283,"meta":25,"style":25},"uname -r\n",[103,121277,121278],{"__ignoreMap":25},[106,121279,121280,121282],{"class":108,"line":109},[106,121281,70198],{"class":1955},[106,121283,121284],{"class":165}," -r\n",[60,121286,121287],{"start":28},[63,121288,121289],{},"安装内核开发文件：",[14,121291,121292,121293,121296],{},"确保你已经安装了与当前内核版本相匹配的 ",[103,121294,121295],{},"kernel-devel"," 包。运行以下命令来安装：",[97,121298,121300],{"className":117281,"code":121299,"language":117283,"meta":25,"style":25},"sudo dnf install kernel-devel-$(uname -r)\n",[103,121301,121302],{"__ignoreMap":25},[106,121303,121304,121306,121308,121310,121313,121315,121317,121319],{"class":108,"line":109},[106,121305,24570],{"class":1955},[106,121307,26309],{"class":221},[106,121309,23827],{"class":221},[106,121311,121312],{"class":221}," kernel-devel-",[106,121314,25093],{"class":116},[106,121316,70198],{"class":1955},[106,121318,119624],{"class":165},[106,121320,123],{"class":116},[14,121322,121323],{},"这将自动安装与你当前内核版本匹配的内核开发包。",[60,121325,121326],{"start":1172},[63,121327,121328],{},"安装内核源代码（如果需要）：",[14,121330,121331],{},"如果需要访问完整的内核源代码，你可以运行以下命令来安装它：",[97,121333,121335],{"className":117281,"code":121334,"language":117283,"meta":25,"style":25},"sudo dnf install kernel-headers kernel-source\n",[103,121336,121337],{"__ignoreMap":25},[106,121338,121339,121341,121343,121345,121348],{"class":108,"line":109},[106,121340,24570],{"class":1955},[106,121342,26309],{"class":221},[106,121344,23827],{"class":221},[106,121346,121347],{"class":221}," kernel-headers",[106,121349,121350],{"class":221}," kernel-source\n",[60,121352,121353],{"start":1187},[63,121354,121355],{},"检查安装：",[14,121357,121358,121359,121362],{},"安装完成后，确认路径是否正确。内核源文件通常位于 ",[103,121360,121361],{},"\u002Fusr\u002Fsrc\u002Fkernels\u002F"," 目录下，你可以使用以下命令来检查该目录是否存在：",[97,121364,121366],{"className":117281,"code":121365,"language":117283,"meta":25,"style":25},"ls \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[103,121367,121368],{"__ignoreMap":25},[106,121369,121370,121372],{"class":108,"line":109},[106,121371,26755],{"class":1955},[106,121373,121374],{"class":221}," \u002Fusr\u002Fsrc\u002Fkernels\u002F\n",[14,121376,121377,121378,121381],{},"如果仍然遇到问题，可以通过 ",[103,121379,121380],{},"--kernel-source-path"," 选项手动指定内核源文件路径。",[5119,121383,121384],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":25,"searchDepth":28,"depth":28,"links":121386},[121387,121391,121401,121405,121406],{"id":118484,"depth":28,"text":118485,"children":121388},[121389,121390],{"id":118494,"depth":1172,"text":118495},{"id":118504,"depth":1172,"text":118505},{"id":118704,"depth":28,"text":118705,"children":121392},[121393,121394,121395,121396,121397,121398,121399,121400],{"id":118708,"depth":1172,"text":118709},{"id":118778,"depth":1172,"text":118779},{"id":118867,"depth":1172,"text":118868},{"id":119112,"depth":1172,"text":119113},{"id":119182,"depth":1172,"text":119183},{"id":119249,"depth":1172,"text":119250},{"id":119284,"depth":1172,"text":119285},{"id":119339,"depth":1172,"text":119340},{"id":119390,"depth":28,"text":119391,"children":121402},[121403,121404],{"id":119394,"depth":1172,"text":119395},{"id":119474,"depth":1172,"text":119475},{"id":119660,"depth":28,"text":119661},{"id":119833,"depth":28,"text":119834,"children":121407},[121408,121409,121410,121411,121412],{"id":119837,"depth":1172,"text":119838},{"id":119878,"depth":1172,"text":119879},{"id":120165,"depth":1172,"text":120166},{"id":120539,"depth":1172,"text":120540},{"id":121035,"depth":1172,"text":121036},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch3",{"title":118476,"description":30},"wiki\u002F2025-01-27-Linux基本操作\u002Fch3-安装必备配置","WWF6akXAqWzKqM4dMry9y9TJVEbZQNwxOIpkPoo5nX0",{"id":121419,"title":121420,"body":121421,"description":30,"extension":31,"meta":121761,"navigation":33,"path":121762,"seo":121763,"stem":121764,"__hash__":121765},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累).md","4. 命令教程(长期积累)",{"type":7,"value":121422,"toc":121759},[121423,121426,121431,121434,121680,121685,121688,121724,121727,121756],[10,121424,121420],{"id":121425},"_4-命令教程长期积累",[60,121427,121428],{},[63,121429,121430],{},"大多数命令",[14,121432,121433],{},"常用 Linux 命令速查：",[97,121435,121437],{"className":117281,"code":121436,"language":117283,"meta":25,"style":25},"# 文件与目录\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",[103,121438,121439,121444,121451,121458,121466,121473,121480,121488,121496,121503,121510,121518,121522,121527,121534,121542,121549,121553,121558,121565,121573,121581,121589,121597,121601,121606,121614,121621,121628,121636,121644,121648,121653,121662,121671],{"__ignoreMap":25},[106,121440,121441],{"class":108,"line":109},[106,121442,121443],{"class":175},"# 文件与目录\n",[106,121445,121446,121448],{"class":108,"line":28},[106,121447,26755],{"class":1955},[106,121449,121450],{"class":175},"        # 列出目录内容\n",[106,121452,121453,121455],{"class":108,"line":1172},[106,121454,101261],{"class":165},[106,121456,121457],{"class":175},"        # 切换目录\n",[106,121459,121460,121463],{"class":108,"line":1187},[106,121461,121462],{"class":165},"pwd",[106,121464,121465],{"class":175},"       # 显示当前路径\n",[106,121467,121468,121470],{"class":108,"line":1193},[106,121469,101251],{"class":1955},[106,121471,121472],{"class":175},"     # 创建目录\n",[106,121474,121475,121477],{"class":108,"line":1207},[106,121476,25316],{"class":1955},[106,121478,121479],{"class":175},"        # 删除文件或目录\n",[106,121481,121482,121485],{"class":108,"line":1213},[106,121483,121484],{"class":1955},"cp",[106,121486,121487],{"class":175},"        # 复制文件或目录\n",[106,121489,121490,121493],{"class":108,"line":1304},[106,121491,121492],{"class":1955},"mv",[106,121494,121495],{"class":175},"        # 移动\u002F重命名文件或目录\n",[106,121497,121498,121500],{"class":108,"line":1310},[106,121499,101268],{"class":1955},[106,121501,121502],{"class":175},"     # 创建空文件\n",[106,121504,121505,121507],{"class":108,"line":1322},[106,121506,120750],{"class":1955},[106,121508,121509],{"class":175},"       # 查看文件内容\n",[106,121511,121512,121515],{"class":108,"line":1604},[106,121513,121514],{"class":1955},"head\u002Ftail",[106,121516,121517],{"class":175}," # 查看文件头部\u002F尾部\n",[106,121519,121520],{"class":108,"line":1609},[106,121521,2392],{"emptyLinePlaceholder":33},[106,121523,121524],{"class":108,"line":1615},[106,121525,121526],{"class":175},"# 权限管理\n",[106,121528,121529,121531],{"class":108,"line":1620},[106,121530,24605],{"class":1955},[106,121532,121533],{"class":175},"     # 修改文件权限\n",[106,121535,121536,121539],{"class":108,"line":1634},[106,121537,121538],{"class":1955},"chown",[106,121540,121541],{"class":175},"     # 修改文件所有者\n",[106,121543,121544,121546],{"class":108,"line":1639},[106,121545,24570],{"class":1955},[106,121547,121548],{"class":175},"      # 以管理员身份执行\n",[106,121550,121551],{"class":108,"line":1645},[106,121552,2392],{"emptyLinePlaceholder":33},[106,121554,121555],{"class":108,"line":1666},[106,121556,121557],{"class":175},"# 系统信息\n",[106,121559,121560,121562],{"class":108,"line":1671},[106,121561,70198],{"class":1955},[106,121563,121564],{"class":175},"     # 系统信息\n",[106,121566,121567,121570],{"class":108,"line":1685},[106,121568,121569],{"class":1955},"df",[106,121571,121572],{"class":175},"        # 磁盘使用情况\n",[106,121574,121575,121578],{"class":108,"line":1690},[106,121576,121577],{"class":1955},"free",[106,121579,121580],{"class":175},"      # 内存使用情况\n",[106,121582,121583,121586],{"class":108,"line":1719},[106,121584,121585],{"class":1955},"top\u002Fhtop",[106,121587,121588],{"class":175},"  # 进程监控\n",[106,121590,121591,121594],{"class":108,"line":1724},[106,121592,121593],{"class":1955},"ps",[106,121595,121596],{"class":175},"        # 查看进程\n",[106,121598,121599],{"class":108,"line":1741},[106,121600,2392],{"emptyLinePlaceholder":33},[106,121602,121603],{"class":108,"line":1746},[106,121604,121605],{"class":175},"# 网络\n",[106,121607,121608,121611],{"class":108,"line":1751},[106,121609,121610],{"class":1955},"ping",[106,121612,121613],{"class":175},"      # 测试网络连通性\n",[106,121615,121616,121618],{"class":108,"line":1756},[106,121617,26843],{"class":1955},[106,121619,121620],{"class":175},"      # 发送 HTTP 请求\n",[106,121622,121623,121625],{"class":108,"line":1770},[106,121624,120274],{"class":1955},[106,121626,121627],{"class":175},"      # 下载文件\n",[106,121629,121630,121633],{"class":108,"line":1775},[106,121631,121632],{"class":1955},"ssh",[106,121634,121635],{"class":175},"       # 远程登录\n",[106,121637,121638,121641],{"class":108,"line":2569},[106,121639,121640],{"class":1955},"scp",[106,121642,121643],{"class":175},"       # 远程文件传输\n",[106,121645,121646],{"class":108,"line":2583},[106,121647,2392],{"emptyLinePlaceholder":33},[106,121649,121650],{"class":108,"line":2591},[106,121651,121652],{"class":175},"# 包管理（Debian\u002FUbuntu）\n",[106,121654,121655,121657,121659],{"class":108,"line":2596},[106,121656,117353],{"class":1955},[106,121658,117332],{"class":221},[106,121660,121661],{"class":175},"   # 更新软件源\n",[106,121663,121664,121666,121668],{"class":108,"line":2602},[106,121665,117353],{"class":1955},[106,121667,23827],{"class":221},[106,121669,121670],{"class":175},"  # 安装软件包\n",[106,121672,121673,121675,121677],{"class":108,"line":2608},[106,121674,117353],{"class":1955},[106,121676,26073],{"class":221},[106,121678,121679],{"class":175},"   # 卸载软件包\n",[60,121681,121682],{"start":28},[63,121683,121684],{},"KDE Dolphin 以root打开",[14,121686,121687],{},"kde5",[97,121689,121691],{"className":117281,"code":121690,"language":117283,"meta":25,"style":25},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=5 KDE_FULL_SESSION=true dolphin\n",[103,121692,121693],{"__ignoreMap":25},[106,121694,121695,121698,121701,121704,121706,121708,121711,121714,121716,121719,121721],{"class":108,"line":109},[106,121696,121697],{"class":1955},"pkexec",[106,121699,121700],{"class":221}," env",[106,121702,121703],{"class":221}," DISPLAY=",[106,121705,28137],{"class":116},[106,121707,28195],{"class":221},[106,121709,121710],{"class":116},"$XAUTHORITY ",[106,121712,121713],{"class":221},"KDE_SESSION_VERSION=",[106,121715,436],{"class":165},[106,121717,121718],{"class":221}," KDE_FULL_SESSION=",[106,121720,1355],{"class":165},[106,121722,121723],{"class":221}," dolphin\n",[14,121725,121726],{},"kde6",[97,121728,121730],{"className":117281,"code":121729,"language":117283,"meta":25,"style":25},"pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY KDE_SESSION_VERSION=6 KDE_FULL_SESSION=true dolphin\n",[103,121731,121732],{"__ignoreMap":25},[106,121733,121734,121736,121738,121740,121742,121744,121746,121748,121750,121752,121754],{"class":108,"line":109},[106,121735,121697],{"class":1955},[106,121737,121700],{"class":221},[106,121739,121703],{"class":221},[106,121741,28137],{"class":116},[106,121743,28195],{"class":221},[106,121745,121710],{"class":116},[106,121747,121713],{"class":221},[106,121749,461],{"class":165},[106,121751,121718],{"class":221},[106,121753,1355],{"class":165},[106,121755,121723],{"class":221},[5119,121757,121758],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":25,"searchDepth":28,"depth":28,"links":121760},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch4-()",{"title":121420,"description":30},"wiki\u002F2025-01-27-Linux基本操作\u002Fch4-命令教程(长期积累)","-0A6CbI0z8eUQ30QPo9buhLpXQXBgXgQ7JWiF4O_YiE",{"id":121767,"title":121768,"body":121769,"description":30,"extension":31,"meta":121783,"navigation":33,"path":121784,"seo":121785,"stem":121786,"__hash__":121787},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置.md","5. 各种环境配置",{"type":7,"value":121770,"toc":121781},[121771,121774],[10,121772,121768],{"id":121773},"_5-各种环境配置",[14,121775,121776],{},[355,121777,121780],{"href":121778,"rel":121779},"https:\u002F\u002Fsdutvincirobot.feishu.cn\u002Fwiki\u002FFQszwXIR5iQgCfk7pRwc9rYpnqg",[23858],"电控组环境搭建大全",{"title":25,"searchDepth":28,"depth":28,"links":121782},[],{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch5",{"title":121768,"description":30},"wiki\u002F2025-01-27-Linux基本操作\u002Fch5-各种环境配置","yOHCbneTdzOs8sgJI44X3D1tralTicDJM2N-2uZmoZQ",{"id":121789,"title":121790,"body":121791,"description":30,"extension":31,"meta":122139,"navigation":33,"path":122140,"seo":122141,"stem":122142,"__hash__":122143},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能.md","6. 拓展功能",{"type":7,"value":121792,"toc":122131},[121793,121796,121800,121804,121808,121813,121820,121824,122117,122121,122128],[10,121794,121790],{"id":121795},"_6-拓展功能",[48,121797,121799],{"id":121798},"_61-wine","6.1 Wine",[48,121801,121803],{"id":121802},"_62-android","6.2 Android",[77,121805,121807],{"id":121806},"_621-i卡a卡","6.2.1 I卡、A卡",[60,121809,121810],{},[63,121811,121812],{},"Wayland-Waydroid(体验超级好)",[14,121814,121815,121816],{},"Waydroid 官网与安装指南：",[355,121817,121818],{"href":121818,"rel":121819},"https:\u002F\u002Fwaydro.id\u002F",[23858],[77,121821,121823],{"id":121822},"_622-n卡so-nvidia-fxxk-u","6.2.2 N卡(So Nvidia Fxxk U!)",[60,121825,121826],{},[63,121827,121828,121829,121831,121832,121836,121838,121841,121846,122043],{},"QEMU-KVM虚拟机 + BlissOS-X86",[53710,121830],{},"BlissOS 官网下载：",[355,121833,121834],{"href":121834,"rel":121835},"https:\u002F\u002Fblissos.org\u002F",[23858],[53710,121837],{},[23,121839],{"alt":25,"src":121840},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-088.png",[60,121842,121843],{"start":1172},[63,121844,121845],{},"比较推荐的配置",[97,121847,121849],{"className":117281,"code":121848,"language":117283,"meta":25,"style":25},"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",[103,121850,121851,121858,121868,121878,121888,121900,121910,121917,121927,121936,121945,121955,121965,121974,121984,121994,122006,122016,122025,122035],{"__ignoreMap":25},[106,121852,121853,121856],{"class":108,"line":109},[106,121854,121855],{"class":1955},"qemu-system-x86_64",[106,121857,24672],{"class":165},[106,121859,121860,121863,121866],{"class":108,"line":28},[106,121861,121862],{"class":165},"        -M",[106,121864,121865],{"class":221}," q35,vmport=off",[106,121867,24672],{"class":165},[106,121869,121870,121873,121876],{"class":108,"line":1172},[106,121871,121872],{"class":165},"        -accel",[106,121874,121875],{"class":221}," kvm",[106,121877,24672],{"class":165},[106,121879,121880,121883,121886],{"class":108,"line":1187},[106,121881,121882],{"class":165},"        -cpu",[106,121884,121885],{"class":221}," qemu64,+sse3,+sse4.2",[106,121887,24672],{"class":165},[106,121889,121890,121893,121896,121898],{"class":108,"line":1193},[106,121891,121892],{"class":165},"        -smp",[106,121894,121895],{"class":221}," 8,cores=",[106,121897,410],{"class":165},[106,121899,24672],{"class":165},[106,121901,121902,121905,121908],{"class":108,"line":1207},[106,121903,121904],{"class":165},"        -m",[106,121906,121907],{"class":221}," 6G",[106,121909,24672],{"class":165},[106,121911,121912,121915],{"class":108,"line":1213},[106,121913,121914],{"class":165},"        -usb",[106,121916,24672],{"class":165},[106,121918,121919,121922,121925],{"class":108,"line":1304},[106,121920,121921],{"class":165},"        -device",[106,121923,121924],{"class":221}," virtio-tablet",[106,121926,24672],{"class":165},[106,121928,121929,121931,121934],{"class":108,"line":1310},[106,121930,121921],{"class":165},[106,121932,121933],{"class":221}," virtio-keyboard",[106,121935,24672],{"class":165},[106,121937,121938,121940,121943],{"class":108,"line":1322},[106,121939,121921],{"class":165},[106,121941,121942],{"class":221}," usb-tablet",[106,121944,24672],{"class":165},[106,121946,121947,121950,121953],{"class":108,"line":1604},[106,121948,121949],{"class":165},"        -bios",[106,121951,121952],{"class":221}," OVMF-pure-efi64.fd",[106,121954,24672],{"class":165},[106,121956,121957,121960,121963],{"class":108,"line":1609},[106,121958,121959],{"class":165},"        -net",[106,121961,121962],{"class":221}," user,hostfwd=tcp::5555-:5555,hostfwd=tcp::8022-:8022",[106,121964,24672],{"class":165},[106,121966,121967,121969,121972],{"class":108,"line":1615},[106,121968,121959],{"class":165},[106,121970,121971],{"class":221}," nic,model=virtio",[106,121973,24672],{"class":165},[106,121975,121976,121979,121982],{"class":108,"line":1620},[106,121977,121978],{"class":165},"        -audio",[106,121980,121981],{"class":221}," sdl,model=hda",[106,121983,24672],{"class":165},[106,121985,121986,121989,121992],{"class":108,"line":1634},[106,121987,121988],{"class":165},"        -display",[106,121990,121991],{"class":221}," sdl,gl=on,show-cursor=on",[106,121993,24672],{"class":165},[106,121995,121996,121998,122001,122004],{"class":108,"line":1639},[106,121997,121921],{"class":165},[106,121999,122000],{"class":221}," virtio-vga-gl,xres=1920,yres=",[106,122002,122003],{"class":165},"1080",[106,122005,24672],{"class":165},[106,122007,122008,122011,122014],{"class":108,"line":1645},[106,122009,122010],{"class":165},"        -drive",[106,122012,122013],{"class":221}," file=disk.qcow2,media=disk,if=virtio,cache=writeback",[106,122015,24672],{"class":165},[106,122017,122018,122020,122023],{"class":108,"line":1666},[106,122019,122010],{"class":165},[106,122021,122022],{"class":221}," file=Bliss-v16.9.7-x86_64-OFFICIAL-gapps-20240911.iso,media=cdrom",[106,122024,24672],{"class":165},[106,122026,122027,122030,122033],{"class":108,"line":1671},[106,122028,122029],{"class":165},"        -monitor",[106,122031,122032],{"class":221}," stdio",[106,122034,24672],{"class":165},[106,122036,122037,122040],{"class":108,"line":1685},[106,122038,122039],{"class":165},"        -serial",[106,122041,122042],{"class":221}," none\n",[60,122044,122045],{"start":1193},[63,122046,122047,122048],{},"常用操作：",[60,122049,122050,122053,122109],{},[63,122051,122052],{},"全屏：Ctrl+Alt+F",[63,122054,122055,122056,122061],{},"adb调试",[60,122057,122058],{},[63,122059,122060],{},"使Linux与Android用ADB连接。",[97,122062,122064],{"className":117281,"code":122063,"language":117283,"meta":25,"style":25},"# 连接安卓\nadb connect 127.0.0.1\n# 打开shell\nadb -s 127.0.0.1:5555 shell\n# 使用root权限\nsu\n",[103,122065,122066,122071,122082,122087,122099,122104],{"__ignoreMap":25},[106,122067,122068],{"class":108,"line":109},[106,122069,122070],{"class":175},"# 连接安卓\n",[106,122072,122073,122076,122079],{"class":108,"line":28},[106,122074,122075],{"class":1955},"adb",[106,122077,122078],{"class":221}," connect",[106,122080,122081],{"class":165}," 127.0.0.1\n",[106,122083,122084],{"class":108,"line":1172},[106,122085,122086],{"class":175},"# 打开shell\n",[106,122088,122089,122091,122093,122096],{"class":108,"line":1187},[106,122090,122075],{"class":1955},[106,122092,26877],{"class":165},[106,122094,122095],{"class":221}," 127.0.0.1:5555",[106,122097,122098],{"class":221}," shell\n",[106,122100,122101],{"class":108,"line":1193},[106,122102,122103],{"class":175},"# 使用root权限\n",[106,122105,122106],{"class":108,"line":1207},[106,122107,122108],{"class":1955},"su\n",[63,122110,122111,122112],{},"中文输入法",[60,122113,122114],{},[63,122115,122116],{},"可以下载google输入法：按Shift+space进行中英文切换（这样有效防止与linux本机的中英文切换冲突）",[48,122118,122120],{"id":122119},"_63-好看点的uefi启动界面refind","6.3 好看点的UEFI启动界面rEFInd",[14,122122,122123,122124],{},"rEFInd 官网与文档：",[355,122125,122126],{"href":122126,"rel":122127},"https:\u002F\u002Fwww.rodsbooks.com\u002Frefind\u002F",[23858],[5119,122129,122130],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":25,"searchDepth":28,"depth":28,"links":122132},[122133,122134,122138],{"id":121798,"depth":28,"text":121799},{"id":121802,"depth":28,"text":121803,"children":122135},[122136,122137],{"id":121806,"depth":1172,"text":121807},{"id":121822,"depth":1172,"text":121823},{"id":122119,"depth":28,"text":122120},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch6",{"title":121790,"description":30},"wiki\u002F2025-01-27-Linux基本操作\u002Fch6-拓展功能","QYYeVozwQSLjdsxnTnMgRQGi_b8v38BhBh0gp8PtboY",{"id":122145,"title":122146,"body":122147,"description":30,"extension":31,"meta":125446,"navigation":33,"path":125447,"seo":125448,"stem":125449,"__hash__":125450},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作.md","7. 其他操作",{"type":7,"value":122148,"toc":125420},[122149,122152,122156,122159,122166,122416,122419,122491,122494,122498,122502,122507,122510,122513,122516,122521,122524,122527,122530,122535,122538,122543,122546,122549,122554,122557,122562,122565,122569,122573,122576,122581,122584,122598,122601,122604,122613,122616,122625,122628,122631,122640,122643,122652,122655,122658,122667,122670,122673,122688,122691,122694,122703,122708,122711,122714,122723,122726,122735,122738,122747,122750,122759,122764,122767,122775,122780,122783,122792,122795,122803,122808,122811,122820,122823,122826,122830,122833,122838,122841,122846,122860,122865,122870,122881,122886,122892,122897,122912,122917,122920,122925,122930,122935,122943,122948,122955,122960,122971,122976,122979,122983,122986,122989,122994,122997,123016,123021,123024,123033,123038,123041,123063,123066,123096,123099,123104,123107,123121,123126,123145,123148,123151,123156,123168,123173,123178,123181,123186,123189,123204,123207,123212,123217,123221,123226,123266,123269,123273,123279,123285,123290,123293,123300,123305,123312,123315,123318,123325,123339,123342,123402,123405,123419,123431,123434,123437,123440,123504,123507,123510,123513,123533,123536,123541,123548,123552,123555,123559,123564,123569,123573,123576,123579,123621,123626,123629,123651,123666,123668,123673,123685,123745,123747,123749,123803,123805,123807,123813,123818,123821,123826,123830,123833,123895,123900,123903,123905,123909,123921,124003,124005,124007,124061,124067,124069,124073,124078,124080,124085,124089,124109,124144,124148,124151,124154,124157,124164,124167,124179,124182,124197,124200,124219,124267,124270,124287,124290,124304,124309,124312,124321,124336,124348,124386,124391,124400,124405,124410,124436,124445,124449,124453,124458,124461,124465,124469,124474,124477,124482,124485,124490,124493,124498,124501,124505,124510,124513,124518,124521,124525,124530,124533,124538,124541,124546,124549,124553,124558,124561,124566,124569,124574,124577,124581,124586,124589,124594,124597,124602,124605,124610,124613,124618,124621,124626,124629,124633,124638,124641,124646,124653,124657,124662,124665,124670,124673,124677,124682,124685,124688,124691,124694,124697,124701,124704,124714,124719,124724,124746,124751,124756,124763,124767,124772,124775,124778,124783,124786,124789,124792,124795,124798,124801,124804,124807,124810,124813,124816,124819,124824,124829,124834,124839,124844,124849,124854,124857,124861,124864,124868,124873,124878,124883,124888,124892,124898,124906,124911,124914,124919,124934,124937,124942,124976,124991,124994,125049,125075,125087,125090,125099,125102,125117,125122,125125,125131,125136,125139,125144,125147,125152,125157,125164,125167,125182,125185,125220,125225,125233,125271,125274,125277,125282,125285,125290,125301,125335,125340,125343,125352,125357,125363,125366,125371,125380,125385,125388,125391,125396,125404,125407,125412,125417],[10,122150,122146],{"id":122151},"_7-其他操作",[48,122153,122155],{"id":122154},"_71-工控机如何连wifi","7.1 工控机如何连wifi",[14,122157,122158],{},"当我们工控机从一个环境移动到另一个环境，且新的环境的wifi我们没有连接过，我们没有屏幕如何让工控机连上网呢？",[14,122160,122161,122162,122165],{},"进入工控机的硬盘目录，进入",[103,122163,122164],{},"\u002Fetc\u002Fnetplan\u002F","，底下有很多yaml,找到一个最符合下方格式的yaml:",[97,122167,122171],{"className":122168,"code":122169,"language":122170,"meta":25,"style":25},"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",[103,122172,122173,122181,122192,122199,122206,122218,122225,122237,122248,122259,122266,122273,122280,122292,122304,122311,122323,122335,122342,122354,122366,122378,122389,122396,122407],{"__ignoreMap":25},[106,122174,122175,122178],{"class":108,"line":109},[106,122176,122177],{"class":51294},"network",[106,122179,122180],{"class":116},": \n",[106,122182,122183,122186,122188,122190],{"class":108,"line":28},[106,122184,122185],{"class":51294},"  version",[106,122187,51431],{"class":116},[106,122189,194],{"class":165},[106,122191,2666],{"class":116},[106,122193,122194,122197],{"class":108,"line":1172},[106,122195,122196],{"class":51294},"  wifis",[106,122198,122180],{"class":116},[106,122200,122201,122204],{"class":108,"line":1187},[106,122202,122203],{"class":51294},"    NM-6f414fe0-2658-48ff-89ee-c7981b87bc96",[106,122205,122180],{"class":116},[106,122207,122208,122211,122213,122216],{"class":108,"line":1193},[106,122209,122210],{"class":51294},"      renderer",[106,122212,51431],{"class":116},[106,122214,122215],{"class":221},"NetworkManager",[106,122217,2666],{"class":116},[106,122219,122220,122223],{"class":108,"line":1207},[106,122221,122222],{"class":51294},"      match",[106,122224,122180],{"class":116},[106,122226,122227,122230,122232,122235],{"class":108,"line":1213},[106,122228,122229],{"class":51294},"        name",[106,122231,51431],{"class":116},[106,122233,122234],{"class":221},"\"wlan0\"",[106,122236,2666],{"class":116},[106,122238,122239,122242,122244,122246],{"class":108,"line":1304},[106,122240,122241],{"class":51294},"      dhcp4",[106,122243,51431],{"class":116},[106,122245,1355],{"class":165},[106,122247,2666],{"class":116},[106,122249,122250,122253,122255,122257],{"class":108,"line":1310},[106,122251,122252],{"class":51294},"      dhcp6",[106,122254,51431],{"class":116},[106,122256,1355],{"class":165},[106,122258,2666],{"class":116},[106,122260,122261,122264],{"class":108,"line":1322},[106,122262,122263],{"class":51294},"      access-points",[106,122265,122180],{"class":116},[106,122267,122268,122271],{"class":108,"line":1604},[106,122269,122270],{"class":221},"        \"EMIS_Vinci_Robocon_5G\"",[106,122272,122180],{"class":116},[106,122274,122275,122278],{"class":108,"line":1609},[106,122276,122277],{"class":51294},"          auth",[106,122279,122180],{"class":116},[106,122281,122282,122285,122287,122290],{"class":108,"line":1615},[106,122283,122284],{"class":51294},"            key-management",[106,122286,51431],{"class":116},[106,122288,122289],{"class":221},"\"psk\"",[106,122291,2666],{"class":116},[106,122293,122294,122297,122299,122302],{"class":108,"line":1620},[106,122295,122296],{"class":51294},"            password",[106,122298,51431],{"class":116},[106,122300,122301],{"class":221},"\"vinci666\"",[106,122303,2666],{"class":116},[106,122305,122306,122309],{"class":108,"line":1634},[106,122307,122308],{"class":51294},"          networkmanager",[106,122310,122180],{"class":116},[106,122312,122313,122316,122318,122321],{"class":108,"line":1639},[106,122314,122315],{"class":51294},"            uuid",[106,122317,51431],{"class":116},[106,122319,122320],{"class":221},"\"6f414fe0-2658-48ff-89ee-c7981b87bc96\"",[106,122322,2666],{"class":116},[106,122324,122325,122328,122330,122333],{"class":108,"line":1645},[106,122326,122327],{"class":51294},"            name",[106,122329,51431],{"class":116},[106,122331,122332],{"class":221},"\"EMIS_Vinci_Robocon_5G\"",[106,122334,2666],{"class":116},[106,122336,122337,122340],{"class":108,"line":1666},[106,122338,122339],{"class":51294},"            passthrough",[106,122341,122180],{"class":116},[106,122343,122344,122347,122349,122352],{"class":108,"line":1671},[106,122345,122346],{"class":51294},"              wifi-security.auth-alg",[106,122348,51431],{"class":116},[106,122350,122351],{"class":221},"\"open\"",[106,122353,2666],{"class":116},[106,122355,122356,122359,122361,122364],{"class":108,"line":1685},[106,122357,122358],{"class":51294},"              ipv6.addr-gen-mode",[106,122360,51431],{"class":116},[106,122362,122363],{"class":221},"\"default\"",[106,122365,2666],{"class":116},[106,122367,122368,122371,122373,122376],{"class":108,"line":1690},[106,122369,122370],{"class":51294},"              ipv6.ip6-privacy",[106,122372,51431],{"class":116},[106,122374,122375],{"class":221},"\"-1\"",[106,122377,2666],{"class":116},[106,122379,122380,122383,122385,122387],{"class":108,"line":1719},[106,122381,122382],{"class":51294},"              proxy._",[106,122384,51431],{"class":116},[106,122386,7645],{"class":221},[106,122388,2666],{"class":116},[106,122390,122391,122394],{"class":108,"line":1724},[106,122392,122393],{"class":51294},"      networkmanager",[106,122395,122180],{"class":116},[106,122397,122398,122401,122403,122405],{"class":108,"line":1741},[106,122399,122400],{"class":51294},"        uuid",[106,122402,51431],{"class":116},[106,122404,122320],{"class":221},[106,122406,2666],{"class":116},[106,122408,122409,122411,122413],{"class":108,"line":1746},[106,122410,122229],{"class":51294},[106,122412,51431],{"class":116},[106,122414,122415],{"class":221},"\"EMIS_Vinci_Robocon_5G\"\n",[14,122417,122418],{},"将其改为新wifi的名和密码：",[97,122420,122422],{"className":122168,"code":122421,"language":122170,"meta":25,"style":25},"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",[103,122423,122424,122430,122439,122445,122452,122461,122469,122475,122481],{"__ignoreMap":25},[106,122425,122426,122428],{"class":108,"line":109},[106,122427,122177],{"class":51294},[106,122429,3731],{"class":116},[106,122431,122432,122434,122436],{"class":108,"line":28},[106,122433,122185],{"class":51294},[106,122435,51431],{"class":116},[106,122437,122438],{"class":165},"2\n",[106,122440,122441,122443],{"class":108,"line":1172},[106,122442,122196],{"class":51294},[106,122444,3731],{"class":116},[106,122446,122447,122450],{"class":108,"line":1187},[106,122448,122449],{"class":51294},"    wlan0",[106,122451,3731],{"class":116},[106,122453,122454,122456,122458],{"class":108,"line":1193},[106,122455,122241],{"class":51294},[106,122457,51431],{"class":116},[106,122459,122460],{"class":165},"true\n",[106,122462,122463,122465,122467],{"class":108,"line":1207},[106,122464,122252],{"class":51294},[106,122466,51431],{"class":116},[106,122468,122460],{"class":165},[106,122470,122471,122473],{"class":108,"line":1213},[106,122472,122263],{"class":51294},[106,122474,3731],{"class":116},[106,122476,122477,122479],{"class":108,"line":1304},[106,122478,122270],{"class":221},[106,122480,3731],{"class":116},[106,122482,122483,122486,122488],{"class":108,"line":1310},[106,122484,122485],{"class":51294},"          password",[106,122487,51431],{"class":116},[106,122489,122490],{"class":221},"\"vinci666\"\n",[14,122492,122493],{},"工控机开机即可连上网。",[48,122495,122497],{"id":122496},"_72-ssh远程开发","7.2 SSH远程开发",[77,122499,122501],{"id":122500},"_721-环境准备","7.2.1 环境准备",[14,122503,122504],{},[266,122505,122506],{},"1.硬件准备",[14,122508,122509],{},"首先要有一台工控机（X68小型电脑，专业工控机，树莓派等等）。",[14,122511,122512],{},"控制系统的硬件载体是具有多样性的，常用的多是基于ARM、x86等架构的处理器，比如：PC、工控机、树莓派、NVIDIA Jetson...。不同的处理器都存在一定的优缺点，PC和工控机，处理器性能强大，但是功耗高、体积大、灵活性差，嵌入式系统则反之。对于我们而言，可以根据机器人平台的电气、载重、空间以及用途等诸多要素自主选择合适的控制系统。",[14,122514,122515],{},"无论选用何种处理器，只要是要进行机器人的开发，安装了ROS或者ROS2，那么对于开发人员而言，在使用上，没有任何本质的区别，或者换言之，作为软件工程师，部分场景下无需关注于硬件的选型。",[14,122517,122518],{},[266,122519,122520],{},"2.设置固定IP",[14,122522,122523],{},"远程连接时，不管使用何种工具，需要根据IP地址定位到被连接的主机，再通过账号和密码登录该主机，因此，我们需要先获取该IP地址。并且每次连接时，都需要使用到IP，为了保证连接的便利性和稳定性，最好将被连接主机的IP地址设置为固定IP，具体操作如下。",[14,122525,122526],{},"1.进入设置界面",[14,122528,122529],{},"启动被连接的主机（启动时需要连接显示器或使用HDMI采集卡，并且配置完SSH远程访问之后，可以不再使用显示器或HDMI采集卡），并进入设置界面。",[14,122531,122532],{},[23,122533],{"alt":25,"src":122534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-089.png",[14,122536,122537],{},"2.配置所连接的网络",[14,122539,122540],{},[23,122541],{"alt":25,"src":122542},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-090.png",[14,122544,122545],{},"3.设置固定IP",[14,122547,122548],{},"查看当前IP地址。",[14,122550,122551],{},[23,122552],{"alt":25,"src":122553},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-091.png",[14,122555,122556],{},"设置固定IP。",[14,122558,122559],{},[23,122560],{"alt":25,"src":122561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-092.png",[14,122563,122564],{},"至此，IP配置完毕。",[77,122566,122568],{"id":122567},"_722-环境搭建","7.2.2 环境搭建",[14,122570,122571],{},[266,122572,25747],{},[14,122574,122575],{},"SSH（Secure Shell）是一种通用的、功能强大的、基于软件的网络安全解决方案。计算机每次向网络发送数据时，SSH都会自动对其进行加密。数据到达目的地时，SSH自动对加密数据进行解密。整个过程都是透明的，使用OpenSSH工具将会增进你的系统安全性。SSH安装容易、使用简单。",[14,122577,122578],{},[266,122579,122580],{},"实现",[14,122582,122583],{},"SSH实现架构上分为客户端和服务器端两大部分，客户端是数据的发送方，服务端是数据的接收方，当前场景下，我们需要从本地主机发送数据到远程主机，那么本地主机需要安装并启动SSH客户端，而远程主机则需要安装并启动SSH服务端，整个实现具体流程如下：",[60,122585,122586,122589,122592,122595],{},[63,122587,122588],{},"本地主机安装SSH客户端，远程主机安装SSH服务端；",[63,122590,122591],{},"远程主机启动SSH服务；",[63,122593,122594],{},"本地主机登陆远程主机；",[63,122596,122597],{},"实现数据传输。",[14,122599,122600],{},"1.安装SSH客户端与服务端",[14,122602,122603],{},"默认情况下，Ubuntu系统已经安装了SSH客户端，因此只需要在远程主机安装SSH服务端即可，安装命令如下：",[97,122605,122607],{"className":120801,"code":122606,"language":120803,"meta":120804,"style":25}," sudo apt install openssh-server\n",[103,122608,122609],{"__ignoreMap":25},[106,122610,122611],{"class":108,"line":109},[106,122612,122606],{},[14,122614,122615],{},"如果SSH客户端需要自行安装，那么调用如下命令:",[97,122617,122619],{"className":120801,"code":122618,"language":120803,"meta":120804,"style":25},"sudo apt install openssh-client\n",[103,122620,122621],{"__ignoreMap":25},[106,122622,122623],{"class":108,"line":109},[106,122624,122618],{},[14,122626,122627],{},"2.远程主机启动SSH服务",[14,122629,122630],{},"远程主机启动 ssh 服务命令如下：",[97,122632,122634],{"className":120801,"code":122633,"language":120803,"meta":120804,"style":25},"sudo \u002Fetc\u002Finit.d\u002Fssh start\n",[103,122635,122636],{"__ignoreMap":25},[106,122637,122638],{"class":108,"line":109},[106,122639,122633],{},[14,122641,122642],{},"启动后可使用如下命令查看服务是否正常运行：",[97,122644,122646],{"className":120801,"code":122645,"language":120803,"meta":120804,"style":25},"ps -e | grep ssh\n",[103,122647,122648],{"__ignoreMap":25},[106,122649,122650],{"class":108,"line":109},[106,122651,122645],{},[14,122653,122654],{},"如果启动成功，会包含 sshd 程序。",[14,122656,122657],{},"以后需要频繁的使用ssh远程登录，为了简化实现，可以将远程主机的ssh服务设置为开机自启动，命令如下：",[97,122659,122661],{"className":120801,"code":122660,"language":120803,"meta":120804,"style":25},"sudo systemctl enable ssh\n",[103,122662,122663],{"__ignoreMap":25},[106,122664,122665],{"class":108,"line":109},[106,122666,122660],{},[14,122668,122669],{},"3.本地远程登录",[14,122671,122672],{},"登录远程主机可以调用如下命令:",[97,122674,122676],{"className":117281,"code":122675,"language":117283,"meta":25,"style":25},"ssh -X 用户名@ip地址\n",[103,122677,122678],{"__ignoreMap":25},[106,122679,122680,122682,122685],{"class":108,"line":109},[106,122681,121632],{"class":1955},[106,122683,122684],{"class":165}," -X",[106,122686,122687],{"class":221}," 用户名@ip地址\n",[14,122689,122690],{},"然后根据提示，录入登陆密码，即可成功登录。",[14,122692,122693],{},"如果退出，可以调用exit命令：",[97,122695,122697],{"className":120801,"code":122696,"language":120803,"meta":120804,"style":25},"exit\n",[103,122698,122699],{"__ignoreMap":25},[106,122700,122701],{"class":108,"line":109},[106,122702,122696],{},[14,122704,122705],{},[266,122706,122707],{},"4.实现数据传输",[14,122709,122710],{},"通过SSH在本地主机只需调用相关指令，便可方便的实现与远程主机的数据上传或下载，指令格式如下所示：",[14,122712,122713],{},"上传文件指令格式如下：",[97,122715,122717],{"className":120801,"code":122716,"language":120803,"meta":120804,"style":25},"scp 本地文件路径 账号@ip:路径\n",[103,122718,122719],{"__ignoreMap":25},[106,122720,122721],{"class":108,"line":109},[106,122722,122716],{},[14,122724,122725],{},"上传文件夹指令格式如下：",[97,122727,122729],{"className":120801,"code":122728,"language":120803,"meta":120804,"style":25},"scp -r 本地文件夹路径 账号@ip:路径\n",[103,122730,122731],{"__ignoreMap":25},[106,122732,122733],{"class":108,"line":109},[106,122734,122728],{},[14,122736,122737],{},"下载文件指令格式如下：",[97,122739,122741],{"className":120801,"code":122740,"language":120803,"meta":120804,"style":25},"scp 账号@ip:路径 本地文件夹路径\n",[103,122742,122743],{"__ignoreMap":25},[106,122744,122745],{"class":108,"line":109},[106,122746,122740],{},[14,122748,122749],{},"下载文件夹指令格式如下：",[97,122751,122753],{"className":120801,"code":122752,"language":120803,"meta":120804,"style":25},"scp -r 账号@ip:路径 本地文件夹路径\n",[103,122754,122755],{"__ignoreMap":25},[106,122756,122757],{"class":108,"line":109},[106,122758,122752],{},[14,122760,122761],{},[266,122762,122763],{},"优化",[14,122765,122766],{},"每次远程登录时，都需要输入密码，使用不方便，可以借助密钥简化登录过程，实现免密登录，提高操作效率。实现思想是：生成一对公钥私钥，私钥存储在本地，公钥上传至服务器，每次登录时，本地直接上传私钥到服务器，服务器有匹配的公钥就认为是合法用户，直接创建SSH连接即可。具体实现步骤只有两步：",[60,122768,122769,122772],{},[63,122770,122771],{},"本地生成密钥对；",[63,122773,122774],{},"将公钥上传至远程主机。",[14,122776,122777],{},[266,122778,122779],{},"1.生成密钥对",[14,122781,122782],{},"本地客户端生成公私钥：（一路回车默认即可）",[97,122784,122786],{"className":120801,"code":122785,"language":120803,"meta":120804,"style":25},"ssh-keygen\n",[103,122787,122788],{"__ignoreMap":25},[106,122789,122790],{"class":108,"line":109},[106,122791,122785],{},[14,122793,122794],{},"上面这个命令会在用户目录.ssh文件夹下创建公私钥：",[60,122796,122797,122800],{},[63,122798,122799],{},"id_rsa （私钥）；",[63,122801,122802],{},"id_rsa.pub (公钥)。",[14,122804,122805],{},[266,122806,122807],{},"2.公钥上传",[14,122809,122810],{},"上传指令如下：",[97,122812,122814],{"className":120801,"code":122813,"language":120803,"meta":120804,"style":25},"ssh-copy-id -i ~\u002F.ssh\u002Fid_rsa.pub 账号@ip\n",[103,122815,122816],{"__ignoreMap":25},[106,122817,122818],{"class":108,"line":109},[106,122819,122813],{},[14,122821,122822],{},"上面这条指令是将本地公钥上传到远程主机的ssh目录下，该目录下有文件authorized_keys保存了公钥内容。",[14,122824,122825],{},"以后再远程登录就无需录入密码了。",[77,122827,122829],{"id":122828},"_723-使用vscode优化","7.2.3 使用VScode优化",[14,122831,122832],{},"上一节，我们介绍了ssh远程连接的使用，但是如果只是纯粹使用ssh也存在一些不足，比如：编辑文件内容时，需要使用vi编辑器，且在一个终端内，无法同时编辑多个文件。本节将介绍一更为实用的功能——VSCode结合插件实现远程开发，这使我们可以以图形化的方式实现远程开发，比ssh的使用更方便快捷，可以大大的提高程序开发效率。",[14,122834,122835],{},[266,122836,122837],{},"1.准备工作",[14,122839,122840],{},"VScode远程开发依赖于ssh，请首先按照上一节内容配置ssh远程连接。",[14,122842,122843],{},[266,122844,122845],{},"2.为VScode安装远程开发插件",[14,122847,122848,122849,122852,122853,122856,122857,28379],{},"启动VScode，首先点击侧边栏的扩展按钮，然后在",[103,122850,122851],{},"扩展：商店","的搜索栏输入",[103,122854,122855],{},"Remote Development","并点击同名插件，最后在右侧显示区中点击",[103,122858,122859],{},"安装",[14,122861,122862],{},[23,122863],{"alt":25,"src":122864},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-093.png",[14,122866,122867],{},[266,122868,122869],{},"3.配置远程连接",[14,122871,122872,122873,122876,122877,122880],{},"步骤1：使用快捷键",[103,122874,122875],{},"ctrl + shift + p","打开命令输入窗口，并输入",[103,122878,122879],{},"Remote-SSH:Connect to Host...","，弹出列表中选择与之同名的选项。",[14,122882,122883],{},[23,122884],{"alt":25,"src":122885},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-094.png",[14,122887,122888,122889,28379],{},"步骤2：步骤1完成将弹出一个新的命令窗口如下，选择下拉列表中的 ",[103,122890,122891],{},"Add New SSH Host",[14,122893,122894],{},[23,122895],{"alt":25,"src":122896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-095.png",[14,122898,122899,122900,122903,122904,122907,122908,122911],{},"步骤3：步骤2完成又将弹出一个新的命令窗口，在其中输入：",[103,122901,122902],{},"ssh +X ubuntu@192.168.43.164","，其中，",[103,122905,122906],{},"ubuntu","需要替换为你的登录用户名，",[103,122909,122910],{},"192.18.43.164"," 则替换为被远程连接主机的ip地址。",[14,122913,122914],{},[23,122915],{"alt":25,"src":122916},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-096.png",[14,122918,122919],{},"步骤4：选择步骤3完成后的弹窗列表中的第一个选项(或直接回车)，即可完成配置，配置成功后会有提示信息。",[14,122921,122922],{},[23,122923],{"alt":25,"src":122924},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-097.png",[14,122926,122927],{},[23,122928],{"alt":25,"src":122929},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-098.png",[14,122931,122932],{},[266,122933,122934],{},"4.使用",[14,122936,122937,122938,122876,122940,122942],{},"步骤1：继续使用快捷键",[103,122939,122875],{},[103,122941,122879],{},"，此时列表中将显示步骤3中配置的ip地址，直接选择，选择后，VScode将打开一个新的窗口。",[14,122944,122945],{},[23,122946],{"alt":25,"src":122947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-099.png",[14,122949,122950,122951,122954],{},"或者，也可以点击侧边栏的",[103,122952,122953],{},"远程资源管理器","，在弹出的服务器列表中选择要连接的服务器，并右击，选择在本窗口或新窗口中实现远程连接。",[14,122956,122957],{},[23,122958],{"alt":25,"src":122959},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-100.png",[14,122961,122962,122963,122966,122967,122970],{},"步骤2：选择菜单栏的",[103,122964,122965],{},"文件","下的",[103,122968,122969],{},"打开文件夹","，在弹窗列表中选择需要打开的文件夹并点击确定即可。",[14,122972,122973],{},[23,122974],{"alt":25,"src":122975},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-101.png",[14,122977,122978],{},"最终，我们就可以像操作本地文件一样实现远程开发了。",[48,122980,122982],{"id":122981},"_73-远程桌面","7.3 远程桌面",[14,122984,122985],{},"因为用X11转发效率太低太低，所以还是要选用远程访问桌面的形式来看Rviz2和Gazebo等等（如果有需求的话）",[14,122987,122988],{},"我们选择使用VNC来看。",[60,122990,122991],{},[63,122992,122993],{},"安装VNC服务器：",[14,122995,122996],{},"这里以TigerVNC为例进行安装：",[97,122998,123000],{"className":117281,"code":122999,"language":117283,"meta":25,"style":25},"sudo apt install tigervnc-standalone-server tigervnc-common\n",[103,123001,123002],{"__ignoreMap":25},[106,123003,123004,123006,123008,123010,123013],{"class":108,"line":109},[106,123005,24570],{"class":1955},[106,123007,117302],{"class":221},[106,123009,23827],{"class":221},[106,123011,123012],{"class":221}," tigervnc-standalone-server",[106,123014,123015],{"class":221}," tigervnc-common\n",[60,123017,123018],{"start":28},[63,123019,123020],{},"设置VNC密码：",[14,123022,123023],{},"为VNC用户设置密码，运行以下命令：",[97,123025,123027],{"className":117281,"code":123026,"language":117283,"meta":25,"style":25},"vncpasswd\n",[103,123028,123029],{"__ignoreMap":25},[106,123030,123031],{"class":108,"line":109},[106,123032,123026],{"class":1955},[60,123034,123035],{"start":1172},[63,123036,123037],{},"配置VNC启动脚本:",[14,123039,123040],{},"创建VNC配置文件，在用户家目录内的.vnc文件夹中创建启动文件：",[97,123042,123044],{"className":117281,"code":123043,"language":117283,"meta":25,"style":25},"mkdir -p ~\u002F.vnc\nnano ~\u002F.vnc\u002Fxstartup\n",[103,123045,123046,123055],{"__ignoreMap":25},[106,123047,123048,123050,123052],{"class":108,"line":109},[106,123049,101251],{"class":1955},[106,123051,29210],{"class":165},[106,123053,123054],{"class":221}," ~\u002F.vnc\n",[106,123056,123057,123060],{"class":108,"line":28},[106,123058,123059],{"class":1955},"nano",[106,123061,123062],{"class":221}," ~\u002F.vnc\u002Fxstartup\n",[14,123064,123065],{},"在打开的编辑器里面输入以下内容（以GNOME为例）：",[97,123067,123069],{"className":117281,"code":123068,"language":117283,"meta":25,"style":25},"#!\u002Fbin\u002Fsh\nunset SESSION_MANAGER\nunset DBUS_SESSION_BUS_ADDRESS\ngnome-session\n",[103,123070,123071,123076,123084,123091],{"__ignoreMap":25},[106,123072,123073],{"class":108,"line":109},[106,123074,123075],{"class":175},"#!\u002Fbin\u002Fsh\n",[106,123077,123078,123081],{"class":108,"line":28},[106,123079,123080],{"class":165},"unset",[106,123082,123083],{"class":221}," SESSION_MANAGER\n",[106,123085,123086,123088],{"class":108,"line":1172},[106,123087,123080],{"class":165},[106,123089,123090],{"class":221}," DBUS_SESSION_BUS_ADDRESS\n",[106,123092,123093],{"class":108,"line":1187},[106,123094,123095],{"class":1955},"gnome-session\n",[14,123097,123098],{},"保存并退出（在nano中按Ctrl + O保存，然后按Ctrl + X退出）。",[60,123100,123101],{"start":1187},[63,123102,123103],{},"给予执行权限：",[14,123105,123106],{},"为xstartup文件设置执行权限：",[97,123108,123110],{"className":117281,"code":123109,"language":117283,"meta":25,"style":25},"chmod +x ~\u002F.vnc\u002Fxstartup\n",[103,123111,123112],{"__ignoreMap":25},[106,123113,123114,123116,123119],{"class":108,"line":109},[106,123115,24605],{"class":1955},[106,123117,123118],{"class":221}," +x",[106,123120,123062],{"class":221},[60,123122,123123],{"start":1193},[63,123124,123125],{},"启动VNC服务器：",[97,123127,123129],{"className":117281,"code":123128,"language":117283,"meta":25,"style":25},"vncserver -geometry 1920x1080 -localhost=0\n",[103,123130,123131],{"__ignoreMap":25},[106,123132,123133,123136,123139,123142],{"class":108,"line":109},[106,123134,123135],{"class":1955},"vncserver",[106,123137,123138],{"class":165}," -geometry",[106,123140,123141],{"class":221}," 1920x1080",[106,123143,123144],{"class":165}," -localhost=0\n",[14,123146,123147],{},"geometry 选项指定窗口大小，localhost 选项设为 0 以开放连接。(设为1是只允许本地连接)",[14,123149,123150],{},"你将看到类似于:1的输出，这表示VNC会话的显示编号。例如，如果输出为:1，则VNC监听的端口为5901（5900 + 显示编号）。",[60,123152,123153],{"start":1207},[63,123154,123155],{},"查看已开启的VNC服务器：",[97,123157,123159],{"className":117281,"code":123158,"language":117283,"meta":25,"style":25},"vncserver -list\n",[103,123160,123161],{"__ignoreMap":25},[106,123162,123163,123165],{"class":108,"line":109},[106,123164,123135],{"class":1955},[106,123166,123167],{"class":165}," -list\n",[14,123169,123170],{},[23,123171],{"alt":25,"src":123172},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-102.png",[60,123174,123175],{"start":1213},[63,123176,123177],{},"连接到VNC服务器：",[14,123179,123180],{},"使用VNC客户端（如vncviewer）连接到VNC服务器，输入你的服务器IP和端口。例如，如果服务器IP为192.168.31.10，且显示编号为1，你应该连接到192.168.31.10:1，或者直接输入192.168.31.10:5901。",[60,123182,123183],{"start":1304},[63,123184,123185],{},"停止VNC服务器：",[14,123187,123188],{},"如果需要停止VNC服务器，可以使用以下命令：",[97,123190,123192],{"className":117281,"code":123191,"language":117283,"meta":25,"style":25},"vncserver -kill :1\n",[103,123193,123194],{"__ignoreMap":25},[106,123195,123196,123198,123201],{"class":108,"line":109},[106,123197,123135],{"class":1955},[106,123199,123200],{"class":165}," -kill",[106,123202,123203],{"class":221}," :1\n",[14,123205,123206],{},"将:1替换为你实际使用的显示编号。",[14,123208,123209],{},[23,123210],{"alt":25,"src":123211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-103.png",[14,123213,123214],{},[23,123215],{"alt":25,"src":123216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-104.png",[48,123218,123220],{"id":123219},"_74-usb端口设置","7.4 USB端口设置",[14,123222,123223],{},[266,123224,123225],{},"首先先配置好权限",[97,123227,123229],{"className":117281,"code":123228,"language":117283,"meta":25,"style":25},"# 将用户权限提高\nsudo usermod -aG dialout $USER\nnewgrp dialout\n# 查看下面命令是否输出dialout（若输出才正常）\ngroups\n",[103,123230,123231,123236,123249,123256,123261],{"__ignoreMap":25},[106,123232,123233],{"class":108,"line":109},[106,123234,123235],{"class":175},"# 将用户权限提高\n",[106,123237,123238,123240,123242,123244,123247],{"class":108,"line":28},[106,123239,24570],{"class":1955},[106,123241,26568],{"class":221},[106,123243,26571],{"class":165},[106,123245,123246],{"class":221}," dialout",[106,123248,26576],{"class":116},[106,123250,123251,123253],{"class":108,"line":1172},[106,123252,26595],{"class":1955},[106,123254,123255],{"class":221}," dialout\n",[106,123257,123258],{"class":108,"line":1187},[106,123259,123260],{"class":175},"# 查看下面命令是否输出dialout（若输出才正常）\n",[106,123262,123263],{"class":108,"line":1193},[106,123264,123265],{"class":1955},"groups\n",[14,123267,123268],{},"因为我们插拔USB设备，他的端口号可能会一直变，所以我们要给他的tty起一个固定的别名。",[77,123270,123272],{"id":123271},"_741-根据usb设备绑定端口多个不同设备","7.4.1 根据USB设备绑定端口(多个不同设备)",[14,123274,123275,123278],{},[266,123276,123277],{},"需求："," Ubuntu系统中现接入雷达和智能小车，请为二者绑定端口。",[14,123280,123281,123284],{},[266,123282,123283],{},"实现原理："," 可以通过USB设备本身的“标识”实现端口绑定。",[14,123286,123287],{},[266,123288,123289],{},"流程如下：",[14,123291,123292],{},"（1）.查找设备idVendor和idProduct",[14,123294,123295,123296,123299],{},"接入两个USB设备，在终端调用指令",[103,123297,123298],{},"lsusb","查看显示系统中以及连接到系统的USB设备信息。",[14,123301,123302],{},[23,123303],{"alt":25,"src":123304},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-105.png",[14,123306,123307,123308,123311],{},"如上图所示，红色方框内数据为USB设备，ID后面的",[103,123309,123310],{},"1a86:7523","分别为USB的idVendor和idProduct（两个参数之间使用”：“分隔）。",[14,123313,123314],{},"另外：可以通过重新插拔比较的方式确定哪些数据对应接入的USB设备。",[14,123316,123317],{},"（2）.编写映射规则",[14,123319,123320,123321,123324],{},"在",[103,123322,123323],{},"\u002Fetc\u002Fudev\u002Frules.d","目录下新建文件xxx.rules（文件名自定义）",[97,123326,123328],{"className":117281,"code":123327,"language":117283,"meta":25,"style":25},"sudo vim \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[103,123329,123330],{"__ignoreMap":25},[106,123331,123332,123334,123336],{"class":108,"line":109},[106,123333,24570],{"class":1955},[106,123335,118568],{"class":221},[106,123337,123338],{"class":221}," \u002Fetc\u002Fudev\u002Frules.d\u002Fxxx.rules\n",[14,123340,123341],{},"输入如下内容：",[97,123343,123345],{"className":117281,"code":123344,"language":117283,"meta":25,"style":25},"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",[103,123346,123347,123377],{"__ignoreMap":25},[106,123348,123349,123352,123354,123357,123360,123363,123366,123368,123371,123374],{"class":108,"line":109},[106,123350,123351],{"class":116},"KERNEL",[106,123353,162],{"class":112},[106,123355,123356],{"class":221},"=\"ttyUSB*\",",[106,123358,123359],{"class":1955}," ATTRS",[106,123361,123362],{"class":221},"{idVendor}==",[106,123364,123365],{"class":1955},"\"10c4\"",[106,123367,495],{"class":1955},[106,123369,123370],{"class":221}," ATTRS{idProduct}==\"ea60\",",[106,123372,123373],{"class":221}," MODE:=\"0777\",",[106,123375,123376],{"class":221}," SYMLINK+=\"mylidar\"\n",[106,123378,123379,123381,123383,123385,123387,123389,123392,123394,123397,123399],{"class":108,"line":28},[106,123380,123351],{"class":116},[106,123382,162],{"class":112},[106,123384,123356],{"class":221},[106,123386,123359],{"class":1955},[106,123388,123362],{"class":221},[106,123390,123391],{"class":1955},"\"1a86\"",[106,123393,495],{"class":1955},[106,123395,123396],{"class":221}," ATTRS{idProduct}==\"7523\",",[106,123398,123373],{"class":221},[106,123400,123401],{"class":221}," SYMLINK+=\"mycar\"\n",[14,123403,123404],{},"代码解释：",[1124,123406,123407,123410,123413,123416],{},[63,123408,123409],{},"KERNEL是内核固定名称，这里统一是“ttyUSB*”；",[63,123411,123412],{},"MODE是节点权限，通常改为“0777”，表示可读写可运行；",[63,123414,123415],{},"SYMLINK是符号连接，即绑定的别名；",[63,123417,123418],{},"ATTRS是设备厂商的唯一标识，idVendor和idProduct正好组成上面通过lsusb查找到的设备ID。",[14,123420,123421,123422,123425,123428],{},"***小提示：***",[23546,123423,123424],{},"一般的USB设备供应商都会提供类似的脚本文件，对于调用者而言，直接复制该文件到",[103,123426,123427],{},"\u002Fetc\u002Fudev\u002Frule.d",[23546,123429,123430],{},"目录即可。",[14,123432,123433],{},"表格 还在加载中，请等待加载完成后再尝试复制",[14,123435,123436],{},"（3）.使规则生效",[14,123438,123439],{},"在终端下输入如下指令：",[97,123441,123443],{"className":117281,"code":123442,"language":117283,"meta":25,"style":25},"# Ubuntu用下方命令\nsudo service udev reload\nsudo service udev restart\n\n#Fedora用下方命令\nsudo udevadm control --reload\nsudo udevadm trigger\n",[103,123444,123445,123450,123462,123473,123477,123482,123495],{"__ignoreMap":25},[106,123446,123447],{"class":108,"line":109},[106,123448,123449],{"class":175},"# Ubuntu用下方命令\n",[106,123451,123452,123454,123456,123459],{"class":108,"line":28},[106,123453,24570],{"class":1955},[106,123455,120033],{"class":221},[106,123457,123458],{"class":221}," udev",[106,123460,123461],{"class":221}," reload\n",[106,123463,123464,123466,123468,123470],{"class":108,"line":1172},[106,123465,24570],{"class":1955},[106,123467,120033],{"class":221},[106,123469,123458],{"class":221},[106,123471,123472],{"class":221}," restart\n",[106,123474,123475],{"class":108,"line":1187},[106,123476,2392],{"emptyLinePlaceholder":33},[106,123478,123479],{"class":108,"line":1193},[106,123480,123481],{"class":175},"#Fedora用下方命令\n",[106,123483,123484,123486,123489,123492],{"class":108,"line":1207},[106,123485,24570],{"class":1955},[106,123487,123488],{"class":221}," udevadm",[106,123490,123491],{"class":221}," control",[106,123493,123494],{"class":165}," --reload\n",[106,123496,123497,123499,123501],{"class":108,"line":1213},[106,123498,24570],{"class":1955},[106,123500,123488],{"class":221},[106,123502,123503],{"class":221}," trigger\n",[14,123505,123506],{},"再重新插拔设备即可。",[14,123508,123509],{},"（4）.测试",[14,123511,123512],{},"终端下输入如下指令",[97,123514,123516],{"className":117281,"code":123515,"language":117283,"meta":25,"style":25},"ll \u002Fdev | grep ttyUSB\n",[103,123517,123518],{"__ignoreMap":25},[106,123519,123520,123523,123526,123528,123530],{"class":108,"line":109},[106,123521,123522],{"class":1955},"ll",[106,123524,123525],{"class":221}," \u002Fdev",[106,123527,25103],{"class":112},[106,123529,30230],{"class":1955},[106,123531,123532],{"class":221}," ttyUSB\n",[14,123534,123535],{},"运行结果如下：",[14,123537,123538],{},[23,123539],{"alt":25,"src":123540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-106.png",[14,123542,123543,123544,123547],{},"也可以多次插拔USB设备，会发现设备端口",[103,123545,123546],{},"ttyUSBn","中的n编号会变动，但是别名是始终可以指向对应的USB设备的。至此，就可以使用别名来关联所需使用的USB设备了。",[14,123549,123550],{},[266,123551,117949],{},[14,123553,123554],{},"上述实现也存在一定的局限性，当Ubuntu接入两台或多台相同型号的USB设备时，由于设备ID是一样的，该种实现方式只会对其中的一台设备生效，这种情况下，就需要通过第二种策略来实现端口的绑定了。",[77,123556,123558],{"id":123557},"_742-根据主机硬件绑定端口多个相同设备","7.4.2 根据主机硬件绑定端口（多个相同设备)",[14,123560,123561,123563],{},[266,123562,123277],{}," 无人车中现接入一前一后两台相同型号的雷达，请为二者绑定端口。",[14,123565,123566,123568],{},[266,123567,123283],{}," USB设备所连接主机的USB接口也是有其“标识”的，可以通过这个标识实现端口绑定。",[14,123570,123571],{},[266,123572,123289],{},[14,123574,123575],{},"（1）.查看所连接的主机USB接口的KERNELS",[14,123577,123578],{},"调用如下指令查看第一台雷达的USB信息：",[97,123580,123582],{"className":117281,"code":123581,"language":117283,"meta":25,"style":25},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB0 | grep KERNELS\nudevadm info --attribute-walk --name=\u002Fdev\u002FttyACM0 | grep KERNELS\n",[103,123583,123584,123604],{"__ignoreMap":25},[106,123585,123586,123589,123591,123594,123597,123599,123601],{"class":108,"line":109},[106,123587,123588],{"class":1955},"udevadm",[106,123590,69815],{"class":221},[106,123592,123593],{"class":165}," --attribute-walk",[106,123595,123596],{"class":165}," --name=\u002Fdev\u002FttyUSB0",[106,123598,25103],{"class":112},[106,123600,30230],{"class":1955},[106,123602,123603],{"class":221}," KERNELS\n",[106,123605,123606,123608,123610,123612,123615,123617,123619],{"class":108,"line":28},[106,123607,123588],{"class":1955},[106,123609,69815],{"class":221},[106,123611,123593],{"class":165},[106,123613,123614],{"class":165}," --name=\u002Fdev\u002FttyACM0",[106,123616,25103],{"class":112},[106,123618,30230],{"class":1955},[106,123620,123603],{"class":221},[14,123622,123623],{},[23,123624],{"alt":25,"src":123625},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-107.png",[14,123627,123628],{},"调用如下指令查看第二台雷达的USB信息：",[97,123630,123632],{"className":117281,"code":123631,"language":117283,"meta":25,"style":25},"udevadm info --attribute-walk --name=\u002Fdev\u002FttyUSB1 | grep KERNELS\n",[103,123633,123634],{"__ignoreMap":25},[106,123635,123636,123638,123640,123642,123645,123647,123649],{"class":108,"line":109},[106,123637,123588],{"class":1955},[106,123639,69815],{"class":221},[106,123641,123593],{"class":165},[106,123643,123644],{"class":165}," --name=\u002Fdev\u002FttyUSB1",[106,123646,25103],{"class":112},[106,123648,30230],{"class":1955},[106,123650,123603],{"class":221},[14,123652,123653,123654,123657,123658,123661,123662,123665],{},"运行结果相比较不同的KERNELS，第一台雷达端口地址为",[103,123655,123656],{},"KERNELS==1-1.3:1.0","，第二个雷达端口地址为",[103,123659,123660],{},"KERNELS==1-1.4:1.0","。可以使用此数据作为不同端口的“",[266,123663,123664],{},"唯一性标识","”。",[14,123667,123317],{},[14,123669,123320,123670,123672],{},[103,123671,123323],{},"目录下新建文件xxx.rules（文件名自定义），输入如下内容：",[97,123674,123675],{"className":117281,"code":123327,"language":117283,"meta":25,"style":25},[103,123676,123677],{"__ignoreMap":25},[106,123678,123679,123681,123683],{"class":108,"line":109},[106,123680,24570],{"class":1955},[106,123682,118568],{"class":221},[106,123684,123338],{"class":221},[97,123686,123688],{"className":117281,"code":123687,"language":117283,"meta":25,"style":25},"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",[103,123689,123690,123719],{"__ignoreMap":25},[106,123691,123692,123694,123696,123698,123701,123703,123706,123709,123711,123714,123716],{"class":108,"line":109},[106,123693,123351],{"class":116},[106,123695,162],{"class":112},[106,123697,123356],{"class":221},[106,123699,123700],{"class":116}," KERNELS",[106,123702,162],{"class":112},[106,123704,123705],{"class":221},"=\"1-1.3:1.0\",",[106,123707,123708],{"class":1955}," MODE:",[106,123710,162],{"class":221},[106,123712,123713],{"class":1955},"\"0777\"",[106,123715,495],{"class":1955},[106,123717,123718],{"class":221}," SYMLINK+=\"rplidar_front\"\n",[106,123720,123721,123723,123725,123727,123729,123731,123734,123736,123738,123740,123742],{"class":108,"line":28},[106,123722,123351],{"class":116},[106,123724,162],{"class":112},[106,123726,123356],{"class":221},[106,123728,123700],{"class":116},[106,123730,162],{"class":112},[106,123732,123733],{"class":221},"=\"1-1.4:1.0\",",[106,123735,123708],{"class":1955},[106,123737,162],{"class":221},[106,123739,123713],{"class":1955},[106,123741,495],{"class":1955},[106,123743,123744],{"class":221}," SYMLINK+=\"rplidar_back\"\n",[14,123746,123436],{},[14,123748,123439],{},[97,123750,123751],{"className":117281,"code":123442,"language":117283,"meta":25,"style":25},[103,123752,123753,123757,123767,123777,123781,123785,123795],{"__ignoreMap":25},[106,123754,123755],{"class":108,"line":109},[106,123756,123449],{"class":175},[106,123758,123759,123761,123763,123765],{"class":108,"line":28},[106,123760,24570],{"class":1955},[106,123762,120033],{"class":221},[106,123764,123458],{"class":221},[106,123766,123461],{"class":221},[106,123768,123769,123771,123773,123775],{"class":108,"line":1172},[106,123770,24570],{"class":1955},[106,123772,120033],{"class":221},[106,123774,123458],{"class":221},[106,123776,123472],{"class":221},[106,123778,123779],{"class":108,"line":1187},[106,123780,2392],{"emptyLinePlaceholder":33},[106,123782,123783],{"class":108,"line":1193},[106,123784,123481],{"class":175},[106,123786,123787,123789,123791,123793],{"class":108,"line":1207},[106,123788,24570],{"class":1955},[106,123790,123488],{"class":221},[106,123792,123491],{"class":221},[106,123794,123494],{"class":165},[106,123796,123797,123799,123801],{"class":108,"line":1213},[106,123798,24570],{"class":1955},[106,123800,123488],{"class":221},[106,123802,123503],{"class":221},[14,123804,123506],{},[14,123806,123509],{},[14,123808,123512,123809,123812],{},[103,123810,123811],{},"ll \u002Fdev | grep ttyUSB","，运行结果如下：",[14,123814,123815],{},[23,123816],{"alt":25,"src":123817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-108.png",[14,123819,123820],{},"至此，就可以使用别名来关联所需使用的USB设备了。",[14,123822,123823,123825],{},[266,123824,117949],{}," USB设备必须连接在主机的指定端口上，否则，会导致端口绑定失败，或产生逻辑错误。(而且增加新设备可能会导致端口改变)",[77,123827,123829],{"id":123828},"_743-根据其他属性绑定端口","7.4.3 根据其他属性绑定端口",[14,123831,123832],{},"（1）.查看所连接的主机USB接口的信息",[97,123834,123836],{"className":117281,"code":123835,"language":117283,"meta":25,"style":25},"udevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyACM0)\nudevadm info -a -p $(udevadm info -q path -n \u002Fdev\u002FttyUSB0)\n",[103,123837,123838,123868],{"__ignoreMap":25},[106,123839,123840,123842,123844,123847,123849,123851,123853,123855,123858,123861,123863,123866],{"class":108,"line":109},[106,123841,123588],{"class":1955},[106,123843,69815],{"class":221},[106,123845,123846],{"class":165}," -a",[106,123848,29210],{"class":165},[106,123850,28416],{"class":116},[106,123852,123588],{"class":1955},[106,123854,69815],{"class":221},[106,123856,123857],{"class":165}," -q",[106,123859,123860],{"class":221}," path",[106,123862,25109],{"class":165},[106,123864,123865],{"class":221}," \u002Fdev\u002FttyACM0",[106,123867,123],{"class":116},[106,123869,123870,123872,123874,123876,123878,123880,123882,123884,123886,123888,123890,123893],{"class":108,"line":28},[106,123871,123588],{"class":1955},[106,123873,69815],{"class":221},[106,123875,123846],{"class":165},[106,123877,29210],{"class":165},[106,123879,28416],{"class":116},[106,123881,123588],{"class":1955},[106,123883,69815],{"class":221},[106,123885,123857],{"class":165},[106,123887,123860],{"class":221},[106,123889,25109],{"class":165},[106,123891,123892],{"class":221}," \u002Fdev\u002FttyUSB0",[106,123894,123],{"class":116},[14,123896,123897],{},[23,123898],{"alt":25,"src":123899},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-109.png",[14,123901,123902],{},"这些数据都是不会变的，所以可以拿这些数据来做标识",[14,123904,123317],{},[14,123906,123320,123907,123672],{},[103,123908,123323],{},[97,123910,123911],{"className":117281,"code":123327,"language":117283,"meta":25,"style":25},[103,123912,123913],{"__ignoreMap":25},[106,123914,123915,123917,123919],{"class":108,"line":109},[106,123916,24570],{"class":1955},[106,123918,118568],{"class":221},[106,123920,123338],{"class":221},[97,123922,123924],{"className":117281,"code":123923,"language":117283,"meta":25,"style":25},"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",[103,123925,123926,123954,123980],{"__ignoreMap":25},[106,123927,123928,123930,123932,123935,123937,123939,123941,123943,123946,123949,123951],{"class":108,"line":109},[106,123929,123351],{"class":116},[106,123931,162],{"class":112},[106,123933,123934],{"class":221},"=\"ttyACM*\",",[106,123936,123359],{"class":1955},[106,123938,123362],{"class":221},[106,123940,123391],{"class":1955},[106,123942,495],{"class":1955},[106,123944,123945],{"class":221}," ATTRS{idProduct}==\"55d4\",",[106,123947,123948],{"class":221}," ATTRS{serial}==\"0001\",",[106,123950,123373],{"class":221},[106,123952,123953],{"class":221}," SYMLINK+=\"ttyACM_MCU\"\n",[106,123955,123956,123958,123960,123962,123964,123966,123968,123970,123972,123975,123977],{"class":108,"line":28},[106,123957,123351],{"class":116},[106,123959,162],{"class":112},[106,123961,123934],{"class":221},[106,123963,123359],{"class":1955},[106,123965,123362],{"class":221},[106,123967,123391],{"class":1955},[106,123969,495],{"class":1955},[106,123971,123945],{"class":221},[106,123973,123974],{"class":221}," ATTRS{serial}==\"0002\",",[106,123976,123373],{"class":221},[106,123978,123979],{"class":221}," SYMLINK+=\"ttyACM_Lidar\"\n",[106,123981,123982,123984,123986,123988,123990,123992,123994,123996,123998,124000],{"class":108,"line":1172},[106,123983,123351],{"class":116},[106,123985,162],{"class":112},[106,123987,123356],{"class":221},[106,123989,123359],{"class":1955},[106,123991,123362],{"class":221},[106,123993,123391],{"class":1955},[106,123995,495],{"class":1955},[106,123997,123396],{"class":221},[106,123999,123373],{"class":221},[106,124001,124002],{"class":221}," SYMLINK+=\"ttyUSB_IMU\"\n",[14,124004,123436],{},[14,124006,123439],{},[97,124008,124009],{"className":117281,"code":123442,"language":117283,"meta":25,"style":25},[103,124010,124011,124015,124025,124035,124039,124043,124053],{"__ignoreMap":25},[106,124012,124013],{"class":108,"line":109},[106,124014,123449],{"class":175},[106,124016,124017,124019,124021,124023],{"class":108,"line":28},[106,124018,24570],{"class":1955},[106,124020,120033],{"class":221},[106,124022,123458],{"class":221},[106,124024,123461],{"class":221},[106,124026,124027,124029,124031,124033],{"class":108,"line":1172},[106,124028,24570],{"class":1955},[106,124030,120033],{"class":221},[106,124032,123458],{"class":221},[106,124034,123472],{"class":221},[106,124036,124037],{"class":108,"line":1187},[106,124038,2392],{"emptyLinePlaceholder":33},[106,124040,124041],{"class":108,"line":1193},[106,124042,123481],{"class":175},[106,124044,124045,124047,124049,124051],{"class":108,"line":1207},[106,124046,24570],{"class":1955},[106,124048,123488],{"class":221},[106,124050,123491],{"class":221},[106,124052,123494],{"class":165},[106,124054,124055,124057,124059],{"class":108,"line":1213},[106,124056,24570],{"class":1955},[106,124058,123488],{"class":221},[106,124060,123503],{"class":221},[14,124062,124063,124064],{},"再重新插拔设备即可，或者 ",[266,124065,124066],{},"直接重启系统。",[14,124068,123509],{},[14,124070,123512,124071,123812],{},[103,124072,123811],{},[14,124074,124075],{},[23,124076],{"alt":25,"src":124077},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-110.png",[14,124079,123820],{},[14,124081,124082,124084],{},[266,124083,117949],{}," 一些设备可能没有串口号等。",[77,124086,124088],{"id":124087},"_744-其他注意事项","7.4.4 其他注意事项",[14,124090,124091,124092,124094,124095,124098,124099,18403,124102,124105,124106,124108],{},"并非所有的USB设备端口号都是",[103,124093,123546],{},"的格式，比如Arduino的端口号可能是",[103,124096,124097],{},"ttyACMn","，而对于USB摄像头而言，一台设备则对应两个端口号，分别是",[103,124100,124101],{},"videon",[103,124103,124104],{},"video(n+1)","，并且启用摄像头设备一般使用的是",[103,124107,124101],{},"端口，绑定时需要关联的也是该接口。",[14,124110,124111,124112,124115,124116,124119,124120,124122,124123,124126,124127,124130,124131,124134,124135,124134,124138,124134,124141,28379],{},"但是无论是外接何种USB设备，也不管采用上述两种方案的哪一种进行端口绑定，其原理都是类似的，只是实现细节不同而已。如果是外接的Arduino设备，那么需要在rules文件中的将",[103,124113,124114],{},"KERNEL==\"ttyUSB*\"","修改为",[103,124117,124118],{},"KERNEL==\"ttyACM*\"","，如果外接的是USB摄像头，那么则需要在rules文件中的将",[103,124121,124114],{},"修改为类似于",[103,124124,124125],{},"KERNEL==\"video[0,2,4,6]\"","的格式，其中",[103,124128,124129],{},"video[0,2,4,6]","表示可以绑定的端口为",[103,124132,124133],{},"video0","或",[103,124136,124137],{},"video2",[103,124139,124140],{},"video4",[103,124142,124143],{},"video6",[48,124145,124147],{"id":124146},"_75-挂载内网网页","7.5 挂载内网网页",[14,124149,124150],{},"可以把本地的网页挂载到路由器端，或者同内网段其他设备上，甚至可以挂载在本地。",[14,124152,124153],{},"下面以安卓设备为例子，由于安卓设备暂时不能直接打开html,所以我们可以把html挂载到本地服务器，再通过浏览器查看。",[14,124155,124156],{},"由于安卓系统基于Linux内核，所以我们可以下载一个叫termux的app来敲一些Linux命令：",[14,124158,124159,124160],{},"Termux 下载地址（F-Droid）：",[355,124161,124162],{"href":124162,"rel":124163},"https:\u002F\u002Ff-droid.org\u002Fpackages\u002Fcom.termux\u002F",[23858],[14,124165,124166],{},"首先打开app后，先更新软件缓存：",[97,124168,124170],{"className":117281,"code":124169,"language":117283,"meta":25,"style":25},"pkg update\n",[103,124171,124172],{"__ignoreMap":25},[106,124173,124174,124177],{"class":108,"line":109},[106,124175,124176],{"class":1955},"pkg",[106,124178,26236],{"class":221},[14,124180,124181],{},"然后换源",[97,124183,124185],{"className":117281,"code":124184,"language":117283,"meta":25,"style":25},"nano $PREFIX\u002Fetc\u002Fapt\u002Fsources.list\n",[103,124186,124187],{"__ignoreMap":25},[106,124188,124189,124191,124194],{"class":108,"line":109},[106,124190,123059],{"class":1955},[106,124192,124193],{"class":116}," $PREFIX",[106,124195,124196],{"class":221},"\u002Fetc\u002Fapt\u002Fsources.list\n",[14,124198,124199],{},"将该文件内容替换为下面：",[97,124201,124203],{"className":117281,"code":124202,"language":117283,"meta":25,"style":25},"deb https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24 stable main\n",[103,124204,124205],{"__ignoreMap":25},[106,124206,124207,124210,124213,124216],{"class":108,"line":109},[106,124208,124209],{"class":1955},"deb",[106,124211,124212],{"class":221}," https:\u002F\u002Fmirrors.bfsu.edu.cn\u002Ftermux\u002Ftermux-packages-24",[106,124214,124215],{"class":221}," stable",[106,124217,124218],{"class":221}," main\n",[1124,124220,124221,124248],{},[63,124222,124223,124224,124226,124227],{},"如果你使用的是",[103,124225,123059],{},"编辑器：",[1124,124228,124229,124236,124242],{},[63,124230,124231,124232,124235],{},"按 ",[103,124233,124234],{},"Ctrl+O"," 保存文件。",[63,124237,124231,124238,124241],{},[103,124239,124240],{},"Enter"," 确认文件名。",[63,124243,124231,124244,124247],{},[103,124245,124246],{},"Ctrl+X"," 退出编辑器。",[63,124249,124223,124250,124226,124253],{},[103,124251,124252],{},"vim",[1124,124254,124255,124261],{},[63,124256,124231,124257,124260],{},[103,124258,124259],{},"Esc"," 退出编辑模式。",[63,124262,124263,124264,124266],{},"输入 ",[103,124265,119206],{}," 保存并退出。",[14,124268,124269],{},"接下来重新更新软件源：",[97,124271,124273],{"className":117281,"code":124272,"language":117283,"meta":25,"style":25},"pkg update && pkg upgrade\n",[103,124274,124275],{"__ignoreMap":25},[106,124276,124277,124279,124281,124283,124285],{"class":108,"line":109},[106,124278,124176],{"class":1955},[106,124280,117332],{"class":221},[106,124282,26184],{"class":116},[106,124284,124176],{"class":1955},[106,124286,117318],{"class":221},[14,124288,124289],{},"安装python：",[97,124291,124293],{"className":117281,"code":124292,"language":117283,"meta":25,"style":25},"pkg install python\n",[103,124294,124295],{"__ignoreMap":25},[106,124296,124297,124299,124301],{"class":108,"line":109},[106,124298,124176],{"class":1955},[106,124300,23827],{"class":221},[106,124302,124303],{"class":221}," python\n",[14,124305,124306,26467],{},[266,124307,124308],{},"通过Termux访问设备存储",[14,124310,124311],{},"如果文件在安卓设备上，可以使用Termux的文件管理器访问设备的存储：",[97,124313,124315],{"className":117281,"code":124314,"language":117283,"meta":25,"style":25},"termux-setup-storage\n",[103,124316,124317],{"__ignoreMap":25},[106,124318,124319],{"class":108,"line":109},[106,124320,124314],{"class":1955},[60,124322,124323],{},[63,124324,124325,26467,124328],{},[266,124326,124327],{},"进入HTML文件所在的目录",[60,124329,124330],{},[63,124331,124332,124333,124335],{},"使用",[103,124334,101261],{},"命令进入HTML文件所在的目录：",[97,124337,124339],{"className":117281,"code":124338,"language":117283,"meta":25,"style":25},"cd ~\u002Fyour_html_folder\n",[103,124340,124341],{"__ignoreMap":25},[106,124342,124343,124345],{"class":108,"line":109},[106,124344,101261],{"class":165},[106,124346,124347],{"class":221}," ~\u002Fyour_html_folder\n",[60,124349,124350],{"start":28},[63,124351,124352,26467,124355,124360,124377],{},[266,124353,124354],{},"启动Python HTTP服务器",[60,124356,124357],{},[63,124358,124359],{},"运行以下命令启动一个简单的HTTP服务器：",[97,124361,124363],{"className":117281,"code":124362,"language":117283,"meta":25,"style":25},"python -m http.server 8000\n",[103,124364,124365],{"__ignoreMap":25},[106,124366,124367,124369,124371,124374],{"class":108,"line":109},[106,124368,30374],{"class":1955},[106,124370,100867],{"class":165},[106,124372,124373],{"class":221}," http.server",[106,124375,124376],{"class":165}," 8000\n",[60,124378,124379],{"start":1172},[63,124380,124381,124382,124385],{},"这会在端口",[103,124383,124384],{},"8000","上启动一个Web服务器。",[1124,124387,124388],{},[63,124389,124390],{},"启动服务器后，Termux会显示日志信息，例如：",[97,124392,124394],{"className":120801,"code":124393,"language":120803,"meta":120804,"style":25},"Serving HTTP on 0.0.0.0 port 8000 (http:\u002F\u002F0.0.0.0:8000\u002F) ...\n",[103,124395,124396],{"__ignoreMap":25},[106,124397,124398],{"class":108,"line":109},[106,124399,124393],{},[1124,124401,124402],{},[63,124403,124404],{},"这表示服务器已成功启动。",[14,124406,124407],{},[266,124408,124409],{},"在浏览器中访问HTML文件",[60,124411,124412],{},[63,124413,124414,26467,124417,124422],{},[266,124415,124416],{},"在同一设备上访问",[60,124418,124419],{},[63,124420,124421],{},"打开安卓设备上的浏览器（如Chrome），输入以下地址：",[97,124423,124426],{"className":124424,"code":124425,"language":71658,"meta":25,"style":25},"language-JSON shiki shiki-themes github-light github-dark","http:\u002F\u002Flocalhost:8000\n",[103,124427,124428],{"__ignoreMap":25},[106,124429,124430,124433],{"class":108,"line":109},[106,124431,124432],{"class":116},"http:",[106,124434,124435],{"class":175},"\u002F\u002Flocalhost:8000\n",[1124,124437,124438],{},[63,124439,124440,124441,124444],{},"如果HTML文件中有",[103,124442,124443],{},"index.html","，它会自动加载；否则，你需要手动点击文件链接。",[48,124446,124448],{"id":124447},"_76-linux重点知识","7.6 Linux重点知识",[77,124450,124452],{"id":124451},"_761-关于点的说明","7.6.1 关于点的说明",[14,124454,124455],{},[23,124456],{"alt":25,"src":124457},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-111.png",[14,124459,124460],{},"一点本目录，两点上目录",[77,124462,124464],{"id":124463},"_762-目录","7.6.2 目录",[21991,124466,124468],{"id":124467},"_7621-系统启动必须","7.6.2.1 系统启动必须",[14,124470,124471],{},[266,124472,124473],{},"\u002Fboot:",[14,124475,124476],{},"存放启动linux时使用的一些核心文件，包括一些连接文件和镜像文件",[14,124478,124479],{},[266,124480,124481],{},"\u002Fetc:",[14,124483,124484],{},"存放所有的系统需要的配置文件和子目录列表，更改目录下的文件可能会导致系统不能启动",[14,124486,124487],{},[266,124488,124489],{},"\u002Flib：",[14,124491,124492],{},"存放基本代码库（比如c++库），其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库",[14,124494,124495],{},[266,124496,124497],{},"\u002Fsys:",[14,124499,124500],{},"这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs 。sysfs文件系统集成了下面3种文件系统的信息：针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候，对应的文件和目录也在内核对象子系统中",[21991,124502,124504],{"id":124503},"_7622-指令集合","7.6.2.2 指令集合",[14,124506,124507],{},[266,124508,124509],{},"\u002Fbin:",[14,124511,124512],{},"为二进制文件的缩写，存放最经常使用的命令",[14,124514,124515],{},[266,124516,124517],{},"\u002Fsbin:",[14,124519,124520],{},"只有系统管理员才能使用的程序和指令",[21991,124522,124524],{"id":124523},"_7623-外部文件管理","7.6.2.3 外部文件管理",[14,124526,124527],{},[266,124528,124529],{},"\u002Fdev:",[14,124531,124532],{},"Device（设备）的缩写，存放linux的外部设备，在linux中访问设备和访问文件的方式是相同的",[14,124534,124535],{},[266,124536,124537],{},"\u002Fmedia:",[14,124539,124540],{},"类windows的其他设备，例如U盘、光驱等等，识别后linux会把设备放到这个目录下",[14,124542,124543],{},[266,124544,124545],{},"\u002Fmnt:",[14,124547,124548],{},"临时挂载别的文件系统，我们可以将光驱挂载在\u002Fmnt\u002F上，然后进入该目录就可以查看光驱里的内容",[21991,124550,124552],{"id":124551},"_7624-临时文件","7.6.2.4 临时文件",[14,124554,124555],{},[266,124556,124557],{},"\u002Frun:",[14,124559,124560],{},"是一个临时文件系统，存储系统启动以来的信息。当系统重启时，这个目录下的文件应该被删掉或清除。如果你的系统上有 \u002Fvar\u002Frun 目录，应该让它指向 run",[14,124562,124563],{},[266,124564,124565],{},"\u002Flost+found:",[14,124567,124568],{},"一般情况下为空的，系统非法关机后，这里就存放一些文件",[14,124570,124571],{},[266,124572,124573],{},"\u002Ftmp:",[14,124575,124576],{},"这个目录是用来存放一些临时文件的",[21991,124578,124580],{"id":124579},"_7625-账户","7.6.2.5 账户",[14,124582,124583],{},[266,124584,124585],{},"\u002Froot：",[14,124587,124588],{},"系统管理员的用户主目录",[14,124590,124591,26467],{},[266,124592,124593],{},"\u002Fhome",[14,124595,124596],{},"用户的主目录，以用户的账号命名的",[14,124598,124599,26467],{},[266,124600,124601],{},"\u002Fusr",[14,124603,124604],{},"用户的很多应用程序和文件都放在这个目录下，类似于windows下的program files目录",[14,124606,124607],{},[266,124608,124609],{},"\u002Fusr\u002Fbin：",[14,124611,124612],{},"系统用户使用的应用程序与指令",[14,124614,124615],{},[266,124616,124617],{},"\u002Fusr\u002Fsbin：",[14,124619,124620],{},"超级用户使用的比较高级的管理程序和系统守护程序",[14,124622,124623],{},[266,124624,124625],{},"\u002Fusr\u002Fsrc：",[14,124627,124628],{},"内核源代码默认的放置目录",[21991,124630,124632],{"id":124631},"_7626-运行过程要用","7.6.2.6 运行过程要用",[14,124634,124635],{},[266,124636,124637],{},"\u002Fvar：",[14,124639,124640],{},"存放经常修改的数据，比如程序运行的日志文件（\u002Fvar\u002Flog 目录下）",[14,124642,124643],{},[266,124644,124645],{},"\u002Fproc:",[14,124647,124648,124649,124652],{},"管理 ",[266,124650,124651],{},"内存空间！"," 虚拟的目录，是系统内存的映射，我们可以直接访问这个目录来，获取系统信息。这个目录的内容不在硬盘上而是在内存里，我们也可以直接修改里面的某些文件来做修改",[21991,124654,124656],{"id":124655},"_7627-扩展用的","7.6.2.7 扩展用的",[14,124658,124659],{},[266,124660,124661],{},"\u002Fopt:",[14,124663,124664],{},"默认是空的，我们安装额外软件可以放在这个里面",[14,124666,124667],{},[266,124668,124669],{},"\u002Fsrv:",[14,124671,124672],{},"存放服务启动后需要提取的数据（不用服务器就是空）",[77,124674,124676],{"id":124675},"_763-终端利用ssh登陆远程服务器","7.6.3 终端利用ssh登陆远程服务器",[14,124678,124679],{},[23,124680],{"alt":25,"src":124681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-112.png",[14,124683,124684],{},"windows-->linux:",[14,124686,124687],{},"远程传输文件:scp- r 本地文件目录 服务器的用户名@服务器IP:\u002Ftmp",[14,124689,124690],{},"必须传入到服务器的\u002Ftmp这个路径下，因为只有这个路径有写入权限，可以上传之后移动到你的文件到你需要的指定目录",[14,124692,124693],{},"linux传输文件到windows",[14,124695,124696],{},"scp- r 服务器的用户名@服务器IP:\u002Ftmp 本地的文件目录",[77,124698,124700],{"id":124699},"_764-易忘知识","7.6.4 易忘知识",[14,124702,124703],{},"操作系统内核查看",[97,124705,124706],{"className":117281,"code":121275,"language":117283,"meta":25,"style":25},[103,124707,124708],{"__ignoreMap":25},[106,124709,124710,124712],{"class":108,"line":109},[106,124711,70198],{"class":1955},[106,124713,121284],{"class":165},[14,124715,124716],{},[23,124717],{"alt":25,"src":124718},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-113.png",[14,124720,124721],{},[23,124722],{"alt":25,"src":124723},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-114.png",[97,124725,124727],{"className":117281,"code":124726,"language":117283,"meta":25,"style":25},"mv mvtest mvtest2 \nmv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[103,124728,124729,124741],{"__ignoreMap":25},[106,124730,124731,124733,124736,124739],{"class":108,"line":109},[106,124732,121492],{"class":1955},[106,124734,124735],{"class":221}," mvtest",[106,124737,124738],{"class":221}," mvtest2",[106,124740,2666],{"class":116},[106,124742,124743],{"class":108,"line":28},[106,124744,124745],{"class":1955},"mv不仅仅有移动文件与目录的功能，还可以实现修改名称的功能\n",[14,124747,124748],{},[23,124749],{"alt":25,"src":124750},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-115.png",[14,124752,124753],{},[23,124754],{"alt":25,"src":124755},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-116.png",[14,124757,124758,124759,124762],{},"当前目录中共有3个文件，每个占用4KB，目录本身因元数据占用4KB，总计16KB。通过 ",[103,124760,124761],{},"du -a"," 可以快速查看磁盘使用细节。",[77,124764,124766],{"id":124765},"_765-vim","7.6.5 Vim",[14,124768,124769],{},[23,124770],{"alt":25,"src":124771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-117.png",[14,124773,124774],{},"（vim是一个linux使用非常广泛的编辑器，不是编译器）vscode就是编辑器，vim编辑器几乎支持所有编程语言，所以非常好用！",[14,124776,124777],{},"一开始进去为命令模式，此时点击输入的字母为命令",[14,124779,124780],{},[266,124781,124782],{},"1.命令模式：",[14,124784,124785],{},"i 切换到输入模式，在光标当前位置开始输入文本",[14,124787,124788],{},"x 删除当前光标所在处的字符",[14,124790,124791],{},"：切换到底线命令模式，以在最底一行输入命令",[14,124793,124794],{},"a 进行插入模式，在光标下一个位置输入文本",[14,124796,124797],{},"o 在当前的下方插入一个新行，并进入插入模式",[14,124799,124800],{},"0 在当前行的上方插入一个新行，并进入插入模式",[14,124802,124803],{},"dd 剪切当前行",[14,124805,124806],{},"yy 复制当前行",[14,124808,124809],{},"p 粘贴剪贴板内容到光标下方",[14,124811,124812],{},"P 粘贴剪贴板内容到光标上方",[14,124814,124815],{},"u 撤销上一次操作",[14,124817,124818],{},"ctrl+r 重做上一次操作",[14,124820,124821,124823],{},[912,124822],{}," 保存文件",[14,124825,124826,124828],{},[762,124827],{}," 退出Vim编辑器",[14,124830,124831,124833],{},[762,124832],{},"! 强制退出Vim编辑器，不保存修改",[14,124835,124836],{},[266,124837,124838],{},"2.输入模式：",[14,124840,124841],{},[23,124842],{"alt":25,"src":124843},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-118.png",[14,124845,124846],{},[266,124847,124848],{},"3.底线命令模式：",[14,124850,124851],{},[23,124852],{"alt":25,"src":124853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-119.png",[14,124855,124856],{},"按下esc可以退出底线命令模式",[77,124858,124860],{"id":124859},"_766-apt","7.6.6 apt",[14,124862,124863],{},"为Linux的Debian和Ubuntu中的shell前端软件包管理器",[77,124865,124867],{"id":124866},"_767-home与root的区别","7.6.7 home与root的区别",[14,124869,124870],{},[23,124871],{"alt":25,"src":124872},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-120.png",[14,124874,124875],{},[23,124876],{"alt":25,"src":124877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-121.png",[14,124879,124880],{},[23,124881],{"alt":25,"src":124882},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-122.png",[14,124884,124885],{},[23,124886],{"alt":25,"src":124887},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-123.png",[77,124889,124891],{"id":124890},"_768-linux系统如何安装软件5-补充","7.6.8 linux系统如何安装软件：.5 补充",[14,124893,124894],{},[355,124895,124896],{"href":124896,"rel":124897},"https:\u002F\u002Fme.tungchiahui.cn\u002Flinux-tutorial\u002F#%E5%BD%BB%E5%BA%95%E5%88%A0%E9%99%A4linux",[23858],[60,124899,124900,124903],{},[63,124901,124902],{},"下载安装包+指令的形式进行安装 以fedora系统为例子： sudo dnf install 安装包",[63,124904,124905],{},"下载程序压缩包并进行解压，配置图标启动文件，以安装pycharm为例进行说明：： 1️⃣解压压缩包：可以手动解压；也可以通过终端进行解压tar (tar -help看有啥选项)",[14,124907,124908],{},[23,124909],{"alt":25,"src":124910},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-124.png",[14,124912,124913],{},"解压后的文件放到自己存放的位置 2️⃣查找启动文件，判断程序压缩包是正常的，在解压文件下的bin目录进行查看，在终端输入pycharm.sh或者pycharm来判断是否启动",[14,124915,124916],{},[23,124917],{"alt":25,"src":124918},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-125.png",[97,124920,124922],{"className":120801,"code":124921,"language":120803,"meta":120804,"style":25},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n.\u002Fpycharm.sh\n",[103,124923,124924,124929],{"__ignoreMap":25},[106,124925,124926],{"class":108,"line":109},[106,124927,124928],{},"cd \u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\n",[106,124930,124931],{"class":108,"line":28},[106,124932,124933],{},".\u002Fpycharm.sh\n",[14,124935,124936],{},"3️⃣创建.desktop文件",[14,124938,124939],{},[266,124940,124941],{},"原理：",[1124,124943,124944,124954],{},[63,124945,124946,124947,124953],{},"Linux 桌面环境（GNOME、KDE、XFCE 等）通过 ",[266,124948,124949,124952],{},[103,124950,124951],{},".desktop"," 文件"," 来识别应用。",[63,124955,124956,124958,124959],{},[103,124957,124951],{}," 文件相当于一个“应用注册表”，告诉系统：",[1124,124960,124961,124964,124967,124970,124973],{},[63,124962,124963],{},"应用名字（Name）",[63,124965,124966],{},"图标（Icon）",[63,124968,124969],{},"执行命令（Exec）",[63,124971,124972],{},"分类（Categories）",[63,124974,124975],{},"是否需要终端（Terminal）",[97,124977,124979],{"className":120801,"code":124978,"language":120803,"meta":120804,"style":25},"cd ~\u002F.local\u002Fshare\u002Fapplications\nnano pycharm.desktop\n",[103,124980,124981,124986],{"__ignoreMap":25},[106,124982,124983],{"class":108,"line":109},[106,124984,124985],{},"cd ~\u002F.local\u002Fshare\u002Fapplications\n",[106,124987,124988],{"class":108,"line":28},[106,124989,124990],{},"nano pycharm.desktop\n",[14,124992,124993],{},"nano是一个命令行下的编辑器，也可以使用vim",[97,124995,124997],{"className":120801,"code":124996,"language":120803,"meta":120804,"style":25},"[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",[103,124998,124999,125004,125009,125014,125019,125024,125029,125034,125039,125044],{"__ignoreMap":25},[106,125000,125001],{"class":108,"line":109},[106,125002,125003],{},"[Desktop Entry]\n",[106,125005,125006],{"class":108,"line":28},[106,125007,125008],{},"Version=1.0\n",[106,125010,125011],{"class":108,"line":1172},[106,125012,125013],{},"Type=Application\n",[106,125015,125016],{"class":108,"line":1187},[106,125017,125018],{},"Name=PyCharm\n",[106,125020,125021],{"class":108,"line":1193},[106,125022,125023],{},"Icon=\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.svg\n",[106,125025,125026],{"class":108,"line":1207},[106,125027,125028],{},"Exec=\"\u002Fhome\u002Fcherish\u002FUserFloder\u002FApplications\u002Fpycharm-2025.2.4\u002Fbin\u002Fpycharm.sh\" %f\n",[106,125030,125031],{"class":108,"line":1213},[106,125032,125033],{},"Comment=JetBrains PyCharm IDE\n",[106,125035,125036],{"class":108,"line":1304},[106,125037,125038],{},"Categories=Development;IDE;\n",[106,125040,125041],{"class":108,"line":1310},[106,125042,125043],{},"Terminal=false\n",[106,125045,125046],{"class":108,"line":1322},[106,125047,125048],{},"StartupWMClass=jetbrains-pycharm\n",[1124,125050,125051,125057,125063,125069],{},[63,125052,125053,125056],{},[103,125054,125055],{},"Exec"," → 点击图标时执行的命令",[63,125058,125059,125062],{},[103,125060,125061],{},"Icon"," → 显示在菜单和桌面上的图标",[63,125064,125065,125068],{},[103,125066,125067],{},"Terminal=false"," → 不打开终端",[63,125070,125071,125074],{},[103,125072,125073],{},"StartupWMClass"," → GNOME 用它区分窗口实例，如果桌面环境是kde的话可以不用设置",[125076,125077,125078],"blockquote",{},[14,125079,125080,125081,125083,125084],{},"可以理解成 ",[103,125082,124951],{}," 文件是 Linux 的 ",[266,125085,125086],{},"快捷方式配置文件",[14,125088,125089],{},"4️⃣设置可执行权限",[97,125091,125093],{"className":120801,"code":125092,"language":120803,"meta":120804,"style":25},"chmod +x ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop\n",[103,125094,125095],{"__ignoreMap":25},[106,125096,125097],{"class":108,"line":109},[106,125098,125092],{},[14,125100,125101],{},"5️⃣桌面图标启动的话如下：",[97,125103,125105],{"className":120801,"code":125104,"language":120803,"meta":120804,"style":25},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\nchmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[103,125106,125107,125112],{"__ignoreMap":25},[106,125108,125109],{"class":108,"line":109},[106,125110,125111],{},"cp ~\u002F.local\u002Fshare\u002Fapplications\u002Fpycharm.desktop ~\u002FDesktop\u002F\n",[106,125113,125114],{"class":108,"line":28},[106,125115,125116],{},"chmod +x ~\u002FDesktop\u002Fpycharm.desktop\n",[60,125118,125119],{"start":1172},[63,125120,125121],{},"下载Appimage文件实现软件的安装",[14,125123,125124],{},"1️⃣先下载appimage",[14,125126,125127],{},[355,125128,125129],{"href":125129,"rel":125130},"https:\u002F\u002Fy.qq.com\u002Fdownload\u002Fdownload.html",[23858],[14,125132,125133],{},[23,125134],{"alt":25,"src":125135},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-126.png",[14,125137,125138],{},"2️⃣下载图标，可以去google下载qq音乐图标，.svg透明的图标",[14,125140,125141],{},[23,125142],{"alt":25,"src":125143},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-127.png",[14,125145,125146],{},"当然.png格式的也没问题，或者都可以在linux系统上更换使用图标",[14,125148,125149],{},[23,125150],{"alt":25,"src":125151},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-128.png",[14,125153,125154],{},[23,125155],{"alt":25,"src":125156},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-129.png",[14,125158,125159,125160,125163],{},"3️⃣给他们放在",[103,125161,125162],{},"\u002Fhome\u002F用户名","的某个文件夹中（可以自己定）",[14,125165,125166],{},"4️⃣给软件执行权限",[97,125168,125170],{"className":120801,"code":125169,"language":120803,"meta":120804,"style":25},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\nsudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[103,125171,125172,125177],{"__ignoreMap":25},[106,125173,125174],{"class":108,"line":109},[106,125175,125176],{},"cd ~\u002FUserFloder\u002FApplications\u002Fqqmusic\n",[106,125178,125179],{"class":108,"line":28},[106,125180,125181],{},"sudo chmod +x .\u002Fqqmusic-1.1.7.AppImag\n",[14,125183,125184],{},"5️⃣配置图标启动文件并添加执行权限（也可以继续使用nano）",[97,125186,125188],{"className":117281,"code":125187,"language":117283,"meta":25,"style":25},"cd ~\u002F.local\u002Fshare\u002Fapplications\u002F\ntouch .\u002Fqqmusic.desktop\nvim .\u002Fqqmusic.desktop\nsudo chmod +x .\u002Fqqmusic.desktop\n",[103,125189,125190,125197,125204,125210],{"__ignoreMap":25},[106,125191,125192,125194],{"class":108,"line":109},[106,125193,101261],{"class":165},[106,125195,125196],{"class":221}," ~\u002F.local\u002Fshare\u002Fapplications\u002F\n",[106,125198,125199,125201],{"class":108,"line":28},[106,125200,101268],{"class":1955},[106,125202,125203],{"class":221}," .\u002Fqqmusic.desktop\n",[106,125205,125206,125208],{"class":108,"line":1172},[106,125207,124252],{"class":1955},[106,125209,125203],{"class":221},[106,125211,125212,125214,125216,125218],{"class":108,"line":1187},[106,125213,24570],{"class":1955},[106,125215,24573],{"class":221},[106,125217,123118],{"class":221},[106,125219,125203],{"class":221},[14,125221,125222,125224],{},[103,125223,101268],{},"：一个 Linux 命令，主要功能是：",[1124,125226,125227,125230],{},[63,125228,125229],{},"如果文件不存在，就创建一个新的空文件",[63,125231,125232],{},"如果文件已存在，就更新该文件的最后修改时间",[97,125234,125236],{"className":120801,"code":125235,"language":120803,"meta":120804,"style":25},"[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",[103,125237,125238,125242,125247,125252,125257,125261,125266],{"__ignoreMap":25},[106,125239,125240],{"class":108,"line":109},[106,125241,125003],{},[106,125243,125244],{"class":108,"line":28},[106,125245,125246],{},"Name=QQ音乐\n",[106,125248,125249],{"class":108,"line":1172},[106,125250,125251],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage\n",[106,125253,125254],{"class":108,"line":1187},[106,125255,125256],{},"Icon=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002FQQ_Music2023.svg\n",[106,125258,125259],{"class":108,"line":1193},[106,125260,125013],{},[106,125262,125263],{"class":108,"line":1207},[106,125264,125265],{},"Categories=Audio;Music;Player;\n",[106,125267,125268],{"class":108,"line":1213},[106,125269,125270],{},"Comment=QQ Music Client for Linux\n",[14,125272,125273],{},"将文件复制进去",[14,125275,125276],{},"6️⃣此时找到软件就可以打开了，如果找不到，请重启，部分不先进的发行版刷新图标列表不会很快",[14,125278,125279],{},[23,125280],{"alt":25,"src":125281},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-130.png",[14,125283,125284],{},"6️⃣如果点击图标打不开就禁用沙盒-->如果QQ音乐闪退，这个只是QQ音乐自己软件的问题，按下图这样做",[14,125286,125287],{},[23,125288],{"alt":25,"src":125289},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-131.png",[14,125291,125292,125293,125296,125297,125300],{},"如果你用的不是KDE，那么也可以直接修改",[103,125294,125295],{},"qqmuic.desktop","：在exec的末尾加上",[103,125298,125299],{},"--no-sandbox","（通过禁用安全沙盒机制，赋予应用程序更高的系统权限，从而解决因权限限制导致的运行问题）",[97,125302,125304],{"className":120801,"code":125303,"language":120803,"meta":120804,"style":25},"[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",[103,125305,125306,125310,125314,125319,125323,125327,125331],{"__ignoreMap":25},[106,125307,125308],{"class":108,"line":109},[106,125309,125003],{},[106,125311,125312],{"class":108,"line":28},[106,125313,125246],{},[106,125315,125316],{"class":108,"line":1172},[106,125317,125318],{},"Exec=\u002Fhome\u002Ftungchiahui\u002FUserFloder\u002FApplications\u002Fqqmusic\u002Fqqmusic-1.1.7.AppImage --no-sandbox\n",[106,125320,125321],{"class":108,"line":1187},[106,125322,125256],{},[106,125324,125325],{"class":108,"line":1193},[106,125326,125013],{},[106,125328,125329],{"class":108,"line":1207},[106,125330,125265],{},[106,125332,125333],{"class":108,"line":1213},[106,125334,125270],{},[14,125336,125337],{},[23,125338],{"alt":25,"src":125339},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-132.png",[14,125341,125342],{},"在qq音乐中如果缺字体,那么请安装字体(这个字体是多种语言合一的字体)",[97,125344,125346],{"className":120801,"code":125345,"language":120803,"meta":120804,"style":25},"sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts\n",[103,125347,125348],{"__ignoreMap":25},[106,125349,125350],{"class":108,"line":109},[106,125351,125345],{},[60,125353,125354],{"start":1187},[63,125355,125356],{},"去Flathub上安装软件",[14,125358,125359],{},[355,125360,125361],{"href":125361,"rel":125362},"https:\u002F\u002Fflathub.org\u002F",[23858],[14,125364,125365],{},"1️⃣去上面的官网搜索软件+下载软件",[14,125367,125368],{},[23,125369],{"alt":25,"src":125370},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-133.png",[97,125372,125374],{"className":120801,"code":125373,"language":120803,"meta":120804,"style":25},"flatpak install flathub com.obsproject.Studio\n",[103,125375,125376],{"__ignoreMap":25},[106,125377,125378],{"class":108,"line":109},[106,125379,125373],{},[14,125381,125382],{},[23,125383],{"alt":25,"src":125384},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-134.png",[14,125386,125387],{},"2️⃣运行软件",[14,125389,125390],{},"a.官方方式：",[14,125392,125393],{},[23,125394],{"alt":25,"src":125395},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-135.png",[97,125397,125398],{"className":120801,"code":125373,"language":120803,"meta":120804,"style":25},[103,125399,125400],{"__ignoreMap":25},[106,125401,125402],{"class":108,"line":109},[106,125403,125373],{},[14,125405,125406],{},"b.当普通软件运行：",[14,125408,125409],{},[23,125410],{"alt":25,"src":125411},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-136.png",[14,125413,125414],{},[23,125415],{"alt":25,"src":125416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-27-Linux%E5%9F%BA%E6%9C%AC%E6%93%8D%E4%BD%9C-137.png",[5119,125418,125419],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":25,"searchDepth":28,"depth":28,"links":125421},[125422,125423,125428,125429,125435,125436],{"id":122154,"depth":28,"text":122155},{"id":122496,"depth":28,"text":122497,"children":125424},[125425,125426,125427],{"id":122500,"depth":1172,"text":122501},{"id":122567,"depth":1172,"text":122568},{"id":122828,"depth":1172,"text":122829},{"id":122981,"depth":28,"text":122982},{"id":123219,"depth":28,"text":123220,"children":125430},[125431,125432,125433,125434],{"id":123271,"depth":1172,"text":123272},{"id":123557,"depth":1172,"text":123558},{"id":123828,"depth":1172,"text":123829},{"id":124087,"depth":1172,"text":124088},{"id":124146,"depth":28,"text":124147},{"id":124447,"depth":28,"text":124448,"children":125437},[125438,125439,125440,125441,125442,125443,125444,125445],{"id":124451,"depth":1172,"text":124452},{"id":124463,"depth":1172,"text":124464},{"id":124675,"depth":1172,"text":124676},{"id":124699,"depth":1172,"text":124700},{"id":124765,"depth":1172,"text":124766},{"id":124859,"depth":1172,"text":124860},{"id":124866,"depth":1172,"text":124867},{"id":124890,"depth":1172,"text":124891},{},"\u002Fwiki\u002F2025-01-27-linux\u002Fch7",{"title":122146,"description":30},"wiki\u002F2025-01-27-Linux基本操作\u002Fch7-其他操作","Tg_tkQ2Az3_kc3_lK0-lGPJwMQaWApXJmN_fHk_Iamg",{"id":125452,"title":125453,"body":125454,"description":30,"extension":31,"meta":125458,"navigation":33,"path":125459,"seo":125460,"stem":125461,"__hash__":125462},"wiki\u002Fwiki\u002F2025-01-27-Linux基本操作\u002Findex.md","Linux基本操作",{"type":7,"value":125455,"toc":125456},[],{"title":25,"searchDepth":28,"depth":28,"links":125457},[],{"category":30257},"\u002Fwiki\u002F2025-01-27-linux",{"title":125453,"description":30},"wiki\u002F2025-01-27-Linux基本操作\u002Findex","PoJlKpO2vYd20qfiK6eHUbmqhxxbLAcr2GCjNoWrzB0",{"id":125464,"title":125465,"body":125466,"description":125470,"extension":31,"meta":125861,"navigation":33,"path":125862,"seo":125863,"stem":125864,"__hash__":125865},"wiki\u002Fwiki\u002F2025-01-09-Genesis-AI项目.md","Genesis AI项目",{"type":7,"value":125467,"toc":125859},[125468,125471,125475,125492,125495,125548,125552,125554,125594,125603,125607,125610,125851,125856],[14,125469,125470],{},"项目简介：Genesis是一个开源的生成式物理引擎，由卡内基梅隆大学等20多个研究机构经过两年合作开发而成，旨在为通用机器人、具身人工智能和物理人工智能应用提供支持。通过使用genesis对机器人及工程环境仿真实现实验内容。",[10,125472,125474],{"id":125473},"_1ubuntu环境配置","1.Ubuntu环境配置",[60,125476,125477,125480,125483,125486,125489],{},[63,125478,125479],{},"ubuntu环境换源",[63,125481,125482],{},"安装cuda",[63,125484,125485],{},"安装miniconda",[63,125487,125488],{},"安装pytorch",[63,125490,125491],{},"安装genesis",[14,125493,125494],{},"参考链接：",[97,125496,125498],{"className":23815,"code":125497,"language":23817,"meta":25,"style":25},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare=blogdetail&sharetype=blogdetail&sharerId=144728092&sharerefer=PC&sharesource=qq_69379513&sharefrom=from_link\n",[103,125499,125500],{"__ignoreMap":25},[106,125501,125502,125505,125508,125511,125513,125516,125519,125521,125524,125527,125529,125532,125535,125537,125540,125543,125545],{"class":108,"line":109},[106,125503,125504],{"class":1955},"https:\u002F\u002Fblog.csdn.net\u002Fxiangshangdemayi\u002Farticle\u002Fdetails\u002F144728092?fromshare",[106,125506,125507],{"class":221},"=blogdetail",[106,125509,125510],{"class":116},"&sharetype",[106,125512,162],{"class":112},[106,125514,125515],{"class":221},"blogdetail",[106,125517,125518],{"class":116},"&sharerId",[106,125520,162],{"class":112},[106,125522,125523],{"class":221},"144728092",[106,125525,125526],{"class":116},"&sharerefer",[106,125528,162],{"class":112},[106,125530,125531],{"class":221},"PC",[106,125533,125534],{"class":116},"&sharesource",[106,125536,162],{"class":112},[106,125538,125539],{"class":221},"qq_69379513",[106,125541,125542],{"class":116},"&sharefrom",[106,125544,162],{"class":112},[106,125546,125547],{"class":221},"from_link\n",[10,125549,125551],{"id":125550},"_2genesis-报错issue","2.Genesis 报错issue",[14,125553,125494],{},[97,125555,125556],{"className":23815,"code":125497,"language":23817,"meta":25,"style":25},[103,125557,125558],{"__ignoreMap":25},[106,125559,125560,125562,125564,125566,125568,125570,125572,125574,125576,125578,125580,125582,125584,125586,125588,125590,125592],{"class":108,"line":109},[106,125561,125504],{"class":1955},[106,125563,125507],{"class":221},[106,125565,125510],{"class":116},[106,125567,162],{"class":112},[106,125569,125515],{"class":221},[106,125571,125518],{"class":116},[106,125573,162],{"class":112},[106,125575,125523],{"class":221},[106,125577,125526],{"class":116},[106,125579,162],{"class":112},[106,125581,125531],{"class":221},[106,125583,125534],{"class":116},[106,125585,162],{"class":112},[106,125587,125539],{"class":221},[106,125589,125542],{"class":116},[106,125591,162],{"class":112},[106,125593,125547],{"class":221},[97,125595,125597],{"className":23815,"code":125596,"language":23817,"meta":25,"style":25},"https:\u002F\u002Fgithub.com\u002FGenesis-Embodied-AI\u002FGenesis\u002Fissues\u002F43\n",[103,125598,125599],{"__ignoreMap":25},[106,125600,125601],{"class":108,"line":109},[106,125602,125596],{"class":1955},[10,125604,125606],{"id":125605},"_3genesis-项目运行结果","3.Genesis 项目运行结果",[14,125608,125609],{},"hello_robot.py",[97,125611,125613],{"className":30372,"code":125612,"language":30374,"meta":25,"style":25},"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",[103,125614,125615,125621,125636,125640,125652,125664,125668,125681,125685,125704,125714,125724,125738,125742,125746,125751,125755,125765,125772,125786,125793,125803,125808,125812,125830,125835,125839,125846],{"__ignoreMap":25},[106,125616,125617,125619],{"class":108,"line":109},[106,125618,30386],{"class":112},[106,125620,45299],{"class":116},[106,125622,125623,125626,125629,125631,125633],{"class":108,"line":28},[106,125624,125625],{"class":116},"os.environ[",[106,125627,125628],{"class":221},"'PYOPENGL_PLATFORM'",[106,125630,4435],{"class":116},[106,125632,162],{"class":112},[106,125634,125635],{"class":221}," 'glx'\n",[106,125637,125638],{"class":108,"line":1172},[106,125639,2392],{"emptyLinePlaceholder":33},[106,125641,125642,125644,125647,125649],{"class":108,"line":1187},[106,125643,30386],{"class":112},[106,125645,125646],{"class":116}," genesis ",[106,125648,31377],{"class":112},[106,125650,125651],{"class":116}," gs\n",[106,125653,125654,125656,125659,125661],{"class":108,"line":1193},[106,125655,30731],{"class":112},[106,125657,125658],{"class":116}," pynput ",[106,125660,30386],{"class":112},[106,125662,125663],{"class":116}," keyboard\n",[106,125665,125666],{"class":108,"line":1207},[106,125667,2392],{"emptyLinePlaceholder":33},[106,125669,125670,125673,125676,125678],{"class":108,"line":1213},[106,125671,125672],{"class":116},"gs.init(",[106,125674,125675],{"class":5209},"backend",[106,125677,162],{"class":112},[106,125679,125680],{"class":116},"gs.gpu)\n",[106,125682,125683],{"class":108,"line":1304},[106,125684,2392],{"emptyLinePlaceholder":33},[106,125686,125687,125690,125692,125695,125698,125700,125702],{"class":108,"line":1310},[106,125688,125689],{"class":116},"scene ",[106,125691,162],{"class":112},[106,125693,125694],{"class":116}," gs.Scene(",[106,125696,125697],{"class":5209},"show_viewer",[106,125699,162],{"class":112},[106,125701,31470],{"class":165},[106,125703,123],{"class":116},[106,125705,125706,125709,125711],{"class":108,"line":1322},[106,125707,125708],{"class":116},"plane ",[106,125710,162],{"class":112},[106,125712,125713],{"class":116}," scene.add_entity(gs.morphs.Plane())\n",[106,125715,125716,125719,125721],{"class":108,"line":1604},[106,125717,125718],{"class":116},"franka ",[106,125720,162],{"class":112},[106,125722,125723],{"class":116}," scene.add_entity(\n",[106,125725,125726,125729,125731,125733,125736],{"class":108,"line":1609},[106,125727,125728],{"class":116},"    gs.morphs.MJCF(",[106,125730,45348],{"class":5209},[106,125732,162],{"class":112},[106,125734,125735],{"class":221},"'xml\u002Ffranka_emika_panda\u002Fpanda.xml'",[106,125737,38041],{"class":116},[106,125739,125740],{"class":108,"line":1615},[106,125741,123],{"class":116},[106,125743,125744],{"class":108,"line":1620},[106,125745,2392],{"emptyLinePlaceholder":33},[106,125747,125748],{"class":108,"line":1634},[106,125749,125750],{"class":116},"scene.build()\n",[106,125752,125753],{"class":108,"line":1639},[106,125754,2392],{"emptyLinePlaceholder":33},[106,125756,125757,125759,125762],{"class":108,"line":1645},[106,125758,31941],{"class":112},[106,125760,125761],{"class":1955}," on_press",[106,125763,125764],{"class":116},"(key):\n",[106,125766,125767,125770],{"class":108,"line":1666},[106,125768,125769],{"class":112},"    try",[106,125771,3731],{"class":116},[106,125773,125774,125776,125779,125781,125784],{"class":108,"line":1671},[106,125775,2489],{"class":112},[106,125777,125778],{"class":116}," key.char ",[106,125780,2941],{"class":112},[106,125782,125783],{"class":221}," 'q'",[106,125785,3731],{"class":116},[106,125787,125788,125790],{"class":108,"line":1685},[106,125789,15725],{"class":112},[106,125791,125792],{"class":165}," False\n",[106,125794,125795,125798,125801],{"class":108,"line":1690},[106,125796,125797],{"class":112},"    except",[106,125799,125800],{"class":165}," AttributeError",[106,125802,3731],{"class":116},[106,125804,125805],{"class":108,"line":1719},[106,125806,125807],{"class":112},"        pass\n",[106,125809,125810],{"class":108,"line":1724},[106,125811,2392],{"emptyLinePlaceholder":33},[106,125813,125814,125817,125819,125822,125825,125827],{"class":108,"line":1741},[106,125815,125816],{"class":116},"listener ",[106,125818,162],{"class":112},[106,125820,125821],{"class":116}," keyboard.Listener(",[106,125823,125824],{"class":5209},"on_press",[106,125826,162],{"class":112},[106,125828,125829],{"class":116},"on_press)\n",[106,125831,125832],{"class":108,"line":1746},[106,125833,125834],{"class":116},"listener.start()\n",[106,125836,125837],{"class":108,"line":1751},[106,125838,2392],{"emptyLinePlaceholder":33},[106,125840,125841,125843],{"class":108,"line":1756},[106,125842,108648],{"class":112},[106,125844,125845],{"class":116}," listener.running:\n",[106,125847,125848],{"class":108,"line":1770},[106,125849,125850],{"class":116},"    scene.step()\n",[14,125852,125853],{},[23,125854],{"alt":25,"src":125855},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2025-01-09-Genesis-AI%E9%A1%B9%E7%9B%AE-001.png",[5119,125857,125858],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":25,"searchDepth":28,"depth":28,"links":125860},[],{"category":23371},"\u002Fwiki\u002F2025-01-09-genesis-ai",{"title":125465,"description":125470},"wiki\u002F2025-01-09-Genesis-AI项目","Dtwo2HcGkJ6rJoZHinCc3gXtagXcGTSkaByZcrG9fHc",{"id":125867,"title":125868,"body":125869,"description":30,"extension":31,"meta":125884,"navigation":33,"path":125885,"seo":125886,"stem":125887,"__hash__":125888},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识.md","1. 基础知识",{"type":7,"value":125870,"toc":125881},[125871,125874,125878],[10,125872,125868],{"id":125873},"_1-基础知识",[48,125875,125877],{"id":125876},"_11-js的组成","1.1 js的组成",[14,125879,125880],{},"ECMAScript（JS的基础）与 Web APIs（分为 DOM 页面文档对象模型和 BOM 浏览器对象模型）。",{"title":25,"searchDepth":28,"depth":28,"links":125882},[125883],{"id":125876,"depth":28,"text":125877},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch01",{"title":125868,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch01-基础知识","Fx7-0TjX81PM8o5Hlfy2WWNjwvP67bOnqk3Cd2fyvJ8",{"id":125890,"title":125891,"body":125892,"description":30,"extension":31,"meta":126031,"navigation":33,"path":126032,"seo":126033,"stem":126034,"__hash__":126035},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容.md","2. vscode必备内容",{"type":7,"value":125893,"toc":126019},[125894,125897,125901,125904,125908,125918,125922,125925,125928,125931,125935,125942,125948,125952,125958,125969,125973,125976,125980,125983,125987,125990,125994,125997,126001,126004,126007,126010,126013,126016],[10,125895,125891],{"id":125896},"_2-vscode必备内容",[48,125898,125900],{"id":125899},"_21-标签分类","2.1 标签分类",[14,125902,125903],{},"标签有双标签和单标签：双标签＜html＞＜\u002Fhtml＞两者是成对存在的，分为开始标签和结束标签；单标签如：＜br \u002F＞。",[48,125905,125907],{"id":125906},"_22-快速生成html骨架","2.2 快速生成HTML骨架",[14,125909,125910,125911,125913,125914,125917],{},"使用 VSCode 时，基本结构不用一个一个输入，可以输入 ",[103,125912,343],{}," 然后按 ",[103,125915,125916],{},"Tab","，快速自动生成基本结构。",[48,125919,125921],{"id":125920},"_23-预览插件与实时预览","2.3 预览插件与实时预览",[14,125923,125924],{},"VSCode 预览页面可右键选择 Open In Default Browser，需要安装 open in browser 插件。",[14,125926,125927],{},"Live Server实时预览插件，在修改标签后看网页界面时，不需要手动刷新就可以实现自动刷新",[14,125929,125930],{},"Live Server必须在vscode打开的文件夹中的文件程序中才能使用",[48,125932,125934],{"id":125933},"_24-视图缩放","2.4 视图缩放",[14,125936,125937,125938,125941],{},"缩放视图 ",[103,125939,125940],{},"ctrl+"," 可实现代码增大。",[14,125943,125944,125947],{},[103,125945,125946],{},"ctrl-"," 可实现代码减小。",[48,125949,125951],{"id":125950},"_25-新建与保存快捷键","2.5 新建与保存快捷键",[14,125953,125954,125955,28379],{},"VSCode 新建文件快捷键为 ",[103,125956,125957],{},"ctrl+N",[14,125959,125960,125961,125964,125965,125968],{},"保存快捷键为 ",[103,125962,125963],{},"ctrl+S","，将文本保存为 ",[103,125966,125967],{},".html"," 文件。",[48,125970,125972],{"id":125971},"_26-auto-rename-tag","2.6 Auto Rename Tag",[14,125974,125975],{},"VSCode 中 Auto Rename Tag 双击前标签，改动之后，后标签都会同步修改。",[48,125977,125979],{"id":125978},"_27-vscode-icons","2.7 vscode-icons",[14,125981,125982],{},"vscode-icons 可以实现不同后缀图标显示，便于快速识别文件类型。",[48,125984,125986],{"id":125985},"_28-easy-less","2.8 Easy LESS",[14,125988,125989],{},"Easy LESS 插件可以编译 less 文件。我们写的 less 不能直接引入到 html 文件中，通过这个插件可以自动生成 css 文件。",[48,125991,125993],{"id":125992},"_29-会了吧插件","2.9 会了吧插件",[14,125995,125996],{},"会了吧插件可以展示代码中英语单词的意思。",[48,125998,126000],{"id":125999},"_210-vscode常用快捷键","2.10 vscode常用快捷键",[14,126002,126003],{},"①快速复制:shift+alt+下箭头(上箭头）或者ctrl+C然后ctrl+V",[14,126005,126006],{},"②选定多个相同的单词:ctrl+D",[14,126008,126009],{},"③添加多个光标:ctrl+Alt+上箭头(下箭头）",[14,126011,126012],{},"④全局替换某些单词:ctrl+h",[14,126014,126015],{},"⑤快速定位到某一行:ctrl+g",[14,126017,126018],{},"⑥选择某一区块:按住Shift+alt然后拖动鼠标",{"title":25,"searchDepth":28,"depth":28,"links":126020},[126021,126022,126023,126024,126025,126026,126027,126028,126029,126030],{"id":125899,"depth":28,"text":125900},{"id":125906,"depth":28,"text":125907},{"id":125920,"depth":28,"text":125921},{"id":125933,"depth":28,"text":125934},{"id":125950,"depth":28,"text":125951},{"id":125971,"depth":28,"text":125972},{"id":125978,"depth":28,"text":125979},{"id":125985,"depth":28,"text":125986},{"id":125992,"depth":28,"text":125993},{"id":125999,"depth":28,"text":126000},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch02-vscode",{"title":125891,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch02-vscode必备内容","P9smz6dHOMWyfVooCL02EBMbE4RKCFhGZKfr19IQtY4",{"id":126037,"title":126038,"body":126039,"description":30,"extension":31,"meta":126198,"navigation":33,"path":126199,"seo":126200,"stem":126201,"__hash__":126202},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签.md","3. HTML文本与容器标签",{"type":7,"value":126040,"toc":126190},[126041,126044,126048,126058,126064,126070,126074,126083,126087,126092,126095,126098,126102,126105,126115,126124,126133,126142,126152,126159,126164,126169,126182],[10,126042,126038],{"id":126043},"_3-html文本与容器标签",[48,126045,126047],{"id":126046},"_31-标题标签","3.1 标题标签",[14,126049,126050,126053,126054,126057],{},[103,126051,126052],{},"\u003Ch1>","我是一级标签",[103,126055,126056],{},"\u003C\u002Fh1>"," h为head的缩写，是头部、标题，作为标题使用，以此类推",[14,126059,126060,126053,126062],{},[103,126061,126052],{},[103,126063,126056],{},[14,126065,123320,126066,126069],{},[103,126067,126068],{},"\u003C\u002Fh>","后写的内容是不会在这一行就行展现的，他会在下一行来进行展现",[48,126071,126073],{"id":126072},"_32-段落标签","3.2 段落标签",[14,126075,126076,126079,126080],{},[103,126077,126078],{},"\u003Cp>","....",[103,126081,126082],{},"\u003C\u002Fp>",[48,126084,126086],{"id":126085},"_33-换行标签","3.3 换行标签",[14,126088,126089],{},[103,126090,126091],{},"\u003Cbr \u002F>",[14,126093,126094],{},"具有强制换行的作用",[14,126096,126097],{},"单标签",[48,126099,126101],{"id":126100},"_34-文本格式化标签","3.4 文本格式化标签",[14,126103,126104],{},"提供粗体、斜体和下划线等效果",[14,126106,126107,126108,82533,126111,126114],{},"加粗：",[103,126109,126110],{},"\u003Cstrong>...\u003C\u002Fstrong>",[103,126112,126113],{},"\u003Cb>.....\u003C\u002Fb>","，前者相对后者在语义上更强烈。",[14,126116,126117,126118,82533,126121,126114],{},"斜体：",[103,126119,126120],{},"\u003Cem>...\u003C\u002Fem>",[103,126122,126123],{},"\u003Ci>...\u003C\u002Fi>",[14,126125,126126,126127,82533,126130,126114],{},"删除线：",[103,126128,126129],{},"\u003Cdel>...\u003C\u002Fdel>",[103,126131,126132],{},"\u003Cs>...\u003C\u002Fs>",[14,126134,126135,126136,82533,126139,126114],{},"下划线：",[103,126137,126138],{},"\u003Cins>...\u003C\u002Fins>",[103,126140,126141],{},"\u003Cu>...\u003C\u002Fu>",[48,126143,126145,126146,18403,126149,102678],{"id":126144},"_35-div和span标签","3.5 ",[103,126147,126148],{},"\u003Cdiv>",[103,126150,126151],{},"\u003Cspan>",[14,126153,126154,101003,126156,126158],{},[103,126155,126148],{},[103,126157,126151],{}," 是没有语义的，它们就是一个盒子，用来装内容，是网页布局的基础。",[14,126160,126161],{},[103,126162,126163],{},"\u003Cdiv>这是头部\u003C\u002Fdiv>",[14,126165,126166],{},[103,126167,126168],{},"\u003Cspan>今日价格\u003C\u002Fspan>",[14,126170,126171,126172,126174,126175,126177,126178,126181],{},"两者特点：①",[103,126173,126148],{}," 标签用来布局，但一行通常只放一个 ",[103,126176,126148],{},"。可以理解为一个大盒子，独占一行，在 ",[103,126179,126180],{},"\u003C\u002Fdiv>"," 后再写内容会换到下一行显示。",[14,126183,77243,126184,126186,126187,126189],{},[103,126185,126151],{}," 标签也可用于布局，一行可以放多个 ",[103,126188,126151],{},"，可理解为小盒子。",{"title":25,"searchDepth":28,"depth":28,"links":126191},[126192,126193,126194,126195,126196],{"id":126046,"depth":28,"text":126047},{"id":126072,"depth":28,"text":126073},{"id":126085,"depth":28,"text":126086},{"id":126100,"depth":28,"text":126101},{"id":126144,"depth":28,"text":126197},"3.5 \u003Cdiv>和\u003Cspan>标签",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch03-html",{"title":126038,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch03-HTML文本与容器标签","wtuhs31JaNMAgjeyllTRtJ-HSKIZNuZi1VTfL57zQys",{"id":126204,"title":126205,"body":126206,"description":30,"extension":31,"meta":126403,"navigation":33,"path":126404,"seo":126405,"stem":126406,"__hash__":126407},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接.md","4. HTML图像与链接",{"type":7,"value":126207,"toc":126395},[126208,126211,126215,126218,126224,126231,126237,126243,126246,126249,126252,126255,126258,126261,126264,126268,126271,126274,126277,126283,126289,126295,126302,126306,126312,126318,126321,126324,126330,126336,126342,126345,126348,126352,126355,126365,126371,126375,126384,126388,126391],[10,126209,126205],{"id":126210},"_4-html图像与链接",[48,126212,126214],{"id":126213},"_41-图像标签","4.1 图像标签",[14,126216,126217],{},"（1）标签",[14,126219,126220,126223],{},[103,126221,126222],{},"\u003Cimg src=\"图像URL\"\u002F>"," 单标签",[14,126225,126226,126227,126230],{},"src是",[103,126228,126229],{},"\u003Cimg>","标签的必须属性，他用于指定图像文件的路径和文件名，所属属性：简单理解为就是属于这个图像标签的特性",[14,126232,126233,126234],{},"alt:文本，替换文本。图像不能显示的文字 ",[103,126235,126236],{},"\u003Cimg src=\"11.png\" alt=\"1\" \u002F>",[14,126238,126239,126240],{},"title:文本，提示文本。鼠标放在图像上，显示的文字 ",[103,126241,126242],{},"\u003Cimg src=\"1.png\" alt=\"1\" title=\"预推免信息\" \u002F>",[14,126244,126245],{},"width:像素，设置图像的宽度",[14,126247,126248],{},"height:像素，设置图像的高度",[14,126250,126251],{},"border：像素，设置图像的边框粗细",[14,126253,126254],{},"（2）图像标签属性的注意点：",[14,126256,126257],{},"①图像标签可以拥有多个属性，必须写在标签名的后面",[14,126259,126260],{},"②属性前后不分前后顺序，标签名与属性、属性与属性之间均以空格分开",[14,126262,126263],{},"③属性采取键值对的格式，即key=“value”的格式，属性=“属性值”",[48,126265,126267],{"id":126266},"_42-路径注意要点","4.2 路径注意要点：",[14,126269,126270],{},"（1）目录文件夹：就是普通的文件夹，里边存放着我们做页面所需的相关材料，比如图片、CSS、JS、HTML等",[14,126272,126273],{},"（2）根目录：就是打开文件夹的第一层根目录",[14,126275,126276],{},"（3）相对路径：以引用文件所在位置为参考基础，而建立出的目录路径，简单来说就是图片相对于Html页面的位置",[14,126278,126279,126280],{},"①同一级路径：图像文件位于HTML文件同一级，如",[103,126281,126282],{},"\u003Cimg src=\"baidu.gif\"\u002F>",[14,126284,126285,126286],{},"②下一级路径：\u002F 图像位于HTML文件下一级，如",[103,126287,126288],{},"\u003Cimg src=\"images\u002Fbaidu.gif\"\u002F>",[14,126290,126291,126292],{},"③上一级路径： ..\u002F 图像位于HTML文件上一级，如",[103,126293,126294],{},"\u003Cimg src=\"..\u002F..\u002Fpublic\u002Fimages\u002Fbaidu.gif\"\u002F>",[14,126296,126297,126298,368],{},"（4）绝对路径：指目录下的绝对地址，直接到达目标位置，通常是从盘符开始的路径。例如：\"D:\\web\\img\\logo.gif\"或者完整的网络地址\"",[355,126299,126300],{"href":126300,"rel":126301},"http:\u002F\u002Fwww.itcast.cn\u002Fimages\u002Flogo.gif",[23858],[48,126303,126305],{"id":126304},"_43-超链接标签","4.3 超链接标签",[14,126307,126308,126311],{},[103,126309,126310],{},"\u003Ca>","标签用于定义超链接，作用是从一个页面链接到另一个页面",[14,126313,126314,126315],{},"①语法格式：",[103,126316,126317],{},"\u003Ca herf=\"跳转目标\" target=\"目标窗口的弹出方式\">文本或图像\u003C\u002Fa>",[14,126319,126320],{},"②属性：href：用于指定链接目标的url地址，（必须属性）当标签应用herf属性时，它就具有了超链接的功能",[14,126322,126323],{},"target：用于指定链接页面的打开方式，其中_self为默认值，_blank为在新窗口的打开方式",[14,126325,126326,126327],{},"③链接分类：外部链接：",[103,126328,126329],{},"\u003Ca herf=\"http:\u002F\u002Fwww.baidu.com\">百度\u003C\u002Fa>",[14,126331,126332,126333],{},"内部链接：网站内部页面之间的相互链接，直接链接内部页面名称即可，例如",[103,126334,126335],{},"\u003Ca href=\"index.html\">\u003C\u002Fa>",[14,126337,126338,126339],{},"空链接：如果当时没有确定链接目标时，",[103,126340,126341],{},"\u003Ca href=\"#\">首页\u003C\u002Fa>",[14,126343,126344],{},"下载链接：如果href里面地址是一个文件或者压缩包，会下载这个文件",[14,126346,126347],{},"网页元素链接：在网页中的各种网页元素，如文本、图像、表格、音频、视频等都可添加超链接",[48,126349,126351],{"id":126350},"_44-锚点链接","4.4 锚点链接",[14,126353,126354],{},"点我们点击链接，可以快速定位到页面中的某个位置",[14,126356,126357,126358,126361,126362],{},"①在链接文本的href属性中，设置属性值为#名字的形式，如",[103,126359,126360],{},"\u003Ca href=\"#two\">","第二级",[103,126363,126364],{},"\u003C\u002Fa>",[14,126366,126367,126368],{},"②找到目标位置标签，里边添加一个 id 属性，如 ",[103,126369,126370],{},"\u003Ch3 id=\"two\">第二集\u003C\u002Fh3>",[48,126372,126374],{"id":126373},"_45-注释标签","4.5 注释标签",[14,126376,126377,126380,126381],{},[103,126378,126379],{},"\u003C!-- 注释内容 -->"," 快捷键为 ",[103,126382,126383],{},"ctrl+\u002F",[48,126385,126387],{"id":126386},"_46-特殊字符","4.6 特殊字符",[14,126389,126390],{},"可以实现添加多个空格",[23,126392],{"style":126393,"src":126394},"max-width:100%","\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-001.png",{"title":25,"searchDepth":28,"depth":28,"links":126396},[126397,126398,126399,126400,126401,126402],{"id":126213,"depth":28,"text":126214},{"id":126266,"depth":28,"text":126267},{"id":126304,"depth":28,"text":126305},{"id":126350,"depth":28,"text":126351},{"id":126373,"depth":28,"text":126374},{"id":126386,"depth":28,"text":126387},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch04-html",{"title":126205,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch04-HTML图像与链接","oVGVb72OKY9l9qkhNnjbDtFdhzjkOyiCgMJ-1MDqiDs",{"id":126409,"title":126410,"body":126411,"description":30,"extension":31,"meta":126704,"navigation":33,"path":126705,"seo":126706,"stem":126707,"__hash__":126708},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单.md","5. HTML表格列表与表单",{"type":7,"value":126412,"toc":126695},[126413,126416,126420,126423,126426,126429,126432,126435,126438,126441,126444,126447,126467,126473,126477,126480,126483,126486,126489,126492,126495,126499,126502,126505,126508,126511,126524,126529,126532,126535,126550,126553,126556,126559,126562,126565,126569,126572,126579,126582,126585,126588,126591,126594,126600,126603,126606,126612,126615,126618,126621,126627,126630,126633,126647,126654,126657,126660,126667,126676,126679,126682,126685,126689,126692],[10,126414,126410],{"id":126415},"_5-html表格列表与表单",[48,126417,126419],{"id":126418},"_51-表格标签","5.1 表格标签",[14,126421,126422],{},"①表格的作用：表格主要是用于显示、展示数据，因为它可以使数据显示的非常的规整，可读性非常好。",[14,126424,126425],{},"特别是后台展示数据的时候，能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据处理的很有条理。",[14,126427,126428],{},"②表格基本语法：",[23,126430],{"style":126393,"src":126431},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-002.png",[14,126433,126434],{},"③表头单元格标签：一般表头单元格位于第一行或者第一列，表头单元格里面的文本内容加粗居中显示",[23,126436],{"style":126393,"src":126437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-003.png",[14,126439,126440],{},"④表格属性：表格属性实际在开发中不常用，基本都是用css来实现的",[23,126442],{"style":126393,"src":126443},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-004.png",[14,126445,126446],{},"⑤表格结构标签：解决表格过长问题，将表格分割成表格头部和表格主体",[14,126448,126449,126452,126453,126455,126456,126459,126460,126462,126463,126466],{},[103,126450,126451],{},"\u003Cthead>","标签表格的头部区域，用于定义表格的头部，",[103,126454,126451],{},"内部必须拥有",[103,126457,126458],{},"\u003Ctr>","标签，一般位于第一行，",[103,126461,126451],{},"比",[103,126464,126465],{},"\u003Cth>","范围广",[14,126468,126469,126472],{},[103,126470,126471],{},"\u003Ctbody>","标签表格的主体区域，用于定义表格的主体，用于放数据文本",[48,126474,126476],{"id":126475},"_52-合并单元格","5.2 合并单元格",[14,126478,126479],{},"（1）合并单元格方式：",[14,126481,126482],{},"①跨行合并：rowspan=\"合并单元格的个数\"",[14,126484,126485],{},"②跨列合并：colspan=\"合并单元格的个数\"",[14,126487,126488],{},"（2）目标单元格：",[14,126490,126491],{},"①跨行：最上侧单元格为目标单元格，写合并单元格",[14,126493,126494],{},"②跨列：最左侧单元格为目标单元格，写合并单元格",[48,126496,126498],{"id":126497},"_53-列表标签","5.3 列表标签",[14,126500,126501],{},"（1）分类：无序列表、有序列表、自定义列表",[14,126503,126504],{},"①无序列表：",[23,126506],{"style":126393,"src":126507},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-005.png",[14,126509,126510],{},"无序列表的各个列表项之间顺序级别之分，是并列的",[14,126512,126513,126516,126517,126520,126521,126523],{},[103,126514,126515],{},"\u003Cul>``\u003C\u002Ful>","中只能嵌套",[103,126518,126519],{},"\u003Cli>``\u003C\u002Fli>","，直接在",[103,126522,126515],{},"中输入其他标签或文字是不对的",[14,126525,126526,126528],{},[103,126527,126519],{},"之间相当于一个容器，可以容纳所有元素",[14,126530,126531],{},"无序列表会带有自己的样式属性，但实际还是用css来设置",[14,126533,126534],{},"在css中去除前边的小圆点采用如下代码:",[97,126536,126540],{"className":126537,"code":126538,"language":126539,"meta":25,"style":25},"language-Css shiki shiki-themes github-light github-dark","list-style: none;\n","Css",[103,126541,126542],{"__ignoreMap":25},[106,126543,126544,126547],{"class":108,"line":109},[106,126545,126546],{"class":51294},"list-style",[106,126548,126549],{"class":116},": none;\n",[14,126551,126552],{},"②有序列表：",[23,126554],{"style":126393,"src":126555},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-006.png",[14,126557,126558],{},"③自定义列表：",[23,126560],{"style":126393,"src":126561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-007.png",[23,126563],{"style":126393,"src":126564},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-008.png",[48,126566,126568],{"id":126567},"_54-表单标签","5.4 表单标签",[14,126570,126571],{},"一个完整表单通常由表单域、表单控件（也称表单元素）和提示信息3个部分组成",[14,126573,126574,126575,126578],{},"（1）表单域：包含单元素的区域，",[103,126576,126577],{},"\u003Cform>","标签可以实现信息的收集和传递。",[23,126580],{"style":126393,"src":126581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-009.png",[14,126583,126584],{},"autocomplete属性是历史记录，记录表单输入信息，有两个值，一个off，一个on，为true时过几天点击表单，获得焦点时会显示前几天输入的信息",[14,126586,126587],{},"表单元素提交必须有name属性",[14,126589,126590],{},"注意点：①写表单元素前，应该有表单域把他们进行包含；②表单域是form标签",[14,126592,126593],{},"(2)表单控件：可以定义各种表单元素，这些表单元素就是允许用户在表单中输入或选择的内容控件",[14,126595,77220,126596,126599],{},[103,126597,126598],{},"\u003Cinput>","输入表单元素",[23,126601],{"style":126393,"src":126602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-010.png",[23,126604],{"style":126393,"src":126605},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-011.png",[14,126607,126608,126609],{},"单选按钮：",[103,126610,126611],{},"\u003Cinput type=\"radio\" name=\"danxuan\">",[23,126613],{"style":126393,"src":126614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-012.png",[14,126616,126617],{},"写法差异源于不同版本的 HTML 或 XHTML 规范",[23,126619],{"style":126393,"src":126620},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-013.png",[14,126622,126623,126626],{},[266,126624,126625],{},"注意点"," ：name和value是每个表单元素都有的属性值，主要给后台人员使用；name表单元素的名字，要求单选按钮和复选按钮有相同的name值；checked属性主要针对于单选按钮和复选框，主要作用一打开页面，就要可以默认选中某个表单元素；maxlength是用户可以在表单输入的最大字符数",[14,126628,126629],{},"②select下拉表单元素：可以节约页面控件",[23,126631],{"style":126393,"src":126632},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-014.png",[14,126634,126635,13788,126637,126640,126641,126643,126644,126646],{},[266,126636,146],{},[103,126638,126639],{},"\u003Cselect>","中至少包含一对",[103,126642,102699],{},"；在",[103,126645,102699],{},"中定义selected=\"selected\"时，当前项即为默认中选项",[14,126648,126649,126650,126653],{},"③",[103,126651,126652],{},"\u003Ctextarea>",":适用于输入内容较多的场景",[23,126655],{"style":126393,"src":126656},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-015.png",[14,126658,126659],{},"3行20列",[48,126661,126663,126664,102678],{"id":126662},"_55-lable标签","5.5 ",[103,126665,126666],{},"\u003Clable>",[14,126668,126669,126670,126672,126673,126675],{},"它不是表单标签，但常常与表单标签搭配使用，",[103,126671,126666],{},"标签用于绑定一个表单标签，当点击",[103,126674,126666],{},"标签内的文本",[14,126677,126678],{},"时，浏览器就会自动将焦点（光标）转到或者选择对应的表单元素上，以增加用户体验",[23,126680],{"style":126393,"src":126681},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-016.png",[23,126683],{"style":126393,"src":126684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-017.png",[48,126686,126688],{"id":126687},"_56-实例","5.6 实例",[23,126690],{"style":126393,"src":126691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-018.png",[5119,126693,126694],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":28,"depth":28,"links":126696},[126697,126698,126699,126700,126701,126703],{"id":126418,"depth":28,"text":126419},{"id":126475,"depth":28,"text":126476},{"id":126497,"depth":28,"text":126498},{"id":126567,"depth":28,"text":126568},{"id":126662,"depth":28,"text":126702},"5.5 \u003Clable>标签",{"id":126687,"depth":28,"text":126688},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch05-html",{"title":126410,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch05-HTML表格列表与表单","Px1T0DDoabk2X89anH-m0Cv6Hve9q1VFyw7W5L-GpEw",{"id":126710,"title":126711,"body":126712,"description":30,"extension":31,"meta":127261,"navigation":33,"path":127262,"seo":127263,"stem":127264,"__hash__":127265},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式.md","6. CSS语法与文本样式",{"type":7,"value":126713,"toc":127236},[126714,126717,126721,126724,126727,126731,126734,126737,126740,126743,126746,126749,126752,126756,126759,126763,126766,126769,126772,126776,126779,126782,126785,126791,126794,126797,126800,126803,126806,126809,126812,126845,126849,126852,126855,126858,126862,126865,126868,126871,126874,126877,126881,126884,126887,126890,126894,126897,126901,126904,126908,126911,126916,126920,126923,126927,126930,126933,126936,126939,126966,126969,126973,126976,126979,126984,126987,126990,126994,126997,127002,127005,127008,127011,127015,127018,127021,127024,127028,127031,127034,127037,127041,127045,127048,127088,127091,127095,127102,127105,127109,127112,127158,127162,127165,127168,127171,127199,127203,127206,127233],[10,126715,126711],{"id":126716},"_6-css语法与文本样式",[48,126718,126720],{"id":126719},"_61-css语法规范","6.1 css语法规范",[14,126722,126723],{},"由两部分组成，选择器及一条或多条声明",[23,126725],{"style":126393,"src":126726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-019.png",[14,126728,126729],{},[266,126730,146],{},[14,126732,126733],{},"①选择器是用于指定css样式的HTML标签，花括号是对该对象设置的具体样式",[14,126735,126736],{},"②属性与属性值以“键值对”的形式出现",[14,126738,126739],{},"③属性是对指定的对象设置的样式属性，例如字体大小、文本颜色等",[14,126741,126742],{},"④属性和属性值之间用英文“;”分开",[23,126744],{"style":126393,"src":126745},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-020.png",[23,126747],{"style":126393,"src":126748},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-021.png",[23,126750],{"style":126393,"src":126751},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-022.png",[48,126753,126755],{"id":126754},"_62-css选择器","6.2 css选择器",[14,126757,126758],{},"可以分为基础选择器和复合选择器：①基础选择器由单个选择器组成；②基础选择器包括：标签选择器、类选择器、id选择器和通配符选择器",[77,126760,126762],{"id":126761},"_621-标签选择器","6.2.1 标签选择器",[14,126764,126765],{},"①优点：能快速为页面中同类型的标签统一设置样式",[14,126767,126768],{},"②缺点：不能设计差异化样式，只能选择全部的当前标签",[23,126770],{"style":126393,"src":126771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-023.png",[77,126773,126775],{"id":126774},"_622-类选择器","6.2.2 类选择器",[14,126777,126778],{},"①类选择器口诀：样式点定义 结构类（class）调用 一个或多个 开发最常用",[14,126780,126781],{},"②样例",[23,126783],{"style":126393,"src":126784},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-024.png",[14,126786,126787,126788,126790],{},"③ ",[266,126789,126625],{}," ：类选择器用\".\"进行标识，后面紧跟类名（自己命名的）；",[14,126792,126793],{},"可以理解为给这个标签起了个名字，来表示；",[14,126795,126796],{},"长名称或词组可以使用横线来为选择器命名；",[14,126798,126799],{},"不要使用纯数字、中文等命名，尽量使用英文字母来表示；",[14,126801,126802],{},"命名要有意义；",[23,126804],{"style":126393,"src":126805},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-025.png",[14,126807,126808],{},"类选择器也可以指定特殊的元素p.center{}",[14,126810,126811],{},"p.center和.center都对",[97,126813,126815],{"className":126537,"code":126814,"language":126539,"meta":25,"style":25},"\u002F* 类选择器指定特殊元素 *\u002F\np.center {\n  text-align: center;\n}\n",[103,126816,126817,126822,126831,126841],{"__ignoreMap":25},[106,126818,126819],{"class":108,"line":109},[106,126820,126821],{"class":175},"\u002F* 类选择器指定特殊元素 *\u002F\n",[106,126823,126824,126826,126829],{"class":108,"line":28},[106,126825,14],{"class":51294},[106,126827,126828],{"class":1955},".center",[106,126830,15565],{"class":116},[106,126832,126833,126835,126837,126839],{"class":108,"line":1172},[106,126834,70520],{"class":165},[106,126836,51431],{"class":116},[106,126838,51586],{"class":165},[106,126840,1283],{"class":116},[106,126842,126843],{"class":108,"line":1187},[106,126844,1557],{"class":116},[77,126846,126848],{"id":126847},"_623-多类名使用","6.2.3 多类名使用",[14,126850,126851],{},"①使用方式：在标签class属性中写多个类名；多个类名中间必须用空格分开；这个标签就可以分别具有这些类名的样式",[23,126853],{"style":126393,"src":126854},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-026.png",[14,126856,126857],{},"②多类名开发使用场景：可以把一些标签元素相同的样式（共同的部分）放到一个类里面；这些标签都可以调用这个公共的类，然后再调用自己独有的类；可以节省CSS代码，统一修改也非常方便；开发中要多使用",[77,126859,126861],{"id":126860},"_624-id选择器","6.2.4 id选择器",[14,126863,126864],{},"id选择器可以为标有特定id的HTML元素指定特定的样式",[14,126866,126867],{},"HTML元素以id属性来设置id选择器，css中id选择器以\"#\"来定义",[23,126869],{"style":126393,"src":126870},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-027.png",[14,126872,126873],{},"①口诀：样式#定义，结构id调用，只能给一个标签调用，别人切勿使用",[14,126875,126876],{},"②区别：类选择器可以调用多次；id选择器不能重复调用；类选择器在修改样式中用的最多，id选择器一般用于页面唯一性的元素上，经常和js搭配使用",[77,126878,126880],{"id":126879},"_625-通配符选择器","6.2.5 通配符选择器",[14,126882,126883],{},"定义用\"*\"，他表示选取页面中所有元素（标签）",[14,126885,126886],{},"* {",[14,126888,126889],{},"color=\"red\"}",[77,126891,126893],{"id":126892},"_626-总结","6.2.6 总结",[23,126895],{"style":126393,"src":126896},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-028.png",[48,126898,126900],{"id":126899},"_63-css字体属性","6.3 css字体属性",[14,126902,126903],{},"Fonts字体用于定义字体系列、大小、粗细、和文字样式（如斜体）",[77,126905,126907],{"id":126906},"_631-字体系列","6.3.1 字体系列",[14,126909,126910],{},"font-family: '宋体';",[14,126912,126913,126915],{},[266,126914,146],{}," 各种字体之间必须使用英文状态下的逗号隔开；一般情况，如果有空格隔开的多个单词组成的字体，加引号；尽量使用系统默认自带的字体，保证任何用户浏览器中都能正确使用",[77,126917,126919],{"id":126918},"_632-字体大小","6.3.2 字体大小",[14,126921,126922],{},"font-size: 20px",[14,126924,126925,26467],{},[266,126926,126625],{},[14,126928,126929],{},"①px（像素）大小是网页的最常用单位",[14,126931,126932],{},"②谷歌浏览器默认为16px",[14,126934,126935],{},"③不同浏览器默认显示的字号大小不一致，尽量给定明确值，不要默认",[14,126937,126938],{},"④可以给body指定整个页面的大小：会自动引用",[97,126940,126942],{"className":126537,"code":126941,"language":126539,"meta":25,"style":25},"body {\n  font-size: 16px;\n}\n",[103,126943,126944,126950,126962],{"__ignoreMap":25},[106,126945,126946,126948],{"class":108,"line":109},[106,126947,51794],{"class":51294},[106,126949,15565],{"class":116},[106,126951,126952,126954,126956,126958,126960],{"class":108,"line":28},[106,126953,70620],{"class":165},[106,126955,51431],{"class":116},[106,126957,718],{"class":165},[106,126959,51486],{"class":112},[106,126961,1283],{"class":116},[106,126963,126964],{"class":108,"line":1172},[106,126965,1557],{"class":116},[14,126967,126968],{},"⑤标题标签比较特殊，需要单独指定大小",[77,126970,126972],{"id":126971},"_633-字体粗细","6.3.3 字体粗细",[14,126974,126975],{},"font-weight: bold;",[14,126977,126978],{},"font-weight: 100；",[14,126980,126981,126983],{},[266,126982,146],{}," ①粗体文字变细：尽量别用normal，多用数字",[14,126985,126986],{},"font-weight= 400;",[14,126988,126989],{},"②属性值100-700，400等同于normal，而700等同于bold，后面不需要跟单位",[77,126991,126993],{"id":126992},"_634-文字样式","6.3.4 文字样式",[14,126995,126996],{},"font-style: normal；",[14,126998,126999,26467],{},[266,127000,127001],{},"属性值",[14,127003,127004],{},"①normal：默认值，浏览器会显示标准的字体样式 font-style：normal；",[14,127006,127007],{},"②italic：浏览器会显示斜体的字体样式",[23,127009],{"style":126393,"src":127010},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-029.png",[77,127012,127014],{"id":127013},"_635-字体符合属性","6.3.5 字体符合属性",[23,127016],{"style":126393,"src":127017},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-030.png",[23,127019],{"style":126393,"src":127020},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-031.png",[14,127022,127023],{},"以上都对√，第一个用的是类选择器，第二个用的是标签选择器",[14,127025,127026,26467],{},[266,127027,126625],{},[14,127029,127030],{},"①样式font-style 粗细font-weight 大小\u002F行高font-size\u002Fline-height 字体font-family",[14,127032,127033],{},"②使用font属性时，必须按照语法格式书写，不能更换顺序，并且各个属性以空格隔开",[14,127035,127036],{},"③不需要设置大的属性可以省略（取默认值），但必须保留font-size和font-family属性，否则font属性将不起作用",[48,127038,127040],{"id":127039},"_64-css-test文本属性","6.4 css test文本属性",[77,127042,127044],{"id":127043},"_641-文本颜色","6.4.1 文本颜色",[14,127046,127047],{},"定义文本的外观，比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等",[97,127049,127051],{"className":126537,"code":127050,"language":126539,"meta":25,"style":25},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\np {\n  color: red;\n  \u002F* color: #ff0000; *\u002F\n  \u002F* color: rgb(255, 0, 0); *\u002F\n}\n",[103,127052,127053,127058,127064,127074,127079,127084],{"__ignoreMap":25},[106,127054,127055],{"class":108,"line":109},[106,127056,127057],{"class":175},"\u002F* 文本颜色：预定义颜色 \u002F 十六进制 \u002F RGB *\u002F\n",[106,127059,127060,127062],{"class":108,"line":28},[106,127061,14],{"class":51294},[106,127063,15565],{"class":116},[106,127065,127066,127068,127070,127072],{"class":108,"line":1172},[106,127067,70899],{"class":165},[106,127069,51431],{"class":116},[106,127071,57415],{"class":165},[106,127073,1283],{"class":116},[106,127075,127076],{"class":108,"line":1187},[106,127077,127078],{"class":175},"  \u002F* color: #ff0000; *\u002F\n",[106,127080,127081],{"class":108,"line":1193},[106,127082,127083],{"class":175},"  \u002F* color: rgb(255, 0, 0); *\u002F\n",[106,127085,127086],{"class":108,"line":1207},[106,127087,1557],{"class":116},[23,127089],{"style":126393,"src":127090},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-032.png",[77,127092,127094],{"id":127093},"_642-对齐文本","6.4.2 对齐文本",[14,127096,127097,127098,127101],{},"text-align属于用于设置元素内文本内容的 ",[266,127099,127100],{},"水平对齐"," 方式",[14,127103,127104],{},"属性值：left：左对齐（默认值）；right：右对齐；center：居中对齐",[77,127106,127108],{"id":127107},"_643-装饰文本","6.4.3 装饰文本",[14,127110,127111],{},"text-decoration属性规定添加到文本的修饰，可以给文本添加下划线、删除线、上划线等",[97,127113,127115],{"className":126537,"code":127114,"language":126539,"meta":25,"style":25},"a {\n  text-decoration: none;\n}\np {\n  text-decoration: underline;\n}\n",[103,127116,127117,127123,127133,127137,127143,127154],{"__ignoreMap":25},[106,127118,127119,127121],{"class":108,"line":109},[106,127120,355],{"class":51294},[106,127122,15565],{"class":116},[106,127124,127125,127127,127129,127131],{"class":108,"line":28},[106,127126,70496],{"class":165},[106,127128,51431],{"class":116},[106,127130,54731],{"class":165},[106,127132,1283],{"class":116},[106,127134,127135],{"class":108,"line":1172},[106,127136,1557],{"class":116},[106,127138,127139,127141],{"class":108,"line":1187},[106,127140,14],{"class":51294},[106,127142,15565],{"class":116},[106,127144,127145,127147,127149,127152],{"class":108,"line":1193},[106,127146,70496],{"class":165},[106,127148,51431],{"class":116},[106,127150,127151],{"class":165},"underline",[106,127153,1283],{"class":116},[106,127155,127156],{"class":108,"line":1207},[106,127157,1557],{"class":116},[77,127159,127161],{"id":127160},"_644-文本缩进","6.4.4 文本缩进",[14,127163,127164],{},"实现文本的第一行首行缩进自己指定的距离",[14,127166,127167],{},"20px往右边走；-20px往左边走",[14,127169,127170],{},"em是一个相对单位，就是当前元素（font-size）1个文字的大小，如果当前元素没有设置大小，则会按照父元素的1个文字大小，如果此时写了2em则是当前元素2个文字大小的距离",[97,127172,127174],{"className":126537,"code":127173,"language":126539,"meta":25,"style":25},"p {\n  text-indent: 2em;\n}\n",[103,127175,127176,127182,127195],{"__ignoreMap":25},[106,127177,127178,127180],{"class":108,"line":109},[106,127179,14],{"class":51294},[106,127181,15565],{"class":116},[106,127183,127184,127187,127189,127191,127193],{"class":108,"line":28},[106,127185,127186],{"class":165},"  text-indent",[106,127188,51431],{"class":116},[106,127190,194],{"class":165},[106,127192,23546],{"class":112},[106,127194,1283],{"class":116},[106,127196,127197],{"class":108,"line":1172},[106,127198,1557],{"class":116},[77,127200,127202],{"id":127201},"_645-行间距","6.4.5 行间距",[14,127204,127205],{},"行间距可以理解为由上间距、下间距和文字高度组成，实际代码改变的是上下间距的大小实现行间距改变的",[97,127207,127209],{"className":126537,"code":127208,"language":126539,"meta":25,"style":25},"p {\n  line-height: 1.6;\n}\n",[103,127210,127211,127217,127229],{"__ignoreMap":25},[106,127212,127213,127215],{"class":108,"line":109},[106,127214,14],{"class":51294},[106,127216,15565],{"class":116},[106,127218,127219,127222,127224,127227],{"class":108,"line":28},[106,127220,127221],{"class":165},"  line-height",[106,127223,51431],{"class":116},[106,127225,127226],{"class":165},"1.6",[106,127228,1283],{"class":116},[106,127230,127231],{"class":108,"line":1172},[106,127232,1557],{"class":116},[5119,127234,127235],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":25,"searchDepth":28,"depth":28,"links":127237},[127238,127239,127247,127254],{"id":126719,"depth":28,"text":126720},{"id":126754,"depth":28,"text":126755,"children":127240},[127241,127242,127243,127244,127245,127246],{"id":126761,"depth":1172,"text":126762},{"id":126774,"depth":1172,"text":126775},{"id":126847,"depth":1172,"text":126848},{"id":126860,"depth":1172,"text":126861},{"id":126879,"depth":1172,"text":126880},{"id":126892,"depth":1172,"text":126893},{"id":126899,"depth":28,"text":126900,"children":127248},[127249,127250,127251,127252,127253],{"id":126906,"depth":1172,"text":126907},{"id":126918,"depth":1172,"text":126919},{"id":126971,"depth":1172,"text":126972},{"id":126992,"depth":1172,"text":126993},{"id":127013,"depth":1172,"text":127014},{"id":127039,"depth":28,"text":127040,"children":127255},[127256,127257,127258,127259,127260],{"id":127043,"depth":1172,"text":127044},{"id":127093,"depth":1172,"text":127094},{"id":127107,"depth":1172,"text":127108},{"id":127160,"depth":1172,"text":127161},{"id":127201,"depth":1172,"text":127202},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch06-css",{"title":126711,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch06-CSS语法与文本样式","edNbSUYKLIJ_C-TlXm4kGf1NOqNSGo0jc2I9MN2stKg",{"id":127267,"title":127268,"body":127269,"description":30,"extension":31,"meta":127918,"navigation":33,"path":127919,"seo":127920,"stem":127921,"__hash__":127922},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶.md","7. CSS引入方式与选择器进阶",{"type":7,"value":127270,"toc":127899},[127271,127274,127278,127282,127342,127346,127356,127359,127362,127366,127391,127395,127398,127401,127404,127407,127410,127414,127417,127420,127462,127465,127491,127497,127500,127504,127508,127514,127517,127520,127523,127526,127529,127532,127577,127581,127584,127587,127591,127595,127624,127627,127632,127635,127638,127641,127644,127648,127652,127655,127657,127660,127664,127667,127671,127674,127677,127680,127684,127688,127694,127704,127707,127710,127713,127716,127719,127842,127850,127858,127896],[10,127272,127268],{"id":127273},"_7-css引入方式与选择器进阶",[48,127275,127277],{"id":127276},"_71-css引入方式","7.1 css引入方式",[77,127279,127281],{"id":127280},"_711-内部样式表嵌入式","7.1.1 内部样式表（嵌入式）",[97,127283,127287],{"className":127284,"code":127285,"language":127286,"meta":25,"style":25},"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",[103,127288,127289,127297,127304,127316,127329,127334],{"__ignoreMap":25},[106,127290,127291,127293,127295],{"class":108,"line":109},[106,127292,1027],{"class":116},[106,127294,5119],{"class":51294},[106,127296,51301],{"class":116},[106,127298,127299,127302],{"class":108,"line":28},[106,127300,127301],{"class":51294},"  h1",[106,127303,15565],{"class":116},[106,127305,127306,127309,127311,127314],{"class":108,"line":1172},[106,127307,127308],{"class":165},"    color",[106,127310,51431],{"class":116},[106,127312,127313],{"class":165},"blue",[106,127315,1283],{"class":116},[106,127317,127318,127321,127323,127325,127327],{"class":108,"line":1187},[106,127319,127320],{"class":165},"    font-size",[106,127322,51431],{"class":116},[106,127324,917],{"class":165},[106,127326,51486],{"class":112},[106,127328,1283],{"class":116},[106,127330,127331],{"class":108,"line":1193},[106,127332,127333],{"class":116},"  }\n",[106,127335,127336,127338,127340],{"class":108,"line":1207},[106,127337,51779],{"class":116},[106,127339,5119],{"class":51294},[106,127341,51301],{"class":116},[14,127343,127344,26467],{},[266,127345,126625],{},[14,127347,77220,127348,127351,127352,127355],{},[103,127349,127350],{},"\u003Cstyle>","理论上可以放在HTML文档的任意位置，但一般会放在",[103,127353,127354],{},"\u003Chead>","标签中",[14,127357,127358],{},"②通过这种方式可以方便控制整个页面的元素样式设置",[14,127360,127361],{},"③代码结构清晰，但是并没有实现结构与样式的完全分离",[77,127363,127365],{"id":127364},"_712-行内样式表行内式","7.1.2 行内样式表（行内式）",[97,127367,127369],{"className":127284,"code":127368,"language":127286,"meta":25,"style":25},"\u003Cp style=\"color: red; font-size: 16px;\">这是一个段落\u003C\u002Fp>\n",[103,127370,127371],{"__ignoreMap":25},[106,127372,127373,127375,127377,127379,127381,127384,127387,127389],{"class":108,"line":109},[106,127374,1027],{"class":116},[106,127376,14],{"class":51294},[106,127378,62620],{"class":1955},[106,127380,162],{"class":116},[106,127382,127383],{"class":221},"\"color: red; font-size: 16px;\"",[106,127385,127386],{"class":116},">这是一个段落\u003C\u002F",[106,127388,14],{"class":51294},[106,127390,51301],{"class":116},[14,127392,127393,26467],{},[266,127394,126625],{},[14,127396,127397],{},"①style其实就是标签的属性",[14,127399,127400],{},"②在双引号中间，写法要符合css规范",[14,127402,127403],{},"③可以控制当前的标签设置样式",[14,127405,127406],{},"④书写繁琐，简单时才用",[14,127408,127409],{},"⑤使用行内样式表设定css，通常也被称为行内式引入",[77,127411,127413],{"id":127412},"_713-外部样式表链接式","7.1.3 外部样式表（链接式）",[14,127415,127416],{},"使用最多，单独建一个css文件，然后html引用",[14,127418,127419],{},"①css文件部分： style.css",[97,127421,127423],{"className":126537,"code":127422,"language":126539,"meta":25,"style":25},"\u002F* style.css *\u002F\nh1 {\n  color: blue;\n  font-size: 24px;\n}\n",[103,127424,127425,127430,127436,127446,127458],{"__ignoreMap":25},[106,127426,127427],{"class":108,"line":109},[106,127428,127429],{"class":175},"\u002F* style.css *\u002F\n",[106,127431,127432,127434],{"class":108,"line":28},[106,127433,10],{"class":51294},[106,127435,15565],{"class":116},[106,127437,127438,127440,127442,127444],{"class":108,"line":1172},[106,127439,70899],{"class":165},[106,127441,51431],{"class":116},[106,127443,127313],{"class":165},[106,127445,1283],{"class":116},[106,127447,127448,127450,127452,127454,127456],{"class":108,"line":1187},[106,127449,70620],{"class":165},[106,127451,51431],{"class":116},[106,127453,917],{"class":165},[106,127455,51486],{"class":112},[106,127457,1283],{"class":116},[106,127459,127460],{"class":108,"line":1193},[106,127461,1557],{"class":116},[14,127463,127464],{},"②html部分",[97,127466,127468],{"className":127284,"code":127467,"language":127286,"meta":25,"style":25},"\u003Clink rel=\"stylesheet\" href=\"style.css\">\n",[103,127469,127470],{"__ignoreMap":25},[106,127471,127472,127474,127476,127478,127480,127482,127484,127486,127489],{"class":108,"line":109},[106,127473,1027],{"class":116},[106,127475,68999],{"class":51294},[106,127477,69002],{"class":1955},[106,127479,162],{"class":116},[106,127481,69007],{"class":221},[106,127483,61051],{"class":1955},[106,127485,162],{"class":116},[106,127487,127488],{"class":221},"\"style.css\"",[106,127490,51301],{"class":116},[14,127492,127493,127496],{},[103,127494,127495],{},"\u003Chr>","水平线标签（但是不常用！）",[14,127498,127499],{},"ctrl+0回到页面原来大小",[48,127501,127503],{"id":127502},"_72-emmet语法-可以实现快速生成html结构语法和快速生成css样式语法","7.2 Emmet语法 可以实现快速生成HTML结构语法和快速生成CSS样式语法",[77,127505,127507],{"id":127506},"_721-快速生成html","7.2.1 快速生成html",[14,127509,127510,127511],{},"①生成标签直接输入标签名按tab键即可比如div然后tab键，就可以生成",[103,127512,127513],{},"\u003Cdiv>``\u003C\u002Fdiv>",[14,127515,127516],{},"②如果想要生成多个相同标签加上*就可以了比如div*3就可以快速生成3个div",[14,127518,127519],{},"③如果有父子级关系的标签，可以用>比如ul>li就可以了",[14,127521,127522],{},"④如果有兄弟关系的标签，用+就可以了比如div+p",[14,127524,127525],{},"⑤如果生成带有类名或者id名字的，直接写.demo或者#twotab键就可以了",[14,127527,127528],{},"⑥如果生成的div类名是有顺序的，可以用自增符号$",[14,127530,127531],{},"⑦如果想要在生成的标签内部写内容可以用{}表示",[97,127533,127535],{"className":127284,"code":127534,"language":127286,"meta":25,"style":25},"\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",[103,127536,127537,127542,127547,127552,127557,127562,127567,127572],{"__ignoreMap":25},[106,127538,127539],{"class":108,"line":109},[106,127540,127541],{"class":175},"\u003C!-- Emmet 语法示例 -->\n",[106,127543,127544],{"class":108,"line":28},[106,127545,127546],{"class":175},"\u003C!-- div*3        → 生成3个div -->\n",[106,127548,127549],{"class":108,"line":1172},[106,127550,127551],{"class":175},"\u003C!-- ul>li*5      → ul下生成5个li -->\n",[106,127553,127554],{"class":108,"line":1187},[106,127555,127556],{"class":175},"\u003C!-- div+p        → 兄弟div和p -->\n",[106,127558,127559],{"class":108,"line":1193},[106,127560,127561],{"class":175},"\u003C!-- .demo        → \u003Cdiv class=\"demo\">\u003C\u002Fdiv> -->\n",[106,127563,127564],{"class":108,"line":1207},[106,127565,127566],{"class":175},"\u003C!-- #two         → \u003Cdiv id=\"two\">\u003C\u002Fdiv> -->\n",[106,127568,127569],{"class":108,"line":1213},[106,127570,127571],{"class":175},"\u003C!-- .demo$*3     → demo1, demo2, demo3 -->\n",[106,127573,127574],{"class":108,"line":1304},[106,127575,127576],{"class":175},"\u003C!-- div{内容}     → \u003Cdiv>内容\u003C\u002Fdiv> -->\n",[77,127578,127580],{"id":127579},"_722-快速生成css","7.2.2 快速生成css",[14,127582,127583],{},"简写开头",[14,127585,127586],{},"①比如w200按tab可以生成width:200px; ②比如lh26px按tab可以生成line-height:26px;",[48,127588,127590],{"id":127589},"_73-css复合选择器","7.3 css复合选择器",[77,127592,127594],{"id":127593},"_731-后代选择器","7.3.1 后代选择器",[97,127596,127598],{"className":126537,"code":127597,"language":126539,"meta":25,"style":25},".parent .child {\n  color: blue;\n}\n",[103,127599,127600,127610,127620],{"__ignoreMap":25},[106,127601,127602,127605,127608],{"class":108,"line":109},[106,127603,127604],{"class":1955},".parent",[106,127606,127607],{"class":1955}," .child",[106,127609,15565],{"class":116},[106,127611,127612,127614,127616,127618],{"class":108,"line":28},[106,127613,70899],{"class":165},[106,127615,51431],{"class":116},[106,127617,127313],{"class":165},[106,127619,1283],{"class":116},[106,127621,127622],{"class":108,"line":1172},[106,127623,1557],{"class":116},[14,127625,127626],{},"元素1 元素2 {样式声明}",[14,127628,127629],{},[266,127630,127631],{},"注意点:",[14,127633,127634],{},"①元素1和元素2中间用空格隔开",[14,127636,127637],{},"②元素1是父级，元素2是子级，最终选择的是元素2",[14,127639,127640],{},"③元素2可以是儿子，也可以是孙子等，只要是元素1的后代即可",[14,127642,127643],{},"④元素1和元素2可以是任意基础选择器",[77,127645,127647],{"id":127646},"_732-子选择器-元素1-元素2-样式声明","7.3.2 子选择器 元素1 > 元素2 {样式声明}",[14,127649,127650],{},[266,127651,127631],{},[14,127653,127654],{},"①元素1和元素2中间用大于号隔开",[14,127656,127637],{},[14,127658,127659],{},"③元素2必须是亲儿子，其孙子、重孙之类都不归他管.你也可以叫他亲儿子选择器",[77,127661,127663],{"id":127662},"_733-并集选择器","7.3.3 并集选择器",[14,127665,127666],{},"元素1，元素2 {样式声明}",[14,127668,127669],{},[266,127670,127631],{},[14,127672,127673],{},"①元素1和元素2中间用逗号隔开",[14,127675,127676],{},"②逗号可以理解为和的意思",[14,127678,127679],{},"③并集选择器通常用于集体声明",[77,127681,127683],{"id":127682},"_734-链接伪类选择器","7.3.4 链接伪类选择器",[14,127685,127686],{},[266,127687,127631],{},[14,127689,127690,127691,127693],{},"①为了确保生效，请按照 LVHA 的循顺序声明 ",[68999,127692],{},"－:visited－:hover－:active。",[14,127695,127696,127697,127700,127701,25734],{},"②伪类选择器书写最大的特点是用冒号（:）表示，比如 ",[127698,127699],"hover",{}," 、 ",[127702,127703],"first-child",{},[14,127705,127706],{},"③ 因为 a 链接在浏览器中具有默认样式，所以我们实际工作中都需要给链接单独指定样式",[14,127708,127709],{},"link对没访问的进行设置",[14,127711,127712],{},"vistied对已访问的进行改变",[14,127714,127715],{},"hover鼠标经过就会变",[14,127717,127718],{},"active常按(点)就会变",[97,127720,127722],{"className":126537,"code":127721,"language":126539,"meta":25,"style":25},"\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",[103,127723,127724,127729,127738,127748,127758,127762,127771,127782,127786,127794,127804,127814,127818,127827,127838],{"__ignoreMap":25},[106,127725,127726],{"class":108,"line":109},[106,127727,127728],{"class":175},"\u002F* 链接伪类选择器 —— 按 LVHA 顺序 *\u002F\n",[106,127730,127731,127733,127736],{"class":108,"line":28},[106,127732,355],{"class":51294},[106,127734,127735],{"class":1955},":link",[106,127737,15565],{"class":116},[106,127739,127740,127742,127744,127746],{"class":108,"line":1172},[106,127741,70899],{"class":165},[106,127743,51431],{"class":116},[106,127745,62363],{"class":165},[106,127747,1283],{"class":116},[106,127749,127750,127752,127754,127756],{"class":108,"line":1187},[106,127751,70496],{"class":165},[106,127753,51431],{"class":116},[106,127755,54731],{"class":165},[106,127757,1283],{"class":116},[106,127759,127760],{"class":108,"line":1193},[106,127761,1557],{"class":116},[106,127763,127764,127766,127769],{"class":108,"line":1207},[106,127765,355],{"class":51294},[106,127767,127768],{"class":1955},":visited",[106,127770,15565],{"class":116},[106,127772,127773,127775,127777,127780],{"class":108,"line":1213},[106,127774,70899],{"class":165},[106,127776,51431],{"class":116},[106,127778,127779],{"class":165},"purple",[106,127781,1283],{"class":116},[106,127783,127784],{"class":108,"line":1304},[106,127785,1557],{"class":116},[106,127787,127788,127790,127792],{"class":108,"line":1310},[106,127789,355],{"class":51294},[106,127791,60934],{"class":1955},[106,127793,15565],{"class":116},[106,127795,127796,127798,127800,127802],{"class":108,"line":1322},[106,127797,70899],{"class":165},[106,127799,51431],{"class":116},[106,127801,54883],{"class":165},[106,127803,1283],{"class":116},[106,127805,127806,127808,127810,127812],{"class":108,"line":1604},[106,127807,70496],{"class":165},[106,127809,51431],{"class":116},[106,127811,127151],{"class":165},[106,127813,1283],{"class":116},[106,127815,127816],{"class":108,"line":1609},[106,127817,1557],{"class":116},[106,127819,127820,127822,127825],{"class":108,"line":1615},[106,127821,355],{"class":51294},[106,127823,127824],{"class":1955},":active",[106,127826,15565],{"class":116},[106,127828,127829,127831,127833,127836],{"class":108,"line":1620},[106,127830,70899],{"class":165},[106,127832,51431],{"class":116},[106,127834,127835],{"class":165},"green",[106,127837,1283],{"class":116},[106,127839,127840],{"class":108,"line":1634},[106,127841,1557],{"class":116},[77,127843,127845,127846,127849],{"id":127844},"_735-伪类选择器","7.3.5 ",[127847,127848],"focus",{},"伪类选择器",[14,127851,127852,127854,127855,127857],{},[127847,127853],{}," 伪类选择器用于选取获得焦点的表单元素。 焦点就是光标，一般情况 ",[103,127856,126598],{}," 类表单元素才能获取，因此这个选择器也主要针对于表单元素来说。",[97,127859,127861],{"className":126537,"code":127860,"language":126539,"meta":25,"style":25},"input:focus {\n  border-color: skyblue;\n  outline: none;\n}\n",[103,127862,127863,127871,127882,127892],{"__ignoreMap":25},[106,127864,127865,127867,127869],{"class":108,"line":109},[106,127866,53815],{"class":51294},[106,127868,61894],{"class":1955},[106,127870,15565],{"class":116},[106,127872,127873,127876,127878,127880],{"class":108,"line":28},[106,127874,127875],{"class":165},"  border-color",[106,127877,51431],{"class":116},[106,127879,54883],{"class":165},[106,127881,1283],{"class":116},[106,127883,127884,127886,127888,127890],{"class":108,"line":1172},[106,127885,70792],{"class":165},[106,127887,51431],{"class":116},[106,127889,54731],{"class":165},[106,127891,1283],{"class":116},[106,127893,127894],{"class":108,"line":1187},[106,127895,1557],{"class":116},[5119,127897,127898],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":25,"searchDepth":28,"depth":28,"links":127900},[127901,127906,127910],{"id":127276,"depth":28,"text":127277,"children":127902},[127903,127904,127905],{"id":127280,"depth":1172,"text":127281},{"id":127364,"depth":1172,"text":127365},{"id":127412,"depth":1172,"text":127413},{"id":127502,"depth":28,"text":127503,"children":127907},[127908,127909],{"id":127506,"depth":1172,"text":127507},{"id":127579,"depth":1172,"text":127580},{"id":127589,"depth":28,"text":127590,"children":127911},[127912,127913,127914,127915,127916],{"id":127593,"depth":1172,"text":127594},{"id":127646,"depth":1172,"text":127647},{"id":127662,"depth":1172,"text":127663},{"id":127682,"depth":1172,"text":127683},{"id":127844,"depth":1172,"text":127917},"7.3.5 伪类选择器",{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch07-css",{"title":127268,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch07-CSS引入方式与选择器进阶","5XV5_YAJT4dZrDp1IubvvQckZ5rLDX2qDFIIitfWb20",{"id":127924,"title":127925,"body":127926,"description":30,"extension":31,"meta":129849,"navigation":33,"path":129850,"seo":129851,"stem":129852,"__hash__":129853},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性.md","8. CSS显示模式与背景特性",{"type":7,"value":127927,"toc":129823},[127928,127931,127935,127944,127948,127974,127979,127982,127985,127988,127991,127995,127998,128008,128016,128020,128055,128060,128063,128066,128069,128072,128076,128079,128088,128092,128105,128110,128113,128116,128119,128123,128126,128130,128133,128188,128191,128222,128225,128279,128283,128286,128452,128575,128578,128581,128584,128587,128591,128594,128598,128601,128604,128608,128611,128642,128669,128697,128700,128704,128730,128773,128777,128871,128874,128901,128904,128907,128910,128913,128916,128919,128922,128925,128928,128932,128989,129016,129020,129068,129072,129113,129115,129118,129121,129124,129127,129131,129223,129226,129229,129232,129236,129359,129560,129564,129568,129571,129574,129577,129581,129584,129587,129612,129615,129618,129621,129624,129627,129631,129639,129701,129704,129762,129765,129768,129771,129774,129777,129780,129783,129820],[10,127929,127925],{"id":127930},"_8-css显示模式与背景特性",[48,127932,127934],{"id":127933},"_81-css元素显示模式","8.1 css元素显示模式",[14,127936,127937,127938,127940,127941,127943],{},"显示模式的作用是更好布局页面，元素显示模式就是元素（标签）以什么方式进行显示，比如",[103,127939,126148],{},"自己占一行，比如一行可以放多个",[103,127942,126151],{},"，HTML 元素一般分为块元素和行内元素两种类型",[77,127945,127947],{"id":127946},"_811-块元素","8.1.1 块元素",[14,127949,127950,127951,127953,127954,329,127957,329,127959,329,127961,329,127964,329,127967,127970,127971,127973],{},"常见的块元素有",[103,127952,126052],{},"~",[103,127955,127956],{},"\u003Ch6>",[103,127958,126078],{},[103,127960,126148],{},[103,127962,127963],{},"\u003Cul>",[103,127965,127966],{},"\u003Col>",[103,127968,127969],{},"\u003Cli>","等，其中 ",[103,127972,126148],{}," 标签是最典型的块元素",[14,127975,127976],{},[266,127977,127978],{},"块级元素的特点：",[14,127980,127981],{},"① 比较霸道，自己独占一行。",[14,127983,127984],{},"② 高度，宽度、外边距以及内边距都可以控制。",[14,127986,127987],{},"③ 宽度默认是容器（父级宽度）的100%。",[14,127989,127990],{},"④ 是一个容器及盒子，里面可以放行内或者块级元素。",[14,127992,127993],{},[266,127994,146],{},[14,127996,127997],{},"①文字类的元素内不能使用块级元素",[14,127999,77243,128000,128002,128003,128005,128006],{},[103,128001,126078],{}," 标签主要用于存放文字，因此 ",[103,128004,126078],{}," 里面不能放块级元素，特别是不能放",[103,128007,126148],{},[14,128009,128010,128011,127953,128013,128015],{},"⑥同理， ",[103,128012,126052],{},[103,128014,127956],{},"等都是文字类块级标签，里面也不能放其他块级元素",[77,128017,128019],{"id":128018},"_812-行内元素","8.1.2 行内元素",[14,128021,128022,128023,329,128025,329,128028,329,128031,329,128034,329,128037,329,128040,329,128043,329,128046,329,128049,128051,128052,128054],{},"常见的行内元素有 ",[103,128024,126310],{},[103,128026,128027],{},"\u003Cstrong>",[103,128029,128030],{},"\u003Cb>",[103,128032,128033],{},"\u003Cem>",[103,128035,128036],{},"\u003Ci>",[103,128038,128039],{},"\u003Cdel>",[103,128041,128042],{},"\u003Cs>",[103,128044,128045],{},"\u003Cins>",[103,128047,128048],{},"\u003Cu>",[103,128050,126151],{}," 等，其中 ",[103,128053,126151],{}," 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。",[14,128056,128057],{},[266,128058,128059],{},"特点：",[14,128061,128062],{},"① 相邻行内元素在一行上，一行可以显示多个。",[14,128064,128065],{},"② 高、宽直接设置是无效的。",[14,128067,128068],{},"③ 默认宽度就是它本身内容的宽度。",[14,128070,128071],{},"④ 行内元素只能容纳文本或其他行内元素。",[14,128073,128074],{},[266,128075,146],{},[14,128077,128078],{},"① 链接里面不能再放链接，也就是a里面不能再放a",[14,128080,128081,128082,128084,128085,128087],{},"②特殊情况链接 ",[103,128083,126310],{}," 里面可以放块级元素，但是给 ",[103,128086,126310],{}," 转换一下块级模式最安全",[77,128089,128091],{"id":128090},"_813-行内块元素","8.1.3 行内块元素",[14,128093,128094,128095,329,128098,329,128101,128104],{},"在行内元素中有几个特殊的标签 —— ",[103,128096,128097],{},"\u003Cimg \u002F>",[103,128099,128100],{},"\u003Cinput \u002F>",[103,128102,128103],{},"\u003Ctd>","，它们同时具有块元素和行内元素的特点。有些资料称它们为行内块元素",[14,128106,128107],{},[266,128108,128109],{},"行内块元素的特点：",[14,128111,128112],{},"① 和相邻行内元素（行内块）在一行上，但是他们之间会有空白缝隙。一行可以显示多个（行内元素特点）",[14,128114,128115],{},"② 默认宽度就是它本身内容的宽度（行内元素特点）",[14,128117,128118],{},"③ 高度，行高、外边距以及内边距都可以控制（块级元素特点）",[77,128120,128122],{"id":128121},"_814-总结","8.1.4 总结",[23,128124],{"style":126393,"src":128125},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-033.png",[77,128127,128129],{"id":128128},"_815-元素显示模式的转换","8.1.5 元素显示模式的转换",[14,128131,128132],{},"①转换为块元素：display:block;",[97,128134,128136],{"className":126537,"code":128135,"language":126539,"meta":25,"style":25},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\na {\n  display: block;\n  width: 100px;\n  height: 40px;\n}\n",[103,128137,128138,128143,128149,128160,128172,128184],{"__ignoreMap":25},[106,128139,128140],{"class":108,"line":109},[106,128141,128142],{"class":175},"\u002F* 将行内元素 a 转换为块级元素 *\u002F\n",[106,128144,128145,128147],{"class":108,"line":28},[106,128146,355],{"class":51294},[106,128148,15565],{"class":116},[106,128150,128151,128154,128156,128158],{"class":108,"line":1172},[106,128152,128153],{"class":165},"  display",[106,128155,51431],{"class":116},[106,128157,60863],{"class":165},[106,128159,1283],{"class":116},[106,128161,128162,128164,128166,128168,128170],{"class":108,"line":1187},[106,128163,70562],{"class":165},[106,128165,51431],{"class":116},[106,128167,428],{"class":165},[106,128169,51486],{"class":112},[106,128171,1283],{"class":116},[106,128173,128174,128176,128178,128180,128182],{"class":108,"line":1193},[106,128175,70782],{"class":165},[106,128177,51431],{"class":116},[106,128179,518],{"class":165},[106,128181,51486],{"class":112},[106,128183,1283],{"class":116},[106,128185,128186],{"class":108,"line":1207},[106,128187,1557],{"class":116},[14,128189,128190],{},"②转换为行内元素：display:inline;",[97,128192,128194],{"className":126537,"code":128193,"language":126539,"meta":25,"style":25},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\ndiv {\n  display: inline;\n}\n",[103,128195,128196,128201,128207,128218],{"__ignoreMap":25},[106,128197,128198],{"class":108,"line":109},[106,128199,128200],{"class":175},"\u002F* 将块级元素 div 转换为行内元素 *\u002F\n",[106,128202,128203,128205],{"class":108,"line":28},[106,128204,51605],{"class":51294},[106,128206,15565],{"class":116},[106,128208,128209,128211,128213,128216],{"class":108,"line":1172},[106,128210,128153],{"class":165},[106,128212,51431],{"class":116},[106,128214,128215],{"class":165},"inline",[106,128217,1283],{"class":116},[106,128219,128220],{"class":108,"line":1187},[106,128221,1557],{"class":116},[14,128223,128224],{},"③转换为行内块：display:inline-block;",[97,128226,128228],{"className":126537,"code":128227,"language":126539,"meta":25,"style":25},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\nspan {\n  display: inline-block;\n  width: 80px;\n  height: 30px;\n}\n",[103,128229,128230,128235,128241,128251,128263,128275],{"__ignoreMap":25},[106,128231,128232],{"class":108,"line":109},[106,128233,128234],{"class":175},"\u002F* 将行内元素 span 转换为行内块元素 *\u002F\n",[106,128236,128237,128239],{"class":108,"line":28},[106,128238,106],{"class":51294},[106,128240,15565],{"class":116},[106,128242,128243,128245,128247,128249],{"class":108,"line":1172},[106,128244,128153],{"class":165},[106,128246,51431],{"class":116},[106,128248,72377],{"class":165},[106,128250,1283],{"class":116},[106,128252,128253,128255,128257,128259,128261],{"class":108,"line":1187},[106,128254,70562],{"class":165},[106,128256,51431],{"class":116},[106,128258,729],{"class":165},[106,128260,51486],{"class":112},[106,128262,1283],{"class":116},[106,128264,128265,128267,128269,128271,128273],{"class":108,"line":1193},[106,128266,70782],{"class":165},[106,128268,51431],{"class":116},[106,128270,1068],{"class":165},[106,128272,51486],{"class":112},[106,128274,1283],{"class":116},[106,128276,128277],{"class":108,"line":1207},[106,128278,1557],{"class":116},[77,128280,128282],{"id":128281},"_816-小米侧边栏","8.1.6 小米侧边栏",[23,128284],{"style":126393,"src":128285},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-034.png",[97,128287,128289],{"className":127284,"code":128288,"language":127286,"meta":25,"style":25},"\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",[103,128290,128291,128296,128311,128330,128349,128368,128387,128406,128425,128444],{"__ignoreMap":25},[106,128292,128293],{"class":108,"line":109},[106,128294,128295],{"class":175},"\u003C!-- 小米侧边栏案例 -->\n",[106,128297,128298,128300,128302,128304,128306,128309],{"class":108,"line":28},[106,128299,1027],{"class":116},[106,128301,51605],{"class":51294},[106,128303,53480],{"class":1955},[106,128305,162],{"class":116},[106,128307,128308],{"class":221},"\"sidebar\"",[106,128310,51301],{"class":116},[106,128312,128313,128315,128317,128319,128321,128323,128326,128328],{"class":108,"line":1172},[106,128314,52138],{"class":116},[106,128316,355],{"class":51294},[106,128318,61051],{"class":1955},[106,128320,162],{"class":116},[106,128322,61056],{"class":221},[106,128324,128325],{"class":116},">手机 电话卡\u003C\u002F",[106,128327,355],{"class":51294},[106,128329,51301],{"class":116},[106,128331,128332,128334,128336,128338,128340,128342,128345,128347],{"class":108,"line":1187},[106,128333,52138],{"class":116},[106,128335,355],{"class":51294},[106,128337,61051],{"class":1955},[106,128339,162],{"class":116},[106,128341,61056],{"class":221},[106,128343,128344],{"class":116},">电视 盒子\u003C\u002F",[106,128346,355],{"class":51294},[106,128348,51301],{"class":116},[106,128350,128351,128353,128355,128357,128359,128361,128364,128366],{"class":108,"line":1193},[106,128352,52138],{"class":116},[106,128354,355],{"class":51294},[106,128356,61051],{"class":1955},[106,128358,162],{"class":116},[106,128360,61056],{"class":221},[106,128362,128363],{"class":116},">笔记本 平板\u003C\u002F",[106,128365,355],{"class":51294},[106,128367,51301],{"class":116},[106,128369,128370,128372,128374,128376,128378,128380,128383,128385],{"class":108,"line":1207},[106,128371,52138],{"class":116},[106,128373,355],{"class":51294},[106,128375,61051],{"class":1955},[106,128377,162],{"class":116},[106,128379,61056],{"class":221},[106,128381,128382],{"class":116},">出行 穿戴\u003C\u002F",[106,128384,355],{"class":51294},[106,128386,51301],{"class":116},[106,128388,128389,128391,128393,128395,128397,128399,128402,128404],{"class":108,"line":1213},[106,128390,52138],{"class":116},[106,128392,355],{"class":51294},[106,128394,61051],{"class":1955},[106,128396,162],{"class":116},[106,128398,61056],{"class":221},[106,128400,128401],{"class":116},">智能 路由器\u003C\u002F",[106,128403,355],{"class":51294},[106,128405,51301],{"class":116},[106,128407,128408,128410,128412,128414,128416,128418,128421,128423],{"class":108,"line":1304},[106,128409,52138],{"class":116},[106,128411,355],{"class":51294},[106,128413,61051],{"class":1955},[106,128415,162],{"class":116},[106,128417,61056],{"class":221},[106,128419,128420],{"class":116},">健康 儿童\u003C\u002F",[106,128422,355],{"class":51294},[106,128424,51301],{"class":116},[106,128426,128427,128429,128431,128433,128435,128437,128440,128442],{"class":108,"line":1310},[106,128428,52138],{"class":116},[106,128430,355],{"class":51294},[106,128432,61051],{"class":1955},[106,128434,162],{"class":116},[106,128436,61056],{"class":221},[106,128438,128439],{"class":116},">耳机 音响\u003C\u002F",[106,128441,355],{"class":51294},[106,128443,51301],{"class":116},[106,128445,128446,128448,128450],{"class":108,"line":1322},[106,128447,51779],{"class":116},[106,128449,51605],{"class":51294},[106,128451,51301],{"class":116},[97,128453,128455],{"className":126537,"code":128454,"language":126539,"meta":25,"style":25},".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",[103,128456,128457,128466,128476,128489,128501,128513,128525,128535,128546,128550,128560,128571],{"__ignoreMap":25},[106,128458,128459,128462,128464],{"class":108,"line":109},[106,128460,128461],{"class":1955},".sidebar",[106,128463,1391],{"class":51294},[106,128465,15565],{"class":116},[106,128467,128468,128470,128472,128474],{"class":108,"line":28},[106,128469,128153],{"class":165},[106,128471,51431],{"class":116},[106,128473,60863],{"class":165},[106,128475,1283],{"class":116},[106,128477,128478,128480,128482,128485,128487],{"class":108,"line":1172},[106,128479,70562],{"class":165},[106,128481,51431],{"class":116},[106,128483,128484],{"class":165},"234",[106,128486,51486],{"class":112},[106,128488,1283],{"class":116},[106,128490,128491,128493,128495,128497,128499],{"class":108,"line":1187},[106,128492,70782],{"class":165},[106,128494,51431],{"class":116},[106,128496,569],{"class":165},[106,128498,51486],{"class":112},[106,128500,1283],{"class":116},[106,128502,128503,128505,128507,128509,128511],{"class":108,"line":1193},[106,128504,127221],{"class":165},[106,128506,51431],{"class":116},[106,128508,569],{"class":165},[106,128510,51486],{"class":112},[106,128512,1283],{"class":116},[106,128514,128515,128517,128519,128521,128523],{"class":108,"line":1207},[106,128516,70817],{"class":165},[106,128518,51431],{"class":116},[106,128520,1068],{"class":165},[106,128522,51486],{"class":112},[106,128524,1283],{"class":116},[106,128526,128527,128529,128531,128533],{"class":108,"line":1213},[106,128528,70899],{"class":165},[106,128530,51431],{"class":116},[106,128532,60836],{"class":165},[106,128534,1283],{"class":116},[106,128536,128537,128539,128541,128544],{"class":108,"line":1304},[106,128538,70872],{"class":165},[106,128540,51431],{"class":116},[106,128542,128543],{"class":165},"#55585a",[106,128545,1283],{"class":116},[106,128547,128548],{"class":108,"line":1310},[106,128549,1557],{"class":116},[106,128551,128552,128554,128556,128558],{"class":108,"line":1322},[106,128553,128461],{"class":1955},[106,128555,1391],{"class":51294},[106,128557,60934],{"class":1955},[106,128559,15565],{"class":116},[106,128561,128562,128564,128566,128569],{"class":108,"line":1604},[106,128563,70872],{"class":165},[106,128565,51431],{"class":116},[106,128567,128568],{"class":165},"#ff6700",[106,128570,1283],{"class":116},[106,128572,128573],{"class":108,"line":1609},[106,128574,1557],{"class":116},[23,128576],{"style":126393,"src":128577},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-035.png",[14,128579,128580],{},"行高=盒子高度：实现文字的垂直居中",[14,128582,128583],{},"原理讲解：",[23,128585],{"style":126393,"src":128586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-036.png",[48,128588,128590],{"id":128589},"_82-css背景","8.2 css背景",[14,128592,128593],{},"背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等",[77,128595,128597],{"id":128596},"_821-背景颜色","8.2.1 背景颜色",[14,128599,128600],{},"background-color:颜色值;",[14,128602,128603],{},"一般情况下元素背景颜色默认值是 transparent（透明）",[77,128605,128607],{"id":128606},"_822-背景图片","8.2.2 背景图片",[14,128609,128610],{},"用于logo 或者一些装饰性的小图片或者是超大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)",[97,128612,128614],{"className":126537,"code":128613,"language":126539,"meta":25,"style":25},"div {\n  background-image: url(images\u002Fbg.png);\n}\n",[103,128615,128616,128622,128638],{"__ignoreMap":25},[106,128617,128618,128620],{"class":108,"line":109},[106,128619,51605],{"class":51294},[106,128621,15565],{"class":116},[106,128623,128624,128627,128629,128631,128633,128636],{"class":108,"line":28},[106,128625,128626],{"class":165},"  background-image",[106,128628,51431],{"class":116},[106,128630,61720],{"class":165},[106,128632,117],{"class":116},[106,128634,128635],{"class":5209},"images\u002Fbg.png",[106,128637,2711],{"class":116},[106,128639,128640],{"class":108,"line":1172},[106,128641,1557],{"class":116},[254,128643,128644,128653],{},[257,128645,128646],{},[260,128647,128648,128651],{},[263,128649,128650],{"align":23729},"参数值",[263,128652,102681],{"align":23729},[301,128654,128655,128662],{},[260,128656,128657,128659],{},[306,128658,54731],{"align":23729},[306,128660,128661],{"align":23729},"无背景图（默认的）",[260,128663,128664,128666],{},[306,128665,61720],{"align":23729},[306,128667,128668],{"align":23729},"使用绝对或相对地址指定背景图像",[97,128670,128671],{"className":126537,"code":128613,"language":126539,"meta":25,"style":25},[103,128672,128673,128679,128693],{"__ignoreMap":25},[106,128674,128675,128677],{"class":108,"line":109},[106,128676,51605],{"class":51294},[106,128678,15565],{"class":116},[106,128680,128681,128683,128685,128687,128689,128691],{"class":108,"line":28},[106,128682,128626],{"class":165},[106,128684,51431],{"class":116},[106,128686,61720],{"class":165},[106,128688,117],{"class":116},[106,128690,128635],{"class":5209},[106,128692,2711],{"class":116},[106,128694,128695],{"class":108,"line":1172},[106,128696,1557],{"class":116},[14,128698,128699],{},"注意：背景图片后面的地址，不能忘记加url,也不能加引号",[77,128701,128703],{"id":128702},"_823-背景平铺","8.2.3 背景平铺",[97,128705,128707],{"className":126537,"code":128706,"language":126539,"meta":25,"style":25},"div {\n  background-repeat: no-repeat;\n}\n",[103,128708,128709,128715,128726],{"__ignoreMap":25},[106,128710,128711,128713],{"class":108,"line":109},[106,128712,51605],{"class":51294},[106,128714,15565],{"class":116},[106,128716,128717,128720,128722,128724],{"class":108,"line":28},[106,128718,128719],{"class":165},"  background-repeat",[106,128721,51431],{"class":116},[106,128723,61730],{"class":165},[106,128725,1283],{"class":116},[106,128727,128728],{"class":108,"line":1172},[106,128729,1557],{"class":116},[254,128731,128732,128740],{},[257,128733,128734],{},[260,128735,128736,128738],{},[263,128737,128650],{"align":23729},[263,128739,102681],{"align":23729},[301,128741,128742,128750,128757,128765],{},[260,128743,128744,128747],{},[306,128745,128746],{"align":23729},"repeat",[306,128748,128749],{"align":23729},"背景图像在纵向和横向上平铺（默认的）",[260,128751,128752,128754],{},[306,128753,61730],{"align":23729},[306,128755,128756],{"align":23729},"背景图像不平铺",[260,128758,128759,128762],{},[306,128760,128761],{"align":23729},"repeat-x",[306,128763,128764],{"align":23729},"背景图像在横向上平铺",[260,128766,128767,128770],{},[306,128768,128769],{"align":23729},"repeat-y",[306,128771,128772],{"align":23729},"背景图像在纵向平铺",[77,128774,128776],{"id":128775},"_824-背景图片位置","8.2.4 背景图片位置",[97,128778,128780],{"className":126537,"code":128779,"language":126539,"meta":25,"style":25},"\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",[103,128781,128782,128787,128793,128807,128811,128816,128822,128838,128842,128847,128853,128867],{"__ignoreMap":25},[106,128783,128784],{"class":108,"line":109},[106,128785,128786],{"class":175},"\u002F* 方位名词 *\u002F\n",[106,128788,128789,128791],{"class":108,"line":28},[106,128790,51605],{"class":51294},[106,128792,15565],{"class":116},[106,128794,128795,128798,128800,128802,128805],{"class":108,"line":1172},[106,128796,128797],{"class":165},"  background-position",[106,128799,51431],{"class":116},[106,128801,51586],{"class":165},[106,128803,128804],{"class":165}," top",[106,128806,1283],{"class":116},[106,128808,128809],{"class":108,"line":1187},[106,128810,1557],{"class":116},[106,128812,128813],{"class":108,"line":1193},[106,128814,128815],{"class":175},"\u002F* 精确单位 *\u002F\n",[106,128817,128818,128820],{"class":108,"line":1207},[106,128819,51605],{"class":51294},[106,128821,15565],{"class":116},[106,128823,128824,128826,128828,128830,128832,128834,128836],{"class":108,"line":1213},[106,128825,128797],{"class":165},[106,128827,51431],{"class":116},[106,128829,817],{"class":165},[106,128831,51486],{"class":112},[106,128833,57498],{"class":165},[106,128835,51486],{"class":112},[106,128837,1283],{"class":116},[106,128839,128840],{"class":108,"line":1304},[106,128841,1557],{"class":116},[106,128843,128844],{"class":108,"line":1310},[106,128845,128846],{"class":175},"\u002F* 混合单位 *\u002F\n",[106,128848,128849,128851],{"class":108,"line":1322},[106,128850,51605],{"class":51294},[106,128852,15565],{"class":116},[106,128854,128855,128857,128859,128861,128863,128865],{"class":108,"line":1604},[106,128856,128797],{"class":165},[106,128858,51431],{"class":116},[106,128860,817],{"class":165},[106,128862,51486],{"class":112},[106,128864,17137],{"class":165},[106,128866,1283],{"class":116},[106,128868,128869],{"class":108,"line":1609},[106,128870,1557],{"class":116},[14,128872,128873],{},"参数代表的意思是：x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位",[254,128875,128876,128884],{},[257,128877,128878],{},[260,128879,128880,128882],{},[263,128881,128650],{"align":23729},[263,128883,25863],{"align":23729},[301,128885,128886,128893],{},[260,128887,128888,128890],{},[306,128889,51962],{"align":23729},[306,128891,128892],{"align":23729},"百分数|由浮点数和单位标识符组成的长度值",[260,128894,128895,128898],{},[306,128896,128897],{"align":23729},"position",[306,128899,128900],{"align":23729},"top|center|bottom|left|center|right 方位名词",[14,128902,128903],{},"其他说明：",[14,128905,128906],{},"①参数是方位名词",[14,128908,128909],{},"如果指定的两个值都是方位名词，则两个值前后顺序无关，比如 left top 和 top left 效果一致",[14,128911,128912],{},"如果只指定了一个方位名词，另一个值省略，则第二个值默认居中对齐",[14,128914,128915],{},"②参数是精确单位",[14,128917,128918],{},"如果参数值是精确坐标，那么第一个肯定是 x 坐标，第二个一定是 y 坐标",[14,128920,128921],{},"如果只指定一个数值，那该数值一定是 x 坐标，另一个默认垂直居中",[14,128923,128924],{},"③参数是混合单位",[14,128926,128927],{},"如果指定的两个值是精确单位和方位名词混合使用，则第一个值是 x 坐标，第二个值是 y 坐标",[77,128929,128931],{"id":128930},"_825-背景图片固定","8.2.5 背景图片固定",[97,128933,128935],{"className":126537,"code":128934,"language":126539,"meta":25,"style":25},"\u002F* 背景滚动（默认） *\u002F\ndiv {\n  background-attachment: scroll;\n}\n\u002F* 背景固定 *\u002F\ndiv {\n  background-attachment: fixed;\n}\n",[103,128936,128937,128942,128948,128960,128964,128969,128975,128985],{"__ignoreMap":25},[106,128938,128939],{"class":108,"line":109},[106,128940,128941],{"class":175},"\u002F* 背景滚动（默认） *\u002F\n",[106,128943,128944,128946],{"class":108,"line":28},[106,128945,51605],{"class":51294},[106,128947,15565],{"class":116},[106,128949,128950,128953,128955,128958],{"class":108,"line":1172},[106,128951,128952],{"class":165},"  background-attachment",[106,128954,51431],{"class":116},[106,128956,128957],{"class":165},"scroll",[106,128959,1283],{"class":116},[106,128961,128962],{"class":108,"line":1187},[106,128963,1557],{"class":116},[106,128965,128966],{"class":108,"line":1193},[106,128967,128968],{"class":175},"\u002F* 背景固定 *\u002F\n",[106,128970,128971,128973],{"class":108,"line":1207},[106,128972,51605],{"class":51294},[106,128974,15565],{"class":116},[106,128976,128977,128979,128981,128983],{"class":108,"line":1213},[106,128978,128952],{"class":165},[106,128980,51431],{"class":116},[106,128982,86227],{"class":165},[106,128984,1283],{"class":116},[106,128986,128987],{"class":108,"line":1304},[106,128988,1557],{"class":116},[254,128990,128991,129000],{},[257,128992,128993],{},[260,128994,128995,128998],{},[263,128996,128997],{"align":23729},"参数",[263,128999,102681],{"align":23729},[301,129001,129002,129009],{},[260,129003,129004,129006],{},[306,129005,128957],{"align":23729},[306,129007,129008],{"align":23729},"背景图像是随对象内容滚动",[260,129010,129011,129013],{},[306,129012,86227],{"align":23729},[306,129014,129015],{"align":23729},"背景图像固定",[77,129017,129019],{"id":129018},"_826-背景样式合写","8.2.6 背景样式合写",[97,129021,129023],{"className":126537,"code":129022,"language":126539,"meta":25,"style":25},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\ndiv {\n  background: #fff url(images\u002Fbg.png) no-repeat fixed center top;\n}\n",[103,129024,129025,129030,129036,129064],{"__ignoreMap":25},[106,129026,129027],{"class":108,"line":109},[106,129028,129029],{"class":175},"\u002F* 背景复合写法：颜色 图片 平铺 滚动 位置 *\u002F\n",[106,129031,129032,129034],{"class":108,"line":28},[106,129033,51605],{"class":51294},[106,129035,15565],{"class":116},[106,129037,129038,129040,129042,129044,129047,129049,129051,129053,129055,129058,129060,129062],{"class":108,"line":1172},[106,129039,70605],{"class":165},[106,129041,51431],{"class":116},[106,129043,60836],{"class":165},[106,129045,129046],{"class":165}," url",[106,129048,117],{"class":116},[106,129050,128635],{"class":5209},[106,129052,13707],{"class":116},[106,129054,61730],{"class":165},[106,129056,129057],{"class":165}," fixed",[106,129059,17137],{"class":165},[106,129061,128804],{"class":165},[106,129063,1283],{"class":116},[106,129065,129066],{"class":108,"line":1187},[106,129067,1557],{"class":116},[77,129069,129071],{"id":129070},"_827-背景色半透明","8.2.7 背景色半透明",[97,129073,129075],{"className":126537,"code":129074,"language":126539,"meta":25,"style":25},"div {\n  background: rgba(0, 0, 0, 0.3);\n}\n",[103,129076,129077,129083,129109],{"__ignoreMap":25},[106,129078,129079,129081],{"class":108,"line":109},[106,129080,51605],{"class":51294},[106,129082,15565],{"class":116},[106,129084,129085,129087,129089,129091,129093,129095,129097,129099,129101,129103,129105,129107],{"class":108,"line":28},[106,129086,70605],{"class":165},[106,129088,51431],{"class":116},[106,129090,55104],{"class":165},[106,129092,117],{"class":116},[106,129094,308],{"class":165},[106,129096,12428],{"class":116},[106,129098,308],{"class":165},[106,129100,12428],{"class":116},[106,129102,308],{"class":165},[106,129104,12428],{"class":116},[106,129106,100506],{"class":165},[106,129108,2711],{"class":116},[106,129110,129111],{"class":108,"line":1172},[106,129112,1557],{"class":116},[14,129114,99381],{},[14,129116,129117],{},"①最后一个参数是 alpha 透明度，取值范围在 0~1之间",[14,129119,129120],{},"②我们习惯把 0.3 的 0 省略掉，写为 background: rgba(0, 0, 0, .3);",[14,129122,129123],{},"③背景半透明是指盒子背景半透明，盒子里面的内容不受影响",[14,129125,129126],{},"④CSS3 新增属性，是 IE9+ 版本浏览器才支持的，但是现在实际开发,我们不太关注兼容性写法了,可以放心使用",[77,129128,129130],{"id":129129},"_828-总结","8.2.8 总结",[254,129132,129133,129144],{},[257,129134,129135],{},[260,129136,129137,129140,129142],{},[263,129138,129139],{"align":23729},"属性",[263,129141,102681],{"align":23729},[263,129143,269],{"align":23729},[301,129145,129146,129157,129168,129179,129190,129201,129212],{},[260,129147,129148,129151,129154],{},[306,129149,129150],{"align":23729},"background-color",[306,129152,129153],{"align":23729},"背景颜色",[306,129155,129156],{"align":23729},"预定义的颜色值\u002F十六进制\u002FRGB代码",[260,129158,129159,129162,129165],{},[306,129160,129161],{"align":23729},"background-image",[306,129163,129164],{"align":23729},"背景图片",[306,129166,129167],{"align":23729},"url(图片路径)",[260,129169,129170,129173,129176],{},[306,129171,129172],{"align":23729},"background-repeat",[306,129174,129175],{"align":23729},"是否平铺",[306,129177,129178],{"align":23729},"repeat\u002Fno-repeat\u002Frepeat-x\u002Frepeat-y",[260,129180,129181,129184,129187],{},[306,129182,129183],{"align":23729},"background-position",[306,129185,129186],{"align":23729},"背景位置",[306,129188,129189],{"align":23729},"length\u002Fposition 分别是x和y坐标",[260,129191,129192,129195,129198],{},[306,129193,129194],{"align":23729},"background-attachment",[306,129196,129197],{"align":23729},"背景附着",[306,129199,129200],{"align":23729},"scroll(背景滚动) \u002Ffixed (背景固定)",[260,129202,129203,129206,129209],{},[306,129204,129205],{"align":23729},"背景简写",[306,129207,129208],{"align":23729},"书写更简单",[306,129210,129211],{"align":23729},"背景颜色 背景图片地址 背景平铺 背景滚动 背景位置；",[260,129213,129214,129217,129220],{},[306,129215,129216],{"align":23729},"背景半透明",[306,129218,129219],{"align":23729},"背景颜色半透明",[306,129221,129222],{"align":23729},"background: rgba(0,0,0.3); 后面必须是4个值",[14,129224,129225],{},"颜色渐变：",[23,129227],{"style":126393,"src":129228},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-037.png",[23,129230],{"style":126393,"src":129231},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-038.png",[77,129233,129235],{"id":129234},"_829-案例-五彩导航栏","8.2.9 案例-五彩导航栏",[97,129237,129239],{"className":127284,"code":129238,"language":127286,"meta":25,"style":25},"\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",[103,129240,129241,129256,129275,129294,129313,129332,129351],{"__ignoreMap":25},[106,129242,129243,129245,129247,129249,129251,129254],{"class":108,"line":109},[106,129244,1027],{"class":116},[106,129246,51605],{"class":51294},[106,129248,53480],{"class":1955},[106,129250,162],{"class":116},[106,129252,129253],{"class":221},"\"nav\"",[106,129255,51301],{"class":116},[106,129257,129258,129260,129262,129264,129266,129268,129271,129273],{"class":108,"line":28},[106,129259,52138],{"class":116},[106,129261,355],{"class":51294},[106,129263,61051],{"class":1955},[106,129265,162],{"class":116},[106,129267,61056],{"class":221},[106,129269,129270],{"class":116},">五彩导航1\u003C\u002F",[106,129272,355],{"class":51294},[106,129274,51301],{"class":116},[106,129276,129277,129279,129281,129283,129285,129287,129290,129292],{"class":108,"line":1172},[106,129278,52138],{"class":116},[106,129280,355],{"class":51294},[106,129282,61051],{"class":1955},[106,129284,162],{"class":116},[106,129286,61056],{"class":221},[106,129288,129289],{"class":116},">五彩导航2\u003C\u002F",[106,129291,355],{"class":51294},[106,129293,51301],{"class":116},[106,129295,129296,129298,129300,129302,129304,129306,129309,129311],{"class":108,"line":1187},[106,129297,52138],{"class":116},[106,129299,355],{"class":51294},[106,129301,61051],{"class":1955},[106,129303,162],{"class":116},[106,129305,61056],{"class":221},[106,129307,129308],{"class":116},">五彩导航3\u003C\u002F",[106,129310,355],{"class":51294},[106,129312,51301],{"class":116},[106,129314,129315,129317,129319,129321,129323,129325,129328,129330],{"class":108,"line":1193},[106,129316,52138],{"class":116},[106,129318,355],{"class":51294},[106,129320,61051],{"class":1955},[106,129322,162],{"class":116},[106,129324,61056],{"class":221},[106,129326,129327],{"class":116},">五彩导航4\u003C\u002F",[106,129329,355],{"class":51294},[106,129331,51301],{"class":116},[106,129333,129334,129336,129338,129340,129342,129344,129347,129349],{"class":108,"line":1207},[106,129335,52138],{"class":116},[106,129337,355],{"class":51294},[106,129339,61051],{"class":1955},[106,129341,162],{"class":116},[106,129343,61056],{"class":221},[106,129345,129346],{"class":116},">五彩导航5\u003C\u002F",[106,129348,355],{"class":51294},[106,129350,51301],{"class":116},[106,129352,129353,129355,129357],{"class":108,"line":1213},[106,129354,51779],{"class":116},[106,129356,51605],{"class":51294},[106,129358,51301],{"class":116},[97,129360,129362],{"className":126537,"code":129361,"language":126539,"meta":25,"style":25},".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",[103,129363,129364,129373,129383,129395,129407,129417,129429,129439,129443,129468,129491,129514,129537],{"__ignoreMap":25},[106,129365,129366,129369,129371],{"class":108,"line":109},[106,129367,129368],{"class":1955},".nav",[106,129370,1391],{"class":51294},[106,129372,15565],{"class":116},[106,129374,129375,129377,129379,129381],{"class":108,"line":28},[106,129376,128153],{"class":165},[106,129378,51431],{"class":116},[106,129380,72377],{"class":165},[106,129382,1283],{"class":116},[106,129384,129385,129387,129389,129391,129393],{"class":108,"line":1172},[106,129386,70562],{"class":165},[106,129388,51431],{"class":116},[106,129390,934],{"class":165},[106,129392,51486],{"class":112},[106,129394,1283],{"class":116},[106,129396,129397,129399,129401,129403,129405],{"class":108,"line":1187},[106,129398,70782],{"class":165},[106,129400,51431],{"class":116},[106,129402,973],{"class":165},[106,129404,51486],{"class":112},[106,129406,1283],{"class":116},[106,129408,129409,129411,129413,129415],{"class":108,"line":1193},[106,129410,70520],{"class":165},[106,129412,51431],{"class":116},[106,129414,51586],{"class":165},[106,129416,1283],{"class":116},[106,129418,129419,129421,129423,129425,129427],{"class":108,"line":1207},[106,129420,127221],{"class":165},[106,129422,51431],{"class":116},[106,129424,973],{"class":165},[106,129426,51486],{"class":112},[106,129428,1283],{"class":116},[106,129430,129431,129433,129435,129437],{"class":108,"line":1213},[106,129432,70899],{"class":165},[106,129434,51431],{"class":116},[106,129436,60836],{"class":165},[106,129438,1283],{"class":116},[106,129440,129441],{"class":108,"line":1304},[106,129442,1557],{"class":116},[106,129444,129445,129447,129449,129452,129454,129456,129459,129461,129463,129465],{"class":108,"line":1310},[106,129446,129368],{"class":1955},[106,129448,1391],{"class":51294},[106,129450,129451],{"class":1955},":nth-child",[106,129453,117],{"class":116},[106,129455,334],{"class":165},[106,129457,129458],{"class":116},") { ",[106,129460,129150],{"class":165},[106,129462,51431],{"class":116},[106,129464,128568],{"class":165},[106,129466,129467],{"class":116},"; }\n",[106,129469,129470,129472,129474,129476,129478,129480,129482,129484,129486,129489],{"class":108,"line":1322},[106,129471,129368],{"class":1955},[106,129473,1391],{"class":51294},[106,129475,129451],{"class":1955},[106,129477,117],{"class":116},[106,129479,194],{"class":165},[106,129481,129458],{"class":116},[106,129483,129150],{"class":165},[106,129485,51431],{"class":116},[106,129487,129488],{"class":165},"#ff0000",[106,129490,129467],{"class":116},[106,129492,129493,129495,129497,129499,129501,129503,129505,129507,129509,129512],{"class":108,"line":1604},[106,129494,129368],{"class":1955},[106,129496,1391],{"class":51294},[106,129498,129451],{"class":1955},[106,129500,117],{"class":116},[106,129502,188],{"class":165},[106,129504,129458],{"class":116},[106,129506,129150],{"class":165},[106,129508,51431],{"class":116},[106,129510,129511],{"class":165},"#00a4ff",[106,129513,129467],{"class":116},[106,129515,129516,129518,129520,129522,129524,129526,129528,129530,129532,129535],{"class":108,"line":1609},[106,129517,129368],{"class":1955},[106,129519,1391],{"class":51294},[106,129521,129451],{"class":1955},[106,129523,117],{"class":116},[106,129525,410],{"class":165},[106,129527,129458],{"class":116},[106,129529,129150],{"class":165},[106,129531,51431],{"class":116},[106,129533,129534],{"class":165},"#ff00ff",[106,129536,129467],{"class":116},[106,129538,129539,129541,129543,129545,129547,129549,129551,129553,129555,129558],{"class":108,"line":1615},[106,129540,129368],{"class":1955},[106,129542,1391],{"class":51294},[106,129544,129451],{"class":1955},[106,129546,117],{"class":116},[106,129548,436],{"class":165},[106,129550,129458],{"class":116},[106,129552,129150],{"class":165},[106,129554,51431],{"class":116},[106,129556,129557],{"class":165},"#00ff00",[106,129559,129467],{"class":116},[48,129561,129563],{"id":129562},"_83-css三大特性","8.3 css三大特性",[77,129565,129567],{"id":129566},"_831-层叠性","8.3.1 层叠性",[14,129569,129570],{},"为了解决样式冲突问题",[14,129572,129573],{},"原则：①样式冲突，遵循的原则是就近原则，哪个样式离结构近，就执行哪个样式",[14,129575,129576],{},"   ②样式不冲突，不会层叠",[77,129578,129580],{"id":129579},"_832-继承性","8.3.2 继承性",[14,129582,129583],{},"子标签会继承父标签的某些样式，如文本颜色和字号。恰当地使用继承可以简化代码，降低 CSS 样式的复杂性",[14,129585,129586],{},"子元素可以继承父元素的样式：text-, font-, line-和color属性",[97,129588,129590],{"className":126537,"code":129589,"language":126539,"meta":25,"style":25},"p {\n  color: #333;\n}\n",[103,129591,129592,129598,129608],{"__ignoreMap":25},[106,129593,129594,129596],{"class":108,"line":109},[106,129595,14],{"class":51294},[106,129597,15565],{"class":116},[106,129599,129600,129602,129604,129606],{"class":108,"line":28},[106,129601,70899],{"class":165},[106,129603,51431],{"class":116},[106,129605,62363],{"class":165},[106,129607,1283],{"class":116},[106,129609,129610],{"class":108,"line":1172},[106,129611,1557],{"class":116},[23,129613],{"style":126393,"src":129614},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-039.png",[14,129616,129617],{},"解释：①行高可以跟单位也可以不跟单位",[14,129619,129620],{},"②如果子元素没有设置行高，则会继承父元素的行高为 1.5",[14,129622,129623],{},"③此时子元素的行高是：当前子元素的文字大小 * 1.5",[14,129625,129626],{},"④body 行高 1.5 这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高",[77,129628,129630],{"id":129629},"_833-优先级","8.3.3 优先级",[60,129632,129633,129636],{},[63,129634,129635],{},"选择器相同，则执行层叠性",[63,129637,129638],{},"选择器不同，则根据选择器权重执行",[254,129640,129641,129651],{},[257,129642,129643],{},[260,129644,129645,129648],{},[263,129646,129647],{"align":23729},"选择器",[263,129649,129650],{"align":23729},"选择器权重",[301,129652,129653,129661,129669,129677,129685,129693],{},[260,129654,129655,129658],{},[306,129656,129657],{"align":23729},"继承 或者*",[306,129659,129660],{"align":23729},"0，0，0，0",[260,129662,129663,129666],{},[306,129664,129665],{"align":23729},"标签选择器",[306,129667,129668],{"align":23729},"0，0，0，1",[260,129670,129671,129674],{},[306,129672,129673],{"align":23729},"类选择器，伪类选择器",[306,129675,129676],{"align":23729},"0，0，1，0",[260,129678,129679,129682],{},[306,129680,129681],{"align":23729},"ID选择器",[306,129683,129684],{"align":23729},"0，1，0，0",[260,129686,129687,129690],{},[306,129688,129689],{"align":23729},"行内样式",[306,129691,129692],{"align":23729},"1，0，0，0",[260,129694,129695,129698],{},[306,129696,129697],{"align":23729},"！important",[306,129699,129700],{"align":23729},"无穷大",[14,129702,129703],{},"! important用法：",[97,129705,129707],{"className":126537,"code":129706,"language":126539,"meta":25,"style":25},"\u002F* !important 拥有最高优先级 *\u002F\ndiv {\n  color: pink !important;\n}\n\u002F* 以下规则不会生效，因为上面有 !important *\u002F\ndiv {\n  color: red;\n}\n",[103,129708,129709,129714,129720,129733,129737,129742,129748,129758],{"__ignoreMap":25},[106,129710,129711],{"class":108,"line":109},[106,129712,129713],{"class":175},"\u002F* !important 拥有最高优先级 *\u002F\n",[106,129715,129716,129718],{"class":108,"line":28},[106,129717,51605],{"class":51294},[106,129719,15565],{"class":116},[106,129721,129722,129724,129726,129728,129731],{"class":108,"line":1172},[106,129723,70899],{"class":165},[106,129725,51431],{"class":116},[106,129727,51639],{"class":165},[106,129729,129730],{"class":112}," !important",[106,129732,1283],{"class":116},[106,129734,129735],{"class":108,"line":1187},[106,129736,1557],{"class":116},[106,129738,129739],{"class":108,"line":1193},[106,129740,129741],{"class":175},"\u002F* 以下规则不会生效，因为上面有 !important *\u002F\n",[106,129743,129744,129746],{"class":108,"line":1207},[106,129745,51605],{"class":51294},[106,129747,15565],{"class":116},[106,129749,129750,129752,129754,129756],{"class":108,"line":1213},[106,129751,70899],{"class":165},[106,129753,51431],{"class":116},[106,129755,57415],{"class":165},[106,129757,1283],{"class":116},[106,129759,129760],{"class":108,"line":1304},[106,129761,1557],{"class":116},[14,129763,129764],{},"优先级注意点：",[14,129766,129767],{},"①权重是有4组数字组成,但是不会有进位",[14,129769,129770],{},"②可以理解为类选择器永远大于元素选择器, id选择器永远大于类选择器,以此类推..",[14,129772,129773],{},"③等级判断从左向右，如果某一位数值相同，则判断下一位数值",[14,129775,129776],{},"④可以简单记忆法: 通配符和继承权重为0, 标签选择器为1,类(伪类)选择器为 10, id选择器 100, 行内样式表为 1000, !important 无穷大.",[14,129778,129779],{},"⑤继承的权重是0， 如果该元素没有直接选中，不管父元素权重多高，子元素得到的权重都是 0",[14,129781,129782],{},"⑥复合选择器",[254,129784,129785,129795],{},[257,129786,129787],{},[260,129788,129789,129792],{},[263,129790,129791],{"align":23729},"div ul li",[263,129793,129794],{"align":23729},"0,0,0,3",[301,129796,129797,129805,129813],{},[260,129798,129799,129802],{},[306,129800,129801],{"align":23729},".nav ul li",[306,129803,129804],{"align":23729},"0,0,1,1这是个带有类选择器的后代选择器，有继承关系，实际最后权重就是一个类选择器加上一个标签选择器",[260,129806,129807,129810],{},[306,129808,129809],{"align":23729},"a:hover",[306,129811,129812],{"align":23729},"0,0,1,1",[260,129814,129815,129818],{},[306,129816,129817],{"align":23729},".nav a",[306,129819,129812],{"align":23729},[5119,129821,129822],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":28,"depth":28,"links":129824},[129825,129833,129844],{"id":127933,"depth":28,"text":127934,"children":129826},[129827,129828,129829,129830,129831,129832],{"id":127946,"depth":1172,"text":127947},{"id":128018,"depth":1172,"text":128019},{"id":128090,"depth":1172,"text":128091},{"id":128121,"depth":1172,"text":128122},{"id":128128,"depth":1172,"text":128129},{"id":128281,"depth":1172,"text":128282},{"id":128589,"depth":28,"text":128590,"children":129834},[129835,129836,129837,129838,129839,129840,129841,129842,129843],{"id":128596,"depth":1172,"text":128597},{"id":128606,"depth":1172,"text":128607},{"id":128702,"depth":1172,"text":128703},{"id":128775,"depth":1172,"text":128776},{"id":128930,"depth":1172,"text":128931},{"id":129018,"depth":1172,"text":129019},{"id":129070,"depth":1172,"text":129071},{"id":129129,"depth":1172,"text":129130},{"id":129234,"depth":1172,"text":129235},{"id":129562,"depth":28,"text":129563,"children":129845},[129846,129847,129848],{"id":129566,"depth":1172,"text":129567},{"id":129579,"depth":1172,"text":129580},{"id":129629,"depth":1172,"text":129630},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch08-css",{"title":127925,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch08-CSS显示模式与背景特性","WYPqfeTLjHk3Kq5wyAvb9PzM-XrgcbuLbMXucvM7Pf4",{"id":129855,"title":129856,"body":129857,"description":30,"extension":31,"meta":131447,"navigation":33,"path":131448,"seo":131449,"stem":131450,"__hash__":131451},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图.md","9. CSS盒模型浮动与切图",{"type":7,"value":129858,"toc":131426},[129859,129862,129866,129869,129872,129875,129878,129881,129884,129887,129891,129899,129936,129972,129975,129989,129994,130028,130031,130124,130129,130132,130162,130165,130170,130178,130182,130189,130235,130279,130284,130287,130290,130293,130296,130299,130302,130304,130307,130311,130316,130360,130365,130368,130371,130408,130413,130416,130419,130422,130425,130457,130460,130463,130466,130498,130501,130504,130507,130511,130514,130546,130549,130553,130573,130576,130584,130587,130591,130596,130599,130631,130636,130639,130677,130681,130686,130689,130692,130723,130726,130743,130748,130800,130860,130865,130919,130957,130961,130965,130968,130972,130980,130983,130985,130996,131001,131049,131083,131086,131089,131092,131095,131139,131142,131145,131148,131151,131154,131157,131201,131204,131207,131210,131213,131216,131219,131225,131228,131272,131275,131278,131281,131284,131287,131331,131334,131336,131339,131343,131347,131385,131389,131392,131395,131399,131407,131411,131414,131417,131420,131423],[10,129860,129856],{"id":129861},"_9-css盒模型浮动与切图",[48,129863,129865],{"id":129864},"_91-盒子模型","9.1 盒子模型",[14,129867,129868],{},"利用盒子来设计网页",[14,129870,129871],{},"盒子包含：边框、外边距、内边距、实际内容",[14,129873,129874],{},"网页布局设置：",[14,129876,129877],{},"①先准备相关的网页元素，网页元素基本都是盒子box",[14,129879,129880],{},"②利用css设置好盒子样式，然后摆放到相应位置",[14,129882,129883],{},"③往盒子里装内容",[23,129885],{"style":126393,"src":129886},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-040.png",[77,129888,129890],{"id":129889},"_911-边框border","9.1.1 边框（border）",[60,129892,129893,129896],{},[63,129894,129895],{},"border可以设置元素的边框。边框有三部分组成：边框宽度(粗细) 边框样式 边框颜色；",[63,129897,129898],{},"语法",[97,129900,129902],{"className":126537,"code":129901,"language":126539,"meta":25,"style":25},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\ndiv {\n  border: 1px solid #ccc;\n}\n",[103,129903,129904,129909,129915,129932],{"__ignoreMap":25},[106,129905,129906],{"class":108,"line":109},[106,129907,129908],{"class":175},"\u002F* 边框复合写法：粗细 样式 颜色 *\u002F\n",[106,129910,129911,129913],{"class":108,"line":28},[106,129912,51605],{"class":51294},[106,129914,15565],{"class":116},[106,129916,129917,129919,129921,129923,129925,129927,129930],{"class":108,"line":1172},[106,129918,70890],{"class":165},[106,129920,51431],{"class":116},[106,129922,334],{"class":165},[106,129924,51486],{"class":112},[106,129926,51515],{"class":165},[106,129928,129929],{"class":165}," #ccc",[106,129931,1283],{"class":116},[106,129933,129934],{"class":108,"line":1187},[106,129935,1557],{"class":116},[254,129937,129938,129946],{},[257,129939,129940],{},[260,129941,129942,129944],{},[263,129943,129139],{"align":23729},[263,129945,102681],{"align":23729},[301,129947,129948,129956,129964],{},[260,129949,129950,129953],{},[306,129951,129952],{"align":23729},"border-width",[306,129954,129955],{"align":23729},"定义边框粗细，单位是px",[260,129957,129958,129961],{},[306,129959,129960],{"align":23729},"border-style",[306,129962,129963],{"align":23729},"边框的样式",[260,129965,129966,129969],{},[306,129967,129968],{"align":23729},"border-color",[306,129970,129971],{"align":23729},"边框的颜色",[14,129973,129974],{},"边框样式 border-style 可以设置如下值：",[1124,129976,129977,129980,129983,129986],{},[63,129978,129979],{},"none：没有边框即忽略所有边框的宽度（默认值）",[63,129981,129982],{},"solid：边框为单实线(最为常用的)",[63,129984,129985],{},"dashed：边框为虚线",[63,129987,129988],{},"dotted：边框为点线",[60,129990,129991],{"start":1172},[63,129992,129993],{},"边框的合写分写",[97,129995,129996],{"className":126537,"code":129901,"language":126539,"meta":25,"style":25},[103,129997,129998,130002,130008,130024],{"__ignoreMap":25},[106,129999,130000],{"class":108,"line":109},[106,130001,129908],{"class":175},[106,130003,130004,130006],{"class":108,"line":28},[106,130005,51605],{"class":51294},[106,130007,15565],{"class":116},[106,130009,130010,130012,130014,130016,130018,130020,130022],{"class":108,"line":1172},[106,130011,70890],{"class":165},[106,130013,51431],{"class":116},[106,130015,334],{"class":165},[106,130017,51486],{"class":112},[106,130019,51515],{"class":165},[106,130021,129929],{"class":165},[106,130023,1283],{"class":116},[106,130025,130026],{"class":108,"line":1187},[106,130027,1557],{"class":116},[14,130029,130030],{},"边框分开写法：",[97,130032,130034],{"className":126537,"code":130033,"language":126539,"meta":25,"style":25},"\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",[103,130035,130036,130041,130047,130065,130083,130102,130120],{"__ignoreMap":25},[106,130037,130038],{"class":108,"line":109},[106,130039,130040],{"class":175},"\u002F* 边框分开写法 *\u002F\n",[106,130042,130043,130045],{"class":108,"line":28},[106,130044,51605],{"class":51294},[106,130046,15565],{"class":116},[106,130048,130049,130052,130054,130056,130058,130060,130063],{"class":108,"line":1172},[106,130050,130051],{"class":165},"  border-top",[106,130053,51431],{"class":116},[106,130055,334],{"class":165},[106,130057,51486],{"class":112},[106,130059,51515],{"class":165},[106,130061,130062],{"class":165}," #000",[106,130064,1283],{"class":116},[106,130066,130067,130070,130072,130074,130076,130078,130081],{"class":108,"line":1187},[106,130068,130069],{"class":165},"  border-right",[106,130071,51431],{"class":116},[106,130073,194],{"class":165},[106,130075,51486],{"class":112},[106,130077,62235],{"class":165},[106,130079,130080],{"class":165}," #333",[106,130082,1283],{"class":116},[106,130084,130085,130088,130090,130092,130094,130097,130100],{"class":108,"line":1193},[106,130086,130087],{"class":165},"  border-bottom",[106,130089,51431],{"class":116},[106,130091,188],{"class":165},[106,130093,51486],{"class":112},[106,130095,130096],{"class":165}," dotted",[106,130098,130099],{"class":165}," #666",[106,130101,1283],{"class":116},[106,130103,130104,130107,130109,130111,130113,130115,130118],{"class":108,"line":1207},[106,130105,130106],{"class":165},"  border-left",[106,130108,51431],{"class":116},[106,130110,334],{"class":165},[106,130112,51486],{"class":112},[106,130114,51515],{"class":165},[106,130116,130117],{"class":165}," #999",[106,130119,1283],{"class":116},[106,130121,130122],{"class":108,"line":1213},[106,130123,1557],{"class":116},[60,130125,130126],{"start":1187},[63,130127,130128],{},"表格的细线边框",[14,130130,130131],{},"border-collapse 属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框",[97,130133,130135],{"className":126537,"code":130134,"language":126539,"meta":25,"style":25},"\u002F* 表格细线边框合并 *\u002F\ntable {\n  border-collapse: collapse;\n}\n",[103,130136,130137,130142,130148,130158],{"__ignoreMap":25},[106,130138,130139],{"class":108,"line":109},[106,130140,130141],{"class":175},"\u002F* 表格细线边框合并 *\u002F\n",[106,130143,130144,130146],{"class":108,"line":28},[106,130145,254],{"class":51294},[106,130147,15565],{"class":116},[106,130149,130150,130152,130154,130156],{"class":108,"line":1172},[106,130151,70572],{"class":165},[106,130153,51431],{"class":116},[106,130155,65029],{"class":165},[106,130157,1283],{"class":116},[106,130159,130160],{"class":108,"line":1187},[106,130161,1557],{"class":116},[14,130163,130164],{},"要知道如果不进行合并的话，单元格之间边框如果原来每个边框1像素，现在就变成了1+1=2像素，边框就会变宽了，所以此时非常合并单元格，保持1像素 border-collapse:collapse",[60,130166,130167],{"start":1193},[63,130168,130169],{},"解决边框额外增加盒子的实际大小的方法：",[1124,130171,130172,130175],{},[63,130173,130174],{},"测量盒子大小的时候,不量边框",[63,130176,130177],{},"如果测量的时候包含了边框,则需要 width\u002Fheight 减去边框宽度",[77,130179,130181],{"id":130180},"_912-内边距","9.1.2 内边距",[60,130183,130184,130187],{},[63,130185,130186],{},"padding 属性用于设置内边距，即边框与内容之间的距离",[63,130188,129898],{},[254,130190,130191,130201],{},[257,130192,130193],{},[260,130194,130195,130198],{},[263,130196,130197],{"align":23729},"值的个数",[263,130199,130200],{"align":23729},"表达意思",[301,130202,130203,130211,130219,130227],{},[260,130204,130205,130208],{},[306,130206,130207],{"align":23729},"padding: 5px;",[306,130209,130210],{"align":23729},"1个值，代表上下左右都有5个元素",[260,130212,130213,130216],{},[306,130214,130215],{"align":23729},"padding: 5px 10px;",[306,130217,130218],{"align":23729},"2个值，代表上下内边距为5像素，左右内边距为10像素",[260,130220,130221,130224],{},[306,130222,130223],{"align":23729},"padding: 5px 10px 20px;",[306,130225,130226],{"align":23729},"3个值，代表上内边距5像素，左右内边距为10像素，下内边距为20像素",[260,130228,130229,130232],{},[306,130230,130231],{"align":23729},"padding: 5px 10px 20px 30px;",[306,130233,130234],{"align":23729},"4个值，上是5像素，右是10像素，下是20像素，左是30像素，顺时针",[254,130236,130237,130245],{},[257,130238,130239],{},[260,130240,130241,130243],{},[263,130242,129139],{"align":23729},[263,130244,102681],{"align":23729},[301,130246,130247,130255,130263,130271],{},[260,130248,130249,130252],{},[306,130250,130251],{"align":23729},"padding-left",[306,130253,130254],{"align":23729},"左内边距",[260,130256,130257,130260],{},[306,130258,130259],{"align":23729},"padding-right",[306,130261,130262],{"align":23729},"右内边距",[260,130264,130265,130268],{},[306,130266,130267],{"align":23729},"padding-top",[306,130269,130270],{"align":23729},"上内边距",[260,130272,130273,130276],{},[306,130274,130275],{"align":23729},"padding-bottom",[306,130277,130278],{"align":23729},"下内边距",[60,130280,130281],{"start":1172},[63,130282,130283],{},"内边距会影响盒子的实际大小",[14,130285,130286],{},"当我们给盒子指定 padding 值之后，发生了 2 件事情：",[14,130288,130289],{},"①内容和边框有了距离，添加了内边距",[14,130291,130292],{},"②padding影响了盒子实际大小",[14,130294,130295],{},"内边距对盒子大小的影响：",[14,130297,130298],{},"①如果盒子已经有了宽度和高度，此时再指定内边框，会影响盒子的实际大小，会撑大盒子",[14,130300,130301],{},"②如何盒子本身没有指定width\u002Fheight属性, 则此时padding不会撑开盒子大小",[14,130303,95205],{},[14,130305,130306],{},"如果保证盒子跟效果图大小保持一致，则让 width\u002Fheight 减去多出来的内边距大小即可",[77,130308,130310],{"id":130309},"_913-外边距","9.1.3 外边距",[60,130312,130313],{},[63,130314,130315],{},"控制盒子与盒子之间的距离",[254,130317,130318,130326],{},[257,130319,130320],{},[260,130321,130322,130324],{},[263,130323,129139],{"align":23729},[263,130325,102681],{"align":23729},[301,130327,130328,130336,130344,130352],{},[260,130329,130330,130333],{},[306,130331,130332],{"align":23729},"margin-left",[306,130334,130335],{"align":23729},"左外边距",[260,130337,130338,130341],{},[306,130339,130340],{"align":23729},"margin-right",[306,130342,130343],{"align":23729},"右外边距",[260,130345,130346,130349],{},[306,130347,130348],{"align":23729},"margin-top",[306,130350,130351],{"align":23729},"上外边距",[260,130353,130354,130357],{},[306,130355,130356],{"align":23729},"margin-bottom",[306,130358,130359],{"align":23729},"下外边距",[60,130361,130362],{"start":28},[63,130363,130364],{},"外边距可以让块级盒子水平居中的两个条件：",[14,130366,130367],{},"①盒子必须指定了宽度（width）",[14,130369,130370],{},"②盒子左右的外边距都设置为 auto",[97,130372,130374],{"className":126537,"code":130373,"language":126539,"meta":25,"style":25},"\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[103,130375,130376,130381,130388,130404],{"__ignoreMap":25},[106,130377,130378],{"class":108,"line":109},[106,130379,130380],{"class":175},"\u002F* margin 复合写法（同上） *\u002F\n",[106,130382,130383,130386],{"class":108,"line":28},[106,130384,130385],{"class":1955},".box",[106,130387,15565],{"class":116},[106,130389,130390,130392,130394,130396,130398,130401],{"class":108,"line":1172},[106,130391,70464],{"class":165},[106,130393,51431],{"class":116},[106,130395,308],{"class":165},[106,130397,51550],{"class":165},[106,130399,130400],{"class":116},";  ",[106,130402,130403],{"class":175},"\u002F* 块级盒子水平居中 *\u002F\n",[106,130405,130406],{"class":108,"line":1187},[106,130407,1557],{"class":116},[60,130409,130410],{"start":1172},[63,130411,130412],{},"外边距塌陷问题",[14,130414,130415],{},"当盒子中嵌套盒子时，让子盒子与父盒子进行隔开时，对子盒子使用margin时，子盒子并不产生影响，子盒子与父盒子没有隔开，父盒子产生了影响，发生了类似于塌陷的效果",[23,130417],{"style":126393,"src":130418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-041.png",[14,130420,130421],{},"解决方案：",[14,130423,130424],{},"①可以为父亲元素定义上边距",[97,130426,130427],{"className":126537,"code":130373,"language":126539,"meta":25,"style":25},[103,130428,130429,130433,130439,130453],{"__ignoreMap":25},[106,130430,130431],{"class":108,"line":109},[106,130432,130380],{"class":175},[106,130434,130435,130437],{"class":108,"line":28},[106,130436,130385],{"class":1955},[106,130438,15565],{"class":116},[106,130440,130441,130443,130445,130447,130449,130451],{"class":108,"line":1172},[106,130442,70464],{"class":165},[106,130444,51431],{"class":116},[106,130446,308],{"class":165},[106,130448,51550],{"class":165},[106,130450,130400],{"class":116},[106,130452,130403],{"class":175},[106,130454,130455],{"class":108,"line":1187},[106,130456,1557],{"class":116},[14,130458,130459],{},"②可以为父亲元素定义上内边距",[14,130461,130462],{},"③可以为父亲元素添加overflow:hidden",[23,130464],{"style":126393,"src":130465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-042.png",[97,130467,130468],{"className":126537,"code":130373,"language":126539,"meta":25,"style":25},[103,130469,130470,130474,130480,130494],{"__ignoreMap":25},[106,130471,130472],{"class":108,"line":109},[106,130473,130380],{"class":175},[106,130475,130476,130478],{"class":108,"line":28},[106,130477,130385],{"class":1955},[106,130479,15565],{"class":116},[106,130481,130482,130484,130486,130488,130490,130492],{"class":108,"line":1172},[106,130483,70464],{"class":165},[106,130485,51431],{"class":116},[106,130487,308],{"class":165},[106,130489,51550],{"class":165},[106,130491,130400],{"class":116},[106,130493,130403],{"class":175},[106,130495,130496],{"class":108,"line":1187},[106,130497,1557],{"class":116},[23,130499],{"style":126393,"src":130500},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-043.png",[14,130502,130503],{},"以后如果父盒子给定了宽高，子盒子要实现在父盒子中的居中效果，如果不给父盒子上边框，子盒子的margin对于竖直方向就会失效，但是水平方向不会失效",[14,130505,130506],{},"解决方式：子盒子使用定位；父盒子加边框；父盒子使用overflow:hidden",[77,130508,130510],{"id":130509},"_914-清除内外边距","9.1.4 清除内外边距",[14,130512,130513],{},"网页元素很多都带有默认的内外边距，而且不同浏览器默认的也不一致。因此我们在布局前，首先要清除下网页元素的内外边距",[97,130515,130516],{"className":126537,"code":130373,"language":126539,"meta":25,"style":25},[103,130517,130518,130522,130528,130542],{"__ignoreMap":25},[106,130519,130520],{"class":108,"line":109},[106,130521,130380],{"class":175},[106,130523,130524,130526],{"class":108,"line":28},[106,130525,130385],{"class":1955},[106,130527,15565],{"class":116},[106,130529,130530,130532,130534,130536,130538,130540],{"class":108,"line":1172},[106,130531,70464],{"class":165},[106,130533,51431],{"class":116},[106,130535,308],{"class":165},[106,130537,51550],{"class":165},[106,130539,130400],{"class":116},[106,130541,130403],{"class":175},[106,130543,130544],{"class":108,"line":1187},[106,130545,1557],{"class":116},[14,130547,130548],{},"注意：行内元素为了照顾兼容性，尽量只设置左右内外边距，不要设置上下内外边距。但是转换为块级和行内块元素就可以了",[77,130550,130552],{"id":130551},"_915-常用ps的基本操作","9.1.5 常用ps的基本操作",[1124,130554,130555,130558,130561,130564,130567,130570],{},[63,130556,130557],{},"文件→打开 ：可以打开我们要测量的图片",[63,130559,130560],{},"Ctrl+R：可以打开标尺，或者 视图→标尺",[63,130562,130563],{},"右击标尺，把里面的单位改为像素",[63,130565,130566],{},"Ctrl+ 加号(+)可以放大视图， Ctrl+ 减号(-)可以缩小视图",[63,130568,130569],{},"按住空格键，鼠标可以变成小手，拖动 PS 视图",[63,130571,130572],{},"用选区拖动 可以测量大小",[23,130574],{"style":126393,"src":130575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-044.png",[1124,130577,130578,130581],{},[63,130579,130580],{},"Ctrl+ D 可以取消选区，或者在旁边空白处点击一下也可以取消选区",[63,130582,130583],{},"吸管取色工具",[23,130585],{"style":126393,"src":130586},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-045.png",[77,130588,130590],{"id":130589},"_916-案例","9.1.6 案例",[60,130592,130593],{},[63,130594,130595],{},"小米商品",[23,130597],{"style":126393,"src":130598},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-046.png",[97,130600,130601],{"className":126537,"code":130373,"language":126539,"meta":25,"style":25},[103,130602,130603,130607,130613,130627],{"__ignoreMap":25},[106,130604,130605],{"class":108,"line":109},[106,130606,130380],{"class":175},[106,130608,130609,130611],{"class":108,"line":28},[106,130610,130385],{"class":1955},[106,130612,15565],{"class":116},[106,130614,130615,130617,130619,130621,130623,130625],{"class":108,"line":1172},[106,130616,70464],{"class":165},[106,130618,51431],{"class":116},[106,130620,308],{"class":165},[106,130622,51550],{"class":165},[106,130624,130400],{"class":116},[106,130626,130403],{"class":175},[106,130628,130629],{"class":108,"line":1187},[106,130630,1557],{"class":116},[60,130632,130633],{"start":28},[63,130634,130635],{},"快报模块",[23,130637],{"style":126393,"src":130638},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-047.png",[97,130640,130642],{"className":127284,"code":130641,"language":127286,"meta":25,"style":25},"\u003C!-- HTML 代码示例 -->\n\u003Cdiv class=\"example\">\n  示例内容\n\u003C\u002Fdiv>\n",[103,130643,130644,130649,130664,130669],{"__ignoreMap":25},[106,130645,130646],{"class":108,"line":109},[106,130647,130648],{"class":175},"\u003C!-- HTML 代码示例 -->\n",[106,130650,130651,130653,130655,130657,130659,130662],{"class":108,"line":28},[106,130652,1027],{"class":116},[106,130654,51605],{"class":51294},[106,130656,53480],{"class":1955},[106,130658,162],{"class":116},[106,130660,130661],{"class":221},"\"example\"",[106,130663,51301],{"class":116},[106,130665,130666],{"class":108,"line":1172},[106,130667,130668],{"class":116},"  示例内容\n",[106,130670,130671,130673,130675],{"class":108,"line":1187},[106,130672,51779],{"class":116},[106,130674,51605],{"class":51294},[106,130676,51301],{"class":116},[77,130678,130680],{"id":130679},"_917-盒子模型css中所用到的其他样式","9.1.7 盒子模型css中所用到的其他样式",[60,130682,130683],{},[63,130684,130685],{},"圆角边框",[14,130687,130688],{},"圆角边框的原理为拿着设定半径的圆去矩形等形状的角位置去截弧",[23,130690],{"style":126393,"src":130691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-048.png",[97,130693,130695],{"className":126537,"code":130694,"language":126539,"meta":25,"style":25},"div {\n  border: 1px solid #ccc;\n}\n",[103,130696,130697,130703,130719],{"__ignoreMap":25},[106,130698,130699,130701],{"class":108,"line":109},[106,130700,51605],{"class":51294},[106,130702,15565],{"class":116},[106,130704,130705,130707,130709,130711,130713,130715,130717],{"class":108,"line":28},[106,130706,70890],{"class":165},[106,130708,51431],{"class":116},[106,130710,334],{"class":165},[106,130712,51486],{"class":112},[106,130714,51515],{"class":165},[106,130716,129929],{"class":165},[106,130718,1283],{"class":116},[106,130720,130721],{"class":108,"line":1172},[106,130722,1557],{"class":116},[14,130724,130725],{},"解释:",[1124,130727,130728,130731,130734,130737,130740],{},[63,130729,130730],{},"参数值可以为数值或百分比的形式",[63,130732,130733],{},"如果是正方形，想要设置为一个圆，把数值修改为高度或者宽度的一半即可，或者直接写为 50%",[63,130735,130736],{},"该属性是一个简写属性，可以跟四个值，分别代表左上角、右上角、右下角、左下角",[63,130738,130739],{},"分开写：border-top-left-radius、border-top-right-radius、border-bottom-right-radius 和border-bottom-left-radius",[63,130741,130742],{},"兼容性 ie9+ 浏览器支持, 但是不会影响页面布局,可以放心使用",[60,130744,130745],{"start":28},[63,130746,130747],{},"盒子阴影",[97,130749,130751],{"className":126537,"code":130750,"language":126539,"meta":25,"style":25},"div {\n  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);\n}\n",[103,130752,130753,130759,130796],{"__ignoreMap":25},[106,130754,130755,130757],{"class":108,"line":109},[106,130756,51605],{"class":51294},[106,130758,15565],{"class":116},[106,130760,130761,130764,130766,130768,130770,130772,130774,130776,130778,130780,130782,130784,130786,130788,130790,130792,130794],{"class":108,"line":28},[106,130762,130763],{"class":165},"  box-shadow",[106,130765,51431],{"class":116},[106,130767,308],{"class":165},[106,130769,14748],{"class":165},[106,130771,51486],{"class":112},[106,130773,2030],{"class":165},[106,130775,51486],{"class":112},[106,130777,78761],{"class":165},[106,130779,117],{"class":116},[106,130781,308],{"class":165},[106,130783,12428],{"class":116},[106,130785,308],{"class":165},[106,130787,12428],{"class":116},[106,130789,308],{"class":165},[106,130791,12428],{"class":116},[106,130793,86204],{"class":165},[106,130795,2711],{"class":116},[106,130797,130798],{"class":108,"line":1172},[106,130799,1557],{"class":116},[254,130801,130802,130810],{},[257,130803,130804],{},[260,130805,130806,130808],{},[263,130807,269],{"align":23729},[263,130809,27483],{"align":23729},[301,130811,130812,130820,130828,130836,130844,130852],{},[260,130813,130814,130817],{},[306,130815,130816],{"align":23729},"h-shadow",[306,130818,130819],{"align":23729},"必需,水平阴影的位置,允许负值",[260,130821,130822,130825],{},[306,130823,130824],{"align":23729},"v-shadow",[306,130826,130827],{"align":23729},"必需,垂直阴影的位置,允许负值",[260,130829,130830,130833],{},[306,130831,130832],{"align":23729},"blur",[306,130834,130835],{"align":23729},"可选,模糊距离,就是影子的虚实",[260,130837,130838,130841],{},[306,130839,130840],{"align":23729},"spread",[306,130842,130843],{"align":23729},"可选,阴影尺寸",[260,130845,130846,130849],{},[306,130847,130848],{"align":23729},"color",[306,130850,130851],{"align":23729},"可选,阴影的颜色",[260,130853,130854,130857],{},[306,130855,130856],{"align":23729},"inset",[306,130858,130859],{"align":23729},"可选,将外部阴影(outset)改为内部阴影",[60,130861,130862],{"start":1172},[63,130863,130864],{},"文字阴影",[97,130866,130868],{"className":126537,"code":130867,"language":126539,"meta":25,"style":25},"p {\n  text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n",[103,130869,130870,130876,130915],{"__ignoreMap":25},[106,130871,130872,130874],{"class":108,"line":109},[106,130873,14],{"class":51294},[106,130875,15565],{"class":116},[106,130877,130878,130881,130883,130885,130887,130889,130891,130893,130895,130897,130899,130901,130903,130905,130907,130909,130911,130913],{"class":108,"line":28},[106,130879,130880],{"class":165},"  text-shadow",[106,130882,51431],{"class":116},[106,130884,334],{"class":165},[106,130886,51486],{"class":112},[106,130888,25112],{"class":165},[106,130890,51486],{"class":112},[106,130892,14748],{"class":165},[106,130894,51486],{"class":112},[106,130896,78761],{"class":165},[106,130898,117],{"class":116},[106,130900,308],{"class":165},[106,130902,12428],{"class":116},[106,130904,308],{"class":165},[106,130906,12428],{"class":116},[106,130908,308],{"class":165},[106,130910,12428],{"class":116},[106,130912,100506],{"class":165},[106,130914,2711],{"class":116},[106,130916,130917],{"class":108,"line":1172},[106,130918,1557],{"class":116},[254,130920,130921,130929],{},[257,130922,130923],{},[260,130924,130925,130927],{},[263,130926,269],{"align":23729},[263,130928,27483],{"align":23729},[301,130930,130931,130937,130944,130951],{},[260,130932,130933,130935],{},[306,130934,130816],{"align":23729},[306,130936,130819],{"align":23729},[260,130938,130939,130941],{},[306,130940,130824],{"align":23729},[306,130942,130943],{"align":23729},"必需,垂直阴影位置,允许负值",[260,130945,130946,130948],{},[306,130947,130832],{"align":23729},[306,130949,130950],{"align":23729},"可选,模糊的距离",[260,130952,130953,130955],{},[306,130954,130848],{"align":23729},[306,130956,130851],{"align":23729},[48,130958,130960],{"id":130959},"_92-浮动","9.2 浮动",[77,130962,130964],{"id":130963},"_921-浮动介绍","9.2.1 浮动介绍",[14,130966,130967],{},"在16.2中详细介绍",[77,130969,130971],{"id":130970},"_922-清除浮动","9.2.2 清除浮动",[60,130973,130974,130977],{},[63,130975,130976],{},"原因：由于父级盒子很多情况下，不方便给高度，但是子盒子浮动又不占有位置，最后父级盒子高度为 0 时，就会影响下面的标准流盒子",[63,130978,130979],{},"清除浮动的本质",[14,130981,130982],{},"清除浮动的本质是清除浮动元素造成的影响：浮动的子标签无法撑开父盒子的高度",[14,130984,9018],{},[1124,130986,130987,130990,130993],{},[63,130988,130989],{},"如果父盒子本身有高度，则不需要清除浮动",[63,130991,130992],{},"清除浮动之后，父级就会根据浮动的子盒子自动检测高度",[63,130994,130995],{},"父级有了高度，就不会影响下面的标准流了",[60,130997,130998],{"start":1172},[63,130999,131000],{},"清除浮动样式",[97,131002,131004],{"className":126537,"code":131003,"language":126539,"meta":25,"style":25},".left {\n  float: left;\n}\n.right {\n  float: right;\n}\n",[103,131005,131006,131013,131024,131028,131035,131045],{"__ignoreMap":25},[106,131007,131008,131011],{"class":108,"line":109},[106,131009,131010],{"class":1955},".left",[106,131012,15565],{"class":116},[106,131014,131015,131018,131020,131022],{"class":108,"line":28},[106,131016,131017],{"class":165},"  float",[106,131019,51431],{"class":116},[106,131021,23729],{"class":165},[106,131023,1283],{"class":116},[106,131025,131026],{"class":108,"line":1172},[106,131027,1557],{"class":116},[106,131029,131030,131033],{"class":108,"line":1187},[106,131031,131032],{"class":1955},".right",[106,131034,15565],{"class":116},[106,131036,131037,131039,131041,131043],{"class":108,"line":1193},[106,131038,131017],{"class":165},[106,131040,51431],{"class":116},[106,131042,72516],{"class":165},[106,131044,1283],{"class":116},[106,131046,131047],{"class":108,"line":1207},[106,131048,1557],{"class":116},[254,131050,131051,131059],{},[257,131052,131053],{},[260,131054,131055,131057],{},[263,131056,127001],{"align":23729},[263,131058,27483],{"align":23729},[301,131060,131061,131068,131075],{},[260,131062,131063,131065],{},[306,131064,23729],{"align":23729},[306,131066,131067],{"align":23729},"不允许左侧有浮动元素（清除左侧浮动的影响）",[260,131069,131070,131072],{},[306,131071,72516],{"align":23729},[306,131073,131074],{"align":23729},"不允许右侧有浮动元素（清除右侧浮动的影响）",[260,131076,131077,131080],{},[306,131078,131079],{"align":23729},"both",[306,131081,131082],{"align":23729},"同时清除左右侧浮动的影响",[14,131084,131085],{},"法一",[14,131087,131088],{},"额外标签法也称为隔墙法",[14,131090,131091],{},"使用方式：",[14,131093,131094],{},"额外标签法会在浮动元素末尾添加一个空的标签。",[97,131096,131097],{"className":126537,"code":131003,"language":126539,"meta":25,"style":25},[103,131098,131099,131105,131115,131119,131125,131135],{"__ignoreMap":25},[106,131100,131101,131103],{"class":108,"line":109},[106,131102,131010],{"class":1955},[106,131104,15565],{"class":116},[106,131106,131107,131109,131111,131113],{"class":108,"line":28},[106,131108,131017],{"class":165},[106,131110,51431],{"class":116},[106,131112,23729],{"class":165},[106,131114,1283],{"class":116},[106,131116,131117],{"class":108,"line":1172},[106,131118,1557],{"class":116},[106,131120,131121,131123],{"class":108,"line":1187},[106,131122,131032],{"class":1955},[106,131124,15565],{"class":116},[106,131126,131127,131129,131131,131133],{"class":108,"line":1193},[106,131128,131017],{"class":165},[106,131130,51431],{"class":116},[106,131132,72516],{"class":165},[106,131134,1283],{"class":116},[106,131136,131137],{"class":108,"line":1207},[106,131138,1557],{"class":116},[14,131140,131141],{},"both这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方这个元素要清除前面所有方向（左、右）的浮动影响，自己要出现在浮动元素的下方",[14,131143,131144],{},"优点： 通俗易懂，书写方便",[14,131146,131147],{},"缺点： 添加许多无意义的标签，结构化较差",[14,131149,131150],{},"注意： 要求这个新的空标签必须是块级元素。",[14,131152,131153],{},"法二",[14,131155,131156],{},"父级添加overflow属性",[97,131158,131159],{"className":126537,"code":131003,"language":126539,"meta":25,"style":25},[103,131160,131161,131167,131177,131181,131187,131197],{"__ignoreMap":25},[106,131162,131163,131165],{"class":108,"line":109},[106,131164,131010],{"class":1955},[106,131166,15565],{"class":116},[106,131168,131169,131171,131173,131175],{"class":108,"line":28},[106,131170,131017],{"class":165},[106,131172,51431],{"class":116},[106,131174,23729],{"class":165},[106,131176,1283],{"class":116},[106,131178,131179],{"class":108,"line":1172},[106,131180,1557],{"class":116},[106,131182,131183,131185],{"class":108,"line":1187},[106,131184,131032],{"class":1955},[106,131186,15565],{"class":116},[106,131188,131189,131191,131193,131195],{"class":108,"line":1193},[106,131190,131017],{"class":165},[106,131192,51431],{"class":116},[106,131194,72516],{"class":165},[106,131196,1283],{"class":116},[106,131198,131199],{"class":108,"line":1207},[106,131200,1557],{"class":116},[14,131202,131203],{},"overflow: hidden;",[14,131205,131206],{},"优点：代码简洁",[14,131208,131209],{},"缺点：无法显示溢出的部分",[14,131211,131212],{},"注意：是给父元素添加代码",[14,131214,131215],{},"法三",[14,131217,131218],{},"父级添加after伪元素",[14,131220,131221,131224],{},[131222,131223],"after",{}," 方式是额外标签法的升级版",[14,131226,131227],{},"使用的时候复制就可以",[97,131229,131230],{"className":126537,"code":131003,"language":126539,"meta":25,"style":25},[103,131231,131232,131238,131248,131252,131258,131268],{"__ignoreMap":25},[106,131233,131234,131236],{"class":108,"line":109},[106,131235,131010],{"class":1955},[106,131237,15565],{"class":116},[106,131239,131240,131242,131244,131246],{"class":108,"line":28},[106,131241,131017],{"class":165},[106,131243,51431],{"class":116},[106,131245,23729],{"class":165},[106,131247,1283],{"class":116},[106,131249,131250],{"class":108,"line":1172},[106,131251,1557],{"class":116},[106,131253,131254,131256],{"class":108,"line":1187},[106,131255,131032],{"class":1955},[106,131257,15565],{"class":116},[106,131259,131260,131262,131264,131266],{"class":108,"line":1193},[106,131261,131017],{"class":165},[106,131263,51431],{"class":116},[106,131265,72516],{"class":165},[106,131267,1283],{"class":116},[106,131269,131270],{"class":108,"line":1207},[106,131271,1557],{"class":116},[14,131273,131274],{},"优点：没有增加标签，结构更简单",[14,131276,131277],{},"缺点：照顾低版本浏览器",[14,131279,131280],{},"代表网站： 百度、淘宝网、网易等",[14,131282,131283],{},"法四",[14,131285,131286],{},"父级添加双伪元素",[97,131288,131289],{"className":126537,"code":131003,"language":126539,"meta":25,"style":25},[103,131290,131291,131297,131307,131311,131317,131327],{"__ignoreMap":25},[106,131292,131293,131295],{"class":108,"line":109},[106,131294,131010],{"class":1955},[106,131296,15565],{"class":116},[106,131298,131299,131301,131303,131305],{"class":108,"line":28},[106,131300,131017],{"class":165},[106,131302,51431],{"class":116},[106,131304,23729],{"class":165},[106,131306,1283],{"class":116},[106,131308,131309],{"class":108,"line":1172},[106,131310,1557],{"class":116},[106,131312,131313,131315],{"class":108,"line":1187},[106,131314,131032],{"class":1955},[106,131316,15565],{"class":116},[106,131318,131319,131321,131323,131325],{"class":108,"line":1193},[106,131320,131017],{"class":165},[106,131322,51431],{"class":116},[106,131324,72516],{"class":165},[106,131326,1283],{"class":116},[106,131328,131329],{"class":108,"line":1207},[106,131330,1557],{"class":116},[14,131332,131333],{},"优点：代码更简洁",[14,131335,131277],{},[14,131337,131338],{},"代表网站：小米、腾讯等",[48,131340,131342],{"id":131341},"_93-ps切图","9.3 PS切图",[77,131344,131346],{"id":131345},"_931-常见图片格式","9.3.1 常见图片格式",[254,131348,131349,131359],{},[257,131350,131351],{},[260,131352,131353,131356],{},[263,131354,131355],{"align":23729},"jpg图像格式",[263,131357,131358],{"align":23729},"对色彩的信息保留较好，高清，颜色较多，产品类的图片经常用",[301,131360,131361,131369,131377],{},[260,131362,131363,131366],{},[306,131364,131365],{"align":23729},"gif图像格式",[306,131367,131368],{"align":23729},"最多只能储存256色，通常用来显示简单图形及字体，但是可以保存透明背景和动画效果，实际经常用于一些图片小动画效果",[260,131370,131371,131374],{},[306,131372,131373],{"align":23729},"png图像格式",[306,131375,131376],{"align":23729},"是一种新型的网络图形格式，结合了GIF和JPEG的优点，具有存储形式丰富的特点，能够保持透明背景。如果想要切成背景透明的图片，选择png格式",[260,131378,131379,131382],{},[306,131380,131381],{"align":23729},"PSD图像格式",[306,131383,131384],{"align":23729},"Photoshop的专用格式，里面可以存放图层、通道、遮罩等多种设计稿，对前端人员来说，最大的优点，可以直接从上面复制文字，获得图片，还可以测量大小和距离，不能直接放到页面",[77,131386,131388],{"id":131387},"_932-图层切图","9.3.2 图层切图",[14,131390,131391],{},"最简单的切图方式：右击图层 → 导出 → 切片",[14,131393,131394],{},"按住shift选中两个图层->图层菜单->合并图层",[77,131396,131398],{"id":131397},"_933-切片切图","9.3.3 切片切图",[1124,131400,131401,131404],{},[63,131402,131403],{},"利用切片工具手动划出",[63,131405,131406],{},"文件菜单 → 存储为 web 设备所用格式 → 选择我们要的图片格式 → 存储",[77,131408,131410],{"id":131409},"_934-切图步骤","9.3.4 切图步骤",[14,131412,131413],{},"用切片工具选中：",[23,131415],{"style":126393,"src":131416},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-049.png",[14,131418,131419],{},"文件 -> 导出",[23,131421],{"style":126393,"src":131422},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-050.png",[5119,131424,131425],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":25,"searchDepth":28,"depth":28,"links":131427},[131428,131437,131441],{"id":129864,"depth":28,"text":129865,"children":131429},[131430,131431,131432,131433,131434,131435,131436],{"id":129889,"depth":1172,"text":129890},{"id":130180,"depth":1172,"text":130181},{"id":130309,"depth":1172,"text":130310},{"id":130509,"depth":1172,"text":130510},{"id":130551,"depth":1172,"text":130552},{"id":130589,"depth":1172,"text":130590},{"id":130679,"depth":1172,"text":130680},{"id":130959,"depth":28,"text":130960,"children":131438},[131439,131440],{"id":130963,"depth":1172,"text":130964},{"id":130970,"depth":1172,"text":130971},{"id":131341,"depth":28,"text":131342,"children":131442},[131443,131444,131445,131446],{"id":131345,"depth":1172,"text":131346},{"id":131387,"depth":1172,"text":131388},{"id":131397,"depth":1172,"text":131398},{"id":131409,"depth":1172,"text":131410},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch09-css",{"title":129856,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch09-CSS盒模型浮动与切图","ylnbHzfjeKRot9DLo6XlwzZ1JmiwKHwMG_dAza53z78",{"id":131453,"title":131454,"body":131455,"description":30,"extension":31,"meta":132096,"navigation":33,"path":132097,"seo":132098,"stem":132099,"__hash__":132100},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例.md","10. CSS规范与学成在线案例",{"type":7,"value":131456,"toc":132084},[131457,131460,131464,131490,131524,131528,131532,131535,131577,131584,131594,131602,131604,131607,131610,131613,131620,131634,131638,131641,131670,131674,131677,131691,131695,131698,131726,131730,131733,131759,131763,131768,131801,131806,131834,131838,131855,131901,131906,131950,131967,132074,132082],[10,131458,131454],{"id":131459},"_10-css规范与学成在线案例",[48,131461,131463],{"id":131462},"_101-css属性书写顺序","10.1 CSS属性书写顺序",[60,131465,131466,131472,131478,131484],{},[63,131467,131468,131471],{},[266,131469,131470],{},"布局定位属性"," ：display \u002F position \u002F float \u002F clear \u002F visibility \u002F overflow（建议 display 第一个写，毕竟关系到模式）",[63,131473,131474,131477],{},[266,131475,131476],{},"自身属性"," ：width \u002F height \u002F margin \u002F padding \u002F border \u002F background",[63,131479,131480,131483],{},[266,131481,131482],{},"文本属性"," ：color \u002F font \u002F text-decoration \u002F text-align \u002F vertical-align \u002F white- space \u002F break-word",[63,131485,131486,131489],{},[266,131487,131488],{},"其他属性（CSS3）"," ：content \u002F cursor \u002F border-radius \u002F box-shadow \u002F text-shadow \u002F background:linear-gradient …",[97,131491,131492],{"className":126537,"code":129901,"language":126539,"meta":25,"style":25},[103,131493,131494,131498,131504,131520],{"__ignoreMap":25},[106,131495,131496],{"class":108,"line":109},[106,131497,129908],{"class":175},[106,131499,131500,131502],{"class":108,"line":28},[106,131501,51605],{"class":51294},[106,131503,15565],{"class":116},[106,131505,131506,131508,131510,131512,131514,131516,131518],{"class":108,"line":1172},[106,131507,70890],{"class":165},[106,131509,51431],{"class":116},[106,131511,334],{"class":165},[106,131513,51486],{"class":112},[106,131515,51515],{"class":165},[106,131517,129929],{"class":165},[106,131519,1283],{"class":116},[106,131521,131522],{"class":108,"line":1187},[106,131523,1557],{"class":116},[48,131525,131527],{"id":131526},"_102-学成在线案例反思总结","10.2 学成在线案例反思总结",[77,131529,131531],{"id":131530},"_1021-header头部制作","10.2.1 header头部制作",[23,131533],{"style":126393,"src":131534},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-051.png",[1124,131536,131537,131544,131551,131557,131564,131571],{},[63,131538,131539,131540,131543],{},"1号是版心盒子 ",[266,131541,131542],{},"header"," 1200 * 42 的盒子水平居中对齐, 上下给一个margin值就好了",[63,131545,131546,131547,131550],{},"版心盒子 里面包含 2号盒子 ",[266,131548,131549],{},"logo"," 图标",[63,131552,131553,131554,131556],{},"版心盒子 里面包含 3号盒子 ",[266,131555,53707],{}," 导航栏",[63,131558,131559,131560,131563],{},"版心盒子 里面包含 4号盒子 ",[266,131561,131562],{},"search"," 搜索框",[63,131565,131566,131567,131570],{},"版心盒子 里面包含 5号盒子 ",[266,131568,131569],{},"user"," 个人信息",[63,131572,131573,131574],{},"注意，要求里面的 ",[266,131575,131576],{},"4个子盒子 必须都浮动",[60,131578,131579],{},[63,131580,131581],{},[266,131582,131583],{},"导航栏注意点:",[14,131585,131586,131587,131590,131591],{},"实际开发中， ",[266,131588,131589],{},"重要的****导航栏","，我们不会直接用链接a ，而是 ",[266,131592,131593],{},"用 li 包含链接(li+a)的做法",[1124,131595,131596,131599],{},[63,131597,131598],{},"li+a 语义更清晰，一看这就是有条理的列表型内容",[63,131600,131601],{},"如果直接用a，搜索引擎容易辨别为有堆砌关键字嫌疑（故意堆砌关键字容易被搜索引擎有降权的风险），从而影响网站排名",[14,131603,9018],{},[14,131605,131606],{},"  ①让导航栏一行显示, 给 li 加浮动, 因为 li 是块级元素, 需要一行显示",[14,131608,131609],{},"  ②这个nav导航栏可以不给宽度,将来可以继续添加其余文字",[14,131611,131612],{},"  ③因为导航栏里面文字不一样多,所以最好给链接 a 左右padding 撑开盒子,而不是指定宽度",[60,131614,131615],{"start":28},[63,131616,131617],{},[266,131618,131619],{},"4号盒子search的细节：",[1124,131621,131622,131625,131628],{},[63,131623,131624],{},"search 搜索框的意思: 一个 search 大盒子里面包含 2个 表单",[63,131626,131627],{},"技巧：input和button都，属于行内块元素，会有缝隙，使用浮动，可以去缝隙",[63,131629,131630,131633],{},[103,131631,131632],{},"\u003Cbutton>``\u003C\u002Fbutton>","按钮不能忘，按钮要手动去除边框",[77,131635,131637],{"id":131636},"_1022-banner制作","10.2.2 banner制作",[23,131639],{"style":126393,"src":131640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-052.png",[1124,131642,131643,131650,131656,131663],{},[63,131644,131645,131646,131649],{},"1号盒子是通栏的大盒子 ",[266,131647,131648],{},"banner"," ， 不给宽度，给高度，给一个蓝色背景",[63,131651,131652,131653,131655],{},"2号盒子是版心 ",[266,131654,912],{}," ， 要水平居中对齐",[63,131657,131658,131659,131662],{},"3号盒子版心内，左对齐 ",[266,131660,131661],{},"subnav"," 侧导航栏",[63,131664,131665,131666,131669],{},"4号盒子版心内，右对齐 ",[266,131667,131668],{},"course"," 课程",[77,131671,131673],{"id":131672},"_1023-精品推荐小模块","10.2.3 精品推荐小模块",[23,131675],{"style":126393,"src":131676},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-053.png",[1124,131678,131679,131682,131685,131688],{},[63,131680,131681],{},"大盒子水平居中 goods 精品 ，注意此处有个盒子阴影",[63,131683,131684],{},"1号盒子是标题 H3 左侧浮动",[63,131686,131687],{},"2号盒子 里面放链接 左侧浮动goods-item距离可以控制链接的 左右外边距（注意行内元素只给左右内外边距）",[63,131689,131690],{},"3号盒子 右浮动 mod 修改",[77,131692,131694],{"id":131693},"_1024-精品推荐大模块","10.2.4 精品推荐大模块",[23,131696],{"style":126393,"src":131697},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-054.png",[1124,131699,131700,131706,131713,131720,131723],{},[63,131701,131702,131703,131705],{},"1号盒子为最大的盒子 ",[266,131704,53708],{}," 版心水平居中对齐",[63,131707,131708,131709,131712],{},"2号盒子为上面部分 ",[266,131710,131711],{},"box-hd"," -- 里面 左侧标题H3 左浮动 右侧 链接 a 右浮动",[63,131714,131715,131716,131719],{},"3号盒子为底下部分 ",[266,131717,131718],{},"box-bd"," --- 里面是无序列表 有 10个 小li 组成",[63,131721,131722],{},"小li 外边距的问题， 在使用li的时候可能因为外边距的问题导致最后一个li盒子在这一行是放不开的，此时可以对ul进行处理，让ul大一点，大的那一块反正是外边距，所以不会有任何的影响，这样就不需要再单独写类选择器，对放不下的li盒子进行处理",[63,131724,131725],{},"复习点：我们用到清除浮动，因为 box-hd 里面的盒子个数不一定是多少，所以我们就不给高度了，但是里面的盒子浮动会影响下面的布局，因此需要清除浮动。",[77,131727,131729],{"id":131728},"_1025-底部模块制作","10.2.5 底部模块制作",[23,131731],{"style":126393,"src":131732},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-055.png",[1124,131734,131735,131742,131745,131752],{},[63,131736,131737,131738,131741],{},"1号盒子通栏大盒子 底部 ",[266,131739,131740],{},"footer"," 给高度 底色是白色",[63,131743,131744],{},"2号盒子版心水平居中",[63,131746,131747,131748,131751],{},"3号盒子版权 ",[266,131749,131750],{},"copyright"," 左对齐",[63,131753,131754,131755,131758],{},"4号盒子 链接组 ",[266,131756,131757],{},"links"," 右对齐",[77,131760,131762],{"id":131761},"_1026-代码模块","10.2.6 代码模块",[60,131764,131765],{},[63,131766,131767],{},"html部分",[97,131769,131771],{"className":127284,"code":131770,"language":127286,"meta":25,"style":25},"\u003Ca href=\"https:\u002F\u002Fexample.com\" target=\"_blank\">链接文字\u003C\u002Fa>\n",[103,131772,131773],{"__ignoreMap":25},[106,131774,131775,131777,131779,131781,131783,131786,131789,131791,131794,131797,131799],{"class":108,"line":109},[106,131776,1027],{"class":116},[106,131778,355],{"class":51294},[106,131780,61051],{"class":1955},[106,131782,162],{"class":116},[106,131784,131785],{"class":221},"\"https:\u002F\u002Fexample.com\"",[106,131787,131788],{"class":1955}," target",[106,131790,162],{"class":116},[106,131792,131793],{"class":221},"\"_blank\"",[106,131795,131796],{"class":116},">链接文字\u003C\u002F",[106,131798,355],{"class":51294},[106,131800,51301],{"class":116},[60,131802,131803],{"start":28},[63,131804,131805],{},"css部分",[97,131807,131808],{"className":127284,"code":131770,"language":127286,"meta":25,"style":25},[103,131809,131810],{"__ignoreMap":25},[106,131811,131812,131814,131816,131818,131820,131822,131824,131826,131828,131830,131832],{"class":108,"line":109},[106,131813,1027],{"class":116},[106,131815,355],{"class":51294},[106,131817,61051],{"class":1955},[106,131819,162],{"class":116},[106,131821,131785],{"class":221},[106,131823,131788],{"class":1955},[106,131825,162],{"class":116},[106,131827,131793],{"class":221},[106,131829,131796],{"class":116},[106,131831,355],{"class":51294},[106,131833,51301],{"class":116},[77,131835,131837],{"id":131836},"_1027-收获","10.2.7 收获",[60,131839,131840,131843,131846,131849,131852],{},[63,131841,131842],{},"先确定版心，然后写一个类选择器，直接后边的就直接调用这个类选择器就可以",[63,131844,131845],{},"在设置导航栏时，对于横的导航栏对li设置浮动，对a设置大小就可以，对于竖的导航栏对li设置宽高，以后这样做，保证书写规范",[63,131847,131848],{},"行内块元素之间有空隙，解决的一个好方法是设置浮动",[63,131850,131851],{},"设置用户的时候要灵活使用img标签，一个盒子放头像和名字",[63,131853,131854],{},"遗忘代码",[97,131856,131858],{"className":126537,"code":131857,"language":126539,"meta":25,"style":25},"div, p, h1, ul, li {\n  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n  display: block;\n}\n",[103,131859,131860,131882,131887,131897],{"__ignoreMap":25},[106,131861,131862,131864,131866,131868,131870,131872,131874,131876,131878,131880],{"class":108,"line":109},[106,131863,51605],{"class":51294},[106,131865,12428],{"class":116},[106,131867,14],{"class":51294},[106,131869,12428],{"class":116},[106,131871,10],{"class":51294},[106,131873,12428],{"class":116},[106,131875,1124],{"class":51294},[106,131877,12428],{"class":116},[106,131879,63],{"class":51294},[106,131881,15565],{"class":116},[106,131883,131884],{"class":108,"line":28},[106,131885,131886],{"class":175},"  \u002F* 块级元素：独占一行，可设宽高 *\u002F\n",[106,131888,131889,131891,131893,131895],{"class":108,"line":1172},[106,131890,128153],{"class":165},[106,131892,51431],{"class":116},[106,131894,60863],{"class":165},[106,131896,1283],{"class":116},[106,131898,131899],{"class":108,"line":1187},[106,131900,1557],{"class":116},[60,131902,131903],{"start":1207},[63,131904,131905],{},"html引css的程序",[97,131907,131908],{"className":126537,"code":131857,"language":126539,"meta":25,"style":25},[103,131909,131910,131932,131936,131946],{"__ignoreMap":25},[106,131911,131912,131914,131916,131918,131920,131922,131924,131926,131928,131930],{"class":108,"line":109},[106,131913,51605],{"class":51294},[106,131915,12428],{"class":116},[106,131917,14],{"class":51294},[106,131919,12428],{"class":116},[106,131921,10],{"class":51294},[106,131923,12428],{"class":116},[106,131925,1124],{"class":51294},[106,131927,12428],{"class":116},[106,131929,63],{"class":51294},[106,131931,15565],{"class":116},[106,131933,131934],{"class":108,"line":28},[106,131935,131886],{"class":175},[106,131937,131938,131940,131942,131944],{"class":108,"line":1172},[106,131939,128153],{"class":165},[106,131941,51431],{"class":116},[106,131943,60863],{"class":165},[106,131945,1283],{"class":116},[106,131947,131948],{"class":108,"line":1187},[106,131949,1557],{"class":116},[60,131951,131952,131955,131958,131961,131964],{"start":1213},[63,131953,131954],{},"浮动的盒子不会有外边距合并问题",[63,131956,131957],{},"子盒子没有设置宽高，是直接继承父盒子的宽高的，此时给子盒子设置padding,是不会撑大父盒子的，可以理解为已经约束了子盒子，子盒子在确定空间中再如何动，也不会打破空间",[63,131959,131960],{},"ctrl+g快速定位行；shift+alt多个光标",[63,131962,131963],{},"学习上方各个模块的选择器起名方法，以后就这样用",[63,131965,131966],{},"在写选择器时尽量写全一些，例如",[97,131968,131970],{"className":126537,"code":131969,"language":126539,"meta":25,"style":25},"\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",[103,131971,131972,131977,131993,131998,132013,132018,132033,132038,132053,132058],{"__ignoreMap":25},[106,131973,131974],{"class":108,"line":109},[106,131975,131976],{"class":175},"\u002F* 静态定位（默认） *\u002F\n",[106,131978,131979,131982,131984,131986,131988,131991],{"class":108,"line":28},[106,131980,131981],{"class":1955},".static",[106,131983,79801],{"class":116},[106,131985,128897],{"class":165},[106,131987,51431],{"class":116},[106,131989,131990],{"class":165},"static",[106,131992,129467],{"class":116},[106,131994,131995],{"class":108,"line":1172},[106,131996,131997],{"class":175},"\u002F* 相对定位 *\u002F\n",[106,131999,132000,132003,132005,132007,132009,132011],{"class":108,"line":1187},[106,132001,132002],{"class":1955},".relative",[106,132004,79801],{"class":116},[106,132006,128897],{"class":165},[106,132008,51431],{"class":116},[106,132010,54758],{"class":165},[106,132012,129467],{"class":116},[106,132014,132015],{"class":108,"line":1193},[106,132016,132017],{"class":175},"\u002F* 绝对定位 *\u002F\n",[106,132019,132020,132023,132025,132027,132029,132031],{"class":108,"line":1207},[106,132021,132022],{"class":1955},".absolute",[106,132024,79801],{"class":116},[106,132026,128897],{"class":165},[106,132028,51431],{"class":116},[106,132030,54825],{"class":165},[106,132032,129467],{"class":116},[106,132034,132035],{"class":108,"line":1213},[106,132036,132037],{"class":175},"\u002F* 固定定位 *\u002F\n",[106,132039,132040,132043,132045,132047,132049,132051],{"class":108,"line":1304},[106,132041,132042],{"class":1955},".fixed",[106,132044,79801],{"class":116},[106,132046,128897],{"class":165},[106,132048,51431],{"class":116},[106,132050,86227],{"class":165},[106,132052,129467],{"class":116},[106,132054,132055],{"class":108,"line":1310},[106,132056,132057],{"class":175},"\u002F* 粘性定位 *\u002F\n",[106,132059,132060,132063,132065,132067,132069,132072],{"class":108,"line":1322},[106,132061,132062],{"class":1955},".sticky",[106,132064,79801],{"class":116},[106,132066,128897],{"class":165},[106,132068,51431],{"class":116},[106,132070,132071],{"class":165},"sticky",[106,132073,129467],{"class":116},[60,132075,132076,132079],{"start":1609},[63,132077,132078],{},"一定要用好注释",[63,132080,132081],{},"浮动的盒子不会有外边距合并的问题",[5119,132083,131425],{},{"title":25,"searchDepth":28,"depth":28,"links":132085},[132086,132087],{"id":131462,"depth":28,"text":131463},{"id":131526,"depth":28,"text":131527,"children":132088},[132089,132090,132091,132092,132093,132094,132095],{"id":131530,"depth":1172,"text":131531},{"id":131636,"depth":1172,"text":131637},{"id":131672,"depth":1172,"text":131673},{"id":131693,"depth":1172,"text":131694},{"id":131728,"depth":1172,"text":131729},{"id":131761,"depth":1172,"text":131762},{"id":131836,"depth":1172,"text":131837},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch10-css",{"title":131454,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch10-CSS规范与学成在线案例","FzyF0-YC56Akf2OLJPi7lkaiI8deiVEFNwhHCIOG39Y",{"id":132102,"title":132103,"body":132104,"description":30,"extension":31,"meta":133590,"navigation":33,"path":133591,"seo":133592,"stem":133593,"__hash__":133594},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系.md","11. 传统布局与定位体系",{"type":7,"value":132105,"toc":133582},[132106,132109,132113,132117,132128,132132,132149,132193,132226,132229,132246,132249,132252,132296,132300,132304,132307,132310,132314,132317,132328,132391,132432,132435,132450,132504,132512,132515,132526,132580,132606,132609,132622,132676,132708,132762,132785,132839,132842,132845,132852,132906,132927,132981,132984,132987,133072,133080,133137,133160,133164,133167,133185,133189,133208,133262,133300,133304,133307,133310,133332,133336,133344,133347,133352,133363,133366,133370,133384,133428,133431,133435,133438,133443,133469,133474,133551,133554,133558,133561,133564,133567,133570,133573,133576,133579],[10,132107,132103],{"id":132108},"_11-传统布局与定位体系",[48,132110,132112],{"id":132111},"_111-传统网页布局的三种方式","11.1 传统网页布局的三种方式",[77,132114,132116],{"id":132115},"_1111-普通流标准流","11.1.1 普通流（标准流）",[1124,132118,132119,132122,132125],{},[63,132120,132121],{},"所谓的标准流: 就是标签按照规定好默认方式排列",[63,132123,132124],{},"块级元素会独占一行，从上向下顺序排列。常用元素：div、hr、p、h1~h6、ul、ol、dl、form、table",[63,132126,132127],{},"行内元素会按照顺序，从左到右顺序排列，碰到父元素边缘则自动换行。常用元素：span、a、i、em 等",[77,132129,132131],{"id":132130},"_1112-浮动","11.1.2 浮动",[1124,132133,132134,132137,132140,132143,132146],{},[63,132135,132136],{},"float 属性用于创建浮动框，将其移动到一边，直到左边缘或右边缘触及包含块或另一个浮动框的边缘",[63,132138,132139],{},"浮动可以改变元素标签默认的排列方式",[63,132141,132142],{},"浮动最典型的应用：可以让多个块级元素一行内排列显示",[63,132144,132145],{},"网页布局第一准则：多个块级元素纵向排列找标准流，多个块级元素横向排列找浮动",[63,132147,132148],{},"在使用行内块转换时盒子之间是有空隙的",[97,132150,132151],{"className":126537,"code":131003,"language":126539,"meta":25,"style":25},[103,132152,132153,132159,132169,132173,132179,132189],{"__ignoreMap":25},[106,132154,132155,132157],{"class":108,"line":109},[106,132156,131010],{"class":1955},[106,132158,15565],{"class":116},[106,132160,132161,132163,132165,132167],{"class":108,"line":28},[106,132162,131017],{"class":165},[106,132164,51431],{"class":116},[106,132166,23729],{"class":165},[106,132168,1283],{"class":116},[106,132170,132171],{"class":108,"line":1172},[106,132172,1557],{"class":116},[106,132174,132175,132177],{"class":108,"line":1187},[106,132176,131032],{"class":1955},[106,132178,15565],{"class":116},[106,132180,132181,132183,132185,132187],{"class":108,"line":1193},[106,132182,131017],{"class":165},[106,132184,51431],{"class":116},[106,132186,72516],{"class":165},[106,132188,1283],{"class":116},[106,132190,132191],{"class":108,"line":1207},[106,132192,1557],{"class":116},[254,132194,132195,132203],{},[257,132196,132197],{},[260,132198,132199,132201],{},[263,132200,127001],{"align":23729},[263,132202,27483],{"align":23729},[301,132204,132205,132212,132219],{},[260,132206,132207,132209],{},[306,132208,54731],{"align":23729},[306,132210,132211],{"align":23729},"元素不浮动（默认值）",[260,132213,132214,132216],{},[306,132215,23729],{"align":23729},[306,132217,132218],{"align":23729},"元素向左浮动",[260,132220,132221,132223],{},[306,132222,72516],{"align":23729},[306,132224,132225],{"align":23729},"元素向右浮动",[14,132227,132228],{},"浮动重点：",[1124,132230,132231,132234,132237,132240,132243],{},[63,132232,132233],{},"浮动元素会脱离标准流(脱标：浮动的盒子不再保留原先的位置)",[63,132235,132236],{},"浮动的元素会一行内显示并且元素顶部对齐",[63,132238,132239],{},"浮动的元素是互相贴靠在一起的（不会有缝隙），如果父级宽度装不下这些浮动的盒子，多出的盒子会另起一行对齐",[63,132241,132242],{},"浮动的元素会具有行内块元素的特性：①浮动元素的大小根据内容来决定；②浮动的盒子之间没有缝隙(行内元素有了浮动，则不需要转换块级\\行内块元素就可以直接给高度和宽度)",[63,132244,132245],{},"行内块元素如果没有设置宽度，则盒子大小受内容影响，内容多则就宽",[14,132247,132248],{},"设计策略：先用标准流父元素排列上下位置, 之后内部子元素采取浮动排列左右位置. 符合网页布局第一准侧",[14,132250,132251],{},"浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流",[97,132253,132254],{"className":126537,"code":131003,"language":126539,"meta":25,"style":25},[103,132255,132256,132262,132272,132276,132282,132292],{"__ignoreMap":25},[106,132257,132258,132260],{"class":108,"line":109},[106,132259,131010],{"class":1955},[106,132261,15565],{"class":116},[106,132263,132264,132266,132268,132270],{"class":108,"line":28},[106,132265,131017],{"class":165},[106,132267,51431],{"class":116},[106,132269,23729],{"class":165},[106,132271,1283],{"class":116},[106,132273,132274],{"class":108,"line":1172},[106,132275,1557],{"class":116},[106,132277,132278,132280],{"class":108,"line":1187},[106,132279,131032],{"class":1955},[106,132281,15565],{"class":116},[106,132283,132284,132286,132288,132290],{"class":108,"line":1193},[106,132285,131017],{"class":165},[106,132287,51431],{"class":116},[106,132289,72516],{"class":165},[106,132291,1283],{"class":116},[106,132293,132294],{"class":108,"line":1207},[106,132295,1557],{"class":116},[77,132297,132299],{"id":132298},"_1113-定位","11.1.3 定位",[21991,132301,132303],{"id":132302},"_11131-使用场景","11.1.3.1 使用场景",[14,132305,132306],{},"①某个元素可以自由的在一个盒子内移动位置，并且压住其他盒子",[14,132308,132309],{},"②当我们滚动窗口的时候，盒子是固定屏幕某个位置的",[21991,132311,132313],{"id":132312},"_11132-定位组成","11.1.3.2 定位组成",[14,132315,132316],{},"定位 = 定位模式 + 边偏移",[60,132318,132319],{},[63,132320,132321,132324,132325],{},[266,132322,132323],{},"定位模式："," 用于指定一个元素在文档中的定位方式通过 position属性定义元素的 ",[266,132326,132327],{},"定位模式",[97,132329,132331],{"className":126537,"code":132330,"language":126539,"meta":25,"style":25},".box {\n  position: relative;  \u002F* 定位模式 *\u002F\n  top: 10px;           \u002F* 边偏移：上 *\u002F\n  left: 20px;          \u002F* 边偏移：左 *\u002F\n}\n",[103,132332,132333,132339,132353,132370,132387],{"__ignoreMap":25},[106,132334,132335,132337],{"class":108,"line":109},[106,132336,130385],{"class":1955},[106,132338,15565],{"class":116},[106,132340,132341,132344,132346,132348,132350],{"class":108,"line":28},[106,132342,132343],{"class":165},"  position",[106,132345,51431],{"class":116},[106,132347,54758],{"class":165},[106,132349,130400],{"class":116},[106,132351,132352],{"class":175},"\u002F* 定位模式 *\u002F\n",[106,132354,132355,132358,132360,132362,132364,132367],{"class":108,"line":1172},[106,132356,132357],{"class":165},"  top",[106,132359,51431],{"class":116},[106,132361,563],{"class":165},[106,132363,51486],{"class":112},[106,132365,132366],{"class":116},";           ",[106,132368,132369],{"class":175},"\u002F* 边偏移：上 *\u002F\n",[106,132371,132372,132375,132377,132379,132381,132384],{"class":108,"line":1187},[106,132373,132374],{"class":165},"  left",[106,132376,51431],{"class":116},[106,132378,817],{"class":165},[106,132380,51486],{"class":112},[106,132382,132383],{"class":116},";          ",[106,132385,132386],{"class":175},"\u002F* 边偏移：左 *\u002F\n",[106,132388,132389],{"class":108,"line":1193},[106,132390,1557],{"class":116},[254,132392,132393,132402],{},[257,132394,132395],{},[260,132396,132397,132399],{},[263,132398,269],{"align":23729},[263,132400,132401],{"align":23729},"语义",[301,132403,132404,132411,132418,132425],{},[260,132405,132406,132408],{},[306,132407,131990],{"align":23729},[306,132409,132410],{"align":23729},"静态定位",[260,132412,132413,132415],{},[306,132414,54758],{"align":23729},[306,132416,132417],{"align":23729},"相对定位",[260,132419,132420,132422],{},[306,132421,54825],{"align":23729},[306,132423,132424],{"align":23729},"绝对定位",[260,132426,132427,132429],{},[306,132428,86227],{"align":23729},[306,132430,132431],{"align":23729},"固定定位",[14,132433,132434],{},"（1）静态定位：",[1124,132436,132437,132448],{},[63,132438,132439,132440,132443,132444,132447],{},"静态定位是元素的 ",[266,132441,132442],{},"默认定位方式"," ， ",[266,132445,132446],{},"无定位的意思"," 。它相当于 border 里面的none，静态定位static，不要定位的时候用",[63,132449,5174],{},[97,132451,132452],{"className":126537,"code":132330,"language":126539,"meta":25,"style":25},[103,132453,132454,132460,132472,132486,132500],{"__ignoreMap":25},[106,132455,132456,132458],{"class":108,"line":109},[106,132457,130385],{"class":1955},[106,132459,15565],{"class":116},[106,132461,132462,132464,132466,132468,132470],{"class":108,"line":28},[106,132463,132343],{"class":165},[106,132465,51431],{"class":116},[106,132467,54758],{"class":165},[106,132469,130400],{"class":116},[106,132471,132352],{"class":175},[106,132473,132474,132476,132478,132480,132482,132484],{"class":108,"line":1172},[106,132475,132357],{"class":165},[106,132477,51431],{"class":116},[106,132479,563],{"class":165},[106,132481,51486],{"class":112},[106,132483,132366],{"class":116},[106,132485,132369],{"class":175},[106,132487,132488,132490,132492,132494,132496,132498],{"class":108,"line":1187},[106,132489,132374],{"class":165},[106,132491,51431],{"class":116},[106,132493,817],{"class":165},[106,132495,51486],{"class":112},[106,132497,132383],{"class":116},[106,132499,132386],{"class":175},[106,132501,132502],{"class":108,"line":1193},[106,132503,1557],{"class":116},[1124,132505,132506,132509],{},[63,132507,132508],{},"静态定位 按照标准流特性摆放位置，它没有边偏移,可以理解为静态定位就是标准流",[63,132510,132511],{},"静态定位在布局时我们几乎不用的",[14,132513,132514],{},"（2）相对定位",[1124,132516,132517,132524],{},[63,132518,132519,132520,132523],{},"相对定位是元素在移动位置的时候，是相对于它自己 ",[266,132521,132522],{},"原来的位置"," 来说的（自恋型）",[63,132525,5174],{},[97,132527,132528],{"className":126537,"code":132330,"language":126539,"meta":25,"style":25},[103,132529,132530,132536,132548,132562,132576],{"__ignoreMap":25},[106,132531,132532,132534],{"class":108,"line":109},[106,132533,130385],{"class":1955},[106,132535,15565],{"class":116},[106,132537,132538,132540,132542,132544,132546],{"class":108,"line":28},[106,132539,132343],{"class":165},[106,132541,51431],{"class":116},[106,132543,54758],{"class":165},[106,132545,130400],{"class":116},[106,132547,132352],{"class":175},[106,132549,132550,132552,132554,132556,132558,132560],{"class":108,"line":1172},[106,132551,132357],{"class":165},[106,132553,51431],{"class":116},[106,132555,563],{"class":165},[106,132557,51486],{"class":112},[106,132559,132366],{"class":116},[106,132561,132369],{"class":175},[106,132563,132564,132566,132568,132570,132572,132574],{"class":108,"line":1187},[106,132565,132374],{"class":165},[106,132567,51431],{"class":116},[106,132569,817],{"class":165},[106,132571,51486],{"class":112},[106,132573,132383],{"class":116},[106,132575,132386],{"class":175},[106,132577,132578],{"class":108,"line":1193},[106,132579,1557],{"class":116},[1124,132581,132582],{},[63,132583,132584,132585,132587,132588,132590,132591,132594,132595,132598,132599,132601,132602,132605],{},"相对定位的特点：",[53710,132586],{},"  ①它是相对于自己原来的位置来移动的（移动位置的时候参照点是自己原来的位置）",[53710,132589],{},"  ② ",[266,132592,132593],{},"原来"," 在标准流的 ",[266,132596,132597],{},"位置"," 继续占有，后面的盒子仍然以标准流的方式对待它，原来的位置和现在的位置都不影响后面盒子的位置",[53710,132600],{},"  ③因此， ",[266,132603,132604],{},"相对定位并没有脱标"," 。它最典型的应用是给绝对定位当爹的,相对定位是用来限制绝对定位的",[14,132607,132608],{},"（3）绝对定位",[1124,132610,132611,132620],{},[63,132612,132613,132615,132616,132619],{},[266,132614,132424],{}," 是元素在移动位置的时候，是相对于它 ",[266,132617,132618],{},"祖先元素"," 来说的（拼爹型）",[63,132621,5174],{},[97,132623,132624],{"className":126537,"code":132330,"language":126539,"meta":25,"style":25},[103,132625,132626,132632,132644,132658,132672],{"__ignoreMap":25},[106,132627,132628,132630],{"class":108,"line":109},[106,132629,130385],{"class":1955},[106,132631,15565],{"class":116},[106,132633,132634,132636,132638,132640,132642],{"class":108,"line":28},[106,132635,132343],{"class":165},[106,132637,51431],{"class":116},[106,132639,54758],{"class":165},[106,132641,130400],{"class":116},[106,132643,132352],{"class":175},[106,132645,132646,132648,132650,132652,132654,132656],{"class":108,"line":1172},[106,132647,132357],{"class":165},[106,132649,51431],{"class":116},[106,132651,563],{"class":165},[106,132653,51486],{"class":112},[106,132655,132366],{"class":116},[106,132657,132369],{"class":175},[106,132659,132660,132662,132664,132666,132668,132670],{"class":108,"line":1187},[106,132661,132374],{"class":165},[106,132663,51431],{"class":116},[106,132665,817],{"class":165},[106,132667,51486],{"class":112},[106,132669,132383],{"class":116},[106,132671,132386],{"class":175},[106,132673,132674],{"class":108,"line":1193},[106,132675,1557],{"class":116},[1124,132677,132678,132693,132702,132705],{},[63,132679,132680,132681,132683,132684,132686,132687,132689,132690,132692],{},"绝对定位的特点：",[53710,132682],{},"  ①如果没有祖先元素或者祖先元素没有定位，则以浏览器为准定位",[53710,132685],{},"  ②如果祖先元素有定位（相对、绝对、固定定位），则以最近一级的有定位祖先元素为参考点移动位置",[53710,132688],{},"  ③绝对定位不再占有原先的位置。所以绝对定位是脱离标准流的。可以理解为绝对定位比浮动飘的更高（脱标）",[53710,132691],{},"  (4)固定定位",[63,132694,132695,132697,132698,132701],{},[266,132696,132431],{}," 是元素 ",[266,132699,132700],{},"固定于浏览器可视区的位置"," 。（认死理型）",[63,132703,132704],{},"主要使用场景：可以在浏览器页面滚动时元素的位置不会改变",[63,132706,132707],{},"语法:",[97,132709,132710],{"className":126537,"code":132330,"language":126539,"meta":25,"style":25},[103,132711,132712,132718,132730,132744,132758],{"__ignoreMap":25},[106,132713,132714,132716],{"class":108,"line":109},[106,132715,130385],{"class":1955},[106,132717,15565],{"class":116},[106,132719,132720,132722,132724,132726,132728],{"class":108,"line":28},[106,132721,132343],{"class":165},[106,132723,51431],{"class":116},[106,132725,54758],{"class":165},[106,132727,130400],{"class":116},[106,132729,132352],{"class":175},[106,132731,132732,132734,132736,132738,132740,132742],{"class":108,"line":1172},[106,132733,132357],{"class":165},[106,132735,51431],{"class":116},[106,132737,563],{"class":165},[106,132739,51486],{"class":112},[106,132741,132366],{"class":116},[106,132743,132369],{"class":175},[106,132745,132746,132748,132750,132752,132754,132756],{"class":108,"line":1187},[106,132747,132374],{"class":165},[106,132749,51431],{"class":116},[106,132751,817],{"class":165},[106,132753,51486],{"class":112},[106,132755,132383],{"class":116},[106,132757,132386],{"class":175},[106,132759,132760],{"class":108,"line":1193},[106,132761,1557],{"class":116},[1124,132763,132764,132773],{},[63,132765,132766,132767,132769,132770,132772],{},"特点:",[53710,132768],{},"  ①.以浏览器的可视窗口为参照点移动元素,跟父元素没有任何关系,不随滚动条滚动",[53710,132771],{},"  ②固定定位不再占有原先的位置,完全脱标",[63,132774,132775,132776,132778,132779,132781,132782,132784],{},"固定在版心位置的方法:",[53710,132777],{},"  ①让固定定位的盒子 left: 50%. 走到浏览器可视区（也可以看做版心） 的一半位置",[53710,132780],{},"  ②让固定定位的盒子 margin-left: 版心宽度的一半距离。 多走版心宽度的一半位置",[53710,132783],{},"  实例：",[97,132786,132787],{"className":126537,"code":132330,"language":126539,"meta":25,"style":25},[103,132788,132789,132795,132807,132821,132835],{"__ignoreMap":25},[106,132790,132791,132793],{"class":108,"line":109},[106,132792,130385],{"class":1955},[106,132794,15565],{"class":116},[106,132796,132797,132799,132801,132803,132805],{"class":108,"line":28},[106,132798,132343],{"class":165},[106,132800,51431],{"class":116},[106,132802,54758],{"class":165},[106,132804,130400],{"class":116},[106,132806,132352],{"class":175},[106,132808,132809,132811,132813,132815,132817,132819],{"class":108,"line":1172},[106,132810,132357],{"class":165},[106,132812,51431],{"class":116},[106,132814,563],{"class":165},[106,132816,51486],{"class":112},[106,132818,132366],{"class":116},[106,132820,132369],{"class":175},[106,132822,132823,132825,132827,132829,132831,132833],{"class":108,"line":1187},[106,132824,132374],{"class":165},[106,132826,51431],{"class":116},[106,132828,817],{"class":165},[106,132830,51486],{"class":112},[106,132832,132383],{"class":116},[106,132834,132386],{"class":175},[106,132836,132837],{"class":108,"line":1193},[106,132838,1557],{"class":116},[23,132840],{"style":126393,"src":132841},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-056.png",[14,132843,132844],{},"(5)粘性定位",[1124,132846,132847,132850],{},[63,132848,132849],{},"粘性定位可以被认为是相对定位和固定定位的混合",[63,132851,5174],{},[97,132853,132854],{"className":126537,"code":132330,"language":126539,"meta":25,"style":25},[103,132855,132856,132862,132874,132888,132902],{"__ignoreMap":25},[106,132857,132858,132860],{"class":108,"line":109},[106,132859,130385],{"class":1955},[106,132861,15565],{"class":116},[106,132863,132864,132866,132868,132870,132872],{"class":108,"line":28},[106,132865,132343],{"class":165},[106,132867,51431],{"class":116},[106,132869,54758],{"class":165},[106,132871,130400],{"class":116},[106,132873,132352],{"class":175},[106,132875,132876,132878,132880,132882,132884,132886],{"class":108,"line":1172},[106,132877,132357],{"class":165},[106,132879,51431],{"class":116},[106,132881,563],{"class":165},[106,132883,51486],{"class":112},[106,132885,132366],{"class":116},[106,132887,132369],{"class":175},[106,132889,132890,132892,132894,132896,132898,132900],{"class":108,"line":1187},[106,132891,132374],{"class":165},[106,132893,51431],{"class":116},[106,132895,817],{"class":165},[106,132897,51486],{"class":112},[106,132899,132383],{"class":116},[106,132901,132386],{"class":175},[106,132903,132904],{"class":108,"line":1193},[106,132905,1557],{"class":116},[1124,132907,132908],{},[63,132909,132910,132911,132913,132914,132916,132917,132919,132920,132923,132924,132926],{},"粘性定位的特点：",[53710,132912],{},"  ①以浏览器的可视窗口为参照点移动元素（固定定位特点）",[53710,132915],{},"  ②粘性定位占有原先的位置（相对定位特点）",[53710,132918],{},"  ③必须添加 top 、left、right、bottom ",[266,132921,132922],{},"其中一个"," 才有效",[53710,132925],{},"  ④跟页面滚动搭配使用。 兼容性较差，IE 不支持",[97,132928,132929],{"className":126537,"code":132330,"language":126539,"meta":25,"style":25},[103,132930,132931,132937,132949,132963,132977],{"__ignoreMap":25},[106,132932,132933,132935],{"class":108,"line":109},[106,132934,130385],{"class":1955},[106,132936,15565],{"class":116},[106,132938,132939,132941,132943,132945,132947],{"class":108,"line":28},[106,132940,132343],{"class":165},[106,132942,51431],{"class":116},[106,132944,54758],{"class":165},[106,132946,130400],{"class":116},[106,132948,132352],{"class":175},[106,132950,132951,132953,132955,132957,132959,132961],{"class":108,"line":1172},[106,132952,132357],{"class":165},[106,132954,51431],{"class":116},[106,132956,563],{"class":165},[106,132958,51486],{"class":112},[106,132960,132366],{"class":116},[106,132962,132369],{"class":175},[106,132964,132965,132967,132969,132971,132973,132975],{"class":108,"line":1187},[106,132966,132374],{"class":165},[106,132968,51431],{"class":116},[106,132970,817],{"class":165},[106,132972,51486],{"class":112},[106,132974,132383],{"class":116},[106,132976,132386],{"class":175},[106,132978,132979],{"class":108,"line":1193},[106,132980,1557],{"class":116},[23,132982],{"style":126393,"src":132983},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-057.png",[14,132985,132986],{},"(6)总结",[254,132988,132989,133004],{},[257,132990,132991],{},[260,132992,132993,132995,132998,133001],{},[263,132994,132327],{"align":23729},[263,132996,132997],{"align":23729},"是否脱标",[263,132999,133000],{"align":23729},"移动位置",[263,133002,133003],{"align":23729},"是否常用",[301,133005,133006,133019,133033,133047,133060],{},[260,133007,133008,133011,133013,133016],{},[306,133009,133010],{"align":23729},"Static 静态定位",[306,133012,104663],{"align":23729},[306,133014,133015],{"align":23729},"不能使用边偏移",[306,133017,133018],{"align":23729},"很少",[260,133020,133021,133024,133027,133030],{},[306,133022,133023],{"align":23729},"Relative 相对定位",[306,133025,133026],{"align":23729},"否(占有位置)",[306,133028,133029],{"align":23729},"相对于自身位置移动",[306,133031,133032],{"align":23729},"基本单独使用",[260,133034,133035,133038,133041,133044],{},[306,133036,133037],{"align":23729},"Absolute 绝对定位",[306,133039,133040],{"align":23729},"是(不占有位置)",[306,133042,133043],{"align":23729},"带有定位的父级",[306,133045,133046],{"align":23729},"要和定位父级元素搭配使用",[260,133048,133049,133052,133054,133057],{},[306,133050,133051],{"align":23729},"Fixed 固定定位",[306,133053,133040],{"align":23729},[306,133055,133056],{"align":23729},"浏览器可视区",[306,133058,133059],{"align":23729},"单独使用,不需要父级",[260,133061,133062,133065,133067,133069],{},[306,133063,133064],{"align":23729},"Sticky 粘性定位",[306,133066,133026],{"align":23729},[306,133068,133056],{"align":23729},[306,133070,133071],{"align":23729},"当前阶段少",[60,133073,133074],{"start":28},[63,133075,133076,133079],{},[266,133077,133078],{},"边偏移"," 则决定了该元素的最终位置",[254,133081,133082,133093],{},[257,133083,133084],{},[260,133085,133086,133089,133091],{},[263,133087,133088],{"align":23729},"边偏移属性",[263,133090,27486],{"align":23729},[263,133092,27483],{"align":23729},[301,133094,133095,133106,133117,133127],{},[260,133096,133097,133100,133103],{},[306,133098,133099],{"align":23729},"top",[306,133101,133102],{"align":23729},"top: 80px;",[306,133104,133105],{"align":23729},"顶端偏移量，定义元素相对于父元素上边线的距离",[260,133107,133108,133111,133114],{},[306,133109,133110],{"align":23729},"bottom",[306,133112,133113],{"align":23729},"bottom: 80px ;",[306,133115,133116],{"align":23729},"底部偏移量，定义元素相对于其父元素下边线的距离",[260,133118,133119,133121,133124],{},[306,133120,23729],{"align":23729},[306,133122,133123],{"align":23729},"left: 80px ;",[306,133125,133126],{"align":23729},"左侧偏移量，定义元素相对于其父元素左边线的距离",[260,133128,133129,133131,133134],{},[306,133130,72516],{"align":23729},[306,133132,133133],{"align":23729},"right: 80px ;",[306,133135,133136],{"align":23729},"右侧偏移量，定义元素相对于其父元素右边线的距离",[1124,133138,133139],{},[63,133140,9018,133141,133143,133144,133146,133147,133149,133150,133153,133154,133156,133157,133159],{},[53710,133142],{},"  ① ",[266,133145,133078],{}," 需要和 ",[266,133148,132327],{}," 联合使用， ",[266,133151,133152],{},"单独使用无效"," ；",[53710,133155],{},"  ②top和bottom不要同时使用",[53710,133158],{},"  ③left和right不要同时使用",[21991,133161,133163],{"id":133162},"_11133-定位口诀-子绝父相","11.1.3.3 定位口诀-子绝父相",[14,133165,133166],{},"子级是绝对定位的话，父级要用相对定位",[1124,133168,133169,133172,133175,133178],{},[63,133170,133171],{},"子级绝对定位，不会占有位置，可以放到父盒子里面的任何一个地方，不会影响其他的兄弟盒子",[63,133173,133174],{},"父盒子需要加定位限制子盒子在父盒子内显示",[63,133176,133177],{},"父盒子布局时，需要占有位置，因此父亲只能是相对定位",[63,133179,133180,133181,133184],{},"子绝父相不是永远不变的，如果父元素不需要占有位置， ",[266,133182,133183],{},"子绝父绝"," 也会遇到",[21991,133186,133188],{"id":133187},"_11134-堆叠顺序z-index","11.1.3.4 堆叠顺序(z-index)",[1124,133190,133191,133206],{},[63,133192,133193,133194,133197,133198,133201,133202,133205],{},"在使用 ",[266,133195,133196],{},"定位"," 布局时，可能会 ",[266,133199,133200],{},"出现盒子重叠的情况"," 。此时，可以使用 ",[266,133203,133204],{},"z-index"," 来控制盒子的前后次序 (z轴)",[63,133207,5174],{},[97,133209,133210],{"className":126537,"code":132330,"language":126539,"meta":25,"style":25},[103,133211,133212,133218,133230,133244,133258],{"__ignoreMap":25},[106,133213,133214,133216],{"class":108,"line":109},[106,133215,130385],{"class":1955},[106,133217,15565],{"class":116},[106,133219,133220,133222,133224,133226,133228],{"class":108,"line":28},[106,133221,132343],{"class":165},[106,133223,51431],{"class":116},[106,133225,54758],{"class":165},[106,133227,130400],{"class":116},[106,133229,132352],{"class":175},[106,133231,133232,133234,133236,133238,133240,133242],{"class":108,"line":1172},[106,133233,132357],{"class":165},[106,133235,51431],{"class":116},[106,133237,563],{"class":165},[106,133239,51486],{"class":112},[106,133241,132366],{"class":116},[106,133243,132369],{"class":175},[106,133245,133246,133248,133250,133252,133254,133256],{"class":108,"line":1187},[106,133247,132374],{"class":165},[106,133249,51431],{"class":116},[106,133251,817],{"class":165},[106,133253,51486],{"class":112},[106,133255,132383],{"class":116},[106,133257,132386],{"class":175},[106,133259,133260],{"class":108,"line":1193},[106,133261,1557],{"class":116},[1124,133263,133264],{},[63,133265,133266,133267,133143,133269,133271,133272,127700,133275,82533,133278,133280,133281,133283,133284,133287,133288,133153,133291,133293,133294,133297,133299],{},"z-index的特性",[53710,133268],{},[266,133270,127001],{}," ： ",[266,133273,133274],{},"正整数",[266,133276,133277],{},"负整数",[266,133279,308],{}," ，默认值是 0，数值越大，盒子越靠上；",[53710,133282],{},"  ②如果 ",[266,133285,133286],{},"属性值相同"," ，则按照书写顺序， ",[266,133289,133290],{},"后来居上",[53710,133292],{},"  ③数字后面 ",[266,133295,133296],{},"不能加单位",[53710,133298],{},"  ④z-index 只能应用于相对定位,绝对定位和固定定位的元素,其他标准流,浮动和静态定位无效(只有定位的盒子才有z-index属性)",[21991,133301,133303],{"id":133302},"_11135-绝对定位盒子居中","11.1.3.5 绝对定位盒子居中",[14,133305,133306],{},"加了绝对定位\u002F固定定位的盒子不能通过设置margin:auto;设置水平居中",[14,133308,133309],{},"方法:",[1124,133311,133312,133322],{},[63,133313,133314,133315,133318,133319],{},"left: 50%; 让 ",[266,133316,133317],{},"盒子的左侧"," 移动到 ",[266,133320,133321],{},"父级元素的水平中心位置",[63,133323,133324,133325,133328,133329],{},"margin-left: -100px; 让盒子 ",[266,133326,133327],{},"向左"," 移动 ",[266,133330,133331],{},"自身宽度的一半",[21991,133333,133335],{"id":133334},"_11136-定位特殊特性","11.1.3.6 定位特殊特性",[60,133337,133338,133341],{},[63,133339,133340],{},"行内元素添加绝对或者固定定位，可以直接设置高度和宽度",[63,133342,133343],{},"块级元素添加绝对或者固定定位，如果不给宽度或者高度，默认大小是内容的大小",[14,133345,133346],{},"也就是说绝对定位和固定定位和浮动类似",[60,133348,133349],{"start":1172},[63,133350,133351],{},"display 是显示模式， 可以改变显示模式有以下方式:",[1124,133353,133354,133357,133360],{},[63,133355,133356],{},"可以用inline-block 转换为行内块",[63,133358,133359],{},"可以用浮动 float 默认转换为行内块（类似，并不完全一样，因为浮动是脱标的）",[63,133361,133362],{},"绝对定位和固定定位也和浮动类似， 默认转换为行内块",[14,133364,133365],{},"一个行内的盒子,如果加了浮动,固定定位和绝对定位,不用转换,就可以给这个盒子直接设置宽度和高度等",[21991,133367,133369],{"id":133368},"_11137-绝对定位固定定位会完全压住盒子","11.1.3.7 绝对定位(固定定位)会完全压住盒子",[60,133371,133372,133375,133378,133381],{},[63,133373,133374],{},"浮动元素不同，只会压住它下面标准流的盒子，但是不会压住下面标准流盒子里面的文字",[63,133376,133377],{},"绝对定位（固定定位）会压住下面标准流所有的内容",[63,133379,133380],{},"浮动之所以不会压住文字，因为浮动产生的目的最初是为了做文字环绕效果的。 文字会围绕浮动元素",[63,133382,133383],{},"以前浮动就是为了文字环绕效果，现在已经经常用于布局了",[97,133385,133386],{"className":126537,"code":131003,"language":126539,"meta":25,"style":25},[103,133387,133388,133394,133404,133408,133414,133424],{"__ignoreMap":25},[106,133389,133390,133392],{"class":108,"line":109},[106,133391,131010],{"class":1955},[106,133393,15565],{"class":116},[106,133395,133396,133398,133400,133402],{"class":108,"line":28},[106,133397,131017],{"class":165},[106,133399,51431],{"class":116},[106,133401,23729],{"class":165},[106,133403,1283],{"class":116},[106,133405,133406],{"class":108,"line":1172},[106,133407,1557],{"class":116},[106,133409,133410,133412],{"class":108,"line":1187},[106,133411,131032],{"class":1955},[106,133413,15565],{"class":116},[106,133415,133416,133418,133420,133422],{"class":108,"line":1193},[106,133417,131017],{"class":165},[106,133419,51431],{"class":116},[106,133421,72516],{"class":165},[106,133423,1283],{"class":116},[106,133425,133426],{"class":108,"line":1207},[106,133427,1557],{"class":116},[23,133429],{"style":126393,"src":133430},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-058.png",[21991,133432,133434],{"id":133433},"_11138-轮播图","11.1.3.8 轮播图",[23,133436],{"style":126393,"src":133437},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-059.png",[60,133439,133440],{},[63,133441,133442],{},"制作顺序:",[1124,133444,133445,133448,133451,133460],{},[63,133446,133447],{},"大盒子我们类名为： tb-promo 淘宝广告",[63,133449,133450],{},"里面先放一张图片",[63,133452,133453,133454,133456,133457,133459],{},"左右两个按钮 用链接就好了。 左箭头 prev 右箭头 next",[53710,133455],{},"  ①左按钮样式（border-radius：左上，右上，右下，左下）",[53710,133458],{},"  ②右按钮定位，提取左右按钮共同的样式代码（并集选择器）",[63,133461,133462,133463,133465,133466,133468],{},"底侧小圆点ul 继续做。 类名为 promo-nav",[53710,133464],{},"  ①中间长方形椭圆 ul的定位（水平居中，离底部15px）",[53710,133467],{},"  ②长方形需要五个小圆点，ul无序列表，li浮动，椭圆中小圆点的样式",[60,133470,133471],{"start":28},[63,133472,133473],{},"代码模块",[97,133475,133477],{"className":126537,"code":133476,"language":126539,"meta":25,"style":25},"\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",[103,133478,133479,133484,133491,133501,133511,133521,133525,133530,133537,133547],{"__ignoreMap":25},[106,133480,133481],{"class":108,"line":109},[106,133482,133483],{"class":175},"\u002F* 绝对定位：相对于最近的有定位的祖先元素移动 *\u002F\n",[106,133485,133486,133489],{"class":108,"line":28},[106,133487,133488],{"class":1955},".son",[106,133490,15565],{"class":116},[106,133492,133493,133495,133497,133499],{"class":108,"line":1172},[106,133494,132343],{"class":165},[106,133496,51431],{"class":116},[106,133498,54825],{"class":165},[106,133500,1283],{"class":116},[106,133502,133503,133505,133507,133509],{"class":108,"line":1187},[106,133504,132357],{"class":165},[106,133506,51431],{"class":116},[106,133508,308],{"class":165},[106,133510,1283],{"class":116},[106,133512,133513,133515,133517,133519],{"class":108,"line":1193},[106,133514,132374],{"class":165},[106,133516,51431],{"class":116},[106,133518,308],{"class":165},[106,133520,1283],{"class":116},[106,133522,133523],{"class":108,"line":1207},[106,133524,1557],{"class":116},[106,133526,133527],{"class":108,"line":1213},[106,133528,133529],{"class":175},"\u002F* 父元素需要加 relative（子绝父相） *\u002F\n",[106,133531,133532,133535],{"class":108,"line":1304},[106,133533,133534],{"class":1955},".father",[106,133536,15565],{"class":116},[106,133538,133539,133541,133543,133545],{"class":108,"line":1310},[106,133540,132343],{"class":165},[106,133542,51431],{"class":116},[106,133544,54758],{"class":165},[106,133546,1283],{"class":116},[106,133548,133549],{"class":108,"line":1322},[106,133550,1557],{"class":116},[14,133552,133553],{},"总结收获:主要学习的地方是相同属性使用并集选择器",[77,133555,133557],{"id":133556},"_1114-定位数值的移动","11.1.4 定位数值的移动",[23,133559],{"style":126393,"src":133560},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-060.png",[14,133562,133563],{},"✨ 黄金口诀：",[14,133565,133566],{},"\"TOP正下负上，LEFT正右负左\"",[14,133568,133569],{},"\"RIGHT正左负右，BOTTOM正上负下",[14,133571,133572],{},"可以理解为正数就是相反方向移动，负值相同方向移动",[14,133574,133575],{},"✨ 简单记：",[14,133577,133578],{},"margin的四个方向，正值都是增加该方向的外边距（即向外推开），负值都是减少外边距（即向内拉近）",[5119,133580,133581],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":25,"searchDepth":28,"depth":28,"links":133583},[133584],{"id":132111,"depth":28,"text":132112,"children":133585},[133586,133587,133588,133589],{"id":132115,"depth":1172,"text":132116},{"id":132130,"depth":1172,"text":132131},{"id":132298,"depth":1172,"text":132299},{"id":133556,"depth":1172,"text":133557},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch11",{"title":132103,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch11-传统布局与定位体系","SZd3SJiZURVo5OmRpYbIFmG1fddK7JxCa-sd5nbDotk",{"id":133596,"title":133597,"body":133598,"description":30,"extension":31,"meta":135021,"navigation":33,"path":135022,"seo":135023,"stem":135024,"__hash__":135025},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源.md","12. 显示隐藏与图形资源",{"type":7,"value":133599,"toc":135000},[133600,133603,133607,133615,133619,133624,133632,133644,133648,133653,133661,133672,133676,133681,133722,133730,133734,133737,133740,133743,133837,133840,133934,133937,134031,134034,134037,134072,134075,134078,134108,134111,134114,134117,134120,134123,134126,134129,134199,134202,134206,134210,134251,134255,134261,134264,134267,134271,134274,134277,134280,134361,134364,134367,134371,134375,134378,134381,134384,134387,134390,134396,134405,134409,134428,134432,134442,134445,134448,134451,134454,134457,134460,134463,134466,134475,134479,134488,134491,134496,134549,134554,134720,134723,134726,134731,134734,134737,134740,134743,134748,134896,134899,134902,134907,134910,134915,134949,134952,134955,134959,134962,134969,134972,134975,134978,134981,134984,134987,134990,134994,134997],[10,133601,133597],{"id":133602},"_12-显示隐藏与图形资源",[48,133604,133606],{"id":133605},"_121-元素的显示和隐藏","12.1 元素的显示和隐藏",[1124,133608,133609,133612],{},[63,133610,133611],{},"目的:让一个元素在页面中消失或者显示出来",[63,133613,133614],{},"场景:类似网站广告，当我们点击关闭就不见了，但是我们重新刷新页面，会重新出现！",[77,133616,133618],{"id":133617},"_1211-display-显示","12.1.1 display 显示",[60,133620,133621],{},[63,133622,133623],{},"display 设置或检索对象是否及如何显示",[1124,133625,133626,133629],{},[63,133627,133628],{},"display: none;隐藏对象",[63,133630,133631],{},"display: block; 除了转换为块级元素之外，同时还有显示元素的意思",[60,133633,133634,133641],{"start":28},[63,133635,133636,133637,133640],{},"特点： display 隐藏元素后， ",[266,133638,133639],{},"不再占"," 有原来的位置",[63,133642,133643],{},"在js中使用非常的广泛",[77,133645,133647],{"id":133646},"_1212-visibility可见性","12.1.2 visibility可见性",[60,133649,133650],{},[63,133651,133652],{},"visibility 属性用于指定一个元素应可见还是隐藏",[1124,133654,133655,133658],{},[63,133656,133657],{},"visibility： visible；元素可见",[63,133659,133660],{},"visibility：hidden；元素隐藏",[60,133662,133663,133666,133669],{"start":28},[63,133664,133665],{},"如果隐藏元素想要原来位置， 就用 visibility：hidden；",[63,133667,133668],{},"如果隐藏元素不想要原来位置， 就用 display：none； (用处更多）",[63,133670,133671],{},"隐藏后继续占有原有位置",[77,133673,133675],{"id":133674},"_1213-overflow溢出","12.1.3 overflow溢出",[1124,133677,133678],{},[63,133679,133680],{},"overflow 属性指定了如果内容溢出一个元素的框（超过其指定高度及宽度） 时，会发生什么",[254,133682,133683,133691],{},[257,133684,133685],{},[260,133686,133687,133689],{},[263,133688,127001],{"align":23729},[263,133690,27483],{"align":23729},[301,133692,133693,133701,133708,133715],{},[260,133694,133695,133698],{},[306,133696,133697],{"align":23729},"visible",[306,133699,133700],{"align":23729},"不剪切内容也不添加滚动条，默认的，溢出的也显示出来，写不写overflow:hidden；是都显示溢出的文字的",[260,133702,133703,133705],{},[306,133704,61708],{"align":23729},[306,133706,133707],{"align":23729},"不显示超过对象尺寸的内容，超出的部分隐藏掉",[260,133709,133710,133712],{},[306,133711,128957],{"align":23729},[306,133713,133714],{"align":23729},"不管超出内容否，总是显示滚动条",[260,133716,133717,133719],{},[306,133718,72657],{"align":23729},[306,133720,133721],{"align":23729},"超出自动显示滚动条，不超出不显示滚动条",[1124,133723,133724,133727],{},[63,133725,133726],{},"一般情况下，我们都不想让溢出的内容显示出来，因为溢出的部分会影响布局",[63,133728,133729],{},"但是如果有定位的盒子， 请慎用overflow:hidden； 因为它会隐藏多余的部分，如果对父盒子使用overflow:hidden;的话，那子盒子使用绝对定位时如果多出去一块，则会造成子盒子一部分不显示（就是有时候可能小盒子有一部分是在大盒子外边的，使用overflow:hidden后超出大盒子的就不再显示，会导致小盒子显示不全，所以这时候就不能加overflow:hidden）",[77,133731,133733],{"id":133732},"_1214-案例收获","12.1.4 案例收获",[23,133735],{"style":126393,"src":133736},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-061.png",[14,133738,133739],{},"问题：没做出来动态效果，使用hover没实现",[14,133741,133742],{},"收获：在做这类效果的时候，不要再盒子里再放盒子了，可以直接使用背景background来做中间的播放按钮，把它放在阴影盒子中就欧克，其次在使用hover时，做成滚动到大盒子时，阴影盒子显示",[97,133744,133745],{"className":126537,"code":131969,"language":126539,"meta":25,"style":25},[103,133746,133747,133751,133765,133769,133783,133787,133801,133805,133819,133823],{"__ignoreMap":25},[106,133748,133749],{"class":108,"line":109},[106,133750,131976],{"class":175},[106,133752,133753,133755,133757,133759,133761,133763],{"class":108,"line":28},[106,133754,131981],{"class":1955},[106,133756,79801],{"class":116},[106,133758,128897],{"class":165},[106,133760,51431],{"class":116},[106,133762,131990],{"class":165},[106,133764,129467],{"class":116},[106,133766,133767],{"class":108,"line":1172},[106,133768,131997],{"class":175},[106,133770,133771,133773,133775,133777,133779,133781],{"class":108,"line":1187},[106,133772,132002],{"class":1955},[106,133774,79801],{"class":116},[106,133776,128897],{"class":165},[106,133778,51431],{"class":116},[106,133780,54758],{"class":165},[106,133782,129467],{"class":116},[106,133784,133785],{"class":108,"line":1193},[106,133786,132017],{"class":175},[106,133788,133789,133791,133793,133795,133797,133799],{"class":108,"line":1207},[106,133790,132022],{"class":1955},[106,133792,79801],{"class":116},[106,133794,128897],{"class":165},[106,133796,51431],{"class":116},[106,133798,54825],{"class":165},[106,133800,129467],{"class":116},[106,133802,133803],{"class":108,"line":1213},[106,133804,132037],{"class":175},[106,133806,133807,133809,133811,133813,133815,133817],{"class":108,"line":1304},[106,133808,132042],{"class":1955},[106,133810,79801],{"class":116},[106,133812,128897],{"class":165},[106,133814,51431],{"class":116},[106,133816,86227],{"class":165},[106,133818,129467],{"class":116},[106,133820,133821],{"class":108,"line":1310},[106,133822,132057],{"class":175},[106,133824,133825,133827,133829,133831,133833,133835],{"class":108,"line":1322},[106,133826,132062],{"class":1955},[106,133828,79801],{"class":116},[106,133830,128897],{"class":165},[106,133832,51431],{"class":116},[106,133834,132071],{"class":165},[106,133836,129467],{"class":116},[14,133838,133839],{},"完整代码：",[97,133841,133842],{"className":126537,"code":131969,"language":126539,"meta":25,"style":25},[103,133843,133844,133848,133862,133866,133880,133884,133898,133902,133916,133920],{"__ignoreMap":25},[106,133845,133846],{"class":108,"line":109},[106,133847,131976],{"class":175},[106,133849,133850,133852,133854,133856,133858,133860],{"class":108,"line":28},[106,133851,131981],{"class":1955},[106,133853,79801],{"class":116},[106,133855,128897],{"class":165},[106,133857,51431],{"class":116},[106,133859,131990],{"class":165},[106,133861,129467],{"class":116},[106,133863,133864],{"class":108,"line":1172},[106,133865,131997],{"class":175},[106,133867,133868,133870,133872,133874,133876,133878],{"class":108,"line":1187},[106,133869,132002],{"class":1955},[106,133871,79801],{"class":116},[106,133873,128897],{"class":165},[106,133875,51431],{"class":116},[106,133877,54758],{"class":165},[106,133879,129467],{"class":116},[106,133881,133882],{"class":108,"line":1193},[106,133883,132017],{"class":175},[106,133885,133886,133888,133890,133892,133894,133896],{"class":108,"line":1207},[106,133887,132022],{"class":1955},[106,133889,79801],{"class":116},[106,133891,128897],{"class":165},[106,133893,51431],{"class":116},[106,133895,54825],{"class":165},[106,133897,129467],{"class":116},[106,133899,133900],{"class":108,"line":1213},[106,133901,132037],{"class":175},[106,133903,133904,133906,133908,133910,133912,133914],{"class":108,"line":1304},[106,133905,132042],{"class":1955},[106,133907,79801],{"class":116},[106,133909,128897],{"class":165},[106,133911,51431],{"class":116},[106,133913,86227],{"class":165},[106,133915,129467],{"class":116},[106,133917,133918],{"class":108,"line":1310},[106,133919,132057],{"class":175},[106,133921,133922,133924,133926,133928,133930,133932],{"class":108,"line":1322},[106,133923,132062],{"class":1955},[106,133925,79801],{"class":116},[106,133927,128897],{"class":165},[106,133929,51431],{"class":116},[106,133931,132071],{"class":165},[106,133933,129467],{"class":116},[14,133935,133936],{},"分布思路重点详解：",[97,133938,133939],{"className":126537,"code":131969,"language":126539,"meta":25,"style":25},[103,133940,133941,133945,133959,133963,133977,133981,133995,133999,134013,134017],{"__ignoreMap":25},[106,133942,133943],{"class":108,"line":109},[106,133944,131976],{"class":175},[106,133946,133947,133949,133951,133953,133955,133957],{"class":108,"line":28},[106,133948,131981],{"class":1955},[106,133950,79801],{"class":116},[106,133952,128897],{"class":165},[106,133954,51431],{"class":116},[106,133956,131990],{"class":165},[106,133958,129467],{"class":116},[106,133960,133961],{"class":108,"line":1172},[106,133962,131997],{"class":175},[106,133964,133965,133967,133969,133971,133973,133975],{"class":108,"line":1187},[106,133966,132002],{"class":1955},[106,133968,79801],{"class":116},[106,133970,128897],{"class":165},[106,133972,51431],{"class":116},[106,133974,54758],{"class":165},[106,133976,129467],{"class":116},[106,133978,133979],{"class":108,"line":1193},[106,133980,132017],{"class":175},[106,133982,133983,133985,133987,133989,133991,133993],{"class":108,"line":1207},[106,133984,132022],{"class":1955},[106,133986,79801],{"class":116},[106,133988,128897],{"class":165},[106,133990,51431],{"class":116},[106,133992,54825],{"class":165},[106,133994,129467],{"class":116},[106,133996,133997],{"class":108,"line":1213},[106,133998,132037],{"class":175},[106,134000,134001,134003,134005,134007,134009,134011],{"class":108,"line":1304},[106,134002,132042],{"class":1955},[106,134004,79801],{"class":116},[106,134006,128897],{"class":165},[106,134008,51431],{"class":116},[106,134010,86227],{"class":165},[106,134012,129467],{"class":116},[106,134014,134015],{"class":108,"line":1310},[106,134016,132057],{"class":175},[106,134018,134019,134021,134023,134025,134027,134029],{"class":108,"line":1322},[106,134020,132062],{"class":1955},[106,134022,79801],{"class":116},[106,134024,128897],{"class":165},[106,134026,51431],{"class":116},[106,134028,132071],{"class":165},[106,134030,129467],{"class":116},[23,134032],{"style":126393,"src":134033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-062.png",[14,134035,134036],{},"图片太大，盒子太小，此时需要修改图片的大小",[97,134038,134040],{"className":127284,"code":134039,"language":127286,"meta":25,"style":25},"\u003Cimg src=\"images\u002Fpic.jpg\" alt=\"描述文字\" title=\"悬停提示\">\n",[103,134041,134042],{"__ignoreMap":25},[106,134043,134044,134046,134048,134050,134052,134055,134057,134059,134062,134065,134067,134070],{"class":108,"line":109},[106,134045,1027],{"class":116},[106,134047,23],{"class":51294},[106,134049,55233],{"class":1955},[106,134051,162],{"class":116},[106,134053,134054],{"class":221},"\"images\u002Fpic.jpg\"",[106,134056,55241],{"class":1955},[106,134058,162],{"class":116},[106,134060,134061],{"class":221},"\"描述文字\"",[106,134063,134064],{"class":1955}," title",[106,134066,162],{"class":116},[106,134068,134069],{"class":221},"\"悬停提示\"",[106,134071,51301],{"class":116},[23,134073],{"style":126393,"src":134074},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-063.png",[14,134076,134077],{},"制造遮罩层",[97,134079,134080],{"className":127284,"code":134039,"language":127286,"meta":25,"style":25},[103,134081,134082],{"__ignoreMap":25},[106,134083,134084,134086,134088,134090,134092,134094,134096,134098,134100,134102,134104,134106],{"class":108,"line":109},[106,134085,1027],{"class":116},[106,134087,23],{"class":51294},[106,134089,55233],{"class":1955},[106,134091,162],{"class":116},[106,134093,134054],{"class":221},[106,134095,55241],{"class":1955},[106,134097,162],{"class":116},[106,134099,134061],{"class":221},[106,134101,134064],{"class":1955},[106,134103,162],{"class":116},[106,134105,134069],{"class":221},[106,134107,51301],{"class":116},[14,134109,134110],{},"此时是这样的为标准流",[23,134112],{"style":126393,"src":134113},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-064.png",[14,134115,134116],{},"还要子绝父相，不然子盒子会以浏览器为准，不以盒子为准",[14,134118,134119],{},"中间播放按钮作为背景展示就可以，不用再加盒子了",[14,134121,134122],{},"让他在中间，用center(background-position)",[14,134124,134125],{},"将需要变的尽可能放到一个盒子中",[14,134127,134128],{},"放大盒子上内部盒子发生变化",[97,134130,134132],{"className":126537,"code":134131,"language":126539,"meta":25,"style":25},".parent {\n  position: relative;\n}\n.child {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n}\n",[103,134133,134134,134140,134150,134154,134161,134171,134183,134195],{"__ignoreMap":25},[106,134135,134136,134138],{"class":108,"line":109},[106,134137,127604],{"class":1955},[106,134139,15565],{"class":116},[106,134141,134142,134144,134146,134148],{"class":108,"line":28},[106,134143,132343],{"class":165},[106,134145,51431],{"class":116},[106,134147,54758],{"class":165},[106,134149,1283],{"class":116},[106,134151,134152],{"class":108,"line":1172},[106,134153,1557],{"class":116},[106,134155,134156,134159],{"class":108,"line":1187},[106,134157,134158],{"class":1955},".child",[106,134160,15565],{"class":116},[106,134162,134163,134165,134167,134169],{"class":108,"line":1193},[106,134164,132343],{"class":165},[106,134166,51431],{"class":116},[106,134168,54825],{"class":165},[106,134170,1283],{"class":116},[106,134172,134173,134175,134177,134179,134181],{"class":108,"line":1207},[106,134174,132357],{"class":165},[106,134176,51431],{"class":116},[106,134178,773],{"class":165},[106,134180,445],{"class":112},[106,134182,1283],{"class":116},[106,134184,134185,134187,134189,134191,134193],{"class":108,"line":1213},[106,134186,132374],{"class":165},[106,134188,51431],{"class":116},[106,134190,773],{"class":165},[106,134192,445],{"class":112},[106,134194,1283],{"class":116},[106,134196,134197],{"class":108,"line":1304},[106,134198,1557],{"class":116},[14,134200,134201],{},"当鼠标放到使用tudou这个类选择器盒子上时，使用mask类选择器的盒子会显现内容",[48,134203,134205],{"id":134204},"_122-精灵图","12.2 精灵图",[77,134207,134209],{"id":134208},"_1221-理解","12.2.1 理解",[60,134211,134212,134230],{},[63,134213,134214,134215,132443,134218,134221,134222,134225,134226,134229],{},"目的： ",[266,134216,134217],{},"为了有效地减少服务器接收和发送请求的次数",[266,134219,134220],{},"提高"," 页面的 ",[266,134223,134224],{},"加载速度"," ，出现了 ",[266,134227,134228],{},"CSS 精灵技术"," （也称 CSS Sprites、CSS 雪碧），将网页中的一些小背景图像整合到一张大图中 ，这样服务器只需一次请求就可以了",[63,134231,134232,134233,134235,134236,134238,134239,134241,134242,134244,134245,134247,134248,134250],{},"使用精灵图核心：",[53710,134234],{},"  ①精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中",[53710,134237],{},"  ②这个大图片也称为 sprites 精灵图 或者 雪碧图",[53710,134240],{},"  ③移动背景图片位置， 此时可以使用 background-position",[53710,134243],{},"  ④移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同",[53710,134246],{},"  ⑤因为一般情况下都是往上往左移动，所以数值是负值",[53710,134249],{},"  ⑥使用精灵图的时候需要精确测量，每个小背景图片的大小和位置",[77,134252,134254],{"id":134253},"_1222-扒图","12.2.2 扒图",[97,134256,134259],{"className":134257,"code":134258,"language":5180},[5178],"\u003Cimg style=\"max-width:100%\" src=\"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-065.png\">\n",[103,134260,134258],{"__ignoreMap":25},[23,134262],{"style":126393,"src":134263},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-066.png",[23,134265],{"style":126393,"src":134266},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-067.png",[77,134268,134270],{"id":134269},"_1223-精灵图的实现","12.2.3 精灵图的实现",[23,134272],{"style":126393,"src":134273},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-068.png",[14,134275,134276],{},"打开FW软件，使用切片命令，将想实现精灵图的位置进行切片操作，然后下方会出现坐标",[23,134278],{"style":126393,"src":134279},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-069.png",[97,134281,134283],{"className":126537,"code":134282,"language":126539,"meta":25,"style":25},"\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",[103,134284,134285,134290,134297,134309,134321,134340,134357],{"__ignoreMap":25},[106,134286,134287],{"class":108,"line":109},[106,134288,134289],{"class":175},"\u002F* 精灵图使用：通过 background-position 定位 *\u002F\n",[106,134291,134292,134295],{"class":108,"line":28},[106,134293,134294],{"class":1955},".icon",[106,134296,15565],{"class":116},[106,134298,134299,134301,134303,134305,134307],{"class":108,"line":1172},[106,134300,70562],{"class":165},[106,134302,51431],{"class":116},[106,134304,817],{"class":165},[106,134306,51486],{"class":112},[106,134308,1283],{"class":116},[106,134310,134311,134313,134315,134317,134319],{"class":108,"line":1187},[106,134312,70782],{"class":165},[106,134314,51431],{"class":116},[106,134316,817],{"class":165},[106,134318,51486],{"class":112},[106,134320,1283],{"class":116},[106,134322,134323,134325,134327,134329,134331,134334,134336,134338],{"class":108,"line":1193},[106,134324,70605],{"class":165},[106,134326,51431],{"class":116},[106,134328,61720],{"class":165},[106,134330,117],{"class":116},[106,134332,134333],{"class":5209},"sprites.png",[106,134335,13707],{"class":116},[106,134337,61730],{"class":165},[106,134339,1283],{"class":116},[106,134341,134342,134344,134346,134348,134350,134353,134355],{"class":108,"line":1207},[106,134343,128797],{"class":165},[106,134345,51431],{"class":116},[106,134347,51757],{"class":165},[106,134349,51486],{"class":112},[106,134351,134352],{"class":165}," -20",[106,134354,51486],{"class":112},[106,134356,1283],{"class":116},[106,134358,134359],{"class":108,"line":1213},[106,134360,1557],{"class":116},[23,134362],{"style":126393,"src":134363},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-070.png",[14,134365,134366],{},"在前端中坐标轴的正方向是右和下",[48,134368,134370],{"id":134369},"_123-字体图标","12.3 字体图标",[77,134372,134374],{"id":134373},"_1231-字体图标与精灵图的对比","12.3.1 字体图标与精灵图的对比",[14,134376,134377],{},"字体图标使用场景： 主要用于显示网页中通用、常用的一些小图标。",[14,134379,134380],{},"精灵图是有诸多优点的，但是缺点很明显。",[14,134382,134383],{},"1.图片文件还是比较大的。",[14,134385,134386],{},"2.图片本身放大和缩小会失真。",[14,134388,134389],{},"3.一旦图片制作完毕想要更换非常复杂。",[14,134391,134392,134393,25734],{},"此时，有一种技术的出现很好的解决了以上问题，就是 ",[266,134394,134395],{},"字体图标 iconfont",[14,134397,134398,134401,134402,28379],{},[266,134399,134400],{},"字体图标"," 可以为前端工程师提供一种方便高效的图标使用方式，",[266,134403,134404],{},"展示的是图标，本质属于字体",[77,134406,134408],{"id":134407},"_1232-字体图标的优点","12.3.2 字体图标的优点",[1124,134410,134411,134416,134419,134422,134425],{},[63,134412,134413,134415],{},[266,134414,25870],{}," ：一个图标字体要比一系列的图像要小。一旦字体加载了，图标就会马上渲染出来，减少了服务器请求",[63,134417,134418],{},"灵活性：本质其实是文字，可以很随意的改变颜色、产生阴影、透明效果、旋转等",[63,134420,134421],{},"兼容性：几乎支持所有的浏览器，请放心使用",[63,134423,134424],{},"注意： 字体图标不能替代精灵技术，只是对工作中图标部分技术的提升和优化",[63,134426,134427],{},"样式结构比较简单，样式比较复杂的小图片的话还是得用精灵图来进行做",[77,134429,134431],{"id":134430},"_1233-字体库下载网站","12.3.3 字体库下载网站",[1124,134433,134434],{},[63,134435,134436,134437],{},"icomoon字体库：",[355,134438,134441],{"href":134439,"rel":134440},"http:\u002F\u002Ficomoon.io\u002F",[23858],"http:\u002F\u002Ficomoon.io",[14,134443,134444],{},"进去之后点icomoon app",[23,134446],{"style":126393,"src":134447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-071.png",[14,134449,134450],{},"可以对其编辑：",[23,134452],{"style":126393,"src":134453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-072.png",[14,134455,134456],{},"生成字体：",[23,134458],{"style":126393,"src":134459},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-073.png",[14,134461,134462],{},"下载：",[23,134464],{"style":126393,"src":134465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-074.png",[1124,134467,134468],{},[63,134469,134470,134471],{},"阿里iconfont字体库： ",[355,134472,134473],{"href":134473,"rel":134474},"http:\u002F\u002Fwww.iconfont.cn\u002F",[23858],[77,134476,134478],{"id":134477},"_1234-字体图标的引入","12.3.4 字体图标的引入",[60,134480,134481],{},[63,134482,134483,134484,134487],{},"把下载包里面的 ",[266,134485,134486],{},"fonts"," 文件夹放入页面根目录下",[23,134489],{"style":126393,"src":134490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-075.png",[60,134492,134493],{"start":28},[63,134494,134495],{},"字体文件格式",[254,134497,134498,134507],{},[257,134499,134500],{},[260,134501,134502,134505],{},[263,134503,134504],{"align":23729},"格式",[263,134506,23733],{"align":23729},[301,134508,134509,134519,134529,134539],{},[260,134510,134511,134516],{},[306,134512,134513],{"align":23729},[266,134514,134515],{},".ttf",[306,134517,134518],{"align":23729},"ttf字体是Windows和Mac的最常见的字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome4+、Safari3+、Opera10+、iOS Mobile、Safari4.2+",[260,134520,134521,134526],{},[306,134522,134523],{"align":23729},[266,134524,134525],{},".woff",[306,134527,134528],{"align":23729},"woff字体，支持这种字体的浏览器有IE9+、Firefox3.5+、Chrome6+、Safari3.6+、Opera11.1+",[260,134530,134531,134536],{},[306,134532,134533],{"align":23729},[266,134534,134535],{},".eot",[306,134537,134538],{"align":23729},"eot字体是IE专用字体，支持这种字体的浏览器有IE4+",[260,134540,134541,134546],{},[306,134542,134543],{"align":23729},[266,134544,134545],{},"svg",[306,134547,134548],{"align":23729},"svg字体是基于SVG字体渲染的一种格式，支持这种字体的浏览器有Chrome4+、Safari3.1+、Opera10.0+、iOS Mobile Safari3.2+",[60,134550,134551],{"start":1172},[63,134552,134553],{},"在 CSS 样式中全局声明字体： 简单理解把这些字体文件通过css引入到我们页面中",[97,134555,134557],{"className":126537,"code":134556,"language":126539,"meta":25,"style":25},"\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",[103,134558,134559,134564,134571,134583,134599,134624,134645,134665,134685,134689,134695,134705,134716],{"__ignoreMap":25},[106,134560,134561],{"class":108,"line":109},[106,134562,134563],{"class":175},"\u002F* 引入字体图标 *\u002F\n",[106,134565,134566,134569],{"class":108,"line":28},[106,134567,134568],{"class":112},"@font-face",[106,134570,15565],{"class":116},[106,134572,134573,134576,134578,134581],{"class":108,"line":1172},[106,134574,134575],{"class":165},"  font-family",[106,134577,51431],{"class":116},[106,134579,134580],{"class":221},"'icomoon'",[106,134582,1283],{"class":116},[106,134584,134585,134588,134590,134592,134594,134597],{"class":108,"line":1187},[106,134586,134587],{"class":165},"  src",[106,134589,51431],{"class":116},[106,134591,61720],{"class":165},[106,134593,117],{"class":116},[106,134595,134596],{"class":221},"'fonts\u002Ficomoon.eot'",[106,134598,2711],{"class":116},[106,134600,134601,134603,134605,134607,134609,134612,134614,134617,134619,134622],{"class":108,"line":1193},[106,134602,134587],{"class":165},[106,134604,51431],{"class":116},[106,134606,61720],{"class":165},[106,134608,117],{"class":116},[106,134610,134611],{"class":221},"'fonts\u002Ficomoon.eot?#iefix'",[106,134613,13707],{"class":116},[106,134615,134616],{"class":165},"format",[106,134618,117],{"class":116},[106,134620,134621],{"class":221},"'embedded-opentype'",[106,134623,38041],{"class":116},[106,134625,134626,134629,134631,134634,134636,134638,134640,134643],{"class":108,"line":1207},[106,134627,134628],{"class":165},"       url",[106,134630,117],{"class":116},[106,134632,134633],{"class":221},"'fonts\u002Ficomoon.woff'",[106,134635,13707],{"class":116},[106,134637,134616],{"class":165},[106,134639,117],{"class":116},[106,134641,134642],{"class":221},"'woff'",[106,134644,38041],{"class":116},[106,134646,134647,134649,134651,134654,134656,134658,134660,134663],{"class":108,"line":1213},[106,134648,134628],{"class":165},[106,134650,117],{"class":116},[106,134652,134653],{"class":221},"'fonts\u002Ficomoon.ttf'",[106,134655,13707],{"class":116},[106,134657,134616],{"class":165},[106,134659,117],{"class":116},[106,134661,134662],{"class":221},"'truetype'",[106,134664,38041],{"class":116},[106,134666,134667,134669,134671,134674,134676,134678,134680,134683],{"class":108,"line":1304},[106,134668,134628],{"class":165},[106,134670,117],{"class":116},[106,134672,134673],{"class":221},"'fonts\u002Ficomoon.svg#icomoon'",[106,134675,13707],{"class":116},[106,134677,134616],{"class":165},[106,134679,117],{"class":116},[106,134681,134682],{"class":221},"'svg'",[106,134684,2711],{"class":116},[106,134686,134687],{"class":108,"line":1310},[106,134688,1557],{"class":116},[106,134690,134691,134693],{"class":108,"line":1322},[106,134692,134294],{"class":1955},[106,134694,15565],{"class":116},[106,134696,134697,134699,134701,134703],{"class":108,"line":1604},[106,134698,134575],{"class":165},[106,134700,51431],{"class":116},[106,134702,134580],{"class":221},[106,134704,1283],{"class":116},[106,134706,134707,134710,134712,134714],{"class":108,"line":1609},[106,134708,134709],{"class":165},"  font-style",[106,134711,51431],{"class":116},[106,134713,63835],{"class":165},[106,134715,1283],{"class":116},[106,134717,134718],{"class":108,"line":1615},[106,134719,1557],{"class":116},[14,134721,134722],{},"字体声明也可以在下载的字体文件中找到style.css中复制，也可以复制上边的内容",[23,134724],{"style":126393,"src":134725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-076.png",[60,134727,134728],{"start":1187},[63,134729,134730],{},"添加字体",[23,134732],{"style":126393,"src":134733},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-077.png",[14,134735,134736],{},"复制：",[23,134738],{"style":126393,"src":134739},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-078.png",[14,134741,134742],{},"还有谁需要就把声明加在谁那里一份 font-family:'icomoon'",[60,134744,134745],{"start":1193},[63,134746,134747],{},"代码展示：",[97,134749,134750],{"className":126537,"code":134556,"language":126539,"meta":25,"style":25},[103,134751,134752,134756,134762,134772,134786,134808,134826,134844,134862,134866,134872,134882,134892],{"__ignoreMap":25},[106,134753,134754],{"class":108,"line":109},[106,134755,134563],{"class":175},[106,134757,134758,134760],{"class":108,"line":28},[106,134759,134568],{"class":112},[106,134761,15565],{"class":116},[106,134763,134764,134766,134768,134770],{"class":108,"line":1172},[106,134765,134575],{"class":165},[106,134767,51431],{"class":116},[106,134769,134580],{"class":221},[106,134771,1283],{"class":116},[106,134773,134774,134776,134778,134780,134782,134784],{"class":108,"line":1187},[106,134775,134587],{"class":165},[106,134777,51431],{"class":116},[106,134779,61720],{"class":165},[106,134781,117],{"class":116},[106,134783,134596],{"class":221},[106,134785,2711],{"class":116},[106,134787,134788,134790,134792,134794,134796,134798,134800,134802,134804,134806],{"class":108,"line":1193},[106,134789,134587],{"class":165},[106,134791,51431],{"class":116},[106,134793,61720],{"class":165},[106,134795,117],{"class":116},[106,134797,134611],{"class":221},[106,134799,13707],{"class":116},[106,134801,134616],{"class":165},[106,134803,117],{"class":116},[106,134805,134621],{"class":221},[106,134807,38041],{"class":116},[106,134809,134810,134812,134814,134816,134818,134820,134822,134824],{"class":108,"line":1207},[106,134811,134628],{"class":165},[106,134813,117],{"class":116},[106,134815,134633],{"class":221},[106,134817,13707],{"class":116},[106,134819,134616],{"class":165},[106,134821,117],{"class":116},[106,134823,134642],{"class":221},[106,134825,38041],{"class":116},[106,134827,134828,134830,134832,134834,134836,134838,134840,134842],{"class":108,"line":1213},[106,134829,134628],{"class":165},[106,134831,117],{"class":116},[106,134833,134653],{"class":221},[106,134835,13707],{"class":116},[106,134837,134616],{"class":165},[106,134839,117],{"class":116},[106,134841,134662],{"class":221},[106,134843,38041],{"class":116},[106,134845,134846,134848,134850,134852,134854,134856,134858,134860],{"class":108,"line":1304},[106,134847,134628],{"class":165},[106,134849,117],{"class":116},[106,134851,134673],{"class":221},[106,134853,13707],{"class":116},[106,134855,134616],{"class":165},[106,134857,117],{"class":116},[106,134859,134682],{"class":221},[106,134861,2711],{"class":116},[106,134863,134864],{"class":108,"line":1310},[106,134865,1557],{"class":116},[106,134867,134868,134870],{"class":108,"line":1322},[106,134869,134294],{"class":1955},[106,134871,15565],{"class":116},[106,134873,134874,134876,134878,134880],{"class":108,"line":1604},[106,134875,134575],{"class":165},[106,134877,51431],{"class":116},[106,134879,134580],{"class":221},[106,134881,1283],{"class":116},[106,134883,134884,134886,134888,134890],{"class":108,"line":1609},[106,134885,134709],{"class":165},[106,134887,51431],{"class":116},[106,134889,63835],{"class":165},[106,134891,1283],{"class":116},[106,134893,134894],{"class":108,"line":1615},[106,134895,1557],{"class":116},[23,134897],{"style":126393,"src":134898},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-079.png",[14,134900,134901],{},"更加细节展示：",[60,134903,134904],{},[63,134905,134906],{},"html 标签内添加小图标",[23,134908],{"style":126393,"src":134909},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-080.png",[60,134911,134912],{"start":28},[63,134913,134914],{},"给标签定义字体",[97,134916,134917],{"className":127284,"code":130641,"language":127286,"meta":25,"style":25},[103,134918,134919,134923,134937,134941],{"__ignoreMap":25},[106,134920,134921],{"class":108,"line":109},[106,134922,130648],{"class":175},[106,134924,134925,134927,134929,134931,134933,134935],{"class":108,"line":28},[106,134926,1027],{"class":116},[106,134928,51605],{"class":51294},[106,134930,53480],{"class":1955},[106,134932,162],{"class":116},[106,134934,130661],{"class":221},[106,134936,51301],{"class":116},[106,134938,134939],{"class":108,"line":1172},[106,134940,130668],{"class":116},[106,134942,134943,134945,134947],{"class":108,"line":1187},[106,134944,51779],{"class":116},[106,134946,51605],{"class":51294},[106,134948,51301],{"class":116},[14,134950,134951],{},"注意：务必保证 这个字体和上面@font-face里面的字体保持一致",[23,134953],{"style":126393,"src":134954},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-081.png",[77,134956,134958],{"id":134957},"_1235-字体图标的追加","12.3.5 字体图标的追加",[14,134960,134961],{},"如果工作中，原来的字体图标不够用了，我们需要添加新的字体图标到原来的字体文件中",[14,134963,134964,134965,134968],{},"把压缩包里面的 ",[266,134966,134967],{},"selection.json"," 从新上传，然后选中自己想要新的图标，从新下载压缩包，并替换原来的文件即可",[14,134970,134971],{},"打开网站，点下方：",[23,134973],{"style":126393,"src":134974},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-082.png",[23,134976],{"style":126393,"src":134977},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-083.png",[23,134979],{"style":126393,"src":134980},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-084.png",[14,134982,134983],{},"点yes重新加载",[14,134985,134986],{},"然后重复之前的操作就可以实现了",[14,134988,134989],{},"下载最新的文件夹，原来的文件夹可以是删除了！",[77,134991,134993],{"id":134992},"_1236-字体图标的加载原理","12.3.6 字体图标的加载原理",[23,134995],{"style":126393,"src":134996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-085.png",[5119,134998,134999],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":28,"depth":28,"links":135001},[135002,135008,135013],{"id":133605,"depth":28,"text":133606,"children":135003},[135004,135005,135006,135007],{"id":133617,"depth":1172,"text":133618},{"id":133646,"depth":1172,"text":133647},{"id":133674,"depth":1172,"text":133675},{"id":133732,"depth":1172,"text":133733},{"id":134204,"depth":28,"text":134205,"children":135009},[135010,135011,135012],{"id":134208,"depth":1172,"text":134209},{"id":134253,"depth":1172,"text":134254},{"id":134269,"depth":1172,"text":134270},{"id":134369,"depth":28,"text":134370,"children":135014},[135015,135016,135017,135018,135019,135020],{"id":134373,"depth":1172,"text":134374},{"id":134407,"depth":1172,"text":134408},{"id":134430,"depth":1172,"text":134431},{"id":134477,"depth":1172,"text":134478},{"id":134957,"depth":1172,"text":134958},{"id":134992,"depth":1172,"text":134993},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch12",{"title":133597,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch12-显示隐藏与图形资源","K0tmUhpNlTpbP1LvirxUmLGoqR4EIlK4Id82_j0Cg-Q",{"id":135027,"title":135028,"body":135029,"description":30,"extension":31,"meta":136256,"navigation":33,"path":136257,"seo":136258,"stem":136259,"__hash__":136260},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧.md","13. 界面样式与布局技巧",{"type":7,"value":135030,"toc":136237},[135031,135034,135038,135041,135055,135123,135153,135156,135160,135164,135266,135313,135317,135320,135323,135357,135360,135363,135366,135369,135372,135375,135378,135380,135383,135386,135389,135392,135395,135398,135401,135429,135432,135436,135439,135446,135449,135452,135478,135481,135485,135488,135491,135498,135502,135505,135507,135539,135542,135545,135557,135563,135566,135569,135572,135574,135578,135581,135584,135587,135632,135636,135638,135641,135648,135690,135693,135697,135702,135716,135720,135723,135726,135729,135732,135735,135769,135772,135775,135829,135832,135835,135838,135841,135893,135896,135899,135948,135952,135954,135957,135960,135963,135966,135969,136027,136030,136036,136039,136042,136074,136077,136081,136085,136088,136120,136124,136127,136171,136175,136178,136181,136184,136187,136190,136193,136196,136198,136201,136203,136206,136209,136212,136215,136220,136223,136225,136228,136231,136234],[10,135032,135028],{"id":135033},"_13-界面样式与布局技巧",[48,135035,135037],{"id":135036},"_131-css三角","13.1 css三角",[14,135039,135040],{},"原理概括：只设置边框，需要朝向哪边的三角就让其他的边框进行透明",[1124,135042,135043,135046,135049,135052],{},[63,135044,135045],{},"用css 边框可以模拟三角效果",[63,135047,135048],{},"宽度高度为0",[63,135050,135051],{},"4个边框都要写， 只保留需要的边框颜色，其余的不能省略，都改为 transparent 透明就好了",[63,135053,135054],{},"为了照顾兼容性 低版本的浏览器，加上 font-size: 0; line-height: 0;",[97,135056,135058],{"className":126537,"code":135057,"language":126539,"meta":25,"style":25},"\u002F* CSS 实现三角形 *\u002F\n.triangle {\n  width: 0;\n  height: 0;\n  border: 10px solid transparent;\n  border-bottom-color: #333;\n}\n",[103,135059,135060,135065,135072,135082,135092,135108,135119],{"__ignoreMap":25},[106,135061,135062],{"class":108,"line":109},[106,135063,135064],{"class":175},"\u002F* CSS 实现三角形 *\u002F\n",[106,135066,135067,135070],{"class":108,"line":28},[106,135068,135069],{"class":1955},".triangle",[106,135071,15565],{"class":116},[106,135073,135074,135076,135078,135080],{"class":108,"line":1172},[106,135075,70562],{"class":165},[106,135077,51431],{"class":116},[106,135079,308],{"class":165},[106,135081,1283],{"class":116},[106,135083,135084,135086,135088,135090],{"class":108,"line":1187},[106,135085,70782],{"class":165},[106,135087,51431],{"class":116},[106,135089,308],{"class":165},[106,135091,1283],{"class":116},[106,135093,135094,135096,135098,135100,135102,135104,135106],{"class":108,"line":1193},[106,135095,70890],{"class":165},[106,135097,51431],{"class":116},[106,135099,563],{"class":165},[106,135101,51486],{"class":112},[106,135103,51515],{"class":165},[106,135105,63985],{"class":165},[106,135107,1283],{"class":116},[106,135109,135110,135113,135115,135117],{"class":108,"line":1207},[106,135111,135112],{"class":165},"  border-bottom-color",[106,135114,51431],{"class":116},[106,135116,62363],{"class":165},[106,135118,1283],{"class":116},[106,135120,135121],{"class":108,"line":1213},[106,135122,1557],{"class":116},[97,135124,135125],{"className":126537,"code":130694,"language":126539,"meta":25,"style":25},[103,135126,135127,135133,135149],{"__ignoreMap":25},[106,135128,135129,135131],{"class":108,"line":109},[106,135130,51605],{"class":51294},[106,135132,15565],{"class":116},[106,135134,135135,135137,135139,135141,135143,135145,135147],{"class":108,"line":28},[106,135136,70890],{"class":165},[106,135138,51431],{"class":116},[106,135140,334],{"class":165},[106,135142,51486],{"class":112},[106,135144,51515],{"class":165},[106,135146,129929],{"class":165},[106,135148,1283],{"class":116},[106,135150,135151],{"class":108,"line":1172},[106,135152,1557],{"class":116},[23,135154],{"style":126393,"src":135155},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-086.png",[48,135157,135159],{"id":135158},"_132-css用户界面样式","13.2 css用户界面样式",[77,135161,135163],{"id":135162},"_1321-鼠标样式","13.2.1 鼠标样式",[97,135165,135167],{"className":126537,"code":135166,"language":126539,"meta":25,"style":25},"\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",[103,135168,135169,135174,135193,135211,135230,135247],{"__ignoreMap":25},[106,135170,135171],{"class":108,"line":109},[106,135172,135173],{"class":175},"\u002F* 鼠标样式 *\u002F\n",[106,135175,135176,135178,135180,135183,135185,135187,135190],{"class":108,"line":28},[106,135177,51605],{"class":51294},[106,135179,79801],{"class":116},[106,135181,135182],{"class":165},"cursor",[106,135184,51431],{"class":116},[106,135186,62024],{"class":165},[106,135188,135189],{"class":116},"; }   ",[106,135191,135192],{"class":175},"\u002F* 手型 *\u002F\n",[106,135194,135195,135197,135199,135201,135203,135206,135208],{"class":108,"line":1172},[106,135196,51605],{"class":51294},[106,135198,79801],{"class":116},[106,135200,135182],{"class":165},[106,135202,51431],{"class":116},[106,135204,135205],{"class":165},"default",[106,135207,135189],{"class":116},[106,135209,135210],{"class":175},"\u002F* 默认 *\u002F\n",[106,135212,135213,135215,135217,135219,135221,135224,135227],{"class":108,"line":1187},[106,135214,51605],{"class":51294},[106,135216,79801],{"class":116},[106,135218,135182],{"class":165},[106,135220,51431],{"class":116},[106,135222,135223],{"class":165},"move",[106,135225,135226],{"class":116},"; }      ",[106,135228,135229],{"class":175},"\u002F* 移动 *\u002F\n",[106,135231,135232,135234,135236,135238,135240,135242,135244],{"class":108,"line":1193},[106,135233,51605],{"class":51294},[106,135235,79801],{"class":116},[106,135237,135182],{"class":165},[106,135239,51431],{"class":116},[106,135241,5180],{"class":165},[106,135243,135226],{"class":116},[106,135245,135246],{"class":175},"\u002F* 文本 *\u002F\n",[106,135248,135249,135251,135253,135255,135257,135260,135263],{"class":108,"line":1207},[106,135250,51605],{"class":51294},[106,135252,79801],{"class":116},[106,135254,135182],{"class":165},[106,135256,51431],{"class":116},[106,135258,135259],{"class":165},"not-allowed",[106,135261,135262],{"class":116},"; } ",[106,135264,135265],{"class":175},"\u002F* 禁止 *\u002F\n",[254,135267,135268,135276],{},[257,135269,135270],{},[260,135271,135272,135274],{},[263,135273,127001],{"align":23729},[263,135275,27483],{"align":23729},[301,135277,135278,135285,135292,135299,135306],{},[260,135279,135280,135282],{},[306,135281,135205],{"align":23729},[306,135283,135284],{"align":23729},"小白 默认",[260,135286,135287,135289],{},[306,135288,62024],{"align":23729},[306,135290,135291],{"align":23729},"小手",[260,135293,135294,135296],{},[306,135295,135223],{"align":23729},[306,135297,135298],{"align":23729},"移动",[260,135300,135301,135303],{},[306,135302,5180],{"align":23729},[306,135304,135305],{"align":23729},"文本",[260,135307,135308,135310],{},[306,135309,135259],{"align":23729},[306,135311,135312],{"align":23729},"禁止",[77,135314,135316],{"id":135315},"_1322-轮廓线-outline","13.2.2 轮廓线 outline",[14,135318,135319],{},"去除表单轮廓线",[14,135321,135322],{},"给表单添加 outline: 0; 或者 outline: none; 样式之后，就可以去掉默认的蓝色边框",[97,135324,135325],{"className":126537,"code":129901,"language":126539,"meta":25,"style":25},[103,135326,135327,135331,135337,135353],{"__ignoreMap":25},[106,135328,135329],{"class":108,"line":109},[106,135330,129908],{"class":175},[106,135332,135333,135335],{"class":108,"line":28},[106,135334,51605],{"class":51294},[106,135336,15565],{"class":116},[106,135338,135339,135341,135343,135345,135347,135349,135351],{"class":108,"line":1172},[106,135340,70890],{"class":165},[106,135342,51431],{"class":116},[106,135344,334],{"class":165},[106,135346,51486],{"class":112},[106,135348,51515],{"class":165},[106,135350,129929],{"class":165},[106,135352,1283],{"class":116},[106,135354,135355],{"class":108,"line":1187},[106,135356,1557],{"class":116},[14,135358,135359],{},"文本域：",[23,135361],{"style":126393,"src":135362},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-087.png",[14,135364,135365],{},"此时会有一个空白区域",[23,135367],{"style":126393,"src":135368},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-088.png",[14,135370,135371],{},"写在同一行就不会出现这个问题",[23,135373],{"style":126393,"src":135374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-089.png",[14,135376,135377],{},"文本域是行内块元素，一定记住！！！",[14,135379,98218],{},[23,135381],{"style":126393,"src":135382},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-090.png",[14,135384,135385],{},"文本域尽量放在一行",[14,135387,135388],{},"知识回顾：cols是列，rols是行",[23,135390],{"style":126393,"src":135391},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-091.png",[14,135393,135394],{},"它可以进行拖动，显然这是我们不愿意看到的",[23,135396],{"style":126393,"src":135397},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-092.png",[14,135399,135400],{},"使用resize进行解决",[97,135402,135404],{"className":126537,"code":135403,"language":126539,"meta":25,"style":25},"input {\n  outline: none;  \u002F* 取消表单轮廓线 *\u002F\n}\n",[103,135405,135406,135412,135425],{"__ignoreMap":25},[106,135407,135408,135410],{"class":108,"line":109},[106,135409,53815],{"class":51294},[106,135411,15565],{"class":116},[106,135413,135414,135416,135418,135420,135422],{"class":108,"line":28},[106,135415,70792],{"class":165},[106,135417,51431],{"class":116},[106,135419,54731],{"class":165},[106,135421,130400],{"class":116},[106,135423,135424],{"class":175},"\u002F* 取消表单轮廓线 *\u002F\n",[106,135426,135427],{"class":108,"line":1172},[106,135428,1557],{"class":116},[14,135430,135431],{},"此时就无法通过右下方实现拖动了",[77,135433,135435],{"id":135434},"_1323-vertical-align-属性应用","13.2.3 vertical-align 属性应用",[14,135437,135438],{},"实现一个盒子中的文字和图片对齐",[14,135440,135441,135442,135445],{},"用于设置一个元素的 ",[266,135443,135444],{},"垂直对齐方式"," ，但是它只针对于行内元素或者行内块元素有效",[14,135447,135448],{},"图片和文字默认是基线对齐",[23,135450],{"style":126393,"src":135451},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-093.png",[97,135453,135454],{"className":126537,"code":135403,"language":126539,"meta":25,"style":25},[103,135455,135456,135462,135474],{"__ignoreMap":25},[106,135457,135458,135460],{"class":108,"line":109},[106,135459,53815],{"class":51294},[106,135461,15565],{"class":116},[106,135463,135464,135466,135468,135470,135472],{"class":108,"line":28},[106,135465,70792],{"class":165},[106,135467,51431],{"class":116},[106,135469,54731],{"class":165},[106,135471,130400],{"class":116},[106,135473,135424],{"class":175},[106,135475,135476],{"class":108,"line":1172},[106,135477,1557],{"class":116},[23,135479],{"style":126393,"src":135480},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-094.png",[21991,135482,135484],{"id":135483},"_13231-图片表单和文字对齐","13.2.3.1 图片、表单和文字对齐",[14,135486,135487],{},"图片、表单都属于行内块元素，默认的 vertical-align 是基线对齐",[23,135489],{"style":126393,"src":135490},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-095.png",[14,135492,135493,135494,135497],{},"此时可以给图片、表单这些行内块元素的 ",[266,135495,135496],{},"vertical-align 属性设置为 middle"," 就可以让文字和图片垂直居中对齐了",[21991,135499,135501],{"id":135500},"_13232-解决图片底部默认空白缝隙问题","13.2.3.2 解决图片底部默认空白缝隙问题",[14,135503,135504],{},"bug：图片底侧会有一个空白缝隙，原因是行内块元素会和文字的基线对齐。",[14,135506,14626],{},[97,135508,135510],{"className":126537,"code":135509,"language":126539,"meta":25,"style":25},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\nimg {\n  vertical-align: middle;\n}\n",[103,135511,135512,135517,135523,135535],{"__ignoreMap":25},[106,135513,135514],{"class":108,"line":109},[106,135515,135516],{"class":175},"\u002F* 行内块\u002F图片与文字垂直对齐 *\u002F\n",[106,135518,135519,135521],{"class":108,"line":28},[106,135520,23],{"class":51294},[106,135522,15565],{"class":116},[106,135524,135525,135528,135530,135533],{"class":108,"line":1172},[106,135526,135527],{"class":165},"  vertical-align",[106,135529,51431],{"class":116},[106,135531,135532],{"class":165},"middle",[106,135534,1283],{"class":116},[106,135536,135537],{"class":108,"line":1187},[106,135538,1557],{"class":116},[23,135540],{"style":126393,"src":135541},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-096.png",[14,135543,135544],{},"主要解决方法有两种：",[60,135546,135547],{},[63,135548,135549,135552,135553,135556],{},[266,135550,135551],{},"给图片"," 添加 ",[266,135554,135555],{},"vertical-align:middle | top| bottom"," 等。 （提倡使用的）",[14,135558,135559,135560],{},"2.把图片转换为块级元素 ",[266,135561,135562],{},"display: block",[14,135564,135565],{},"两个块级盒子里边放了img图片，此时两个图片一个在上一个在下，但是是有间隙的，不像两个块级元素那样之间是没有间隙， 这是因为对齐方式的原因，加一句",[14,135567,135568],{},"img {",[14,135570,135571],{},"vertical-align:middle;",[14,135573,1063],{},[77,135575,135577],{"id":135576},"_1324-溢出文字用省略号显示","13.2.4 溢出文字用省略号显示",[14,135579,135580],{},"效果：",[23,135582],{"style":126393,"src":135583},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-097.png",[14,135585,135586],{},"单行文本溢出显示省略号--必须满足三个条件：",[97,135588,135590],{"className":126537,"code":135589,"language":126539,"meta":25,"style":25},"\u002F* 解决图片底部空白缝隙 *\u002F\nimg {\n  vertical-align: middle;\n  \u002F* 或 *\u002F\n  display: block;\n}\n",[103,135591,135592,135597,135603,135613,135618,135628],{"__ignoreMap":25},[106,135593,135594],{"class":108,"line":109},[106,135595,135596],{"class":175},"\u002F* 解决图片底部空白缝隙 *\u002F\n",[106,135598,135599,135601],{"class":108,"line":28},[106,135600,23],{"class":51294},[106,135602,15565],{"class":116},[106,135604,135605,135607,135609,135611],{"class":108,"line":1172},[106,135606,135527],{"class":165},[106,135608,51431],{"class":116},[106,135610,135532],{"class":165},[106,135612,1283],{"class":116},[106,135614,135615],{"class":108,"line":1187},[106,135616,135617],{"class":175},"  \u002F* 或 *\u002F\n",[106,135619,135620,135622,135624,135626],{"class":108,"line":1193},[106,135621,128153],{"class":165},[106,135623,51431],{"class":116},[106,135625,60863],{"class":165},[106,135627,1283],{"class":116},[106,135629,135630],{"class":108,"line":1207},[106,135631,1557],{"class":116},[77,135633,135635],{"id":135634},"_1325-多行文本溢出显示省略号","13.2.5 多行文本溢出显示省略号",[14,135637,135580],{},[23,135639],{"style":126393,"src":135640},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-098.png",[14,135642,135643,135644,135647],{},"多行文本溢出显示省略号， ",[266,135645,135646],{},"有较大兼容性问题"," ，适合于webKit浏览器或移动端（移动端大部分是webkit内核）",[97,135649,135650],{"className":126537,"code":135589,"language":126539,"meta":25,"style":25},[103,135651,135652,135656,135662,135672,135676,135686],{"__ignoreMap":25},[106,135653,135654],{"class":108,"line":109},[106,135655,135596],{"class":175},[106,135657,135658,135660],{"class":108,"line":28},[106,135659,23],{"class":51294},[106,135661,15565],{"class":116},[106,135663,135664,135666,135668,135670],{"class":108,"line":1172},[106,135665,135527],{"class":165},[106,135667,51431],{"class":116},[106,135669,135532],{"class":165},[106,135671,1283],{"class":116},[106,135673,135674],{"class":108,"line":1187},[106,135675,135617],{"class":175},[106,135677,135678,135680,135682,135684],{"class":108,"line":1193},[106,135679,128153],{"class":165},[106,135681,51431],{"class":116},[106,135683,60863],{"class":165},[106,135685,1283],{"class":116},[106,135687,135688],{"class":108,"line":1207},[106,135689,1557],{"class":116},[14,135691,135692],{},"由于后台人员可以操作每行多少字，所以最好从后台出发来实现该功能",[48,135694,135696],{"id":135695},"_133-常见布局技巧","13.3 常见布局技巧",[14,135698,135699],{},[266,135700,135701],{},"巧妙利用一个技术更快更好的布局：",[60,135703,135704,135707,135710,135713],{},[63,135705,135706],{},"margin负值的运用",[63,135708,135709],{},"文字围绕浮动元素",[63,135711,135712],{},"行内块的巧妙运用",[63,135714,135715],{},"CSS三角强化",[77,135717,135719],{"id":135718},"_1331-margin负值的运用","13.3.1 margin负值的运用",[14,135721,135722],{},"应用场景：",[23,135724],{"style":126393,"src":135725},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-099.png",[23,135727],{"style":126393,"src":135728},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-100.png",[14,135730,135731],{},"每个盒子都加边框，第一个的最右侧与第二个的最左侧会进行重合，通过margin负值可以解决该问题",[14,135733,135734],{},"1.让每个盒子margin 往左侧移动 -1px 正好压住相邻盒子边框",[97,135736,135737],{"className":126537,"code":129901,"language":126539,"meta":25,"style":25},[103,135738,135739,135743,135749,135765],{"__ignoreMap":25},[106,135740,135741],{"class":108,"line":109},[106,135742,129908],{"class":175},[106,135744,135745,135747],{"class":108,"line":28},[106,135746,51605],{"class":51294},[106,135748,15565],{"class":116},[106,135750,135751,135753,135755,135757,135759,135761,135763],{"class":108,"line":1172},[106,135752,70890],{"class":165},[106,135754,51431],{"class":116},[106,135756,334],{"class":165},[106,135758,51486],{"class":112},[106,135760,51515],{"class":165},[106,135762,129929],{"class":165},[106,135764,1283],{"class":116},[106,135766,135767],{"class":108,"line":1187},[106,135768,1557],{"class":116},[23,135770],{"style":126393,"src":135771},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-101.png",[14,135773,135774],{},"2.鼠标经过某个盒子的时候，提高当前盒子的层级即可（如果没有有定位，则加相对定位（保留位置），如果有定位，则加z-index）",[97,135776,135778],{"className":126537,"code":135777,"language":126539,"meta":25,"style":25},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n.box {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[103,135779,135780,135785,135791,135801,135813,135825],{"__ignoreMap":25},[106,135781,135782],{"class":108,"line":109},[106,135783,135784],{"class":175},"\u002F* 相对定位：相对于自身原位置移动，原位置保留 *\u002F\n",[106,135786,135787,135789],{"class":108,"line":28},[106,135788,130385],{"class":1955},[106,135790,15565],{"class":116},[106,135792,135793,135795,135797,135799],{"class":108,"line":1172},[106,135794,132343],{"class":165},[106,135796,51431],{"class":116},[106,135798,54758],{"class":165},[106,135800,1283],{"class":116},[106,135802,135803,135805,135807,135809,135811],{"class":108,"line":1187},[106,135804,132357],{"class":165},[106,135806,51431],{"class":116},[106,135808,563],{"class":165},[106,135810,51486],{"class":112},[106,135812,1283],{"class":116},[106,135814,135815,135817,135819,135821,135823],{"class":108,"line":1193},[106,135816,132374],{"class":165},[106,135818,51431],{"class":116},[106,135820,817],{"class":165},[106,135822,51486],{"class":112},[106,135824,1283],{"class":116},[106,135826,135827],{"class":108,"line":1207},[106,135828,1557],{"class":116},[14,135830,135831],{},"加上上述代码会发现：",[23,135833],{"style":126393,"src":135834},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-102.png",[14,135836,135837],{},"只有最后一个盒子边框显示的全，其他盒子右侧边框显示不全",[14,135839,135840],{},"解决方式1： 加相对定位，可以理解为在保留原位置的同时飞的更高一些了",[97,135842,135843],{"className":126537,"code":135777,"language":126539,"meta":25,"style":25},[103,135844,135845,135849,135855,135865,135877,135889],{"__ignoreMap":25},[106,135846,135847],{"class":108,"line":109},[106,135848,135784],{"class":175},[106,135850,135851,135853],{"class":108,"line":28},[106,135852,130385],{"class":1955},[106,135854,15565],{"class":116},[106,135856,135857,135859,135861,135863],{"class":108,"line":1172},[106,135858,132343],{"class":165},[106,135860,51431],{"class":116},[106,135862,54758],{"class":165},[106,135864,1283],{"class":116},[106,135866,135867,135869,135871,135873,135875],{"class":108,"line":1187},[106,135868,132357],{"class":165},[106,135870,51431],{"class":116},[106,135872,563],{"class":165},[106,135874,51486],{"class":112},[106,135876,1283],{"class":116},[106,135878,135879,135881,135883,135885,135887],{"class":108,"line":1193},[106,135880,132374],{"class":165},[106,135882,51431],{"class":116},[106,135884,817],{"class":165},[106,135886,51486],{"class":112},[106,135888,1283],{"class":116},[106,135890,135891],{"class":108,"line":1207},[106,135892,1557],{"class":116},[14,135894,135895],{},"解决方式2：",[14,135897,135898],{},"父盒子每个都是相对定位的话，用z-index提高层级就可以",[97,135900,135902],{"className":126537,"code":135901,"language":126539,"meta":25,"style":25},"div {\n  position: relative;\n  top: 10px;\n  left: 20px;\n}\n",[103,135903,135904,135910,135920,135932,135944],{"__ignoreMap":25},[106,135905,135906,135908],{"class":108,"line":109},[106,135907,51605],{"class":51294},[106,135909,15565],{"class":116},[106,135911,135912,135914,135916,135918],{"class":108,"line":28},[106,135913,132343],{"class":165},[106,135915,51431],{"class":116},[106,135917,54758],{"class":165},[106,135919,1283],{"class":116},[106,135921,135922,135924,135926,135928,135930],{"class":108,"line":1172},[106,135923,132357],{"class":165},[106,135925,51431],{"class":116},[106,135927,563],{"class":165},[106,135929,51486],{"class":112},[106,135931,1283],{"class":116},[106,135933,135934,135936,135938,135940,135942],{"class":108,"line":1187},[106,135935,132374],{"class":165},[106,135937,51431],{"class":116},[106,135939,817],{"class":165},[106,135941,51486],{"class":112},[106,135943,1283],{"class":116},[106,135945,135946],{"class":108,"line":1193},[106,135947,1557],{"class":116},[77,135949,135951],{"id":135950},"_1332-文字围绕浮动元素","13.3.2 文字围绕浮动元素",[14,135953,135722],{},[23,135955],{"style":126393,"src":135956},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-103.png",[14,135958,135959],{},"实现结构图：",[23,135961],{"style":126393,"src":135962},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-104.png",[14,135964,135965],{},"巧妙运用浮动元素不会压住文字的特性",[14,135967,135968],{},"代码显示：",[97,135970,135972],{"className":126537,"code":135971,"language":126539,"meta":25,"style":25},".box {\n  float: left;\n}\n```Css\n\u002F* margin 复合写法（同上） *\u002F\n.box {\n  margin: 0 auto;  \u002F* 块级盒子水平居中 *\u002F\n}\n",[103,135973,135974,135980,135990,135994,135999,136003,136009,136023],{"__ignoreMap":25},[106,135975,135976,135978],{"class":108,"line":109},[106,135977,130385],{"class":1955},[106,135979,15565],{"class":116},[106,135981,135982,135984,135986,135988],{"class":108,"line":28},[106,135983,131017],{"class":165},[106,135985,51431],{"class":116},[106,135987,23729],{"class":165},[106,135989,1283],{"class":116},[106,135991,135992],{"class":108,"line":1172},[106,135993,1557],{"class":116},[106,135995,135996],{"class":108,"line":1187},[106,135997,135998],{"class":116},"```Css\n",[106,136000,136001],{"class":108,"line":1193},[106,136002,130380],{"class":175},[106,136004,136005,136007],{"class":108,"line":1207},[106,136006,130385],{"class":1955},[106,136008,15565],{"class":116},[106,136010,136011,136013,136015,136017,136019,136021],{"class":108,"line":1213},[106,136012,70464],{"class":165},[106,136014,51431],{"class":116},[106,136016,308],{"class":165},[106,136018,51550],{"class":165},[106,136020,130400],{"class":116},[106,136022,130403],{"class":175},[106,136024,136025],{"class":108,"line":1304},[106,136026,1557],{"class":116},[14,136028,136029],{},"div, p, h1, ul, li {\n\u002F* 块级元素：独占一行，可设宽高 *\u002F\ndisplay: block;\n}",[97,136031,136034],{"className":136032,"code":136033,"language":5180},[5178],"\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",[103,136035,136033],{"__ignoreMap":25},[23,136037],{"style":126393,"src":136038},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-108.png",[14,136040,136041],{},"最终展示结果：",[97,136043,136044],{"className":126537,"code":130373,"language":126539,"meta":25,"style":25},[103,136045,136046,136050,136056,136070],{"__ignoreMap":25},[106,136047,136048],{"class":108,"line":109},[106,136049,130380],{"class":175},[106,136051,136052,136054],{"class":108,"line":28},[106,136053,130385],{"class":1955},[106,136055,15565],{"class":116},[106,136057,136058,136060,136062,136064,136066,136068],{"class":108,"line":1172},[106,136059,70464],{"class":165},[106,136061,51431],{"class":116},[106,136063,308],{"class":165},[106,136065,51550],{"class":165},[106,136067,130400],{"class":116},[106,136069,130403],{"class":175},[106,136071,136072],{"class":108,"line":1187},[106,136073,1557],{"class":116},[23,136075],{"style":126393,"src":136076},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-109.png",[48,136078,136080],{"id":136079},"_134-css-三角强化-案例","13.4 CSS 三角强化 案例",[77,136082,136084],{"id":136083},"_1341-原理","13.4.1 原理",[23,136086],{"style":126393,"src":136087},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-110.png",[97,136089,136090],{"className":126537,"code":130373,"language":126539,"meta":25,"style":25},[103,136091,136092,136096,136102,136116],{"__ignoreMap":25},[106,136093,136094],{"class":108,"line":109},[106,136095,130380],{"class":175},[106,136097,136098,136100],{"class":108,"line":28},[106,136099,130385],{"class":1955},[106,136101,15565],{"class":116},[106,136103,136104,136106,136108,136110,136112,136114],{"class":108,"line":1172},[106,136105,70464],{"class":165},[106,136107,51431],{"class":116},[106,136109,308],{"class":165},[106,136111,51550],{"class":165},[106,136113,130400],{"class":116},[106,136115,130403],{"class":175},[106,136117,136118],{"class":108,"line":1187},[106,136119,1557],{"class":116},[77,136121,136123],{"id":136122},"_1342-实例","13.4.2 实例",[23,136125],{"style":126393,"src":136126},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-111.png",[97,136128,136129],{"className":126537,"code":131003,"language":126539,"meta":25,"style":25},[103,136130,136131,136137,136147,136151,136157,136167],{"__ignoreMap":25},[106,136132,136133,136135],{"class":108,"line":109},[106,136134,131010],{"class":1955},[106,136136,15565],{"class":116},[106,136138,136139,136141,136143,136145],{"class":108,"line":28},[106,136140,131017],{"class":165},[106,136142,51431],{"class":116},[106,136144,23729],{"class":165},[106,136146,1283],{"class":116},[106,136148,136149],{"class":108,"line":1172},[106,136150,1557],{"class":116},[106,136152,136153,136155],{"class":108,"line":1187},[106,136154,131032],{"class":1955},[106,136156,15565],{"class":116},[106,136158,136159,136161,136163,136165],{"class":108,"line":1193},[106,136160,131017],{"class":165},[106,136162,51431],{"class":116},[106,136164,72516],{"class":165},[106,136166,1283],{"class":116},[106,136168,136169],{"class":108,"line":1207},[106,136170,1557],{"class":116},[48,136172,136174],{"id":136173},"_135-css的初始化","13.5 css的初始化",[14,136176,136177],{},"不同浏览器对有些标签的默认值是不同的，为了消除不同浏览器对HTML文本呈现的差异，照顾浏览器的兼容，我们需要对CSS 初始化",[14,136179,136180],{},"简单理解： CSS初始化是指重设浏览器的样式。 (也称为CSS reset）",[14,136182,136183],{},"每个网页都必须首先进行 CSS初始化。",[14,136185,136186],{},"这里我们以 京东CSS初始化代码为例。",[14,136188,136189],{},"在网页右键查看网页源代码",[14,136191,136192],{},"找到css的link引入语句",[14,136194,136195],{},"然后ctrl+f 输入body",[14,136197,77220],{},[23,136199],{"style":126393,"src":136200},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-112.png",[14,136202,77243],{},[23,136204],{"style":126393,"src":136205},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-113.png",[14,136207,136208],{},"③打开了网页上传压缩的代码",[23,136210],{"style":126393,"src":136211},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-114.png",[14,136213,136214],{},"④从body前可以查看这个网页的初始化代码",[14,136216,136217],{},[266,136218,136219],{},"Unicode编码字体：",[14,136221,136222],{},"把中文字体的名称用相应的Unicode编码来代替，这样就可以有效的避免浏览器解释CSS代码时候出现乱码的问题。",[14,136224,83201],{},[14,136226,136227],{},"黑体 \\9ED1\\4F53",[14,136229,136230],{},"宋体 \\5B8B\\4F53",[14,136232,136233],{},"微软雅黑 \\5FAE\\8F6F\\96C5\\9ED1",[5119,136235,136236],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":25,"searchDepth":28,"depth":28,"links":136238},[136239,136240,136247,136251,136255],{"id":135036,"depth":28,"text":135037},{"id":135158,"depth":28,"text":135159,"children":136241},[136242,136243,136244,136245,136246],{"id":135162,"depth":1172,"text":135163},{"id":135315,"depth":1172,"text":135316},{"id":135434,"depth":1172,"text":135435},{"id":135576,"depth":1172,"text":135577},{"id":135634,"depth":1172,"text":135635},{"id":135695,"depth":28,"text":135696,"children":136248},[136249,136250],{"id":135718,"depth":1172,"text":135719},{"id":135950,"depth":1172,"text":135951},{"id":136079,"depth":28,"text":136080,"children":136252},[136253,136254],{"id":136083,"depth":1172,"text":136084},{"id":136122,"depth":1172,"text":136123},{"id":136173,"depth":28,"text":136174},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch13",{"title":135028,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch13-界面样式与布局技巧","1U_cCgoCgAuImhvNFSJfV4PAZyUz5cp-t86rdHeziCk",{"id":136262,"title":136263,"body":136264,"description":30,"extension":31,"meta":137950,"navigation":33,"path":137951,"seo":137952,"stem":137953,"__hash__":137954},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性.md","14. HTML5与CSS3新特性",{"type":7,"value":136265,"toc":137939},[136266,136269,136273,136277,136280,136287,136290,136293,136331,136334,136336,136350,136354,136363,136367,136372,136375,136378,136381,136416,136421,136424,136454,136457,136462,136465,136468,136498,136501,136555,136558,136562,136567,136579,136582,136586,136616,136619,136624,136627,136657,136660,136664,136681,136685,136689,136692,136725,136728,136732,136735,136738,136741,136744,136747,136858,136861,136864,136867,136969,136972,136976,136980,136984,136987,137027,137030,137032,137048,137052,137055,137060,137141,137144,137147,137273,137278,137281,137289,137292,137297,137382,137385,137389,137392,137395,137399,137419,137424,137508,137511,137516,137519,137522,137600,137603,137606,137609,137612,137615,137620,137623,137626,137698,137701,137706,137709,137806,137809,137815,137818,137821,137824,137827,137830,137833,137836,137839,137843,137848,137851,137884,137889,137892,137933,137936],[10,136267,136263],{"id":136268},"_14-html5与css3新特性",[48,136270,136272],{"id":136271},"_141-html5的新特性","14.1 HTML5的新特性",[77,136274,136276],{"id":136275},"_1411-基本标签","14.1.1 基本标签",[14,136278,136279],{},"HTML5 的新增特性主要是针对于以前的不足，增加了一些新的标签、新的表单和新的表单属性等",[14,136281,136282,136283,136286],{},"这些新特性都有兼容性问题，基本是 ",[266,136284,136285],{},"IE9+ 以上版本的浏览器"," 才支持，如果不考虑兼容性问题，可以大量使用这些新特性",[14,136288,136289],{},"以前布局，我们基本用 div 来做。div 对于搜索引擎来说，是没有语义的",[14,136291,136292],{},"现在使用的是新特性：",[1124,136294,136295,136301,136307,136313,136319,136325],{},[63,136296,136297,136300],{},[103,136298,136299],{},"\u003Cheader>"," 头部标签",[63,136302,136303,136306],{},[103,136304,136305],{},"\u003Cnav>"," 导航标签",[63,136308,136309,136312],{},[103,136310,136311],{},"\u003Carticle>"," 内容标签",[63,136314,136315,136318],{},[103,136316,136317],{},"\u003Csection>"," 定义文档某个区域",[63,136320,136321,136324],{},[103,136322,136323],{},"\u003Caside>"," 侧边栏标签",[63,136326,136327,136330],{},[103,136328,136329],{},"\u003Cfooter>"," 尾部标签",[23,136332],{"style":126393,"src":136333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-115.png",[14,136335,146],{},[1124,136337,136338,136341,136344,136347],{},[63,136339,136340],{},"这种语义化标准主要是针对搜索引擎的",[63,136342,136343],{},"这些标签页面中可以经常使用",[63,136345,136346],{},"在IE9中，需要把这些元素转换为块级元素",[63,136348,136349],{},"移动端更喜欢使用这些标签",[77,136351,136353],{"id":136352},"_1412-多媒体标签","14.1.2 多媒体标签",[14,136355,136356,136357,136359,136360,136362],{},"音频 ",[266,136358,28168],{}," 和视频 ",[266,136361,28177],{}," 两个标签",[21991,136364,136366],{"id":136365},"_14121-视频标签-video","14.1.2.1 视频标签- video",[60,136368,136369],{},[63,136370,136371],{},"支持格式：",[23,136373],{"style":126393,"src":136374},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-116.png",[14,136376,136377],{},"尽量使用MP4，兼容性好",[14,136379,136380],{},"用MP4就可以",[97,136382,136384],{"className":127284,"code":136383,"language":127286,"meta":25,"style":25},"\u003Cvideo src=\"movie.mp4\" controls autoplay muted loop>\u003C\u002Fvideo>\n",[103,136385,136386],{"__ignoreMap":25},[106,136387,136388,136390,136392,136394,136396,136399,136401,136404,136407,136410,136412,136414],{"class":108,"line":109},[106,136389,1027],{"class":116},[106,136391,28177],{"class":51294},[106,136393,55233],{"class":1955},[106,136395,162],{"class":116},[106,136397,136398],{"class":221},"\"movie.mp4\"",[106,136400,92417],{"class":1955},[106,136402,136403],{"class":1955}," autoplay",[106,136405,136406],{"class":1955}," muted",[106,136408,136409],{"class":1955}," loop",[106,136411,55308],{"class":116},[106,136413,28177],{"class":51294},[106,136415,51301],{"class":116},[60,136417,136418],{"start":28},[63,136419,136420],{},"兼容写法",[14,136422,136423],{},"由于各个浏览器的支持情况不同，所以我们会有一种兼容性的写法，这种写法了解一下即可",[97,136425,136426],{"className":127284,"code":136383,"language":127286,"meta":25,"style":25},[103,136427,136428],{"__ignoreMap":25},[106,136429,136430,136432,136434,136436,136438,136440,136442,136444,136446,136448,136450,136452],{"class":108,"line":109},[106,136431,1027],{"class":116},[106,136433,28177],{"class":51294},[106,136435,55233],{"class":1955},[106,136437,162],{"class":116},[106,136439,136398],{"class":221},[106,136441,92417],{"class":1955},[106,136443,136403],{"class":1955},[106,136445,136406],{"class":1955},[106,136447,136409],{"class":1955},[106,136449,55308],{"class":116},[106,136451,28177],{"class":51294},[106,136453,51301],{"class":116},[14,136455,136456],{},"面这种写法，浏览器会匹配video标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[60,136458,136459],{"start":1172},[63,136460,136461],{},"video常用属性",[23,136463],{"style":126393,"src":136464},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-117.png",[14,136466,136467],{},"poster属性后面是跟的等待加载图片的地址",[97,136469,136470],{"className":127284,"code":134039,"language":127286,"meta":25,"style":25},[103,136471,136472],{"__ignoreMap":25},[106,136473,136474,136476,136478,136480,136482,136484,136486,136488,136490,136492,136494,136496],{"class":108,"line":109},[106,136475,1027],{"class":116},[106,136477,23],{"class":51294},[106,136479,55233],{"class":1955},[106,136481,162],{"class":116},[106,136483,134054],{"class":221},[106,136485,55241],{"class":1955},[106,136487,162],{"class":116},[106,136489,134061],{"class":221},[106,136491,134064],{"class":1955},[106,136493,162],{"class":116},[106,136495,134069],{"class":221},[106,136497,51301],{"class":116},[14,136499,136500],{},"谷歌浏览器为了避免移动端自动播放视频导致消耗较大的流量问题，对自动播放进行了禁用，解决方式：",[97,136502,136504],{"className":126537,"code":136503,"language":126539,"meta":25,"style":25},"\u002F* 2D 位移 *\u002F\ndiv {\n  transform: translate(100px, 50px);\n  \u002F* transform: translateX(100px);  仅水平 *\u002F\n  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n}\n",[103,136505,136506,136511,136517,136541,136546,136551],{"__ignoreMap":25},[106,136507,136508],{"class":108,"line":109},[106,136509,136510],{"class":175},"\u002F* 2D 位移 *\u002F\n",[106,136512,136513,136515],{"class":108,"line":28},[106,136514,51605],{"class":51294},[106,136516,15565],{"class":116},[106,136518,136519,136522,136524,136527,136529,136531,136533,136535,136537,136539],{"class":108,"line":1172},[106,136520,136521],{"class":165},"  transform",[106,136523,51431],{"class":116},[106,136525,136526],{"class":165},"translate",[106,136528,117],{"class":116},[106,136530,428],{"class":165},[106,136532,51486],{"class":112},[106,136534,12428],{"class":116},[106,136536,773],{"class":165},[106,136538,51486],{"class":112},[106,136540,2711],{"class":116},[106,136542,136543],{"class":108,"line":1187},[106,136544,136545],{"class":175},"  \u002F* transform: translateX(100px);  仅水平 *\u002F\n",[106,136547,136548],{"class":108,"line":1193},[106,136549,136550],{"class":175},"  \u002F* transform: translateY(50px);   仅垂直 *\u002F\n",[106,136552,136553],{"class":108,"line":1207},[106,136554,1557],{"class":116},[14,136556,136557],{},"muted:自动静音属性",[21991,136559,136561],{"id":136560},"_14122-音频标签audio","14.1.2.2 音频标签audio",[60,136563,136564],{},[63,136565,136566],{},"基本使用",[14,136568,136569,136570,136575,136576],{},"当前 ",[266,136571,136572],{},[103,136573,136574],{},"\u003Caudio>"," 元素支持三种视频格式： 尽量使用 ",[266,136577,136578],{},"mp3格式",[23,136580],{"style":126393,"src":136581},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-118.png",[60,136583,136584],{"start":28},[63,136585,136420],{},[97,136587,136588],{"className":127284,"code":136383,"language":127286,"meta":25,"style":25},[103,136589,136590],{"__ignoreMap":25},[106,136591,136592,136594,136596,136598,136600,136602,136604,136606,136608,136610,136612,136614],{"class":108,"line":109},[106,136593,1027],{"class":116},[106,136595,28177],{"class":51294},[106,136597,55233],{"class":1955},[106,136599,162],{"class":116},[106,136601,136398],{"class":221},[106,136603,92417],{"class":1955},[106,136605,136403],{"class":1955},[106,136607,136406],{"class":1955},[106,136609,136409],{"class":1955},[106,136611,55308],{"class":116},[106,136613,28177],{"class":51294},[106,136615,51301],{"class":116},[14,136617,136618],{},"上面这种写法，浏览器会匹配audio标签中的source，如果支持就播放，如果不支持往下匹配，直到没有匹配的格式，就提示文本",[60,136620,136621],{"start":1172},[63,136622,136623],{},"常用属性",[23,136625],{"style":126393,"src":136626},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-119.png",[97,136628,136629],{"className":127284,"code":136383,"language":127286,"meta":25,"style":25},[103,136630,136631],{"__ignoreMap":25},[106,136632,136633,136635,136637,136639,136641,136643,136645,136647,136649,136651,136653,136655],{"class":108,"line":109},[106,136634,1027],{"class":116},[106,136636,28177],{"class":51294},[106,136638,55233],{"class":1955},[106,136640,162],{"class":116},[106,136642,136398],{"class":221},[106,136644,92417],{"class":1955},[106,136646,136403],{"class":1955},[106,136648,136406],{"class":1955},[106,136650,136409],{"class":1955},[106,136652,55308],{"class":116},[106,136654,28177],{"class":51294},[106,136656,51301],{"class":116},[14,136658,136659],{},"谷歌也把音频的自动播放功能给禁用了：只能通过js来解决",[21991,136661,136663],{"id":136662},"_14123-总结","14.1.2.3 总结",[1124,136665,136666,136669,136672,136675,136678],{},[63,136667,136668],{},"音频标签和视频标签使用方式基本一致",[63,136670,136671],{},"浏览器支持情况不同",[63,136673,136674],{},"谷歌浏览器把音频和视频自动播放禁止了",[63,136676,136677],{},"我们可以给视频标签添加 muted 属性来静音播放视频，音频不可以（可以通过JavaScript解决）",[63,136679,136680],{},"视频标签是重点，我们经常设置自动播放，不使用 controls 控件，循环和设置大小属性",[77,136682,136684],{"id":136683},"_1413-表单元素","14.1.3 表单元素",[21991,136686,136688],{"id":136687},"_14131-html5新增input类型","14.1.3.1 HTML5新增input类型",[23,136690],{"style":126393,"src":136691},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-120.png",[97,136693,136695],{"className":127284,"code":136694,"language":127286,"meta":25,"style":25},"\u003Cinput type=\"text\" name=\"username\" placeholder=\"请输入用户名\">\n",[103,136696,136697],{"__ignoreMap":25},[106,136698,136699,136701,136703,136705,136707,136709,136711,136713,136716,136718,136720,136723],{"class":108,"line":109},[106,136700,1027],{"class":116},[106,136702,53815],{"class":51294},[106,136704,53818],{"class":1955},[106,136706,162],{"class":116},[106,136708,62693],{"class":221},[106,136710,14913],{"class":1955},[106,136712,162],{"class":116},[106,136714,136715],{"class":221},"\"username\"",[106,136717,61014],{"class":1955},[106,136719,162],{"class":116},[106,136721,136722],{"class":221},"\"请输入用户名\"",[106,136724,51301],{"class":116},[23,136726],{"style":126393,"src":136727},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-121.png",[21991,136729,136731],{"id":136730},"_14132-html5新增表单属性","14.1.3.2 HTML5新增表单属性",[23,136733],{"style":126393,"src":136734},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-122.png",[14,136736,136737],{},"使用autocomplete时需要给name值，可以理解为name就是用于连接服务器的",[14,136739,136740],{},"快捷操作：",[23,136742],{"style":126393,"src":136743},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-123.png",[14,136745,136746],{},"例子1：",[97,136748,136750],{"className":127284,"code":136749,"language":127286,"meta":25,"style":25},"\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",[103,136751,136752,136775,136802,136831,136850],{"__ignoreMap":25},[106,136753,136754,136756,136758,136760,136762,136765,136768,136770,136773],{"class":108,"line":109},[106,136755,1027],{"class":116},[106,136757,66619],{"class":51294},[106,136759,66622],{"class":1955},[106,136761,162],{"class":116},[106,136763,136764],{"class":221},"\"\u002Fsubmit\"",[106,136766,136767],{"class":1955}," method",[106,136769,162],{"class":116},[106,136771,136772],{"class":221},"\"post\"",[106,136774,51301],{"class":116},[106,136776,136777,136779,136781,136783,136785,136787,136789,136791,136793,136795,136797,136800],{"class":108,"line":28},[106,136778,52138],{"class":116},[106,136780,53815],{"class":51294},[106,136782,53818],{"class":1955},[106,136784,162],{"class":116},[106,136786,62693],{"class":221},[106,136788,14913],{"class":1955},[106,136790,162],{"class":116},[106,136792,136715],{"class":221},[106,136794,61014],{"class":1955},[106,136796,162],{"class":116},[106,136798,136799],{"class":221},"\"用户名\"",[106,136801,51301],{"class":116},[106,136803,136804,136806,136808,136810,136812,136815,136817,136819,136822,136824,136826,136829],{"class":108,"line":1172},[106,136805,52138],{"class":116},[106,136807,53815],{"class":51294},[106,136809,53818],{"class":1955},[106,136811,162],{"class":116},[106,136813,136814],{"class":221},"\"password\"",[106,136816,14913],{"class":1955},[106,136818,162],{"class":116},[106,136820,136821],{"class":221},"\"pwd\"",[106,136823,61014],{"class":1955},[106,136825,162],{"class":116},[106,136827,136828],{"class":221},"\"密码\"",[106,136830,51301],{"class":116},[106,136832,136833,136835,136837,136839,136841,136843,136846,136848],{"class":108,"line":1187},[106,136834,52138],{"class":116},[106,136836,53881],{"class":51294},[106,136838,53818],{"class":1955},[106,136840,162],{"class":116},[106,136842,66642],{"class":221},[106,136844,136845],{"class":116},">提交\u003C\u002F",[106,136847,53881],{"class":51294},[106,136849,51301],{"class":116},[106,136851,136852,136854,136856],{"class":108,"line":1193},[106,136853,51779],{"class":116},[106,136855,66619],{"class":51294},[106,136857,51301],{"class":116},[23,136859],{"style":126393,"src":136860},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-124.png",[14,136862,136863],{},"value是表单域的内容",[14,136865,136866],{},"例子2：",[97,136868,136869],{"className":127284,"code":136749,"language":127286,"meta":25,"style":25},[103,136870,136871,136891,136917,136943,136961],{"__ignoreMap":25},[106,136872,136873,136875,136877,136879,136881,136883,136885,136887,136889],{"class":108,"line":109},[106,136874,1027],{"class":116},[106,136876,66619],{"class":51294},[106,136878,66622],{"class":1955},[106,136880,162],{"class":116},[106,136882,136764],{"class":221},[106,136884,136767],{"class":1955},[106,136886,162],{"class":116},[106,136888,136772],{"class":221},[106,136890,51301],{"class":116},[106,136892,136893,136895,136897,136899,136901,136903,136905,136907,136909,136911,136913,136915],{"class":108,"line":28},[106,136894,52138],{"class":116},[106,136896,53815],{"class":51294},[106,136898,53818],{"class":1955},[106,136900,162],{"class":116},[106,136902,62693],{"class":221},[106,136904,14913],{"class":1955},[106,136906,162],{"class":116},[106,136908,136715],{"class":221},[106,136910,61014],{"class":1955},[106,136912,162],{"class":116},[106,136914,136799],{"class":221},[106,136916,51301],{"class":116},[106,136918,136919,136921,136923,136925,136927,136929,136931,136933,136935,136937,136939,136941],{"class":108,"line":1172},[106,136920,52138],{"class":116},[106,136922,53815],{"class":51294},[106,136924,53818],{"class":1955},[106,136926,162],{"class":116},[106,136928,136814],{"class":221},[106,136930,14913],{"class":1955},[106,136932,162],{"class":116},[106,136934,136821],{"class":221},[106,136936,61014],{"class":1955},[106,136938,162],{"class":116},[106,136940,136828],{"class":221},[106,136942,51301],{"class":116},[106,136944,136945,136947,136949,136951,136953,136955,136957,136959],{"class":108,"line":1187},[106,136946,52138],{"class":116},[106,136948,53881],{"class":51294},[106,136950,53818],{"class":1955},[106,136952,162],{"class":116},[106,136954,66642],{"class":221},[106,136956,136845],{"class":116},[106,136958,53881],{"class":51294},[106,136960,51301],{"class":116},[106,136962,136963,136965,136967],{"class":108,"line":1193},[106,136964,51779],{"class":116},[106,136966,66619],{"class":51294},[106,136968,51301],{"class":116},[23,136970],{"style":126393,"src":136971},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-125.png",[48,136973,136975],{"id":136974},"_142-css新特性","14.2 CSS新特性",[77,136977,136979],{"id":136978},"_1421-新增选择器","14.2.1 新增选择器",[21991,136981,136983],{"id":136982},"_14211-属性选择器","14.2.1.1 属性选择器",[23,136985],{"style":126393,"src":136986},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-126.png",[97,136988,136990],{"className":126537,"code":136989,"language":126539,"meta":25,"style":25},"input[type=\"text\"] {\n  border: 1px solid #999;\n}\n",[103,136991,136992,137007,137023],{"__ignoreMap":25},[106,136993,136994,136996,136998,137000,137002,137004],{"class":108,"line":109},[106,136995,53815],{"class":51294},[106,136997,1007],{"class":116},[106,136999,103092],{"class":1955},[106,137001,162],{"class":112},[106,137003,62693],{"class":221},[106,137005,137006],{"class":116},"] {\n",[106,137008,137009,137011,137013,137015,137017,137019,137021],{"class":108,"line":28},[106,137010,70890],{"class":165},[106,137012,51431],{"class":116},[106,137014,334],{"class":165},[106,137016,51486],{"class":112},[106,137018,51515],{"class":165},[106,137020,130117],{"class":165},[106,137022,1283],{"class":116},[106,137024,137025],{"class":108,"line":1172},[106,137026,1557],{"class":116},[23,137028],{"style":126393,"src":137029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-127.png",[14,137031,146],{},[1124,137033,137034,137037,137040,137043],{},[63,137035,137036],{},"属性选择器，按照字面意思，都是根据标签中的属性来选择元素",[63,137038,137039],{},"属性选择器可以根据元素特定属性的来选择元素。 这样就可以不用借助于类或者id选择器",[63,137041,137042],{},"属性选择器也可以选择出来自定义的属性",[63,137044,137045,137047],{},[266,137046,9018],{}," 类选择器、属性选择器、伪类选择器，权重为 10",[21991,137049,137051],{"id":137050},"_14212-结构伪类选择器","14.2.1.2 结构伪类选择器",[23,137053],{"style":126393,"src":137054},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-128.png",[60,137056,137057],{},[63,137058,137059],{},"fist-child",[97,137061,137063],{"className":126537,"code":137062,"language":126539,"meta":25,"style":25},"\u002F* 属性选择器 *\u002F\ninput[type=\"text\"] { }\ninput[class^=\"icon\"] { }  \u002F* 以 icon 开头 *\u002F\ninput[class$=\"icon\"] { }  \u002F* 以 icon 结尾 *\u002F\ninput[class*=\"icon\"] { }  \u002F* 包含 icon *\u002F\n",[103,137064,137065,137070,137085,137105,137123],{"__ignoreMap":25},[106,137066,137067],{"class":108,"line":109},[106,137068,137069],{"class":175},"\u002F* 属性选择器 *\u002F\n",[106,137071,137072,137074,137076,137078,137080,137082],{"class":108,"line":28},[106,137073,53815],{"class":51294},[106,137075,1007],{"class":116},[106,137077,103092],{"class":1955},[106,137079,162],{"class":112},[106,137081,62693],{"class":221},[106,137083,137084],{"class":116},"] { }\n",[106,137086,137087,137089,137091,137093,137096,137099,137102],{"class":108,"line":1172},[106,137088,53815],{"class":51294},[106,137090,1007],{"class":116},[106,137092,14687],{"class":1955},[106,137094,137095],{"class":112},"^=",[106,137097,137098],{"class":221},"\"icon\"",[106,137100,137101],{"class":116},"] { }  ",[106,137103,137104],{"class":175},"\u002F* 以 icon 开头 *\u002F\n",[106,137106,137107,137109,137111,137113,137116,137118,137120],{"class":108,"line":1187},[106,137108,53815],{"class":51294},[106,137110,1007],{"class":116},[106,137112,14687],{"class":1955},[106,137114,137115],{"class":112},"$=",[106,137117,137098],{"class":221},[106,137119,137101],{"class":116},[106,137121,137122],{"class":175},"\u002F* 以 icon 结尾 *\u002F\n",[106,137124,137125,137127,137129,137131,137134,137136,137138],{"class":108,"line":1193},[106,137126,53815],{"class":51294},[106,137128,1007],{"class":116},[106,137130,14687],{"class":1955},[106,137132,137133],{"class":112},"*=",[106,137135,137098],{"class":221},[106,137137,137101],{"class":116},[106,137139,137140],{"class":175},"\u002F* 包含 icon *\u002F\n",[14,137142,137143],{},"ul的第一个儿子文本为红色",[14,137145,137146],{},"一定要在冒号前加空格，不然就是选中所有的了",[97,137148,137150],{"className":126537,"code":137149,"language":126539,"meta":25,"style":25},".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",[103,137151,137152,137158,137168,137172,137176,137181,137194,137207,137223,137240,137257],{"__ignoreMap":25},[106,137153,137154,137156],{"class":108,"line":109},[106,137155,126828],{"class":1955},[106,137157,15565],{"class":116},[106,137159,137160,137162,137164,137166],{"class":108,"line":28},[106,137161,70899],{"class":165},[106,137163,51431],{"class":116},[106,137165,57415],{"class":165},[106,137167,1283],{"class":116},[106,137169,137170],{"class":108,"line":1172},[106,137171,1557],{"class":116},[106,137173,137174],{"class":108,"line":1187},[106,137175,135998],{"class":116},[106,137177,137178],{"class":108,"line":1193},[106,137179,137180],{"class":175},"\u002F* 结构伪类选择器 *\u002F\n",[106,137182,137183,137185,137188,137191],{"class":108,"line":1207},[106,137184,63],{"class":51294},[106,137186,137187],{"class":1955},":first-child",[106,137189,137190],{"class":116}," { }           ",[106,137192,137193],{"class":175},"\u002F* 第一个 *\u002F\n",[106,137195,137196,137198,137201,137204],{"class":108,"line":1213},[106,137197,63],{"class":51294},[106,137199,137200],{"class":1955},":last-child",[106,137202,137203],{"class":116}," { }            ",[106,137205,137206],{"class":175},"\u002F* 最后一个 *\u002F\n",[106,137208,137209,137211,137213,137215,137217,137220],{"class":108,"line":1304},[106,137210,63],{"class":51294},[106,137212,129451],{"class":1955},[106,137214,117],{"class":116},[106,137216,194],{"class":165},[106,137218,137219],{"class":116},") { }          ",[106,137221,137222],{"class":175},"\u002F* 第2个 *\u002F\n",[106,137224,137225,137227,137229,137231,137234,137237],{"class":108,"line":1310},[106,137226,63],{"class":51294},[106,137228,129451],{"class":1955},[106,137230,117],{"class":116},[106,137232,137233],{"class":165},"2n",[106,137235,137236],{"class":116},") { }         ",[106,137238,137239],{"class":175},"\u002F* 偶数 *\u002F\n",[106,137241,137242,137244,137246,137248,137251,137254],{"class":108,"line":1322},[106,137243,63],{"class":51294},[106,137245,129451],{"class":1955},[106,137247,117],{"class":116},[106,137249,137250],{"class":165},"2n+1",[106,137252,137253],{"class":116},") { }       ",[106,137255,137256],{"class":175},"\u002F* 奇数 *\u002F\n",[106,137258,137259,137261,137263,137265,137268,137270],{"class":108,"line":1604},[106,137260,63],{"class":51294},[106,137262,129451],{"class":1955},[106,137264,117],{"class":116},[106,137266,137267],{"class":165},"-n+3",[106,137269,137253],{"class":116},[106,137271,137272],{"class":175},"\u002F* 前3个 *\u002F\n",[51605,137274,137277],{"className":137275},[137276],"example","\n  示例内容\n",[14,137279,137280],{},"此时有1会执行操作，确定为第一个孩子:光头强，但是它是p标签，然后接着与前边进行匹配，前面是div与p是不匹配的，所以此时是不输出任何结果的，不会使第一个孩子的背景变为蓝色",[1124,137282,137283],{},[63,137284,137285,137288],{},[103,137286,137287],{},"E:nth-of-type(n)"," 匹配同类型中的第n个同级兄弟元素E，也就是说，对父元素里面指定子元素进行排序选择。 先去匹配E ，然后再根据E 找第n个孩子",[14,137290,137291],{},"也就是说它选择的是熊大",[60,137293,137294],{"start":1207},[63,137295,137296],{},"权重",[97,137298,137300],{"className":126537,"code":137299,"language":126539,"meta":25,"style":25},"\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",[103,137301,137302,137306,137316,137326,137340,137354,137368],{"__ignoreMap":25},[106,137303,137304],{"class":108,"line":109},[106,137305,137180],{"class":175},[106,137307,137308,137310,137312,137314],{"class":108,"line":28},[106,137309,63],{"class":51294},[106,137311,137187],{"class":1955},[106,137313,137190],{"class":116},[106,137315,137193],{"class":175},[106,137317,137318,137320,137322,137324],{"class":108,"line":1172},[106,137319,63],{"class":51294},[106,137321,137200],{"class":1955},[106,137323,137203],{"class":116},[106,137325,137206],{"class":175},[106,137327,137328,137330,137332,137334,137336,137338],{"class":108,"line":1187},[106,137329,63],{"class":51294},[106,137331,129451],{"class":1955},[106,137333,117],{"class":116},[106,137335,194],{"class":165},[106,137337,137219],{"class":116},[106,137339,137222],{"class":175},[106,137341,137342,137344,137346,137348,137350,137352],{"class":108,"line":1193},[106,137343,63],{"class":51294},[106,137345,129451],{"class":1955},[106,137347,117],{"class":116},[106,137349,137233],{"class":165},[106,137351,137236],{"class":116},[106,137353,137239],{"class":175},[106,137355,137356,137358,137360,137362,137364,137366],{"class":108,"line":1207},[106,137357,63],{"class":51294},[106,137359,129451],{"class":1955},[106,137361,117],{"class":116},[106,137363,137250],{"class":165},[106,137365,137253],{"class":116},[106,137367,137256],{"class":175},[106,137369,137370,137372,137374,137376,137378,137380],{"class":108,"line":1213},[106,137371,63],{"class":51294},[106,137373,129451],{"class":1955},[106,137375,117],{"class":116},[106,137377,137267],{"class":165},[106,137379,137253],{"class":116},[106,137381,137272],{"class":175},[14,137383,137384],{},"这个的权重为12，:nth-of-type(1)为结构伪类选择器，权重为10，div为标签选择器为1，section也为标签选择器权重也为1,也就是上述总权重为12",[21991,137386,137388],{"id":137387},"_14213-伪元素选择器","14.2.1.3 伪元素选择器",[14,137390,137391],{},"伪元素选择器可以帮助我们利用CSS创建新标签元素，而不需要HTML标签，从而简化HTML结构",[23,137393],{"style":126393,"src":137394},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-130.png",[60,137396,137397],{},[63,137398,146],{},[1124,137400,137401,137404,137407,137410,137413,137416],{},[63,137402,137403],{},"before 和 after 创建一个元素，但是属于行内元素（也就是宽高不起作用，需要转换模式才会起作用）",[63,137405,137406],{},"新创建的这个元素在文档树中是找不到的（在网页F12中查看文档树），找不到这个盒子，所以我们称为伪元素",[63,137408,137409],{},"语法： element::before {}",[63,137411,137412],{},"before 和 after 必须有 content 属性",[63,137414,137415],{},"before 在父元素内容里面的前面创建元素，after 在父元素内容里面的后面插入元素，内容是放到中间的，不会影响本身的内容",[63,137417,137418],{},"伪元素选择器和标签选择器一样，权重为 1",[60,137420,137421],{"start":28},[63,137422,137423],{},"实例",[97,137425,137426],{"className":126537,"code":137299,"language":126539,"meta":25,"style":25},[103,137427,137428,137432,137442,137452,137466,137480,137494],{"__ignoreMap":25},[106,137429,137430],{"class":108,"line":109},[106,137431,137180],{"class":175},[106,137433,137434,137436,137438,137440],{"class":108,"line":28},[106,137435,63],{"class":51294},[106,137437,137187],{"class":1955},[106,137439,137190],{"class":116},[106,137441,137193],{"class":175},[106,137443,137444,137446,137448,137450],{"class":108,"line":1172},[106,137445,63],{"class":51294},[106,137447,137200],{"class":1955},[106,137449,137203],{"class":116},[106,137451,137206],{"class":175},[106,137453,137454,137456,137458,137460,137462,137464],{"class":108,"line":1187},[106,137455,63],{"class":51294},[106,137457,129451],{"class":1955},[106,137459,117],{"class":116},[106,137461,194],{"class":165},[106,137463,137219],{"class":116},[106,137465,137222],{"class":175},[106,137467,137468,137470,137472,137474,137476,137478],{"class":108,"line":1193},[106,137469,63],{"class":51294},[106,137471,129451],{"class":1955},[106,137473,117],{"class":116},[106,137475,137233],{"class":165},[106,137477,137236],{"class":116},[106,137479,137239],{"class":175},[106,137481,137482,137484,137486,137488,137490,137492],{"class":108,"line":1207},[106,137483,63],{"class":51294},[106,137485,129451],{"class":1955},[106,137487,117],{"class":116},[106,137489,137250],{"class":165},[106,137491,137253],{"class":116},[106,137493,137256],{"class":175},[106,137495,137496,137498,137500,137502,137504,137506],{"class":108,"line":1213},[106,137497,63],{"class":51294},[106,137499,129451],{"class":1955},[106,137501,117],{"class":116},[106,137503,137267],{"class":165},[106,137505,137253],{"class":116},[106,137507,137272],{"class":175},[23,137509],{"style":126393,"src":137510},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-131.png",[60,137512,137513],{"start":1172},[63,137514,137515],{},"使用场景1",[23,137517],{"style":126393,"src":137518},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-132.png",[14,137520,137521],{},"不需要再加盒子来整红色那部分了",[97,137523,137525],{"className":126537,"code":137524,"language":126539,"meta":25,"style":25},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\ndiv::before {\n  content: \"\";\n  display: block;\n}\ndiv::after {\n  content: \"→\";\n  color: #999;\n}\n",[103,137526,137527,137532,137541,137552,137562,137566,137575,137586,137596],{"__ignoreMap":25},[106,137528,137529],{"class":108,"line":109},[106,137530,137531],{"class":175},"\u002F* 伪元素选择器（必须有 content 属性） *\u002F\n",[106,137533,137534,137536,137539],{"class":108,"line":28},[106,137535,51605],{"class":51294},[106,137537,137538],{"class":1955},"::before",[106,137540,15565],{"class":116},[106,137542,137543,137546,137548,137550],{"class":108,"line":1172},[106,137544,137545],{"class":165},"  content",[106,137547,51431],{"class":116},[106,137549,7645],{"class":221},[106,137551,1283],{"class":116},[106,137553,137554,137556,137558,137560],{"class":108,"line":1187},[106,137555,128153],{"class":165},[106,137557,51431],{"class":116},[106,137559,60863],{"class":165},[106,137561,1283],{"class":116},[106,137563,137564],{"class":108,"line":1193},[106,137565,1557],{"class":116},[106,137567,137568,137570,137573],{"class":108,"line":1207},[106,137569,51605],{"class":51294},[106,137571,137572],{"class":1955},"::after",[106,137574,15565],{"class":116},[106,137576,137577,137579,137581,137584],{"class":108,"line":1213},[106,137578,137545],{"class":165},[106,137580,51431],{"class":116},[106,137582,137583],{"class":221},"\"→\"",[106,137585,1283],{"class":116},[106,137587,137588,137590,137592,137594],{"class":108,"line":1304},[106,137589,70899],{"class":165},[106,137591,51431],{"class":116},[106,137593,62064],{"class":165},[106,137595,1283],{"class":116},[106,137597,137598],{"class":108,"line":1310},[106,137599,1557],{"class":116},[23,137601],{"style":126393,"src":137602},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-133.png",[14,137604,137605],{},"如果使用字体图标时可以不复制后边的矩形框，复制前边的数字也是可以的",[23,137607],{"style":126393,"src":137608},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-134.png",[14,137610,137611],{},"但是在引用时需要先转义一下",[14,137613,137614],{},"content='\\e930'",[60,137616,137617],{"start":1187},[63,137618,137619],{},"使用场景2",[14,137621,137622],{},"仿土豆效果",[14,137624,137625],{},"通过使用伪元素选择器可以减少body中盒子的数量",[97,137627,137628],{"className":126537,"code":137524,"language":126539,"meta":25,"style":25},[103,137629,137630,137634,137642,137652,137662,137666,137674,137684,137694],{"__ignoreMap":25},[106,137631,137632],{"class":108,"line":109},[106,137633,137531],{"class":175},[106,137635,137636,137638,137640],{"class":108,"line":28},[106,137637,51605],{"class":51294},[106,137639,137538],{"class":1955},[106,137641,15565],{"class":116},[106,137643,137644,137646,137648,137650],{"class":108,"line":1172},[106,137645,137545],{"class":165},[106,137647,51431],{"class":116},[106,137649,7645],{"class":221},[106,137651,1283],{"class":116},[106,137653,137654,137656,137658,137660],{"class":108,"line":1187},[106,137655,128153],{"class":165},[106,137657,51431],{"class":116},[106,137659,60863],{"class":165},[106,137661,1283],{"class":116},[106,137663,137664],{"class":108,"line":1193},[106,137665,1557],{"class":116},[106,137667,137668,137670,137672],{"class":108,"line":1207},[106,137669,51605],{"class":51294},[106,137671,137572],{"class":1955},[106,137673,15565],{"class":116},[106,137675,137676,137678,137680,137682],{"class":108,"line":1213},[106,137677,137545],{"class":165},[106,137679,51431],{"class":116},[106,137681,137583],{"class":221},[106,137683,1283],{"class":116},[106,137685,137686,137688,137690,137692],{"class":108,"line":1304},[106,137687,70899],{"class":165},[106,137689,51431],{"class":116},[106,137691,62064],{"class":165},[106,137693,1283],{"class":116},[106,137695,137696],{"class":108,"line":1310},[106,137697,1557],{"class":116},[23,137699],{"style":126393,"src":137700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-135.png",[60,137702,137703],{"start":1193},[63,137704,137705],{},"使用场景3",[14,137707,137708],{},"清除浮动：原因回顾，大盒子没有设置高度，里边的两个盒子都设置浮动之后，大盒子会塌陷",[97,137710,137712],{"className":126537,"code":137711,"language":126539,"meta":25,"style":25},".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",[103,137713,137714,137720,137730,137734,137738,137742,137750,137760,137770,137774,137782,137792,137802],{"__ignoreMap":25},[106,137715,137716,137718],{"class":108,"line":109},[106,137717,130385],{"class":1955},[106,137719,15565],{"class":116},[106,137721,137722,137724,137726,137728],{"class":108,"line":28},[106,137723,131017],{"class":165},[106,137725,51431],{"class":116},[106,137727,23729],{"class":165},[106,137729,1283],{"class":116},[106,137731,137732],{"class":108,"line":1172},[106,137733,1557],{"class":116},[106,137735,137736],{"class":108,"line":1187},[106,137737,135998],{"class":116},[106,137739,137740],{"class":108,"line":1193},[106,137741,137531],{"class":175},[106,137743,137744,137746,137748],{"class":108,"line":1207},[106,137745,51605],{"class":51294},[106,137747,137538],{"class":1955},[106,137749,15565],{"class":116},[106,137751,137752,137754,137756,137758],{"class":108,"line":1213},[106,137753,137545],{"class":165},[106,137755,51431],{"class":116},[106,137757,7645],{"class":221},[106,137759,1283],{"class":116},[106,137761,137762,137764,137766,137768],{"class":108,"line":1304},[106,137763,128153],{"class":165},[106,137765,51431],{"class":116},[106,137767,60863],{"class":165},[106,137769,1283],{"class":116},[106,137771,137772],{"class":108,"line":1310},[106,137773,1557],{"class":116},[106,137775,137776,137778,137780],{"class":108,"line":1322},[106,137777,51605],{"class":51294},[106,137779,137572],{"class":1955},[106,137781,15565],{"class":116},[106,137783,137784,137786,137788,137790],{"class":108,"line":1604},[106,137785,137545],{"class":165},[106,137787,51431],{"class":116},[106,137789,137583],{"class":221},[106,137791,1283],{"class":116},[106,137793,137794,137796,137798,137800],{"class":108,"line":1609},[106,137795,70899],{"class":165},[106,137797,51431],{"class":116},[106,137799,62064],{"class":165},[106,137801,1283],{"class":116},[106,137803,137804],{"class":108,"line":1615},[106,137805,1557],{"class":116},[14,137807,137808],{},"div {\nmargin: 0 auto;\n}",[97,137810,137813],{"className":137811,"code":137812,"language":5180},[5178],"\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",[103,137814,137812],{"__ignoreMap":25},[14,137816,137817],{},"如果想让多个元素都发生变化",[14,137819,137820],{},"不能如下操作：",[14,137822,137823],{},"transition: width 2s ease 0.5s;",[14,137825,137826],{},"transition: height 2s ease 0.5s;不对！！！",[14,137828,137829],{},"上方会样式冲突，导致不显示任何过渡效果",[14,137831,137832],{},"使用如下：加逗号隔开",[14,137834,137835],{},"transition: width 2s ease 0.5s, height 2s ease 0.5s, background-color 2s ease;",[14,137837,137838],{},"transition all 2s ease;",[77,137840,137842],{"id":137841},"_1426-过渡练习","14.2.6 过渡练习",[60,137844,137845],{},[63,137846,137847],{},"进度条",[23,137849],{"style":126393,"src":137850},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-141.png",[97,137852,137854],{"className":126537,"code":137853,"language":126539,"meta":25,"style":25},"div {\n  transition: all 0.3s ease;\n}\n",[103,137855,137856,137862,137880],{"__ignoreMap":25},[106,137857,137858,137860],{"class":108,"line":109},[106,137859,51605],{"class":51294},[106,137861,15565],{"class":116},[106,137863,137864,137867,137869,137871,137874,137876,137878],{"class":108,"line":28},[106,137865,137866],{"class":165},"  transition",[106,137868,51431],{"class":116},[106,137870,28115],{"class":165},[106,137872,137873],{"class":165}," 0.3",[106,137875,812],{"class":112},[106,137877,78674],{"class":165},[106,137879,1283],{"class":116},[106,137881,137882],{"class":108,"line":1172},[106,137883,1557],{"class":116},[60,137885,137886],{"start":28},[63,137887,137888],{},"小米logo",[14,137890,137891],{},"当将鼠标放到图标时，mi-logo会往右侧过渡；mi-home出现",[97,137893,137895],{"className":126537,"code":137894,"language":126539,"meta":25,"style":25},"\u002F* CSS3 过渡 *\u002F\ndiv {\n  transition: all 0.3s ease;\n  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n}\n",[103,137896,137897,137902,137908,137924,137929],{"__ignoreMap":25},[106,137898,137899],{"class":108,"line":109},[106,137900,137901],{"class":175},"\u002F* CSS3 过渡 *\u002F\n",[106,137903,137904,137906],{"class":108,"line":28},[106,137905,51605],{"class":51294},[106,137907,15565],{"class":116},[106,137909,137910,137912,137914,137916,137918,137920,137922],{"class":108,"line":1172},[106,137911,137866],{"class":165},[106,137913,51431],{"class":116},[106,137915,28115],{"class":165},[106,137917,137873],{"class":165},[106,137919,812],{"class":112},[106,137921,78674],{"class":165},[106,137923,1283],{"class":116},[106,137925,137926],{"class":108,"line":1187},[106,137927,137928],{"class":175},"  \u002F* transition: 属性 时长 曲线 延迟； *\u002F\n",[106,137930,137931],{"class":108,"line":1193},[106,137932,1557],{"class":116},[14,137934,137935],{},"理解：在设计的时候可以多考虑使用伪元素选择器，动画的时候不要想着只通过一个hover就可以实现，可以让before和after都添加hover来进行运动",[5119,137937,137938],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":25,"searchDepth":28,"depth":28,"links":137940},[137941,137946],{"id":136271,"depth":28,"text":136272,"children":137942},[137943,137944,137945],{"id":136275,"depth":1172,"text":136276},{"id":136352,"depth":1172,"text":136353},{"id":136683,"depth":1172,"text":136684},{"id":136974,"depth":28,"text":136975,"children":137947},[137948,137949],{"id":136978,"depth":1172,"text":136979},{"id":137841,"depth":1172,"text":137842},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch14-html5css3",{"title":136263,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch14-HTML5与CSS3新特性","Bc1GNkPQVYZHk_zaMCAK05mQQ3fn_HZ43TEY42Pt3dw",{"id":137956,"title":137957,"body":137958,"description":30,"extension":31,"meta":139702,"navigation":33,"path":139703,"seo":139704,"stem":139705,"__hash__":139706},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块.md","15. 品优购项目上篇-搭建与公共模块",{"type":7,"value":137959,"toc":139683},[137960,137963,137967,137970,137976,137982,137986,137988,137991,137994,137997,138000,138003,138006,138009,138013,138017,138020,138023,138026,138030,138033,138036,138041,138044,138047,138050,138054,138057,138066,138069,138072,138076,138079,138082,138087,138094,138108,138116,138123,138128,138131,138134,138137,138144,138148,138154,138160,138163,138166,138171,138177,138179,138187,138192,138195,138201,138203,138208,138213,138216,138218,138223,138226,138231,138236,138270,138274,138278,138281,138285,138288,138374,138377,138414,138417,138453,138457,138462,138475,138529,138531,138559,138561,138589,138595,138609,138611,138655,138657,138701,138704,138711,138722,138724,138751,138753,138779,138786,138802,138804,138898,138900,138994,139001,139004,139009,139015,139089,139092,139094,139130,139132,139168,139171,139178,139197,139200,139203,139205,139230,139232,139256,139259,139262,139292,139296,139299,139362,139364,139430,139432,139496,139499,139531,139533,139559,139561,139587,139590,139621,139623,139649,139651,139677,139680],[10,137961,137957],{"id":137962},"_15-品优购项目上篇-搭建与公共模块",[48,137964,137966],{"id":137965},"_151-项目规划","15.1 项目规划",[23,137968],{"style":126393,"src":137969},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-142.png",[14,137971,137972,137975],{},[266,137973,137974],{},"原型图："," 页面的布局，告知我们开发人员，整个页面的结构是怎样的，说白了就是什么地方放什么内容",[14,137977,137978,137981],{},[266,137979,137980],{},"效果图："," 告知我们开发人员，最终做出来的成品应该是什么样子，相比原型图，效果图里面包含内容，风格，字体大小等等",[48,137983,137985],{"id":137984},"_152-项目介绍","15.2 项目介绍",[14,137987,137974],{},[23,137989],{"style":126393,"src":137990},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-143.png",[14,137992,137993],{},"主页：",[23,137995],{"style":126393,"src":137996},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-144.png",[14,137998,137999],{},"列表页：",[23,138001],{"style":126393,"src":138002},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-145.png",[14,138004,138005],{},"注册页：",[23,138007],{"style":126393,"src":138008},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-146.png",[48,138010,138012],{"id":138011},"_153-项目搭建工作","15.3 项目搭建工作",[77,138014,138016],{"id":138015},"_1531-创建的文件夹如下称为项目结构","15.3.1 创建的文件夹如下（称为项目结构）",[23,138018],{"style":126393,"src":138019},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-147.png",[14,138021,138022],{},"经常更换的图片要放到upload文件夹中",[14,138024,138025],{},"不经常换的放到images文件夹中",[77,138027,138029],{"id":138028},"_1532-创建文件如下","15.3.2 创建文件如下",[23,138031],{"style":126393,"src":138032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-148.png",[23,138034],{"style":126393,"src":138035},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-149.png",[14,138037,138038],{},[266,138039,138040],{},"初始化样式：",[14,138042,138043],{},"有些网站初始化的不太提倡 * { margin: 0; padding: 0; }",[14,138045,138046],{},"比如新浪： html,body,ul,li,ol,dl,dd,dt,p,h1,h2,h3,h4,h5,h6,form,fieldset,legend,img{margin:0;padding:0}",[14,138048,138049],{},"通配符选择器写代码的时候简单，但是浏览器渲染的时候没有后边类似于新浪这样的效率高",[77,138051,138053],{"id":138052},"_1533-项目模块化开发","15.3.3 项目模块化开发",[14,138055,138056],{},"所谓的模块化：将一个项目按照功能划分，一个功能一个模块，互不影响，模块化开发具有重复使用、更换方便等优点",[14,138058,138059,138060,138065],{},"这里最典型的应用就是 ",[266,138061,138062],{},[103,138063,138064],{},"common.css"," 公共样式。写好一个样式，其余的页面用到这些相同的样式",[23,138067],{"style":126393,"src":138068},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-150.png",[14,138070,138071],{},"通过link方法来引入",[77,138073,138075],{"id":138074},"_1534-网站-favicon-图标","15.3.4 网站 favicon 图标",[23,138077],{"style":126393,"src":138078},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-151.png",[14,138080,138081],{},"favicon.ico 一般用于作为缩略的网站标志，它显示在浏览器的地址栏或者标签上。目前主要的浏览器都支持 favicon.ico 图标",[60,138083,138084],{},[63,138085,138086],{},"制作favicon图标",[14,138088,138089,138090,138093],{},"①把品优购图标切成 ",[103,138091,138092],{},"png"," 图片",[14,138095,138096,138097,138099,138100,138103,138104],{},"②把 ",[103,138098,138092],{}," 图片转换为 ",[103,138101,138102],{},"ico"," 图标，这需要借助于第三方转换网站，例如比特虫：",[355,138105,138106],{"href":138106,"rel":138107},"http:\u002F\u002Fwww.bitbug.net\u002F",[23858],[60,138109,138110,138113],{"start":28},[63,138111,138112],{},"favicon图标放到网站根目录下",[63,138114,138115],{},"HTML页面引入favicon",[14,138117,138118,138119,138122],{},"在html 页面里面的 ",[103,138120,138121],{},"\u003Chead> \u003C\u002Fhead>","元素之间引入代码",[14,138124,138125],{},[103,138126,138127],{},"\u003Clink rel=\"shortcut icon\" href=\"favicon.ico\" type=\"image\u002Fx-icon\"\u002F>",[14,138129,138130],{},"复制这行代码或者在生成这个的网站进行复制",[23,138132],{"style":126393,"src":138133},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-152.png",[14,138135,138136],{},"在网站后边输入\u002Ffavicon.ico就可以得到这个网站的图标",[14,138138,138139,138140],{},"例如:",[355,138141,138142],{"href":138142,"rel":138143},"https:\u002F\u002Fwww.jd.com\u002Ffavicon.ico",[23858],[77,138145,138147],{"id":138146},"_1535-tdk三大标签seo优化","15.3.5 TDK三大标签SEO优化",[14,138149,138150,138153],{},[266,138151,138152],{},"SEO（Search Engine Optimization）"," 汉译为搜索引擎优化，是一种利用搜索引擎的规则提高网站在有关搜索引擎内自然排名的方式。",[14,138155,138156,138159],{},[266,138157,138158],{},"SEO"," 的目的是对网站进行深度的优化，从而帮助网站获取免费的流量，进而在搜索引擎上提升网站的排名，提高网站的知名度。",[14,138161,138162],{},"页面必须有三个标签用来符合 SEO 优化",[23,138164],{"style":126393,"src":138165},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-153.png",[60,138167,138168],{},[63,138169,138170],{},"title网站标题",[14,138172,138173,138176],{},[266,138174,138175],{},"建议："," 网站名（产品名）- 网站的介绍 （尽量不要超过30个汉字）",[14,138178,68784],{},[1124,138180,138181,138184],{},[63,138182,138183],{},"京东(JD.COM)-综合网购首选-正品低价、品质保障、配送及时、轻松购物！",[63,138185,138186],{},"小米商城 - 小米5s、红米Note 4、小米MIX、小米笔记本官方网站",[60,138188,138189],{"start":28},[63,138190,138191],{},"description网站描述",[14,138193,138194],{},"简要说明我们网站主要是做什么的",[14,138196,138197,138200],{},[266,138198,138199],{},"我们提倡"," ，description 作为网站的总体业务和主题概括，多采用“我们是…”、“我们提供…”、“×××网作为…”、“电话：010…”之类语句",[14,138202,68784],{},[14,138204,138205],{},[103,138206,138207],{},"\u003Cmeta name=\"description\" content=\"京东JD.COM-专业的综合网上购物商城,销售家电、数码通讯、电脑、家居百货、服装服饰、母婴、图书、食品等数万个品牌优质商品.便捷、诚信的服务，为您提供愉悦的网上购物体验!\" \u002F>",[60,138209,138210],{"start":1172},[63,138211,138212],{},"keywords关键词",[14,138214,138215],{},"keywords 最好限制为 6～8 个关键词，关键词之间用英文逗号隔开，采用 关键词1,关键词2 的形式",[14,138217,68784],{},[14,138219,138220],{},[103,138221,138222],{},"\u003Cmeta name= \" keywords\" content=\"网上购物,网上商城,手机,笔记本,电脑,MP3,CD,VCD,DV,相机,数码,配件,手表,存储卡,京东\" \u002F>",[14,138224,138225],{},"这里它是电商所以写的多，把最好产品往前写，越好的产品权重越高",[14,138227,138228],{},[266,138229,138230],{},"对于我们前端人员来说，我们只需要准备好这三个标签，具体里面的内容，有专门的 SEO 人员准备",[60,138232,138233],{"start":1187},[63,138234,138235],{},"代码总结",[97,138237,138238],{"className":127284,"code":130641,"language":127286,"meta":25,"style":25},[103,138239,138240,138244,138258,138262],{"__ignoreMap":25},[106,138241,138242],{"class":108,"line":109},[106,138243,130648],{"class":175},[106,138245,138246,138248,138250,138252,138254,138256],{"class":108,"line":28},[106,138247,1027],{"class":116},[106,138249,51605],{"class":51294},[106,138251,53480],{"class":1955},[106,138253,162],{"class":116},[106,138255,130661],{"class":221},[106,138257,51301],{"class":116},[106,138259,138260],{"class":108,"line":1172},[106,138261,130668],{"class":116},[106,138263,138264,138266,138268],{"class":108,"line":1187},[106,138265,51779],{"class":116},[106,138267,51605],{"class":51294},[106,138269,51301],{"class":116},[48,138271,138273],{"id":138272},"_154-项目公共部分制作","15.4 项目公共部分制作",[77,138275,138277],{"id":138276},"_1541-常用模块类命名","15.4.1 常用模块类命名",[23,138279],{"style":126393,"src":138280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-154.png",[77,138282,138284],{"id":138283},"_1542-快捷导航-shortcut-制作","15.4.2 快捷导航 shortcut 制作",[14,138286,138287],{},"布局思路：",[1124,138289,138290,138293,138296,138318,138351],{},[63,138291,138292],{},"通栏的盒子命名为 shortcut ，是快捷导航的意思。 注意这里的行高，可以继承给里面的子盒子",[63,138294,138295],{},"里面包含版心的盒子",[63,138297,138298,138299],{},"版心盒子里面包含 1 号左侧盒子左浮动",[1124,138300,138301,138309,138315],{},[63,138302,138303,138304,21493,138306,138308],{},"1 号盒子 里面包含一个",[103,138305,1124],{},[103,138307,1124],{},"包裹li，第一个li里面包裹文字就行，因为不能点击，第二个li包含两个a标签",[63,138310,138311,138312,138314],{},"里面的内容是水平排列，所以需要给",[103,138313,63],{},"设置浮动",[63,138316,138317],{},"文字要垂直居中，我们可以给 shortcut设置行高，因为行高可以继承，里面的孩子就不需要设置了",[63,138319,138320,138321],{},"版心盒子里面包含 2 号右侧盒子右浮动",[1124,138322,138323,138337,138342],{},[63,138324,138325,138326,21493,138328,138330,138331,138333,138334,138336],{},"2 号盒子 里面包含一个",[103,138327,1124],{},[103,138329,1124],{},"包裹",[103,138332,63],{},"，中间的",[103,138335,1038],{},"可以用样式去设置，也可以用字符 |",[63,138338,138339,138340,138314],{},"里面内容水平排列，给",[103,138341,63],{},[63,138343,138344,138345,138347,138348,138350],{},"找到里面所有偶数的 ",[103,138346,63],{}," 设置样式（偶数的 ",[103,138349,63],{}," 显示是一个 | 竖线，所以需要单独选择出来设置样式，利用nth-child就可以实现）",[63,138352,138353,138354],{},"需要用到字体图标",[1124,138355,138356,138362,138365,138368,138371],{},[63,138357,138358,138359],{},"利用伪元素的方式来实现字体图标，给需要添加的标签设置类名为 ： ",[103,138360,138361],{},"arrow-icon",[63,138363,138364],{},"先要引入字体图片的资源",[63,138366,138367],{},"在样式里面利用 font-face 来进行声明",[63,138369,138370],{},"在伪元素的 content属性设置 图标的编码",[63,138372,138373],{},"给伪元素设置font-family属性",[14,138375,138376],{},"结构实例代码：",[97,138378,138380],{"className":126537,"code":138379,"language":126539,"meta":25,"style":25},"div::before {\n  content: \"\";\n  display: block;\n}\n",[103,138381,138382,138390,138400,138410],{"__ignoreMap":25},[106,138383,138384,138386,138388],{"class":108,"line":109},[106,138385,51605],{"class":51294},[106,138387,137538],{"class":1955},[106,138389,15565],{"class":116},[106,138391,138392,138394,138396,138398],{"class":108,"line":28},[106,138393,137545],{"class":165},[106,138395,51431],{"class":116},[106,138397,7645],{"class":221},[106,138399,1283],{"class":116},[106,138401,138402,138404,138406,138408],{"class":108,"line":1172},[106,138403,128153],{"class":165},[106,138405,51431],{"class":116},[106,138407,60863],{"class":165},[106,138409,1283],{"class":116},[106,138411,138412],{"class":108,"line":1187},[106,138413,1557],{"class":116},[14,138415,138416],{},"样式实例代码：",[97,138418,138419],{"className":126537,"code":138379,"language":126539,"meta":25,"style":25},[103,138420,138421,138429,138439,138449],{"__ignoreMap":25},[106,138422,138423,138425,138427],{"class":108,"line":109},[106,138424,51605],{"class":51294},[106,138426,137538],{"class":1955},[106,138428,15565],{"class":116},[106,138430,138431,138433,138435,138437],{"class":108,"line":28},[106,138432,137545],{"class":165},[106,138434,51431],{"class":116},[106,138436,7645],{"class":221},[106,138438,1283],{"class":116},[106,138440,138441,138443,138445,138447],{"class":108,"line":1172},[106,138442,128153],{"class":165},[106,138444,51431],{"class":116},[106,138446,60863],{"class":165},[106,138448,1283],{"class":116},[106,138450,138451],{"class":108,"line":1187},[106,138452,1557],{"class":116},[77,138454,138456],{"id":138455},"_1543-header-头部模块搭建","15.4.3 header 头部模块搭建",[1124,138458,138459],{},[63,138460,138461],{},"header 盒子必须要有高度",[14,138463,138464,138465,138467,138468],{},"1 号盒子是 ",[103,138466,131549],{}," 标志定位，在正常开发过程中， ",[266,138469,138470,138471,138474],{},"logo的布局其实是有讲究的，需要进行 ",[103,138472,138473],{},"logoSEO","的优化 （★★★）",[1124,138476,138477,138485,138493,138520],{},[63,138478,138479,138481,138482,138484],{},[103,138480,131549],{}," 里面首先放一个 ",[103,138483,10],{}," 标签，目的是为了提权，告诉搜索引擎，这个地方很重要",[63,138486,138487,138489,138490,138492],{},[103,138488,10],{}," 里面再放一个链接，可以返回首页的，把 ",[103,138491,131549],{}," 的背景图片给链接即可",[63,138494,138495,138496],{},"为了搜索引擎收录我们，我们链接里面要放文字（网站名称），但是文字不要显示出来",[1124,138497,138498,138513],{},[63,138499,138500,138501,138504,138505,138508,138509,138512],{},"方法1：",[103,138502,138503],{},"text-indent"," 移到盒子外面（",[103,138506,138507],{},"text-indent: -9999px",") ，然后 ",[103,138510,138511],{},"overflow:hidden"," ，淘宝的做法",[63,138514,138515,138516,138519],{},"方法2：直接给 ",[103,138517,138518],{},"font-size: 0;"," 就看不到文字了，京东的做法",[63,138521,138522,138523,138525,138526,138528],{},"最后给链接一个 ",[103,138524,51401],{}," 属性，这样鼠标放到 ",[103,138527,131549],{}," 上就可以看到提示文字了",[14,138530,138376],{},[97,138532,138533],{"className":127284,"code":131770,"language":127286,"meta":25,"style":25},[103,138534,138535],{"__ignoreMap":25},[106,138536,138537,138539,138541,138543,138545,138547,138549,138551,138553,138555,138557],{"class":108,"line":109},[106,138538,1027],{"class":116},[106,138540,355],{"class":51294},[106,138542,61051],{"class":1955},[106,138544,162],{"class":116},[106,138546,131785],{"class":221},[106,138548,131788],{"class":1955},[106,138550,162],{"class":116},[106,138552,131793],{"class":221},[106,138554,131796],{"class":116},[106,138556,355],{"class":51294},[106,138558,51301],{"class":116},[14,138560,138416],{},[97,138562,138563],{"className":127284,"code":131770,"language":127286,"meta":25,"style":25},[103,138564,138565],{"__ignoreMap":25},[106,138566,138567,138569,138571,138573,138575,138577,138579,138581,138583,138585,138587],{"class":108,"line":109},[106,138568,1027],{"class":116},[106,138570,355],{"class":51294},[106,138572,61051],{"class":1955},[106,138574,162],{"class":116},[106,138576,131785],{"class":221},[106,138578,131788],{"class":1955},[106,138580,162],{"class":116},[106,138582,131793],{"class":221},[106,138584,131796],{"class":116},[106,138586,355],{"class":51294},[106,138588,51301],{"class":116},[14,138590,138591,138592,138594],{},"2 号盒子是 ",[103,138593,131562],{}," 搜索模块定位",[1124,138596,138597,138600,138603,138606],{},[63,138598,138599],{},"search盒子利用定位的方式放在对应的位置",[63,138601,138602],{},"search盒子设置绝对定位，header盒子设置相对定位",[63,138604,138605],{},"search盒子里面包含两个子元素，一个是输入框，一个是按钮，分别跟定固定的宽高（搜索框 宽度：454px；按钮宽度：80px）",[63,138607,138608],{},"输入框和按钮本来就是行内块元素，在一行显示，但是中间会有间隙，所以我们可以让让这两个元素浮动起来",[14,138610,138376],{},[97,138612,138613],{"className":126537,"code":131857,"language":126539,"meta":25,"style":25},[103,138614,138615,138637,138641,138651],{"__ignoreMap":25},[106,138616,138617,138619,138621,138623,138625,138627,138629,138631,138633,138635],{"class":108,"line":109},[106,138618,51605],{"class":51294},[106,138620,12428],{"class":116},[106,138622,14],{"class":51294},[106,138624,12428],{"class":116},[106,138626,10],{"class":51294},[106,138628,12428],{"class":116},[106,138630,1124],{"class":51294},[106,138632,12428],{"class":116},[106,138634,63],{"class":51294},[106,138636,15565],{"class":116},[106,138638,138639],{"class":108,"line":28},[106,138640,131886],{"class":175},[106,138642,138643,138645,138647,138649],{"class":108,"line":1172},[106,138644,128153],{"class":165},[106,138646,51431],{"class":116},[106,138648,60863],{"class":165},[106,138650,1283],{"class":116},[106,138652,138653],{"class":108,"line":1187},[106,138654,1557],{"class":116},[14,138656,138416],{},[97,138658,138659],{"className":126537,"code":131857,"language":126539,"meta":25,"style":25},[103,138660,138661,138683,138687,138697],{"__ignoreMap":25},[106,138662,138663,138665,138667,138669,138671,138673,138675,138677,138679,138681],{"class":108,"line":109},[106,138664,51605],{"class":51294},[106,138666,12428],{"class":116},[106,138668,14],{"class":51294},[106,138670,12428],{"class":116},[106,138672,10],{"class":51294},[106,138674,12428],{"class":116},[106,138676,1124],{"class":51294},[106,138678,12428],{"class":116},[106,138680,63],{"class":51294},[106,138682,15565],{"class":116},[106,138684,138685],{"class":108,"line":28},[106,138686,131886],{"class":175},[106,138688,138689,138691,138693,138695],{"class":108,"line":1172},[106,138690,128153],{"class":165},[106,138692,51431],{"class":116},[106,138694,60863],{"class":165},[106,138696,1283],{"class":116},[106,138698,138699],{"class":108,"line":1187},[106,138700,1557],{"class":116},[14,138702,138703],{},"这里为了避免给大盒子加边框子，小盒子不加边框塞进大盒子后，他们之间会有神奇的空隙问题，当浏览器缩放一定程度没有空隙，但是大部分都会有空隙问题，避免该问题，通过不给大盒子边框，给小盒子边框来解决",[14,138705,138706,138707,138710],{},"3 号盒子是 ",[103,138708,138709],{},"hotwords"," 热词模块定位",[1124,138712,138713,138716,138719],{},[63,138714,138715],{},"热词模块怎么简单怎么来，直接在里面放a标签即可",[63,138717,138718],{},"给里面所有的a标签设置 左右10px的外边距",[63,138720,138721],{},"给第一个a标签设置文字变红色（#c81623）",[14,138723,138376],{},[97,138725,138727],{"className":126537,"code":138726,"language":126539,"meta":25,"style":25},"div {\n  margin: 0 auto;\n}\n",[103,138728,138729,138735,138747],{"__ignoreMap":25},[106,138730,138731,138733],{"class":108,"line":109},[106,138732,51605],{"class":51294},[106,138734,15565],{"class":116},[106,138736,138737,138739,138741,138743,138745],{"class":108,"line":28},[106,138738,70464],{"class":165},[106,138740,51431],{"class":116},[106,138742,308],{"class":165},[106,138744,51550],{"class":165},[106,138746,1283],{"class":116},[106,138748,138749],{"class":108,"line":1172},[106,138750,1557],{"class":116},[14,138752,138416],{},[97,138754,138755],{"className":126537,"code":138726,"language":126539,"meta":25,"style":25},[103,138756,138757,138763,138775],{"__ignoreMap":25},[106,138758,138759,138761],{"class":108,"line":109},[106,138760,51605],{"class":51294},[106,138762,15565],{"class":116},[106,138764,138765,138767,138769,138771,138773],{"class":108,"line":28},[106,138766,70464],{"class":165},[106,138768,51431],{"class":116},[106,138770,308],{"class":165},[106,138772,51550],{"class":165},[106,138774,1283],{"class":116},[106,138776,138777],{"class":108,"line":1172},[106,138778,1557],{"class":116},[14,138780,138781,138782,138785],{},"4 号盒子是 ",[103,138783,138784],{},"shopcar"," 购物车模块",[1124,138787,138788,138793,138796,138799],{},[63,138789,123320,138790,138792],{},[103,138791,138784],{},"里面添加一个before伪元素和after伪元素，分别放置 购物车的图标和 右箭头",[63,138794,138795],{},"count 统计部分用绝对定位做",[63,138797,138798],{},"count 统计部分不要给宽度，因为可能买的件数比较多，让件数撑开就好了，给一个高度",[63,138800,138801],{},"一定注意左下角不是圆角，其余三个是圆角 写法： border-radius: 7px 7px 7px 0;",[14,138803,138376],{},[97,138805,138806],{"className":126537,"code":131969,"language":126539,"meta":25,"style":25},[103,138807,138808,138812,138826,138830,138844,138848,138862,138866,138880,138884],{"__ignoreMap":25},[106,138809,138810],{"class":108,"line":109},[106,138811,131976],{"class":175},[106,138813,138814,138816,138818,138820,138822,138824],{"class":108,"line":28},[106,138815,131981],{"class":1955},[106,138817,79801],{"class":116},[106,138819,128897],{"class":165},[106,138821,51431],{"class":116},[106,138823,131990],{"class":165},[106,138825,129467],{"class":116},[106,138827,138828],{"class":108,"line":1172},[106,138829,131997],{"class":175},[106,138831,138832,138834,138836,138838,138840,138842],{"class":108,"line":1187},[106,138833,132002],{"class":1955},[106,138835,79801],{"class":116},[106,138837,128897],{"class":165},[106,138839,51431],{"class":116},[106,138841,54758],{"class":165},[106,138843,129467],{"class":116},[106,138845,138846],{"class":108,"line":1193},[106,138847,132017],{"class":175},[106,138849,138850,138852,138854,138856,138858,138860],{"class":108,"line":1207},[106,138851,132022],{"class":1955},[106,138853,79801],{"class":116},[106,138855,128897],{"class":165},[106,138857,51431],{"class":116},[106,138859,54825],{"class":165},[106,138861,129467],{"class":116},[106,138863,138864],{"class":108,"line":1213},[106,138865,132037],{"class":175},[106,138867,138868,138870,138872,138874,138876,138878],{"class":108,"line":1304},[106,138869,132042],{"class":1955},[106,138871,79801],{"class":116},[106,138873,128897],{"class":165},[106,138875,51431],{"class":116},[106,138877,86227],{"class":165},[106,138879,129467],{"class":116},[106,138881,138882],{"class":108,"line":1310},[106,138883,132057],{"class":175},[106,138885,138886,138888,138890,138892,138894,138896],{"class":108,"line":1322},[106,138887,132062],{"class":1955},[106,138889,79801],{"class":116},[106,138891,128897],{"class":165},[106,138893,51431],{"class":116},[106,138895,132071],{"class":165},[106,138897,129467],{"class":116},[14,138899,138416],{},[97,138901,138902],{"className":126537,"code":131969,"language":126539,"meta":25,"style":25},[103,138903,138904,138908,138922,138926,138940,138944,138958,138962,138976,138980],{"__ignoreMap":25},[106,138905,138906],{"class":108,"line":109},[106,138907,131976],{"class":175},[106,138909,138910,138912,138914,138916,138918,138920],{"class":108,"line":28},[106,138911,131981],{"class":1955},[106,138913,79801],{"class":116},[106,138915,128897],{"class":165},[106,138917,51431],{"class":116},[106,138919,131990],{"class":165},[106,138921,129467],{"class":116},[106,138923,138924],{"class":108,"line":1172},[106,138925,131997],{"class":175},[106,138927,138928,138930,138932,138934,138936,138938],{"class":108,"line":1187},[106,138929,132002],{"class":1955},[106,138931,79801],{"class":116},[106,138933,128897],{"class":165},[106,138935,51431],{"class":116},[106,138937,54758],{"class":165},[106,138939,129467],{"class":116},[106,138941,138942],{"class":108,"line":1193},[106,138943,132017],{"class":175},[106,138945,138946,138948,138950,138952,138954,138956],{"class":108,"line":1207},[106,138947,132022],{"class":1955},[106,138949,79801],{"class":116},[106,138951,128897],{"class":165},[106,138953,51431],{"class":116},[106,138955,54825],{"class":165},[106,138957,129467],{"class":116},[106,138959,138960],{"class":108,"line":1213},[106,138961,132037],{"class":175},[106,138963,138964,138966,138968,138970,138972,138974],{"class":108,"line":1304},[106,138965,132042],{"class":1955},[106,138967,79801],{"class":116},[106,138969,128897],{"class":165},[106,138971,51431],{"class":116},[106,138973,86227],{"class":165},[106,138975,129467],{"class":116},[106,138977,138978],{"class":108,"line":1310},[106,138979,132057],{"class":175},[106,138981,138982,138984,138986,138988,138990,138992],{"class":108,"line":1322},[106,138983,132062],{"class":1955},[106,138985,79801],{"class":116},[106,138987,128897],{"class":165},[106,138989,51431],{"class":116},[106,138991,132071],{"class":165},[106,138993,129467],{"class":116},[77,138995,138997,138998,139000],{"id":138996},"_1544-nav导航模块制作","15.4.4 ",[103,138999,53707],{},"导航模块制作",[23,139002],{"style":126393,"src":139003},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-155.png",[14,139005,139006,139008],{},[103,139007,53707],{}," 盒子通栏有高度，而且有个下边框，里面包含版心，版心里面包含 1 号盒子 和 2号盒子",[14,139010,139011,139012],{},"1 号盒子左侧浮动，",[103,139013,139014],{},"dropdown",[1124,139016,139017,139027,139035,139041,139049,139059,139067,139078],{},[63,139018,139019,139020,101003,139023,139026],{},"1号盒子有讲究，根据相关性 里面包含 ",[103,139021,139022],{},".dt",[103,139024,139025],{},".dd"," 两个盒子",[63,139028,139029,139031,139032,139034],{},[103,139030,139022],{}," 内容是全部商品分类，然后把这个盒子的宽高设置跟父亲一样，这样就把 ",[103,139033,139025],{}," 挤到下面去了",[63,139036,139037,139038,139040],{},"给 ",[103,139039,139025],{}," 盒子设置宽度 和 高度，以及背景颜色",[63,139042,139037,139043,139045,139046,120222],{},[103,139044,139025],{}," 盒子里面定义 无序列表 （",[103,139047,139048],{},"ul > li > a",[63,139050,139051,139052,139054,139055,139058],{},"每个 ",[103,139053,63],{}," 都有一个高度（",[103,139056,139057],{},"31px","），宽度可以不用设置，让文字垂直居中，左边设置2个像素的margin值",[63,139060,139037,139061,139063,139064,120222],{},[103,139062,63],{}," 里面的a设置文字大小（",[103,139065,139066],{},"14px",[63,139068,139037,139069,139071,139072,139074,139075,139077],{},[103,139070,63],{}," 设置 ",[103,139073,127698],{},"，当鼠标移入的时候，让",[103,139076,63],{},"的背景变成白色，让里面的文字变成红色",[63,139079,139080,139082,139083,139085,139086,139088],{},[103,139081,63],{}," 右侧的三角 就可以利用 伪元素来实现，给伪元素设置字体图标，利用定位的方式放在",[103,139084,63],{},"的右侧，那么给",[103,139087,63],{},"设置相对定位",[14,139090,139091],{},"一定要注意相关性",[14,139093,138376],{},[97,139095,139096],{"className":126537,"code":138379,"language":126539,"meta":25,"style":25},[103,139097,139098,139106,139116,139126],{"__ignoreMap":25},[106,139099,139100,139102,139104],{"class":108,"line":109},[106,139101,51605],{"class":51294},[106,139103,137538],{"class":1955},[106,139105,15565],{"class":116},[106,139107,139108,139110,139112,139114],{"class":108,"line":28},[106,139109,137545],{"class":165},[106,139111,51431],{"class":116},[106,139113,7645],{"class":221},[106,139115,1283],{"class":116},[106,139117,139118,139120,139122,139124],{"class":108,"line":1172},[106,139119,128153],{"class":165},[106,139121,51431],{"class":116},[106,139123,60863],{"class":165},[106,139125,1283],{"class":116},[106,139127,139128],{"class":108,"line":1187},[106,139129,1557],{"class":116},[14,139131,138416],{},[97,139133,139134],{"className":126537,"code":138379,"language":126539,"meta":25,"style":25},[103,139135,139136,139144,139154,139164],{"__ignoreMap":25},[106,139137,139138,139140,139142],{"class":108,"line":109},[106,139139,51605],{"class":51294},[106,139141,137538],{"class":1955},[106,139143,15565],{"class":116},[106,139145,139146,139148,139150,139152],{"class":108,"line":28},[106,139147,137545],{"class":165},[106,139149,51431],{"class":116},[106,139151,7645],{"class":221},[106,139153,1283],{"class":116},[106,139155,139156,139158,139160,139162],{"class":108,"line":1172},[106,139157,128153],{"class":165},[106,139159,51431],{"class":116},[106,139161,60863],{"class":165},[106,139163,1283],{"class":116},[106,139165,139166],{"class":108,"line":1187},[106,139167,1557],{"class":116},[14,139169,139170],{},"尽量使用伪元素选择器添加后边的那个符号吧，当时使用的是em盒子加浮动做的",[14,139172,139173,139174,139177],{},"2 号盒子左侧浮动，",[103,139175,139176],{},"navitems"," 导航栏组",[1124,139179,139180,139185,139194],{},[63,139181,139182,139183],{},"里面结构是 ",[103,139184,139048],{},[63,139186,139187,139188,139190,139191,139193],{},"导航栏都是能点击的，所以我们不能给定宽度，给",[103,139189,355],{},"左右的",[103,139192,30877],{},"把两侧撑开",[63,139195,139196],{},"让文字垂直居中（行高等于高度）",[23,139198],{"style":126393,"src":139199},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-156.png",[14,139201,139202],{},"在制作导航栏是将li变为浮动，对a设置高度，这样就可以实现上图中的效果，并不一定非得点击文字才行，点击文字的周围也是可以的",[14,139204,138376],{},[97,139206,139208],{"className":126537,"code":139207,"language":126539,"meta":25,"style":25},".box {\n  float: left;\n}\n",[103,139209,139210,139216,139226],{"__ignoreMap":25},[106,139211,139212,139214],{"class":108,"line":109},[106,139213,130385],{"class":1955},[106,139215,15565],{"class":116},[106,139217,139218,139220,139222,139224],{"class":108,"line":28},[106,139219,131017],{"class":165},[106,139221,51431],{"class":116},[106,139223,23729],{"class":165},[106,139225,1283],{"class":116},[106,139227,139228],{"class":108,"line":1172},[106,139229,1557],{"class":116},[14,139231,138416],{},[97,139233,139234],{"className":126537,"code":139207,"language":126539,"meta":25,"style":25},[103,139235,139236,139242,139252],{"__ignoreMap":25},[106,139237,139238,139240],{"class":108,"line":109},[106,139239,130385],{"class":1955},[106,139241,15565],{"class":116},[106,139243,139244,139246,139248,139250],{"class":108,"line":28},[106,139245,131017],{"class":165},[106,139247,51431],{"class":116},[106,139249,23729],{"class":165},[106,139251,1283],{"class":116},[106,139253,139254],{"class":108,"line":1172},[106,139255,1557],{"class":116},[14,139257,139258],{},"补充一下下边这个美观问题，把大盒子的左边边框给挡住了，解决方法是给家用电器这个的大盒子一个magin，让它下去一些，就ok",[23,139260],{"style":126393,"src":139261},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-157.png",[97,139263,139264],{"className":126537,"code":130694,"language":126539,"meta":25,"style":25},[103,139265,139266,139272,139288],{"__ignoreMap":25},[106,139267,139268,139270],{"class":108,"line":109},[106,139269,51605],{"class":51294},[106,139271,15565],{"class":116},[106,139273,139274,139276,139278,139280,139282,139284,139286],{"class":108,"line":28},[106,139275,70890],{"class":165},[106,139277,51431],{"class":116},[106,139279,334],{"class":165},[106,139281,51486],{"class":112},[106,139283,51515],{"class":165},[106,139285,129929],{"class":165},[106,139287,1283],{"class":116},[106,139289,139290],{"class":108,"line":1172},[106,139291,1557],{"class":116},[77,139293,139295],{"id":139294},"_1545-footer底部模块制作","15.4.5 footer底部模块制作",[23,139297],{"style":126393,"src":139298},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-158.png",[1124,139300,139301,139306,139311],{},[63,139302,139303,139305],{},[103,139304,131740],{}," 页面底部盒子通栏给一个高度（415px）和灰色的背景",[63,139307,139308,139310],{},[103,139309,131740],{}," 里面有一个大的版心",[63,139312,139313,139314,139317,139318],{},"版心里面包含 1 号盒子，",[103,139315,139316],{},"mod_service"," 是服务模块，mod 是模块的意思",[1124,139319,139320,139325,139338,139354,139359],{},[63,139321,139037,139322,139324],{},[103,139323,139316],{}," 设置高度（80px）和下边框",[63,139326,139327,139328,139331,139332,139334,139335,139337],{},"在里面定义 ",[103,139329,139330],{},"ul > li"," ,每个",[103,139333,63],{}," 宽度是300px 高度是 50px，给每个",[103,139336,63],{},"设置35px的左内边距",[63,139339,139340,139341,139343,139344,139346,139347,139349,139350,18403,139352,120222],{},"在每个",[103,139342,63],{},"里面，放一个 ",[103,139345,22903],{},"（里面放图标），一个",[103,139348,51605],{},"（里面放",[103,139351,51605],{},[103,139353,14],{},[63,139355,139037,139356,139358],{},[103,139357,22903],{},"设置浮动，让h5与这个div左右排列",[63,139360,139361],{},"通过精灵图技术（核心思路：利用background-position来实现），把图标设置给h5",[14,139363,138376],{},[97,139365,139367],{"className":126537,"code":139366,"language":126539,"meta":25,"style":25},".icon {\n  width: 20px;\n  height: 20px;\n  background: url(sprites.png) no-repeat -10px -20px;\n}\n",[103,139368,139369,139375,139387,139399,139426],{"__ignoreMap":25},[106,139370,139371,139373],{"class":108,"line":109},[106,139372,134294],{"class":1955},[106,139374,15565],{"class":116},[106,139376,139377,139379,139381,139383,139385],{"class":108,"line":28},[106,139378,70562],{"class":165},[106,139380,51431],{"class":116},[106,139382,817],{"class":165},[106,139384,51486],{"class":112},[106,139386,1283],{"class":116},[106,139388,139389,139391,139393,139395,139397],{"class":108,"line":1172},[106,139390,70782],{"class":165},[106,139392,51431],{"class":116},[106,139394,817],{"class":165},[106,139396,51486],{"class":112},[106,139398,1283],{"class":116},[106,139400,139401,139403,139405,139407,139409,139411,139413,139415,139418,139420,139422,139424],{"class":108,"line":1187},[106,139402,70605],{"class":165},[106,139404,51431],{"class":116},[106,139406,61720],{"class":165},[106,139408,117],{"class":116},[106,139410,134333],{"class":5209},[106,139412,13707],{"class":116},[106,139414,61730],{"class":165},[106,139416,139417],{"class":165}," -10",[106,139419,51486],{"class":112},[106,139421,134352],{"class":165},[106,139423,51486],{"class":112},[106,139425,1283],{"class":116},[106,139427,139428],{"class":108,"line":1193},[106,139429,1557],{"class":116},[14,139431,138416],{},[97,139433,139434],{"className":126537,"code":139366,"language":126539,"meta":25,"style":25},[103,139435,139436,139442,139454,139466,139492],{"__ignoreMap":25},[106,139437,139438,139440],{"class":108,"line":109},[106,139439,134294],{"class":1955},[106,139441,15565],{"class":116},[106,139443,139444,139446,139448,139450,139452],{"class":108,"line":28},[106,139445,70562],{"class":165},[106,139447,51431],{"class":116},[106,139449,817],{"class":165},[106,139451,51486],{"class":112},[106,139453,1283],{"class":116},[106,139455,139456,139458,139460,139462,139464],{"class":108,"line":1172},[106,139457,70782],{"class":165},[106,139459,51431],{"class":116},[106,139461,817],{"class":165},[106,139463,51486],{"class":112},[106,139465,1283],{"class":116},[106,139467,139468,139470,139472,139474,139476,139478,139480,139482,139484,139486,139488,139490],{"class":108,"line":1187},[106,139469,70605],{"class":165},[106,139471,51431],{"class":116},[106,139473,61720],{"class":165},[106,139475,117],{"class":116},[106,139477,134333],{"class":5209},[106,139479,13707],{"class":116},[106,139481,61730],{"class":165},[106,139483,139417],{"class":165},[106,139485,51486],{"class":112},[106,139487,134352],{"class":165},[106,139489,51486],{"class":112},[106,139491,1283],{"class":116},[106,139493,139494],{"class":108,"line":1193},[106,139495,1557],{"class":116},[14,139497,139498],{},"版心里面包含 2 号盒子，mod_help 是帮助模块",[1124,139500,139501,139504,139510,139516,139528],{},[63,139502,139503],{},"给 mod_help 设置 50px的左内边距和20px的上内边距，给定高度（185px）",[63,139505,139506,139507,120222],{},"里面的布局利用 自定义列表来实现（",[103,139508,139509],{},"dl > dt + dd",[63,139511,139037,139512,139515],{},[103,139513,139514],{},"dl"," 设置浮动，让其可以水平排列，给每个dl盒子设置宽度",[63,139517,139037,139518,139521,139522,18403,139524,139527],{},[103,139519,139520],{},"dt"," 设置文字大小（16px），设置下外边距（10px），让",[103,139523,139520],{},[103,139525,139526],{},"dd","之间有些距离",[63,139529,139530],{},"最后一个 dl 结构和样式不一样，需要单独设置",[14,139532,138376],{},[97,139534,139535],{"className":126537,"code":138726,"language":126539,"meta":25,"style":25},[103,139536,139537,139543,139555],{"__ignoreMap":25},[106,139538,139539,139541],{"class":108,"line":109},[106,139540,51605],{"class":51294},[106,139542,15565],{"class":116},[106,139544,139545,139547,139549,139551,139553],{"class":108,"line":28},[106,139546,70464],{"class":165},[106,139548,51431],{"class":116},[106,139550,308],{"class":165},[106,139552,51550],{"class":165},[106,139554,1283],{"class":116},[106,139556,139557],{"class":108,"line":1172},[106,139558,1557],{"class":116},[14,139560,138416],{},[97,139562,139563],{"className":126537,"code":138726,"language":126539,"meta":25,"style":25},[103,139564,139565,139571,139583],{"__ignoreMap":25},[106,139566,139567,139569],{"class":108,"line":109},[106,139568,51605],{"class":51294},[106,139570,15565],{"class":116},[106,139572,139573,139575,139577,139579,139581],{"class":108,"line":28},[106,139574,70464],{"class":165},[106,139576,51431],{"class":116},[106,139578,308],{"class":165},[106,139580,51550],{"class":165},[106,139582,1283],{"class":116},[106,139584,139585],{"class":108,"line":1172},[106,139586,1557],{"class":116},[14,139588,139589],{},"版心里面包含 3 号盒子，mod_copyright 是版权模块",[1124,139591,139592,139601,139604,139615],{},[63,139593,139594,139595,139597,139598,139600],{},"分为上下两块，上面是 ",[103,139596,131757],{}," 友情链接，下面是 ",[103,139599,131750],{},"，给mod_copyright 大盒子设置 文字水平居中，20px的上内边距，让上面内容和下面内容之间有些间隙",[63,139602,139603],{},"把内容分别复制到相应模块中",[63,139605,139037,139606,139608,139609,139611,139612,139614],{},[103,139607,131757],{}," 设置 15px 的下外边距，给",[103,139610,131757],{}," 里面 的 ",[103,139613,355],{}," 标签设置 左右 3px 的外边距",[63,139616,139617,139618,139620],{},"给",[103,139619,131750],{}," 设置 20px 的行高",[14,139622,138376],{},[97,139624,139625],{"className":126537,"code":138726,"language":126539,"meta":25,"style":25},[103,139626,139627,139633,139645],{"__ignoreMap":25},[106,139628,139629,139631],{"class":108,"line":109},[106,139630,51605],{"class":51294},[106,139632,15565],{"class":116},[106,139634,139635,139637,139639,139641,139643],{"class":108,"line":28},[106,139636,70464],{"class":165},[106,139638,51431],{"class":116},[106,139640,308],{"class":165},[106,139642,51550],{"class":165},[106,139644,1283],{"class":116},[106,139646,139647],{"class":108,"line":1172},[106,139648,1557],{"class":116},[14,139650,138416],{},[97,139652,139653],{"className":126537,"code":138726,"language":126539,"meta":25,"style":25},[103,139654,139655,139661,139673],{"__ignoreMap":25},[106,139656,139657,139659],{"class":108,"line":109},[106,139658,51605],{"class":51294},[106,139660,15565],{"class":116},[106,139662,139663,139665,139667,139669,139671],{"class":108,"line":28},[106,139664,70464],{"class":165},[106,139666,51431],{"class":116},[106,139668,308],{"class":165},[106,139670,51550],{"class":165},[106,139672,1283],{"class":116},[106,139674,139675],{"class":108,"line":1172},[106,139676,1557],{"class":116},[14,139678,139679],{},"回顾：对于每行文字的间隔采用line-height （行高）来处理",[5119,139681,139682],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":28,"depth":28,"links":139684},[139685,139686,139687,139694],{"id":137965,"depth":28,"text":137966},{"id":137984,"depth":28,"text":137985},{"id":138011,"depth":28,"text":138012,"children":139688},[139689,139690,139691,139692,139693],{"id":138015,"depth":1172,"text":138016},{"id":138028,"depth":1172,"text":138029},{"id":138052,"depth":1172,"text":138053},{"id":138074,"depth":1172,"text":138075},{"id":138146,"depth":1172,"text":138147},{"id":138272,"depth":28,"text":138273,"children":139695},[139696,139697,139698,139699,139701],{"id":138276,"depth":1172,"text":138277},{"id":138283,"depth":1172,"text":138284},{"id":138455,"depth":1172,"text":138456},{"id":138996,"depth":1172,"text":139700},"15.4.4 nav导航模块制作",{"id":139294,"depth":1172,"text":139295},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch15",{"title":137957,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch15-品优购项目上篇-搭建与公共模块","dZrS8fvj_jmt1HT4kUOuOHSl-QqUov_mqMeo26p1bR8",{"id":139708,"title":139709,"body":139710,"description":30,"extension":31,"meta":142112,"navigation":33,"path":142113,"seo":142114,"stem":142115,"__hash__":142116},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发.md","16. 品优购项目下篇-主体与页面开发",{"type":7,"value":139711,"toc":142089},[139712,139715,139719,139723,139735,139738,139741,139744,139755,139757,139781,139783,139807,139812,139815,139817,139853,139855,139891,139894,139899,139902,139905,139908,139938,139945,139948,139958,139960,139994,139997,140031,140037,140054,140056,140092,140094,140130,140135,140160,140162,140188,140190,140214,140221,140224,140288,140290,140332,140334,140374,140381,140386,140388,140418,140420,140450,140454,140457,140464,140476,140478,140504,140506,140530,140533,140535,140559,140565,140575,140577,140607,140609,140639,140646,140687,140689,140725,140727,140763,140767,140770,140773,140776,140782,140787,140790,140813,140816,140840,140843,140867,140872,140875,140878,140881,140884,140887,140961,140963,140993,140995,141025,141028,141031,141063,141067,141071,141085,141094,141097,141102,141104,141198,141200,141294,141317,141319,141343,141345,141369,141376,141379,141389,141391,141415,141420,141428,141430,141460,141465,141505,141507,141533,141535,141561,141565,141568,141573,141576,141580,141588,141595,141603,141605,141635,141637,141667,141675,141678,141681,141683,141713,141715,141745,141748,141753,141755,141779,141781,141805,141808,141893,141895,141919,141921,141945,141949,141951,141975,141977,142011,142015,142029,142032,142037,142040,142045,142048,142078,142086],[10,139713,139709],{"id":139714},"_16-品优购项目下篇-主体与页面开发",[48,139716,139718],{"id":139717},"_161-项目主体模块制作","16.1 项目主体模块制作",[77,139720,139722],{"id":139721},"_1611-首页制作","16.1.1 首页制作",[14,139724,139725,139727,139728,139730,139731,139734],{},[266,139726,102043],{}," 主体模块是 ",[266,139729,74052],{}," 里面专有的，注意需要新的样式文件 ",[266,139732,139733],{},"index.css，"," 就不要写在common.css中了",[23,139736],{"style":126393,"src":139737},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-159.png",[23,139739],{"style":126393,"src":139740},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-160.png",[14,139742,139743],{},"画红色线处才是main主体部分，左边那部分是与公共部分带有联系的，所以归于公共部分",[1124,139745,139746,139749,139752],{},[63,139747,139748],{},"main 盒子宽度为 980 像素，高度是455像素，位置距离左边 220px (margin-left ) ，这样就会被公共部分给挡住了，给高度就不用清除浮动",[63,139750,139751],{},"main 里面包含左侧盒子，宽度为 721像素，左浮动，focus 焦点图模块",[63,139753,139754],{},"main 里面包含右侧盒子，宽度为 250像素，右浮动，newsflash 新闻快报模块",[14,139756,138376],{},[97,139758,139759],{"className":126537,"code":139207,"language":126539,"meta":25,"style":25},[103,139760,139761,139767,139777],{"__ignoreMap":25},[106,139762,139763,139765],{"class":108,"line":109},[106,139764,130385],{"class":1955},[106,139766,15565],{"class":116},[106,139768,139769,139771,139773,139775],{"class":108,"line":28},[106,139770,131017],{"class":165},[106,139772,51431],{"class":116},[106,139774,23729],{"class":165},[106,139776,1283],{"class":116},[106,139778,139779],{"class":108,"line":1172},[106,139780,1557],{"class":116},[14,139782,138416],{},[97,139784,139785],{"className":126537,"code":139207,"language":126539,"meta":25,"style":25},[103,139786,139787,139793,139803],{"__ignoreMap":25},[106,139788,139789,139791],{"class":108,"line":109},[106,139790,130385],{"class":1955},[106,139792,15565],{"class":116},[106,139794,139795,139797,139799,139801],{"class":108,"line":28},[106,139796,131017],{"class":165},[106,139798,51431],{"class":116},[106,139800,23729],{"class":165},[106,139802,1283],{"class":116},[106,139804,139805],{"class":108,"line":1172},[106,139806,1557],{"class":116},[60,139808,139809],{},[63,139810,139811],{},"左侧focus模块制作",[23,139813],{"style":126393,"src":139814},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-161.png",[14,139816,138376],{},[97,139818,139819],{"className":126537,"code":127860,"language":126539,"meta":25,"style":25},[103,139820,139821,139829,139839,139849],{"__ignoreMap":25},[106,139822,139823,139825,139827],{"class":108,"line":109},[106,139824,53815],{"class":51294},[106,139826,61894],{"class":1955},[106,139828,15565],{"class":116},[106,139830,139831,139833,139835,139837],{"class":108,"line":28},[106,139832,127875],{"class":165},[106,139834,51431],{"class":116},[106,139836,54883],{"class":165},[106,139838,1283],{"class":116},[106,139840,139841,139843,139845,139847],{"class":108,"line":1172},[106,139842,70792],{"class":165},[106,139844,51431],{"class":116},[106,139846,54731],{"class":165},[106,139848,1283],{"class":116},[106,139850,139851],{"class":108,"line":1187},[106,139852,1557],{"class":116},[14,139854,138416],{},[97,139856,139857],{"className":126537,"code":127860,"language":126539,"meta":25,"style":25},[103,139858,139859,139867,139877,139887],{"__ignoreMap":25},[106,139860,139861,139863,139865],{"class":108,"line":109},[106,139862,53815],{"class":51294},[106,139864,61894],{"class":1955},[106,139866,15565],{"class":116},[106,139868,139869,139871,139873,139875],{"class":108,"line":28},[106,139870,127875],{"class":165},[106,139872,51431],{"class":116},[106,139874,54883],{"class":165},[106,139876,1283],{"class":116},[106,139878,139879,139881,139883,139885],{"class":108,"line":1172},[106,139880,70792],{"class":165},[106,139882,51431],{"class":116},[106,139884,54731],{"class":165},[106,139886,1283],{"class":116},[106,139888,139889],{"class":108,"line":1187},[106,139890,1557],{"class":116},[14,139892,139893],{},"对于经常换的图片要放在ul中li内，用img来表示，就不要拿它来当背景整了",[60,139895,139896],{"start":28},[63,139897,139898],{},"右侧newsflash模块制作",[23,139900],{"style":126393,"src":139901},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-162.png",[14,139903,139904],{},"右侧的模块 分为上中下三个盒子",[14,139906,139907],{},"结构代码：",[97,139909,139910],{"className":127284,"code":134039,"language":127286,"meta":25,"style":25},[103,139911,139912],{"__ignoreMap":25},[106,139913,139914,139916,139918,139920,139922,139924,139926,139928,139930,139932,139934,139936],{"class":108,"line":109},[106,139915,1027],{"class":116},[106,139917,23],{"class":51294},[106,139919,55233],{"class":1955},[106,139921,162],{"class":116},[106,139923,134054],{"class":221},[106,139925,55241],{"class":1955},[106,139927,162],{"class":116},[106,139929,134061],{"class":221},[106,139931,134064],{"class":1955},[106,139933,162],{"class":116},[106,139935,134069],{"class":221},[106,139937,51301],{"class":116},[14,139939,139940,139941,139944],{},"1 号盒子为 ",[103,139942,139943],{},"news"," 新闻模块 高度为 165px",[23,139946],{"style":126393,"src":139947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-163.png",[14,139949,139950,139951,139954,139955],{},"分为上下两个结构，但是两个模块都用 div，上面是 ",[103,139952,139953],{},"news-hd","，下面是 ",[103,139956,139957],{},"news-bd",[14,139959,139907],{},[97,139961,139962],{"className":127284,"code":130641,"language":127286,"meta":25,"style":25},[103,139963,139964,139968,139982,139986],{"__ignoreMap":25},[106,139965,139966],{"class":108,"line":109},[106,139967,130648],{"class":175},[106,139969,139970,139972,139974,139976,139978,139980],{"class":108,"line":28},[106,139971,1027],{"class":116},[106,139973,51605],{"class":51294},[106,139975,53480],{"class":1955},[106,139977,162],{"class":116},[106,139979,130661],{"class":221},[106,139981,51301],{"class":116},[106,139983,139984],{"class":108,"line":1172},[106,139985,130668],{"class":116},[106,139987,139988,139990,139992],{"class":108,"line":1187},[106,139989,51779],{"class":116},[106,139991,51605],{"class":51294},[106,139993,51301],{"class":116},[14,139995,139996],{},"样式代码：",[97,139998,139999],{"className":127284,"code":130641,"language":127286,"meta":25,"style":25},[103,140000,140001,140005,140019,140023],{"__ignoreMap":25},[106,140002,140003],{"class":108,"line":109},[106,140004,130648],{"class":175},[106,140006,140007,140009,140011,140013,140015,140017],{"class":108,"line":28},[106,140008,1027],{"class":116},[106,140010,51605],{"class":51294},[106,140012,53480],{"class":1955},[106,140014,162],{"class":116},[106,140016,130661],{"class":221},[106,140018,51301],{"class":116},[106,140020,140021],{"class":108,"line":1172},[106,140022,130668],{"class":116},[106,140024,140025,140027,140029],{"class":108,"line":1187},[106,140026,51779],{"class":116},[106,140028,51605],{"class":51294},[106,140030,51301],{"class":116},[14,140032,140033,140034,140036],{},"上面是",[103,140035,139953],{},"，设置高度是 33px，设置下边框",[1124,140038,140039,140045],{},[63,140040,140041,140042,140044],{},"里面放一个",[103,140043,22903],{}," 标题",[63,140046,140047,140048,140050,140051,140053],{},"放一个a",[103,140049,102678],{},"，内容是 更多，然后让 ",[103,140052,355],{}," 进行右浮动，三角用伪元素设置字体图标就好",[14,140055,139907],{},[97,140057,140058],{"className":126537,"code":138379,"language":126539,"meta":25,"style":25},[103,140059,140060,140068,140078,140088],{"__ignoreMap":25},[106,140061,140062,140064,140066],{"class":108,"line":109},[106,140063,51605],{"class":51294},[106,140065,137538],{"class":1955},[106,140067,15565],{"class":116},[106,140069,140070,140072,140074,140076],{"class":108,"line":28},[106,140071,137545],{"class":165},[106,140073,51431],{"class":116},[106,140075,7645],{"class":221},[106,140077,1283],{"class":116},[106,140079,140080,140082,140084,140086],{"class":108,"line":1172},[106,140081,128153],{"class":165},[106,140083,51431],{"class":116},[106,140085,60863],{"class":165},[106,140087,1283],{"class":116},[106,140089,140090],{"class":108,"line":1187},[106,140091,1557],{"class":116},[14,140093,139996],{},[97,140095,140096],{"className":126537,"code":138379,"language":126539,"meta":25,"style":25},[103,140097,140098,140106,140116,140126],{"__ignoreMap":25},[106,140099,140100,140102,140104],{"class":108,"line":109},[106,140101,51605],{"class":51294},[106,140103,137538],{"class":1955},[106,140105,15565],{"class":116},[106,140107,140108,140110,140112,140114],{"class":108,"line":28},[106,140109,137545],{"class":165},[106,140111,51431],{"class":116},[106,140113,7645],{"class":221},[106,140115,1283],{"class":116},[106,140117,140118,140120,140122,140124],{"class":108,"line":1172},[106,140119,128153],{"class":165},[106,140121,51431],{"class":116},[106,140123,60863],{"class":165},[106,140125,1283],{"class":116},[106,140127,140128],{"class":108,"line":1187},[106,140129,1557],{"class":116},[14,140131,140132,140133],{},"下面是",[103,140134,139957],{},[1124,140136,140137,140145],{},[63,140138,140139,140140,101003,140142,140144],{},"里面包含 ",[103,140141,1124],{},[103,140143,63],{}," 还有链接",[63,140146,139617,140147,140149,140150,140152,140153,140156,140157],{},[103,140148,63],{},"设置高度，24px，设置单行文字溢出省略： 1. 设置 ",[103,140151,131203],{}," 2.设置 ",[103,140154,140155],{},"white-space: nowrap;"," 3. 设置 ",[103,140158,140159],{},"text-overflow: ellipsis;",[14,140161,139907],{},[97,140163,140165],{"className":126537,"code":140164,"language":126539,"meta":25,"style":25},"div {\n  overflow: hidden;\n}\n",[103,140166,140167,140173,140184],{"__ignoreMap":25},[106,140168,140169,140171],{"class":108,"line":109},[106,140170,51605],{"class":51294},[106,140172,15565],{"class":116},[106,140174,140175,140178,140180,140182],{"class":108,"line":28},[106,140176,140177],{"class":165},"  overflow",[106,140179,51431],{"class":116},[106,140181,61708],{"class":165},[106,140183,1283],{"class":116},[106,140185,140186],{"class":108,"line":1172},[106,140187,1557],{"class":116},[14,140189,139996],{},[97,140191,140192],{"className":126537,"code":140164,"language":126539,"meta":25,"style":25},[103,140193,140194,140200,140210],{"__ignoreMap":25},[106,140195,140196,140198],{"class":108,"line":109},[106,140197,51605],{"class":51294},[106,140199,15565],{"class":116},[106,140201,140202,140204,140206,140208],{"class":108,"line":28},[106,140203,140177],{"class":165},[106,140205,51431],{"class":116},[106,140207,61708],{"class":165},[106,140209,1283],{"class":116},[106,140211,140212],{"class":108,"line":1172},[106,140213,1557],{"class":116},[14,140215,140216,140217,140220],{},"2 号盒子为 ",[103,140218,140219],{},"lifeservice"," 生活服务模块 高度为 209px",[23,140222],{"style":126393,"src":140223},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-164.png",[1124,140225,140226,140229,140239,140263,140274],{},[63,140227,140228],{},"设置边框（左右下边框）",[63,140230,140231,140232,140235,140236,140238],{},"里面的内容 是 ",[103,140233,140234],{},"ul > 12*li","，给",[103,140237,63],{},"设置宽 63px，高71px，设置 右边和下边的边框，设置浮动",[63,140240,140241,140242],{},"这样设置后，第四个li会装不开，掉下来，解决办法如下",[1124,140243,140244,140249,140258],{},[63,140245,140246,140248],{},[103,140247,140219],{}," 盒子宽度为 250 ，但是装不开里面的 4 个小 li",[63,140250,140251,140252,140254,140255,140257],{},"可以让 ",[103,140253,140219],{}," 里面的 ",[103,140256,1124],{}," 宽度为 252，就可以装的下 4 个 小 li",[63,140259,140260,140262],{},[103,140261,140219],{}," 盒子 overflow 隐藏多余的部分就可以了",[63,140264,116452,140265,140267,140268,140270,140271,140273],{},[103,140266,63],{}," 里面放一个 ",[103,140269,558],{},"（里面放图标），下面的文本用 ",[103,140272,14],{}," 标签包裹",[63,140275,139037,140276,140278,140279,140281,140282,139071,140284,140287],{},[103,140277,558],{}," 设置 24px宽和28px的高（注意 ",[103,140280,558],{}," 是行内元素， 转成行内块），给 ",[103,140283,63],{},[103,140285,140286],{},"text-align:center"," 让里面内容居中显示",[14,140289,139907],{},[97,140291,140293],{"className":126537,"code":140292,"language":126539,"meta":25,"style":25},"span, a, em, strong {\n  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n  display: inline;\n}\n",[103,140294,140295,140313,140318,140328],{"__ignoreMap":25},[106,140296,140297,140299,140301,140303,140305,140307,140309,140311],{"class":108,"line":109},[106,140298,106],{"class":51294},[106,140300,12428],{"class":116},[106,140302,355],{"class":51294},[106,140304,12428],{"class":116},[106,140306,23546],{"class":51294},[106,140308,12428],{"class":116},[106,140310,266],{"class":51294},[106,140312,15565],{"class":116},[106,140314,140315],{"class":108,"line":28},[106,140316,140317],{"class":175},"  \u002F* 行内元素：不独占一行，不可设宽高 *\u002F\n",[106,140319,140320,140322,140324,140326],{"class":108,"line":1172},[106,140321,128153],{"class":165},[106,140323,51431],{"class":116},[106,140325,128215],{"class":165},[106,140327,1283],{"class":116},[106,140329,140330],{"class":108,"line":1187},[106,140331,1557],{"class":116},[14,140333,139996],{},[97,140335,140336],{"className":126537,"code":140292,"language":126539,"meta":25,"style":25},[103,140337,140338,140356,140360,140370],{"__ignoreMap":25},[106,140339,140340,140342,140344,140346,140348,140350,140352,140354],{"class":108,"line":109},[106,140341,106],{"class":51294},[106,140343,12428],{"class":116},[106,140345,355],{"class":51294},[106,140347,12428],{"class":116},[106,140349,23546],{"class":51294},[106,140351,12428],{"class":116},[106,140353,266],{"class":51294},[106,140355,15565],{"class":116},[106,140357,140358],{"class":108,"line":28},[106,140359,140317],{"class":175},[106,140361,140362,140364,140366,140368],{"class":108,"line":1172},[106,140363,128153],{"class":165},[106,140365,51431],{"class":116},[106,140367,128215],{"class":165},[106,140369,1283],{"class":116},[106,140371,140372],{"class":108,"line":1187},[106,140373,1557],{"class":116},[14,140375,140376,140377,140380],{},"3 号盒子为 ",[103,140378,140379],{},"bargain"," 特价商品",[1124,140382,140383],{},[63,140384,140385],{},"这个比较简单，直接插入一张图片即可",[14,140387,139907],{},[97,140389,140390],{"className":127284,"code":134039,"language":127286,"meta":25,"style":25},[103,140391,140392],{"__ignoreMap":25},[106,140393,140394,140396,140398,140400,140402,140404,140406,140408,140410,140412,140414,140416],{"class":108,"line":109},[106,140395,1027],{"class":116},[106,140397,23],{"class":51294},[106,140399,55233],{"class":1955},[106,140401,162],{"class":116},[106,140403,134054],{"class":221},[106,140405,55241],{"class":1955},[106,140407,162],{"class":116},[106,140409,134061],{"class":221},[106,140411,134064],{"class":1955},[106,140413,162],{"class":116},[106,140415,134069],{"class":221},[106,140417,51301],{"class":116},[14,140419,139996],{},[97,140421,140422],{"className":127284,"code":134039,"language":127286,"meta":25,"style":25},[103,140423,140424],{"__ignoreMap":25},[106,140425,140426,140428,140430,140432,140434,140436,140438,140440,140442,140444,140446,140448],{"class":108,"line":109},[106,140427,1027],{"class":116},[106,140429,23],{"class":51294},[106,140431,55233],{"class":1955},[106,140433,162],{"class":116},[106,140435,134054],{"class":221},[106,140437,55241],{"class":1955},[106,140439,162],{"class":116},[106,140441,134061],{"class":221},[106,140443,134064],{"class":1955},[106,140445,162],{"class":116},[106,140447,134069],{"class":221},[106,140449,51301],{"class":116},[77,140451,140453],{"id":140452},"_1612-推荐模块制作","16.1.2 推荐模块制作",[23,140455],{"style":126393,"src":140456},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-165.png",[14,140458,140459,140460,140463],{},"大盒子 ",[103,140461,140462],{},"recom"," 推荐模块 recommend",[1124,140465,140466],{},[63,140467,140468,140469,140471,140472,140475],{},"给这个 ",[103,140470,140462],{}," 大盒子 设置版心，设置 163px的高，背景颜色（",[103,140473,140474],{},"#ebebeb","），设置距离上边 12px",[14,140477,139907],{},[97,140479,140481],{"className":126537,"code":140480,"language":126539,"meta":25,"style":25},"div {\n  background-color: #f0f0f0;\n}\n",[103,140482,140483,140489,140500],{"__ignoreMap":25},[106,140484,140485,140487],{"class":108,"line":109},[106,140486,51605],{"class":51294},[106,140488,15565],{"class":116},[106,140490,140491,140493,140495,140498],{"class":108,"line":28},[106,140492,70872],{"class":165},[106,140494,51431],{"class":116},[106,140496,140497],{"class":165},"#f0f0f0",[106,140499,1283],{"class":116},[106,140501,140502],{"class":108,"line":1172},[106,140503,1557],{"class":116},[14,140505,139996],{},[97,140507,140508],{"className":126537,"code":140480,"language":126539,"meta":25,"style":25},[103,140509,140510,140516,140526],{"__ignoreMap":25},[106,140511,140512,140514],{"class":108,"line":109},[106,140513,51605],{"class":51294},[106,140515,15565],{"class":116},[106,140517,140518,140520,140522,140524],{"class":108,"line":28},[106,140519,70872],{"class":165},[106,140521,51431],{"class":116},[106,140523,140497],{"class":165},[106,140525,1283],{"class":116},[106,140527,140528],{"class":108,"line":1172},[106,140529,1557],{"class":116},[14,140531,140532],{},"里面包含 2 个盒子， 浮动即可",[14,140534,139907],{},[97,140536,140537],{"className":126537,"code":139207,"language":126539,"meta":25,"style":25},[103,140538,140539,140545,140555],{"__ignoreMap":25},[106,140540,140541,140543],{"class":108,"line":109},[106,140542,130385],{"class":1955},[106,140544,15565],{"class":116},[106,140546,140547,140549,140551,140553],{"class":108,"line":28},[106,140548,131017],{"class":165},[106,140550,51431],{"class":116},[106,140552,23729],{"class":165},[106,140554,1283],{"class":116},[106,140556,140557],{"class":108,"line":1172},[106,140558,1557],{"class":116},[14,140560,140561,140562],{},"1 号盒子 ",[103,140563,140564],{},"recom_hd",[1124,140566,140567,140570],{},[63,140568,140569],{},"设置宽度205px，高度163px",[63,140571,140041,140572,140574],{},[103,140573,23],{},"标签，插入图片即可",[14,140576,139907],{},[97,140578,140579],{"className":127284,"code":134039,"language":127286,"meta":25,"style":25},[103,140580,140581],{"__ignoreMap":25},[106,140582,140583,140585,140587,140589,140591,140593,140595,140597,140599,140601,140603,140605],{"class":108,"line":109},[106,140584,1027],{"class":116},[106,140586,23],{"class":51294},[106,140588,55233],{"class":1955},[106,140590,162],{"class":116},[106,140592,134054],{"class":221},[106,140594,55241],{"class":1955},[106,140596,162],{"class":116},[106,140598,134061],{"class":221},[106,140600,134064],{"class":1955},[106,140602,162],{"class":116},[106,140604,134069],{"class":221},[106,140606,51301],{"class":116},[14,140608,139996],{},[97,140610,140611],{"className":127284,"code":134039,"language":127286,"meta":25,"style":25},[103,140612,140613],{"__ignoreMap":25},[106,140614,140615,140617,140619,140621,140623,140625,140627,140629,140631,140633,140635,140637],{"class":108,"line":109},[106,140616,1027],{"class":116},[106,140618,23],{"class":51294},[106,140620,55233],{"class":1955},[106,140622,162],{"class":116},[106,140624,134054],{"class":221},[106,140626,55241],{"class":1955},[106,140628,162],{"class":116},[106,140630,134061],{"class":221},[106,140632,134064],{"class":1955},[106,140634,162],{"class":116},[106,140636,134069],{"class":221},[106,140638,51301],{"class":116},[14,140640,140641,140642,140645],{},"2 号盒子 ",[103,140643,140644],{},"recom_bd"," ，注意里面的小竖线",[1124,140647,140648,140659,140662,140667,140672],{},[63,140649,140650,140651,140653,140654,140656,140657],{},"右侧结构里面放 ",[103,140652,1124],{}," 包含 4个 ",[103,140655,63],{},"，每个li里面包含一个",[103,140658,23],{},[63,140660,140661],{},"直接利用切片工具把里面的内容当成一张图片",[63,140663,139037,140664,140666],{},[103,140665,63],{}," 设置浮动",[63,140668,139037,140669,140671],{},[103,140670,23],{}," 设置宽高，宽度 248px，高度 163px",[63,140673,140674,140675,140235,140678,140680,140681,140683,140684],{},"小竖线利用伪元素来实现，给每一个li设置一个 after 伪元素，然后给这个伪元素设置绝对定位，设置",[103,140676,140677],{},"top 10px",[103,140679,63],{},"设置相对定位（注意，最后一个",[103,140682,63],{},"不用设置伪元素），可以利用 ",[103,140685,140686],{},"nth-child(-n+3){...}",[14,140688,139907],{},[97,140690,140691],{"className":126537,"code":138379,"language":126539,"meta":25,"style":25},[103,140692,140693,140701,140711,140721],{"__ignoreMap":25},[106,140694,140695,140697,140699],{"class":108,"line":109},[106,140696,51605],{"class":51294},[106,140698,137538],{"class":1955},[106,140700,15565],{"class":116},[106,140702,140703,140705,140707,140709],{"class":108,"line":28},[106,140704,137545],{"class":165},[106,140706,51431],{"class":116},[106,140708,7645],{"class":221},[106,140710,1283],{"class":116},[106,140712,140713,140715,140717,140719],{"class":108,"line":1172},[106,140714,128153],{"class":165},[106,140716,51431],{"class":116},[106,140718,60863],{"class":165},[106,140720,1283],{"class":116},[106,140722,140723],{"class":108,"line":1187},[106,140724,1557],{"class":116},[14,140726,139996],{},[97,140728,140729],{"className":126537,"code":138379,"language":126539,"meta":25,"style":25},[103,140730,140731,140739,140749,140759],{"__ignoreMap":25},[106,140732,140733,140735,140737],{"class":108,"line":109},[106,140734,51605],{"class":51294},[106,140736,137538],{"class":1955},[106,140738,15565],{"class":116},[106,140740,140741,140743,140745,140747],{"class":108,"line":28},[106,140742,137545],{"class":165},[106,140744,51431],{"class":116},[106,140746,7645],{"class":221},[106,140748,1283],{"class":116},[106,140750,140751,140753,140755,140757],{"class":108,"line":1172},[106,140752,128153],{"class":165},[106,140754,51431],{"class":116},[106,140756,60863],{"class":165},[106,140758,1283],{"class":116},[106,140760,140761],{"class":108,"line":1187},[106,140762,1557],{"class":116},[77,140764,140766],{"id":140765},"_1613-家用电器模块制作","16.1.3 家用电器模块制作",[23,140768],{"style":126393,"src":140769},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-166.png",[14,140771,140772],{},"注意这个 floor ，不要给高度，内容有多少，算多少",[14,140774,140775],{},"第一楼是家用电器模块： 里面包含两个盒子",[14,140777,140778,140781],{},[103,140779,140780],{},"box_hd"," 制作",[14,140783,140561,140784,140786],{},[103,140785,140780],{},"，给一个高度，有个下边框，里面分为左右 2 个盒子",[23,140788],{"style":126393,"src":140789},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-167.png",[1124,140791,140792,140797,140802,140805],{},[63,140793,140794,140796],{},[103,140795,140780],{}," 给 30px 的高度，2个像素的下边框",[63,140798,140799,140800],{},"里面放一个左侧 h3 的盒子，右侧一个div盒子，div盒子里面放 ",[103,140801,139048],{},[63,140803,140804],{},"左侧盒左浮动，右侧盒子右浮动",[63,140806,140807,140809,140810,140812],{},[103,140808,355],{},"标签之间的距离用左右的",[103,140811,30877],{},"撑开即可",[14,140814,140815],{},"结构代码",[97,140817,140818],{"className":126537,"code":139207,"language":126539,"meta":25,"style":25},[103,140819,140820,140826,140836],{"__ignoreMap":25},[106,140821,140822,140824],{"class":108,"line":109},[106,140823,130385],{"class":1955},[106,140825,15565],{"class":116},[106,140827,140828,140830,140832,140834],{"class":108,"line":28},[106,140829,131017],{"class":165},[106,140831,51431],{"class":116},[106,140833,23729],{"class":165},[106,140835,1283],{"class":116},[106,140837,140838],{"class":108,"line":1172},[106,140839,1557],{"class":116},[14,140841,140842],{},"样式代码",[97,140844,140845],{"className":126537,"code":139207,"language":126539,"meta":25,"style":25},[103,140846,140847,140853,140863],{"__ignoreMap":25},[106,140848,140849,140851],{"class":108,"line":109},[106,140850,130385],{"class":1955},[106,140852,15565],{"class":116},[106,140854,140855,140857,140859,140861],{"class":108,"line":28},[106,140856,131017],{"class":165},[106,140858,51431],{"class":116},[106,140860,23729],{"class":165},[106,140862,1283],{"class":116},[106,140864,140865],{"class":108,"line":1172},[106,140866,1557],{"class":116},[14,140868,140869,140781],{},[103,140870,140871],{},"box_bd",[14,140873,140874],{},"2 号盒子 box_bd，不要给高度",[23,140876],{"style":126393,"src":140877},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-168.png",[14,140879,140880],{},"这里边塞的都是现有的图片，给图片加上a超链接就可以实现跳转了，所以这个模块看似复杂，实际一点也不复杂，塞现有图片即可",[14,140882,140883],{},"还有这边为了简化css，对内部的五个盒子使用得1类名不用子代选择器，就仅仅类选择器就可以，这样只需要复制做好的家电模块，改一下名改一下图就又增加了新的模块",[14,140885,140886],{},"比如ul下li中有a，对a使用了类选择器.aa,在css中写的时候就不需要写成ul li .aa，直接写.aa就ok了",[1124,140888,140889,140901,140917],{},[63,140890,140891,140893,140894,140897,140898,140900],{},[103,140892,140871],{}," 属于是tab栏的内容区域，所以在这个里面先嵌套一个盒子 ",[103,140895,140896],{},"tab_content","，在",[103,140899,140896],{}," 里面包裹tab选项卡对应的内容",[63,140902,140903,140904,140907,140908,140910,140911,140913,140914,140916],{},"内容被一个大盒子包裹（",[103,140905,140906],{},"tab_list_item","），里面是 ",[103,140909,1124],{}," 包裹 5个 ",[103,140912,63],{},"，每个",[103,140915,63],{},"设置对应的宽度，然后设置浮动",[63,140918,140919,140920,140922,140923,140925,140926],{},"而这5个",[103,140921,63],{},"的宽度是不一致的，在这里我们的做法是 先把宽度的样式列出来，然后给对应的",[103,140924,63],{},"设置",[1124,140927,140928,140946,140949],{},[63,140929,140930,140931,140933,140934,140936,140937,140939,140940,140942,140943,140945],{},"第一个小 ",[103,140932,63],{}," 分为上下结构，上面是 ",[103,140935,1124],{}," 包裹 ",[103,140938,63],{}," ，",[103,140941,63],{},"里面包裹 ",[103,140944,355],{},"，下面插入一张图片",[63,140947,140948],{},"上面的li设置宽高，设置浮动，这样就排列下来了",[63,140950,140951,140952,140954,140955,140957,140958,140960],{},"后面的小 ",[103,140953,63],{}," 里面先放一个",[103,140956,355],{},"标签，然后在",[103,140959,355],{},"标签里面插入图片即可",[14,140962,140815],{},[97,140964,140965],{"className":127284,"code":134039,"language":127286,"meta":25,"style":25},[103,140966,140967],{"__ignoreMap":25},[106,140968,140969,140971,140973,140975,140977,140979,140981,140983,140985,140987,140989,140991],{"class":108,"line":109},[106,140970,1027],{"class":116},[106,140972,23],{"class":51294},[106,140974,55233],{"class":1955},[106,140976,162],{"class":116},[106,140978,134054],{"class":221},[106,140980,55241],{"class":1955},[106,140982,162],{"class":116},[106,140984,134061],{"class":221},[106,140986,134064],{"class":1955},[106,140988,162],{"class":116},[106,140990,134069],{"class":221},[106,140992,51301],{"class":116},[14,140994,140842],{},[97,140996,140997],{"className":127284,"code":134039,"language":127286,"meta":25,"style":25},[103,140998,140999],{"__ignoreMap":25},[106,141000,141001,141003,141005,141007,141009,141011,141013,141015,141017,141019,141021,141023],{"class":108,"line":109},[106,141002,1027],{"class":116},[106,141004,23],{"class":51294},[106,141006,55233],{"class":1955},[106,141008,162],{"class":116},[106,141010,134054],{"class":221},[106,141012,55241],{"class":1955},[106,141014,162],{"class":116},[106,141016,134061],{"class":221},[106,141018,134064],{"class":1955},[106,141020,162],{"class":116},[106,141022,134069],{"class":221},[106,141024,51301],{"class":116},[14,141026,141027],{},"tab栏切换需求！！！！！！介绍：",[23,141029],{"style":126393,"src":141030},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-169.png",[1124,141032,141033,141041,141047,141050],{},[63,141034,141035,141038,141039],{},[103,141036,141037],{},"tab","栏的布局是 ",[103,141040,139048],{},[63,141042,141043,141044,141046],{},"有多少个",[103,141045,141037],{},"选项卡，那么对应就有多少个内容",[63,141048,141049],{},"但是每一次只会显示一个内容块，其他内容进行的隐藏",[63,141051,141052,141053,141056,141057,141059,141060,141062],{},"等后面我们学习了",[103,141054,141055],{},"js","之后，我们就会配合",[103,141058,141055],{},"来实现，",[103,141061,141037],{},"栏的切换",[48,141064,141066],{"id":141065},"_162-列表制作","16.2 列表制作",[77,141068,141070],{"id":141069},"_1621-准备工作","16.2.1 准备工作",[1124,141072,141073,141076,141079,141082],{},[63,141074,141075],{},"列表页面是新的页面，我们需要新建页面文件 list.html",[63,141077,141078],{},"因为列表页的头部和底部基本一致，所以我们需要把首页中的头部和底部的结构复制过来",[63,141080,141081],{},"头部和底部的样式也需要，因此 list.html 中还需要引入 common.css",[63,141083,141084],{},"需要新的 list.css 样式文件，这是列表页专门的样式文件",[77,141086,141088,141089,101003,141091,141093],{"id":141087},"_1622-列表页-header-和-nav-修改","16.2.2 列表页 ",[103,141090,131542],{},[103,141092,53707],{}," 修改",[23,141095],{"style":126393,"src":141096},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-170.png",[1124,141098,141099],{},[63,141100,141101],{},"秒杀盒子 sk（ second kill ） 定位即可",[14,141103,139907],{},[97,141105,141106],{"className":126537,"code":131969,"language":126539,"meta":25,"style":25},[103,141107,141108,141112,141126,141130,141144,141148,141162,141166,141180,141184],{"__ignoreMap":25},[106,141109,141110],{"class":108,"line":109},[106,141111,131976],{"class":175},[106,141113,141114,141116,141118,141120,141122,141124],{"class":108,"line":28},[106,141115,131981],{"class":1955},[106,141117,79801],{"class":116},[106,141119,128897],{"class":165},[106,141121,51431],{"class":116},[106,141123,131990],{"class":165},[106,141125,129467],{"class":116},[106,141127,141128],{"class":108,"line":1172},[106,141129,131997],{"class":175},[106,141131,141132,141134,141136,141138,141140,141142],{"class":108,"line":1187},[106,141133,132002],{"class":1955},[106,141135,79801],{"class":116},[106,141137,128897],{"class":165},[106,141139,51431],{"class":116},[106,141141,54758],{"class":165},[106,141143,129467],{"class":116},[106,141145,141146],{"class":108,"line":1193},[106,141147,132017],{"class":175},[106,141149,141150,141152,141154,141156,141158,141160],{"class":108,"line":1207},[106,141151,132022],{"class":1955},[106,141153,79801],{"class":116},[106,141155,128897],{"class":165},[106,141157,51431],{"class":116},[106,141159,54825],{"class":165},[106,141161,129467],{"class":116},[106,141163,141164],{"class":108,"line":1213},[106,141165,132037],{"class":175},[106,141167,141168,141170,141172,141174,141176,141178],{"class":108,"line":1304},[106,141169,132042],{"class":1955},[106,141171,79801],{"class":116},[106,141173,128897],{"class":165},[106,141175,51431],{"class":116},[106,141177,86227],{"class":165},[106,141179,129467],{"class":116},[106,141181,141182],{"class":108,"line":1310},[106,141183,132057],{"class":175},[106,141185,141186,141188,141190,141192,141194,141196],{"class":108,"line":1322},[106,141187,132062],{"class":1955},[106,141189,79801],{"class":116},[106,141191,128897],{"class":165},[106,141193,51431],{"class":116},[106,141195,132071],{"class":165},[106,141197,129467],{"class":116},[14,141199,139996],{},[97,141201,141202],{"className":126537,"code":131969,"language":126539,"meta":25,"style":25},[103,141203,141204,141208,141222,141226,141240,141244,141258,141262,141276,141280],{"__ignoreMap":25},[106,141205,141206],{"class":108,"line":109},[106,141207,131976],{"class":175},[106,141209,141210,141212,141214,141216,141218,141220],{"class":108,"line":28},[106,141211,131981],{"class":1955},[106,141213,79801],{"class":116},[106,141215,128897],{"class":165},[106,141217,51431],{"class":116},[106,141219,131990],{"class":165},[106,141221,129467],{"class":116},[106,141223,141224],{"class":108,"line":1172},[106,141225,131997],{"class":175},[106,141227,141228,141230,141232,141234,141236,141238],{"class":108,"line":1187},[106,141229,132002],{"class":1955},[106,141231,79801],{"class":116},[106,141233,128897],{"class":165},[106,141235,51431],{"class":116},[106,141237,54758],{"class":165},[106,141239,129467],{"class":116},[106,141241,141242],{"class":108,"line":1193},[106,141243,132017],{"class":175},[106,141245,141246,141248,141250,141252,141254,141256],{"class":108,"line":1207},[106,141247,132022],{"class":1955},[106,141249,79801],{"class":116},[106,141251,128897],{"class":165},[106,141253,51431],{"class":116},[106,141255,54825],{"class":165},[106,141257,129467],{"class":116},[106,141259,141260],{"class":108,"line":1213},[106,141261,132037],{"class":175},[106,141263,141264,141266,141268,141270,141272,141274],{"class":108,"line":1304},[106,141265,132042],{"class":1955},[106,141267,79801],{"class":116},[106,141269,128897],{"class":165},[106,141271,51431],{"class":116},[106,141273,86227],{"class":165},[106,141275,129467],{"class":116},[106,141277,141278],{"class":108,"line":1310},[106,141279,132057],{"class":175},[106,141281,141282,141284,141286,141288,141290,141292],{"class":108,"line":1322},[106,141283,132062],{"class":1955},[106,141285,79801],{"class":116},[106,141287,128897],{"class":165},[106,141289,51431],{"class":116},[106,141291,132071],{"class":165},[106,141293,129467],{"class":116},[1124,141295,141296,141307],{},[63,141297,141298,141299,141302,141303,101003,141305],{},"1 号盒子左侧浮动 ",[103,141300,141301],{},"sk_list"," 里面包含 ",[103,141304,1124],{},[103,141306,63],{},[63,141308,141309,141310,141302,141313,101003,141315],{},"2 号盒子左侧浮动 ",[103,141311,141312],{},"sk_con",[103,141314,1124],{},[103,141316,63],{},[14,141318,139907],{},[97,141320,141321],{"className":126537,"code":139207,"language":126539,"meta":25,"style":25},[103,141322,141323,141329,141339],{"__ignoreMap":25},[106,141324,141325,141327],{"class":108,"line":109},[106,141326,130385],{"class":1955},[106,141328,15565],{"class":116},[106,141330,141331,141333,141335,141337],{"class":108,"line":28},[106,141332,131017],{"class":165},[106,141334,51431],{"class":116},[106,141336,23729],{"class":165},[106,141338,1283],{"class":116},[106,141340,141341],{"class":108,"line":1172},[106,141342,1557],{"class":116},[14,141344,139996],{},[97,141346,141347],{"className":126537,"code":139207,"language":126539,"meta":25,"style":25},[103,141348,141349,141355,141365],{"__ignoreMap":25},[106,141350,141351,141353],{"class":108,"line":109},[106,141352,130385],{"class":1955},[106,141354,15565],{"class":116},[106,141356,141357,141359,141361,141363],{"class":108,"line":28},[106,141358,131017],{"class":165},[106,141360,51431],{"class":116},[106,141362,23729],{"class":165},[106,141364,1283],{"class":116},[106,141366,141367],{"class":108,"line":1172},[106,141368,1557],{"class":116},[77,141370,141372,141373],{"id":141371},"_1623-列表页主体-sk_container","16.2.3 列表页主体 ",[103,141374,141375],{},"sk_container",[23,141377],{"style":126393,"src":141378},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-171.png",[1124,141380,141381,141386],{},[63,141382,140561,141383,141385],{},[103,141384,141375],{}," 给宽度 1200，不要给高度",[63,141387,141388],{},"一定不要忘记清除浮动",[14,141390,139907],{},[97,141392,141393],{"className":126537,"code":139207,"language":126539,"meta":25,"style":25},[103,141394,141395,141401,141411],{"__ignoreMap":25},[106,141396,141397,141399],{"class":108,"line":109},[106,141398,130385],{"class":1955},[106,141400,15565],{"class":116},[106,141402,141403,141405,141407,141409],{"class":108,"line":28},[106,141404,131017],{"class":165},[106,141406,51431],{"class":116},[106,141408,23729],{"class":165},[106,141410,1283],{"class":116},[106,141412,141413],{"class":108,"line":1172},[106,141414,1557],{"class":116},[60,141416,141417],{},[63,141418,141419],{},"sk_hd制作",[1124,141421,141422],{},[63,141423,140641,141424,141427],{},[103,141425,141426],{},"sk_hd"," ，插入图片即可",[14,141429,139907],{},[97,141431,141432],{"className":127284,"code":134039,"language":127286,"meta":25,"style":25},[103,141433,141434],{"__ignoreMap":25},[106,141435,141436,141438,141440,141442,141444,141446,141448,141450,141452,141454,141456,141458],{"class":108,"line":109},[106,141437,1027],{"class":116},[106,141439,23],{"class":51294},[106,141441,55233],{"class":1955},[106,141443,162],{"class":116},[106,141445,134054],{"class":221},[106,141447,55241],{"class":1955},[106,141449,162],{"class":116},[106,141451,134061],{"class":221},[106,141453,134064],{"class":1955},[106,141455,162],{"class":116},[106,141457,134069],{"class":221},[106,141459,51301],{"class":116},[60,141461,141462],{"start":28},[63,141463,141464],{},"sk_bd制作",[1124,141466,141467],{},[63,141468,141469,141470,141473,141474,101003,141476,141478],{},"3 号盒子 ",[103,141471,141472],{},"sk_bd"," ，里面包含很多的 ",[103,141475,1124],{},[103,141477,63],{},[1124,141479,141480,141489],{},[63,141481,141482,141483,141485,141486,141488],{},"当鼠标移入到 ",[103,141484,63],{}," 上面的时候显示红色的边框，在这里先给 ",[103,141487,63],{}," 设置透明的边框，当鼠标移入的时候 设置为红色即可",[63,141490,141491,141492,141494,141495,141497,141498,141501,141502,141504],{},"由于给每个 ",[103,141493,63],{}," 都设置了外边距，导致一行的最后一个 ",[103,141496,63],{}," 掉了下来，在这里我们利用 ",[103,141499,141500],{},"nth-child(4n)"," 来选择出来每一行最后一个 ",[103,141503,63],{},"，去掉外边距就好了",[14,141506,139907],{},[97,141508,141509],{"className":126537,"code":138726,"language":126539,"meta":25,"style":25},[103,141510,141511,141517,141529],{"__ignoreMap":25},[106,141512,141513,141515],{"class":108,"line":109},[106,141514,51605],{"class":51294},[106,141516,15565],{"class":116},[106,141518,141519,141521,141523,141525,141527],{"class":108,"line":28},[106,141520,70464],{"class":165},[106,141522,51431],{"class":116},[106,141524,308],{"class":165},[106,141526,51550],{"class":165},[106,141528,1283],{"class":116},[106,141530,141531],{"class":108,"line":1172},[106,141532,1557],{"class":116},[14,141534,139996],{},[97,141536,141537],{"className":126537,"code":138726,"language":126539,"meta":25,"style":25},[103,141538,141539,141545,141557],{"__ignoreMap":25},[106,141540,141541,141543],{"class":108,"line":109},[106,141542,51605],{"class":51294},[106,141544,15565],{"class":116},[106,141546,141547,141549,141551,141553,141555],{"class":108,"line":28},[106,141548,70464],{"class":165},[106,141550,51431],{"class":116},[106,141552,308],{"class":165},[106,141554,51550],{"class":165},[106,141556,1283],{"class":116},[106,141558,141559],{"class":108,"line":1172},[106,141560,1557],{"class":116},[48,141562,141564],{"id":141563},"_163-注册页面制作","16.3 注册页面制作",[23,141566],{"style":126393,"src":141567},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-172.png",[14,141569,141570,141572],{},[266,141571,9018],{}," 注册页面比较隐私，为了保护用户信息，我们不需要对当前页面做SEO优化",[23,141574],{"style":126393,"src":141575},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-173.png",[77,141577,141579],{"id":141578},"_1631-准备工作","16.3.1 准备工作",[1124,141581,141582,141585],{},[63,141583,141584],{},"创建register.html，引入 base.css，引入favicon图标",[63,141586,141587],{},"创建register.css ，在html页面进行引入",[77,141589,141591,141592,141594],{"id":141590},"_1632-header-头部实现","16.3.2 ",[103,141593,131542],{}," 头部实现",[1124,141596,141597,141600],{},[63,141598,141599],{},"整个内容用 版心 进行包裹",[63,141601,141602],{},"第一个头部区域怎么简单怎么来，用一个header盒子包裹链接，链接里面放图片即可",[14,141604,139907],{},[97,141606,141607],{"className":127284,"code":134039,"language":127286,"meta":25,"style":25},[103,141608,141609],{"__ignoreMap":25},[106,141610,141611,141613,141615,141617,141619,141621,141623,141625,141627,141629,141631,141633],{"class":108,"line":109},[106,141612,1027],{"class":116},[106,141614,23],{"class":51294},[106,141616,55233],{"class":1955},[106,141618,162],{"class":116},[106,141620,134054],{"class":221},[106,141622,55241],{"class":1955},[106,141624,162],{"class":116},[106,141626,134061],{"class":221},[106,141628,134064],{"class":1955},[106,141630,162],{"class":116},[106,141632,134069],{"class":221},[106,141634,51301],{"class":116},[14,141636,139996],{},[97,141638,141639],{"className":127284,"code":134039,"language":127286,"meta":25,"style":25},[103,141640,141641],{"__ignoreMap":25},[106,141642,141643,141645,141647,141649,141651,141653,141655,141657,141659,141661,141663,141665],{"class":108,"line":109},[106,141644,1027],{"class":116},[106,141646,23],{"class":51294},[106,141648,55233],{"class":1955},[106,141650,162],{"class":116},[106,141652,134054],{"class":221},[106,141654,55241],{"class":1955},[106,141656,162],{"class":116},[106,141658,134061],{"class":221},[106,141660,134064],{"class":1955},[106,141662,162],{"class":116},[106,141664,134069],{"class":221},[106,141666,51301],{"class":116},[77,141668,141670,141671,141674],{"id":141669},"_1633-registerarea-主体模块实现","16.3.3 ",[103,141672,141673],{},"registerarea"," 主体模块实现",[23,141676],{"style":126393,"src":141677},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-174.png",[14,141679,141680],{},"整个大盒子 高度为 522px，设置4个边框",[14,141682,139907],{},[97,141684,141685],{"className":126537,"code":130694,"language":126539,"meta":25,"style":25},[103,141686,141687,141693,141709],{"__ignoreMap":25},[106,141688,141689,141691],{"class":108,"line":109},[106,141690,51605],{"class":51294},[106,141692,15565],{"class":116},[106,141694,141695,141697,141699,141701,141703,141705,141707],{"class":108,"line":28},[106,141696,70890],{"class":165},[106,141698,51431],{"class":116},[106,141700,334],{"class":165},[106,141702,51486],{"class":112},[106,141704,51515],{"class":165},[106,141706,129929],{"class":165},[106,141708,1283],{"class":116},[106,141710,141711],{"class":108,"line":1172},[106,141712,1557],{"class":116},[14,141714,139996],{},[97,141716,141717],{"className":126537,"code":130694,"language":126539,"meta":25,"style":25},[103,141718,141719,141725,141741],{"__ignoreMap":25},[106,141720,141721,141723],{"class":108,"line":109},[106,141722,51605],{"class":51294},[106,141724,15565],{"class":116},[106,141726,141727,141729,141731,141733,141735,141737,141739],{"class":108,"line":28},[106,141728,70890],{"class":165},[106,141730,51431],{"class":116},[106,141732,334],{"class":165},[106,141734,51486],{"class":112},[106,141736,51515],{"class":165},[106,141738,129929],{"class":165},[106,141740,1283],{"class":116},[106,141742,141743],{"class":108,"line":1172},[106,141744,1557],{"class":116},[14,141746,141747],{},"1号盒子 是一个 h3 标签，放标题",[1124,141749,141750],{},[63,141751,141752],{},"里面放 注册新用户 的文字，然后包一个 div的标签，让div标签右浮动",[14,141754,139907],{},[97,141756,141757],{"className":126537,"code":139207,"language":126539,"meta":25,"style":25},[103,141758,141759,141765,141775],{"__ignoreMap":25},[106,141760,141761,141763],{"class":108,"line":109},[106,141762,130385],{"class":1955},[106,141764,15565],{"class":116},[106,141766,141767,141769,141771,141773],{"class":108,"line":28},[106,141768,131017],{"class":165},[106,141770,51431],{"class":116},[106,141772,23729],{"class":165},[106,141774,1283],{"class":116},[106,141776,141777],{"class":108,"line":1172},[106,141778,1557],{"class":116},[14,141780,139996],{},[97,141782,141783],{"className":126537,"code":139207,"language":126539,"meta":25,"style":25},[103,141784,141785,141791,141801],{"__ignoreMap":25},[106,141786,141787,141789],{"class":108,"line":109},[106,141788,130385],{"class":1955},[106,141790,15565],{"class":116},[106,141792,141793,141795,141797,141799],{"class":108,"line":28},[106,141794,131017],{"class":165},[106,141796,51431],{"class":116},[106,141798,23729],{"class":165},[106,141800,1283],{"class":116},[106,141802,141803],{"class":108,"line":1172},[106,141804,1557],{"class":116},[14,141806,141807],{},"2号盒子 里面放注册的内容",[1124,141809,141810,141813,141822,141836,141849,141852,141855,141873,141887],{},[63,141811,141812],{},"先用一个盒子，把整个内容包裹起来，设置盒子宽度（600px），让这个盒子距上边50px，水平居中显示",[63,141814,141815,141816,141818,141819,141821],{},"里面的内容利用 ",[103,141817,1124],{}," 包含 ",[103,141820,63],{}," 来实现的（不需要用表格）",[63,141823,139051,141824,141826,141827,141829,141830,141832,141833,141835],{},[103,141825,63],{}," 里面，左侧放 ",[103,141828,33602],{}," 标签， 中间放",[103,141831,53815],{}," 标签， 右侧放 ",[103,141834,106],{}," 提示信息",[63,141837,141838,141839,141841,141842,141844,141845,141848],{},"左侧 ",[103,141840,33602],{},"里面的文字都是右对齐，我们可以给",[103,141843,33602],{},"设置一个宽度（88px），然后利用",[103,141846,141847],{},"text-align"," 来设置右对齐",[63,141850,141851],{},"input 表单设置 宽度 242px，高度 37px，设置边框",[63,141853,141854],{},"右侧 span修饰一下文字颜色",[63,141856,141857,141858],{},"提示信息的样式优化",[1124,141859,141860,141863,141866],{},[63,141861,141862],{},"定义一个 错误的样式，定义一个 正确的样式，然后给对应的盒子设置类名",[63,141864,141865],{},"在span里面放一个小盒子，这个小盒子用来显示 图标的，设置一下宽高 （20x20）",[63,141867,141868,141869,141872],{},"插入图片了之后，默认与文字是基线对齐，通过 ",[103,141870,141871],{},"vertical-algin"," 来设置 图片与文字对齐方式",[63,141874,141875,141876],{},"安装程度的布局，在第4个小 li 里面放 三个盒子，分别放 弱、中、强",[1124,141877,141878,141884],{},[63,141879,141880,141881,141883],{},"设置 ",[103,141882,23546],{}," 的 左右 12px 的内边距，设置一下文字颜色",[63,141885,141886],{},"分别设置 背景颜色",[63,141888,141889,141890,141892],{},"同意协议 和 完成注册 都是用 ",[103,141891,63],{}," 进行包裹",[14,141894,139907],{},[97,141896,141897],{"className":126537,"code":140480,"language":126539,"meta":25,"style":25},[103,141898,141899,141905,141915],{"__ignoreMap":25},[106,141900,141901,141903],{"class":108,"line":109},[106,141902,51605],{"class":51294},[106,141904,15565],{"class":116},[106,141906,141907,141909,141911,141913],{"class":108,"line":28},[106,141908,70872],{"class":165},[106,141910,51431],{"class":116},[106,141912,140497],{"class":165},[106,141914,1283],{"class":116},[106,141916,141917],{"class":108,"line":1172},[106,141918,1557],{"class":116},[14,141920,139996],{},[97,141922,141923],{"className":126537,"code":140480,"language":126539,"meta":25,"style":25},[103,141924,141925,141931,141941],{"__ignoreMap":25},[106,141926,141927,141929],{"class":108,"line":109},[106,141928,51605],{"class":51294},[106,141930,15565],{"class":116},[106,141932,141933,141935,141937,141939],{"class":108,"line":28},[106,141934,70872],{"class":165},[106,141936,51431],{"class":116},[106,141938,140497],{"class":165},[106,141940,1283],{"class":116},[106,141942,141943],{"class":108,"line":1172},[106,141944,1557],{"class":116},[77,141946,141948],{"id":141947},"_1634-底部实现","16.3.4 底部实现",[14,141950,139907],{},[97,141952,141953],{"className":126537,"code":140480,"language":126539,"meta":25,"style":25},[103,141954,141955,141961,141971],{"__ignoreMap":25},[106,141956,141957,141959],{"class":108,"line":109},[106,141958,51605],{"class":51294},[106,141960,15565],{"class":116},[106,141962,141963,141965,141967,141969],{"class":108,"line":28},[106,141964,70872],{"class":165},[106,141966,51431],{"class":116},[106,141968,140497],{"class":165},[106,141970,1283],{"class":116},[106,141972,141973],{"class":108,"line":1172},[106,141974,1557],{"class":116},[14,141976,139996],{},[97,141978,141979],{"className":127284,"code":130641,"language":127286,"meta":25,"style":25},[103,141980,141981,141985,141999,142003],{"__ignoreMap":25},[106,141982,141983],{"class":108,"line":109},[106,141984,130648],{"class":175},[106,141986,141987,141989,141991,141993,141995,141997],{"class":108,"line":28},[106,141988,1027],{"class":116},[106,141990,51605],{"class":51294},[106,141992,53480],{"class":1955},[106,141994,162],{"class":116},[106,141996,130661],{"class":221},[106,141998,51301],{"class":116},[106,142000,142001],{"class":108,"line":1172},[106,142002,130668],{"class":116},[106,142004,142005,142007,142009],{"class":108,"line":1187},[106,142006,51779],{"class":116},[106,142008,51605],{"class":51294},[106,142010,51301],{"class":116},[48,142012,142014],{"id":142013},"_164-项目总结","16.4 项目总结",[60,142016,142017,142020,142023,142026],{},[63,142018,142019],{},"大盒子添加水平居中后，它的子盒子也会水平居中",[63,142021,142022],{},"一般情况下，a包含有宽度的盒子，a需要转换为块级元素",[63,142024,142025],{},"一个盒子里边的子盒子进行浮动的时候，如果在父盒子中放不开，则会导致子盒子放不下的跑到下边去",[63,142027,142028],{},"出现下图注意点，多半是因为文字环绕浮动的盒子了，解决方式就是在这个浮动盒子的父盒子设置为多余父盒子的部分进行隐藏：overflow:hidden;隐藏掉多余的部分，外边的文字就没有浮动盒子了，就可以实现位置的 空置，文字就不在环绕了",[23,142030],{"style":126393,"src":142031},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-175.png",[60,142033,142034],{"start":1193},[63,142035,142036],{},"对于行内块元素，如果要类似于下边图片的效果，可以使用padding来撑开盒子，不要用margin，这个是处理盒子之间的问题",[23,142038],{"style":126393,"src":142039},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-176.png",[60,142041,142042],{"start":1207},[63,142043,142044],{},"对于提交按钮不要使用button，要使用input，参数选择submit，在里边的value中写的字，在给input设置宽度和高度后，这个文字会居中",[23,142046],{"style":126393,"src":142047},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-177.png",[97,142049,142050],{"className":127284,"code":136694,"language":127286,"meta":25,"style":25},[103,142051,142052],{"__ignoreMap":25},[106,142053,142054,142056,142058,142060,142062,142064,142066,142068,142070,142072,142074,142076],{"class":108,"line":109},[106,142055,1027],{"class":116},[106,142057,53815],{"class":51294},[106,142059,53818],{"class":1955},[106,142061,162],{"class":116},[106,142063,62693],{"class":221},[106,142065,14913],{"class":1955},[106,142067,162],{"class":116},[106,142069,136715],{"class":221},[106,142071,61014],{"class":1955},[106,142073,162],{"class":116},[106,142075,136722],{"class":221},[106,142077,51301],{"class":116},[60,142079,142080,142083],{"start":1213},[63,142081,142082],{},"如果图片过大，想要缩放它的话，只需要设置宽度或者高度其中一个就可以，另一个参数就会等比缩放",[63,142084,142085],{},"使用a链接，鼠标放上去提示信息，在a中使用title属性",[5119,142087,142088],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":25,"searchDepth":28,"depth":28,"links":142090},[142091,142096,142103,142111],{"id":139717,"depth":28,"text":139718,"children":142092},[142093,142094,142095],{"id":139721,"depth":1172,"text":139722},{"id":140452,"depth":1172,"text":140453},{"id":140765,"depth":1172,"text":140766},{"id":141065,"depth":28,"text":141066,"children":142097},[142098,142099,142101],{"id":141069,"depth":1172,"text":141070},{"id":141087,"depth":1172,"text":142100},"16.2.2 列表页 header 和 nav 修改",{"id":141371,"depth":1172,"text":142102},"16.2.3 列表页主体 sk_container",{"id":141563,"depth":28,"text":141564,"children":142104},[142105,142106,142108,142110],{"id":141578,"depth":1172,"text":141579},{"id":141590,"depth":1172,"text":142107},"16.3.2 header 头部实现",{"id":141669,"depth":1172,"text":142109},"16.3.3 registerarea 主体模块实现",{"id":141947,"depth":1172,"text":141948},{"id":142013,"depth":28,"text":142014},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch16",{"title":139709,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch16-品优购项目下篇-主体与页面开发","kRJOBRy9l0VcQGyFjUTtaqBcx5fbxBnGM_Nor-phNrY",{"id":142118,"title":142119,"body":142120,"description":30,"extension":31,"meta":142228,"navigation":33,"path":142229,"seo":142230,"stem":142231,"__hash__":142232},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布.md","17. Web服务器与网站发布",{"type":7,"value":142121,"toc":142223},[142122,142125,142129,142132,142135,142144,142153,142157,142162,142169,142187,142190,142193,142196,142199,142202,142205,142208,142211,142214,142217,142220],[10,142123,142119],{"id":142124},"_17-web服务器与网站发布",[48,142126,142128],{"id":142127},"_171-web服务器","17.1 Web服务器",[14,142130,142131],{},"把自己网站上传到服务器上，可以让其他人访问",[23,142133],{"style":126393,"src":142134},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-178.png",[14,142136,142137,142140,142141],{},[266,142138,142139],{},"服务器"," （我们也会称之为主机）是提供计算服务的设备，它也是一台计算机。在网络环境下，根据服务器提供的服务类型不同，服务器又分为文件服务器、数据库服务器、应用程序服务器、 ",[266,142142,142143],{},"Web 服务器等",[14,142145,142146,142147,101003,142150,25734],{},"根据服务器在网络中所在的位置不同，又可分为 ",[266,142148,142149],{},"本地服务器（自己电脑设置为服务器，就是本地服务器）",[266,142151,142152],{},"远程服务器",[77,142154,142156],{"id":142155},"_1711-将自己的网站上传到远程服务器","17.1.1 将自己的网站上传到远程服务器（★★★）",[14,142158,142159],{},[266,142160,142161],{},"注意：一般稳定的服务器都是需要收费的。 比如：阿里云",[14,142163,142164,142165],{},"这里给大家推荐一个免费的远程服务器（免费空间） ",[355,142166,142167],{"href":142167,"rel":142168},"http:\u002F\u002Ffree.3v.do\u002F",[23858],[1124,142170,142171,142174,142177,142184],{},[63,142172,142173],{},"去免费空间网站注册账号。",[63,142175,142176],{},"记录下主机名、用户名、密码、域名。",[63,142178,142179,142180,142183],{},"利用 ",[103,142181,142182],{},"utftp"," 软件 上传网站到远程服务器",[63,142185,142186],{},"在浏览器中输入域名，即可访问我们的品优购网站了",[14,142188,142189],{},"使用软件上传，对上传软件文件进行解压",[23,142191],{"style":126393,"src":142192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-179.png",[23,142194],{"style":126393,"src":142195},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-180.png",[14,142197,142198],{},"输入刚刚申请的服务器账号信息：",[23,142200],{"style":126393,"src":142201},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-181.png",[23,142203],{"style":126393,"src":142204},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-182.png",[23,142206],{"style":126393,"src":142207},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-183.png",[23,142209],{"style":126393,"src":142210},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-184.png",[14,142212,142213],{},"将内容拖过去即可，左边是电脑文件，右边是服务器",[23,142215],{"style":126393,"src":142216},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-185.png",[14,142218,142219],{},"浏览器输入域名即可访问",[14,142221,142222],{},"首页一定必须是index",{"title":25,"searchDepth":28,"depth":28,"links":142224},[142225],{"id":142127,"depth":28,"text":142128,"children":142226},[142227],{"id":142155,"depth":1172,"text":142156},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch17-web",{"title":142119,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch17-Web服务器与网站发布","cCpziV1cqCY-g-yi7uFqH5oT2wBaRMsy1XAXBDnoXXo",{"id":142234,"title":142235,"body":142236,"description":30,"extension":31,"meta":143163,"navigation":33,"path":143164,"seo":143165,"stem":143166,"__hash__":143167},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换.md","18. 2D动画与3D转换",{"type":7,"value":142237,"toc":143146},[142238,142241,142245,142248,142251,142262,142265,142269,142273,142278,142281,142284,142287,142290,142294,142320,142324,142328,142331,142334,142338,142371,142375,142378,142381,142445,142449,142453,142456,142459,142462,142466,142511,142515,142518,142548,142552,142556,142559,142562,142566,142569,142638,142641,142749,142751,142757,142761,142764,142767,142863,142866,142870,142894,142898,142901,142905,142908,142912,142915,142918,142921,142924,142928,142931,142934,142938,142942,142945,142948,142951,142954,142958,142961,142965,142968,142971,143016,143020,143024,143027,143030,143033,143065,143069,143072,143106,143110,143113,143143],[10,142239,142235],{"id":142240},"_18-2d动画与3d转换",[48,142242,142244],{"id":142243},"_181-css3-2d转换","18.1 CSS3 2D转换",[14,142246,142247],{},"**转换（transform）**是CSS3中具有颠覆性的特征之一，可以实现元素的位移、旋转、缩放等效果",[14,142249,142250],{},"转换（transform）你可以简单理解为变形",[1124,142252,142253,142256,142259],{},[63,142254,142255],{},"移动：translate",[63,142257,142258],{},"旋转：rotate",[63,142260,142261],{},"缩放：scale",[23,142263],{"style":126393,"src":142264},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-186.png",[77,142266,142268],{"id":142267},"_1811-2d-转换之移动-translate","18.1.1 2D 转换之移动 translate",[21991,142270,142272],{"id":142271},"_18111-translate介绍","18.1.1.1 translate介绍",[14,142274,142275,142276],{},"2D移动是2D转换里面的一种功能，可以改变元素在页面中的位置，类似",[266,142277,133196],{},[23,142279],{"style":126393,"src":142280},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-187.png",[14,142282,142283],{},"translate最大的优点就是不会影响其他元素的位置，可以凭借这一优点去整过渡效果transition",[14,142285,142286],{},"对于行内元素无效",[14,142288,142289],{},"总结：移动盒子的位置三种方法：定位、盒子的外边距、2d转换移动",[21991,142291,142293],{"id":142292},"_18112-盒子实现水平居中","18.1.1.2 盒子实现水平居中",[97,142295,142296],{"className":126537,"code":138726,"language":126539,"meta":25,"style":25},[103,142297,142298,142304,142316],{"__ignoreMap":25},[106,142299,142300,142302],{"class":108,"line":109},[106,142301,51605],{"class":51294},[106,142303,15565],{"class":116},[106,142305,142306,142308,142310,142312,142314],{"class":108,"line":28},[106,142307,70464],{"class":165},[106,142309,51431],{"class":116},[106,142311,308],{"class":165},[106,142313,51550],{"class":165},[106,142315,1283],{"class":116},[106,142317,142318],{"class":108,"line":1172},[106,142319,1557],{"class":116},[77,142321,142323],{"id":142322},"_1812-2d-转换之旋转-rotate","18.1.2 2D 转换之旋转 rotate",[21991,142325,142327],{"id":142326},"_18121-rotate介绍","18.1.2.1 rotate介绍",[14,142329,142330],{},"2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转",[23,142332],{"style":126393,"src":142333},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-188.png",[21991,142335,142337],{"id":142336},"_18122-旋转效果","18.1.2.2 旋转效果",[97,142339,142341],{"className":126537,"code":142340,"language":126539,"meta":25,"style":25},"div {\n  transform: rotate(45deg);\n}\n",[103,142342,142343,142349,142367],{"__ignoreMap":25},[106,142344,142345,142347],{"class":108,"line":109},[106,142346,51605],{"class":51294},[106,142348,15565],{"class":116},[106,142350,142351,142353,142355,142358,142360,142362,142365],{"class":108,"line":28},[106,142352,136521],{"class":165},[106,142354,51431],{"class":116},[106,142356,142357],{"class":165},"rotate",[106,142359,117],{"class":116},[106,142361,646],{"class":165},[106,142363,142364],{"class":112},"deg",[106,142366,2711],{"class":116},[106,142368,142369],{"class":108,"line":1172},[106,142370,1557],{"class":116},[21991,142372,142374],{"id":142373},"_18123-三角做法","18.1.2.3 三角做法",[14,142376,142377],{},"该下标当经过最外层大盒子时会实现向上反转",[23,142379],{"style":126393,"src":142380},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-189.png",[97,142382,142383],{"className":126537,"code":135057,"language":126539,"meta":25,"style":25},[103,142384,142385,142389,142395,142405,142415,142431,142441],{"__ignoreMap":25},[106,142386,142387],{"class":108,"line":109},[106,142388,135064],{"class":175},[106,142390,142391,142393],{"class":108,"line":28},[106,142392,135069],{"class":1955},[106,142394,15565],{"class":116},[106,142396,142397,142399,142401,142403],{"class":108,"line":1172},[106,142398,70562],{"class":165},[106,142400,51431],{"class":116},[106,142402,308],{"class":165},[106,142404,1283],{"class":116},[106,142406,142407,142409,142411,142413],{"class":108,"line":1187},[106,142408,70782],{"class":165},[106,142410,51431],{"class":116},[106,142412,308],{"class":165},[106,142414,1283],{"class":116},[106,142416,142417,142419,142421,142423,142425,142427,142429],{"class":108,"line":1193},[106,142418,70890],{"class":165},[106,142420,51431],{"class":116},[106,142422,563],{"class":165},[106,142424,51486],{"class":112},[106,142426,51515],{"class":165},[106,142428,63985],{"class":165},[106,142430,1283],{"class":116},[106,142432,142433,142435,142437,142439],{"class":108,"line":1207},[106,142434,135112],{"class":165},[106,142436,51431],{"class":116},[106,142438,62363],{"class":165},[106,142440,1283],{"class":116},[106,142442,142443],{"class":108,"line":1213},[106,142444,1557],{"class":116},[77,142446,142448],{"id":142447},"_1813-2d-转换中心点-transform-origin","18.1.3 2D 转换中心点 transform-origin",[21991,142450,142452],{"id":142451},"_18131-transform-origin介绍","18.1.3.1 transform-origin介绍",[14,142454,142455],{},"设置中心点",[23,142457],{"style":126393,"src":142458},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-190.png",[14,142460,142461],{},"设置像素时这个中心点也是相对于这个大盒子来说的",[21991,142463,142465],{"id":142464},"_18132-盒子不同中心旋转","18.1.3.2 盒子不同中心旋转",[97,142467,142469],{"className":126537,"code":142468,"language":126539,"meta":25,"style":25},"\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",[103,142470,142471,142476,142482,142497,142502,142507],{"__ignoreMap":25},[106,142472,142473],{"class":108,"line":109},[106,142474,142475],{"class":175},"\u002F* 转换中心点 *\u002F\n",[106,142477,142478,142480],{"class":108,"line":28},[106,142479,51605],{"class":51294},[106,142481,15565],{"class":116},[106,142483,142484,142487,142489,142491,142493,142495],{"class":108,"line":1172},[106,142485,142486],{"class":165},"  transform-origin",[106,142488,51431],{"class":116},[106,142490,51586],{"class":165},[106,142492,17137],{"class":165},[106,142494,130400],{"class":116},[106,142496,135210],{"class":175},[106,142498,142499],{"class":108,"line":1187},[106,142500,142501],{"class":175},"  \u002F* transform-origin: 50% 50%; *\u002F\n",[106,142503,142504],{"class":108,"line":1193},[106,142505,142506],{"class":175},"  \u002F* transform-origin: left top; *\u002F\n",[106,142508,142509],{"class":108,"line":1207},[106,142510,1557],{"class":116},[21991,142512,142514],{"id":142513},"_18133-旋转案例","18.1.3.3 旋转案例",[23,142516],{"style":126393,"src":142517},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-191.png",[97,142519,142520],{"className":126537,"code":142340,"language":126539,"meta":25,"style":25},[103,142521,142522,142528,142544],{"__ignoreMap":25},[106,142523,142524,142526],{"class":108,"line":109},[106,142525,51605],{"class":51294},[106,142527,15565],{"class":116},[106,142529,142530,142532,142534,142536,142538,142540,142542],{"class":108,"line":28},[106,142531,136521],{"class":165},[106,142533,51431],{"class":116},[106,142535,142357],{"class":165},[106,142537,117],{"class":116},[106,142539,646],{"class":165},[106,142541,142364],{"class":112},[106,142543,2711],{"class":116},[106,142545,142546],{"class":108,"line":1172},[106,142547,1557],{"class":116},[77,142549,142551],{"id":142550},"_1814-2d-转换之缩放scale","18.1.4 2D 转换之缩放scale",[21991,142553,142555],{"id":142554},"_18141-scale介绍","18.1.4.1 scale介绍",[14,142557,142558],{},"缩放，顾名思义，可以放大和缩小。 只要给元素添加上了这个属性就能控制它放大还是缩小",[23,142560],{"style":126393,"src":142561},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-192.png",[21991,142563,142565],{"id":142564},"_18142-分页按钮","18.1.4.2 分页按钮",[23,142567],{"style":126393,"src":142568},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-193.png",[97,142570,142572],{"className":126537,"code":142571,"language":126539,"meta":25,"style":25},"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",[103,142573,142574,142580,142596,142600,142604,142609,142615,142629,142634],{"__ignoreMap":25},[106,142575,142576,142578],{"class":108,"line":109},[106,142577,51605],{"class":51294},[106,142579,15565],{"class":116},[106,142581,142582,142584,142586,142589,142591,142594],{"class":108,"line":28},[106,142583,136521],{"class":165},[106,142585,51431],{"class":116},[106,142587,142588],{"class":165},"scale",[106,142590,117],{"class":116},[106,142592,142593],{"class":165},"1.2",[106,142595,2711],{"class":116},[106,142597,142598],{"class":108,"line":1172},[106,142599,1557],{"class":116},[106,142601,142602],{"class":108,"line":1187},[106,142603,135998],{"class":116},[106,142605,142606],{"class":108,"line":1193},[106,142607,142608],{"class":175},"\u002F* 2D 缩放 *\u002F\n",[106,142610,142611,142613],{"class":108,"line":1207},[106,142612,51605],{"class":51294},[106,142614,15565],{"class":116},[106,142616,142617,142619,142621,142623,142625,142627],{"class":108,"line":1213},[106,142618,136521],{"class":165},[106,142620,51431],{"class":116},[106,142622,142588],{"class":165},[106,142624,117],{"class":116},[106,142626,142593],{"class":165},[106,142628,2711],{"class":116},[106,142630,142631],{"class":108,"line":1304},[106,142632,142633],{"class":175},"  \u002F* transform: scale(1.2, 0.8);  宽1.2倍，高0.8倍 *\u002F\n",[106,142635,142636],{"class":108,"line":1310},[106,142637,1557],{"class":116},[14,142639,142640],{},"@keyframes slide {\nfrom { transform: translateX(0); }\nto { transform: translateX(100px); }\n}\ndiv {\nanimation: slide 1s ease infinite;\n}",[97,142642,142644],{"className":126537,"code":142643,"language":126539,"meta":25,"style":25},"\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",[103,142645,142646,142651,142661,142682,142703,142707,142712,142718,142745],{"__ignoreMap":25},[106,142647,142648],{"class":108,"line":109},[106,142649,142650],{"class":175},"\u002F* 定义动画 *\u002F\n",[106,142652,142653,142656,142659],{"class":108,"line":28},[106,142654,142655],{"class":112},"@keyframes",[106,142657,142658],{"class":5209}," move",[106,142660,15565],{"class":116},[106,142662,142663,142666,142668,142670,142672,142675,142677,142679],{"class":108,"line":1172},[106,142664,142665],{"class":1955},"  0%",[106,142667,79801],{"class":116},[106,142669,48128],{"class":165},[106,142671,51431],{"class":116},[106,142673,142674],{"class":165},"translateX",[106,142676,117],{"class":116},[106,142678,308],{"class":165},[106,142680,142681],{"class":116},"); }\n",[106,142683,142684,142687,142689,142691,142693,142695,142697,142699,142701],{"class":108,"line":1187},[106,142685,142686],{"class":1955},"  100%",[106,142688,79801],{"class":116},[106,142690,48128],{"class":165},[106,142692,51431],{"class":116},[106,142694,142674],{"class":165},[106,142696,117],{"class":116},[106,142698,428],{"class":165},[106,142700,51486],{"class":112},[106,142702,142681],{"class":116},[106,142704,142705],{"class":108,"line":1193},[106,142706,1557],{"class":116},[106,142708,142709],{"class":108,"line":1207},[106,142710,142711],{"class":175},"\u002F* 调用动画 *\u002F\n",[106,142713,142714,142716],{"class":108,"line":1213},[106,142715,51605],{"class":51294},[106,142717,15565],{"class":116},[106,142719,142720,142723,142725,142727,142729,142731,142733,142735,142737,142740,142743],{"class":108,"line":1304},[106,142721,142722],{"class":165},"  animation",[106,142724,51431],{"class":116},[106,142726,135223],{"class":165},[106,142728,25112],{"class":165},[106,142730,812],{"class":112},[106,142732,78674],{"class":165},[106,142734,4085],{"class":165},[106,142736,812],{"class":112},[106,142738,142739],{"class":165}," infinite",[106,142741,142742],{"class":165}," alternate",[106,142744,1283],{"class":116},[106,142746,142747],{"class":108,"line":1310},[106,142748,1557],{"class":116},[14,142750,142640],{},[97,142752,142755],{"className":142753,"code":142754,"language":5180},[5178],"\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",[103,142756,142754],{"__ignoreMap":25},[21991,142758,142760],{"id":142759},"_18222-奔跑的熊大","18.2.2.2 奔跑的熊大",[14,142762,142763],{},"这个需要用到动画效果，同时要使用steps，一步一步的展示，不可以用ease等值，这个图片一般很大，上边集成了运动的多个状态",[23,142765],{"style":126393,"src":142766},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-203.png",[97,142768,142769],{"className":126537,"code":142643,"language":126539,"meta":25,"style":25},[103,142770,142771,142775,142783,142801,142821,142825,142829,142835,142859],{"__ignoreMap":25},[106,142772,142773],{"class":108,"line":109},[106,142774,142650],{"class":175},[106,142776,142777,142779,142781],{"class":108,"line":28},[106,142778,142655],{"class":112},[106,142780,142658],{"class":5209},[106,142782,15565],{"class":116},[106,142784,142785,142787,142789,142791,142793,142795,142797,142799],{"class":108,"line":1172},[106,142786,142665],{"class":1955},[106,142788,79801],{"class":116},[106,142790,48128],{"class":165},[106,142792,51431],{"class":116},[106,142794,142674],{"class":165},[106,142796,117],{"class":116},[106,142798,308],{"class":165},[106,142800,142681],{"class":116},[106,142802,142803,142805,142807,142809,142811,142813,142815,142817,142819],{"class":108,"line":1187},[106,142804,142686],{"class":1955},[106,142806,79801],{"class":116},[106,142808,48128],{"class":165},[106,142810,51431],{"class":116},[106,142812,142674],{"class":165},[106,142814,117],{"class":116},[106,142816,428],{"class":165},[106,142818,51486],{"class":112},[106,142820,142681],{"class":116},[106,142822,142823],{"class":108,"line":1193},[106,142824,1557],{"class":116},[106,142826,142827],{"class":108,"line":1207},[106,142828,142711],{"class":175},[106,142830,142831,142833],{"class":108,"line":1213},[106,142832,51605],{"class":51294},[106,142834,15565],{"class":116},[106,142836,142837,142839,142841,142843,142845,142847,142849,142851,142853,142855,142857],{"class":108,"line":1304},[106,142838,142722],{"class":165},[106,142840,51431],{"class":116},[106,142842,135223],{"class":165},[106,142844,25112],{"class":165},[106,142846,812],{"class":112},[106,142848,78674],{"class":165},[106,142850,4085],{"class":165},[106,142852,812],{"class":112},[106,142854,142739],{"class":165},[106,142856,142742],{"class":165},[106,142858,1283],{"class":116},[106,142860,142861],{"class":108,"line":1310},[106,142862,1557],{"class":116},[14,142864,142865],{},"背景如果跟父盒子一样的话，往左走100%会使得背景露出来，此时不要忘记背景平铺：repeat-x,repeat-y",[77,142867,142869],{"id":142868},"_1823-知识点回顾","18.2.3 知识点回顾",[97,142871,142872],{"className":126537,"code":128706,"language":126539,"meta":25,"style":25},[103,142873,142874,142880,142890],{"__ignoreMap":25},[106,142875,142876,142878],{"class":108,"line":109},[106,142877,51605],{"class":51294},[106,142879,15565],{"class":116},[106,142881,142882,142884,142886,142888],{"class":108,"line":28},[106,142883,128719],{"class":165},[106,142885,51431],{"class":116},[106,142887,61730],{"class":165},[106,142889,1283],{"class":116},[106,142891,142892],{"class":108,"line":1172},[106,142893,1557],{"class":116},[48,142895,142897],{"id":142896},"_183-3d-转换","18.3 3D 转换",[14,142899,142900],{},"我们生活的环境是3D的，照片就是3D物体在2D平面呈现的例子",[77,142902,142904],{"id":142903},"_1831-坐标轴认识","18.3.1 坐标轴认识",[23,142906],{"style":126393,"src":142907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-204.png",[77,142909,142911],{"id":142910},"_1832-3d移动-translate3d","18.3.2 3D移动 translate3d",[23,142913],{"style":126393,"src":142914},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-205.png",[14,142916,142917],{},"x,y,z如果没有移动量的话，不要不写，不可省略",[14,142919,142920],{},"translate3d的效果需要搭配透视perspective来使用",[23,142922],{"style":126393,"src":142923},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-206.png",[77,142925,142927],{"id":142926},"_1833-透视-perspective","18.3.3 透视 perspective",[23,142929],{"style":126393,"src":142930},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-207.png",[14,142932,142933],{},"透视写在父盒子上，单位为像素",[77,142935,142937],{"id":142936},"_1834-3d旋转-rotate3d","18.3.4 3D旋转 rotate3d",[21991,142939,142941],{"id":142940},"_18341-分开解释","18.3.4.1 分开解释",[23,142943],{"style":126393,"src":142944},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-208.png",[23,142946],{"style":126393,"src":142947},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-209.png",[23,142949],{"style":126393,"src":142950},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-210.png",[14,142952,142953],{},"总结来说就是左手原则",[21991,142955,142957],{"id":142956},"_18342-rotate3d介绍","18.3.4.2 rotate3d介绍",[23,142959],{"style":126393,"src":142960},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-211.png",[77,142962,142964],{"id":142963},"_1835-3d呈现-transfrom-style","18.3.5 3D呈现 transfrom-style",[23,142966],{"style":126393,"src":142967},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-212.png",[23,142969],{"style":126393,"src":142970},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-213.png",[97,142972,142974],{"className":126537,"code":142973,"language":126539,"meta":25,"style":25},"div {\n  perspective: 500px;\n  transform: rotateX(45deg);\n}\n",[103,142975,142976,142982,142995,143012],{"__ignoreMap":25},[106,142977,142978,142980],{"class":108,"line":109},[106,142979,51605],{"class":51294},[106,142981,15565],{"class":116},[106,142983,142984,142987,142989,142991,142993],{"class":108,"line":28},[106,142985,142986],{"class":165},"  perspective",[106,142988,51431],{"class":116},[106,142990,65068],{"class":165},[106,142992,51486],{"class":112},[106,142994,1283],{"class":116},[106,142996,142997,142999,143001,143004,143006,143008,143010],{"class":108,"line":1172},[106,142998,136521],{"class":165},[106,143000,51431],{"class":116},[106,143002,143003],{"class":165},"rotateX",[106,143005,117],{"class":116},[106,143007,646],{"class":165},[106,143009,142364],{"class":112},[106,143011,2711],{"class":116},[106,143013,143014],{"class":108,"line":1187},[106,143015,1557],{"class":116},[77,143017,143019],{"id":143018},"_1836-案例","18.3.6 案例",[21991,143021,143023],{"id":143022},"_18361-两面反转的盒子","18.3.6.1 两面反转的盒子",[23,143025],{"style":126393,"src":143026},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-214.png",[23,143028],{"style":126393,"src":143029},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-215.png",[23,143031],{"style":126393,"src":143032},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-216.png",[97,143034,143036],{"className":126537,"code":143035,"language":126539,"meta":25,"style":25},"\u002F* 3D 透视（加在父元素上） *\u002F\n.father {\n  perspective: 500px;\n}\n",[103,143037,143038,143043,143049,143061],{"__ignoreMap":25},[106,143039,143040],{"class":108,"line":109},[106,143041,143042],{"class":175},"\u002F* 3D 透视（加在父元素上） *\u002F\n",[106,143044,143045,143047],{"class":108,"line":28},[106,143046,133534],{"class":1955},[106,143048,15565],{"class":116},[106,143050,143051,143053,143055,143057,143059],{"class":108,"line":1172},[106,143052,142986],{"class":165},[106,143054,51431],{"class":116},[106,143056,65068],{"class":165},[106,143058,51486],{"class":112},[106,143060,1283],{"class":116},[106,143062,143063],{"class":108,"line":1187},[106,143064,1557],{"class":116},[21991,143066,143068],{"id":143067},"_18362-3d导航栏","18.3.6.2 3D导航栏",[23,143070],{"style":126393,"src":143071},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-217.png",[97,143073,143074],{"className":127284,"code":130641,"language":127286,"meta":25,"style":25},[103,143075,143076,143080,143094,143098],{"__ignoreMap":25},[106,143077,143078],{"class":108,"line":109},[106,143079,130648],{"class":175},[106,143081,143082,143084,143086,143088,143090,143092],{"class":108,"line":28},[106,143083,1027],{"class":116},[106,143085,51605],{"class":51294},[106,143087,53480],{"class":1955},[106,143089,162],{"class":116},[106,143091,130661],{"class":221},[106,143093,51301],{"class":116},[106,143095,143096],{"class":108,"line":1172},[106,143097,130668],{"class":116},[106,143099,143100,143102,143104],{"class":108,"line":1187},[106,143101,51779],{"class":116},[106,143103,51605],{"class":51294},[106,143105,51301],{"class":116},[21991,143107,143109],{"id":143108},"_18363-旋转木马","18.3.6.3 旋转木马",[23,143111],{"style":126393,"src":143112},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-218.png",[97,143114,143115],{"className":126537,"code":142340,"language":126539,"meta":25,"style":25},[103,143116,143117,143123,143139],{"__ignoreMap":25},[106,143118,143119,143121],{"class":108,"line":109},[106,143120,51605],{"class":51294},[106,143122,15565],{"class":116},[106,143124,143125,143127,143129,143131,143133,143135,143137],{"class":108,"line":28},[106,143126,136521],{"class":165},[106,143128,51431],{"class":116},[106,143130,142357],{"class":165},[106,143132,117],{"class":116},[106,143134,646],{"class":165},[106,143136,142364],{"class":112},[106,143138,2711],{"class":116},[106,143140,143141],{"class":108,"line":1172},[106,143142,1557],{"class":116},[5119,143144,143145],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":25,"searchDepth":28,"depth":28,"links":143147},[143148,143155],{"id":142243,"depth":28,"text":142244,"children":143149},[143150,143151,143152,143153,143154],{"id":142267,"depth":1172,"text":142268},{"id":142322,"depth":1172,"text":142323},{"id":142447,"depth":1172,"text":142448},{"id":142550,"depth":1172,"text":142551},{"id":142868,"depth":1172,"text":142869},{"id":142896,"depth":28,"text":142897,"children":143156},[143157,143158,143159,143160,143161,143162],{"id":142903,"depth":1172,"text":142904},{"id":142910,"depth":1172,"text":142911},{"id":142926,"depth":1172,"text":142927},{"id":142936,"depth":1172,"text":142937},{"id":142963,"depth":1172,"text":142964},{"id":143018,"depth":1172,"text":143019},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch18-2d3d",{"title":142235,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch18-2D动画与3D转换","1_0Tn58EtT3Zxiv54Fdr4nuYTjJFUVecbnj1dyl9_b0",{"id":143169,"title":143170,"body":143171,"description":30,"extension":31,"meta":143374,"navigation":33,"path":143375,"seo":143376,"stem":143377,"__hash__":143378},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口.md","19. 移动端基础-前缀现状与视口",{"type":7,"value":143172,"toc":143363},[143173,143176,143180,143183,143186,143190,143193,143196,143199,143203,143206,143210,143213,143217,143220,143224,143238,143242,143267,143270,143273,143290,143294,143298,143301,143304,143308,143311,143314,143332,143336,143339,143353,143357,143360],[10,143174,143170],{"id":143175},"_19-移动端基础-前缀现状与视口",[48,143177,143179],{"id":143178},"_191-浏览器私有前缀","19.1 浏览器私有前缀",[23,143181],{"style":126393,"src":143182},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-219.png",[14,143184,143185],{},"意思就是加个前缀，增加兼容性",[48,143187,143189],{"id":143188},"_192-移动端现状认识","19.2 移动端现状认识",[23,143191],{"style":126393,"src":143192},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-220.png",[14,143194,143195],{},"调试方法：",[23,143197],{"style":126393,"src":143198},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-221.png",[48,143200,143202],{"id":143201},"_193-视口","19.3 视口",[14,143204,143205],{},"**视口（viewport）**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口",[77,143207,143209],{"id":143208},"_1931-布局视口-layout-viewport","19.3.1 布局视口 layout viewport",[23,143211],{"style":126393,"src":143212},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-222.png",[77,143214,143216],{"id":143215},"_1932-视觉视口-visual-viewport","19.3.2 视觉视口 visual viewport",[23,143218],{"style":126393,"src":143219},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-223.png",[77,143221,143223],{"id":143222},"_1933-理想视口-ideal-viewport","19.3.3 理想视口 ideal viewport",[1124,143225,143226,143229,143232,143235],{},[63,143227,143228],{},"为了使网站在移动端有最理想的浏览和阅读宽度而设定",[63,143230,143231],{},"理想视口，对设备来讲，是最理想的视口尺寸",[63,143233,143234],{},"需要手动添写meta视口标签通知浏览器操作",[63,143236,143237],{},"meta视口标签的主要目的：布局视口的宽度应该与理想视口的宽度一致，简单理解就是设备有多宽，我们布局的视口就多宽",[77,143239,143241],{"id":143240},"_1934-meta视口标签","19.3.4 meta视口标签",[97,143243,143245],{"className":127284,"code":143244,"language":127286,"meta":25,"style":25},"\u003Cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n",[103,143246,143247],{"__ignoreMap":25},[106,143248,143249,143251,143253,143255,143257,143259,143261,143263,143265],{"class":108,"line":109},[106,143250,1027],{"class":116},[106,143252,51338],{"class":51294},[106,143254,14913],{"class":1955},[106,143256,162],{"class":116},[106,143258,51385],{"class":221},[106,143260,51365],{"class":1955},[106,143262,162],{"class":116},[106,143264,51392],{"class":221},[106,143266,51301],{"class":116},[23,143268],{"style":126393,"src":143269},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-224.png",[14,143271,143272],{},"标准视口设置：",[60,143274,143275,143278,143281,143284,143287],{},[63,143276,143277],{},"视口宽度和设备保持一致",[63,143279,143280],{},"视口的默认缩放比例1.0",[63,143282,143283],{},"不允许用户自行缩放",[63,143285,143286],{},"最大允许的缩放比例1.0",[63,143288,143289],{},"最小允许的缩放比例1.0",[77,143291,143293],{"id":143292},"_1935-二倍图","19.3.5 二倍图",[21991,143295,143297],{"id":143296},"_19351-物理像素物理像素比","19.3.5.1 物理像素&物理像素比",[23,143299],{"style":126393,"src":143300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-225.png",[23,143302],{"style":126393,"src":143303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-226.png",[21991,143305,143307],{"id":143306},"_19352-多倍图","19.3.5.2 多倍图",[23,143309],{"style":126393,"src":143310},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-227.png",[14,143312,143313],{},"二倍图法，代码如下：",[97,143315,143317],{"className":126537,"code":143316,"language":126539,"meta":25,"style":25},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\nbackground-size: 50% 50%;\n",[103,143318,143319,143324],{"__ignoreMap":25},[106,143320,143321],{"class":108,"line":109},[106,143322,143323],{"class":175},"\u002F* 二倍图：使用 2x 分辨率图片，通过 background-size 缩小到实际显示尺寸 *\u002F\n",[106,143325,143326,143329],{"class":108,"line":28},[106,143327,143328],{"class":51294},"background-size",[106,143330,143331],{"class":116},": 50% 50%;\n",[21991,143333,143335],{"id":143334},"_19353-背景缩放-background-size","19.3.5.3 背景缩放 background-size",[23,143337],{"style":126393,"src":143338},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-228.png",[60,143340,143341,143344,143347,143350],{},[63,143342,143343],{},"如果只写一个参数，肯定是宽度，高度省略了，会进行等比缩放",[63,143345,143346],{},"里边的单位可以跟百分比% 是相对于父盒子来说的",[63,143348,143349],{},"cover运行的时候就是沿着宽高方向进行放大背景，所以会可能导致部分背景图片显示不全，正方形时就可以显示全",[63,143351,143352],{},"contain它是高度和宽度等比例拉伸，当宽度或高度 铺满div盒子就不再进行拉伸了，div可能有部分空白区域",[21991,143354,143356],{"id":143355},"_19354-二倍精灵图做法","19.3.5.4 二倍精灵图做法",[23,143358],{"style":126393,"src":143359},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-229.png",[5119,143361,143362],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":25,"searchDepth":28,"depth":28,"links":143364},[143365,143366,143367],{"id":143178,"depth":28,"text":143179},{"id":143188,"depth":28,"text":143189},{"id":143201,"depth":28,"text":143202,"children":143368},[143369,143370,143371,143372,143373],{"id":143208,"depth":1172,"text":143209},{"id":143215,"depth":1172,"text":143216},{"id":143222,"depth":1172,"text":143223},{"id":143240,"depth":1172,"text":143241},{"id":143292,"depth":1172,"text":143293},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch19",{"title":143170,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch19-移动端基础-前缀现状与视口","I7YPWmMspOfCCPUuENRXhFE3PC_6s5-J1ZyI4ciWtnM",{"id":143380,"title":143381,"body":143382,"description":30,"extension":31,"meta":144259,"navigation":33,"path":144260,"seo":144261,"stem":144262,"__hash__":144263},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇.md","20. 移动端布局实战上篇",{"type":7,"value":143383,"toc":144243},[143384,143387,143391,143398,143401,143408,143411,143416,143419,143423,143427,143434,143437,143440,143444,143447,143450,143453,143456,143459,143463,143466,143470,143472,143475,143478,143481,143484,143486,143489,143491,143521,143523,143553,143557,143560,143564,143567,143584,143587,143590,143666,143668,143671,143674,143677,143680,143682,143685,143688,143692,143714,143717,143720,143724,143727,143733,143736,143740,143743,143746,143750,143753,143756,143759,143763,143766,143769,143772,143775,143779,143782,143786,143793,143796,143799,143802,143805,143815,143818,143821,143828,143831,143835,143838,143841,143845,143848,143851,143854,143899,143902,143905,143908,143910,144039,144041,144079,144082,144085,144087,144205,144207,144241],[10,143385,143381],{"id":143386},"_20-移动端布局实战上篇",[48,143388,143390],{"id":143389},"_201-移动端主流方案","20.1 移动端主流方案",[60,143392,143393],{},[63,143394,143395],{},[266,143396,143397],{},"单独移动端页面（主流）",[23,143399],{"style":126393,"src":143400},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-230.png",[60,143402,143403],{"start":28},[63,143404,143405],{},[266,143406,143407],{},"响应式兼容PC移动端",[23,143409],{"style":126393,"src":143410},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-231.png",[60,143412,143413],{"start":1172},[63,143414,143415],{},"两种页面选型布局方式",[23,143417],{"style":126393,"src":143418},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-232.png",[48,143420,143422],{"id":143421},"_202-移动端技术解决方案","20.2 移动端技术解决方案",[77,143424,143426],{"id":143425},"_2021-css初始化-normalizecss","20.2.1 CSS初始化 normalize.css",[14,143428,143429,143430],{},"官网地址： ",[355,143431,143432],{"href":143432,"rel":143433},"http:\u002F\u002Fnecolas.github.io\u002Fnormalize.css\u002F",[23858],[23,143435],{"style":126393,"src":143436},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-233.png",[23,143438],{"style":126393,"src":143439},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-234.png",[77,143441,143443],{"id":143442},"_2022-css3-盒子模型-box-sizing","20.2.2 CSS3 盒子模型 box-sizing",[23,143445],{"style":126393,"src":143446},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-235.png",[23,143448],{"style":126393,"src":143449},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-236.png",[14,143451,143452],{},"去除高亮：",[14,143454,143455],{},"在用a元素的时候在pc端没事，但是在手机端一点会有颜色背景，去除的方式是",[14,143457,143458],{},"-webkit- tap-highlight-color: transparent;",[48,143460,143462],{"id":143461},"_203-流式布局百分比布局","20.3 流式布局（百分比布局）",[23,143464],{"style":126393,"src":143465},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-237.png",[48,143467,143469],{"id":143468},"_204-流式布局案例","20.4 流式布局案例",[14,143471,146],{},[14,143473,143474],{},"移动端在进行大盒子中左右两个盒子大小固定不变，中间盒子随着大盒子的放大而变大，变小而变小，此时可以一定要学会使用定位，定位非常非常重要，如果想让大盒子不动，不随着页面向下的滑动而改变，此时对大盒子使用固定定位，并将宽度设置为100%，高度自己定，左右两个盒子设置为固定定位，并给定其确定的宽和高，让它不会随意浏览器的缩放而改变，对中间盒子采用标准流做法，给它设定一个magin，让它与左右盒子相隔，宽度设为100%，高度设为确定值，设置magin是因为那两个左右盒子是绝对定位，它会盖住中间盒子两边的部分的。",[14,143476,143477],{},"也可以使用flex布局来实现，给左右盒子设置好宽高，对大盒子使用flex布局，然后中间剩余部分全给中间盒子即可实现！",[14,143479,143480],{},"图片格式：",[23,143482],{"style":126393,"src":143483},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-238.png",[14,143485,135580],{},[23,143487],{"style":126393,"src":143488},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-239.png",[14,143490,139907],{},[97,143492,143493],{"className":127284,"code":134039,"language":127286,"meta":25,"style":25},[103,143494,143495],{"__ignoreMap":25},[106,143496,143497,143499,143501,143503,143505,143507,143509,143511,143513,143515,143517,143519],{"class":108,"line":109},[106,143498,1027],{"class":116},[106,143500,23],{"class":51294},[106,143502,55233],{"class":1955},[106,143504,162],{"class":116},[106,143506,134054],{"class":221},[106,143508,55241],{"class":1955},[106,143510,162],{"class":116},[106,143512,134061],{"class":221},[106,143514,134064],{"class":1955},[106,143516,162],{"class":116},[106,143518,134069],{"class":221},[106,143520,51301],{"class":116},[14,143522,139996],{},[97,143524,143525],{"className":127284,"code":134039,"language":127286,"meta":25,"style":25},[103,143526,143527],{"__ignoreMap":25},[106,143528,143529,143531,143533,143535,143537,143539,143541,143543,143545,143547,143549,143551],{"class":108,"line":109},[106,143530,1027],{"class":116},[106,143532,23],{"class":51294},[106,143534,55233],{"class":1955},[106,143536,162],{"class":116},[106,143538,134054],{"class":221},[106,143540,55241],{"class":1955},[106,143542,162],{"class":116},[106,143544,134061],{"class":221},[106,143546,134064],{"class":1955},[106,143548,162],{"class":116},[106,143550,134069],{"class":221},[106,143552,51301],{"class":116},[48,143554,143556],{"id":143555},"_205-flex布局","20.5 flex布局",[23,143558],{"style":126393,"src":143559},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-240.png",[77,143561,143563],{"id":143562},"_2051-布局原理","20.5.1 布局原理",[14,143565,143566],{},"flex 是 flexible Box 的缩写，意为\"弹性布局\"，用来为盒状模型提供最大的灵活性，任何一个容器都可以指定为 flex 布局",[1124,143568,143569,143572,143575,143578,143581],{},[63,143570,143571],{},"当我们为父盒子设为 flex 布局以后，子元素的 float、clear 和 vertical-align 属性将失效",[63,143573,143574],{},"伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局",[63,143576,143577],{},"采用 Flex 布局的元素，称为 Flex 容器（flex container），简称\"容器\"。它的所有子元素自动成为容器成员，称为 Flex 项目（flex item），简称\"项目\"",[63,143579,143580],{},"总结来说就是：就是通过给父盒子添加flex属性，来控制子盒子的位置和排列方式",[63,143582,143583],{},"flex可以直接将行内元素变成类似于浮动的效果，就有宽高了",[14,143585,143586],{},"父盒子被设置为弹性布局后，如果不给它设置宽度的话，父盒子的宽度就是子盒子撑开的宽度，如果有两个子盒子，第一个子盒子设置了宽高，第二个盒子宽度设为100%，则第二个盒子的宽度就是第一个盒子的宽度。父盒子由第一个盒子撑开",[14,143588,143589],{},"在弹性布局中如果是个单选标签，可以使用下边的方式进行布局：",[97,143591,143593],{"className":126537,"code":143592,"language":126539,"meta":25,"style":25},"\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",[103,143594,143595,143600,143607,143617,143629,143640,143651,143662],{"__ignoreMap":25},[106,143596,143597],{"class":108,"line":109},[106,143598,143599],{"class":175},"\u002F* Flex 弹性布局 *\u002F\n",[106,143601,143602,143605],{"class":108,"line":28},[106,143603,143604],{"class":1955},".container",[106,143606,15565],{"class":116},[106,143608,143609,143611,143613,143615],{"class":108,"line":1172},[106,143610,128153],{"class":165},[106,143612,51431],{"class":116},[106,143614,51471],{"class":165},[106,143616,1283],{"class":116},[106,143618,143619,143622,143624,143627],{"class":108,"line":1187},[106,143620,143621],{"class":165},"  flex-direction",[106,143623,51431],{"class":116},[106,143625,143626],{"class":165},"row",[106,143628,1283],{"class":116},[106,143630,143631,143634,143636,143638],{"class":108,"line":1193},[106,143632,143633],{"class":165},"  justify-content",[106,143635,51431],{"class":116},[106,143637,51662],{"class":165},[106,143639,1283],{"class":116},[106,143641,143642,143645,143647,143649],{"class":108,"line":1207},[106,143643,143644],{"class":165},"  align-items",[106,143646,51431],{"class":116},[106,143648,51586],{"class":165},[106,143650,1283],{"class":116},[106,143652,143653,143656,143658,143660],{"class":108,"line":1213},[106,143654,143655],{"class":165},"  flex-wrap",[106,143657,51431],{"class":116},[106,143659,78604],{"class":165},[106,143661,1283],{"class":116},[106,143663,143664],{"class":108,"line":1304},[106,143665,1557],{"class":116},[14,143667,70447],{},[14,143669,143670],{},".form-item .male-label {",[14,143672,143673],{},"   margin-right: 20px;",[14,143675,143676],{},"   display: inline-flex;",[14,143678,143679],{},"   align-items: center;",[14,143681,1063],{},[23,143683],{"style":126393,"src":143684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-241.png",[23,143686],{"style":126393,"src":143687},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-242.png",[77,143689,143691],{"id":143690},"_2052-常见父项属性","20.5.2 常见父项属性",[60,143693,143694,143697,143700,143703,143706,143709,143712],{},[63,143695,143696],{},"flex-direction：设置主轴的方向",[63,143698,143699],{},"justify-content：设置主轴上的子元素排列方式",[63,143701,143702],{},"flex-wrap：设置子元素是否换行",[63,143704,143705],{},"align-content：设置侧轴上的子元素的排列方式（多行）",[63,143707,143708],{},"align-items：设置侧轴上的子元素排列方式（单行）",[63,143710,143711],{},"flex-flow：复合属性，相当于同时设置了 flex-direction 和 flex-wrap",[63,143713,143696],{},[23,143715],{"style":126393,"src":143716},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-243.png",[23,143718],{"style":126393,"src":143719},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-244.png",[60,143721,143722],{"start":28},[63,143723,143699],{},[23,143725],{"style":126393,"src":143726},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-245.png",[14,143728,143729,143732],{},[103,143730,143731],{},"space-evenly","：所有间距都完全相等（包括两端和元素之间）",[14,143734,143735],{},"跟着主轴走",[60,143737,143738],{"start":1172},[63,143739,143702],{},[23,143741],{"style":126393,"src":143742},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-246.png",[14,143744,143745],{},"flex布局中是默认不换行的，当父亲盒子宽100px，高100px，内部的5个四盒子设置 宽为30px，高30px，如果排列方式按照默认，则按照x轴来进行排，从左到右的方式来进行排列，则子盒子不会换行，子盒子的宽度将会失效，然后会自动调整宽度以适应这个父盒子，会将父盒子沿这个轴塞满",[60,143747,143748],{"start":1187},[63,143749,143705],{},[23,143751],{"style":126393,"src":143752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-247.png",[14,143754,143755],{},"搭配前边的主轴排列方式就可以实现对主轴与侧轴的操作",[14,143757,143758],{},"stretch:沿着侧轴拉伸，但是要首先去掉侧轴方向的宽或高：若侧轴为y轴，则去掉高度大小",[60,143760,143761],{"start":1193},[63,143762,143708],{},[23,143764],{"style":126393,"src":143765},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-248.png",[14,143767,143768],{},"align-items与align-content之间的区别：",[14,143770,143771],{},"单找items，多找content",[23,143773],{"style":126393,"src":143774},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-249.png",[60,143776,143777],{"start":1207},[63,143778,143711],{},[23,143780],{"style":126393,"src":143781},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-250.png",[77,143783,143785],{"id":143784},"_2053-flex布局子项常见属性","20.5.3 flex布局子项常见属性",[60,143787,143788],{},[63,143789,143790],{},[266,143791,143792],{},"flex 属性",[14,143794,143795],{},"flex 属性定义子项目分配剩余空间，用flex来表示占多少份数",[23,143797],{"style":126393,"src":143798},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-251.png",[14,143800,143801],{},"可以理解为没站位的剩余空间 ，数字表示的含义理解为：数字\u002F总元素",[14,143803,143804],{},"flex后边也可以跟百分比，通常用于父盒子不给高度，宽度为100%，想让子盒子换行和撑开的情况，li没有宽度，此时用flex：1；是不太起作用的，他不会换行，这是因为没有宽度，此时可以通过给子盒子使用flex: 20%;让子盒子平均为大盒子宽度的百分之50,这时候给父盒子加上flex-wrap: wrap;就管用了，就可以实现换行了",[60,143806,143807],{"start":28},[63,143808,143809,13788,143812],{},[266,143810,143811],{},"align-self",[266,143813,143814],{},"控制子项自己在侧轴上的排列方式",[23,143816],{"style":126393,"src":143817},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-252.png",[14,143819,143820],{},"单个子盒子在父盒子侧轴上的排列方式",[60,143822,143823],{"start":1172},[63,143824,143825,143827],{},[266,143826,95282],{}," 属性定义项目的排列顺序",[23,143829],{"style":126393,"src":143830},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-253.png",[77,143832,143834],{"id":143833},"_2054-背景线性渐变","20.5.4 背景线性渐变",[23,143836],{"style":126393,"src":143837},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-254.png",[14,143839,143840],{},"必须要添加浏览器的私有前缀",[77,143842,143844],{"id":143843},"_2055-携程网首页案例","20.5.5 携程网首页案例",[14,143846,143847],{},"学到最重要的知识：",[14,143849,143850],{},"flex处理这样的布局思路",[23,143852],{"style":126393,"src":143853},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-255.png",[97,143855,143857],{"className":126537,"code":143856,"language":126539,"meta":25,"style":25},".container {\n  display: flex;\n  justify-content: center;\n  align-items: center;\n}\n",[103,143858,143859,143865,143875,143885,143895],{"__ignoreMap":25},[106,143860,143861,143863],{"class":108,"line":109},[106,143862,143604],{"class":1955},[106,143864,15565],{"class":116},[106,143866,143867,143869,143871,143873],{"class":108,"line":28},[106,143868,128153],{"class":165},[106,143870,51431],{"class":116},[106,143872,51471],{"class":165},[106,143874,1283],{"class":116},[106,143876,143877,143879,143881,143883],{"class":108,"line":1172},[106,143878,143633],{"class":165},[106,143880,51431],{"class":116},[106,143882,51586],{"class":165},[106,143884,1283],{"class":116},[106,143886,143887,143889,143891,143893],{"class":108,"line":1187},[106,143888,143644],{"class":165},[106,143890,51431],{"class":116},[106,143892,51586],{"class":165},[106,143894,1283],{"class":116},[106,143896,143897],{"class":108,"line":1193},[106,143898,1557],{"class":116},[14,143900,143901],{},"对上述的布局思路的多个多个背景图片替换的方式如下：一定要学会思路！！！",[14,143903,143904],{},"使用属性选择器",[23,143906],{"style":126393,"src":143907},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-256.png",[14,143909,68883],{},[97,143911,143913],{"className":127284,"code":143912,"language":127286,"meta":25,"style":25},"\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",[103,143914,143915,143920,143934,143939,143959,143964,143983,143988,144007,144012,144031],{"__ignoreMap":25},[106,143916,143917],{"class":108,"line":109},[106,143918,143919],{"class":175},"\u003C!-- 携程网移动端案例结构 -->\n",[106,143921,143922,143924,143926,143928,143930,143932],{"class":108,"line":28},[106,143923,1027],{"class":116},[106,143925,51605],{"class":51294},[106,143927,53480],{"class":1955},[106,143929,162],{"class":116},[106,143931,92317],{"class":221},[106,143933,51301],{"class":116},[106,143935,143936],{"class":108,"line":1172},[106,143937,143938],{"class":175},"  \u003C!-- 搜索栏 -->\n",[106,143940,143941,143943,143945,143947,143949,143952,143955,143957],{"class":108,"line":1187},[106,143942,52138],{"class":116},[106,143944,51605],{"class":51294},[106,143946,53480],{"class":1955},[106,143948,162],{"class":116},[106,143950,143951],{"class":221},"\"search-index\"",[106,143953,143954],{"class":116},">...\u003C\u002F",[106,143956,51605],{"class":51294},[106,143958,51301],{"class":116},[106,143960,143961],{"class":108,"line":1193},[106,143962,143963],{"class":175},"  \u003C!-- 焦点图 -->\n",[106,143965,143966,143968,143970,143972,143974,143977,143979,143981],{"class":108,"line":1207},[106,143967,52138],{"class":116},[106,143969,51605],{"class":51294},[106,143971,53480],{"class":1955},[106,143973,162],{"class":116},[106,143975,143976],{"class":221},"\"focus\"",[106,143978,143954],{"class":116},[106,143980,51605],{"class":51294},[106,143982,51301],{"class":116},[106,143984,143985],{"class":108,"line":1213},[106,143986,143987],{"class":175},"  \u003C!-- 主导航 -->\n",[106,143989,143990,143992,143994,143996,143998,144001,144003,144005],{"class":108,"line":1304},[106,143991,52138],{"class":116},[106,143993,51605],{"class":51294},[106,143995,53480],{"class":1955},[106,143997,162],{"class":116},[106,143999,144000],{"class":221},"\"local-nav\"",[106,144002,143954],{"class":116},[106,144004,51605],{"class":51294},[106,144006,51301],{"class":116},[106,144008,144009],{"class":108,"line":1310},[106,144010,144011],{"class":175},"  \u003C!-- 子导航 -->\n",[106,144013,144014,144016,144018,144020,144022,144025,144027,144029],{"class":108,"line":1322},[106,144015,52138],{"class":116},[106,144017,51605],{"class":51294},[106,144019,53480],{"class":1955},[106,144021,162],{"class":116},[106,144023,144024],{"class":221},"\"nav-common\"",[106,144026,143954],{"class":116},[106,144028,51605],{"class":51294},[106,144030,51301],{"class":116},[106,144032,144033,144035,144037],{"class":108,"line":1604},[106,144034,51779],{"class":116},[106,144036,51605],{"class":51294},[106,144038,51301],{"class":116},[14,144040,70447],{},[97,144042,144043],{"className":126537,"code":136989,"language":126539,"meta":25,"style":25},[103,144044,144045,144059,144075],{"__ignoreMap":25},[106,144046,144047,144049,144051,144053,144055,144057],{"class":108,"line":109},[106,144048,53815],{"class":51294},[106,144050,1007],{"class":116},[106,144052,103092],{"class":1955},[106,144054,162],{"class":112},[106,144056,62693],{"class":221},[106,144058,137006],{"class":116},[106,144060,144061,144063,144065,144067,144069,144071,144073],{"class":108,"line":28},[106,144062,70890],{"class":165},[106,144064,51431],{"class":116},[106,144066,334],{"class":165},[106,144068,51486],{"class":112},[106,144070,51515],{"class":165},[106,144072,130117],{"class":165},[106,144074,1283],{"class":116},[106,144076,144077],{"class":108,"line":1172},[106,144078,1557],{"class":116},[14,144080,144081],{},"总代码和效果展示：",[23,144083],{"style":126393,"src":144084},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-257.png",[14,144086,68883],{},[97,144088,144089],{"className":127284,"code":143912,"language":127286,"meta":25,"style":25},[103,144090,144091,144095,144109,144113,144131,144135,144153,144157,144175,144179,144197],{"__ignoreMap":25},[106,144092,144093],{"class":108,"line":109},[106,144094,143919],{"class":175},[106,144096,144097,144099,144101,144103,144105,144107],{"class":108,"line":28},[106,144098,1027],{"class":116},[106,144100,51605],{"class":51294},[106,144102,53480],{"class":1955},[106,144104,162],{"class":116},[106,144106,92317],{"class":221},[106,144108,51301],{"class":116},[106,144110,144111],{"class":108,"line":1172},[106,144112,143938],{"class":175},[106,144114,144115,144117,144119,144121,144123,144125,144127,144129],{"class":108,"line":1187},[106,144116,52138],{"class":116},[106,144118,51605],{"class":51294},[106,144120,53480],{"class":1955},[106,144122,162],{"class":116},[106,144124,143951],{"class":221},[106,144126,143954],{"class":116},[106,144128,51605],{"class":51294},[106,144130,51301],{"class":116},[106,144132,144133],{"class":108,"line":1193},[106,144134,143963],{"class":175},[106,144136,144137,144139,144141,144143,144145,144147,144149,144151],{"class":108,"line":1207},[106,144138,52138],{"class":116},[106,144140,51605],{"class":51294},[106,144142,53480],{"class":1955},[106,144144,162],{"class":116},[106,144146,143976],{"class":221},[106,144148,143954],{"class":116},[106,144150,51605],{"class":51294},[106,144152,51301],{"class":116},[106,144154,144155],{"class":108,"line":1213},[106,144156,143987],{"class":175},[106,144158,144159,144161,144163,144165,144167,144169,144171,144173],{"class":108,"line":1304},[106,144160,52138],{"class":116},[106,144162,51605],{"class":51294},[106,144164,53480],{"class":1955},[106,144166,162],{"class":116},[106,144168,144000],{"class":221},[106,144170,143954],{"class":116},[106,144172,51605],{"class":51294},[106,144174,51301],{"class":116},[106,144176,144177],{"class":108,"line":1310},[106,144178,144011],{"class":175},[106,144180,144181,144183,144185,144187,144189,144191,144193,144195],{"class":108,"line":1322},[106,144182,52138],{"class":116},[106,144184,51605],{"class":51294},[106,144186,53480],{"class":1955},[106,144188,162],{"class":116},[106,144190,144024],{"class":221},[106,144192,143954],{"class":116},[106,144194,51605],{"class":51294},[106,144196,51301],{"class":116},[106,144198,144199,144201,144203],{"class":108,"line":1604},[106,144200,51779],{"class":116},[106,144202,51605],{"class":51294},[106,144204,51301],{"class":116},[14,144206,70447],{},[97,144208,144209],{"className":127284,"code":130641,"language":127286,"meta":25,"style":25},[103,144210,144211,144215,144229,144233],{"__ignoreMap":25},[106,144212,144213],{"class":108,"line":109},[106,144214,130648],{"class":175},[106,144216,144217,144219,144221,144223,144225,144227],{"class":108,"line":28},[106,144218,1027],{"class":116},[106,144220,51605],{"class":51294},[106,144222,53480],{"class":1955},[106,144224,162],{"class":116},[106,144226,130661],{"class":221},[106,144228,51301],{"class":116},[106,144230,144231],{"class":108,"line":1172},[106,144232,130668],{"class":116},[106,144234,144235,144237,144239],{"class":108,"line":1187},[106,144236,51779],{"class":116},[106,144238,51605],{"class":51294},[106,144240,51301],{"class":116},[5119,144242,137938],{},{"title":25,"searchDepth":28,"depth":28,"links":144244},[144245,144246,144250,144251,144252],{"id":143389,"depth":28,"text":143390},{"id":143421,"depth":28,"text":143422,"children":144247},[144248,144249],{"id":143425,"depth":1172,"text":143426},{"id":143442,"depth":1172,"text":143443},{"id":143461,"depth":28,"text":143462},{"id":143468,"depth":28,"text":143469},{"id":143555,"depth":28,"text":143556,"children":144253},[144254,144255,144256,144257,144258],{"id":143562,"depth":1172,"text":143563},{"id":143690,"depth":1172,"text":143691},{"id":143784,"depth":1172,"text":143785},{"id":143833,"depth":1172,"text":143834},{"id":143843,"depth":1172,"text":143844},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch20",{"title":143381,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch20-移动端布局实战上篇","cQcqj5e9hR6NoF8kN47rpTyWJSyfRUI7ogbrP5czAbc",{"id":144265,"title":144266,"body":144267,"description":30,"extension":31,"meta":145494,"navigation":33,"path":145495,"seo":145496,"stem":145497,"__hash__":145498},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇.md","21. 移动端布局实战下篇",{"type":7,"value":144268,"toc":145472},[144269,144272,144276,144280,144283,144286,144290,144295,144298,144301,144304,144307,144310,144367,144370,144375,144378,144381,144385,144396,144400,144403,144406,144413,144418,144422,144425,144431,144434,144438,144441,144448,144451,144454,144461,144464,144471,144474,144477,144484,144487,144490,144492,144509,144513,144516,144519,144522,144526,144529,144532,144535,144538,144541,144544,144546,144549,144552,144614,144617,144727,144734,144740,144743,144746,144750,144753,144757,144762,144765,144772,144775,144781,144786,144789,144792,144795,144798,144801,144804,144807,144810,144866,144868,144894,144898,144901,144904,144907,144915,144918,144921,144925,144981,144984,144988,144994,145005,145008,145013,145016,145019,145025,145028,145031,145034,145037,145040,145043,145046,145049,145074,145080,145083,145086,145089,145092,145095,145098,145103,145106,145109,145112,145120,145123,145130,145133,145136,145138,145162,145164,145167,145170,145173,145176,145179,145182,145185,145219,145222,145225,145259,145266,145269,145272,145275,145278,145281,145284,145291,145294,145297,145300,145303,145310,145313,145316,145323,145326,145329,145333,145336,145339,145342,145345,145348,145351,145354,145357,145359,145383,145385,145409,145413,145424,145427,145430,145433,145436,145439,145442,145445,145448,145451,145454,145457,145460,145463,145466,145469],[10,144270,144266],{"id":144271},"_21-移动端布局实战下篇",[48,144273,144275],{"id":144274},"_211-rem适配布局","21.1 rem适配布局",[77,144277,144279],{"id":144278},"_2111-rem单位","21.1.1 rem单位",[23,144281],{"style":126393,"src":144282},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-258.png",[14,144284,144285],{},"也就是父盒子font-size设置为12px的话，子盒子的font-size设为10em，则子盒子文字大小为120px",[77,144287,144289],{"id":144288},"_2112-媒体查询","21.1.2 媒体查询",[60,144291,144292],{},[63,144293,144294],{},"参数介绍",[23,144296],{"style":126393,"src":144297},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-259.png",[23,144299],{"style":126393,"src":144300},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-260.png",[23,144302],{"style":126393,"src":144303},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-261.png",[23,144305],{"style":126393,"src":144306},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-262.png",[23,144308],{"style":126393,"src":144309},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-263.png",[97,144311,144313],{"className":126537,"code":144312,"language":126539,"meta":25,"style":25},"\u002F* 媒体查询 *\u002F\n@media (max-width: 768px) {\n  .container {\n    width: 100%;\n  }\n}\n",[103,144314,144315,144320,144339,144346,144359,144363],{"__ignoreMap":25},[106,144316,144317],{"class":108,"line":109},[106,144318,144319],{"class":175},"\u002F* 媒体查询 *\u002F\n",[106,144321,144322,144325,144327,144330,144332,144335,144337],{"class":108,"line":28},[106,144323,144324],{"class":112},"@media",[106,144326,1650],{"class":116},[106,144328,144329],{"class":165},"max-width",[106,144331,51431],{"class":116},[106,144333,144334],{"class":165},"768",[106,144336,51486],{"class":112},[106,144338,12435],{"class":116},[106,144340,144341,144344],{"class":108,"line":1172},[106,144342,144343],{"class":1955},"  .container",[106,144345,15565],{"class":116},[106,144347,144348,144351,144353,144355,144357],{"class":108,"line":1187},[106,144349,144350],{"class":165},"    width",[106,144352,51431],{"class":116},[106,144354,428],{"class":165},[106,144356,445],{"class":112},[106,144358,1283],{"class":116},[106,144360,144361],{"class":108,"line":1193},[106,144362,127333],{"class":116},[106,144364,144365],{"class":108,"line":1207},[106,144366,1557],{"class":116},[14,144368,144369],{},"媒体查询一般按照从大到小或者 从小到大的顺序来",[60,144371,144372],{"start":28},[63,144373,144374],{},"引入资源",[23,144376],{"style":126393,"src":144377},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-264.png",[14,144379,144380],{},"引入资源就是针对不同的屏幕尺寸 调用不同的css文件",[77,144382,144384],{"id":144383},"_2113-媒体查询rem实现元素动态大小变化","21.1.3 媒体查询+rem实现元素动态大小变化",[1124,144386,144387,144390,144393],{},[63,144388,144389],{},"rem单位是跟着html来走的，有了rem页面元素可以设置不同大小尺寸",[63,144391,144392],{},"媒体查询可以根据不同设备宽度来修改样式",[63,144394,144395],{},"媒体查询+rem 就可以实现不同设备宽度，实现页面元素大小的动态变化",[48,144397,144399],{"id":144398},"_212-less基础","21.2 Less基础",[14,144401,144402],{},"css冗余度较高，不利于复用，没有很好的计算能力",[14,144404,144405],{},"Less可以解决该问题，它是css的扩展语言",[14,144407,144408,144409],{},"Less中文网址： ",[355,144410,144411],{"href":144411,"rel":144412},"http:\u002F\u002Flesscss.cn\u002F",[23858],[14,144414,144415],{},[266,144416,144417],{},"Less 是一门 CSS 预处理语言，它扩展了CSS的动态特性",[77,144419,144421],{"id":144420},"_2121-less安装","21.2.1 less安装",[14,144423,144424],{},"如果使用vscode，则无需进行下方安装步骤",[14,144426,144427],{},[355,144428,144429],{"href":144429,"rel":144430},"http:\u002F\u002Fnodejs.cn\u002Fdownload\u002F",[23858],[23,144432],{"style":126393,"src":144433},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-265.png",[77,144435,144437],{"id":144436},"_2122-less使用","21.2.2 less使用",[14,144439,144440],{},"我们首先新建一个后缀名为less的文件， 在这个less文件里面书写less语句",[60,144442,144443],{},[63,144444,144445],{},[266,144446,144447],{},"Less 变量",[23,144449],{"style":126393,"src":144450},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-266.png",[23,144452],{"style":126393,"src":144453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-267.png",[60,144455,144456],{"start":28},[63,144457,144458],{},[266,144459,144460],{},"Less 编译",[23,144462],{"style":126393,"src":144463},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-268.png",[60,144465,144466],{"start":1172},[63,144467,144468],{},[266,144469,144470],{},"Less 嵌套",[23,144472],{"style":126393,"src":144473},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-269.png",[23,144475],{"style":126393,"src":144476},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-270.png",[60,144478,144479],{"start":1187},[63,144480,144481],{},[266,144482,144483],{},"Less 运算",[23,144485],{"style":126393,"src":144486},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-271.png",[14,144488,144489],{},"运算的时候不需要加单位，比如第一个+5之后就是宽度变为15px了",[14,144491,146],{},[1124,144493,144494,144497,144500,144503,144506],{},[63,144495,144496],{},"乘号（*）和除号（\u002F）的写法",[63,144498,144499],{},"运算符中间左右有个空格隔开 1px + 5",[63,144501,144502],{},"对于两个不同的单位的值之间的运算，运算结果的值取第一个值的单位",[63,144504,144505],{},"如果两个值之间只有一个值有单位，则运算结果就取该单位",[63,144507,144508],{},"注意在进行除法运算时一定要加括号，不然无法运算！",[48,144510,144512],{"id":144511},"_213-rem-适配方案","21.3 rem 适配方案",[14,144514,144515],{},"① 按照设计稿与设备宽度的比例，动态计算并设置 html 根标签的 font-size 大小（媒体查询）",[14,144517,144518],{},"② CSS 中，设计稿元素的宽、高、相对位置等取值，按照同等比例换算为 rem 为单位的值；",[23,144520],{"style":126393,"src":144521},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-272.png",[77,144523,144525],{"id":144524},"_2131-rem-实际开发适配方案1","21.3.1 rem 实际开发适配方案1",[14,144527,144528],{},"rem + 媒体查询 + less 技术",[23,144530],{"style":126393,"src":144531},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-273.png",[14,144533,144534],{},"这里可以这样理解，这个屏幕分成15份，也就是说由15份的文字组成，750px页面上文字的大小就是50px，要保持比例相同，那么在320px屏幕上的文字应该也得保证有15个，每个文字的大小就是21.33px，文字的个数由自己来定，那么只需要将页面中的文字大小设置为这15个字大小的倍数就可以了，知道倍数之后就保证了在不同屏幕上的展示比例不变",[14,144536,144537],{},"也可以理解为获得设计网页html尺寸与手机不同类型屏幕尺寸的比例，这个比例就可以保证设计网页在手机屏幕尺寸的正常显示",[23,144539],{"style":126393,"src":144540},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-274.png",[14,144542,144543],{},"写的时候每个元素都需要加（xxxrem \u002F @baseFront）",[14,144545,14626],{},[23,144547],{"style":126393,"src":144548},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-275.png",[14,144550,144551],{},"index.html:",[97,144553,144555],{"className":126537,"code":144554,"language":126539,"meta":25,"style":25},"\u002F* rem 适配方案 *\u002F\nhtml {\n  font-size: 62.5%;  \u002F* 1rem = 10px *\u002F\n}\n.box {\n  width: 10rem;  \u002F* 100px *\u002F\n}\n",[103,144556,144557,144562,144568,144584,144588,144594,144610],{"__ignoreMap":25},[106,144558,144559],{"class":108,"line":109},[106,144560,144561],{"class":175},"\u002F* rem 适配方案 *\u002F\n",[106,144563,144564,144566],{"class":108,"line":28},[106,144565,50629],{"class":51294},[106,144567,15565],{"class":116},[106,144569,144570,144572,144574,144577,144579,144581],{"class":108,"line":1172},[106,144571,70620],{"class":165},[106,144573,51431],{"class":116},[106,144575,144576],{"class":165},"62.5",[106,144578,445],{"class":112},[106,144580,130400],{"class":116},[106,144582,144583],{"class":175},"\u002F* 1rem = 10px *\u002F\n",[106,144585,144586],{"class":108,"line":1187},[106,144587,1557],{"class":116},[106,144589,144590,144592],{"class":108,"line":1193},[106,144591,130385],{"class":1955},[106,144593,15565],{"class":116},[106,144595,144596,144598,144600,144602,144605,144607],{"class":108,"line":1207},[106,144597,70562],{"class":165},[106,144599,51431],{"class":116},[106,144601,563],{"class":165},[106,144603,144604],{"class":112},"rem",[106,144606,130400],{"class":116},[106,144608,144609],{"class":175},"\u002F* 100px *\u002F\n",[106,144611,144612],{"class":108,"line":1213},[106,144613,1557],{"class":116},[14,144615,144616],{},"common.less",[97,144618,144620],{"className":126537,"code":144619,"language":126539,"meta":25,"style":25},"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",[103,144621,144622,144628,144643,144647,144653,144667,144671,144675,144679,144685,144699,144703,144709,144723],{"__ignoreMap":25},[106,144623,144624,144626],{"class":108,"line":109},[106,144625,50629],{"class":51294},[106,144627,15565],{"class":116},[106,144629,144630,144632,144634,144636,144638,144640],{"class":108,"line":28},[106,144631,70620],{"class":165},[106,144633,51431],{"class":116},[106,144635,144576],{"class":165},[106,144637,445],{"class":112},[106,144639,26061],{"class":116},[106,144641,144642],{"class":175},"\u002F* 10px *\u002F\n",[106,144644,144645],{"class":108,"line":1172},[106,144646,1557],{"class":116},[106,144648,144649,144651],{"class":108,"line":1187},[106,144650,51605],{"class":51294},[106,144652,15565],{"class":116},[106,144654,144655,144657,144659,144661,144663,144665],{"class":108,"line":1193},[106,144656,70562],{"class":165},[106,144658,51431],{"class":116},[106,144660,563],{"class":165},[106,144662,144604],{"class":112},[106,144664,26061],{"class":116},[106,144666,144609],{"class":175},[106,144668,144669],{"class":108,"line":1207},[106,144670,1557],{"class":116},[106,144672,144673],{"class":108,"line":1213},[106,144674,135998],{"class":116},[106,144676,144677],{"class":108,"line":1304},[106,144678,144561],{"class":175},[106,144680,144681,144683],{"class":108,"line":1310},[106,144682,50629],{"class":51294},[106,144684,15565],{"class":116},[106,144686,144687,144689,144691,144693,144695,144697],{"class":108,"line":1322},[106,144688,70620],{"class":165},[106,144690,51431],{"class":116},[106,144692,144576],{"class":165},[106,144694,445],{"class":112},[106,144696,130400],{"class":116},[106,144698,144583],{"class":175},[106,144700,144701],{"class":108,"line":1604},[106,144702,1557],{"class":116},[106,144704,144705,144707],{"class":108,"line":1609},[106,144706,130385],{"class":1955},[106,144708,15565],{"class":116},[106,144710,144711,144713,144715,144717,144719,144721],{"class":108,"line":1615},[106,144712,70562],{"class":165},[106,144714,51431],{"class":116},[106,144716,563],{"class":165},[106,144718,144604],{"class":112},[106,144720,130400],{"class":116},[106,144722,144609],{"class":175},[106,144724,144725],{"class":108,"line":1620},[106,144726,1557],{"class":116},[14,144728,144729,144730,144733],{},"html {\nfont-size: 62.5%; \u002F* 10px ",[23546,144731,144732],{},"\u002F\n}\ndiv {\nwidth: 10rem; \u002F"," 100px *\u002F\n}",[97,144735,144738],{"className":144736,"code":144737,"language":5180},[5178],"\n初始化样式：normalize.css(直接复制下载即可)\n\n```Css\n* {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n}\n",[103,144739,144737],{"__ignoreMap":25},[14,144741,144742],{},"less保存时会自动变成.css文件",[14,144744,144745],{},"好好搞懂上述代码写法",[77,144747,144749],{"id":144748},"_2132-样式导入样式","21.3.2 样式导入样式",[23,144751],{"style":126393,"src":144752},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-276.png",[77,144754,144756],{"id":144755},"_2133-rem-适配方案2","21.3.3 rem 适配方案2",[60,144758,144759],{},[63,144760,144761],{},"准备工作",[23,144763],{"style":126393,"src":144764},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-277.png",[14,144766,144767,144768],{},"github地址：",[355,144769,144770],{"href":144770,"rel":144771},"https:\u002F\u002Fgithub.com\u002Famfe\u002Flib-flexible",[23858],[14,144773,144774],{},"下载之后，将index.js文件拖到项目中就可以了",[14,144776,144777,144778],{},"js文件引入到index.html中使用的是",[103,144779,144780],{},"\u003Cscript src=\"js\u002Fflexible.js\">\u003C\u002Fscript>",[60,144782,144783],{"start":28},[63,144784,144785],{},"vscode插件",[23,144787],{"style":126393,"src":144788},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-278.png",[14,144790,144791],{},"js这个flexible是将整个浏览页面设计成了10等分，也就是说按照750px的设计尺寸，body的大小为75px，所以body的宽度应为10rem，由于这里不在使用媒体查询，就没有最大界面限制了，所以给body设置为margin：0 auto;是不显示的，要加一个最大宽度，即max-width",[14,144793,144794],{},"在下面布局时每个盒子的大小都是依据html（手机的尺寸界面）来变的，都要转化成rem单位，每个宽度除75不好算，这个插件可以帮助我们来算，插件就是下面的效果",[23,144796],{"style":126393,"src":144797},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-279.png",[14,144799,144800],{},"使用之前需要先修改一下html字体大小基准值，应该改为75px",[23,144802],{"style":126393,"src":144803},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-280.png",[14,144805,144806],{},"修改成75就可以，alt+z为快捷键",[14,144808,144809],{},"index.css：",[97,144811,144812],{"className":126537,"code":144554,"language":126539,"meta":25,"style":25},[103,144813,144814,144818,144824,144838,144842,144848,144862],{"__ignoreMap":25},[106,144815,144816],{"class":108,"line":109},[106,144817,144561],{"class":175},[106,144819,144820,144822],{"class":108,"line":28},[106,144821,50629],{"class":51294},[106,144823,15565],{"class":116},[106,144825,144826,144828,144830,144832,144834,144836],{"class":108,"line":1172},[106,144827,70620],{"class":165},[106,144829,51431],{"class":116},[106,144831,144576],{"class":165},[106,144833,445],{"class":112},[106,144835,130400],{"class":116},[106,144837,144583],{"class":175},[106,144839,144840],{"class":108,"line":1187},[106,144841,1557],{"class":116},[106,144843,144844,144846],{"class":108,"line":1193},[106,144845,130385],{"class":1955},[106,144847,15565],{"class":116},[106,144849,144850,144852,144854,144856,144858,144860],{"class":108,"line":1207},[106,144851,70562],{"class":165},[106,144853,51431],{"class":116},[106,144855,563],{"class":165},[106,144857,144604],{"class":112},[106,144859,130400],{"class":116},[106,144861,144609],{"class":175},[106,144863,144864],{"class":108,"line":1213},[106,144865,1557],{"class":116},[14,144867,144551],{},[97,144869,144870],{"className":126537,"code":126941,"language":126539,"meta":25,"style":25},[103,144871,144872,144878,144890],{"__ignoreMap":25},[106,144873,144874,144876],{"class":108,"line":109},[106,144875,51794],{"class":51294},[106,144877,15565],{"class":116},[106,144879,144880,144882,144884,144886,144888],{"class":108,"line":28},[106,144881,70620],{"class":165},[106,144883,51431],{"class":116},[106,144885,718],{"class":165},[106,144887,51486],{"class":112},[106,144889,1283],{"class":116},[106,144891,144892],{"class":108,"line":1172},[106,144893,1557],{"class":116},[48,144895,144897],{"id":144896},"_214-响应式开发","21.4 响应式开发",[14,144899,144900],{},"他的开发原理就是使用媒体查询针对不同宽度的设备进行布局和样式的设置，从而适配不同设备的目的。",[23,144902],{"style":126393,"src":144903},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-281.png",[14,144905,144906],{},"做法：",[1124,144908,144909,144912],{},[63,144910,144911],{},"响应式需要一个父级做为布局容器，来配合子级元素来实现变化效果",[63,144913,144914],{},"原理就是在不同屏幕下，通过媒体查询来改变这个布局容器的大小，再改变里面子元素的排列方式和大小，从而实现不同屏幕下，看到不同的页面布局和样式变化，通过父亲来改变孩子的大小",[23,144916],{"style":126393,"src":144917},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-282.png",[14,144919,144920],{},"布局容器比页面稍微小一点是为了美观好看，由于小一点点，距离两边会有空隙，美观",[77,144922,144924],{"id":144923},"_2141-简单代码示范","21.4.1 简单代码示范",[97,144926,144927],{"className":126537,"code":144554,"language":126539,"meta":25,"style":25},[103,144928,144929,144933,144939,144953,144957,144963,144977],{"__ignoreMap":25},[106,144930,144931],{"class":108,"line":109},[106,144932,144561],{"class":175},[106,144934,144935,144937],{"class":108,"line":28},[106,144936,50629],{"class":51294},[106,144938,15565],{"class":116},[106,144940,144941,144943,144945,144947,144949,144951],{"class":108,"line":1172},[106,144942,70620],{"class":165},[106,144944,51431],{"class":116},[106,144946,144576],{"class":165},[106,144948,445],{"class":112},[106,144950,130400],{"class":116},[106,144952,144583],{"class":175},[106,144954,144955],{"class":108,"line":1187},[106,144956,1557],{"class":116},[106,144958,144959,144961],{"class":108,"line":1193},[106,144960,130385],{"class":1955},[106,144962,15565],{"class":116},[106,144964,144965,144967,144969,144971,144973,144975],{"class":108,"line":1207},[106,144966,70562],{"class":165},[106,144968,51431],{"class":116},[106,144970,563],{"class":165},[106,144972,144604],{"class":112},[106,144974,130400],{"class":116},[106,144976,144609],{"class":175},[106,144978,144979],{"class":108,"line":1213},[106,144980,1557],{"class":116},[14,144982,144983],{},"父盒子一般命名为container",[77,144985,144987],{"id":144986},"_2142-bootstrap前端开发框架","21.4.2 Bootstrap前端开发框架",[14,144989,144990,144991],{},"Bootstrap 来自 Twitter（推特），是目前最受欢迎的前端框架。Bootstrap 是基于 HTML、CSS 和JAVASCRIPT的，它简洁灵活，",[266,144992,144993],{},"使得 Web 开发更加快捷",[1124,144995,144996],{},[63,144997,144998,144999],{},"官网：",[266,145000,145001],{},[355,145002,145003],{"href":145003,"rel":145004},"http:\u002F\u002Fgetbootstrap.com\u002F",[23858],[14,145006,145007],{},"可以直接去官网拿现成的东西",[60,145009,145010],{},[63,145011,145012],{},"Bootstrap的使用",[14,145014,145015],{},"控制权在框架本身，使用者要按照框架所规定的某种规范进行开发",[14,145017,145018],{},"Bootstrap 使用四步曲：",[14,145020,145021,145024],{},[266,145022,145023],{},"1. 创建文件夹结构"," 2. 创建 html 骨架结构 3. 引入相关样式文件 4. 书写内容",[23,145026],{"style":126393,"src":145027},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-283.png",[14,145029,145030],{},"打开Bootstrap官网，然后下载",[23,145032],{"style":126393,"src":145033},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-284.png",[23,145035],{"style":126393,"src":145036},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-285.png",[14,145038,145039],{},"这里边的小图标都是用类选择器写的，需要啥就复制这些类名就ok，它的效果就是给我们的标签创立了元素伪类选择器，使用的before,修改位置时，我们要对这个标签的元素伪类选择器来进行修改，只需要改变移动的量就可以，因为这个类的效果就已经进行了元素伪类选择器的设置",[14,145041,145042],{},"下载后会得到一个压缩包，然后解压一下，复制里边的js css fonts文件",[14,145044,145045],{},"在项目文件夹中新建一个bootstrap文件夹，然后将那些文件粘贴进去",[23,145047],{"style":126393,"src":145048},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-286.png",[97,145050,145052],{"className":126537,"code":145051,"language":126539,"meta":25,"style":25},".center {\n  color: red;\n}\n",[103,145053,145054,145060,145070],{"__ignoreMap":25},[106,145055,145056,145058],{"class":108,"line":109},[106,145057,126828],{"class":1955},[106,145059,15565],{"class":116},[106,145061,145062,145064,145066,145068],{"class":108,"line":28},[106,145063,70899],{"class":165},[106,145065,51431],{"class":116},[106,145067,57415],{"class":165},[106,145069,1283],{"class":116},[106,145071,145072],{"class":108,"line":1172},[106,145073,1557],{"class":116},[14,145075,145076,145079],{},[103,145077,145078],{},"\u003C!--[if lt IE 9]>"," 是条件注释：如果小于 IE9，引入下边两个文件",[23,145081],{"style":126393,"src":145082},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-287.png",[23,145084],{"style":126393,"src":145085},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-288.png",[23,145087],{"style":126393,"src":145088},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-289.png",[14,145090,145091],{},"bootstrap中的代码是通过类实现的，也就是说我们可以自己建立盒子，然后用他的类选择器，在微调，就可以实现自己想要的效果了，如果没效果，往往可能权重不够，加！important增加权重看看能否解决",[23,145093],{"style":126393,"src":145094},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-290.png",[14,145096,145097],{},"bootstrap也是通过normalize.css进行初始化的，这说明在进行项目的时候不用再引入normalize.css这个文件进行了。bootstrap内部带有初始化的引入",[60,145099,145100],{"start":28},[63,145101,145102],{},"布局容器",[23,145104],{"style":126393,"src":145105},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-291.png",[14,145107,145108],{},"这样就可以不用媒体查询了，直接用类就可以实现（这个类选择器包含了不同屏幕尺寸的宽度，可以理解为这个里边对各个尺寸进行了从小到大的媒体查询，使用这个类就完全ok，不需要媒体查询）",[14,145110,145111],{},"container-fluid用于移动式布局比较方便",[60,145113,145114],{"start":1172},[63,145115,145116,145117],{},"bootstrap ",[266,145118,145119],{},"栅格系统原理",[23,145121],{"style":126393,"src":145122},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-292.png",[60,145124,145125],{"start":1187},[63,145126,145127],{},[266,145128,145129],{},"栅格选项参数",[23,145131],{"style":126393,"src":145132},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-293.png",[14,145134,145135],{},".col-lg-3表示再大桌面显示器上每个盒子占三份，也就是4个小盒子各占四分之一",[14,145137,14626],{},[97,145139,145140],{"className":126537,"code":145051,"language":126539,"meta":25,"style":25},[103,145141,145142,145148,145158],{"__ignoreMap":25},[106,145143,145144,145146],{"class":108,"line":109},[106,145145,126828],{"class":1955},[106,145147,15565],{"class":116},[106,145149,145150,145152,145154,145156],{"class":108,"line":28},[106,145151,70899],{"class":165},[106,145153,51431],{"class":116},[106,145155,57415],{"class":165},[106,145157,1283],{"class":116},[106,145159,145160],{"class":108,"line":1172},[106,145161,1557],{"class":116},[14,145163,135580],{},[23,145165],{"style":126393,"src":145166},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-294.png",[14,145168,145169],{},"再强调一下：这个响应式布局可以实现一行内容如何分，在这个界面是这样分的，当缩小或放大一定页面就一行内容展示的可能变多，也可能变少，这就是响应式布局",[14,145171,145172],{},"然后总列份为12份，然后后边的数字就表示了占的列份，也就是占的宽度为多少",[14,145174,145175],{},"如果孩子的份数相加等于12， 则孩子能占满整个 container布局容器的宽度",[14,145177,145178],{},"如果孩子的份数相加小于12，则占不满整个container的宽度，会在右侧留有宽度",[14,145180,145181],{},"如果孩子的份数相加大于12，多余的那一列，会另起一行来显示",[14,145183,145184],{},"汇总展示说明：",[97,145186,145187],{"className":127284,"code":130641,"language":127286,"meta":25,"style":25},[103,145188,145189,145193,145207,145211],{"__ignoreMap":25},[106,145190,145191],{"class":108,"line":109},[106,145192,130648],{"class":175},[106,145194,145195,145197,145199,145201,145203,145205],{"class":108,"line":28},[106,145196,1027],{"class":116},[106,145198,51605],{"class":51294},[106,145200,53480],{"class":1955},[106,145202,162],{"class":116},[106,145204,130661],{"class":221},[106,145206,51301],{"class":116},[106,145208,145209],{"class":108,"line":1172},[106,145210,130668],{"class":116},[106,145212,145213,145215,145217],{"class":108,"line":1187},[106,145214,51779],{"class":116},[106,145216,51605],{"class":51294},[106,145218,51301],{"class":116},[23,145220],{"style":126393,"src":145221},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-295.png",[14,145223,145224],{},"一行中的内容在不同页面展示不同个数的效果代码写法如下：",[97,145226,145227],{"className":127284,"code":130641,"language":127286,"meta":25,"style":25},[103,145228,145229,145233,145247,145251],{"__ignoreMap":25},[106,145230,145231],{"class":108,"line":109},[106,145232,130648],{"class":175},[106,145234,145235,145237,145239,145241,145243,145245],{"class":108,"line":28},[106,145236,1027],{"class":116},[106,145238,51605],{"class":51294},[106,145240,53480],{"class":1955},[106,145242,162],{"class":116},[106,145244,130661],{"class":221},[106,145246,51301],{"class":116},[106,145248,145249],{"class":108,"line":1172},[106,145250,130668],{"class":116},[106,145252,145253,145255,145257],{"class":108,"line":1187},[106,145254,51779],{"class":116},[106,145256,51605],{"class":51294},[106,145258,51301],{"class":116},[60,145260,145261],{"start":1193},[63,145262,145263],{},[266,145264,145265],{},"列嵌套",[23,145267],{"style":126393,"src":145268},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-296.png",[14,145270,145271],{},"我们列嵌套最好加1个行row，这样可以取消父元素的padding值 而且高度自动和父级一样高，此时就是每个子盒子的padding值了",[14,145273,145274],{},"没加row内部这样：",[23,145276],{"style":126393,"src":145277},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-297.png",[14,145279,145280],{},"加上row之后内部为：",[23,145282],{"style":126393,"src":145283},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-298.png",[60,145285,145286],{"start":1207},[63,145287,145288],{},[266,145289,145290],{},"列偏移",[23,145292],{"style":126393,"src":145293},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-299.png",[14,145295,145296],{},"不要用margin，如果用这个的话会导致响应式失效，我们要的就是在不同界面上变化不同，但是比例相同，还有margin的值也不好确定，不能值卡死，所以不要用padding!!!",[14,145298,145299],{},"要加偏移量，即偏移份数",[14,145301,145302],{},"偏移的份数=12-两个盒子的份数",[60,145304,145305],{"start":1213},[63,145306,145307],{},[266,145308,145309],{},"列排序",[23,145311],{"style":126393,"src":145312},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-300.png",[14,145314,145315],{},"pull拉左；push推右",[60,145317,145318],{"start":1304},[63,145319,145320],{},[266,145321,145322],{},"响应式工具",[23,145324],{"style":126393,"src":145325},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-301.png",[14,145327,145328],{},"与之相反的，是visible-xs visible-sm visible-md visible-lg是显示页面的内容",[77,145330,145332],{"id":145331},"_2143-响应式小项目","21.4.3 响应式小项目",[14,145334,145335],{},"在使用无序列表时可以通过对ul进行，取消li前边的点不用非得在li上进行操作，要知道继承性，反正要对ul进行操作了，所以直接给ul写就行，可以避免代码的冗余",[14,145337,145338],{},"ul {",[14,145340,145341],{},"list-style: none;",[14,145343,145344],{},"margin:0;",[14,145346,145347],{},"padding:0; }",[23,145349],{"style":126393,"src":145350},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-302.png",[23,145352],{"style":126393,"src":145353},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-303.png",[14,145355,145356],{},"要灵活用好浮动！！！，样式优先去网站上找类名，然后直接复制，提高自己开发的效率，当屏幕缩放内容改变的时候不要忘记媒体查询",[14,145358,68883],{},[97,145360,145361],{"className":126537,"code":139207,"language":126539,"meta":25,"style":25},[103,145362,145363,145369,145379],{"__ignoreMap":25},[106,145364,145365,145367],{"class":108,"line":109},[106,145366,130385],{"class":1955},[106,145368,15565],{"class":116},[106,145370,145371,145373,145375,145377],{"class":108,"line":28},[106,145372,131017],{"class":165},[106,145374,51431],{"class":116},[106,145376,23729],{"class":165},[106,145378,1283],{"class":116},[106,145380,145381],{"class":108,"line":1172},[106,145382,1557],{"class":116},[14,145384,70447],{},[97,145386,145387],{"className":126537,"code":139207,"language":126539,"meta":25,"style":25},[103,145388,145389,145395,145405],{"__ignoreMap":25},[106,145390,145391,145393],{"class":108,"line":109},[106,145392,130385],{"class":1955},[106,145394,15565],{"class":116},[106,145396,145397,145399,145401,145403],{"class":108,"line":28},[106,145398,131017],{"class":165},[106,145400,51431],{"class":116},[106,145402,23729],{"class":165},[106,145404,1283],{"class":116},[106,145406,145407],{"class":108,"line":1172},[106,145408,1557],{"class":116},[48,145410,145412],{"id":145411},"_215-swiper-插件使用","21.5 swiper 插件使用",[1124,145414,145415,145418,145421],{},[63,145416,145417],{},"下载需要的css和js文件html页面中 引入相关文件",[63,145419,145420],{},"官网找到类似案例，复制html结构，css样式 js 语法",[63,145422,145423],{},"根据需求定制修改模块",[23,145425],{"style":126393,"src":145426},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-304.png",[14,145428,145429],{},"解压后将这两部分放到项目中",[23,145431],{"style":126393,"src":145432},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-305.png",[14,145434,145435],{},"这个插件可以帮助我们实现轮播图效果",[14,145437,145438],{},"用法：",[23,145440],{"style":126393,"src":145441},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-306.png",[14,145443,145444],{},"找到自己喜欢的",[23,145446],{"style":126393,"src":145447},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-307.png",[14,145449,145450],{},"右键，查看网页源代码",[23,145452],{"style":126393,"src":145453},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-308.png",[14,145455,145456],{},"复制人家的结构内容",[14,145458,145459],{},"然后去看API文档：",[23,145461],{"style":126393,"src":145462},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-309.png",[14,145464,145465],{},"可以看看如何修改样式",[14,145467,145468],{},"现成的轮播图效果，直接需要啥取啥就行，然后再稍微进行修改即可",[5119,145470,145471],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":25,"searchDepth":28,"depth":28,"links":145473},[145474,145479,145483,145488,145493],{"id":144274,"depth":28,"text":144275,"children":145475},[145476,145477,145478],{"id":144278,"depth":1172,"text":144279},{"id":144288,"depth":1172,"text":144289},{"id":144383,"depth":1172,"text":144384},{"id":144398,"depth":28,"text":144399,"children":145480},[145481,145482],{"id":144420,"depth":1172,"text":144421},{"id":144436,"depth":1172,"text":144437},{"id":144511,"depth":28,"text":144512,"children":145484},[145485,145486,145487],{"id":144524,"depth":1172,"text":144525},{"id":144748,"depth":1172,"text":144749},{"id":144755,"depth":1172,"text":144756},{"id":144896,"depth":28,"text":144897,"children":145489},[145490,145491,145492],{"id":144923,"depth":1172,"text":144924},{"id":144986,"depth":1172,"text":144987},{"id":145331,"depth":1172,"text":145332},{"id":145411,"depth":28,"text":145412},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch21",{"title":144266,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch21-移动端布局实战下篇","dcPQ5dNoub6Mo7yPfx2viTiSO8ON7T0MmDcFGjTm7xo",{"id":145500,"title":145501,"body":145502,"description":30,"extension":31,"meta":145722,"navigation":33,"path":145723,"seo":145724,"stem":145725,"__hash__":145726},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位.md","22. 代码提交与新型相对单位",{"type":7,"value":145503,"toc":145718},[145504,145507,145511,145514,145529,145534,145537,145542,145577,145582,145594,145599,145612,145617,145634,145639,145659,145664,145682,145685,145688,145691,145694,145698,145701,145704,145707,145710,145713,145716],[10,145505,145501],{"id":145506},"_22-代码提交与新型相对单位",[48,145508,145510],{"id":145509},"_221-网页提交码云国内版github可以理解为","22.1 网页提交码云（国内版github可以理解为）",[14,145512,145513],{},"法1：",[60,145515,145516,145523,145526],{},[63,145517,145518,145519],{},"登录网站注册：",[355,145520,145521],{"href":145521,"rel":145522},"https:\u002F\u002Fgitee.com\u002F",[23858],[63,145524,145525],{},"码云创建新的仓库",[63,145527,145528],{},"利用git 提交 把本地网站提交到 码云新建的仓库里面",[1124,145530,145531],{},[63,145532,145533],{},"在网站根目录右键-- Git Bash Here",[23,145535],{"style":126393,"src":145536},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-310.png",[1124,145538,145539],{},[63,145540,145541],{},"如果是第一次利用git提交，请配置好全局选项",[97,145543,145545],{"className":117281,"code":145544,"language":117283,"meta":25,"style":25},"git config --global user.name \"你的名字\"\ngit config --global user.email \"你的邮箱\"\n",[103,145546,145547,145563],{"__ignoreMap":25},[106,145548,145549,145552,145554,145557,145560],{"class":108,"line":109},[106,145550,145551],{"class":1955},"git",[106,145553,119704],{"class":221},[106,145555,145556],{"class":165}," --global",[106,145558,145559],{"class":221}," user.name",[106,145561,145562],{"class":221}," \"你的名字\"\n",[106,145564,145565,145567,145569,145571,145574],{"class":108,"line":28},[106,145566,145551],{"class":1955},[106,145568,119704],{"class":221},[106,145570,145556],{"class":165},[106,145572,145573],{"class":221}," user.email",[106,145575,145576],{"class":221}," \"你的邮箱\"\n",[1124,145578,145579],{},[63,145580,145581],{},"初始化仓库",[97,145583,145585],{"className":117281,"code":145584,"language":117283,"meta":25,"style":25},"git init\n",[103,145586,145587],{"__ignoreMap":25},[106,145588,145589,145591],{"class":108,"line":109},[106,145590,145551],{"class":1955},[106,145592,145593],{"class":221}," init\n",[1124,145595,145596],{},[63,145597,145598],{},"把本地文件放到暂存区",[97,145600,145602],{"className":117281,"code":145601,"language":117283,"meta":25,"style":25},"git add .\n",[103,145603,145604],{"__ignoreMap":25},[106,145605,145606,145608,145610],{"class":108,"line":109},[106,145607,145551],{"class":1955},[106,145609,5202],{"class":221},[106,145611,28735],{"class":221},[1124,145613,145614],{},[63,145615,145616],{},"把本地文件放到本地仓库里面",[97,145618,145620],{"className":117281,"code":145619,"language":117283,"meta":25,"style":25},"git commit -m \"first commit\"\n",[103,145621,145622],{"__ignoreMap":25},[106,145623,145624,145626,145629,145631],{"class":108,"line":109},[106,145625,145551],{"class":1955},[106,145627,145628],{"class":221}," commit",[106,145630,100867],{"class":165},[106,145632,145633],{"class":221}," \"first commit\"\n",[1124,145635,145636],{},[63,145637,145638],{},"链接远程仓库",[97,145640,145642],{"className":117281,"code":145641,"language":117283,"meta":25,"style":25},"git remote add origin https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[103,145643,145644],{"__ignoreMap":25},[106,145645,145646,145648,145651,145653,145656],{"class":108,"line":109},[106,145647,145551],{"class":1955},[106,145649,145650],{"class":221}," remote",[106,145652,5202],{"class":221},[106,145654,145655],{"class":221}," origin",[106,145657,145658],{"class":221}," https:\u002F\u002Fgitee.com\u002F你的用户名\u002F你的仓库.git\n",[1124,145660,145661],{},[63,145662,145663],{},"把本地仓库的文件推送到远程仓库 push",[97,145665,145667],{"className":117281,"code":145666,"language":117283,"meta":25,"style":25},"git push -u origin master\n",[103,145668,145669],{"__ignoreMap":25},[106,145670,145671,145673,145675,145677,145679],{"class":108,"line":109},[106,145672,145551],{"class":1955},[106,145674,29010],{"class":221},[106,145676,28284],{"class":165},[106,145678,145655],{"class":221},[106,145680,145681],{"class":221}," master\n",[23,145683],{"style":126393,"src":145684},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-311.png",[14,145686,145687],{},"上方方法暂未实现，后边学完git后在整",[14,145689,145690],{},"法2：也可以通过下方方式进行上传代码，这个在创建代码库的时候选择readme，然后进去这个页面后选择上传文件就可以了",[23,145692],{"style":126393,"src":145693},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-312.png",[48,145695,145697],{"id":145696},"_222-新型相对单位","22.2 新型相对单位",[23,145699],{"style":126393,"src":145700},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-313.png",[23,145702],{"style":126393,"src":145703},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-314.png",[14,145705,145706],{},"这里与rem的区别是为了方便计算，将窗口设置为100份",[14,145708,145709],{},"基本不用vh,手机的屏幕高度尺寸太大了，混用的话会可能导致撑破盒子，我们更关心的是屏幕宽度的变化，所以基本只用vw",[23,145711],{"style":126393,"src":145712},"\u002Fimages\u002Ffeishu\u002Fassets\u002F2024-10-10-Html和CSS学习-315.png",[14,145714,145715],{},"还有个单位vmin和vmax，是为了实现手机横屏显示的影响。vmin就是取手机视口宽高的最小值来算比例，vmax就是取的是视口宽高的最大值来算比例",[5119,145717,23951],{},{"title":25,"searchDepth":28,"depth":28,"links":145719},[145720,145721],{"id":145509,"depth":28,"text":145510},{"id":145696,"depth":28,"text":145697},{},"\u002Fwiki\u002F2024-10-10-htmlcss\u002Fch22",{"title":145501,"description":30},"wiki\u002F2024-10-10-Html和CSS学习\u002Fch22-代码提交与新型相对单位","BIsIqmwMkxYSF1NrxtVu3evm093xKcUzMC5FtpDkMLY",{"id":145728,"title":145729,"body":145730,"description":145734,"extension":31,"meta":145735,"navigation":33,"path":145736,"seo":145737,"stem":145738,"__hash__":145739},"wiki\u002Fwiki\u002F2024-10-10-Html和CSS学习\u002Findex.md","Html和CSS学习",{"type":7,"value":145731,"toc":145732},[],{"title":25,"searchDepth":28,"depth":28,"links":145733},[],"自己正经开始学编程的第一门语言！",{"category":92833},"\u002Fwiki\u002F2024-10-10-htmlcss",{"title":145729,"description":145734},"wiki\u002F2024-10-10-Html和CSS学习\u002Findex","ViZSWnRAqyl24AANwdRP-nrvSQaYwh0RLeDemyU8XvI",{"id":145741,"title":145742,"body":145743,"description":30,"extension":31,"meta":146890,"navigation":33,"path":146891,"seo":146892,"stem":146893,"__hash__":146894},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序.md","1. Python环境与第一个程序",{"type":7,"value":145744,"toc":146866},[145745,145748,145752,145755,145758,145783,145786,145792,145796,145799,145826,145829,145869,145872,145884,145887,145893,145897,145901,145928,145945,145952,145956,145959,145985,145988,145992,145995,146035,146038,146055,146061,146065,146070,146114,146117,146135,146138,146206,146210,146217,146220,146235,146238,146247,146250,146261,146264,146273,146276,146293,146296,146311,146315,146319,146322,146324,146344,146348,146351,146354,146365,146368,146374,146378,146384,146411,146414,146426,146429,146440,146443,146449,146453,146459,146509,146512,146554,146557,146590,146593,146627,146631,146634,146654,146657,146693,146696,146709,146713,146717,146723,146726,146739,146743,146746,146752,146755,146759,146762,146765,146814,146818,146834,146840,146847,146853,146863],[10,145746,145742],{"id":145747},"_1-python环境与第一个程序",[48,145749,145751],{"id":145750},"_11-什么是python","1.1 什么是Python",[14,145753,145754],{},"Python 是一种解释型、高级、通用编程语言。它的语法接近自然语言，适合做自动化脚本、数据处理、Web 后端、人工智能、爬虫、测试工具、运维工具和教学入门。",[14,145756,145757],{},"理解 Python 时抓住三个关键词：",[60,145759,145760,145763,145766],{},[63,145761,145762],{},"解释型：代码通常由解释器一行行执行，不需要像 C\u002FC++ 那样先手动编译出可执行文件。",[63,145764,145765],{},"动态类型：变量不用提前声明类型，运行时根据赋值对象确定类型。",[63,145767,145768,145769,329,145772,329,145775,329,145778,329,145780,28379],{},"标准库丰富：安装 Python 后自带很多模块，如 ",[103,145770,145771],{},"os",[103,145773,145774],{},"sys",[103,145776,145777],{},"json",[103,145779,57854],{},[103,145781,145782],{},"datetime",[14,145784,145785],{},"Python 程序的运行链路：",[97,145787,145790],{"className":145788,"code":145789,"language":5180,"meta":25},[5178],"编写 .py 文件 -> Python 解释器读取代码 -> 转换为字节码 -> 虚拟机执行 -> 输出结果\n",[103,145791,145789],{"__ignoreMap":25},[48,145793,145795],{"id":145794},"_12-python解释器","1.2 Python解释器",[14,145797,145798],{},"解释器就是运行 Python 代码的软件。终端中常用命令如下：",[97,145800,145802],{"className":23815,"code":145801,"language":23817,"meta":25,"style":25},"python --version\npython3 --version\npython\npython3\n",[103,145803,145804,145810,145816,145821],{"__ignoreMap":25},[106,145805,145806,145808],{"class":108,"line":109},[106,145807,30374],{"class":1955},[106,145809,26287],{"class":165},[106,145811,145812,145814],{"class":108,"line":28},[106,145813,100864],{"class":1955},[106,145815,26287],{"class":165},[106,145817,145818],{"class":108,"line":1172},[106,145819,145820],{"class":1955},"python\n",[106,145822,145823],{"class":108,"line":1187},[106,145824,145825],{"class":1955},"python3\n",[14,145827,145828],{},"进入交互模式后，可以直接输入表达式：",[97,145830,145832],{"className":30372,"code":145831,"language":30374,"meta":25,"style":25},">>> 1 + 2\n3\n>>> print(\"hello python\")\nhello python\n",[103,145833,145834,145845,145850,145864],{"__ignoreMap":25},[106,145835,145836,145839,145841,145843],{"class":108,"line":109},[106,145837,145838],{"class":112},">>>",[106,145840,25112],{"class":165},[106,145842,45560],{"class":112},[106,145844,47717],{"class":165},[106,145846,145847],{"class":108,"line":28},[106,145848,145849],{"class":165},"3\n",[106,145851,145852,145854,145857,145859,145862],{"class":108,"line":1172},[106,145853,145838],{"class":112},[106,145855,145856],{"class":165}," print",[106,145858,117],{"class":116},[106,145860,145861],{"class":221},"\"hello python\"",[106,145863,123],{"class":116},[106,145865,145866],{"class":108,"line":1187},[106,145867,145868],{"class":116},"hello python\n",[14,145870,145871],{},"退出交互模式：",[97,145873,145875],{"className":30372,"code":145874,"language":30374,"meta":25,"style":25},"exit()\n",[103,145876,145877],{"__ignoreMap":25},[106,145878,145879,145882],{"class":108,"line":109},[106,145880,145881],{"class":165},"exit",[106,145883,1968],{"class":116},[14,145885,145886],{},"或使用快捷键：",[97,145888,145891],{"className":145889,"code":145890,"language":5180,"meta":25},[5178],"Windows: Ctrl + Z 然后回车\nmacOS\u002FLinux: Ctrl + D\n",[103,145892,145890],{"__ignoreMap":25},[48,145894,145896],{"id":145895},"_13-安装python","1.3 安装Python",[77,145898,145900],{"id":145899},"_131-windows安装","1.3.1 Windows安装",[60,145902,145903,145910,145913,145919,145925],{},[63,145904,145905,145906],{},"打开 Python 官网：",[355,145907,145908],{"href":145908,"rel":145909},"https:\u002F\u002Fwww.python.org\u002Fdownloads\u002F",[23858],[63,145911,145912],{},"下载 Windows Installer。",[63,145914,145915,145916,28379],{},"安装时勾选 ",[103,145917,145918],{},"Add Python to PATH",[63,145920,145921,145922,28379],{},"点击 ",[103,145923,145924],{},"Install Now",[63,145926,145927],{},"安装完成后打开命令提示符验证：",[97,145929,145931],{"className":23815,"code":145930,"language":23817,"meta":25,"style":25},"python --version\npip --version\n",[103,145932,145933,145939],{"__ignoreMap":25},[106,145934,145935,145937],{"class":108,"line":109},[106,145936,30374],{"class":1955},[106,145938,26287],{"class":165},[106,145940,145941,145943],{"class":108,"line":28},[106,145942,23824],{"class":1955},[106,145944,26287],{"class":165},[14,145946,145947,145948,145951],{},"如果提示 ",[103,145949,145950],{},"python 不是内部或外部命令","，通常是 PATH 没配置好。可以重新安装并勾选 PATH，或在系统环境变量中加入 Python 安装目录。",[77,145953,145955],{"id":145954},"_132-macos安装","1.3.2 macOS安装",[14,145957,145958],{},"macOS 自带的 Python 版本可能不适合开发，建议安装新版：",[97,145960,145962],{"className":23815,"code":145961,"language":23817,"meta":25,"style":25},"brew install python\npython3 --version\npip3 --version\n",[103,145963,145964,145973,145979],{"__ignoreMap":25},[106,145965,145966,145969,145971],{"class":108,"line":109},[106,145967,145968],{"class":1955},"brew",[106,145970,23827],{"class":221},[106,145972,124303],{"class":221},[106,145974,145975,145977],{"class":108,"line":28},[106,145976,100864],{"class":1955},[106,145978,26287],{"class":165},[106,145980,145981,145983],{"class":108,"line":1172},[106,145982,119685],{"class":1955},[106,145984,26287],{"class":165},[14,145986,145987],{},"如果没有 Homebrew，可以直接从 Python 官网下载 macOS 安装包。",[77,145989,145991],{"id":145990},"_133-linux安装","1.3.3 Linux安装",[14,145993,145994],{},"Ubuntu\u002FDebian：",[97,145996,145998],{"className":23815,"code":145997,"language":23817,"meta":25,"style":25},"sudo apt update\nsudo apt install python3 python3-pip python3-venv\npython3 --version\npip3 --version\n",[103,145999,146000,146008,146023,146029],{"__ignoreMap":25},[106,146001,146002,146004,146006],{"class":108,"line":109},[106,146003,24570],{"class":1955},[106,146005,117302],{"class":221},[106,146007,26236],{"class":221},[106,146009,146010,146012,146014,146016,146018,146020],{"class":108,"line":28},[106,146011,24570],{"class":1955},[106,146013,117302],{"class":221},[106,146015,23827],{"class":221},[106,146017,104388],{"class":221},[106,146019,100783],{"class":221},[106,146021,146022],{"class":221}," python3-venv\n",[106,146024,146025,146027],{"class":108,"line":1172},[106,146026,100864],{"class":1955},[106,146028,26287],{"class":165},[106,146030,146031,146033],{"class":108,"line":1187},[106,146032,119685],{"class":1955},[106,146034,26287],{"class":165},[14,146036,146037],{},"Fedora：",[97,146039,146041],{"className":23815,"code":146040,"language":23817,"meta":25,"style":25},"sudo dnf install python3 python3-pip\n",[103,146042,146043],{"__ignoreMap":25},[106,146044,146045,146047,146049,146051,146053],{"class":108,"line":109},[106,146046,24570],{"class":1955},[106,146048,26309],{"class":221},[106,146050,23827],{"class":221},[106,146052,104388],{"class":221},[106,146054,119750],{"class":221},[14,146056,146057,146058,146060],{},"Linux 上通常使用 ",[103,146059,100864],{}," 命令，避免和系统旧版本 Python 冲突。",[48,146062,146064],{"id":146063},"_14-pip包管理器","1.4 pip包管理器",[14,146066,146067,146069],{},[103,146068,23824],{}," 用来安装第三方库。",[97,146071,146073],{"className":23815,"code":146072,"language":23817,"meta":25,"style":25},"pip install requests\npip uninstall requests\npip show requests\npip list\npip freeze\n",[103,146074,146075,146084,146093,146101,146107],{"__ignoreMap":25},[106,146076,146077,146079,146081],{"class":108,"line":109},[106,146078,23824],{"class":1955},[106,146080,23827],{"class":221},[106,146082,146083],{"class":221}," requests\n",[106,146085,146086,146088,146091],{"class":108,"line":28},[106,146087,23824],{"class":1955},[106,146089,146090],{"class":221}," uninstall",[106,146092,146083],{"class":221},[106,146094,146095,146097,146099],{"class":108,"line":1172},[106,146096,23824],{"class":1955},[106,146098,117559],{"class":221},[106,146100,146083],{"class":221},[106,146102,146103,146105],{"class":108,"line":1187},[106,146104,23824],{"class":1955},[106,146106,118940],{"class":221},[106,146108,146109,146111],{"class":108,"line":1193},[106,146110,23824],{"class":1955},[106,146112,146113],{"class":221}," freeze\n",[14,146115,146116],{},"国内网络较慢时可以临时使用镜像：",[97,146118,146120],{"className":23815,"code":146119,"language":23817,"meta":25,"style":25},"pip install requests -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n",[103,146121,146122],{"__ignoreMap":25},[106,146123,146124,146126,146128,146131,146133],{"class":108,"line":109},[106,146125,23824],{"class":1955},[106,146127,23827],{"class":221},[106,146129,146130],{"class":221}," requests",[106,146132,26424],{"class":165},[106,146134,119713],{"class":221},[14,146136,146137],{},"常见第三方库：",[254,146139,146140,146149],{},[257,146141,146142],{},[260,146143,146144,146147],{},[263,146145,146146],{},"库",[263,146148,102681],{},[301,146150,146151,146159,146166,146174,146182,146190,146198],{},[260,146152,146153,146156],{},[306,146154,146155],{},"requests",[306,146157,146158],{},"网络请求",[260,146160,146161,146163],{},[306,146162,100611],{},[306,146164,146165],{},"数值计算",[260,146167,146168,146171],{},[306,146169,146170],{},"pandas",[306,146172,146173],{},"表格数据处理",[260,146175,146176,146179],{},[306,146177,146178],{},"matplotlib",[306,146180,146181],{},"绘图",[260,146183,146184,146187],{},[306,146185,146186],{},"pyecharts",[306,146188,146189],{},"ECharts 图表",[260,146191,146192,146195],{},[306,146193,146194],{},"flask",[306,146196,146197],{},"Web 后端",[260,146199,146200,146203],{},[306,146201,146202],{},"pytest",[306,146204,146205],{},"自动化测试",[48,146207,146209],{"id":146208},"_15-虚拟环境","1.5 虚拟环境",[14,146211,146212,146213,146216],{},"虚拟环境用于隔离不同项目的依赖。一个项目需要 ",[103,146214,146215],{},"pyecharts==2.x","，另一个项目需要别的版本，直接全局安装容易冲突，所以建议每个项目创建自己的虚拟环境。",[14,146218,146219],{},"创建虚拟环境：",[97,146221,146223],{"className":23815,"code":146222,"language":23817,"meta":25,"style":25},"python -m venv .venv\n",[103,146224,146225],{"__ignoreMap":25},[106,146226,146227,146229,146231,146233],{"class":108,"line":109},[106,146228,30374],{"class":1955},[106,146230,100867],{"class":165},[106,146232,100870],{"class":221},[106,146234,100873],{"class":221},[14,146236,146237],{},"Windows 激活：",[97,146239,146241],{"className":23815,"code":146240,"language":23817,"meta":25,"style":25},".venv\\Scripts\\activate\n",[103,146242,146243],{"__ignoreMap":25},[106,146244,146245],{"class":108,"line":109},[106,146246,146240],{"class":1955},[14,146248,146249],{},"macOS\u002FLinux 激活：",[97,146251,146253],{"className":23815,"code":146252,"language":23817,"meta":25,"style":25},"source .venv\u002Fbin\u002Factivate\n",[103,146254,146255],{"__ignoreMap":25},[106,146256,146257,146259],{"class":108,"line":109},[106,146258,100878],{"class":165},[106,146260,100881],{"class":221},[14,146262,146263],{},"退出虚拟环境：",[97,146265,146267],{"className":23815,"code":146266,"language":23817,"meta":25,"style":25},"deactivate\n",[103,146268,146269],{"__ignoreMap":25},[106,146270,146271],{"class":108,"line":109},[106,146272,146266],{"class":1955},[14,146274,146275],{},"保存依赖：",[97,146277,146279],{"className":23815,"code":146278,"language":23817,"meta":25,"style":25},"pip freeze > requirements.txt\n",[103,146280,146281],{"__ignoreMap":25},[106,146282,146283,146285,146288,146290],{"class":108,"line":109},[106,146284,23824],{"class":1955},[106,146286,146287],{"class":221}," freeze",[106,146289,26216],{"class":112},[106,146291,146292],{"class":221}," requirements.txt\n",[14,146294,146295],{},"安装依赖：",[97,146297,146299],{"className":23815,"code":146298,"language":23817,"meta":25,"style":25},"pip install -r requirements.txt\n",[103,146300,146301],{"__ignoreMap":25},[106,146302,146303,146305,146307,146309],{"class":108,"line":109},[106,146304,23824],{"class":1955},[106,146306,23827],{"class":221},[106,146308,119624],{"class":165},[106,146310,146292],{"class":221},[48,146312,146314],{"id":146313},"_16-开发工具","1.6 开发工具",[77,146316,146318],{"id":146317},"_161-pycharm","1.6.1 PyCharm",[14,146320,146321],{},"PyCharm 适合新手，因为运行按钮、项目解释器、文件结构都比较直观。",[14,146323,122047],{},[60,146325,146326,146329,146332,146338,146341],{},[63,146327,146328],{},"New Project：创建项目。",[63,146330,146331],{},"Add Interpreter：选择 Python 解释器或虚拟环境。",[63,146333,146334,146335,125968],{},"New Python File：创建 ",[103,146336,146337],{},".py",[63,146339,146340],{},"Run：运行当前文件。",[63,146342,146343],{},"Debug：断点调试。",[77,146345,146347],{"id":146346},"_162-vs-code","1.6.2 VS Code",[14,146349,146350],{},"VS Code 轻量，适合后续多语言开发。",[14,146352,146353],{},"建议安装插件：",[60,146355,146356,146359,146362],{},[63,146357,146358],{},"Python。",[63,146360,146361],{},"Pylance。",[63,146363,146364],{},"Jupyter。",[14,146366,146367],{},"选择解释器：",[97,146369,146372],{"className":146370,"code":146371,"language":5180,"meta":25},[5178],"Ctrl + Shift + P -> Python: Select Interpreter\n",[103,146373,146371],{"__ignoreMap":25},[48,146375,146377],{"id":146376},"_17-第一个python程序","1.7 第一个Python程序",[14,146379,146380,146381,24612],{},"创建文件 ",[103,146382,146383],{},"hello.py",[97,146385,146387],{"className":30372,"code":146386,"language":30374,"meta":25,"style":25},"print(\"Hello World\")\nprint(\"你好，Python\")\n",[103,146388,146389,146400],{"__ignoreMap":25},[106,146390,146391,146393,146395,146398],{"class":108,"line":109},[106,146392,30409],{"class":165},[106,146394,117],{"class":116},[106,146396,146397],{"class":221},"\"Hello World\"",[106,146399,123],{"class":116},[106,146401,146402,146404,146406,146409],{"class":108,"line":28},[106,146403,30409],{"class":165},[106,146405,117],{"class":116},[106,146407,146408],{"class":221},"\"你好，Python\"",[106,146410,123],{"class":116},[14,146412,146413],{},"在终端运行：",[97,146415,146417],{"className":23815,"code":146416,"language":23817,"meta":25,"style":25},"python hello.py\n",[103,146418,146419],{"__ignoreMap":25},[106,146420,146421,146423],{"class":108,"line":109},[106,146422,30374],{"class":1955},[106,146424,146425],{"class":221}," hello.py\n",[14,146427,146428],{},"或：",[97,146430,146432],{"className":23815,"code":146431,"language":23817,"meta":25,"style":25},"python3 hello.py\n",[103,146433,146434],{"__ignoreMap":25},[106,146435,146436,146438],{"class":108,"line":109},[106,146437,100864],{"class":1955},[106,146439,146425],{"class":221},[14,146441,146442],{},"输出：",[97,146444,146447],{"className":146445,"code":146446,"language":5180,"meta":25},[5178],"Hello World\n你好，Python\n",[103,146448,146446],{"__ignoreMap":25},[48,146450,146452],{"id":146451},"_18-print函数","1.8 print函数",[14,146454,146455,146458],{},[103,146456,146457],{},"print()"," 用来输出内容。",[97,146460,146462],{"className":30372,"code":146461,"language":30374,"meta":25,"style":25},"print(\"hello\")\nprint(100)\nprint(3.14)\nprint(\"年龄:\", 18)\n",[103,146463,146464,146474,146484,146494],{"__ignoreMap":25},[106,146465,146466,146468,146470,146472],{"class":108,"line":109},[106,146467,30409],{"class":165},[106,146469,117],{"class":116},[106,146471,5837],{"class":221},[106,146473,123],{"class":116},[106,146475,146476,146478,146480,146482],{"class":108,"line":28},[106,146477,30409],{"class":165},[106,146479,117],{"class":116},[106,146481,428],{"class":165},[106,146483,123],{"class":116},[106,146485,146486,146488,146490,146492],{"class":108,"line":1172},[106,146487,30409],{"class":165},[106,146489,117],{"class":116},[106,146491,166],{"class":165},[106,146493,123],{"class":116},[106,146495,146496,146498,146500,146503,146505,146507],{"class":108,"line":1187},[106,146497,30409],{"class":165},[106,146499,117],{"class":116},[106,146501,146502],{"class":221},"\"年龄:\"",[106,146504,12428],{"class":116},[106,146506,767],{"class":165},[106,146508,123],{"class":116},[14,146510,146511],{},"多个内容用逗号隔开，默认中间加空格：",[97,146513,146515],{"className":30372,"code":146514,"language":30374,"meta":25,"style":25},"name = \"张三\"\nage = 18\nprint(\"姓名:\", name, \"年龄:\", age)\n",[103,146516,146517,146527,146537],{"__ignoreMap":25},[106,146518,146519,146522,146524],{"class":108,"line":109},[106,146520,146521],{"class":116},"name ",[106,146523,162],{"class":112},[106,146525,146526],{"class":221}," \"张三\"\n",[106,146528,146529,146532,146534],{"class":108,"line":28},[106,146530,146531],{"class":116},"age ",[106,146533,162],{"class":112},[106,146535,146536],{"class":165}," 18\n",[106,146538,146539,146541,146543,146546,146549,146551],{"class":108,"line":1172},[106,146540,30409],{"class":165},[106,146542,117],{"class":116},[106,146544,146545],{"class":221},"\"姓名:\"",[106,146547,146548],{"class":116},", name, ",[106,146550,146502],{"class":221},[106,146552,146553],{"class":116},", age)\n",[14,146555,146556],{},"修改分隔符：",[97,146558,146560],{"className":30372,"code":146559,"language":30374,"meta":25,"style":25},"print(\"2024\", \"10\", \"10\", sep=\"-\")\n",[103,146561,146562],{"__ignoreMap":25},[106,146563,146564,146566,146568,146571,146573,146575,146577,146579,146581,146584,146586,146588],{"class":108,"line":109},[106,146565,30409],{"class":165},[106,146567,117],{"class":116},[106,146569,146570],{"class":221},"\"2024\"",[106,146572,12428],{"class":116},[106,146574,54310],{"class":221},[106,146576,12428],{"class":116},[106,146578,54310],{"class":221},[106,146580,12428],{"class":116},[106,146582,146583],{"class":5209},"sep",[106,146585,162],{"class":112},[106,146587,32477],{"class":221},[106,146589,123],{"class":116},[14,146591,146592],{},"修改结尾符：",[97,146594,146596],{"className":30372,"code":146595,"language":30374,"meta":25,"style":25},"print(\"hello\", end=\" \")\nprint(\"python\")\n",[103,146597,146598,146616],{"__ignoreMap":25},[106,146599,146600,146602,146604,146606,146608,146610,146612,146614],{"class":108,"line":109},[106,146601,30409],{"class":165},[106,146603,117],{"class":116},[106,146605,5837],{"class":221},[106,146607,12428],{"class":116},[106,146609,45795],{"class":5209},[106,146611,162],{"class":112},[106,146613,4351],{"class":221},[106,146615,123],{"class":116},[106,146617,146618,146620,146622,146625],{"class":108,"line":28},[106,146619,30409],{"class":165},[106,146621,117],{"class":116},[106,146623,146624],{"class":221},"\"python\"",[106,146626,123],{"class":116},[48,146628,146630],{"id":146629},"_19-脚本运行和交互运行","1.9 脚本运行和交互运行",[14,146632,146633],{},"交互运行适合临时验证：",[97,146635,146637],{"className":30372,"code":146636,"language":30374,"meta":25,"style":25},">>> 10 * 3\n30\n",[103,146638,146639,146649],{"__ignoreMap":25},[106,146640,146641,146643,146645,146647],{"class":108,"line":109},[106,146642,145838],{"class":112},[106,146644,2030],{"class":165},[106,146646,6511],{"class":112},[106,146648,120021],{"class":165},[106,146650,146651],{"class":108,"line":28},[106,146652,146653],{"class":165},"30\n",[14,146655,146656],{},"脚本运行适合保存程序：",[97,146658,146660],{"className":30372,"code":146659,"language":30374,"meta":25,"style":25},"price = 8\ncount = 5\nprint(price * count)\n",[103,146661,146662,146672,146681],{"__ignoreMap":25},[106,146663,146664,146667,146669],{"class":108,"line":109},[106,146665,146666],{"class":116},"price ",[106,146668,162],{"class":112},[106,146670,146671],{"class":165}," 8\n",[106,146673,146674,146677,146679],{"class":108,"line":28},[106,146675,146676],{"class":116},"count ",[106,146678,162],{"class":112},[106,146680,54421],{"class":165},[106,146682,146683,146685,146688,146690],{"class":108,"line":1172},[106,146684,30409],{"class":165},[106,146686,146687],{"class":116},"(price ",[106,146689,572],{"class":112},[106,146691,146692],{"class":116}," count)\n",[14,146694,146695],{},"实际学习中推荐：",[60,146697,146698,146701,146706],{},[63,146699,146700],{},"临时试一个语法，用交互模式。",[63,146702,146703,146704,125968],{},"写完整练习，用 ",[103,146705,146337],{},[63,146707,146708],{},"写项目，用独立目录和虚拟环境。",[48,146710,146712],{"id":146711},"_110-常见错误","1.10 常见错误",[77,146714,146716],{"id":146715},"_1101-命令找不到","1.10.1 命令找不到",[97,146718,146721],{"className":146719,"code":146720,"language":5180,"meta":25},[5178],"python: command not found\n",[103,146722,146720],{"__ignoreMap":25},[14,146724,146725],{},"原因：",[60,146727,146728,146731,146734],{},[63,146729,146730],{},"没安装 Python。",[63,146732,146733],{},"PATH 没配置。",[63,146735,146736,146737,28379],{},"Linux\u002FmacOS 应该使用 ",[103,146738,100864],{},[77,146740,146742],{"id":146741},"_1102-文件名冲突","1.10.2 文件名冲突",[14,146744,146745],{},"不要把文件命名为：",[97,146747,146750],{"className":146748,"code":146749,"language":5180,"meta":25},[5178],"random.py\njson.py\ntime.py\nrequests.py\n",[103,146751,146749],{"__ignoreMap":25},[14,146753,146754],{},"这些名字可能和标准库或第三方库冲突，导致导入模块异常。",[77,146756,146758],{"id":146757},"_1103-中文乱码","1.10.3 中文乱码",[14,146760,146761],{},"Python 3 默认源文件编码是 UTF-8。仍然建议编辑器保存为 UTF-8。",[14,146763,146764],{},"如果读写文件出现乱码，要明确指定编码：",[97,146766,146768],{"className":30372,"code":146767,"language":30374,"meta":25,"style":25},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as f:\n    content = f.read()\n",[103,146769,146770,146804],{"__ignoreMap":25},[106,146771,146772,146774,146777,146779,146782,146784,146787,146789,146792,146794,146797,146799,146801],{"class":108,"line":109},[106,146773,107818],{"class":112},[106,146775,146776],{"class":165}," open",[106,146778,117],{"class":116},[106,146780,146781],{"class":221},"\"data.txt\"",[106,146783,12428],{"class":116},[106,146785,146786],{"class":221},"\"r\"",[106,146788,12428],{"class":116},[106,146790,146791],{"class":5209},"encoding",[106,146793,162],{"class":112},[106,146795,146796],{"class":221},"\"utf-8\"",[106,146798,13707],{"class":116},[106,146800,31377],{"class":112},[106,146802,146803],{"class":116}," f:\n",[106,146805,146806,146809,146811],{"class":108,"line":28},[106,146807,146808],{"class":116},"    content ",[106,146810,162],{"class":112},[106,146812,146813],{"class":116}," f.read()\n",[48,146815,146817],{"id":146816},"_111-本章练习","1.11 本章练习",[60,146819,146820,146823,146829],{},[63,146821,146822],{},"安装 Python，并在终端输出版本号。",[63,146824,146825,146826,146828],{},"新建 ",[103,146827,146383],{},"，输出自己的姓名、年龄、学习目标。",[63,146830,104351,146831,146833],{},[103,146832,146457],{}," 输出下面格式：",[97,146835,146838],{"className":146836,"code":146837,"language":5180,"meta":25},[5178],"姓名: 小明\n年龄: 18\n目标: 学会Python\n",[103,146839,146837],{"__ignoreMap":25},[60,146841,146842],{"start":1187},[63,146843,104351,146844,146846],{},[103,146845,146583],{}," 输出日期：",[97,146848,146851],{"className":146849,"code":146850,"language":5180,"meta":25},[5178],"2024-10-10\n",[103,146852,146850],{"__ignoreMap":25},[60,146854,146855],{"start":1193},[63,146856,104351,146857,146859,146860,146862],{},[103,146858,45795],{}," 让两次 ",[103,146861,146457],{}," 输出在同一行。",[5119,146864,146865],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":28,"depth":28,"links":146867},[146868,146869,146870,146875,146876,146877,146881,146882,146883,146884,146889],{"id":145750,"depth":28,"text":145751},{"id":145794,"depth":28,"text":145795},{"id":145895,"depth":28,"text":145896,"children":146871},[146872,146873,146874],{"id":145899,"depth":1172,"text":145900},{"id":145954,"depth":1172,"text":145955},{"id":145990,"depth":1172,"text":145991},{"id":146063,"depth":28,"text":146064},{"id":146208,"depth":28,"text":146209},{"id":146313,"depth":28,"text":146314,"children":146878},[146879,146880],{"id":146317,"depth":1172,"text":146318},{"id":146346,"depth":1172,"text":146347},{"id":146376,"depth":28,"text":146377},{"id":146451,"depth":28,"text":146452},{"id":146629,"depth":28,"text":146630},{"id":146711,"depth":28,"text":146712,"children":146885},[146886,146887,146888],{"id":146715,"depth":1172,"text":146716},{"id":146741,"depth":1172,"text":146742},{"id":146757,"depth":1172,"text":146758},{"id":146816,"depth":28,"text":146817},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch1-python",{"title":145742,"description":30},"wiki\u002F2024-10-10-python教程\u002Fch1-Python环境与第一个程序","48XQBvj-lv6PiPUmONIPH9uzA2A9QouK3fZD6RTbf9U",{"id":146896,"title":146897,"body":146898,"description":30,"extension":31,"meta":149302,"navigation":33,"path":149303,"seo":149304,"stem":149305,"__hash__":149306},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图.md","10. JSON与pyecharts折线图",{"type":7,"value":146899,"toc":149287},[146900,146903,146907,146910,146913,146930,146933,146975,146978,146982,146985,146988,147025,147028,147062,147065,147157,147161,147175,147178,147205,147208,147212,147315,147322,147325,147342,147346,147353,147542,147545,147618,147622,147625,147709,147712,147744,147748,147952,147955,147959,147965,148067,148070,148326,148330,148333,148336,148350,148352,148538,148542,148904,148910,148914,148917,149041,149044,149223,149226,149230,149263,149267,149284],[10,146901,146897],{"id":146902},"_10-json与pyecharts折线图",[48,146904,146906],{"id":146905},"_101-数据可视化","10.1 数据可视化",[14,146908,146909],{},"数据可视化就是把数据转换成图表，让趋势、对比和异常更容易观察。",[14,146911,146912],{},"常见图表：",[60,146914,146915,146918,146921,146924,146927],{},[63,146916,146917],{},"折线图：看趋势。",[63,146919,146920],{},"柱状图：看分类对比。",[63,146922,146923],{},"饼图：看占比。",[63,146925,146926],{},"地图：看地域分布。",[63,146928,146929],{},"散点图：看两个变量之间的关系。",[14,146931,146932],{},"Python 可视化常用库：",[254,146934,146935,146943],{},[257,146936,146937],{},[260,146938,146939,146941],{},[263,146940,146146],{},[263,146942,23733],{},[301,146944,146945,146952,146960,146967],{},[260,146946,146947,146949],{},[306,146948,146178],{},[306,146950,146951],{},"基础、经典、可定制",[260,146953,146954,146957],{},[306,146955,146956],{},"seaborn",[306,146958,146959],{},"统计图表更美观",[260,146961,146962,146964],{},[306,146963,146186],{},[306,146965,146966],{},"生成交互式网页图表",[260,146968,146969,146972],{},[306,146970,146971],{},"plotly",[306,146973,146974],{},"交互图表能力强",[14,146976,146977],{},"黑马入门课程常用 pyecharts 做可视化案例，因为它能快速生成漂亮的 HTML 图表。",[48,146979,146981],{"id":146980},"_102-json回顾","10.2 JSON回顾",[14,146983,146984],{},"JSON 是一种文本格式，常用于接口数据、配置文件和可视化数据。",[14,146986,146987],{},"Python 字典：",[97,146989,146991],{"className":30372,"code":146990,"language":30374,"meta":25,"style":25},"data = {\n    \"name\": \"北京\",\n    \"value\": 100\n}\n",[103,146992,146993,147001,147012,147021],{"__ignoreMap":25},[106,146994,146995,146997,146999],{"class":108,"line":109},[106,146996,101643],{"class":116},[106,146998,162],{"class":112},[106,147000,15565],{"class":116},[106,147002,147003,147006,147008,147010],{"class":108,"line":28},[106,147004,147005],{"class":221},"    \"name\"",[106,147007,51431],{"class":116},[106,147009,69263],{"class":221},[106,147011,31460],{"class":116},[106,147013,147014,147017,147019],{"class":108,"line":1172},[106,147015,147016],{"class":221},"    \"value\"",[106,147018,51431],{"class":116},[106,147020,97443],{"class":165},[106,147022,147023],{"class":108,"line":1187},[106,147024,1557],{"class":116},[14,147026,147027],{},"JSON 字符串：",[97,147029,147032],{"className":147030,"code":147031,"language":145777,"meta":25,"style":25},"language-json shiki shiki-themes github-light github-dark","{\n  \"name\": \"北京\",\n  \"value\": 100\n}\n",[103,147033,147034,147038,147049,147058],{"__ignoreMap":25},[106,147035,147036],{"class":108,"line":109},[106,147037,1538],{"class":116},[106,147039,147040,147043,147045,147047],{"class":108,"line":28},[106,147041,147042],{"class":165},"  \"name\"",[106,147044,51431],{"class":116},[106,147046,69263],{"class":221},[106,147048,31460],{"class":116},[106,147050,147051,147054,147056],{"class":108,"line":1172},[106,147052,147053],{"class":165},"  \"value\"",[106,147055,51431],{"class":116},[106,147057,97443],{"class":165},[106,147059,147060],{"class":108,"line":1187},[106,147061,1557],{"class":116},[14,147063,147064],{},"Python 与 JSON 的转换：",[97,147066,147068],{"className":30372,"code":147067,"language":30374,"meta":25,"style":25},"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",[103,147069,147070,147077,147081,147106,147110,147129,147136,147140,147150],{"__ignoreMap":25},[106,147071,147072,147074],{"class":108,"line":109},[106,147073,30386],{"class":112},[106,147075,147076],{"class":116}," json\n",[106,147078,147079],{"class":108,"line":28},[106,147080,2392],{"emptyLinePlaceholder":33},[106,147082,147083,147085,147087,147089,147091,147093,147095,147097,147100,147102,147104],{"class":108,"line":1172},[106,147084,101643],{"class":116},[106,147086,162],{"class":112},[106,147088,4440],{"class":116},[106,147090,62673],{"class":221},[106,147092,51431],{"class":116},[106,147094,69263],{"class":221},[106,147096,12428],{"class":116},[106,147098,147099],{"class":221},"\"value\"",[106,147101,51431],{"class":116},[106,147103,428],{"class":165},[106,147105,1557],{"class":116},[106,147107,147108],{"class":108,"line":1187},[106,147109,2392],{"emptyLinePlaceholder":33},[106,147111,147112,147115,147117,147120,147123,147125,147127],{"class":108,"line":1193},[106,147113,147114],{"class":116},"json_text ",[106,147116,162],{"class":112},[106,147118,147119],{"class":116}," json.dumps(data, ",[106,147121,147122],{"class":5209},"ensure_ascii",[106,147124,162],{"class":112},[106,147126,33981],{"class":165},[106,147128,123],{"class":116},[106,147130,147131,147133],{"class":108,"line":1207},[106,147132,30409],{"class":165},[106,147134,147135],{"class":116},"(json_text)\n",[106,147137,147138],{"class":108,"line":1213},[106,147139,2392],{"emptyLinePlaceholder":33},[106,147141,147142,147145,147147],{"class":108,"line":1304},[106,147143,147144],{"class":116},"new_data ",[106,147146,162],{"class":112},[106,147148,147149],{"class":116}," json.loads(json_text)\n",[106,147151,147152,147154],{"class":108,"line":1310},[106,147153,30409],{"class":165},[106,147155,147156],{"class":116},"(new_data)\n",[48,147158,147160],{"id":147159},"_103-安装pyecharts","10.3 安装pyecharts",[97,147162,147164],{"className":23815,"code":147163,"language":23817,"meta":25,"style":25},"pip install pyecharts\n",[103,147165,147166],{"__ignoreMap":25},[106,147167,147168,147170,147172],{"class":108,"line":109},[106,147169,23824],{"class":1955},[106,147171,23827],{"class":221},[106,147173,147174],{"class":221}," pyecharts\n",[14,147176,147177],{},"验证：",[97,147179,147181],{"className":30372,"code":147180,"language":30374,"meta":25,"style":25},"import pyecharts\n\nprint(pyecharts.__version__)\n",[103,147182,147183,147189,147193],{"__ignoreMap":25},[106,147184,147185,147187],{"class":108,"line":109},[106,147186,30386],{"class":112},[106,147188,147174],{"class":116},[106,147190,147191],{"class":108,"line":28},[106,147192,2392],{"emptyLinePlaceholder":33},[106,147194,147195,147197,147200,147203],{"class":108,"line":1172},[106,147196,30409],{"class":165},[106,147198,147199],{"class":116},"(pyecharts.",[106,147201,147202],{"class":165},"__version__",[106,147204,123],{"class":116},[14,147206,147207],{},"如果使用虚拟环境，要先激活环境再安装。",[48,147209,147211],{"id":147210},"_104-第一个折线图","10.4 第一个折线图",[97,147213,147215],{"className":30372,"code":147214,"language":30374,"meta":25,"style":25},"from pyecharts.charts import Line\n\nline = Line()\nline.add_xaxis([\"周一\", \"周二\", \"周三\", \"周四\", \"周五\"])\nline.add_yaxis(\"销售额\", [100, 120, 90, 150, 180])\nline.render(\"line.html\")\n",[103,147216,147217,147229,147233,147243,147273,147305],{"__ignoreMap":25},[106,147218,147219,147221,147224,147226],{"class":108,"line":109},[106,147220,30731],{"class":112},[106,147222,147223],{"class":116}," pyecharts.charts ",[106,147225,30386],{"class":112},[106,147227,147228],{"class":116}," Line\n",[106,147230,147231],{"class":108,"line":28},[106,147232,2392],{"emptyLinePlaceholder":33},[106,147234,147235,147238,147240],{"class":108,"line":1172},[106,147236,147237],{"class":116},"line ",[106,147239,162],{"class":112},[106,147241,147242],{"class":116}," Line()\n",[106,147244,147245,147248,147251,147253,147256,147258,147261,147263,147266,147268,147271],{"class":108,"line":1187},[106,147246,147247],{"class":116},"line.add_xaxis([",[106,147249,147250],{"class":221},"\"周一\"",[106,147252,12428],{"class":116},[106,147254,147255],{"class":221},"\"周二\"",[106,147257,12428],{"class":116},[106,147259,147260],{"class":221},"\"周三\"",[106,147262,12428],{"class":116},[106,147264,147265],{"class":221},"\"周四\"",[106,147267,12428],{"class":116},[106,147269,147270],{"class":221},"\"周五\"",[106,147272,4649],{"class":116},[106,147274,147275,147278,147281,147283,147285,147287,147289,147291,147293,147295,147298,147300,147303],{"class":108,"line":1193},[106,147276,147277],{"class":116},"line.add_yaxis(",[106,147279,147280],{"class":221},"\"销售额\"",[106,147282,77512],{"class":116},[106,147284,428],{"class":165},[106,147286,12428],{"class":116},[106,147288,934],{"class":165},[106,147290,12428],{"class":116},[106,147292,979],{"class":165},[106,147294,12428],{"class":116},[106,147296,147297],{"class":165},"150",[106,147299,12428],{"class":116},[106,147301,147302],{"class":165},"180",[106,147304,4649],{"class":116},[106,147306,147307,147310,147313],{"class":108,"line":1207},[106,147308,147309],{"class":116},"line.render(",[106,147311,147312],{"class":221},"\"line.html\"",[106,147314,123],{"class":116},[14,147316,147317,147318,147321],{},"运行后会生成 ",[103,147319,147320],{},"line.html","，用浏览器打开即可看到图表。",[14,147323,147324],{},"核心步骤：",[60,147326,147327,147330,147333,147336,147339],{},[63,147328,147329],{},"导入图表类。",[63,147331,147332],{},"创建图表对象。",[63,147334,147335],{},"添加 x 轴数据。",[63,147337,147338],{},"添加 y 轴数据。",[63,147340,147341],{},"渲染为 HTML。",[48,147343,147345],{"id":147344},"_105-全局配置","10.5 全局配置",[14,147347,147348,147349,147352],{},"常用配置在 ",[103,147350,147351],{},"pyecharts.options"," 中。",[97,147354,147356],{"className":30372,"code":147355,"language":30374,"meta":25,"style":25},"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",[103,147357,147358,147375,147385,147389,147397,147421,147449,147454,147473,147492,147510,147530,147534],{"__ignoreMap":25},[106,147359,147360,147362,147365,147367,147370,147372],{"class":108,"line":109},[106,147361,30731],{"class":112},[106,147363,147364],{"class":116}," pyecharts ",[106,147366,30386],{"class":112},[106,147368,147369],{"class":116}," options ",[106,147371,31377],{"class":112},[106,147373,147374],{"class":116}," opts\n",[106,147376,147377,147379,147381,147383],{"class":108,"line":28},[106,147378,30731],{"class":112},[106,147380,147223],{"class":116},[106,147382,30386],{"class":112},[106,147384,147228],{"class":116},[106,147386,147387],{"class":108,"line":1172},[106,147388,2392],{"emptyLinePlaceholder":33},[106,147390,147391,147393,147395],{"class":108,"line":1187},[106,147392,147237],{"class":116},[106,147394,162],{"class":112},[106,147396,147242],{"class":116},[106,147398,147399,147401,147403,147405,147407,147409,147411,147413,147415,147417,147419],{"class":108,"line":1193},[106,147400,147247],{"class":116},[106,147402,147250],{"class":221},[106,147404,12428],{"class":116},[106,147406,147255],{"class":221},[106,147408,12428],{"class":116},[106,147410,147260],{"class":221},[106,147412,12428],{"class":116},[106,147414,147265],{"class":221},[106,147416,12428],{"class":116},[106,147418,147270],{"class":221},[106,147420,4649],{"class":116},[106,147422,147423,147425,147427,147429,147431,147433,147435,147437,147439,147441,147443,147445,147447],{"class":108,"line":1207},[106,147424,147277],{"class":116},[106,147426,147280],{"class":221},[106,147428,77512],{"class":116},[106,147430,428],{"class":165},[106,147432,12428],{"class":116},[106,147434,934],{"class":165},[106,147436,12428],{"class":116},[106,147438,979],{"class":165},[106,147440,12428],{"class":116},[106,147442,147297],{"class":165},[106,147444,12428],{"class":116},[106,147446,147302],{"class":165},[106,147448,4649],{"class":116},[106,147450,147451],{"class":108,"line":1213},[106,147452,147453],{"class":116},"line.set_global_opts(\n",[106,147455,147456,147459,147461,147464,147466,147468,147471],{"class":108,"line":1304},[106,147457,147458],{"class":5209},"    title_opts",[106,147460,162],{"class":112},[106,147462,147463],{"class":116},"opts.TitleOpts(",[106,147465,51401],{"class":5209},[106,147467,162],{"class":112},[106,147469,147470],{"class":221},"\"一周销售额\"",[106,147472,38041],{"class":116},[106,147474,147475,147478,147480,147483,147485,147487,147490],{"class":108,"line":1310},[106,147476,147477],{"class":5209},"    xaxis_opts",[106,147479,162],{"class":112},[106,147481,147482],{"class":116},"opts.AxisOpts(",[106,147484,79804],{"class":5209},[106,147486,162],{"class":112},[106,147488,147489],{"class":221},"\"日期\"",[106,147491,38041],{"class":116},[106,147493,147494,147497,147499,147501,147503,147505,147508],{"class":108,"line":1322},[106,147495,147496],{"class":5209},"    yaxis_opts",[106,147498,162],{"class":112},[106,147500,147482],{"class":116},[106,147502,79804],{"class":5209},[106,147504,162],{"class":112},[106,147506,147507],{"class":221},"\"金额\"",[106,147509,38041],{"class":116},[106,147511,147512,147515,147517,147520,147523,147525,147528],{"class":108,"line":1604},[106,147513,147514],{"class":5209},"    tooltip_opts",[106,147516,162],{"class":112},[106,147518,147519],{"class":116},"opts.TooltipOpts(",[106,147521,147522],{"class":5209},"trigger",[106,147524,162],{"class":112},[106,147526,147527],{"class":221},"\"axis\"",[106,147529,38041],{"class":116},[106,147531,147532],{"class":108,"line":1609},[106,147533,123],{"class":116},[106,147535,147536,147538,147540],{"class":108,"line":1615},[106,147537,147309],{"class":116},[106,147539,147312],{"class":221},[106,147541,123],{"class":116},[14,147543,147544],{},"常见全局配置：",[254,147546,147547,147556],{},[257,147548,147549],{},[260,147550,147551,147554],{},[263,147552,147553],{},"配置",[263,147555,102681],{},[301,147557,147558,147568,147578,147588,147598,147608],{},[260,147559,147560,147565],{},[306,147561,147562],{},[103,147563,147564],{},"TitleOpts",[306,147566,147567],{},"标题",[260,147569,147570,147575],{},[306,147571,147572],{},[103,147573,147574],{},"LegendOpts",[306,147576,147577],{},"图例",[260,147579,147580,147585],{},[306,147581,147582],{},[103,147583,147584],{},"TooltipOpts",[306,147586,147587],{},"提示框",[260,147589,147590,147595],{},[306,147591,147592],{},[103,147593,147594],{},"AxisOpts",[306,147596,147597],{},"坐标轴",[260,147599,147600,147605],{},[306,147601,147602],{},[103,147603,147604],{},"VisualMapOpts",[306,147606,147607],{},"视觉映射",[260,147609,147610,147615],{},[306,147611,147612],{},[103,147613,147614],{},"DataZoomOpts",[306,147616,147617],{},"区域缩放",[48,147619,147621],{"id":147620},"_106-系列配置","10.6 系列配置",[14,147623,147624],{},"系列配置作用于某一组数据。",[97,147626,147628],{"className":30372,"code":147627,"language":30374,"meta":25,"style":25},"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",[103,147629,147630,147635,147646,147675,147686,147705],{"__ignoreMap":25},[106,147631,147632],{"class":108,"line":109},[106,147633,147634],{"class":116},"line.add_yaxis(\n",[106,147636,147637,147640,147642,147644],{"class":108,"line":28},[106,147638,147639],{"class":5209},"    series_name",[106,147641,162],{"class":112},[106,147643,147280],{"class":221},[106,147645,31460],{"class":116},[106,147647,147648,147651,147653,147655,147657,147659,147661,147663,147665,147667,147669,147671,147673],{"class":108,"line":1172},[106,147649,147650],{"class":5209},"    y_axis",[106,147652,162],{"class":112},[106,147654,1007],{"class":116},[106,147656,428],{"class":165},[106,147658,12428],{"class":116},[106,147660,934],{"class":165},[106,147662,12428],{"class":116},[106,147664,979],{"class":165},[106,147666,12428],{"class":116},[106,147668,147297],{"class":165},[106,147670,12428],{"class":116},[106,147672,147302],{"class":165},[106,147674,87830],{"class":116},[106,147676,147677,147680,147682,147684],{"class":108,"line":1187},[106,147678,147679],{"class":5209},"    is_smooth",[106,147681,162],{"class":112},[106,147683,31470],{"class":165},[106,147685,31460],{"class":116},[106,147687,147688,147691,147693,147696,147699,147701,147703],{"class":108,"line":1193},[106,147689,147690],{"class":5209},"    label_opts",[106,147692,162],{"class":112},[106,147694,147695],{"class":116},"opts.LabelOpts(",[106,147697,147698],{"class":5209},"is_show",[106,147700,162],{"class":112},[106,147702,31470],{"class":165},[106,147704,38041],{"class":116},[106,147706,147707],{"class":108,"line":1207},[106,147708,123],{"class":116},[14,147710,147711],{},"常用参数：",[60,147713,147714,147720,147726,147732,147738],{},[63,147715,147716,147719],{},[103,147717,147718],{},"series_name","：系列名称。",[63,147721,147722,147725],{},[103,147723,147724],{},"y_axis","：y 轴数据。",[63,147727,147728,147731],{},[103,147729,147730],{},"is_smooth","：是否平滑曲线。",[63,147733,147734,147737],{},[103,147735,147736],{},"label_opts","：标签配置。",[63,147739,147740,147743],{},[103,147741,147742],{},"symbol_size","：标记点大小。",[48,147745,147747],{"id":147746},"_107-多条折线","10.7 多条折线",[97,147749,147751],{"className":30372,"code":147750,"language":30374,"meta":25,"style":25},"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",[103,147752,147753,147767,147777,147781,147810,147814,147822,147827,147865,147902,147906,147923,147939,147943],{"__ignoreMap":25},[106,147754,147755,147757,147759,147761,147763,147765],{"class":108,"line":109},[106,147756,30731],{"class":112},[106,147758,147364],{"class":116},[106,147760,30386],{"class":112},[106,147762,147369],{"class":116},[106,147764,31377],{"class":112},[106,147766,147374],{"class":116},[106,147768,147769,147771,147773,147775],{"class":108,"line":28},[106,147770,30731],{"class":112},[106,147772,147223],{"class":116},[106,147774,30386],{"class":112},[106,147776,147228],{"class":116},[106,147778,147779],{"class":108,"line":1172},[106,147780,2392],{"emptyLinePlaceholder":33},[106,147782,147783,147786,147788,147790,147792,147794,147796,147798,147800,147802,147804,147806,147808],{"class":108,"line":1187},[106,147784,147785],{"class":116},"dates ",[106,147787,162],{"class":112},[106,147789,52220],{"class":116},[106,147791,147250],{"class":221},[106,147793,12428],{"class":116},[106,147795,147255],{"class":221},[106,147797,12428],{"class":116},[106,147799,147260],{"class":221},[106,147801,12428],{"class":116},[106,147803,147265],{"class":221},[106,147805,12428],{"class":116},[106,147807,147270],{"class":221},[106,147809,33240],{"class":116},[106,147811,147812],{"class":108,"line":1193},[106,147813,2392],{"emptyLinePlaceholder":33},[106,147815,147816,147818,147820],{"class":108,"line":1207},[106,147817,147237],{"class":116},[106,147819,162],{"class":112},[106,147821,147242],{"class":116},[106,147823,147824],{"class":108,"line":1213},[106,147825,147826],{"class":116},"line.add_xaxis(dates)\n",[106,147828,147829,147831,147834,147836,147838,147840,147843,147845,147847,147849,147851,147853,147855,147857,147859,147861,147863],{"class":108,"line":1304},[106,147830,147277],{"class":116},[106,147832,147833],{"class":221},"\"线上销售\"",[106,147835,77512],{"class":116},[106,147837,428],{"class":165},[106,147839,12428],{"class":116},[106,147841,147842],{"class":165},"130",[106,147844,12428],{"class":116},[106,147846,934],{"class":165},[106,147848,12428],{"class":116},[106,147850,21041],{"class":165},[106,147852,12428],{"class":116},[106,147854,1714],{"class":165},[106,147856,112187],{"class":116},[106,147858,147730],{"class":5209},[106,147860,162],{"class":112},[106,147862,31470],{"class":165},[106,147864,123],{"class":116},[106,147866,147867,147869,147872,147874,147876,147878,147880,147882,147884,147886,147888,147890,147892,147894,147896,147898,147900],{"class":108,"line":1310},[106,147868,147277],{"class":116},[106,147870,147871],{"class":221},"\"线下销售\"",[106,147873,77512],{"class":116},[106,147875,729],{"class":165},[106,147877,12428],{"class":116},[106,147879,979],{"class":165},[106,147881,12428],{"class":116},[106,147883,428],{"class":165},[106,147885,12428],{"class":116},[106,147887,934],{"class":165},[106,147889,12428],{"class":116},[106,147891,147297],{"class":165},[106,147893,112187],{"class":116},[106,147895,147730],{"class":5209},[106,147897,162],{"class":112},[106,147899,31470],{"class":165},[106,147901,123],{"class":116},[106,147903,147904],{"class":108,"line":1322},[106,147905,147453],{"class":116},[106,147907,147908,147910,147912,147914,147916,147918,147921],{"class":108,"line":1604},[106,147909,147458],{"class":5209},[106,147911,162],{"class":112},[106,147913,147463],{"class":116},[106,147915,51401],{"class":5209},[106,147917,162],{"class":112},[106,147919,147920],{"class":221},"\"线上线下销售趋势\"",[106,147922,38041],{"class":116},[106,147924,147925,147927,147929,147931,147933,147935,147937],{"class":108,"line":1609},[106,147926,147514],{"class":5209},[106,147928,162],{"class":112},[106,147930,147519],{"class":116},[106,147932,147522],{"class":5209},[106,147934,162],{"class":112},[106,147936,147527],{"class":221},[106,147938,38041],{"class":116},[106,147940,147941],{"class":108,"line":1615},[106,147942,123],{"class":116},[106,147944,147945,147947,147950],{"class":108,"line":1620},[106,147946,147309],{"class":116},[106,147948,147949],{"class":221},"\"sales.html\"",[106,147951,123],{"class":116},[14,147953,147954],{},"多条折线适合比较不同指标或不同地区。",[48,147956,147958],{"id":147957},"_108-从json文件读取数据","10.8 从JSON文件读取数据",[14,147960,147961,147962,24612],{},"假设 ",[103,147963,147964],{},"sales.json",[97,147966,147968],{"className":147030,"code":147967,"language":145777,"meta":25,"style":25},"[\n  {\"date\": \"周一\", \"online\": 100, \"offline\": 80},\n  {\"date\": \"周二\", \"online\": 130, \"offline\": 90},\n  {\"date\": \"周三\", \"online\": 120, \"offline\": 100}\n]\n",[103,147969,147970,147975,148007,148035,148063],{"__ignoreMap":25},[106,147971,147972],{"class":108,"line":109},[106,147973,147974],{"class":116},"[\n",[106,147976,147977,147980,147983,147985,147987,147989,147992,147994,147996,147998,148001,148003,148005],{"class":108,"line":28},[106,147978,147979],{"class":116},"  {",[106,147981,147982],{"class":165},"\"date\"",[106,147984,51431],{"class":116},[106,147986,147250],{"class":221},[106,147988,12428],{"class":116},[106,147990,147991],{"class":165},"\"online\"",[106,147993,51431],{"class":116},[106,147995,428],{"class":165},[106,147997,12428],{"class":116},[106,147999,148000],{"class":165},"\"offline\"",[106,148002,51431],{"class":116},[106,148004,729],{"class":165},[106,148006,4922],{"class":116},[106,148008,148009,148011,148013,148015,148017,148019,148021,148023,148025,148027,148029,148031,148033],{"class":108,"line":1172},[106,148010,147979],{"class":116},[106,148012,147982],{"class":165},[106,148014,51431],{"class":116},[106,148016,147255],{"class":221},[106,148018,12428],{"class":116},[106,148020,147991],{"class":165},[106,148022,51431],{"class":116},[106,148024,147842],{"class":165},[106,148026,12428],{"class":116},[106,148028,148000],{"class":165},[106,148030,51431],{"class":116},[106,148032,979],{"class":165},[106,148034,4922],{"class":116},[106,148036,148037,148039,148041,148043,148045,148047,148049,148051,148053,148055,148057,148059,148061],{"class":108,"line":1187},[106,148038,147979],{"class":116},[106,148040,147982],{"class":165},[106,148042,51431],{"class":116},[106,148044,147260],{"class":221},[106,148046,12428],{"class":116},[106,148048,147991],{"class":165},[106,148050,51431],{"class":116},[106,148052,934],{"class":165},[106,148054,12428],{"class":116},[106,148056,148000],{"class":165},[106,148058,51431],{"class":116},[106,148060,428],{"class":165},[106,148062,1557],{"class":116},[106,148064,148065],{"class":108,"line":1193},[106,148066,33240],{"class":116},[14,148068,148069],{},"读取并绘图：",[97,148071,148073],{"className":30372,"code":148072,"language":30374,"meta":25,"style":25},"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",[103,148074,148075,148081,148095,148105,148109,148141,148154,148158,148166,148175,148184,148188,148200,148209,148218,148227,148231,148239,148243,148260,148277,148281,148298,148314,148318],{"__ignoreMap":25},[106,148076,148077,148079],{"class":108,"line":109},[106,148078,30386],{"class":112},[106,148080,147076],{"class":116},[106,148082,148083,148085,148087,148089,148091,148093],{"class":108,"line":28},[106,148084,30731],{"class":112},[106,148086,147364],{"class":116},[106,148088,30386],{"class":112},[106,148090,147369],{"class":116},[106,148092,31377],{"class":112},[106,148094,147374],{"class":116},[106,148096,148097,148099,148101,148103],{"class":108,"line":1172},[106,148098,30731],{"class":112},[106,148100,147223],{"class":116},[106,148102,30386],{"class":112},[106,148104,147228],{"class":116},[106,148106,148107],{"class":108,"line":1187},[106,148108,2392],{"emptyLinePlaceholder":33},[106,148110,148111,148113,148115,148117,148120,148122,148124,148126,148128,148130,148132,148134,148136,148139],{"class":108,"line":1193},[106,148112,107818],{"class":112},[106,148114,146776],{"class":165},[106,148116,117],{"class":116},[106,148118,148119],{"class":221},"\"sales.json\"",[106,148121,12428],{"class":116},[106,148123,146786],{"class":221},[106,148125,12428],{"class":116},[106,148127,146791],{"class":5209},[106,148129,162],{"class":112},[106,148131,146796],{"class":221},[106,148133,13707],{"class":116},[106,148135,31377],{"class":112},[106,148137,148138],{"class":5209}," file",[106,148140,3731],{"class":116},[106,148142,148143,148145,148147,148150,148152],{"class":108,"line":1207},[106,148144,101406],{"class":116},[106,148146,162],{"class":112},[106,148148,148149],{"class":116}," json.load(",[106,148151,45348],{"class":5209},[106,148153,123],{"class":116},[106,148155,148156],{"class":108,"line":1213},[106,148157,2392],{"emptyLinePlaceholder":33},[106,148159,148160,148162,148164],{"class":108,"line":1304},[106,148161,147785],{"class":116},[106,148163,162],{"class":112},[106,148165,51832],{"class":116},[106,148167,148168,148171,148173],{"class":108,"line":1310},[106,148169,148170],{"class":116},"online_sales ",[106,148172,162],{"class":112},[106,148174,51832],{"class":116},[106,148176,148177,148180,148182],{"class":108,"line":1322},[106,148178,148179],{"class":116},"offline_sales ",[106,148181,162],{"class":112},[106,148183,51832],{"class":116},[106,148185,148186],{"class":108,"line":1604},[106,148187,2392],{"emptyLinePlaceholder":33},[106,148189,148190,148192,148195,148197],{"class":108,"line":1609},[106,148191,3017],{"class":112},[106,148193,148194],{"class":116}," item ",[106,148196,26037],{"class":112},[106,148198,148199],{"class":116}," data:\n",[106,148201,148202,148205,148207],{"class":108,"line":1615},[106,148203,148204],{"class":116},"    dates.append(item[",[106,148206,147982],{"class":221},[106,148208,4649],{"class":116},[106,148210,148211,148214,148216],{"class":108,"line":1620},[106,148212,148213],{"class":116},"    online_sales.append(item[",[106,148215,147991],{"class":221},[106,148217,4649],{"class":116},[106,148219,148220,148223,148225],{"class":108,"line":1634},[106,148221,148222],{"class":116},"    offline_sales.append(item[",[106,148224,148000],{"class":221},[106,148226,4649],{"class":116},[106,148228,148229],{"class":108,"line":1639},[106,148230,2392],{"emptyLinePlaceholder":33},[106,148232,148233,148235,148237],{"class":108,"line":1645},[106,148234,147237],{"class":116},[106,148236,162],{"class":112},[106,148238,147242],{"class":116},[106,148240,148241],{"class":108,"line":1666},[106,148242,147826],{"class":116},[106,148244,148245,148247,148249,148252,148254,148256,148258],{"class":108,"line":1671},[106,148246,147277],{"class":116},[106,148248,147833],{"class":221},[106,148250,148251],{"class":116},", online_sales, ",[106,148253,147730],{"class":5209},[106,148255,162],{"class":112},[106,148257,31470],{"class":165},[106,148259,123],{"class":116},[106,148261,148262,148264,148266,148269,148271,148273,148275],{"class":108,"line":1685},[106,148263,147277],{"class":116},[106,148265,147871],{"class":221},[106,148267,148268],{"class":116},", offline_sales, ",[106,148270,147730],{"class":5209},[106,148272,162],{"class":112},[106,148274,31470],{"class":165},[106,148276,123],{"class":116},[106,148278,148279],{"class":108,"line":1690},[106,148280,147453],{"class":116},[106,148282,148283,148285,148287,148289,148291,148293,148296],{"class":108,"line":1719},[106,148284,147458],{"class":5209},[106,148286,162],{"class":112},[106,148288,147463],{"class":116},[106,148290,51401],{"class":5209},[106,148292,162],{"class":112},[106,148294,148295],{"class":221},"\"销售趋势\"",[106,148297,38041],{"class":116},[106,148299,148300,148302,148304,148306,148308,148310,148312],{"class":108,"line":1724},[106,148301,147514],{"class":5209},[106,148303,162],{"class":112},[106,148305,147519],{"class":116},[106,148307,147522],{"class":5209},[106,148309,162],{"class":112},[106,148311,147527],{"class":221},[106,148313,38041],{"class":116},[106,148315,148316],{"class":108,"line":1741},[106,148317,123],{"class":116},[106,148319,148320,148322,148324],{"class":108,"line":1746},[106,148321,147309],{"class":116},[106,148323,147949],{"class":221},[106,148325,123],{"class":116},[48,148327,148329],{"id":148328},"_109-数据清洗","10.9 数据清洗",[14,148331,148332],{},"真实数据经常不整齐，需要清洗。",[14,148334,148335],{},"常见问题：",[60,148337,148338,148341,148344,148347],{},[63,148339,148340],{},"数字是字符串。",[63,148342,148343],{},"字段缺失。",[63,148345,148346],{},"空值。",[63,148348,148349],{},"日期格式不统一。",[14,148351,15128],{},[97,148353,148355],{"className":30372,"code":148354,"language":30374,"meta":25,"style":25},"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",[103,148356,148357,148366,148389,148409,148430,148434,148438,148446,148455,148459,148470,148484,148493,148498,148502,148510,148520,148524,148531],{"__ignoreMap":25},[106,148358,148359,148362,148364],{"class":108,"line":109},[106,148360,148361],{"class":116},"raw_data ",[106,148363,162],{"class":112},[106,148365,55441],{"class":116},[106,148367,148368,148371,148373,148375,148377,148379,148382,148384,148387],{"class":108,"line":28},[106,148369,148370],{"class":116},"    {",[106,148372,147982],{"class":221},[106,148374,51431],{"class":116},[106,148376,147250],{"class":221},[106,148378,12428],{"class":116},[106,148380,148381],{"class":221},"\"sales\"",[106,148383,51431],{"class":116},[106,148385,148386],{"class":221},"\"100\"",[106,148388,4922],{"class":116},[106,148390,148391,148393,148395,148397,148399,148401,148403,148405,148407],{"class":108,"line":1172},[106,148392,148370],{"class":116},[106,148394,147982],{"class":221},[106,148396,51431],{"class":116},[106,148398,147255],{"class":221},[106,148400,12428],{"class":116},[106,148402,148381],{"class":221},[106,148404,51431],{"class":116},[106,148406,7645],{"class":221},[106,148408,4922],{"class":116},[106,148410,148411,148413,148415,148417,148419,148421,148423,148425,148428],{"class":108,"line":1187},[106,148412,148370],{"class":116},[106,148414,147982],{"class":221},[106,148416,51431],{"class":116},[106,148418,147260],{"class":221},[106,148420,12428],{"class":116},[106,148422,148381],{"class":221},[106,148424,51431],{"class":116},[106,148426,148427],{"class":221},"\"120\"",[106,148429,4922],{"class":116},[106,148431,148432],{"class":108,"line":1193},[106,148433,33240],{"class":116},[106,148435,148436],{"class":108,"line":1207},[106,148437,2392],{"emptyLinePlaceholder":33},[106,148439,148440,148442,148444],{"class":108,"line":1213},[106,148441,147785],{"class":116},[106,148443,162],{"class":112},[106,148445,51832],{"class":116},[106,148447,148448,148451,148453],{"class":108,"line":1304},[106,148449,148450],{"class":116},"sales ",[106,148452,162],{"class":112},[106,148454,51832],{"class":116},[106,148456,148457],{"class":108,"line":1310},[106,148458,2392],{"emptyLinePlaceholder":33},[106,148460,148461,148463,148465,148467],{"class":108,"line":1322},[106,148462,3017],{"class":112},[106,148464,148194],{"class":116},[106,148466,26037],{"class":112},[106,148468,148469],{"class":116}," raw_data:\n",[106,148471,148472,148475,148477,148480,148482],{"class":108,"line":1604},[106,148473,148474],{"class":116},"    value ",[106,148476,162],{"class":112},[106,148478,148479],{"class":116}," item.get(",[106,148481,148381],{"class":221},[106,148483,123],{"class":116},[106,148485,148486,148488,148490],{"class":108,"line":1609},[106,148487,3093],{"class":112},[106,148489,38924],{"class":112},[106,148491,148492],{"class":116}," value:\n",[106,148494,148495],{"class":108,"line":1615},[106,148496,148497],{"class":112},"        continue\n",[106,148499,148500],{"class":108,"line":1620},[106,148501,2392],{"emptyLinePlaceholder":33},[106,148503,148504,148506,148508],{"class":108,"line":1634},[106,148505,148204],{"class":116},[106,148507,147982],{"class":221},[106,148509,4649],{"class":116},[106,148511,148512,148515,148517],{"class":108,"line":1639},[106,148513,148514],{"class":116},"    sales.append(",[106,148516,120],{"class":165},[106,148518,148519],{"class":116},"(value))\n",[106,148521,148522],{"class":108,"line":1645},[106,148523,2392],{"emptyLinePlaceholder":33},[106,148525,148526,148528],{"class":108,"line":1666},[106,148527,30409],{"class":165},[106,148529,148530],{"class":116},"(dates)\n",[106,148532,148533,148535],{"class":108,"line":1671},[106,148534,30409],{"class":165},[106,148536,148537],{"class":116},"(sales)\n",[48,148539,148541],{"id":148540},"_1010-小案例每日销售额折线图","10.10 小案例：每日销售额折线图",[97,148543,148545],{"className":30372,"code":148544,"language":30374,"meta":25,"style":25},"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",[103,148546,148547,148561,148571,148575,148583,148604,148626,148648,148670,148692,148696,148700,148722,148743,148747,148755,148759,148763,148773,148782,148792,148808,148812,148816,148833,148849,148865,148881,148891,148895],{"__ignoreMap":25},[106,148548,148549,148551,148553,148555,148557,148559],{"class":108,"line":109},[106,148550,30731],{"class":112},[106,148552,147364],{"class":116},[106,148554,30386],{"class":112},[106,148556,147369],{"class":116},[106,148558,31377],{"class":112},[106,148560,147374],{"class":116},[106,148562,148563,148565,148567,148569],{"class":108,"line":28},[106,148564,30731],{"class":112},[106,148566,147223],{"class":116},[106,148568,30386],{"class":112},[106,148570,147228],{"class":116},[106,148572,148573],{"class":108,"line":1172},[106,148574,2392],{"emptyLinePlaceholder":33},[106,148576,148577,148579,148581],{"class":108,"line":1187},[106,148578,148450],{"class":116},[106,148580,162],{"class":112},[106,148582,55441],{"class":116},[106,148584,148585,148587,148589,148591,148594,148596,148598,148600,148602],{"class":108,"line":1193},[106,148586,148370],{"class":116},[106,148588,147982],{"class":221},[106,148590,51431],{"class":116},[106,148592,148593],{"class":221},"\"2024-10-01\"",[106,148595,12428],{"class":116},[106,148597,84078],{"class":221},[106,148599,51431],{"class":116},[106,148601,92017],{"class":165},[106,148603,4922],{"class":116},[106,148605,148606,148608,148610,148612,148615,148617,148619,148621,148624],{"class":108,"line":1207},[106,148607,148370],{"class":116},[106,148609,147982],{"class":221},[106,148611,51431],{"class":116},[106,148613,148614],{"class":221},"\"2024-10-02\"",[106,148616,12428],{"class":116},[106,148618,84078],{"class":221},[106,148620,51431],{"class":116},[106,148622,148623],{"class":165},"1800",[106,148625,4922],{"class":116},[106,148627,148628,148630,148632,148634,148637,148639,148641,148643,148646],{"class":108,"line":1213},[106,148629,148370],{"class":116},[106,148631,147982],{"class":221},[106,148633,51431],{"class":116},[106,148635,148636],{"class":221},"\"2024-10-03\"",[106,148638,12428],{"class":116},[106,148640,84078],{"class":221},[106,148642,51431],{"class":116},[106,148644,148645],{"class":165},"1500",[106,148647,4922],{"class":116},[106,148649,148650,148652,148654,148656,148659,148661,148663,148665,148668],{"class":108,"line":1304},[106,148651,148370],{"class":116},[106,148653,147982],{"class":221},[106,148655,51431],{"class":116},[106,148657,148658],{"class":221},"\"2024-10-04\"",[106,148660,12428],{"class":116},[106,148662,84078],{"class":221},[106,148664,51431],{"class":116},[106,148666,148667],{"class":165},"2100",[106,148669,4922],{"class":116},[106,148671,148672,148674,148676,148678,148681,148683,148685,148687,148690],{"class":108,"line":1310},[106,148673,148370],{"class":116},[106,148675,147982],{"class":221},[106,148677,51431],{"class":116},[106,148679,148680],{"class":221},"\"2024-10-05\"",[106,148682,12428],{"class":116},[106,148684,84078],{"class":221},[106,148686,51431],{"class":116},[106,148688,148689],{"class":165},"2600",[106,148691,4922],{"class":116},[106,148693,148694],{"class":108,"line":1322},[106,148695,33240],{"class":116},[106,148697,148698],{"class":108,"line":1604},[106,148699,2392],{"emptyLinePlaceholder":33},[106,148701,148702,148704,148706,148709,148711,148713,148715,148717,148719],{"class":108,"line":1609},[106,148703,147785],{"class":116},[106,148705,162],{"class":112},[106,148707,148708],{"class":116}," [item[",[106,148710,147982],{"class":221},[106,148712,4435],{"class":116},[106,148714,3017],{"class":112},[106,148716,148194],{"class":116},[106,148718,26037],{"class":112},[106,148720,148721],{"class":116}," sales]\n",[106,148723,148724,148727,148729,148731,148733,148735,148737,148739,148741],{"class":108,"line":1615},[106,148725,148726],{"class":116},"amounts ",[106,148728,162],{"class":112},[106,148730,148708],{"class":116},[106,148732,84078],{"class":221},[106,148734,4435],{"class":116},[106,148736,3017],{"class":112},[106,148738,148194],{"class":116},[106,148740,26037],{"class":112},[106,148742,148721],{"class":116},[106,148744,148745],{"class":108,"line":1620},[106,148746,2392],{"emptyLinePlaceholder":33},[106,148748,148749,148751,148753],{"class":108,"line":1634},[106,148750,147237],{"class":116},[106,148752,162],{"class":112},[106,148754,147242],{"class":116},[106,148756,148757],{"class":108,"line":1639},[106,148758,147826],{"class":116},[106,148760,148761],{"class":108,"line":1645},[106,148762,147634],{"class":116},[106,148764,148765,148767,148769,148771],{"class":108,"line":1666},[106,148766,147639],{"class":5209},[106,148768,162],{"class":112},[106,148770,147280],{"class":221},[106,148772,31460],{"class":116},[106,148774,148775,148777,148779],{"class":108,"line":1671},[106,148776,147650],{"class":5209},[106,148778,162],{"class":112},[106,148780,148781],{"class":116},"amounts,\n",[106,148783,148784,148786,148788,148790],{"class":108,"line":1685},[106,148785,147679],{"class":5209},[106,148787,162],{"class":112},[106,148789,31470],{"class":165},[106,148791,31460],{"class":116},[106,148793,148794,148796,148798,148800,148802,148804,148806],{"class":108,"line":1690},[106,148795,147690],{"class":5209},[106,148797,162],{"class":112},[106,148799,147695],{"class":116},[106,148801,147698],{"class":5209},[106,148803,162],{"class":112},[106,148805,31470],{"class":165},[106,148807,38041],{"class":116},[106,148809,148810],{"class":108,"line":1719},[106,148811,123],{"class":116},[106,148813,148814],{"class":108,"line":1724},[106,148815,147453],{"class":116},[106,148817,148818,148820,148822,148824,148826,148828,148831],{"class":108,"line":1741},[106,148819,147458],{"class":5209},[106,148821,162],{"class":112},[106,148823,147463],{"class":116},[106,148825,51401],{"class":5209},[106,148827,162],{"class":112},[106,148829,148830],{"class":221},"\"每日销售额\"",[106,148832,38041],{"class":116},[106,148834,148835,148837,148839,148841,148843,148845,148847],{"class":108,"line":1746},[106,148836,147477],{"class":5209},[106,148838,162],{"class":112},[106,148840,147482],{"class":116},[106,148842,79804],{"class":5209},[106,148844,162],{"class":112},[106,148846,147489],{"class":221},[106,148848,38041],{"class":116},[106,148850,148851,148853,148855,148857,148859,148861,148863],{"class":108,"line":1751},[106,148852,147496],{"class":5209},[106,148854,162],{"class":112},[106,148856,147482],{"class":116},[106,148858,79804],{"class":5209},[106,148860,162],{"class":112},[106,148862,147507],{"class":221},[106,148864,38041],{"class":116},[106,148866,148867,148869,148871,148873,148875,148877,148879],{"class":108,"line":1756},[106,148868,147514],{"class":5209},[106,148870,162],{"class":112},[106,148872,147519],{"class":116},[106,148874,147522],{"class":5209},[106,148876,162],{"class":112},[106,148878,147527],{"class":221},[106,148880,38041],{"class":116},[106,148882,148883,148886,148888],{"class":108,"line":1770},[106,148884,148885],{"class":5209},"    datazoom_opts",[106,148887,162],{"class":112},[106,148889,148890],{"class":116},"[opts.DataZoomOpts()],\n",[106,148892,148893],{"class":108,"line":1775},[106,148894,123],{"class":116},[106,148896,148897,148899,148902],{"class":108,"line":2569},[106,148898,147309],{"class":116},[106,148900,148901],{"class":221},"\"daily_sales.html\"",[106,148903,123],{"class":116},[14,148905,148906,148909],{},[103,148907,148908],{},"datazoom_opts"," 可以让图表支持拖拽缩放，数据量大时很有用。",[48,148911,148913],{"id":148912},"_1011-小案例疫情趋势折线图结构","10.11 小案例：疫情趋势折线图结构",[14,148915,148916],{},"如果数据结构如下：",[97,148918,148920],{"className":30372,"code":148919,"language":30374,"meta":25,"style":25},"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",[103,148921,148922,148930,148938,148960,148981,148986,148993,149013,149033,149037],{"__ignoreMap":25},[106,148923,148924,148926,148928],{"class":108,"line":109},[106,148925,101643],{"class":116},[106,148927,162],{"class":112},[106,148929,15565],{"class":116},[106,148931,148932,148935],{"class":108,"line":28},[106,148933,148934],{"class":221},"    \"北京\"",[106,148936,148937],{"class":116},": [\n",[106,148939,148940,148942,148944,148946,148949,148951,148954,148956,148958],{"class":108,"line":1172},[106,148941,4909],{"class":116},[106,148943,147982],{"class":221},[106,148945,51431],{"class":116},[106,148947,148948],{"class":221},"\"2024-01-01\"",[106,148950,12428],{"class":116},[106,148952,148953],{"class":221},"\"confirm\"",[106,148955,51431],{"class":116},[106,148957,563],{"class":165},[106,148959,4922],{"class":116},[106,148961,148962,148964,148966,148968,148971,148973,148975,148977,148979],{"class":108,"line":1187},[106,148963,4909],{"class":116},[106,148965,147982],{"class":221},[106,148967,51431],{"class":116},[106,148969,148970],{"class":221},"\"2024-01-02\"",[106,148972,12428],{"class":116},[106,148974,148953],{"class":221},[106,148976,51431],{"class":116},[106,148978,615],{"class":165},[106,148980,4922],{"class":116},[106,148982,148983],{"class":108,"line":1193},[106,148984,148985],{"class":116},"    ],\n",[106,148987,148988,148991],{"class":108,"line":1207},[106,148989,148990],{"class":221},"    \"上海\"",[106,148992,148937],{"class":116},[106,148994,148995,148997,148999,149001,149003,149005,149007,149009,149011],{"class":108,"line":1213},[106,148996,4909],{"class":116},[106,148998,147982],{"class":221},[106,149000,51431],{"class":116},[106,149002,148948],{"class":221},[106,149004,12428],{"class":116},[106,149006,148953],{"class":221},[106,149008,51431],{"class":116},[106,149010,512],{"class":165},[106,149012,4922],{"class":116},[106,149014,149015,149017,149019,149021,149023,149025,149027,149029,149031],{"class":108,"line":1304},[106,149016,4909],{"class":116},[106,149018,147982],{"class":221},[106,149020,51431],{"class":116},[106,149022,148970],{"class":221},[106,149024,12428],{"class":116},[106,149026,148953],{"class":221},[106,149028,51431],{"class":116},[106,149030,640],{"class":165},[106,149032,4922],{"class":116},[106,149034,149035],{"class":108,"line":1310},[106,149036,148985],{"class":116},[106,149038,149039],{"class":108,"line":1322},[106,149040,1557],{"class":116},[14,149042,149043],{},"绘制多地区趋势：",[97,149045,149047],{"className":30372,"code":149046,"language":30374,"meta":25,"style":25},"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",[103,149048,149049,149063,149073,149077,149102,149106,149114,149118,149122,149134,149156,149169,149173,149177,149194,149210,149214],{"__ignoreMap":25},[106,149050,149051,149053,149055,149057,149059,149061],{"class":108,"line":109},[106,149052,30731],{"class":112},[106,149054,147364],{"class":116},[106,149056,30386],{"class":112},[106,149058,147369],{"class":116},[106,149060,31377],{"class":112},[106,149062,147374],{"class":116},[106,149064,149065,149067,149069,149071],{"class":108,"line":28},[106,149066,30731],{"class":112},[106,149068,147223],{"class":116},[106,149070,30386],{"class":112},[106,149072,147228],{"class":116},[106,149074,149075],{"class":108,"line":1172},[106,149076,2392],{"emptyLinePlaceholder":33},[106,149078,149079,149081,149083,149085,149087,149089,149091,149093,149095,149098,149100],{"class":108,"line":1187},[106,149080,147785],{"class":116},[106,149082,162],{"class":112},[106,149084,148708],{"class":116},[106,149086,147982],{"class":221},[106,149088,4435],{"class":116},[106,149090,3017],{"class":112},[106,149092,148194],{"class":116},[106,149094,26037],{"class":112},[106,149096,149097],{"class":116}," data[",[106,149099,69263],{"class":221},[106,149101,77521],{"class":116},[106,149103,149104],{"class":108,"line":1193},[106,149105,2392],{"emptyLinePlaceholder":33},[106,149107,149108,149110,149112],{"class":108,"line":1207},[106,149109,147237],{"class":116},[106,149111,162],{"class":112},[106,149113,147242],{"class":116},[106,149115,149116],{"class":108,"line":1213},[106,149117,147826],{"class":116},[106,149119,149120],{"class":108,"line":1304},[106,149121,2392],{"emptyLinePlaceholder":33},[106,149123,149124,149126,149129,149131],{"class":108,"line":1310},[106,149125,3017],{"class":112},[106,149127,149128],{"class":116}," city, records ",[106,149130,26037],{"class":112},[106,149132,149133],{"class":116}," data.items():\n",[106,149135,149136,149139,149141,149143,149145,149147,149149,149151,149153],{"class":108,"line":1322},[106,149137,149138],{"class":116},"    values ",[106,149140,162],{"class":112},[106,149142,148708],{"class":116},[106,149144,148953],{"class":221},[106,149146,4435],{"class":116},[106,149148,3017],{"class":112},[106,149150,148194],{"class":116},[106,149152,26037],{"class":112},[106,149154,149155],{"class":116}," records]\n",[106,149157,149158,149161,149163,149165,149167],{"class":108,"line":1604},[106,149159,149160],{"class":116},"    line.add_yaxis(city, values, ",[106,149162,147730],{"class":5209},[106,149164,162],{"class":112},[106,149166,31470],{"class":165},[106,149168,123],{"class":116},[106,149170,149171],{"class":108,"line":1609},[106,149172,2392],{"emptyLinePlaceholder":33},[106,149174,149175],{"class":108,"line":1615},[106,149176,147453],{"class":116},[106,149178,149179,149181,149183,149185,149187,149189,149192],{"class":108,"line":1620},[106,149180,147458],{"class":5209},[106,149182,162],{"class":112},[106,149184,147463],{"class":116},[106,149186,51401],{"class":5209},[106,149188,162],{"class":112},[106,149190,149191],{"class":221},"\"多地区趋势图\"",[106,149193,38041],{"class":116},[106,149195,149196,149198,149200,149202,149204,149206,149208],{"class":108,"line":1634},[106,149197,147514],{"class":5209},[106,149199,162],{"class":112},[106,149201,147519],{"class":116},[106,149203,147522],{"class":5209},[106,149205,162],{"class":112},[106,149207,147527],{"class":221},[106,149209,38041],{"class":116},[106,149211,149212],{"class":108,"line":1639},[106,149213,123],{"class":116},[106,149215,149216,149218,149221],{"class":108,"line":1645},[106,149217,147309],{"class":116},[106,149219,149220],{"class":221},"\"trend.html\"",[106,149222,123],{"class":116},[14,149224,149225],{},"这种思路适合一批地区、一批商品或一批指标的趋势对比。",[48,149227,149229],{"id":149228},"_1012-易错点","10.12 易错点",[60,149231,149232,149238,149244,149254,149260],{},[63,149233,149234,149237],{},[103,149235,149236],{},"add_xaxis()"," 的数据数量要和 y 轴数量对应。",[63,149239,149240,149243],{},[103,149241,149242],{},"render()"," 生成的是 HTML，不是图片。",[63,149245,149246,149247,149250,149251,28379],{},"JSON 字符串用 ",[103,149248,149249],{},"json.loads()","，JSON 文件用 ",[103,149252,149253],{},"json.load()",[63,149255,149256,149257,28379],{},"中文 JSON 保存时加 ",[103,149258,149259],{},"ensure_ascii=False",[63,149261,149262],{},"pyecharts 图表不能在纯终端里直接显示，需要浏览器打开 HTML。",[48,149264,149266],{"id":149265},"_1013-本章练习","10.13 本章练习",[60,149268,149269,149272,149275,149278,149281],{},[63,149270,149271],{},"安装 pyecharts 并生成第一个折线图。",[63,149273,149274],{},"用 JSON 文件保存一周销售数据，并读取绘制图表。",[63,149276,149277],{},"绘制两条折线，对比线上和线下销售额。",[63,149279,149280],{},"给折线图添加标题、坐标轴名称、提示框和缩放条。",[63,149282,149283],{},"对含有空值的销售数据进行清洗后再绘图。",[5119,149285,149286],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":25,"searchDepth":28,"depth":28,"links":149288},[149289,149290,149291,149292,149293,149294,149295,149296,149297,149298,149299,149300,149301],{"id":146905,"depth":28,"text":146906},{"id":146980,"depth":28,"text":146981},{"id":147159,"depth":28,"text":147160},{"id":147210,"depth":28,"text":147211},{"id":147344,"depth":28,"text":147345},{"id":147620,"depth":28,"text":147621},{"id":147746,"depth":28,"text":147747},{"id":147957,"depth":28,"text":147958},{"id":148328,"depth":28,"text":148329},{"id":148540,"depth":28,"text":148541},{"id":148912,"depth":28,"text":148913},{"id":149228,"depth":28,"text":149229},{"id":149265,"depth":28,"text":149266},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch10-jsonpyecharts",{"title":146897,"description":30},"wiki\u002F2024-10-10-python教程\u002Fch10-JSON与pyecharts折线图","StYaXLIht8VuaOlNFrmS7a-kIxJDRawZKxKfnvgi7JI",{"id":149308,"title":149309,"body":149310,"description":30,"extension":31,"meta":151670,"navigation":33,"path":151671,"seo":151672,"stem":151673,"__hash__":151674},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础.md","11. 面向对象基础",{"type":7,"value":149311,"toc":151647},[149312,149315,149319,149322,149325,149401,149404,149495,149498,149502,149505,149549,149562,149566,149569,149636,149639,149643,149646,149730,149738,149742,149747,149888,149891,149902,149908,149914,150028,150032,150035,150038,150291,150294,150298,150301,150405,150408,150412,150563,150567,150574,150687,150691,150694,150800,150803,150807,150810,150841,150844,150949,150952,150956,150960,150970,151038,151042,151049,151113,151116,151120,151126,151222,151231,151235,151559,151568,151572,151600,151604,151644],[10,149313,149309],{"id":149314},"_11-面向对象基础",[48,149316,149318],{"id":149317},"_111-什么是面向对象","11.1 什么是面向对象",[14,149320,149321],{},"面向对象是一种组织代码的方式。它把数据和操作数据的函数放在一起，形成对象。",[14,149323,149324],{},"面向过程：",[97,149326,149328],{"className":30372,"code":149327,"language":30374,"meta":25,"style":25},"name = \"小明\"\nage = 18\n\ndef introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\nintroduce(name, age)\n",[103,149329,149330,149339,149347,149351,149361,149392,149396],{"__ignoreMap":25},[106,149331,149332,149334,149336],{"class":108,"line":109},[106,149333,146521],{"class":116},[106,149335,162],{"class":112},[106,149337,149338],{"class":221}," \"小明\"\n",[106,149340,149341,149343,149345],{"class":108,"line":28},[106,149342,146531],{"class":116},[106,149344,162],{"class":112},[106,149346,146536],{"class":165},[106,149348,149349],{"class":108,"line":1172},[106,149350,2392],{"emptyLinePlaceholder":33},[106,149352,149353,149355,149358],{"class":108,"line":1187},[106,149354,31941],{"class":112},[106,149356,149357],{"class":1955}," introduce",[106,149359,149360],{"class":116},"(name, age):\n",[106,149362,149363,149365,149367,149369,149372,149374,149376,149378,149381,149383,149385,149387,149390],{"class":108,"line":1193},[106,149364,31293],{"class":165},[106,149366,117],{"class":116},[106,149368,169],{"class":112},[106,149370,149371],{"class":221},"\"我叫",[106,149373,1013],{"class":165},[106,149375,79804],{"class":116},[106,149377,1063],{"class":165},[106,149379,149380],{"class":221},"，今年",[106,149382,1013],{"class":165},[106,149384,70215],{"class":116},[106,149386,1063],{"class":165},[106,149388,149389],{"class":221},"岁\"",[106,149391,123],{"class":116},[106,149393,149394],{"class":108,"line":1207},[106,149395,2392],{"emptyLinePlaceholder":33},[106,149397,149398],{"class":108,"line":1213},[106,149399,149400],{"class":116},"introduce(name, age)\n",[14,149402,149403],{},"面向对象：",[97,149405,149407],{"className":30372,"code":149406,"language":30374,"meta":25,"style":25},"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",[103,149408,149409,149417,149425,149454,149458,149462,149472,149481,149490],{"__ignoreMap":25},[106,149410,149411,149413,149415],{"class":108,"line":109},[106,149412,14687],{"class":112},[106,149414,7891],{"class":1955},[106,149416,3731],{"class":116},[106,149418,149419,149421,149423],{"class":108,"line":28},[106,149420,30795],{"class":112},[106,149422,149357],{"class":1955},[106,149424,30801],{"class":116},[106,149426,149427,149429,149431,149433,149435,149438,149440,149442,149444,149446,149448,149450,149452],{"class":108,"line":1172},[106,149428,32445],{"class":165},[106,149430,117],{"class":116},[106,149432,169],{"class":112},[106,149434,149371],{"class":221},[106,149436,149437],{"class":165},"{self",[106,149439,80295],{"class":116},[106,149441,1063],{"class":165},[106,149443,149380],{"class":221},[106,149445,149437],{"class":165},[106,149447,80307],{"class":116},[106,149449,1063],{"class":165},[106,149451,149389],{"class":221},[106,149453,123],{"class":116},[106,149455,149456],{"class":108,"line":1187},[106,149457,2392],{"emptyLinePlaceholder":33},[106,149459,149460],{"class":108,"line":1193},[106,149461,2392],{"emptyLinePlaceholder":33},[106,149463,149464,149467,149469],{"class":108,"line":1207},[106,149465,149466],{"class":116},"student ",[106,149468,162],{"class":112},[106,149470,149471],{"class":116}," Student()\n",[106,149473,149474,149477,149479],{"class":108,"line":1213},[106,149475,149476],{"class":116},"student.name ",[106,149478,162],{"class":112},[106,149480,149338],{"class":221},[106,149482,149483,149486,149488],{"class":108,"line":1304},[106,149484,149485],{"class":116},"student.age ",[106,149487,162],{"class":112},[106,149489,146536],{"class":165},[106,149491,149492],{"class":108,"line":1310},[106,149493,149494],{"class":116},"student.introduce()\n",[14,149496,149497],{},"面向对象更适合数据结构和行为绑定在一起的场景，例如学生、用户、订单、商品、账户。",[48,149499,149501],{"id":149500},"_112-类和对象","11.2 类和对象",[14,149503,149504],{},"类是模板，对象是根据模板创建出来的具体实例。",[97,149506,149508],{"className":30372,"code":149507,"language":30374,"meta":25,"style":25},"class Student:\n    pass\n\n\nstudent1 = Student()\nstudent2 = Student()\n",[103,149509,149510,149518,149523,149527,149531,149540],{"__ignoreMap":25},[106,149511,149512,149514,149516],{"class":108,"line":109},[106,149513,14687],{"class":112},[106,149515,7891],{"class":1955},[106,149517,3731],{"class":116},[106,149519,149520],{"class":108,"line":28},[106,149521,149522],{"class":112},"    pass\n",[106,149524,149525],{"class":108,"line":1172},[106,149526,2392],{"emptyLinePlaceholder":33},[106,149528,149529],{"class":108,"line":1187},[106,149530,2392],{"emptyLinePlaceholder":33},[106,149532,149533,149536,149538],{"class":108,"line":1193},[106,149534,149535],{"class":116},"student1 ",[106,149537,162],{"class":112},[106,149539,149471],{"class":116},[106,149541,149542,149545,149547],{"class":108,"line":1207},[106,149543,149544],{"class":116},"student2 ",[106,149546,162],{"class":112},[106,149548,149471],{"class":116},[14,149550,149551,149554,149555,101003,149558,149561],{},[103,149552,149553],{},"Student"," 是类，",[103,149556,149557],{},"student1",[103,149559,149560],{},"student2"," 是对象。",[48,149563,149565],{"id":149564},"_113-属性","11.3 属性",[14,149567,149568],{},"属性是对象保存的数据。",[97,149570,149572],{"className":30372,"code":149571,"language":30374,"meta":25,"style":25},"class Student:\n    pass\n\n\nstudent = Student()\nstudent.name = \"小明\"\nstudent.age = 18\n\nprint(student.name)\nprint(student.age)\n",[103,149573,149574,149582,149586,149590,149594,149602,149610,149618,149622,149629],{"__ignoreMap":25},[106,149575,149576,149578,149580],{"class":108,"line":109},[106,149577,14687],{"class":112},[106,149579,7891],{"class":1955},[106,149581,3731],{"class":116},[106,149583,149584],{"class":108,"line":28},[106,149585,149522],{"class":112},[106,149587,149588],{"class":108,"line":1172},[106,149589,2392],{"emptyLinePlaceholder":33},[106,149591,149592],{"class":108,"line":1187},[106,149593,2392],{"emptyLinePlaceholder":33},[106,149595,149596,149598,149600],{"class":108,"line":1193},[106,149597,149466],{"class":116},[106,149599,162],{"class":112},[106,149601,149471],{"class":116},[106,149603,149604,149606,149608],{"class":108,"line":1207},[106,149605,149476],{"class":116},[106,149607,162],{"class":112},[106,149609,149338],{"class":221},[106,149611,149612,149614,149616],{"class":108,"line":1213},[106,149613,149485],{"class":116},[106,149615,162],{"class":112},[106,149617,146536],{"class":165},[106,149619,149620],{"class":108,"line":1304},[106,149621,2392],{"emptyLinePlaceholder":33},[106,149623,149624,149626],{"class":108,"line":1310},[106,149625,30409],{"class":165},[106,149627,149628],{"class":116},"(student.name)\n",[106,149630,149631,149633],{"class":108,"line":1322},[106,149632,30409],{"class":165},[106,149634,149635],{"class":116},"(student.age)\n",[14,149637,149638],{},"这种写法可以用，但实际项目中更推荐使用构造方法初始化属性。",[48,149640,149642],{"id":149641},"_114-方法","11.4 方法",[14,149644,149645],{},"类中的函数叫方法。",[97,149647,149648],{"className":30372,"code":149406,"language":30374,"meta":25,"style":25},[103,149649,149650,149658,149666,149694,149698,149702,149710,149718,149726],{"__ignoreMap":25},[106,149651,149652,149654,149656],{"class":108,"line":109},[106,149653,14687],{"class":112},[106,149655,7891],{"class":1955},[106,149657,3731],{"class":116},[106,149659,149660,149662,149664],{"class":108,"line":28},[106,149661,30795],{"class":112},[106,149663,149357],{"class":1955},[106,149665,30801],{"class":116},[106,149667,149668,149670,149672,149674,149676,149678,149680,149682,149684,149686,149688,149690,149692],{"class":108,"line":1172},[106,149669,32445],{"class":165},[106,149671,117],{"class":116},[106,149673,169],{"class":112},[106,149675,149371],{"class":221},[106,149677,149437],{"class":165},[106,149679,80295],{"class":116},[106,149681,1063],{"class":165},[106,149683,149380],{"class":221},[106,149685,149437],{"class":165},[106,149687,80307],{"class":116},[106,149689,1063],{"class":165},[106,149691,149389],{"class":221},[106,149693,123],{"class":116},[106,149695,149696],{"class":108,"line":1187},[106,149697,2392],{"emptyLinePlaceholder":33},[106,149699,149700],{"class":108,"line":1193},[106,149701,2392],{"emptyLinePlaceholder":33},[106,149703,149704,149706,149708],{"class":108,"line":1207},[106,149705,149466],{"class":116},[106,149707,162],{"class":112},[106,149709,149471],{"class":116},[106,149711,149712,149714,149716],{"class":108,"line":1213},[106,149713,149476],{"class":116},[106,149715,162],{"class":112},[106,149717,149338],{"class":221},[106,149719,149720,149722,149724],{"class":108,"line":1304},[106,149721,149485],{"class":116},[106,149723,162],{"class":112},[106,149725,146536],{"class":165},[106,149727,149728],{"class":108,"line":1310},[106,149729,149494],{"class":116},[14,149731,149732,149734,149735,149737],{},[103,149733,30817],{}," 表示当前对象。调用方法时不需要手动传入 ",[103,149736,30817],{},"，Python 会自动传。",[48,149739,149741],{"id":149740},"_115-构造方法__init__","11.5 构造方法__init__",[14,149743,149744,149746],{},[103,149745,30823],{}," 在对象创建时自动执行，用于初始化属性。",[97,149748,149750],{"className":30372,"code":149749,"language":30374,"meta":25,"style":25},"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",[103,149751,149752,149760,149769,149781,149793,149804,149808,149816,149854,149858,149862,149884],{"__ignoreMap":25},[106,149753,149754,149756,149758],{"class":108,"line":109},[106,149755,14687],{"class":112},[106,149757,7891],{"class":1955},[106,149759,3731],{"class":116},[106,149761,149762,149764,149766],{"class":108,"line":28},[106,149763,30795],{"class":112},[106,149765,30798],{"class":165},[106,149767,149768],{"class":116},"(self, name, age, score):\n",[106,149770,149771,149773,149776,149778],{"class":108,"line":1172},[106,149772,30839],{"class":165},[106,149774,149775],{"class":116},".name ",[106,149777,162],{"class":112},[106,149779,149780],{"class":116}," name\n",[106,149782,149783,149785,149788,149790],{"class":108,"line":1187},[106,149784,30839],{"class":165},[106,149786,149787],{"class":116},".age ",[106,149789,162],{"class":112},[106,149791,149792],{"class":116}," age\n",[106,149794,149795,149797,149800,149802],{"class":108,"line":1193},[106,149796,30839],{"class":165},[106,149798,149799],{"class":116},".score ",[106,149801,162],{"class":112},[106,149803,1571],{"class":116},[106,149805,149806],{"class":108,"line":1207},[106,149807,2392],{"emptyLinePlaceholder":33},[106,149809,149810,149812,149814],{"class":108,"line":1213},[106,149811,30795],{"class":112},[106,149813,149357],{"class":1955},[106,149815,30801],{"class":116},[106,149817,149818,149820,149822,149824,149826,149828,149830,149832,149834,149836,149838,149840,149843,149845,149848,149850,149852],{"class":108,"line":1304},[106,149819,32445],{"class":165},[106,149821,117],{"class":116},[106,149823,169],{"class":112},[106,149825,149371],{"class":221},[106,149827,149437],{"class":165},[106,149829,80295],{"class":116},[106,149831,1063],{"class":165},[106,149833,149380],{"class":221},[106,149835,149437],{"class":165},[106,149837,80307],{"class":116},[106,149839,1063],{"class":165},[106,149841,149842],{"class":221},"岁，成绩",[106,149844,149437],{"class":165},[106,149846,149847],{"class":116},".score",[106,149849,1063],{"class":165},[106,149851,368],{"class":221},[106,149853,123],{"class":116},[106,149855,149856],{"class":108,"line":1310},[106,149857,2392],{"emptyLinePlaceholder":33},[106,149859,149860],{"class":108,"line":1322},[106,149861,2392],{"emptyLinePlaceholder":33},[106,149863,149864,149866,149868,149871,149874,149876,149878,149880,149882],{"class":108,"line":1604},[106,149865,149466],{"class":116},[106,149867,162],{"class":112},[106,149869,149870],{"class":116}," Student(",[106,149872,149873],{"class":221},"\"小明\"",[106,149875,12428],{"class":116},[106,149877,767],{"class":165},[106,149879,12428],{"class":116},[106,149881,1106],{"class":165},[106,149883,123],{"class":116},[106,149885,149886],{"class":108,"line":1609},[106,149887,149494],{"class":116},[14,149889,149890],{},"构造方法的好处：",[60,149892,149893,149896,149899],{},[63,149894,149895],{},"创建对象时必须提供必要数据。",[63,149897,149898],{},"属性初始化集中，不容易漏。",[63,149900,149901],{},"对象状态更完整。",[48,149903,149905,149906],{"id":149904},"_116-str","11.6 ",[266,149907,1292],{},[14,149909,149910,149911,28379],{},"直接打印对象时，默认输出不直观。可以定义 ",[103,149912,149913],{},"__str__",[97,149915,149917],{"className":30372,"code":149916,"language":30374,"meta":25,"style":25},"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",[103,149918,149919,149927,149936,149946,149956,149960,149969,149997,150001,150005,150021],{"__ignoreMap":25},[106,149920,149921,149923,149925],{"class":108,"line":109},[106,149922,14687],{"class":112},[106,149924,7891],{"class":1955},[106,149926,3731],{"class":116},[106,149928,149929,149931,149933],{"class":108,"line":28},[106,149930,30795],{"class":112},[106,149932,30798],{"class":165},[106,149934,149935],{"class":116},"(self, name, age):\n",[106,149937,149938,149940,149942,149944],{"class":108,"line":1172},[106,149939,30839],{"class":165},[106,149941,149775],{"class":116},[106,149943,162],{"class":112},[106,149945,149780],{"class":116},[106,149947,149948,149950,149952,149954],{"class":108,"line":1187},[106,149949,30839],{"class":165},[106,149951,149787],{"class":116},[106,149953,162],{"class":112},[106,149955,149792],{"class":116},[106,149957,149958],{"class":108,"line":1193},[106,149959,2392],{"emptyLinePlaceholder":33},[106,149961,149962,149964,149967],{"class":108,"line":1207},[106,149963,30795],{"class":112},[106,149965,149966],{"class":165}," __str__",[106,149968,30801],{"class":116},[106,149970,149971,149973,149976,149979,149981,149983,149985,149988,149990,149992,149994],{"class":108,"line":1213},[106,149972,14745],{"class":112},[106,149974,149975],{"class":112}," f",[106,149977,149978],{"class":221},"\"Student(name=",[106,149980,149437],{"class":165},[106,149982,80295],{"class":116},[106,149984,1063],{"class":165},[106,149986,149987],{"class":221},", age=",[106,149989,149437],{"class":165},[106,149991,80307],{"class":116},[106,149993,1063],{"class":165},[106,149995,149996],{"class":221},")\"\n",[106,149998,149999],{"class":108,"line":1304},[106,150000,2392],{"emptyLinePlaceholder":33},[106,150002,150003],{"class":108,"line":1310},[106,150004,2392],{"emptyLinePlaceholder":33},[106,150006,150007,150009,150011,150013,150015,150017,150019],{"class":108,"line":1322},[106,150008,149466],{"class":116},[106,150010,162],{"class":112},[106,150012,149870],{"class":116},[106,150014,149873],{"class":221},[106,150016,12428],{"class":116},[106,150018,767],{"class":165},[106,150020,123],{"class":116},[106,150022,150023,150025],{"class":108,"line":1604},[106,150024,30409],{"class":165},[106,150026,150027],{"class":116},"(student)\n",[48,150029,150031],{"id":150030},"_117-封装","11.7 封装",[14,150033,150034],{},"封装就是把数据和方法放到类中，并控制访问方式。",[14,150036,150037],{},"Python 中以双下划线开头的属性通常视为私有属性。",[97,150039,150041],{"className":30372,"code":150040,"language":30374,"meta":25,"style":25},"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",[103,150042,150043,150052,150061,150073,150085,150089,150098,150107,150111,150121,150134,150145,150150,150161,150165,150174,150186,150197,150201,150214,150225,150229,150240,150244,150248,150266,150275,150284],{"__ignoreMap":25},[106,150044,150045,150047,150050],{"class":108,"line":109},[106,150046,14687],{"class":112},[106,150048,150049],{"class":1955}," Account",[106,150051,3731],{"class":116},[106,150053,150054,150056,150058],{"class":108,"line":28},[106,150055,30795],{"class":112},[106,150057,30798],{"class":165},[106,150059,150060],{"class":116},"(self, owner, balance):\n",[106,150062,150063,150065,150068,150070],{"class":108,"line":1172},[106,150064,30839],{"class":165},[106,150066,150067],{"class":116},".owner ",[106,150069,162],{"class":112},[106,150071,150072],{"class":116}," owner\n",[106,150074,150075,150077,150080,150082],{"class":108,"line":1187},[106,150076,30839],{"class":165},[106,150078,150079],{"class":116},".__balance ",[106,150081,162],{"class":112},[106,150083,150084],{"class":116}," balance\n",[106,150086,150087],{"class":108,"line":1193},[106,150088,2392],{"emptyLinePlaceholder":33},[106,150090,150091,150093,150096],{"class":108,"line":1207},[106,150092,30795],{"class":112},[106,150094,150095],{"class":1955}," get_balance",[106,150097,30801],{"class":116},[106,150099,150100,150102,150104],{"class":108,"line":1213},[106,150101,14745],{"class":112},[106,150103,38867],{"class":165},[106,150105,150106],{"class":116},".__balance\n",[106,150108,150109],{"class":108,"line":1304},[106,150110,2392],{"emptyLinePlaceholder":33},[106,150112,150113,150115,150118],{"class":108,"line":1310},[106,150114,30795],{"class":112},[106,150116,150117],{"class":1955}," deposit",[106,150119,150120],{"class":116},"(self, money):\n",[106,150122,150123,150125,150128,150130,150132],{"class":108,"line":1322},[106,150124,2489],{"class":112},[106,150126,150127],{"class":116}," money ",[106,150129,1580],{"class":112},[106,150131,4085],{"class":165},[106,150133,3731],{"class":116},[106,150135,150136,150138,150140,150143],{"class":108,"line":1604},[106,150137,34644],{"class":165},[106,150139,117],{"class":116},[106,150141,150142],{"class":221},"\"存款金额必须大于0\"",[106,150144,123],{"class":116},[106,150146,150147],{"class":108,"line":1609},[106,150148,150149],{"class":112},"            return\n",[106,150151,150152,150154,150156,150158],{"class":108,"line":1615},[106,150153,30839],{"class":165},[106,150155,150079],{"class":116},[106,150157,9470],{"class":112},[106,150159,150160],{"class":116}," money\n",[106,150162,150163],{"class":108,"line":1620},[106,150164,2392],{"emptyLinePlaceholder":33},[106,150166,150167,150169,150172],{"class":108,"line":1634},[106,150168,30795],{"class":112},[106,150170,150171],{"class":1955}," withdraw",[106,150173,150120],{"class":116},[106,150175,150176,150178,150180,150182,150184],{"class":108,"line":1639},[106,150177,2489],{"class":112},[106,150179,150127],{"class":116},[106,150181,1580],{"class":112},[106,150183,4085],{"class":165},[106,150185,3731],{"class":116},[106,150187,150188,150190,150192,150195],{"class":108,"line":1645},[106,150189,34644],{"class":165},[106,150191,117],{"class":116},[106,150193,150194],{"class":221},"\"取款金额必须大于0\"",[106,150196,123],{"class":116},[106,150198,150199],{"class":108,"line":1666},[106,150200,150149],{"class":112},[106,150202,150203,150205,150207,150209,150211],{"class":108,"line":1671},[106,150204,2489],{"class":112},[106,150206,150127],{"class":116},[106,150208,1077],{"class":112},[106,150210,38867],{"class":165},[106,150212,150213],{"class":116},".__balance:\n",[106,150215,150216,150218,150220,150223],{"class":108,"line":1685},[106,150217,34644],{"class":165},[106,150219,117],{"class":116},[106,150221,150222],{"class":221},"\"余额不足\"",[106,150224,123],{"class":116},[106,150226,150227],{"class":108,"line":1690},[106,150228,150149],{"class":112},[106,150230,150231,150233,150235,150238],{"class":108,"line":1719},[106,150232,30839],{"class":165},[106,150234,150079],{"class":116},[106,150236,150237],{"class":112},"-=",[106,150239,150160],{"class":116},[106,150241,150242],{"class":108,"line":1724},[106,150243,2392],{"emptyLinePlaceholder":33},[106,150245,150246],{"class":108,"line":1741},[106,150247,2392],{"emptyLinePlaceholder":33},[106,150249,150250,150253,150255,150258,150260,150262,150264],{"class":108,"line":1746},[106,150251,150252],{"class":116},"account ",[106,150254,162],{"class":112},[106,150256,150257],{"class":116}," Account(",[106,150259,149873],{"class":221},[106,150261,12428],{"class":116},[106,150263,6403],{"class":165},[106,150265,123],{"class":116},[106,150267,150268,150271,150273],{"class":108,"line":1751},[106,150269,150270],{"class":116},"account.deposit(",[106,150272,1714],{"class":165},[106,150274,123],{"class":116},[106,150276,150277,150280,150282],{"class":108,"line":1756},[106,150278,150279],{"class":116},"account.withdraw(",[106,150281,428],{"class":165},[106,150283,123],{"class":116},[106,150285,150286,150288],{"class":108,"line":1770},[106,150287,30409],{"class":165},[106,150289,150290],{"class":116},"(account.get_balance())\n",[14,150292,150293],{},"封装的意义是避免外部随意修改内部状态。",[48,150295,150297],{"id":150296},"_118-继承","11.8 继承",[14,150299,150300],{},"继承可以让子类复用父类的属性和方法。",[97,150302,150304],{"className":30372,"code":150303,"language":30374,"meta":25,"style":25},"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",[103,150305,150306,150315,150324,150335,150339,150343,150357,150366,150377,150381,150385,150395,150400],{"__ignoreMap":25},[106,150307,150308,150310,150313],{"class":108,"line":109},[106,150309,14687],{"class":112},[106,150311,150312],{"class":1955}," Animal",[106,150314,3731],{"class":116},[106,150316,150317,150319,150322],{"class":108,"line":28},[106,150318,30795],{"class":112},[106,150320,150321],{"class":1955}," eat",[106,150323,30801],{"class":116},[106,150325,150326,150328,150330,150333],{"class":108,"line":1172},[106,150327,32445],{"class":165},[106,150329,117],{"class":116},[106,150331,150332],{"class":221},"\"吃东西\"",[106,150334,123],{"class":116},[106,150336,150337],{"class":108,"line":1187},[106,150338,2392],{"emptyLinePlaceholder":33},[106,150340,150341],{"class":108,"line":1193},[106,150342,2392],{"emptyLinePlaceholder":33},[106,150344,150345,150347,150350,150352,150355],{"class":108,"line":1207},[106,150346,14687],{"class":112},[106,150348,150349],{"class":1955}," Dog",[106,150351,117],{"class":116},[106,150353,150354],{"class":1955},"Animal",[106,150356,30780],{"class":116},[106,150358,150359,150361,150364],{"class":108,"line":1213},[106,150360,30795],{"class":112},[106,150362,150363],{"class":1955}," bark",[106,150365,30801],{"class":116},[106,150367,150368,150370,150372,150375],{"class":108,"line":1304},[106,150369,32445],{"class":165},[106,150371,117],{"class":116},[106,150373,150374],{"class":221},"\"汪汪\"",[106,150376,123],{"class":116},[106,150378,150379],{"class":108,"line":1310},[106,150380,2392],{"emptyLinePlaceholder":33},[106,150382,150383],{"class":108,"line":1322},[106,150384,2392],{"emptyLinePlaceholder":33},[106,150386,150387,150390,150392],{"class":108,"line":1604},[106,150388,150389],{"class":116},"dog ",[106,150391,162],{"class":112},[106,150393,150394],{"class":116}," Dog()\n",[106,150396,150397],{"class":108,"line":1609},[106,150398,150399],{"class":116},"dog.eat()\n",[106,150401,150402],{"class":108,"line":1615},[106,150403,150404],{"class":116},"dog.bark()\n",[14,150406,150407],{},"子类可以扩展新方法，也可以重写父类方法。",[48,150409,150411],{"id":150410},"_119-方法重写","11.9 方法重写",[97,150413,150415],{"className":30372,"code":150414,"language":30374,"meta":25,"style":25},"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",[103,150416,150417,150425,150434,150445,150449,150453,150465,150473,150483,150487,150491,150504,150512,150523,150527,150531,150539,150549,150553,150558],{"__ignoreMap":25},[106,150418,150419,150421,150423],{"class":108,"line":109},[106,150420,14687],{"class":112},[106,150422,150312],{"class":1955},[106,150424,3731],{"class":116},[106,150426,150427,150429,150432],{"class":108,"line":28},[106,150428,30795],{"class":112},[106,150430,150431],{"class":1955}," speak",[106,150433,30801],{"class":116},[106,150435,150436,150438,150440,150443],{"class":108,"line":1172},[106,150437,32445],{"class":165},[106,150439,117],{"class":116},[106,150441,150442],{"class":221},"\"动物叫\"",[106,150444,123],{"class":116},[106,150446,150447],{"class":108,"line":1187},[106,150448,2392],{"emptyLinePlaceholder":33},[106,150450,150451],{"class":108,"line":1193},[106,150452,2392],{"emptyLinePlaceholder":33},[106,150454,150455,150457,150459,150461,150463],{"class":108,"line":1207},[106,150456,14687],{"class":112},[106,150458,150349],{"class":1955},[106,150460,117],{"class":116},[106,150462,150354],{"class":1955},[106,150464,30780],{"class":116},[106,150466,150467,150469,150471],{"class":108,"line":1213},[106,150468,30795],{"class":112},[106,150470,150431],{"class":1955},[106,150472,30801],{"class":116},[106,150474,150475,150477,150479,150481],{"class":108,"line":1304},[106,150476,32445],{"class":165},[106,150478,117],{"class":116},[106,150480,150374],{"class":221},[106,150482,123],{"class":116},[106,150484,150485],{"class":108,"line":1310},[106,150486,2392],{"emptyLinePlaceholder":33},[106,150488,150489],{"class":108,"line":1322},[106,150490,2392],{"emptyLinePlaceholder":33},[106,150492,150493,150495,150498,150500,150502],{"class":108,"line":1604},[106,150494,14687],{"class":112},[106,150496,150497],{"class":1955}," Cat",[106,150499,117],{"class":116},[106,150501,150354],{"class":1955},[106,150503,30780],{"class":116},[106,150505,150506,150508,150510],{"class":108,"line":1609},[106,150507,30795],{"class":112},[106,150509,150431],{"class":1955},[106,150511,30801],{"class":116},[106,150513,150514,150516,150518,150521],{"class":108,"line":1615},[106,150515,32445],{"class":165},[106,150517,117],{"class":116},[106,150519,150520],{"class":221},"\"喵喵\"",[106,150522,123],{"class":116},[106,150524,150525],{"class":108,"line":1620},[106,150526,2392],{"emptyLinePlaceholder":33},[106,150528,150529],{"class":108,"line":1634},[106,150530,2392],{"emptyLinePlaceholder":33},[106,150532,150533,150535,150537],{"class":108,"line":1639},[106,150534,150389],{"class":116},[106,150536,162],{"class":112},[106,150538,150394],{"class":116},[106,150540,150541,150544,150546],{"class":108,"line":1645},[106,150542,150543],{"class":116},"cat ",[106,150545,162],{"class":112},[106,150547,150548],{"class":116}," Cat()\n",[106,150550,150551],{"class":108,"line":1666},[106,150552,2392],{"emptyLinePlaceholder":33},[106,150554,150555],{"class":108,"line":1671},[106,150556,150557],{"class":116},"dog.speak()\n",[106,150559,150560],{"class":108,"line":1685},[106,150561,150562],{"class":116},"cat.speak()\n",[48,150564,150566],{"id":150565},"_1110-super","11.10 super",[14,150568,150569,150570,150573],{},"子类可以通过 ",[103,150571,150572],{},"super()"," 调用父类方法。",[97,150575,150577],{"className":30372,"code":150576,"language":30374,"meta":25,"style":25},"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",[103,150578,150579,150587,150596,150606,150610,150614,150626,150635,150646,150656,150660,150664,150680],{"__ignoreMap":25},[106,150580,150581,150583,150585],{"class":108,"line":109},[106,150582,14687],{"class":112},[106,150584,15562],{"class":1955},[106,150586,3731],{"class":116},[106,150588,150589,150591,150593],{"class":108,"line":28},[106,150590,30795],{"class":112},[106,150592,30798],{"class":165},[106,150594,150595],{"class":116},"(self, name):\n",[106,150597,150598,150600,150602,150604],{"class":108,"line":1172},[106,150599,30839],{"class":165},[106,150601,149775],{"class":116},[106,150603,162],{"class":112},[106,150605,149780],{"class":116},[106,150607,150608],{"class":108,"line":1187},[106,150609,2392],{"emptyLinePlaceholder":33},[106,150611,150612],{"class":108,"line":1193},[106,150613,2392],{"emptyLinePlaceholder":33},[106,150615,150616,150618,150620,150622,150624],{"class":108,"line":1207},[106,150617,14687],{"class":112},[106,150619,7891],{"class":1955},[106,150621,117],{"class":116},[106,150623,19039],{"class":1955},[106,150625,30780],{"class":116},[106,150627,150628,150630,150632],{"class":108,"line":1213},[106,150629,30795],{"class":112},[106,150631,30798],{"class":165},[106,150633,150634],{"class":116},"(self, name, score):\n",[106,150636,150637,150639,150641,150643],{"class":108,"line":1304},[106,150638,30811],{"class":165},[106,150640,17254],{"class":116},[106,150642,30823],{"class":165},[106,150644,150645],{"class":116},"(name)\n",[106,150647,150648,150650,150652,150654],{"class":108,"line":1310},[106,150649,30839],{"class":165},[106,150651,149799],{"class":116},[106,150653,162],{"class":112},[106,150655,1571],{"class":116},[106,150657,150658],{"class":108,"line":1322},[106,150659,2392],{"emptyLinePlaceholder":33},[106,150661,150662],{"class":108,"line":1604},[106,150663,2392],{"emptyLinePlaceholder":33},[106,150665,150666,150668,150670,150672,150674,150676,150678],{"class":108,"line":1609},[106,150667,149466],{"class":116},[106,150669,162],{"class":112},[106,150671,149870],{"class":116},[106,150673,149873],{"class":221},[106,150675,12428],{"class":116},[106,150677,1106],{"class":165},[106,150679,123],{"class":116},[106,150681,150682,150684],{"class":108,"line":1615},[106,150683,30409],{"class":165},[106,150685,150686],{"class":116},"(student.name, student.score)\n",[48,150688,150690],{"id":150689},"_1111-多态","11.11 多态",[14,150692,150693],{},"多态指不同对象响应同一个方法，表现出不同结果。",[97,150695,150697],{"className":30372,"code":150696,"language":30374,"meta":25,"style":25},"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",[103,150698,150699,150707,150715,150725,150729,150733,150741,150749,150759,150763,150767,150777,150782,150786,150790,150795],{"__ignoreMap":25},[106,150700,150701,150703,150705],{"class":108,"line":109},[106,150702,14687],{"class":112},[106,150704,150349],{"class":1955},[106,150706,3731],{"class":116},[106,150708,150709,150711,150713],{"class":108,"line":28},[106,150710,30795],{"class":112},[106,150712,150431],{"class":1955},[106,150714,30801],{"class":116},[106,150716,150717,150719,150721,150723],{"class":108,"line":1172},[106,150718,32445],{"class":165},[106,150720,117],{"class":116},[106,150722,150374],{"class":221},[106,150724,123],{"class":116},[106,150726,150727],{"class":108,"line":1187},[106,150728,2392],{"emptyLinePlaceholder":33},[106,150730,150731],{"class":108,"line":1193},[106,150732,2392],{"emptyLinePlaceholder":33},[106,150734,150735,150737,150739],{"class":108,"line":1207},[106,150736,14687],{"class":112},[106,150738,150497],{"class":1955},[106,150740,3731],{"class":116},[106,150742,150743,150745,150747],{"class":108,"line":1213},[106,150744,30795],{"class":112},[106,150746,150431],{"class":1955},[106,150748,30801],{"class":116},[106,150750,150751,150753,150755,150757],{"class":108,"line":1304},[106,150752,32445],{"class":165},[106,150754,117],{"class":116},[106,150756,150520],{"class":221},[106,150758,123],{"class":116},[106,150760,150761],{"class":108,"line":1310},[106,150762,2392],{"emptyLinePlaceholder":33},[106,150764,150765],{"class":108,"line":1322},[106,150766,2392],{"emptyLinePlaceholder":33},[106,150768,150769,150771,150774],{"class":108,"line":1604},[106,150770,31941],{"class":112},[106,150772,150773],{"class":1955}," make_sound",[106,150775,150776],{"class":116},"(animal):\n",[106,150778,150779],{"class":108,"line":1609},[106,150780,150781],{"class":116},"    animal.speak()\n",[106,150783,150784],{"class":108,"line":1615},[106,150785,2392],{"emptyLinePlaceholder":33},[106,150787,150788],{"class":108,"line":1620},[106,150789,2392],{"emptyLinePlaceholder":33},[106,150791,150792],{"class":108,"line":1634},[106,150793,150794],{"class":116},"make_sound(Dog())\n",[106,150796,150797],{"class":108,"line":1639},[106,150798,150799],{"class":116},"make_sound(Cat())\n",[14,150801,150802],{},"Python 更关注对象是否有需要的方法，而不是对象具体是什么类。",[48,150804,150806],{"id":150805},"_1112-类属性和实例属性","11.12 类属性和实例属性",[14,150808,150809],{},"实例属性属于对象：",[97,150811,150813],{"className":30372,"code":150812,"language":30374,"meta":25,"style":25},"class Student:\n    def __init__(self, name):\n        self.name = name\n",[103,150814,150815,150823,150831],{"__ignoreMap":25},[106,150816,150817,150819,150821],{"class":108,"line":109},[106,150818,14687],{"class":112},[106,150820,7891],{"class":1955},[106,150822,3731],{"class":116},[106,150824,150825,150827,150829],{"class":108,"line":28},[106,150826,30795],{"class":112},[106,150828,30798],{"class":165},[106,150830,150595],{"class":116},[106,150832,150833,150835,150837,150839],{"class":108,"line":1172},[106,150834,30839],{"class":165},[106,150836,149775],{"class":116},[106,150838,162],{"class":112},[106,150840,149780],{"class":116},[14,150842,150843],{},"类属性属于类，所有对象共享：",[97,150845,150847],{"className":30372,"code":150846,"language":30374,"meta":25,"style":25},"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",[103,150848,150849,150857,150867,150871,150879,150889,150893,150897,150910,150924,150928,150935,150942],{"__ignoreMap":25},[106,150850,150851,150853,150855],{"class":108,"line":109},[106,150852,14687],{"class":112},[106,150854,7891],{"class":1955},[106,150856,3731],{"class":116},[106,150858,150859,150862,150864],{"class":108,"line":28},[106,150860,150861],{"class":116},"    school ",[106,150863,162],{"class":112},[106,150865,150866],{"class":221}," \"黑马学校\"\n",[106,150868,150869],{"class":108,"line":1172},[106,150870,2392],{"emptyLinePlaceholder":33},[106,150872,150873,150875,150877],{"class":108,"line":1187},[106,150874,30795],{"class":112},[106,150876,30798],{"class":165},[106,150878,150595],{"class":116},[106,150880,150881,150883,150885,150887],{"class":108,"line":1193},[106,150882,30839],{"class":165},[106,150884,149775],{"class":116},[106,150886,162],{"class":112},[106,150888,149780],{"class":116},[106,150890,150891],{"class":108,"line":1207},[106,150892,2392],{"emptyLinePlaceholder":33},[106,150894,150895],{"class":108,"line":1213},[106,150896,2392],{"emptyLinePlaceholder":33},[106,150898,150899,150902,150904,150906,150908],{"class":108,"line":1304},[106,150900,150901],{"class":116},"s1 ",[106,150903,162],{"class":112},[106,150905,149870],{"class":116},[106,150907,149873],{"class":221},[106,150909,123],{"class":116},[106,150911,150912,150915,150917,150919,150922],{"class":108,"line":1310},[106,150913,150914],{"class":116},"s2 ",[106,150916,162],{"class":112},[106,150918,149870],{"class":116},[106,150920,150921],{"class":221},"\"小红\"",[106,150923,123],{"class":116},[106,150925,150926],{"class":108,"line":1322},[106,150927,2392],{"emptyLinePlaceholder":33},[106,150929,150930,150932],{"class":108,"line":1604},[106,150931,30409],{"class":165},[106,150933,150934],{"class":116},"(s1.school)\n",[106,150936,150937,150939],{"class":108,"line":1609},[106,150938,30409],{"class":165},[106,150940,150941],{"class":116},"(s2.school)\n",[106,150943,150944,150946],{"class":108,"line":1615},[106,150945,30409],{"class":165},[106,150947,150948],{"class":116},"(Student.school)\n",[14,150950,150951],{},"如果每个对象都不同，用实例属性。如果所有对象共享，用类属性。",[48,150953,150955],{"id":150954},"_1113-类方法和静态方法","11.13 类方法和静态方法",[77,150957,150959],{"id":150958},"_11131-类方法","11.13.1 类方法",[14,150961,150962,150963,150966,150967,28379],{},"类方法使用 ",[103,150964,150965],{},"@classmethod","，第一个参数通常是 ",[103,150968,150969],{},"cls",[97,150971,150973],{"className":30372,"code":150972,"language":30374,"meta":25,"style":25},"class Student:\n    school = \"黑马学校\"\n\n    @classmethod\n    def get_school(cls):\n        return cls.school\n\n\nprint(Student.get_school())\n",[103,150974,150975,150983,150991,150995,151003,151013,151023,151027,151031],{"__ignoreMap":25},[106,150976,150977,150979,150981],{"class":108,"line":109},[106,150978,14687],{"class":112},[106,150980,7891],{"class":1955},[106,150982,3731],{"class":116},[106,150984,150985,150987,150989],{"class":108,"line":28},[106,150986,150861],{"class":116},[106,150988,162],{"class":112},[106,150990,150866],{"class":221},[106,150992,150993],{"class":108,"line":1172},[106,150994,2392],{"emptyLinePlaceholder":33},[106,150996,150997,151000],{"class":108,"line":1187},[106,150998,150999],{"class":1955},"    @",[106,151001,151002],{"class":165},"classmethod\n",[106,151004,151005,151007,151010],{"class":108,"line":1193},[106,151006,30795],{"class":112},[106,151008,151009],{"class":1955}," get_school",[106,151011,151012],{"class":116},"(cls):\n",[106,151014,151015,151017,151020],{"class":108,"line":1207},[106,151016,14745],{"class":112},[106,151018,151019],{"class":165}," cls",[106,151021,151022],{"class":116},".school\n",[106,151024,151025],{"class":108,"line":1213},[106,151026,2392],{"emptyLinePlaceholder":33},[106,151028,151029],{"class":108,"line":1304},[106,151030,2392],{"emptyLinePlaceholder":33},[106,151032,151033,151035],{"class":108,"line":1310},[106,151034,30409],{"class":165},[106,151036,151037],{"class":116},"(Student.get_school())\n",[77,151039,151041],{"id":151040},"_11132-静态方法","11.13.2 静态方法",[14,151043,151044,151045,151048],{},"静态方法使用 ",[103,151046,151047],{},"@staticmethod","，不需要访问实例和类。",[97,151050,151052],{"className":30372,"code":151051,"language":30374,"meta":25,"style":25},"class MathUtils:\n    @staticmethod\n    def add(a, b):\n        return a + b\n\n\nprint(MathUtils.add(1, 2))\n",[103,151053,151054,151063,151070,151079,151090,151094,151098],{"__ignoreMap":25},[106,151055,151056,151058,151061],{"class":108,"line":109},[106,151057,14687],{"class":112},[106,151059,151060],{"class":1955}," MathUtils",[106,151062,3731],{"class":116},[106,151064,151065,151067],{"class":108,"line":28},[106,151066,150999],{"class":1955},[106,151068,151069],{"class":165},"staticmethod\n",[106,151071,151072,151074,151076],{"class":108,"line":1172},[106,151073,30795],{"class":112},[106,151075,5202],{"class":1955},[106,151077,151078],{"class":116},"(a, b):\n",[106,151080,151081,151083,151085,151087],{"class":108,"line":1187},[106,151082,14745],{"class":112},[106,151084,10862],{"class":116},[106,151086,598],{"class":112},[106,151088,151089],{"class":116}," b\n",[106,151091,151092],{"class":108,"line":1193},[106,151093,2392],{"emptyLinePlaceholder":33},[106,151095,151096],{"class":108,"line":1207},[106,151097,2392],{"emptyLinePlaceholder":33},[106,151099,151100,151102,151105,151107,151109,151111],{"class":108,"line":1213},[106,151101,30409],{"class":165},[106,151103,151104],{"class":116},"(MathUtils.add(",[106,151106,334],{"class":165},[106,151108,12428],{"class":116},[106,151110,194],{"class":165},[106,151112,30491],{"class":116},[14,151114,151115],{},"静态方法本质上是放在类命名空间里的普通函数。",[48,151117,151119],{"id":151118},"_1114-dataclass","11.14 dataclass",[14,151121,151122,151125],{},[103,151123,151124],{},"dataclass"," 可以快速定义主要用于保存数据的类。",[97,151127,151129],{"className":30372,"code":151128,"language":30374,"meta":25,"style":25},"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",[103,151130,151131,151143,151147,151151,151156,151164,151172,151180,151188,151192,151196,151216],{"__ignoreMap":25},[106,151132,151133,151135,151138,151140],{"class":108,"line":109},[106,151134,30731],{"class":112},[106,151136,151137],{"class":116}," dataclasses ",[106,151139,30386],{"class":112},[106,151141,151142],{"class":116}," dataclass\n",[106,151144,151145],{"class":108,"line":28},[106,151146,2392],{"emptyLinePlaceholder":33},[106,151148,151149],{"class":108,"line":1172},[106,151150,2392],{"emptyLinePlaceholder":33},[106,151152,151153],{"class":108,"line":1187},[106,151154,151155],{"class":1955},"@dataclass\n",[106,151157,151158,151160,151162],{"class":108,"line":1193},[106,151159,14687],{"class":112},[106,151161,7891],{"class":1955},[106,151163,3731],{"class":116},[106,151165,151166,151169],{"class":108,"line":1207},[106,151167,151168],{"class":116},"    name: ",[106,151170,151171],{"class":165},"str\n",[106,151173,151174,151177],{"class":108,"line":1213},[106,151175,151176],{"class":116},"    age: ",[106,151178,151179],{"class":165},"int\n",[106,151181,151182,151185],{"class":108,"line":1304},[106,151183,151184],{"class":116},"    score: ",[106,151186,151187],{"class":165},"float\n",[106,151189,151190],{"class":108,"line":1310},[106,151191,2392],{"emptyLinePlaceholder":33},[106,151193,151194],{"class":108,"line":1322},[106,151195,2392],{"emptyLinePlaceholder":33},[106,151197,151198,151200,151202,151204,151206,151208,151210,151212,151214],{"class":108,"line":1604},[106,151199,149466],{"class":116},[106,151201,162],{"class":112},[106,151203,149870],{"class":116},[106,151205,149873],{"class":221},[106,151207,12428],{"class":116},[106,151209,767],{"class":165},[106,151211,12428],{"class":116},[106,151213,1106],{"class":165},[106,151215,123],{"class":116},[106,151217,151218,151220],{"class":108,"line":1609},[106,151219,30409],{"class":165},[106,151221,150027],{"class":116},[14,151223,151224,151225,329,151227,151230],{},"它会自动生成 ",[103,151226,30823],{},[103,151228,151229],{},"__repr__"," 等方法。适合数据模型类。",[48,151232,151234],{"id":151233},"_1115-小案例学生类","11.15 小案例：学生类",[97,151236,151238],{"className":30372,"code":151237,"language":30374,"meta":25,"style":25},"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",[103,151239,151240,151248,151257,151269,151279,151289,151299,151303,151312,151325,151329,151338,151344,151356,151368,151380,151392,151396,151400,151406,151416,151425,151435,151443,151451,151460,151464,151468,151476,151512,151516,151520,151545,151552],{"__ignoreMap":25},[106,151241,151242,151244,151246],{"class":108,"line":109},[106,151243,14687],{"class":112},[106,151245,7891],{"class":1955},[106,151247,3731],{"class":116},[106,151249,151250,151252,151254],{"class":108,"line":28},[106,151251,30795],{"class":112},[106,151253,30798],{"class":165},[106,151255,151256],{"class":116},"(self, student_id, name, age, score):\n",[106,151258,151259,151261,151264,151266],{"class":108,"line":1172},[106,151260,30839],{"class":165},[106,151262,151263],{"class":116},".student_id ",[106,151265,162],{"class":112},[106,151267,151268],{"class":116}," student_id\n",[106,151270,151271,151273,151275,151277],{"class":108,"line":1187},[106,151272,30839],{"class":165},[106,151274,149775],{"class":116},[106,151276,162],{"class":112},[106,151278,149780],{"class":116},[106,151280,151281,151283,151285,151287],{"class":108,"line":1193},[106,151282,30839],{"class":165},[106,151284,149787],{"class":116},[106,151286,162],{"class":112},[106,151288,149792],{"class":116},[106,151290,151291,151293,151295,151297],{"class":108,"line":1207},[106,151292,30839],{"class":165},[106,151294,149799],{"class":116},[106,151296,162],{"class":112},[106,151298,1571],{"class":116},[106,151300,151301],{"class":108,"line":1213},[106,151302,2392],{"emptyLinePlaceholder":33},[106,151304,151305,151307,151310],{"class":108,"line":1304},[106,151306,30795],{"class":112},[106,151308,151309],{"class":1955}," is_passed",[106,151311,30801],{"class":116},[106,151313,151314,151316,151318,151320,151322],{"class":108,"line":1310},[106,151315,14745],{"class":112},[106,151317,38867],{"class":165},[106,151319,149799],{"class":116},[106,151321,1702],{"class":112},[106,151323,151324],{"class":165}," 60\n",[106,151326,151327],{"class":108,"line":1322},[106,151328,2392],{"emptyLinePlaceholder":33},[106,151330,151331,151333,151336],{"class":108,"line":1604},[106,151332,30795],{"class":112},[106,151334,151335],{"class":1955}," to_dict",[106,151337,30801],{"class":116},[106,151339,151340,151342],{"class":108,"line":1609},[106,151341,14745],{"class":112},[106,151343,15565],{"class":116},[106,151345,151346,151349,151351,151353],{"class":108,"line":1615},[106,151347,151348],{"class":221},"            \"student_id\"",[106,151350,51431],{"class":116},[106,151352,30817],{"class":165},[106,151354,151355],{"class":116},".student_id,\n",[106,151357,151358,151361,151363,151365],{"class":108,"line":1620},[106,151359,151360],{"class":221},"            \"name\"",[106,151362,51431],{"class":116},[106,151364,30817],{"class":165},[106,151366,151367],{"class":116},".name,\n",[106,151369,151370,151373,151375,151377],{"class":108,"line":1634},[106,151371,151372],{"class":221},"            \"age\"",[106,151374,51431],{"class":116},[106,151376,30817],{"class":165},[106,151378,151379],{"class":116},".age,\n",[106,151381,151382,151385,151387,151389],{"class":108,"line":1639},[106,151383,151384],{"class":221},"            \"score\"",[106,151386,51431],{"class":116},[106,151388,30817],{"class":165},[106,151390,151391],{"class":116},".score,\n",[106,151393,151394],{"class":108,"line":1645},[106,151395,2521],{"class":116},[106,151397,151398],{"class":108,"line":1666},[106,151399,2392],{"emptyLinePlaceholder":33},[106,151401,151402,151404],{"class":108,"line":1671},[106,151403,150999],{"class":1955},[106,151405,151002],{"class":165},[106,151407,151408,151410,151413],{"class":108,"line":1685},[106,151409,30795],{"class":112},[106,151411,151412],{"class":1955}," from_dict",[106,151414,151415],{"class":116},"(cls, data):\n",[106,151417,151418,151420,151422],{"class":108,"line":1690},[106,151419,14745],{"class":112},[106,151421,151019],{"class":165},[106,151423,151424],{"class":116},"(\n",[106,151426,151427,151430,151433],{"class":108,"line":1719},[106,151428,151429],{"class":116},"            data[",[106,151431,151432],{"class":221},"\"student_id\"",[106,151434,87830],{"class":116},[106,151436,151437,151439,151441],{"class":108,"line":1724},[106,151438,151429],{"class":116},[106,151440,62673],{"class":221},[106,151442,87830],{"class":116},[106,151444,151445,151447,151449],{"class":108,"line":1741},[106,151446,151429],{"class":116},[106,151448,69118],{"class":221},[106,151450,87830],{"class":116},[106,151452,151453,151455,151458],{"class":108,"line":1746},[106,151454,151429],{"class":116},[106,151456,151457],{"class":221},"\"score\"",[106,151459,87830],{"class":116},[106,151461,151462],{"class":108,"line":1751},[106,151463,38120],{"class":116},[106,151465,151466],{"class":108,"line":1756},[106,151467,2392],{"emptyLinePlaceholder":33},[106,151469,151470,151472,151474],{"class":108,"line":1770},[106,151471,30795],{"class":112},[106,151473,149966],{"class":165},[106,151475,30801],{"class":116},[106,151477,151478,151480,151482,151484,151486,151489,151491,151494,151496,151498,151500,151502,151504,151506,151508,151510],{"class":108,"line":1775},[106,151479,14745],{"class":112},[106,151481,149975],{"class":112},[106,151483,368],{"class":221},[106,151485,149437],{"class":165},[106,151487,151488],{"class":116},".student_id",[106,151490,1063],{"class":165},[106,151492,151493],{"class":165}," {self",[106,151495,80295],{"class":116},[106,151497,1063],{"class":165},[106,151499,151493],{"class":165},[106,151501,80307],{"class":116},[106,151503,1063],{"class":165},[106,151505,151493],{"class":165},[106,151507,149847],{"class":116},[106,151509,1063],{"class":165},[106,151511,25127],{"class":221},[106,151513,151514],{"class":108,"line":2569},[106,151515,2392],{"emptyLinePlaceholder":33},[106,151517,151518],{"class":108,"line":2583},[106,151519,2392],{"emptyLinePlaceholder":33},[106,151521,151522,151524,151526,151528,151531,151533,151535,151537,151539,151541,151543],{"class":108,"line":2591},[106,151523,149466],{"class":116},[106,151525,162],{"class":112},[106,151527,149870],{"class":116},[106,151529,151530],{"class":221},"\"001\"",[106,151532,12428],{"class":116},[106,151534,149873],{"class":221},[106,151536,12428],{"class":116},[106,151538,767],{"class":165},[106,151540,12428],{"class":116},[106,151542,1106],{"class":165},[106,151544,123],{"class":116},[106,151546,151547,151549],{"class":108,"line":2596},[106,151548,30409],{"class":165},[106,151550,151551],{"class":116},"(student.is_passed())\n",[106,151553,151554,151556],{"class":108,"line":2602},[106,151555,30409],{"class":165},[106,151557,151558],{"class":116},"(student.to_dict())\n",[14,151560,151561,101003,151564,151567],{},[103,151562,151563],{},"to_dict()",[103,151565,151566],{},"from_dict()"," 适合对象与 JSON 数据之间转换。",[48,151569,151571],{"id":151570},"_1116-易错点","11.16 易错点",[60,151573,151574,151580,151586,151591,151594,151597],{},[63,151575,151576,151577,28379],{},"类名推荐使用大驼峰，如 ",[103,151578,151579],{},"StudentManager",[63,151581,151582,151583,151585],{},"方法第一个参数必须写 ",[103,151584,30817],{},"，调用时不用传。",[63,151587,151588,151590],{},[103,151589,30823],{}," 不是普通方法，它在创建对象时自动执行。",[63,151592,151593],{},"私有属性不是绝对安全，只是约定和名称改写。",[63,151595,151596],{},"不要为了面向对象而面向对象，简单脚本用函数就够。",[63,151598,151599],{},"类中方法太多时，说明职责可能过重。",[48,151601,151603],{"id":151602},"_1117-本章练习","11.17 本章练习",[60,151605,151606,151612,151618,151623,151636],{},[63,151607,151608,151609,151611],{},"定义 ",[103,151610,149553],{}," 类，包含姓名、年龄、成绩和自我介绍方法。",[63,151613,151608,151614,151617],{},[103,151615,151616],{},"Account"," 类，实现存款、取款、查询余额。",[63,151619,151608,151620,151622],{},[103,151621,17219],{}," 类，计算圆的周长和面积。",[63,151624,151608,151625,329,151628,151631,151632,151635],{},[103,151626,151627],{},"Dog",[103,151629,151630],{},"Cat"," 类，并用同一个函数调用它们的 ",[103,151633,151634],{},"speak()"," 方法。",[63,151637,104351,151638,151640,151641,28379],{},[103,151639,151124],{}," 定义一个商品类 ",[103,151642,151643],{},"Product",[5119,151645,151646],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":28,"depth":28,"links":151648},[151649,151650,151651,151652,151653,151654,151656,151657,151658,151659,151660,151661,151662,151666,151667,151668,151669],{"id":149317,"depth":28,"text":149318},{"id":149500,"depth":28,"text":149501},{"id":149564,"depth":28,"text":149565},{"id":149641,"depth":28,"text":149642},{"id":149740,"depth":28,"text":149741},{"id":149904,"depth":28,"text":151655},"11.6 str",{"id":150030,"depth":28,"text":150031},{"id":150296,"depth":28,"text":150297},{"id":150410,"depth":28,"text":150411},{"id":150565,"depth":28,"text":150566},{"id":150689,"depth":28,"text":150690},{"id":150805,"depth":28,"text":150806},{"id":150954,"depth":28,"text":150955,"children":151663},[151664,151665],{"id":150958,"depth":1172,"text":150959},{"id":151040,"depth":1172,"text":151041},{"id":151118,"depth":28,"text":151119},{"id":151233,"depth":28,"text":151234},{"id":151570,"depth":28,"text":151571},{"id":151602,"depth":28,"text":151603},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch11",{"title":149309,"description":30},"wiki\u002F2024-10-10-python教程\u002Fch11-面向对象基础","jI-8dVPoe9zfDV8hNTDJz4nf951g6PNIKIqDAy4hYic",{"id":151676,"title":151677,"body":151678,"description":30,"extension":31,"meta":154991,"navigation":33,"path":154992,"seo":154993,"stem":154994,"__hash__":154995},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线.md","12. 综合案例与复习路线",{"type":7,"value":151679,"toc":154967},[151680,151683,151687,151690,151693,151722,151725,151733,151737,151741,151744,151767,151770,151776,151780,153226,153229,153250,153254,153257,153269,153272,153456,153459,153585,153588,153592,153596,153732,153736,153822,153826,153908,153912,153949,153953,154142,154146,154149,154379,154383,154386,154567,154570,154574,154577,154583,154586,154612,154616,154619,154633,154636,154661,154664,154678,154681,154698,154701,154718,154721,154738,154742,154768,154772,154795,154799,154802,154804,154810,154812,154833,154836,154842,154848,154852,154855,154931,154934,154938,154964],[10,151681,151677],{"id":151682},"_12-综合案例与复习路线",[48,151684,151686],{"id":151685},"_121-综合项目应该练什么","12.1 综合项目应该练什么",[14,151688,151689],{},"学完基础语法后，不要只刷零散语法题，应该做小项目，把知识串起来。",[14,151691,151692],{},"一个合格的入门综合项目最好覆盖：",[60,151694,151695,151698,151701,151704,151707,151710,151713,151716,151719],{},[63,151696,151697],{},"输入输出。",[63,151699,151700],{},"判断和循环。",[63,151702,151703],{},"函数拆分。",[63,151705,151706],{},"列表、字典等容器。",[63,151708,151709],{},"文件持久化。",[63,151711,151712],{},"异常处理。",[63,151714,151715],{},"模块拆分。",[63,151717,151718],{},"可选：面向对象。",[63,151720,151721],{},"可选：数据可视化。",[14,151723,151724],{},"本章整理两个方向：",[60,151726,151727,151730],{},[63,151728,151729],{},"学生管理系统。",[63,151731,151732],{},"销售数据统计和可视化。",[48,151734,151736],{"id":151735},"_122-项目一学生管理系统","12.2 项目一：学生管理系统",[77,151738,151740],{"id":151739},"_1221-需求","12.2.1 需求",[14,151742,151743],{},"实现一个命令行学生管理系统：",[60,151745,151746,151749,151752,151755,151758,151761,151764],{},[63,151747,151748],{},"添加学生。",[63,151750,151751],{},"删除学生。",[63,151753,151754],{},"修改学生。",[63,151756,151757],{},"查询学生。",[63,151759,151760],{},"显示所有学生。",[63,151762,151763],{},"保存到 JSON 文件。",[63,151765,151766],{},"程序启动时自动读取 JSON 文件。",[14,151768,151769],{},"学生字段：",[97,151771,151774],{"className":151772,"code":151773,"language":5180,"meta":25},[5178],"学号 student_id\n姓名 name\n年龄 age\n成绩 score\n",[103,151775,151773],{"__ignoreMap":25},[48,151777,151779],{"id":151778},"_123-函数版学生管理系统","12.3 函数版学生管理系统",[97,151781,151783],{"className":30372,"code":151782,"language":30374,"meta":25,"style":25},"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",[103,151784,151785,151791,151801,151805,151819,151823,151827,151836,151848,151854,151858,151864,151895,151905,151912,151923,151929,151933,151937,151947,151978,152004,152008,152012,152021,152032,152043,152054,152065,152076,152087,152098,152102,152106,152116,152128,152144,152151,152158,152162,152166,152176,152184,152191,152204,152214,152225,152229,152233,152242,152250,152256,152268,152276,152287,152291,152295,152304,152320,152324,152331,152342,152347,152351,152367,152382,152397,152401,152406,152414,152422,152430,152438,152442,152447,152458,152462,152466,152475,152490,152500,152504,152516,152527,152531,152535,152540,152544,152555,152559,152563,152572,152587,152595,152599,152611,152621,152625,152629,152644,152657,152670,152674,152687,152699,152711,152715,152719,152730,152734,152738,152747,152762,152770,152774,152786,152796,152800,152804,152809,152813,152817,152827,152833,152855,152874,152893,152912,152917,152921,152925,152934,152942,152953,152957,152961,152987,152997,153002,153006,153010,153018,153028,153032,153040,153045,153061,153065,153079,153084,153098,153103,153116,153121,153134,153139,153152,153157,153170,153181,153185,153191,153202,153206,153210,153222],{"__ignoreMap":25},[106,151786,151787,151789],{"class":108,"line":109},[106,151788,30386],{"class":112},[106,151790,147076],{"class":116},[106,151792,151793,151795,151797,151799],{"class":108,"line":28},[106,151794,30731],{"class":112},[106,151796,108296],{"class":116},[106,151798,30386],{"class":112},[106,151800,108301],{"class":116},[106,151802,151803],{"class":108,"line":1172},[106,151804,2392],{"emptyLinePlaceholder":33},[106,151806,151807,151810,151812,151814,151817],{"class":108,"line":1187},[106,151808,151809],{"class":165},"DATA_FILE",[106,151811,13557],{"class":112},[106,151813,108530],{"class":116},[106,151815,151816],{"class":221},"\"students.json\"",[106,151818,123],{"class":116},[106,151820,151821],{"class":108,"line":1193},[106,151822,2392],{"emptyLinePlaceholder":33},[106,151824,151825],{"class":108,"line":1207},[106,151826,2392],{"emptyLinePlaceholder":33},[106,151828,151829,151831,151834],{"class":108,"line":1213},[106,151830,31941],{"class":112},[106,151832,151833],{"class":1955}," load_students",[106,151835,31947],{"class":116},[106,151837,151838,151840,151842,151845],{"class":108,"line":1304},[106,151839,3093],{"class":112},[106,151841,38924],{"class":112},[106,151843,151844],{"class":165}," DATA_FILE",[106,151846,151847],{"class":116},".exists():\n",[106,151849,151850,151852],{"class":108,"line":1310},[106,151851,14745],{"class":112},[106,151853,51832],{"class":116},[106,151855,151856],{"class":108,"line":1322},[106,151857,2392],{"emptyLinePlaceholder":33},[106,151859,151860,151862],{"class":108,"line":1604},[106,151861,125769],{"class":112},[106,151863,3731],{"class":116},[106,151865,151866,151869,151871,151873,151875,151877,151879,151881,151883,151885,151887,151889,151891,151893],{"class":108,"line":1609},[106,151867,151868],{"class":112},"        with",[106,151870,146776],{"class":165},[106,151872,117],{"class":116},[106,151874,151809],{"class":165},[106,151876,12428],{"class":116},[106,151878,146786],{"class":221},[106,151880,12428],{"class":116},[106,151882,146791],{"class":5209},[106,151884,162],{"class":112},[106,151886,146796],{"class":221},[106,151888,13707],{"class":116},[106,151890,31377],{"class":112},[106,151892,148138],{"class":5209},[106,151894,3731],{"class":116},[106,151896,151897,151899,151901,151903],{"class":108,"line":1615},[106,151898,15725],{"class":112},[106,151900,148149],{"class":116},[106,151902,45348],{"class":5209},[106,151904,123],{"class":116},[106,151906,151907,151909],{"class":108,"line":1620},[106,151908,125797],{"class":112},[106,151910,151911],{"class":116}," json.JSONDecodeError:\n",[106,151913,151914,151916,151918,151921],{"class":108,"line":1634},[106,151915,32445],{"class":165},[106,151917,117],{"class":116},[106,151919,151920],{"class":221},"\"数据文件格式错误，已使用空数据启动\"",[106,151922,123],{"class":116},[106,151924,151925,151927],{"class":108,"line":1639},[106,151926,14745],{"class":112},[106,151928,51832],{"class":116},[106,151930,151931],{"class":108,"line":1645},[106,151932,2392],{"emptyLinePlaceholder":33},[106,151934,151935],{"class":108,"line":1666},[106,151936,2392],{"emptyLinePlaceholder":33},[106,151938,151939,151941,151944],{"class":108,"line":1671},[106,151940,31941],{"class":112},[106,151942,151943],{"class":1955}," save_students",[106,151945,151946],{"class":116},"(students):\n",[106,151948,151949,151951,151953,151955,151957,151959,151962,151964,151966,151968,151970,151972,151974,151976],{"class":108,"line":1685},[106,151950,34172],{"class":112},[106,151952,146776],{"class":165},[106,151954,117],{"class":116},[106,151956,151809],{"class":165},[106,151958,12428],{"class":116},[106,151960,151961],{"class":221},"\"w\"",[106,151963,12428],{"class":116},[106,151965,146791],{"class":5209},[106,151967,162],{"class":112},[106,151969,146796],{"class":221},[106,151971,13707],{"class":116},[106,151973,31377],{"class":112},[106,151975,148138],{"class":5209},[106,151977,3731],{"class":116},[106,151979,151980,151983,151985,151987,151989,151991,151993,151995,151998,152000,152002],{"class":108,"line":1690},[106,151981,151982],{"class":116},"        json.dump(students, ",[106,151984,45348],{"class":5209},[106,151986,12428],{"class":116},[106,151988,147122],{"class":5209},[106,151990,162],{"class":112},[106,151992,33981],{"class":165},[106,151994,12428],{"class":116},[106,151996,151997],{"class":5209},"indent",[106,151999,162],{"class":112},[106,152001,194],{"class":165},[106,152003,123],{"class":116},[106,152005,152006],{"class":108,"line":1719},[106,152007,2392],{"emptyLinePlaceholder":33},[106,152009,152010],{"class":108,"line":1724},[106,152011,2392],{"emptyLinePlaceholder":33},[106,152013,152014,152016,152019],{"class":108,"line":1741},[106,152015,31941],{"class":112},[106,152017,152018],{"class":1955}," show_menu",[106,152020,31947],{"class":116},[106,152022,152023,152025,152027,152030],{"class":108,"line":1746},[106,152024,31293],{"class":165},[106,152026,117],{"class":116},[106,152028,152029],{"class":221},"\"====== 学生管理系统 ======\"",[106,152031,123],{"class":116},[106,152033,152034,152036,152038,152041],{"class":108,"line":1751},[106,152035,31293],{"class":165},[106,152037,117],{"class":116},[106,152039,152040],{"class":221},"\"1. 添加学生\"",[106,152042,123],{"class":116},[106,152044,152045,152047,152049,152052],{"class":108,"line":1756},[106,152046,31293],{"class":165},[106,152048,117],{"class":116},[106,152050,152051],{"class":221},"\"2. 删除学生\"",[106,152053,123],{"class":116},[106,152055,152056,152058,152060,152063],{"class":108,"line":1770},[106,152057,31293],{"class":165},[106,152059,117],{"class":116},[106,152061,152062],{"class":221},"\"3. 修改学生\"",[106,152064,123],{"class":116},[106,152066,152067,152069,152071,152074],{"class":108,"line":1775},[106,152068,31293],{"class":165},[106,152070,117],{"class":116},[106,152072,152073],{"class":221},"\"4. 查询学生\"",[106,152075,123],{"class":116},[106,152077,152078,152080,152082,152085],{"class":108,"line":2569},[106,152079,31293],{"class":165},[106,152081,117],{"class":116},[106,152083,152084],{"class":221},"\"5. 显示所有学生\"",[106,152086,123],{"class":116},[106,152088,152089,152091,152093,152096],{"class":108,"line":2583},[106,152090,31293],{"class":165},[106,152092,117],{"class":116},[106,152094,152095],{"class":221},"\"0. 退出系统\"",[106,152097,123],{"class":116},[106,152099,152100],{"class":108,"line":2591},[106,152101,2392],{"emptyLinePlaceholder":33},[106,152103,152104],{"class":108,"line":2596},[106,152105,2392],{"emptyLinePlaceholder":33},[106,152107,152108,152110,152113],{"class":108,"line":2602},[106,152109,31941],{"class":112},[106,152111,152112],{"class":1955}," find_student",[106,152114,152115],{"class":116},"(students, student_id):\n",[106,152117,152118,152120,152123,152125],{"class":108,"line":2608},[106,152119,3193],{"class":112},[106,152121,152122],{"class":116}," student ",[106,152124,26037],{"class":112},[106,152126,152127],{"class":116}," students:\n",[106,152129,152130,152132,152135,152137,152139,152141],{"class":108,"line":2613},[106,152131,2489],{"class":112},[106,152133,152134],{"class":116}," student[",[106,152136,151432],{"class":221},[106,152138,4435],{"class":116},[106,152140,2941],{"class":112},[106,152142,152143],{"class":116}," student_id:\n",[106,152145,152146,152148],{"class":108,"line":7941},[106,152147,15725],{"class":112},[106,152149,152150],{"class":116}," student\n",[106,152152,152153,152155],{"class":108,"line":7965},[106,152154,4082],{"class":112},[106,152156,152157],{"class":165}," None\n",[106,152159,152160],{"class":108,"line":7970},[106,152161,2392],{"emptyLinePlaceholder":33},[106,152163,152164],{"class":108,"line":7976},[106,152165,2392],{"emptyLinePlaceholder":33},[106,152167,152168,152170,152173],{"class":108,"line":8003},[106,152169,31941],{"class":112},[106,152171,152172],{"class":1955}," input_int",[106,152174,152175],{"class":116},"(prompt):\n",[106,152177,152178,152180,152182],{"class":108,"line":8008},[106,152179,2243],{"class":112},[106,152181,95277],{"class":165},[106,152183,3731],{"class":116},[106,152185,152186,152189],{"class":108,"line":8014},[106,152187,152188],{"class":112},"        try",[106,152190,3731],{"class":116},[106,152192,152193,152195,152197,152199,152201],{"class":108,"line":8026},[106,152194,15725],{"class":112},[106,152196,2374],{"class":165},[106,152198,117],{"class":116},[106,152200,53815],{"class":165},[106,152202,152203],{"class":116},"(prompt))\n",[106,152205,152206,152209,152212],{"class":108,"line":8038},[106,152207,152208],{"class":112},"        except",[106,152210,152211],{"class":165}," ValueError",[106,152213,3731],{"class":116},[106,152215,152216,152218,152220,152223],{"class":108,"line":8050},[106,152217,34644],{"class":165},[106,152219,117],{"class":116},[106,152221,152222],{"class":221},"\"请输入整数\"",[106,152224,123],{"class":116},[106,152226,152227],{"class":108,"line":9709},[106,152228,2392],{"emptyLinePlaceholder":33},[106,152230,152231],{"class":108,"line":9734},[106,152232,2392],{"emptyLinePlaceholder":33},[106,152234,152235,152237,152240],{"class":108,"line":9757},[106,152236,31941],{"class":112},[106,152238,152239],{"class":1955}," input_float",[106,152241,152175],{"class":116},[106,152243,152244,152246,152248],{"class":108,"line":9781},[106,152245,2243],{"class":112},[106,152247,95277],{"class":165},[106,152249,3731],{"class":116},[106,152251,152252,152254],{"class":108,"line":9786},[106,152253,152188],{"class":112},[106,152255,3731],{"class":116},[106,152257,152258,152260,152262,152264,152266],{"class":108,"line":9791},[106,152259,15725],{"class":112},[106,152261,109782],{"class":165},[106,152263,117],{"class":116},[106,152265,53815],{"class":165},[106,152267,152203],{"class":116},[106,152269,152270,152272,152274],{"class":108,"line":9796},[106,152271,152208],{"class":112},[106,152273,152211],{"class":165},[106,152275,3731],{"class":116},[106,152277,152278,152280,152282,152285],{"class":108,"line":9805},[106,152279,34644],{"class":165},[106,152281,117],{"class":116},[106,152283,152284],{"class":221},"\"请输入数字\"",[106,152286,123],{"class":116},[106,152288,152289],{"class":108,"line":9810},[106,152290,2392],{"emptyLinePlaceholder":33},[106,152292,152293],{"class":108,"line":9816},[106,152294,2392],{"emptyLinePlaceholder":33},[106,152296,152297,152299,152302],{"class":108,"line":9837},[106,152298,31941],{"class":112},[106,152300,152301],{"class":1955}," add_student",[106,152303,151946],{"class":116},[106,152305,152306,152309,152311,152313,152315,152318],{"class":108,"line":9843},[106,152307,152308],{"class":116},"    student_id ",[106,152310,162],{"class":112},[106,152312,60599],{"class":165},[106,152314,117],{"class":116},[106,152316,152317],{"class":221},"\"请输入学号:\"",[106,152319,123],{"class":116},[106,152321,152322],{"class":108,"line":9857},[106,152323,2392],{"emptyLinePlaceholder":33},[106,152325,152326,152328],{"class":108,"line":9863},[106,152327,3093],{"class":112},[106,152329,152330],{"class":116}," find_student(students, student_id):\n",[106,152332,152333,152335,152337,152340],{"class":108,"line":9890},[106,152334,32445],{"class":165},[106,152336,117],{"class":116},[106,152338,152339],{"class":221},"\"学号已存在\"",[106,152341,123],{"class":116},[106,152343,152344],{"class":108,"line":9899},[106,152345,152346],{"class":112},"        return\n",[106,152348,152349],{"class":108,"line":9905},[106,152350,2392],{"emptyLinePlaceholder":33},[106,152352,152353,152356,152358,152360,152362,152365],{"class":108,"line":9913},[106,152354,152355],{"class":116},"    name ",[106,152357,162],{"class":112},[106,152359,60599],{"class":165},[106,152361,117],{"class":116},[106,152363,152364],{"class":221},"\"请输入姓名:\"",[106,152366,123],{"class":116},[106,152368,152369,152372,152374,152377,152380],{"class":108,"line":9918},[106,152370,152371],{"class":116},"    age ",[106,152373,162],{"class":112},[106,152375,152376],{"class":116}," input_int(",[106,152378,152379],{"class":221},"\"请输入年龄:\"",[106,152381,123],{"class":116},[106,152383,152384,152387,152389,152392,152395],{"class":108,"line":16597},[106,152385,152386],{"class":116},"    score ",[106,152388,162],{"class":112},[106,152390,152391],{"class":116}," input_float(",[106,152393,152394],{"class":221},"\"请输入成绩:\"",[106,152396,123],{"class":116},[106,152398,152399],{"class":108,"line":16603},[106,152400,2392],{"emptyLinePlaceholder":33},[106,152402,152403],{"class":108,"line":16626},[106,152404,152405],{"class":116},"    students.append({\n",[106,152407,152408,152411],{"class":108,"line":16632},[106,152409,152410],{"class":221},"        \"student_id\"",[106,152412,152413],{"class":116},": student_id,\n",[106,152415,152416,152419],{"class":108,"line":16655},[106,152417,152418],{"class":221},"        \"name\"",[106,152420,152421],{"class":116},": name,\n",[106,152423,152424,152427],{"class":108,"line":16669},[106,152425,152426],{"class":221},"        \"age\"",[106,152428,152429],{"class":116},": age,\n",[106,152431,152432,152435],{"class":108,"line":16689},[106,152433,152434],{"class":221},"        \"score\"",[106,152436,152437],{"class":116},": score,\n",[106,152439,152440],{"class":108,"line":16695},[106,152441,33455],{"class":116},[106,152443,152444],{"class":108,"line":16706},[106,152445,152446],{"class":116},"    save_students(students)\n",[106,152448,152449,152451,152453,152456],{"class":108,"line":16729},[106,152450,31293],{"class":165},[106,152452,117],{"class":116},[106,152454,152455],{"class":221},"\"添加成功\"",[106,152457,123],{"class":116},[106,152459,152460],{"class":108,"line":16751},[106,152461,2392],{"emptyLinePlaceholder":33},[106,152463,152464],{"class":108,"line":16756},[106,152465,2392],{"emptyLinePlaceholder":33},[106,152467,152468,152470,152473],{"class":108,"line":16762},[106,152469,31941],{"class":112},[106,152471,152472],{"class":1955}," delete_student",[106,152474,151946],{"class":116},[106,152476,152477,152479,152481,152483,152485,152488],{"class":108,"line":16776},[106,152478,152308],{"class":116},[106,152480,162],{"class":112},[106,152482,60599],{"class":165},[106,152484,117],{"class":116},[106,152486,152487],{"class":221},"\"请输入要删除的学号:\"",[106,152489,123],{"class":116},[106,152491,152492,152495,152497],{"class":108,"line":16789},[106,152493,152494],{"class":116},"    student ",[106,152496,162],{"class":112},[106,152498,152499],{"class":116}," find_student(students, student_id)\n",[106,152501,152502],{"class":108,"line":16794},[106,152503,2392],{"emptyLinePlaceholder":33},[106,152505,152506,152508,152510,152512,152514],{"class":108,"line":16808},[106,152507,3093],{"class":112},[106,152509,152122],{"class":116},[106,152511,38921],{"class":112},[106,152513,38927],{"class":165},[106,152515,3731],{"class":116},[106,152517,152518,152520,152522,152525],{"class":108,"line":16813},[106,152519,32445],{"class":165},[106,152521,117],{"class":116},[106,152523,152524],{"class":221},"\"学生不存在\"",[106,152526,123],{"class":116},[106,152528,152529],{"class":108,"line":16819},[106,152530,152346],{"class":112},[106,152532,152533],{"class":108,"line":16824},[106,152534,2392],{"emptyLinePlaceholder":33},[106,152536,152537],{"class":108,"line":16838},[106,152538,152539],{"class":116},"    students.remove(student)\n",[106,152541,152542],{"class":108,"line":16843},[106,152543,152446],{"class":116},[106,152545,152546,152548,152550,152553],{"class":108,"line":16848},[106,152547,31293],{"class":165},[106,152549,117],{"class":116},[106,152551,152552],{"class":221},"\"删除成功\"",[106,152554,123],{"class":116},[106,152556,152557],{"class":108,"line":16862},[106,152558,2392],{"emptyLinePlaceholder":33},[106,152560,152561],{"class":108,"line":16874},[106,152562,2392],{"emptyLinePlaceholder":33},[106,152564,152565,152567,152570],{"class":108,"line":16879},[106,152566,31941],{"class":112},[106,152568,152569],{"class":1955}," update_student",[106,152571,151946],{"class":116},[106,152573,152574,152576,152578,152580,152582,152585],{"class":108,"line":16892},[106,152575,152308],{"class":116},[106,152577,162],{"class":112},[106,152579,60599],{"class":165},[106,152581,117],{"class":116},[106,152583,152584],{"class":221},"\"请输入要修改的学号:\"",[106,152586,123],{"class":116},[106,152588,152589,152591,152593],{"class":108,"line":16897},[106,152590,152494],{"class":116},[106,152592,162],{"class":112},[106,152594,152499],{"class":116},[106,152596,152597],{"class":108,"line":16902},[106,152598,2392],{"emptyLinePlaceholder":33},[106,152600,152601,152603,152605,152607,152609],{"class":108,"line":16907},[106,152602,3093],{"class":112},[106,152604,152122],{"class":116},[106,152606,38921],{"class":112},[106,152608,38927],{"class":165},[106,152610,3731],{"class":116},[106,152612,152613,152615,152617,152619],{"class":108,"line":16920},[106,152614,32445],{"class":165},[106,152616,117],{"class":116},[106,152618,152524],{"class":221},[106,152620,123],{"class":116},[106,152622,152623],{"class":108,"line":16925},[106,152624,152346],{"class":112},[106,152626,152627],{"class":108,"line":32627},[106,152628,2392],{"emptyLinePlaceholder":33},[106,152630,152631,152633,152635,152637,152639,152642],{"class":108,"line":32633},[106,152632,152355],{"class":116},[106,152634,162],{"class":112},[106,152636,60599],{"class":165},[106,152638,117],{"class":116},[106,152640,152641],{"class":221},"\"请输入新姓名:\"",[106,152643,123],{"class":116},[106,152645,152646,152648,152650,152652,152655],{"class":108,"line":32639},[106,152647,152371],{"class":116},[106,152649,162],{"class":112},[106,152651,152376],{"class":116},[106,152653,152654],{"class":221},"\"请输入新年龄:\"",[106,152656,123],{"class":116},[106,152658,152659,152661,152663,152665,152668],{"class":108,"line":32645},[106,152660,152386],{"class":116},[106,152662,162],{"class":112},[106,152664,152391],{"class":116},[106,152666,152667],{"class":221},"\"请输入新成绩:\"",[106,152669,123],{"class":116},[106,152671,152672],{"class":108,"line":32651},[106,152673,2392],{"emptyLinePlaceholder":33},[106,152675,152676,152679,152681,152683,152685],{"class":108,"line":32662},[106,152677,152678],{"class":116},"    student[",[106,152680,62673],{"class":221},[106,152682,4435],{"class":116},[106,152684,162],{"class":112},[106,152686,149780],{"class":116},[106,152688,152689,152691,152693,152695,152697],{"class":108,"line":32668},[106,152690,152678],{"class":116},[106,152692,69118],{"class":221},[106,152694,4435],{"class":116},[106,152696,162],{"class":112},[106,152698,149792],{"class":116},[106,152700,152701,152703,152705,152707,152709],{"class":108,"line":32688},[106,152702,152678],{"class":116},[106,152704,151457],{"class":221},[106,152706,4435],{"class":116},[106,152708,162],{"class":112},[106,152710,1571],{"class":116},[106,152712,152713],{"class":108,"line":32694},[106,152714,2392],{"emptyLinePlaceholder":33},[106,152716,152717],{"class":108,"line":32705},[106,152718,152446],{"class":116},[106,152720,152721,152723,152725,152728],{"class":108,"line":32711},[106,152722,31293],{"class":165},[106,152724,117],{"class":116},[106,152726,152727],{"class":221},"\"修改成功\"",[106,152729,123],{"class":116},[106,152731,152732],{"class":108,"line":32717},[106,152733,2392],{"emptyLinePlaceholder":33},[106,152735,152736],{"class":108,"line":32723},[106,152737,2392],{"emptyLinePlaceholder":33},[106,152739,152740,152742,152745],{"class":108,"line":32729},[106,152741,31941],{"class":112},[106,152743,152744],{"class":1955}," query_student",[106,152746,151946],{"class":116},[106,152748,152749,152751,152753,152755,152757,152760],{"class":108,"line":32735},[106,152750,152308],{"class":116},[106,152752,162],{"class":112},[106,152754,60599],{"class":165},[106,152756,117],{"class":116},[106,152758,152759],{"class":221},"\"请输入要查询的学号:\"",[106,152761,123],{"class":116},[106,152763,152764,152766,152768],{"class":108,"line":32741},[106,152765,152494],{"class":116},[106,152767,162],{"class":112},[106,152769,152499],{"class":116},[106,152771,152772],{"class":108,"line":32747},[106,152773,2392],{"emptyLinePlaceholder":33},[106,152775,152776,152778,152780,152782,152784],{"class":108,"line":32767},[106,152777,3093],{"class":112},[106,152779,152122],{"class":116},[106,152781,38921],{"class":112},[106,152783,38927],{"class":165},[106,152785,3731],{"class":116},[106,152787,152788,152790,152792,152794],{"class":108,"line":32773},[106,152789,32445],{"class":165},[106,152791,117],{"class":116},[106,152793,152524],{"class":221},[106,152795,123],{"class":116},[106,152797,152798],{"class":108,"line":32789},[106,152799,152346],{"class":112},[106,152801,152802],{"class":108,"line":32795},[106,152803,2392],{"emptyLinePlaceholder":33},[106,152805,152806],{"class":108,"line":32809},[106,152807,152808],{"class":116},"    print_student(student)\n",[106,152810,152811],{"class":108,"line":32815},[106,152812,2392],{"emptyLinePlaceholder":33},[106,152814,152815],{"class":108,"line":32830},[106,152816,2392],{"emptyLinePlaceholder":33},[106,152818,152819,152821,152824],{"class":108,"line":32836},[106,152820,31941],{"class":112},[106,152822,152823],{"class":1955}," print_student",[106,152825,152826],{"class":116},"(student):\n",[106,152828,152829,152831],{"class":108,"line":32845},[106,152830,31293],{"class":165},[106,152832,151424],{"class":116},[106,152834,152835,152838,152840,152842,152845,152848,152850,152853],{"class":108,"line":32851},[106,152836,152837],{"class":112},"        f",[106,152839,368],{"class":221},[106,152841,1013],{"class":165},[106,152843,152844],{"class":116},"student[",[106,152846,152847],{"class":221},"'student_id'",[106,152849,1057],{"class":116},[106,152851,152852],{"class":165},"}\\t",[106,152854,25127],{"class":221},[106,152856,152857,152859,152861,152863,152865,152868,152870,152872],{"class":108,"line":32860},[106,152858,152837],{"class":112},[106,152860,368],{"class":221},[106,152862,1013],{"class":165},[106,152864,152844],{"class":116},[106,152866,152867],{"class":221},"'name'",[106,152869,1057],{"class":116},[106,152871,152852],{"class":165},[106,152873,25127],{"class":221},[106,152875,152876,152878,152880,152882,152884,152887,152889,152891],{"class":108,"line":32866},[106,152877,152837],{"class":112},[106,152879,368],{"class":221},[106,152881,1013],{"class":165},[106,152883,152844],{"class":116},[106,152885,152886],{"class":221},"'age'",[106,152888,1057],{"class":116},[106,152890,152852],{"class":165},[106,152892,25127],{"class":221},[106,152894,152895,152897,152899,152901,152903,152906,152908,152910],{"class":108,"line":32872},[106,152896,152837],{"class":112},[106,152898,368],{"class":221},[106,152900,1013],{"class":165},[106,152902,152844],{"class":116},[106,152904,152905],{"class":221},"'score'",[106,152907,1057],{"class":116},[106,152909,1063],{"class":165},[106,152911,25127],{"class":221},[106,152913,152914],{"class":108,"line":32881},[106,152915,152916],{"class":116},"    )\n",[106,152918,152919],{"class":108,"line":32887},[106,152920,2392],{"emptyLinePlaceholder":33},[106,152922,152923],{"class":108,"line":32898},[106,152924,2392],{"emptyLinePlaceholder":33},[106,152926,152927,152929,152932],{"class":108,"line":32904},[106,152928,31941],{"class":112},[106,152930,152931],{"class":1955}," show_all_students",[106,152933,151946],{"class":116},[106,152935,152936,152938,152940],{"class":108,"line":32923},[106,152937,3093],{"class":112},[106,152939,38924],{"class":112},[106,152941,152127],{"class":116},[106,152943,152944,152946,152948,152951],{"class":108,"line":32929},[106,152945,32445],{"class":165},[106,152947,117],{"class":116},[106,152949,152950],{"class":221},"\"暂无学生\"",[106,152952,123],{"class":116},[106,152954,152955],{"class":108,"line":32940},[106,152956,152346],{"class":112},[106,152958,152959],{"class":108,"line":32946},[106,152960,2392],{"emptyLinePlaceholder":33},[106,152962,152963,152965,152967,152970,152972,152975,152977,152980,152982,152985],{"class":108,"line":32966},[106,152964,31293],{"class":165},[106,152966,117],{"class":116},[106,152968,152969],{"class":221},"\"学号",[106,152971,1223],{"class":165},[106,152973,152974],{"class":221},"姓名",[106,152976,1223],{"class":165},[106,152978,152979],{"class":221},"年龄",[106,152981,1223],{"class":165},[106,152983,152984],{"class":221},"成绩\"",[106,152986,123],{"class":116},[106,152988,152989,152991,152993,152995],{"class":108,"line":32982},[106,152990,3193],{"class":112},[106,152992,152122],{"class":116},[106,152994,26037],{"class":112},[106,152996,152127],{"class":116},[106,152998,152999],{"class":108,"line":32988},[106,153000,153001],{"class":116},"        print_student(student)\n",[106,153003,153004],{"class":108,"line":33002},[106,153005,2392],{"emptyLinePlaceholder":33},[106,153007,153008],{"class":108,"line":33008},[106,153009,2392],{"emptyLinePlaceholder":33},[106,153011,153012,153014,153016],{"class":108,"line":33014},[106,153013,31941],{"class":112},[106,153015,1965],{"class":1955},[106,153017,31947],{"class":116},[106,153019,153020,153023,153025],{"class":108,"line":33025},[106,153021,153022],{"class":116},"    students ",[106,153024,162],{"class":112},[106,153026,153027],{"class":116}," load_students()\n",[106,153029,153030],{"class":108,"line":33031},[106,153031,2392],{"emptyLinePlaceholder":33},[106,153033,153034,153036,153038],{"class":108,"line":33037},[106,153035,2243],{"class":112},[106,153037,95277],{"class":165},[106,153039,3731],{"class":116},[106,153041,153042],{"class":108,"line":33047},[106,153043,153044],{"class":116},"        show_menu()\n",[106,153046,153047,153050,153052,153054,153056,153059],{"class":108,"line":33053},[106,153048,153049],{"class":116},"        choice ",[106,153051,162],{"class":112},[106,153053,60599],{"class":165},[106,153055,117],{"class":116},[106,153057,153058],{"class":221},"\"请输入操作:\"",[106,153060,123],{"class":116},[106,153062,153063],{"class":108,"line":33064},[106,153064,2392],{"emptyLinePlaceholder":33},[106,153066,153067,153069,153072,153074,153077],{"class":108,"line":33070},[106,153068,2489],{"class":112},[106,153070,153071],{"class":116}," choice ",[106,153073,2941],{"class":112},[106,153075,153076],{"class":221}," \"1\"",[106,153078,3731],{"class":116},[106,153080,153081],{"class":108,"line":33080},[106,153082,153083],{"class":116},"            add_student(students)\n",[106,153085,153086,153089,153091,153093,153096],{"class":108,"line":33085},[106,153087,153088],{"class":112},"        elif",[106,153090,153071],{"class":116},[106,153092,2941],{"class":112},[106,153094,153095],{"class":221}," \"2\"",[106,153097,3731],{"class":116},[106,153099,153100],{"class":108,"line":33091},[106,153101,153102],{"class":116},"            delete_student(students)\n",[106,153104,153105,153107,153109,153111,153114],{"class":108,"line":33140},[106,153106,153088],{"class":112},[106,153108,153071],{"class":116},[106,153110,2941],{"class":112},[106,153112,153113],{"class":221}," \"3\"",[106,153115,3731],{"class":116},[106,153117,153118],{"class":108,"line":33187},[106,153119,153120],{"class":116},"            update_student(students)\n",[106,153122,153123,153125,153127,153129,153132],{"class":108,"line":33192},[106,153124,153088],{"class":112},[106,153126,153071],{"class":116},[106,153128,2941],{"class":112},[106,153130,153131],{"class":221}," \"4\"",[106,153133,3731],{"class":116},[106,153135,153136],{"class":108,"line":33198},[106,153137,153138],{"class":116},"            query_student(students)\n",[106,153140,153141,153143,153145,153147,153150],{"class":108,"line":33217},[106,153142,153088],{"class":112},[106,153144,153071],{"class":116},[106,153146,2941],{"class":112},[106,153148,153149],{"class":221}," \"5\"",[106,153151,3731],{"class":116},[106,153153,153154],{"class":108,"line":33223},[106,153155,153156],{"class":116},"            show_all_students(students)\n",[106,153158,153159,153161,153163,153165,153168],{"class":108,"line":33243},[106,153160,153088],{"class":112},[106,153162,153071],{"class":116},[106,153164,2941],{"class":112},[106,153166,153167],{"class":221}," \"0\"",[106,153169,3731],{"class":116},[106,153171,153172,153174,153176,153179],{"class":108,"line":33249},[106,153173,34644],{"class":165},[106,153175,117],{"class":116},[106,153177,153178],{"class":221},"\"退出系统\"",[106,153180,123],{"class":116},[106,153182,153183],{"class":108,"line":33255},[106,153184,115083],{"class":112},[106,153186,153187,153189],{"class":108,"line":33265},[106,153188,2526],{"class":112},[106,153190,3731],{"class":116},[106,153192,153193,153195,153197,153200],{"class":108,"line":33270},[106,153194,34644],{"class":165},[106,153196,117],{"class":116},[106,153198,153199],{"class":221},"\"输入错误\"",[106,153201,123],{"class":116},[106,153203,153204],{"class":108,"line":33276},[106,153205,2392],{"emptyLinePlaceholder":33},[106,153207,153208],{"class":108,"line":33292},[106,153209,2392],{"emptyLinePlaceholder":33},[106,153211,153212,153214,153216,153218,153220],{"class":108,"line":33337},[106,153213,1523],{"class":112},[106,153215,31214],{"class":165},[106,153217,101544],{"class":112},[106,153219,101547],{"class":221},[106,153221,3731],{"class":116},[106,153223,153224],{"class":108,"line":33343},[106,153225,101554],{"class":116},[14,153227,153228],{},"这个项目串联了：",[60,153230,153231,153234,153237,153240,153243,153245],{},[63,153232,153233],{},"菜单循环。",[63,153235,153236],{},"函数封装。",[63,153238,153239],{},"列表字典。",[63,153241,153242],{},"JSON 读写。",[63,153244,151712],{},[63,153246,153247,28379],{},[103,153248,153249],{},"if __name__ == \"__main__\"",[48,153251,153253],{"id":153252},"_124-面向对象版设计思路","12.4 面向对象版设计思路",[14,153255,153256],{},"可以进一步拆成两个类：",[60,153258,153259,153264],{},[63,153260,153261,153263],{},[103,153262,149553],{},"：表示单个学生。",[63,153265,153266,153268],{},[103,153267,151579],{},"：负责学生增删改查和文件保存。",[14,153270,153271],{},"示意代码：",[97,153273,153275],{"className":30372,"code":153274,"language":30374,"meta":25,"style":25},"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",[103,153276,153277,153287,153291,153295,153299,153307,153314,153320,153326,153332,153336,153344,153350,153360,153370,153380,153390,153394,153398,153404,153412,153420,153428,153436,153444,153452],{"__ignoreMap":25},[106,153278,153279,153281,153283,153285],{"class":108,"line":109},[106,153280,30731],{"class":112},[106,153282,151137],{"class":116},[106,153284,30386],{"class":112},[106,153286,151142],{"class":116},[106,153288,153289],{"class":108,"line":28},[106,153290,2392],{"emptyLinePlaceholder":33},[106,153292,153293],{"class":108,"line":1172},[106,153294,2392],{"emptyLinePlaceholder":33},[106,153296,153297],{"class":108,"line":1187},[106,153298,151155],{"class":1955},[106,153300,153301,153303,153305],{"class":108,"line":1193},[106,153302,14687],{"class":112},[106,153304,7891],{"class":1955},[106,153306,3731],{"class":116},[106,153308,153309,153312],{"class":108,"line":1207},[106,153310,153311],{"class":116},"    student_id: ",[106,153313,151171],{"class":165},[106,153315,153316,153318],{"class":108,"line":1213},[106,153317,151168],{"class":116},[106,153319,151171],{"class":165},[106,153321,153322,153324],{"class":108,"line":1304},[106,153323,151176],{"class":116},[106,153325,151179],{"class":165},[106,153327,153328,153330],{"class":108,"line":1310},[106,153329,151184],{"class":116},[106,153331,151187],{"class":165},[106,153333,153334],{"class":108,"line":1322},[106,153335,2392],{"emptyLinePlaceholder":33},[106,153337,153338,153340,153342],{"class":108,"line":1604},[106,153339,30795],{"class":112},[106,153341,151335],{"class":1955},[106,153343,30801],{"class":116},[106,153345,153346,153348],{"class":108,"line":1609},[106,153347,14745],{"class":112},[106,153349,15565],{"class":116},[106,153351,153352,153354,153356,153358],{"class":108,"line":1615},[106,153353,151348],{"class":221},[106,153355,51431],{"class":116},[106,153357,30817],{"class":165},[106,153359,151355],{"class":116},[106,153361,153362,153364,153366,153368],{"class":108,"line":1620},[106,153363,151360],{"class":221},[106,153365,51431],{"class":116},[106,153367,30817],{"class":165},[106,153369,151367],{"class":116},[106,153371,153372,153374,153376,153378],{"class":108,"line":1634},[106,153373,151372],{"class":221},[106,153375,51431],{"class":116},[106,153377,30817],{"class":165},[106,153379,151379],{"class":116},[106,153381,153382,153384,153386,153388],{"class":108,"line":1639},[106,153383,151384],{"class":221},[106,153385,51431],{"class":116},[106,153387,30817],{"class":165},[106,153389,151391],{"class":116},[106,153391,153392],{"class":108,"line":1645},[106,153393,2521],{"class":116},[106,153395,153396],{"class":108,"line":1666},[106,153397,2392],{"emptyLinePlaceholder":33},[106,153399,153400,153402],{"class":108,"line":1671},[106,153401,150999],{"class":1955},[106,153403,151002],{"class":165},[106,153405,153406,153408,153410],{"class":108,"line":1685},[106,153407,30795],{"class":112},[106,153409,151412],{"class":1955},[106,153411,151415],{"class":116},[106,153413,153414,153416,153418],{"class":108,"line":1690},[106,153415,14745],{"class":112},[106,153417,151019],{"class":165},[106,153419,151424],{"class":116},[106,153421,153422,153424,153426],{"class":108,"line":1719},[106,153423,151429],{"class":116},[106,153425,151432],{"class":221},[106,153427,87830],{"class":116},[106,153429,153430,153432,153434],{"class":108,"line":1724},[106,153431,151429],{"class":116},[106,153433,62673],{"class":221},[106,153435,87830],{"class":116},[106,153437,153438,153440,153442],{"class":108,"line":1741},[106,153439,151429],{"class":116},[106,153441,69118],{"class":221},[106,153443,87830],{"class":116},[106,153445,153446,153448,153450],{"class":108,"line":1746},[106,153447,151429],{"class":116},[106,153449,151457],{"class":221},[106,153451,87830],{"class":116},[106,153453,153454],{"class":108,"line":1751},[106,153455,38120],{"class":116},[14,153457,153458],{},"管理器示意：",[97,153460,153462],{"className":30372,"code":153461,"language":30374,"meta":25,"style":25},"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",[103,153463,153464,153473,153481,153492,153496,153506,153519,153530,153537,153543,153547,153556,153565,153571,153578],{"__ignoreMap":25},[106,153465,153466,153468,153471],{"class":108,"line":109},[106,153467,14687],{"class":112},[106,153469,153470],{"class":1955}," StudentManager",[106,153472,3731],{"class":116},[106,153474,153475,153477,153479],{"class":108,"line":28},[106,153476,30795],{"class":112},[106,153478,30798],{"class":165},[106,153480,30801],{"class":116},[106,153482,153483,153485,153488,153490],{"class":108,"line":1172},[106,153484,30839],{"class":165},[106,153486,153487],{"class":116},".students ",[106,153489,162],{"class":112},[106,153491,51832],{"class":116},[106,153493,153494],{"class":108,"line":1187},[106,153495,2392],{"emptyLinePlaceholder":33},[106,153497,153498,153500,153503],{"class":108,"line":1193},[106,153499,30795],{"class":112},[106,153501,153502],{"class":1955}," find_by_id",[106,153504,153505],{"class":116},"(self, student_id):\n",[106,153507,153508,153510,153512,153514,153516],{"class":108,"line":1207},[106,153509,3395],{"class":112},[106,153511,152122],{"class":116},[106,153513,26037],{"class":112},[106,153515,38867],{"class":165},[106,153517,153518],{"class":116},".students:\n",[106,153520,153521,153523,153526,153528],{"class":108,"line":1213},[106,153522,4634],{"class":112},[106,153524,153525],{"class":116}," student.student_id ",[106,153527,2941],{"class":112},[106,153529,152143],{"class":116},[106,153531,153532,153535],{"class":108,"line":1304},[106,153533,153534],{"class":112},"                return",[106,153536,152150],{"class":116},[106,153538,153539,153541],{"class":108,"line":1310},[106,153540,14745],{"class":112},[106,153542,152157],{"class":165},[106,153544,153545],{"class":108,"line":1322},[106,153546,2392],{"emptyLinePlaceholder":33},[106,153548,153549,153551,153553],{"class":108,"line":1604},[106,153550,30795],{"class":112},[106,153552,5202],{"class":1955},[106,153554,153555],{"class":116},"(self, student):\n",[106,153557,153558,153560,153562],{"class":108,"line":1609},[106,153559,2489],{"class":112},[106,153561,38867],{"class":165},[106,153563,153564],{"class":116},".find_by_id(student.student_id):\n",[106,153566,153567,153569],{"class":108,"line":1615},[106,153568,15725],{"class":112},[106,153570,125792],{"class":165},[106,153572,153573,153575],{"class":108,"line":1620},[106,153574,30839],{"class":165},[106,153576,153577],{"class":116},".students.append(student)\n",[106,153579,153580,153582],{"class":108,"line":1634},[106,153581,14745],{"class":112},[106,153583,153584],{"class":165}," True\n",[14,153586,153587],{},"如果项目逻辑越来越多，面向对象版会比纯函数版更容易扩展。",[48,153589,153591],{"id":153590},"_125-项目二销售数据统计","12.5 项目二：销售数据统计",[77,153593,153595],{"id":153594},"_1251-数据结构","12.5.1 数据结构",[97,153597,153599],{"className":30372,"code":153598,"language":30374,"meta":25,"style":25},"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",[103,153600,153601,153609,153640,153670,153699,153728],{"__ignoreMap":25},[106,153602,153603,153605,153607],{"class":108,"line":109},[106,153604,148450],{"class":116},[106,153606,162],{"class":112},[106,153608,55441],{"class":116},[106,153610,153611,153613,153615,153617,153619,153621,153624,153626,153629,153631,153633,153635,153638],{"class":108,"line":28},[106,153612,148370],{"class":116},[106,153614,147982],{"class":221},[106,153616,51431],{"class":116},[106,153618,148593],{"class":221},[106,153620,12428],{"class":116},[106,153622,153623],{"class":221},"\"category\"",[106,153625,51431],{"class":116},[106,153627,153628],{"class":221},"\"手机\"",[106,153630,12428],{"class":116},[106,153632,84078],{"class":221},[106,153634,51431],{"class":116},[106,153636,153637],{"class":165},"12000",[106,153639,4922],{"class":116},[106,153641,153642,153644,153646,153648,153650,153652,153654,153656,153659,153661,153663,153665,153668],{"class":108,"line":1172},[106,153643,148370],{"class":116},[106,153645,147982],{"class":221},[106,153647,51431],{"class":116},[106,153649,148593],{"class":221},[106,153651,12428],{"class":116},[106,153653,153623],{"class":221},[106,153655,51431],{"class":116},[106,153657,153658],{"class":221},"\"电脑\"",[106,153660,12428],{"class":116},[106,153662,84078],{"class":221},[106,153664,51431],{"class":116},[106,153666,153667],{"class":165},"18000",[106,153669,4922],{"class":116},[106,153671,153672,153674,153676,153678,153680,153682,153684,153686,153688,153690,153692,153694,153697],{"class":108,"line":1187},[106,153673,148370],{"class":116},[106,153675,147982],{"class":221},[106,153677,51431],{"class":116},[106,153679,148614],{"class":221},[106,153681,12428],{"class":116},[106,153683,153623],{"class":221},[106,153685,51431],{"class":116},[106,153687,153628],{"class":221},[106,153689,12428],{"class":116},[106,153691,84078],{"class":221},[106,153693,51431],{"class":116},[106,153695,153696],{"class":165},"15000",[106,153698,4922],{"class":116},[106,153700,153701,153703,153705,153707,153709,153711,153713,153715,153717,153719,153721,153723,153726],{"class":108,"line":1193},[106,153702,148370],{"class":116},[106,153704,147982],{"class":221},[106,153706,51431],{"class":116},[106,153708,148614],{"class":221},[106,153710,12428],{"class":116},[106,153712,153623],{"class":221},[106,153714,51431],{"class":116},[106,153716,153658],{"class":221},[106,153718,12428],{"class":116},[106,153720,84078],{"class":221},[106,153722,51431],{"class":116},[106,153724,153725],{"class":165},"16000",[106,153727,4922],{"class":116},[106,153729,153730],{"class":108,"line":1207},[106,153731,33240],{"class":116},[77,153733,153735],{"id":153734},"_1252-按日期统计","12.5.2 按日期统计",[97,153737,153739],{"className":30372,"code":153738,"language":30374,"meta":25,"style":25},"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",[103,153740,153741,153750,153754,153765,153779,153792,153811,153815],{"__ignoreMap":25},[106,153742,153743,153746,153748],{"class":108,"line":109},[106,153744,153745],{"class":116},"daily_total ",[106,153747,162],{"class":112},[106,153749,87862],{"class":116},[106,153751,153752],{"class":108,"line":28},[106,153753,2392],{"emptyLinePlaceholder":33},[106,153755,153756,153758,153760,153762],{"class":108,"line":1172},[106,153757,3017],{"class":112},[106,153759,148194],{"class":116},[106,153761,26037],{"class":112},[106,153763,153764],{"class":116}," sales:\n",[106,153766,153767,153770,153772,153775,153777],{"class":108,"line":1187},[106,153768,153769],{"class":116},"    date ",[106,153771,162],{"class":112},[106,153773,153774],{"class":116}," item[",[106,153776,147982],{"class":221},[106,153778,33240],{"class":116},[106,153780,153781,153784,153786,153788,153790],{"class":108,"line":1193},[106,153782,153783],{"class":116},"    amount ",[106,153785,162],{"class":112},[106,153787,153774],{"class":116},[106,153789,84078],{"class":221},[106,153791,33240],{"class":116},[106,153793,153794,153797,153799,153802,153804,153806,153808],{"class":108,"line":1207},[106,153795,153796],{"class":116},"    daily_total[date] ",[106,153798,162],{"class":112},[106,153800,153801],{"class":116}," daily_total.get(date, ",[106,153803,308],{"class":165},[106,153805,13707],{"class":116},[106,153807,598],{"class":112},[106,153809,153810],{"class":116}," amount\n",[106,153812,153813],{"class":108,"line":1213},[106,153814,2392],{"emptyLinePlaceholder":33},[106,153816,153817,153819],{"class":108,"line":1304},[106,153818,30409],{"class":165},[106,153820,153821],{"class":116},"(daily_total)\n",[77,153823,153825],{"id":153824},"_1253-按类别统计","12.5.3 按类别统计",[97,153827,153829],{"className":30372,"code":153828,"language":30374,"meta":25,"style":25},"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",[103,153830,153831,153840,153844,153854,153867,153879,153897,153901],{"__ignoreMap":25},[106,153832,153833,153836,153838],{"class":108,"line":109},[106,153834,153835],{"class":116},"category_total ",[106,153837,162],{"class":112},[106,153839,87862],{"class":116},[106,153841,153842],{"class":108,"line":28},[106,153843,2392],{"emptyLinePlaceholder":33},[106,153845,153846,153848,153850,153852],{"class":108,"line":1172},[106,153847,3017],{"class":112},[106,153849,148194],{"class":116},[106,153851,26037],{"class":112},[106,153853,153764],{"class":116},[106,153855,153856,153859,153861,153863,153865],{"class":108,"line":1187},[106,153857,153858],{"class":116},"    category ",[106,153860,162],{"class":112},[106,153862,153774],{"class":116},[106,153864,153623],{"class":221},[106,153866,33240],{"class":116},[106,153868,153869,153871,153873,153875,153877],{"class":108,"line":1193},[106,153870,153783],{"class":116},[106,153872,162],{"class":112},[106,153874,153774],{"class":116},[106,153876,84078],{"class":221},[106,153878,33240],{"class":116},[106,153880,153881,153884,153886,153889,153891,153893,153895],{"class":108,"line":1207},[106,153882,153883],{"class":116},"    category_total[category] ",[106,153885,162],{"class":112},[106,153887,153888],{"class":116}," category_total.get(category, ",[106,153890,308],{"class":165},[106,153892,13707],{"class":116},[106,153894,598],{"class":112},[106,153896,153810],{"class":116},[106,153898,153899],{"class":108,"line":1213},[106,153900,2392],{"emptyLinePlaceholder":33},[106,153902,153903,153905],{"class":108,"line":1304},[106,153904,30409],{"class":165},[106,153906,153907],{"class":116},"(category_total)\n",[77,153909,153911],{"id":153910},"_1254-找销售额最高的一天","12.5.4 找销售额最高的一天",[97,153913,153915],{"className":30372,"code":153914,"language":30374,"meta":25,"style":25},"top_date, top_amount = max(daily_total.items(), key=lambda item: item[1])\nprint(top_date, top_amount)\n",[103,153916,153917,153942],{"__ignoreMap":25},[106,153918,153919,153922,153924,153926,153929,153932,153935,153938,153940],{"class":108,"line":109},[106,153920,153921],{"class":116},"top_date, top_amount ",[106,153923,162],{"class":112},[106,153925,5944],{"class":165},[106,153927,153928],{"class":116},"(daily_total.items(), ",[106,153930,153931],{"class":5209},"key",[106,153933,153934],{"class":112},"=lambda",[106,153936,153937],{"class":116}," item: item[",[106,153939,334],{"class":165},[106,153941,4649],{"class":116},[106,153943,153944,153946],{"class":108,"line":28},[106,153945,30409],{"class":165},[106,153947,153948],{"class":116},"(top_date, top_amount)\n",[48,153950,153952],{"id":153951},"_126-绘制柱状图","12.6 绘制柱状图",[97,153954,153956],{"className":30372,"code":153955,"language":30374,"meta":25,"style":25},"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",[103,153957,153958,153972,153983,153987,153995,154007,154019,154030,154034,154038,154048,154059,154073,154078,154095,154112,154128,154132],{"__ignoreMap":25},[106,153959,153960,153962,153964,153966,153968,153970],{"class":108,"line":109},[106,153961,30731],{"class":112},[106,153963,147364],{"class":116},[106,153965,30386],{"class":112},[106,153967,147369],{"class":116},[106,153969,31377],{"class":112},[106,153971,147374],{"class":116},[106,153973,153974,153976,153978,153980],{"class":108,"line":28},[106,153975,30731],{"class":112},[106,153977,147223],{"class":116},[106,153979,30386],{"class":112},[106,153981,153982],{"class":116}," Bar\n",[106,153984,153985],{"class":108,"line":1172},[106,153986,2392],{"emptyLinePlaceholder":33},[106,153988,153989,153991,153993],{"class":108,"line":1187},[106,153990,153835],{"class":116},[106,153992,162],{"class":112},[106,153994,15565],{"class":116},[106,153996,153997,154000,154002,154005],{"class":108,"line":1193},[106,153998,153999],{"class":221},"    \"手机\"",[106,154001,51431],{"class":116},[106,154003,154004],{"class":165},"27000",[106,154006,31460],{"class":116},[106,154008,154009,154012,154014,154017],{"class":108,"line":1207},[106,154010,154011],{"class":221},"    \"电脑\"",[106,154013,51431],{"class":116},[106,154015,154016],{"class":165},"34000",[106,154018,31460],{"class":116},[106,154020,154021,154024,154026,154028],{"class":108,"line":1213},[106,154022,154023],{"class":221},"    \"耳机\"",[106,154025,51431],{"class":116},[106,154027,124384],{"class":165},[106,154029,31460],{"class":116},[106,154031,154032],{"class":108,"line":1304},[106,154033,1557],{"class":116},[106,154035,154036],{"class":108,"line":1310},[106,154037,2392],{"emptyLinePlaceholder":33},[106,154039,154040,154043,154045],{"class":108,"line":1322},[106,154041,154042],{"class":116},"bar ",[106,154044,162],{"class":112},[106,154046,154047],{"class":116}," Bar()\n",[106,154049,154050,154053,154056],{"class":108,"line":1604},[106,154051,154052],{"class":116},"bar.add_xaxis(",[106,154054,154055],{"class":165},"list",[106,154057,154058],{"class":116},"(category_total.keys()))\n",[106,154060,154061,154064,154066,154068,154070],{"class":108,"line":1609},[106,154062,154063],{"class":116},"bar.add_yaxis(",[106,154065,147280],{"class":221},[106,154067,12428],{"class":116},[106,154069,154055],{"class":165},[106,154071,154072],{"class":116},"(category_total.values()))\n",[106,154074,154075],{"class":108,"line":1615},[106,154076,154077],{"class":116},"bar.set_global_opts(\n",[106,154079,154080,154082,154084,154086,154088,154090,154093],{"class":108,"line":1620},[106,154081,147458],{"class":5209},[106,154083,162],{"class":112},[106,154085,147463],{"class":116},[106,154087,51401],{"class":5209},[106,154089,162],{"class":112},[106,154091,154092],{"class":221},"\"品类销售额\"",[106,154094,38041],{"class":116},[106,154096,154097,154099,154101,154103,154105,154107,154110],{"class":108,"line":1634},[106,154098,147477],{"class":5209},[106,154100,162],{"class":112},[106,154102,147482],{"class":116},[106,154104,79804],{"class":5209},[106,154106,162],{"class":112},[106,154108,154109],{"class":221},"\"品类\"",[106,154111,38041],{"class":116},[106,154113,154114,154116,154118,154120,154122,154124,154126],{"class":108,"line":1639},[106,154115,147496],{"class":5209},[106,154117,162],{"class":112},[106,154119,147482],{"class":116},[106,154121,79804],{"class":5209},[106,154123,162],{"class":112},[106,154125,147280],{"class":221},[106,154127,38041],{"class":116},[106,154129,154130],{"class":108,"line":1645},[106,154131,123],{"class":116},[106,154133,154134,154137,154140],{"class":108,"line":1666},[106,154135,154136],{"class":116},"bar.render(",[106,154138,154139],{"class":221},"\"category_sales.html\"",[106,154141,123],{"class":116},[48,154143,154145],{"id":154144},"_127-绘制时间线柱状图","12.7 绘制时间线柱状图",[14,154147,154148],{},"时间线适合展示不同日期、月份、年份的数据变化。",[97,154150,154152],{"className":30372,"code":154151,"language":30374,"meta":25,"style":25},"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",[103,154153,154154,154168,154179,154183,154191,154215,154238,154263,154267,154271,154281,154285,154296,154305,154315,154329,154360,154365,154369],{"__ignoreMap":25},[106,154155,154156,154158,154160,154162,154164,154166],{"class":108,"line":109},[106,154157,30731],{"class":112},[106,154159,147364],{"class":116},[106,154161,30386],{"class":112},[106,154163,147369],{"class":116},[106,154165,31377],{"class":112},[106,154167,147374],{"class":116},[106,154169,154170,154172,154174,154176],{"class":108,"line":28},[106,154171,30731],{"class":112},[106,154173,147223],{"class":116},[106,154175,30386],{"class":112},[106,154177,154178],{"class":116}," Bar, Timeline\n",[106,154180,154181],{"class":108,"line":1172},[106,154182,2392],{"emptyLinePlaceholder":33},[106,154184,154185,154187,154189],{"class":108,"line":1187},[106,154186,101643],{"class":116},[106,154188,162],{"class":112},[106,154190,15565],{"class":116},[106,154192,154193,154196,154199,154201,154203,154205,154207,154209,154211,154213],{"class":108,"line":1193},[106,154194,154195],{"class":221},"    \"2024-10-01\"",[106,154197,154198],{"class":116},": {",[106,154200,153628],{"class":221},[106,154202,51431],{"class":116},[106,154204,153637],{"class":165},[106,154206,12428],{"class":116},[106,154208,153658],{"class":221},[106,154210,51431],{"class":116},[106,154212,153667],{"class":165},[106,154214,4922],{"class":116},[106,154216,154217,154220,154222,154224,154226,154228,154230,154232,154234,154236],{"class":108,"line":1207},[106,154218,154219],{"class":221},"    \"2024-10-02\"",[106,154221,154198],{"class":116},[106,154223,153628],{"class":221},[106,154225,51431],{"class":116},[106,154227,153696],{"class":165},[106,154229,12428],{"class":116},[106,154231,153658],{"class":221},[106,154233,51431],{"class":116},[106,154235,153725],{"class":165},[106,154237,4922],{"class":116},[106,154239,154240,154243,154245,154247,154249,154252,154254,154256,154258,154261],{"class":108,"line":1213},[106,154241,154242],{"class":221},"    \"2024-10-03\"",[106,154244,154198],{"class":116},[106,154246,153628],{"class":221},[106,154248,51431],{"class":116},[106,154250,154251],{"class":165},"17000",[106,154253,12428],{"class":116},[106,154255,153658],{"class":221},[106,154257,51431],{"class":116},[106,154259,154260],{"class":165},"19000",[106,154262,4922],{"class":116},[106,154264,154265],{"class":108,"line":1304},[106,154266,1557],{"class":116},[106,154268,154269],{"class":108,"line":1310},[106,154270,2392],{"emptyLinePlaceholder":33},[106,154272,154273,154276,154278],{"class":108,"line":1322},[106,154274,154275],{"class":116},"timeline ",[106,154277,162],{"class":112},[106,154279,154280],{"class":116}," Timeline()\n",[106,154282,154283],{"class":108,"line":1604},[106,154284,2392],{"emptyLinePlaceholder":33},[106,154286,154287,154289,154292,154294],{"class":108,"line":1609},[106,154288,3017],{"class":112},[106,154290,154291],{"class":116}," date, category_data ",[106,154293,26037],{"class":112},[106,154295,149133],{"class":116},[106,154297,154298,154301,154303],{"class":108,"line":1615},[106,154299,154300],{"class":116},"    bar ",[106,154302,162],{"class":112},[106,154304,154047],{"class":116},[106,154306,154307,154310,154312],{"class":108,"line":1620},[106,154308,154309],{"class":116},"    bar.add_xaxis(",[106,154311,154055],{"class":165},[106,154313,154314],{"class":116},"(category_data.keys()))\n",[106,154316,154317,154320,154322,154324,154326],{"class":108,"line":1634},[106,154318,154319],{"class":116},"    bar.add_yaxis(",[106,154321,147280],{"class":221},[106,154323,12428],{"class":116},[106,154325,154055],{"class":165},[106,154327,154328],{"class":116},"(category_data.values()))\n",[106,154330,154331,154334,154337,154339,154341,154343,154345,154347,154349,154351,154353,154355,154358],{"class":108,"line":1639},[106,154332,154333],{"class":116},"    bar.set_global_opts(",[106,154335,154336],{"class":5209},"title_opts",[106,154338,162],{"class":112},[106,154340,147463],{"class":116},[106,154342,51401],{"class":5209},[106,154344,162],{"class":112},[106,154346,169],{"class":112},[106,154348,368],{"class":221},[106,154350,1013],{"class":165},[106,154352,73920],{"class":116},[106,154354,1063],{"class":165},[106,154356,154357],{"class":221},"销售额\"",[106,154359,30491],{"class":116},[106,154361,154362],{"class":108,"line":1645},[106,154363,154364],{"class":116},"    timeline.add(bar, date)\n",[106,154366,154367],{"class":108,"line":1666},[106,154368,2392],{"emptyLinePlaceholder":33},[106,154370,154371,154374,154377],{"class":108,"line":1671},[106,154372,154373],{"class":116},"timeline.render(",[106,154375,154376],{"class":221},"\"timeline_sales.html\"",[106,154378,123],{"class":116},[48,154380,154382],{"id":154381},"_128-绘制地图","12.8 绘制地图",[14,154384,154385],{},"地图适合展示地区数据。",[97,154387,154389],{"className":30372,"code":154388,"language":30374,"meta":25,"style":25},"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",[103,154390,154391,154405,154416,154420,154428,154441,154453,154466,154479,154483,154487,154497,154512,154517,154534,154553,154557],{"__ignoreMap":25},[106,154392,154393,154395,154397,154399,154401,154403],{"class":108,"line":109},[106,154394,30731],{"class":112},[106,154396,147364],{"class":116},[106,154398,30386],{"class":112},[106,154400,147369],{"class":116},[106,154402,31377],{"class":112},[106,154404,147374],{"class":116},[106,154406,154407,154409,154411,154413],{"class":108,"line":28},[106,154408,30731],{"class":112},[106,154410,147223],{"class":116},[106,154412,30386],{"class":112},[106,154414,154415],{"class":116}," Map\n",[106,154417,154418],{"class":108,"line":1172},[106,154419,2392],{"emptyLinePlaceholder":33},[106,154421,154422,154424,154426],{"class":108,"line":1187},[106,154423,101643],{"class":116},[106,154425,162],{"class":112},[106,154427,55441],{"class":116},[106,154429,154430,154433,154435,154437,154439],{"class":108,"line":1193},[106,154431,154432],{"class":116},"    (",[106,154434,69263],{"class":221},[106,154436,12428],{"class":116},[106,154438,934],{"class":165},[106,154440,38041],{"class":116},[106,154442,154443,154445,154447,154449,154451],{"class":108,"line":1207},[106,154444,154432],{"class":116},[106,154446,69283],{"class":221},[106,154448,12428],{"class":116},[106,154450,147297],{"class":165},[106,154452,38041],{"class":116},[106,154454,154455,154457,154460,154462,154464],{"class":108,"line":1213},[106,154456,154432],{"class":116},[106,154458,154459],{"class":221},"\"广东\"",[106,154461,12428],{"class":116},[106,154463,1714],{"class":165},[106,154465,38041],{"class":116},[106,154467,154468,154470,154473,154475,154477],{"class":108,"line":1304},[106,154469,154432],{"class":116},[106,154471,154472],{"class":221},"\"浙江\"",[106,154474,12428],{"class":116},[106,154476,147302],{"class":165},[106,154478,38041],{"class":116},[106,154480,154481],{"class":108,"line":1310},[106,154482,33240],{"class":116},[106,154484,154485],{"class":108,"line":1322},[106,154486,2392],{"emptyLinePlaceholder":33},[106,154488,154489,154492,154494],{"class":108,"line":1604},[106,154490,154491],{"class":116},"map_chart ",[106,154493,162],{"class":112},[106,154495,154496],{"class":116}," Map()\n",[106,154498,154499,154502,154504,154507,154510],{"class":108,"line":1609},[106,154500,154501],{"class":116},"map_chart.add(",[106,154503,147280],{"class":221},[106,154505,154506],{"class":116},", data, ",[106,154508,154509],{"class":221},"\"china\"",[106,154511,123],{"class":116},[106,154513,154514],{"class":108,"line":1615},[106,154515,154516],{"class":116},"map_chart.set_global_opts(\n",[106,154518,154519,154521,154523,154525,154527,154529,154532],{"class":108,"line":1620},[106,154520,147458],{"class":5209},[106,154522,162],{"class":112},[106,154524,147463],{"class":116},[106,154526,51401],{"class":5209},[106,154528,162],{"class":112},[106,154530,154531],{"class":221},"\"地区销售额\"",[106,154533,38041],{"class":116},[106,154535,154536,154539,154541,154544,154547,154549,154551],{"class":108,"line":1634},[106,154537,154538],{"class":5209},"    visualmap_opts",[106,154540,162],{"class":112},[106,154542,154543],{"class":116},"opts.VisualMapOpts(",[106,154545,154546],{"class":5209},"max_",[106,154548,162],{"class":112},[106,154550,1714],{"class":165},[106,154552,38041],{"class":116},[106,154554,154555],{"class":108,"line":1639},[106,154556,123],{"class":116},[106,154558,154559,154562,154565],{"class":108,"line":1645},[106,154560,154561],{"class":116},"map_chart.render(",[106,154563,154564],{"class":221},"\"map_sales.html\"",[106,154566,123],{"class":116},[14,154568,154569],{},"地图数据的地区名称要和 pyecharts 内置地图名称匹配，否则可能显示不出来。",[48,154571,154573],{"id":154572},"_129-项目拆分建议","12.9 项目拆分建议",[14,154575,154576],{},"当代码超过一个文件时，可以这样组织：",[97,154578,154581],{"className":154579,"code":154580,"language":5180,"meta":25},[5178],"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",[103,154582,154580],{"__ignoreMap":25},[14,154584,154585],{},"职责：",[60,154587,154588,154594,154600,154606],{},[63,154589,154590,154593],{},[103,154591,154592],{},"main.py","：程序入口。",[63,154595,154596,154599],{},[103,154597,154598],{},"file_utils.py","：读写 JSON。",[63,154601,154602,154605],{},[103,154603,154604],{},"sales_service.py","：统计销售数据。",[63,154607,154608,154611],{},[103,154609,154610],{},"chart_builder.py","：生成图表。",[48,154613,154615],{"id":154614},"_1210-python基础复习清单","12.10 Python基础复习清单",[14,154617,154618],{},"语法基础：",[60,154620,154621,154624,154627,154630],{},[63,154622,154623],{},"会写变量、注释、输入输出。",[63,154625,154626],{},"会使用 int、float、str、bool。",[63,154628,154629],{},"会做类型转换。",[63,154631,154632],{},"会使用 f-string 格式化输出。",[14,154634,154635],{},"流程控制：",[60,154637,154638,154644,154650,154658],{},[63,154639,154640,154641,28379],{},"会写 ",[103,154642,154643],{},"if elif else",[63,154645,154640,154646,101003,154648,28379],{},[103,154647,108648],{},[103,154649,3017],{},[63,154651,154652,154653,101003,154655,28379],{},"理解 ",[103,154654,2045],{},[103,154656,154657],{},"continue",[63,154659,154660],{},"能写嵌套循环。",[14,154662,154663],{},"函数：",[60,154665,154666,154669,154672,154675],{},[63,154667,154668],{},"会定义和调用函数。",[63,154670,154671],{},"理解参数和返回值。",[63,154673,154674],{},"知道局部变量和全局变量。",[63,154676,154677],{},"会使用默认参数、关键字参数、不定长参数。",[14,154679,154680],{},"容器：",[60,154682,154683,154686,154689,154692,154695],{},[63,154684,154685],{},"会使用列表增删改查。",[63,154687,154688],{},"会遍历列表、字典。",[63,154690,154691],{},"会使用切片。",[63,154693,154694],{},"会用集合去重。",[63,154696,154697],{},"会处理列表嵌套字典。",[14,154699,154700],{},"文件和模块：",[60,154702,154703,154706,154709,154712,154715],{},[63,154704,154705],{},"会读写文本文件。",[63,154707,154708],{},"会读写 JSON。",[63,154710,154711],{},"会捕获常见异常。",[63,154713,154714],{},"会导入模块和第三方包。",[63,154716,154717],{},"会创建简单包结构。",[14,154719,154720],{},"项目能力：",[60,154722,154723,154726,154729,154732,154735],{},[63,154724,154725],{},"能把代码拆成函数。",[63,154727,154728],{},"能把数据保存到文件。",[63,154730,154731],{},"能处理用户输入错误。",[63,154733,154734],{},"能写一个完整菜单程序。",[63,154736,154737],{},"能用 pyecharts 生成图表。",[48,154739,154741],{"id":154740},"_1211-推荐练习顺序","12.11 推荐练习顺序",[60,154743,154744,154747,154750,154753,154756,154759,154762,154765],{},[63,154745,154746],{},"猜数字游戏。",[63,154748,154749],{},"ATM 菜单程序。",[63,154751,154752],{},"学生成绩统计。",[63,154754,154755],{},"学生管理系统函数版。",[63,154757,154758],{},"学生管理系统文件持久化版。",[63,154760,154761],{},"学生管理系统面向对象版。",[63,154763,154764],{},"销售数据统计。",[63,154766,154767],{},"销售数据可视化。",[48,154769,154771],{"id":154770},"_1212-常见学习误区","12.12 常见学习误区",[60,154773,154774,154777,154780,154783,154786,154789,154792],{},[63,154775,154776],{},"只看视频不敲代码。",[63,154778,154779],{},"一报错就复制错误去搜，不先读报错位置。",[63,154781,154782],{},"变量名随便写，后续自己看不懂。",[63,154784,154785],{},"所有代码都写在一个文件一个函数里。",[63,154787,154788],{},"不保存练习代码，复习时没有材料。",[63,154790,154791],{},"还没掌握列表字典就急着学框架。",[63,154793,154794],{},"不会读官方文档，只依赖教程。",[48,154796,154798],{"id":154797},"_1213-如何读报错","12.13 如何读报错",[14,154800,154801],{},"报错通常从下往上看最后几行。",[14,154803,15128],{},[97,154805,154808],{"className":154806,"code":154807,"language":5180,"meta":25},[5178],"ValueError: invalid literal for int() with base 10: 'abc'\n",[103,154809,154807],{"__ignoreMap":25},[14,154811,24593],{},[60,154813,154814,154820,154830],{},[63,154815,154816,154817,28379],{},"异常类型是 ",[103,154818,154819],{},"ValueError",[63,154821,107330,154822,154825,154826,154829],{},[103,154823,154824],{},"int()"," 无法把 ",[103,154827,154828],{},"'abc'"," 转成整数。",[63,154831,154832],{},"应该检查输入内容或增加异常处理。",[14,154834,154835],{},"再看文件名和行号：",[97,154837,154840],{"className":154838,"code":154839,"language":5180,"meta":25},[5178],"File \"main.py\", line 10, in \u003Cmodule>\n",[103,154841,154839],{"__ignoreMap":25},[14,154843,154844,154845,154847],{},"表示错误发生在 ",[103,154846,154592],{}," 第 10 行。",[48,154849,154851],{"id":154850},"_1214-后续学习方向","12.14 后续学习方向",[14,154853,154854],{},"Python 基础完成后，可以按兴趣选择方向：",[60,154856,154857,154869,154878,154890,154901,154910,154920],{},[63,154858,154859,154860,329,154863,329,154866,28379],{},"自动化办公：",[103,154861,154862],{},"openpyxl",[103,154864,154865],{},"python-docx",[103,154867,154868],{},"pdfplumber",[63,154870,154871,154872,329,154874,329,154876,28379],{},"数据分析：",[103,154873,100611],{},[103,154875,146170],{},[103,154877,146178],{},[63,154879,154880,154881,329,154884,329,154887,28379],{},"Web 后端：",[103,154882,154883],{},"Flask",[103,154885,154886],{},"FastAPI",[103,154888,154889],{},"Django",[63,154891,154892,154893,329,154895,329,154898,28379],{},"爬虫：",[103,154894,146155],{},[103,154896,154897],{},"BeautifulSoup",[103,154899,154900],{},"Scrapy",[63,154902,154903,154904,329,154906,154909],{},"测试开发：",[103,154905,146202],{},[103,154907,154908],{},"selenium","、接口测试。",[63,154911,154912,154913,329,154915,329,154917,28379],{},"人工智能：",[103,154914,100611],{},[103,154916,146170],{},[103,154918,154919],{},"pytorch",[63,154921,154922,154923,329,154925,329,154928,28379],{},"运维脚本：",[103,154924,145771],{},[103,154926,154927],{},"subprocess",[103,154929,154930],{},"paramiko",[14,154932,154933],{},"不要所有方向同时学。先把 Python 基础和一个小项目做扎实，再选择方向。",[48,154935,154937],{"id":154936},"_1215-结课练习","12.15 结课练习",[60,154939,154940,154943,154946,154949,154952,154955,154958,154961],{},[63,154941,154942],{},"完成函数版学生管理系统。",[63,154944,154945],{},"给学生管理系统增加 JSON 持久化。",[63,154947,154948],{},"给学生管理系统增加异常处理。",[63,154950,154951],{},"把学生管理系统改成面向对象版。",[63,154953,154954],{},"使用 pyecharts 绘制学生成绩柱状图。",[63,154956,154957],{},"读取销售 JSON 数据，统计每日销售额并绘制折线图。",[63,154959,154960],{},"按品类统计销售额并绘制柱状图。",[63,154962,154963],{},"写一份自己的 Python 学习路线图。",[5119,154965,154966],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":25,"searchDepth":28,"depth":28,"links":154968},[154969,154970,154973,154974,154975,154981,154982,154983,154984,154985,154986,154987,154988,154989,154990],{"id":151685,"depth":28,"text":151686},{"id":151735,"depth":28,"text":151736,"children":154971},[154972],{"id":151739,"depth":1172,"text":151740},{"id":151778,"depth":28,"text":151779},{"id":153252,"depth":28,"text":153253},{"id":153590,"depth":28,"text":153591,"children":154976},[154977,154978,154979,154980],{"id":153594,"depth":1172,"text":153595},{"id":153734,"depth":1172,"text":153735},{"id":153824,"depth":1172,"text":153825},{"id":153910,"depth":1172,"text":153911},{"id":153951,"depth":28,"text":153952},{"id":154144,"depth":28,"text":154145},{"id":154381,"depth":28,"text":154382},{"id":154572,"depth":28,"text":154573},{"id":154614,"depth":28,"text":154615},{"id":154740,"depth":28,"text":154741},{"id":154770,"depth":28,"text":154771},{"id":154797,"depth":28,"text":154798},{"id":154850,"depth":28,"text":154851},{"id":154936,"depth":28,"text":154937},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch12",{"title":151677,"description":30},"wiki\u002F2024-10-10-python教程\u002Fch12-综合案例与复习路线","h907wRG7YTTH927q6GLXFHGSldmwlkML7UOavkE6n1E",{"id":154997,"title":154998,"body":154999,"description":30,"extension":31,"meta":157468,"navigation":33,"path":157469,"seo":157470,"stem":157471,"__hash__":157472},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串.md","2. 基础语法、变量与字符串",{"type":7,"value":155000,"toc":157443},[155001,155004,155008,155011,155014,155034,155037,155060,155063,155066,155088,155091,155113,155117,155120,155160,155163,155284,155288,155291,155331,155334,155358,155361,155365,155368,155382,155415,155418,155453,155456,155479,155482,155515,155518,155520,155526,155601,155604,155610,155627,155667,155671,155674,155720,155722,155760,155763,155798,155801,155836,155839,155871,155874,155893,155897,155901,156014,156016,156091,156095,156141,156144,156170,156179,156183,156186,156249,156257,156285,156289,156329,156394,156398,156401,156440,156443,156488,156491,156552,156556,156583,156586,156614,156617,156621,156625,156690,156693,156731,156734,156766,156770,156869,156873,156876,156949,156952,157000,157004,157010,157050,157053,157100,157103,157152,157156,157158,157172,157174,157355,157359,157386,157406,157413,157417,157434,157440],[10,155002,154998],{"id":155003},"_2-基础语法变量与字符串",[48,155005,155007],{"id":155006},"_21-注释","2.1 注释",[14,155009,155010],{},"注释是给人看的说明文字，不会被 Python 执行。",[14,155012,155013],{},"单行注释：",[97,155015,155017],{"className":30372,"code":155016,"language":30374,"meta":25,"style":25},"# 这是单行注释\nprint(\"hello\")\n",[103,155018,155019,155024],{"__ignoreMap":25},[106,155020,155021],{"class":108,"line":109},[106,155022,155023],{"class":175},"# 这是单行注释\n",[106,155025,155026,155028,155030,155032],{"class":108,"line":28},[106,155027,30409],{"class":165},[106,155029,117],{"class":116},[106,155031,5837],{"class":221},[106,155033,123],{"class":116},[14,155035,155036],{},"多行说明常用三引号：",[97,155038,155040],{"className":30372,"code":155039,"language":30374,"meta":25,"style":25},"\"\"\"\n这是多行说明。\n常用于文件顶部说明、函数说明等。\n\"\"\"\n",[103,155041,155042,155046,155051,155056],{"__ignoreMap":25},[106,155043,155044],{"class":108,"line":109},[106,155045,95683],{"class":221},[106,155047,155048],{"class":108,"line":28},[106,155049,155050],{"class":221},"这是多行说明。\n",[106,155052,155053],{"class":108,"line":1172},[106,155054,155055],{"class":221},"常用于文件顶部说明、函数说明等。\n",[106,155057,155058],{"class":108,"line":1187},[106,155059,95683],{"class":221},[14,155061,155062],{},"实际写代码时，注释不要解释显而易见的内容，而要解释意图。",[14,155064,155065],{},"不好：",[97,155067,155069],{"className":30372,"code":155068,"language":30374,"meta":25,"style":25},"# age 加 1\nage = age + 1\n",[103,155070,155071,155076],{"__ignoreMap":25},[106,155072,155073],{"class":108,"line":109},[106,155074,155075],{"class":175},"# age 加 1\n",[106,155077,155078,155080,155082,155084,155086],{"class":108,"line":28},[106,155079,146531],{"class":116},[106,155081,162],{"class":112},[106,155083,15700],{"class":116},[106,155085,598],{"class":112},[106,155087,55693],{"class":165},[14,155089,155090],{},"较好：",[97,155092,155094],{"className":30372,"code":155093,"language":30374,"meta":25,"style":25},"# 用户过完生日后，年龄增加一岁\nage = age + 1\n",[103,155095,155096,155101],{"__ignoreMap":25},[106,155097,155098],{"class":108,"line":109},[106,155099,155100],{"class":175},"# 用户过完生日后，年龄增加一岁\n",[106,155102,155103,155105,155107,155109,155111],{"class":108,"line":28},[106,155104,146531],{"class":116},[106,155106,162],{"class":112},[106,155108,15700],{"class":116},[106,155110,598],{"class":112},[106,155112,55693],{"class":165},[48,155114,155116],{"id":155115},"_22-字面量","2.2 字面量",[14,155118,155119],{},"字面量就是代码中直接写出来的数据。",[97,155121,155123],{"className":30372,"code":155122,"language":30374,"meta":25,"style":25},"100          # 整数\n3.14         # 小数\n\"hello\"      # 字符串\nTrue         # 布尔值\nNone         # 空值\n",[103,155124,155125,155132,155139,155146,155153],{"__ignoreMap":25},[106,155126,155127,155129],{"class":108,"line":109},[106,155128,428],{"class":165},[106,155130,155131],{"class":175},"          # 整数\n",[106,155133,155134,155136],{"class":108,"line":28},[106,155135,166],{"class":165},[106,155137,155138],{"class":175},"         # 小数\n",[106,155140,155141,155143],{"class":108,"line":1172},[106,155142,5837],{"class":221},[106,155144,155145],{"class":175},"      # 字符串\n",[106,155147,155148,155150],{"class":108,"line":1187},[106,155149,31470],{"class":165},[106,155151,155152],{"class":175},"         # 布尔值\n",[106,155154,155155,155157],{"class":108,"line":1193},[106,155156,95671],{"class":165},[106,155158,155159],{"class":175},"         # 空值\n",[14,155161,155162],{},"常见字面量类型：",[254,155164,155165,155175],{},[257,155166,155167],{},[260,155168,155169,155171,155173],{},[263,155170,23730],{},[263,155172,27486],{},[263,155174,25863],{},[301,155176,155177,155188,155199,155210,155222,155234,155246,155259,155271],{},[260,155178,155179,155181,155185],{},[306,155180,120],{},[306,155182,155183],{},[103,155184,428],{},[306,155186,155187],{},"整数",[260,155189,155190,155192,155196],{},[306,155191,156],{},[306,155193,155194],{},[103,155195,166],{},[306,155197,155198],{},"浮点数",[260,155200,155201,155203,155207],{},[306,155202,1292],{},[306,155204,155205],{},[103,155206,5837],{},[306,155208,155209],{},"字符串",[260,155211,155212,155214,155220],{},[306,155213,1347],{},[306,155215,155216,329,155218],{},[103,155217,31470],{},[103,155219,33981],{},[306,155221,66009],{},[260,155223,155224,155227,155231],{},[306,155225,155226],{},"NoneType",[306,155228,155229],{},[103,155230,95671],{},[306,155232,155233],{},"空值",[260,155235,155236,155238,155243],{},[306,155237,154055],{},[306,155239,155240],{},[103,155241,155242],{},"[1, 2, 3]",[306,155244,155245],{},"列表",[260,155247,155248,155251,155256],{},[306,155249,155250],{},"tuple",[306,155252,155253],{},[103,155254,155255],{},"(1, 2, 3)",[306,155257,155258],{},"元组",[260,155260,155261,155263,155268],{},[306,155262,114531],{},[306,155264,155265],{},[103,155266,155267],{},"{\"name\": \"张三\"}",[306,155269,155270],{},"字典",[260,155272,155273,155276,155281],{},[306,155274,155275],{},"set",[306,155277,155278],{},[103,155279,155280],{},"{1, 2, 3}",[306,155282,155283],{},"集合",[48,155285,155287],{"id":155286},"_23-变量","2.3 变量",[14,155289,155290],{},"变量是保存数据的名字。",[97,155292,155294],{"className":30372,"code":155293,"language":30374,"meta":25,"style":25},"name = \"小明\"\nage = 18\nheight = 1.75\nis_student = True\n",[103,155295,155296,155304,155312,155322],{"__ignoreMap":25},[106,155297,155298,155300,155302],{"class":108,"line":109},[106,155299,146521],{"class":116},[106,155301,162],{"class":112},[106,155303,149338],{"class":221},[106,155305,155306,155308,155310],{"class":108,"line":28},[106,155307,146531],{"class":116},[106,155309,162],{"class":112},[106,155311,146536],{"class":165},[106,155313,155314,155317,155319],{"class":108,"line":1172},[106,155315,155316],{"class":116},"height ",[106,155318,162],{"class":112},[106,155320,155321],{"class":165}," 1.75\n",[106,155323,155324,155327,155329],{"class":108,"line":1187},[106,155325,155326],{"class":116},"is_student ",[106,155328,162],{"class":112},[106,155330,153584],{"class":165},[14,155332,155333],{},"Python 的变量不需要提前声明类型：",[97,155335,155337],{"className":30372,"code":155336,"language":30374,"meta":25,"style":25},"score = 100\nscore = \"满分\"\n",[103,155338,155339,155349],{"__ignoreMap":25},[106,155340,155341,155344,155346],{"class":108,"line":109},[106,155342,155343],{"class":116},"score ",[106,155345,162],{"class":112},[106,155347,155348],{"class":165}," 100\n",[106,155350,155351,155353,155355],{"class":108,"line":28},[106,155352,155343],{"class":116},[106,155354,162],{"class":112},[106,155356,155357],{"class":221}," \"满分\"\n",[14,155359,155360],{},"这虽然合法，但不建议在同一段逻辑里频繁改变变量含义，否则代码难读。",[48,155362,155364],{"id":155363},"_24-变量命名规则","2.4 变量命名规则",[14,155366,155367],{},"硬性规则：",[60,155369,155370,155373,155376,155379],{},[63,155371,155372],{},"只能由字母、数字、下划线组成。",[63,155374,155375],{},"不能以数字开头。",[63,155377,155378],{},"不能使用 Python 关键字。",[63,155380,155381],{},"区分大小写。",[97,155383,155385],{"className":30372,"code":155384,"language":30374,"meta":25,"style":25},"user_name = \"张三\"\nage2 = 18\n_token = \"abc\"\n",[103,155386,155387,155396,155405],{"__ignoreMap":25},[106,155388,155389,155392,155394],{"class":108,"line":109},[106,155390,155391],{"class":116},"user_name ",[106,155393,162],{"class":112},[106,155395,146526],{"class":221},[106,155397,155398,155401,155403],{"class":108,"line":28},[106,155399,155400],{"class":116},"age2 ",[106,155402,162],{"class":112},[106,155404,146536],{"class":165},[106,155406,155407,155410,155412],{"class":108,"line":1172},[106,155408,155409],{"class":116},"_token ",[106,155411,162],{"class":112},[106,155413,155414],{"class":221}," \"abc\"\n",[14,155416,155417],{},"错误写法：",[97,155419,155421],{"className":30372,"code":155420,"language":30374,"meta":25,"style":25},"2age = 18\nuser-name = \"张三\"\nclass = \"一班\"\n",[103,155422,155423,155432,155444],{"__ignoreMap":25},[106,155424,155425,155428,155430],{"class":108,"line":109},[106,155426,155427],{"class":77397},"2age",[106,155429,13557],{"class":112},[106,155431,146536],{"class":165},[106,155433,155434,155436,155438,155440,155442],{"class":108,"line":28},[106,155435,131569],{"class":116},[106,155437,649],{"class":112},[106,155439,146521],{"class":116},[106,155441,162],{"class":112},[106,155443,146526],{"class":221},[106,155445,155446,155448,155450],{"class":108,"line":1172},[106,155447,14687],{"class":112},[106,155449,13557],{"class":112},[106,155451,155452],{"class":221}," \"一班\"\n",[14,155454,155455],{},"查看关键字：",[97,155457,155459],{"className":30372,"code":155458,"language":30374,"meta":25,"style":25},"import keyword\n\nprint(keyword.kwlist)\n",[103,155460,155461,155468,155472],{"__ignoreMap":25},[106,155462,155463,155465],{"class":108,"line":109},[106,155464,30386],{"class":112},[106,155466,155467],{"class":116}," keyword\n",[106,155469,155470],{"class":108,"line":28},[106,155471,2392],{"emptyLinePlaceholder":33},[106,155473,155474,155476],{"class":108,"line":1172},[106,155475,30409],{"class":165},[106,155477,155478],{"class":116},"(keyword.kwlist)\n",[14,155480,155481],{},"推荐命名风格：",[97,155483,155485],{"className":30372,"code":155484,"language":30374,"meta":25,"style":25},"student_name = \"小明\"\ntotal_price = 99.8\nis_finished = False\n",[103,155486,155487,155496,155506],{"__ignoreMap":25},[106,155488,155489,155492,155494],{"class":108,"line":109},[106,155490,155491],{"class":116},"student_name ",[106,155493,162],{"class":112},[106,155495,149338],{"class":221},[106,155497,155498,155501,155503],{"class":108,"line":28},[106,155499,155500],{"class":116},"total_price ",[106,155502,162],{"class":112},[106,155504,155505],{"class":165}," 99.8\n",[106,155507,155508,155511,155513],{"class":108,"line":1172},[106,155509,155510],{"class":116},"is_finished ",[106,155512,162],{"class":112},[106,155514,125792],{"class":165},[14,155516,155517],{},"Python 中变量名通常使用小写字母和下划线，也叫 snake_case。",[48,155519,50726],{"id":50725},[14,155521,104351,155522,155525],{},[103,155523,155524],{},"type()"," 查看数据类型：",[97,155527,155529],{"className":30372,"code":155528,"language":30374,"meta":25,"style":25},"print(type(100))\nprint(type(3.14))\nprint(type(\"hello\"))\nprint(type(True))\nprint(type(None))\n",[103,155530,155531,155545,155559,155573,155587],{"__ignoreMap":25},[106,155532,155533,155535,155537,155539,155541,155543],{"class":108,"line":109},[106,155534,30409],{"class":165},[106,155536,117],{"class":116},[106,155538,103092],{"class":165},[106,155540,117],{"class":116},[106,155542,428],{"class":165},[106,155544,30491],{"class":116},[106,155546,155547,155549,155551,155553,155555,155557],{"class":108,"line":28},[106,155548,30409],{"class":165},[106,155550,117],{"class":116},[106,155552,103092],{"class":165},[106,155554,117],{"class":116},[106,155556,166],{"class":165},[106,155558,30491],{"class":116},[106,155560,155561,155563,155565,155567,155569,155571],{"class":108,"line":1172},[106,155562,30409],{"class":165},[106,155564,117],{"class":116},[106,155566,103092],{"class":165},[106,155568,117],{"class":116},[106,155570,5837],{"class":221},[106,155572,30491],{"class":116},[106,155574,155575,155577,155579,155581,155583,155585],{"class":108,"line":1187},[106,155576,30409],{"class":165},[106,155578,117],{"class":116},[106,155580,103092],{"class":165},[106,155582,117],{"class":116},[106,155584,31470],{"class":165},[106,155586,30491],{"class":116},[106,155588,155589,155591,155593,155595,155597,155599],{"class":108,"line":1193},[106,155590,30409],{"class":165},[106,155592,117],{"class":116},[106,155594,103092],{"class":165},[106,155596,117],{"class":116},[106,155598,95671],{"class":165},[106,155600,30491],{"class":116},[14,155602,155603],{},"输出类似：",[97,155605,155608],{"className":155606,"code":155607,"language":5180,"meta":25},[5178],"\u003Cclass 'int'>\n\u003Cclass 'float'>\n\u003Cclass 'str'>\n\u003Cclass 'bool'>\n\u003Cclass 'NoneType'>\n",[103,155609,155607],{"__ignoreMap":25},[14,155611,9018,155612,107268,155614,155616,155617,155619,155620,21493,155622,155619,155624,155626],{},[103,155613,1347],{},[103,155615,120],{}," 的子类，",[103,155618,31470],{}," 可以当作 ",[103,155621,334],{},[103,155623,33981],{},[103,155625,308],{},"，但业务代码中不要滥用。",[97,155628,155630],{"className":30372,"code":155629,"language":30374,"meta":25,"style":25},"print(True + 1)   # 2\nprint(False + 1)  # 1\n",[103,155631,155632,155650],{"__ignoreMap":25},[106,155633,155634,155636,155638,155640,155642,155644,155647],{"class":108,"line":109},[106,155635,30409],{"class":165},[106,155637,117],{"class":116},[106,155639,31470],{"class":165},[106,155641,45560],{"class":112},[106,155643,25112],{"class":165},[106,155645,155646],{"class":116},")   ",[106,155648,155649],{"class":175},"# 2\n",[106,155651,155652,155654,155656,155658,155660,155662,155664],{"class":108,"line":28},[106,155653,30409],{"class":165},[106,155655,117],{"class":116},[106,155657,33981],{"class":165},[106,155659,45560],{"class":112},[106,155661,25112],{"class":165},[106,155663,45802],{"class":116},[106,155665,155666],{"class":175},"# 1\n",[48,155668,155670],{"id":155669},"_26-类型转换","2.6 类型转换",[14,155672,155673],{},"常用转换函数：",[97,155675,155677],{"className":30372,"code":155676,"language":30374,"meta":25,"style":25},"int(\"10\")\nfloat(\"3.14\")\nstr(100)\nbool(1)\n",[103,155678,155679,155689,155700,155710],{"__ignoreMap":25},[106,155680,155681,155683,155685,155687],{"class":108,"line":109},[106,155682,120],{"class":165},[106,155684,117],{"class":116},[106,155686,54310],{"class":221},[106,155688,123],{"class":116},[106,155690,155691,155693,155695,155698],{"class":108,"line":28},[106,155692,156],{"class":165},[106,155694,117],{"class":116},[106,155696,155697],{"class":221},"\"3.14\"",[106,155699,123],{"class":116},[106,155701,155702,155704,155706,155708],{"class":108,"line":1172},[106,155703,1292],{"class":165},[106,155705,117],{"class":116},[106,155707,428],{"class":165},[106,155709,123],{"class":116},[106,155711,155712,155714,155716,155718],{"class":108,"line":1187},[106,155713,1347],{"class":165},[106,155715,117],{"class":116},[106,155717,334],{"class":165},[106,155719,123],{"class":116},[14,155721,15128],{},[97,155723,155725],{"className":30372,"code":155724,"language":30374,"meta":25,"style":25},"age = \"18\"\nage = int(age)\nprint(age + 1)\n",[103,155726,155727,155736,155747],{"__ignoreMap":25},[106,155728,155729,155731,155733],{"class":108,"line":109},[106,155730,146531],{"class":116},[106,155732,162],{"class":112},[106,155734,155735],{"class":221}," \"18\"\n",[106,155737,155738,155740,155742,155744],{"class":108,"line":28},[106,155739,146531],{"class":116},[106,155741,162],{"class":112},[106,155743,2374],{"class":165},[106,155745,155746],{"class":116},"(age)\n",[106,155748,155749,155751,155754,155756,155758],{"class":108,"line":1172},[106,155750,30409],{"class":165},[106,155752,155753],{"class":116},"(age ",[106,155755,598],{"class":112},[106,155757,25112],{"class":165},[106,155759,123],{"class":116},[14,155761,155762],{},"输入得到的内容永远是字符串：",[97,155764,155766],{"className":30372,"code":155765,"language":30374,"meta":25,"style":25},"num = input(\"请输入数字:\")\nprint(type(num))  # str\n",[103,155767,155768,155784],{"__ignoreMap":25},[106,155769,155770,155773,155775,155777,155779,155782],{"class":108,"line":109},[106,155771,155772],{"class":116},"num ",[106,155774,162],{"class":112},[106,155776,60599],{"class":165},[106,155778,117],{"class":116},[106,155780,155781],{"class":221},"\"请输入数字:\"",[106,155783,123],{"class":116},[106,155785,155786,155788,155790,155792,155795],{"class":108,"line":28},[106,155787,30409],{"class":165},[106,155789,117],{"class":116},[106,155791,103092],{"class":165},[106,155793,155794],{"class":116},"(num))  ",[106,155796,155797],{"class":175},"# str\n",[14,155799,155800],{},"如果要做数学运算，必须转换：",[97,155802,155804],{"className":30372,"code":155803,"language":30374,"meta":25,"style":25},"num = int(input(\"请输入数字:\"))\nprint(num + 10)\n",[103,155805,155806,155824],{"__ignoreMap":25},[106,155807,155808,155810,155812,155814,155816,155818,155820,155822],{"class":108,"line":109},[106,155809,155772],{"class":116},[106,155811,162],{"class":112},[106,155813,2374],{"class":165},[106,155815,117],{"class":116},[106,155817,53815],{"class":165},[106,155819,117],{"class":116},[106,155821,155781],{"class":221},[106,155823,30491],{"class":116},[106,155825,155826,155828,155830,155832,155834],{"class":108,"line":28},[106,155827,30409],{"class":165},[106,155829,45613],{"class":116},[106,155831,598],{"class":112},[106,155833,2030],{"class":165},[106,155835,123],{"class":116},[14,155837,155838],{},"常见错误：",[97,155840,155842],{"className":30372,"code":155841,"language":30374,"meta":25,"style":25},"int(\"3.14\")   # 错误\nint(\"abc\")    # 错误\n",[103,155843,155844,155857],{"__ignoreMap":25},[106,155845,155846,155848,155850,155852,155854],{"class":108,"line":109},[106,155847,120],{"class":165},[106,155849,117],{"class":116},[106,155851,155697],{"class":221},[106,155853,155646],{"class":116},[106,155855,155856],{"class":175},"# 错误\n",[106,155858,155859,155861,155863,155866,155869],{"class":108,"line":28},[106,155860,120],{"class":165},[106,155862,117],{"class":116},[106,155864,155865],{"class":221},"\"abc\"",[106,155867,155868],{"class":116},")    ",[106,155870,155856],{"class":175},[14,155872,155873],{},"正确写法：",[97,155875,155877],{"className":30372,"code":155876,"language":30374,"meta":25,"style":25},"num = float(\"3.14\")\n",[103,155878,155879],{"__ignoreMap":25},[106,155880,155881,155883,155885,155887,155889,155891],{"class":108,"line":109},[106,155882,155772],{"class":116},[106,155884,162],{"class":112},[106,155886,109782],{"class":165},[106,155888,117],{"class":116},[106,155890,155697],{"class":221},[106,155892,123],{"class":116},[48,155894,155896],{"id":155895},"_27-运算符","2.7 运算符",[77,155898,155900],{"id":155899},"_271-算术运算符","2.7.1 算术运算符",[254,155902,155903,155914],{},[257,155904,155905],{},[260,155906,155907,155910,155912],{},[263,155908,155909],{},"运算符",[263,155911,25863],{},[263,155913,27486],{},[301,155915,155916,155930,155944,155958,155972,155986,156000],{},[260,155917,155918,155922,155925],{},[306,155919,155920],{},[103,155921,598],{},[306,155923,155924],{},"加法",[306,155926,155927],{},[103,155928,155929],{},"1 + 2",[260,155931,155932,155936,155939],{},[306,155933,155934],{},[103,155935,649],{},[306,155937,155938],{},"减法",[306,155940,155941],{},[103,155942,155943],{},"5 - 3",[260,155945,155946,155950,155953],{},[306,155947,155948],{},[103,155949,572],{},[306,155951,155952],{},"乘法",[306,155954,155955],{},[103,155956,155957],{},"2 * 3",[260,155959,155960,155964,155967],{},[306,155961,155962],{},[103,155963,701],{},[306,155965,155966],{},"除法，结果是浮点数",[306,155968,155969],{},[103,155970,155971],{},"5 \u002F 2",[260,155973,155974,155978,155981],{},[306,155975,155976],{},[103,155977,33323],{},[306,155979,155980],{},"整除",[306,155982,155983],{},[103,155984,155985],{},"5 \u002F\u002F 2",[260,155987,155988,155992,155995],{},[306,155989,155990],{},[103,155991,445],{},[306,155993,155994],{},"取余",[306,155996,155997],{},[103,155998,155999],{},"5 % 2",[260,156001,156002,156006,156009],{},[306,156003,156004],{},[103,156005,10654],{},[306,156007,156008],{},"幂运算",[306,156010,156011],{},[103,156012,156013],{},"2 ** 3",[14,156015,15128],{},[97,156017,156019],{"className":30372,"code":156018,"language":30374,"meta":25,"style":25},"print(5 \u002F 2)   # 2.5\nprint(5 \u002F\u002F 2)  # 2\nprint(5 % 2)   # 1\nprint(2 ** 3)  # 8\n",[103,156020,156021,156039,156056,156073],{"__ignoreMap":25},[106,156022,156023,156025,156027,156029,156032,156034,156036],{"class":108,"line":109},[106,156024,30409],{"class":165},[106,156026,117],{"class":116},[106,156028,436],{"class":165},[106,156030,156031],{"class":112}," \u002F",[106,156033,14748],{"class":165},[106,156035,155646],{"class":116},[106,156037,156038],{"class":175},"# 2.5\n",[106,156040,156041,156043,156045,156047,156050,156052,156054],{"class":108,"line":28},[106,156042,30409],{"class":165},[106,156044,117],{"class":116},[106,156046,436],{"class":165},[106,156048,156049],{"class":112}," \u002F\u002F",[106,156051,14748],{"class":165},[106,156053,45802],{"class":116},[106,156055,155649],{"class":175},[106,156057,156058,156060,156062,156064,156067,156069,156071],{"class":108,"line":1172},[106,156059,30409],{"class":165},[106,156061,117],{"class":116},[106,156063,436],{"class":165},[106,156065,156066],{"class":112}," %",[106,156068,14748],{"class":165},[106,156070,155646],{"class":116},[106,156072,155666],{"class":175},[106,156074,156075,156077,156079,156081,156084,156086,156088],{"class":108,"line":1187},[106,156076,30409],{"class":165},[106,156078,117],{"class":116},[106,156080,194],{"class":165},[106,156082,156083],{"class":112}," **",[106,156085,78064],{"class":165},[106,156087,45802],{"class":116},[106,156089,156090],{"class":175},"# 8\n",[77,156092,156094],{"id":156093},"_272-赋值运算符","2.7.2 赋值运算符",[97,156096,156098],{"className":30372,"code":156097,"language":30374,"meta":25,"style":25},"num = 10\nnum += 5\nnum -= 2\nnum *= 3\nnum \u002F= 2\n",[103,156099,156100,156108,156116,156124,156132],{"__ignoreMap":25},[106,156101,156102,156104,156106],{"class":108,"line":109},[106,156103,155772],{"class":116},[106,156105,162],{"class":112},[106,156107,58422],{"class":165},[106,156109,156110,156112,156114],{"class":108,"line":28},[106,156111,155772],{"class":116},[106,156113,9470],{"class":112},[106,156115,54421],{"class":165},[106,156117,156118,156120,156122],{"class":108,"line":1172},[106,156119,155772],{"class":116},[106,156121,150237],{"class":112},[106,156123,47717],{"class":165},[106,156125,156126,156128,156130],{"class":108,"line":1187},[106,156127,155772],{"class":116},[106,156129,137133],{"class":112},[106,156131,120021],{"class":165},[106,156133,156134,156136,156139],{"class":108,"line":1193},[106,156135,155772],{"class":116},[106,156137,156138],{"class":112},"\u002F=",[106,156140,47717],{"class":165},[14,156142,156143],{},"等价关系：",[97,156145,156147],{"className":30372,"code":156146,"language":30374,"meta":25,"style":25},"num += 1\nnum = num + 1\n",[103,156148,156149,156157],{"__ignoreMap":25},[106,156150,156151,156153,156155],{"class":108,"line":109},[106,156152,155772],{"class":116},[106,156154,9470],{"class":112},[106,156156,55693],{"class":165},[106,156158,156159,156161,156163,156166,156168],{"class":108,"line":28},[106,156160,155772],{"class":116},[106,156162,162],{"class":112},[106,156164,156165],{"class":116}," num ",[106,156167,598],{"class":112},[106,156169,55693],{"class":165},[14,156171,156172,156173,101003,156176,28379],{},"Python 没有 ",[103,156174,156175],{},"num++",[103,156177,156178],{},"num--",[77,156180,156182],{"id":156181},"_273-比较运算符","2.7.3 比较运算符",[14,156184,156185],{},"比较运算结果是布尔值。",[97,156187,156189],{"className":30372,"code":156188,"language":30374,"meta":25,"style":25},"print(10 > 5)\nprint(10 >= 10)\nprint(10 == 8)\nprint(10 != 8)\n",[103,156190,156191,156205,156220,156234],{"__ignoreMap":25},[106,156192,156193,156195,156197,156199,156201,156203],{"class":108,"line":109},[106,156194,30409],{"class":165},[106,156196,117],{"class":116},[106,156198,563],{"class":165},[106,156200,26216],{"class":112},[106,156202,2140],{"class":165},[106,156204,123],{"class":116},[106,156206,156207,156209,156211,156213,156216,156218],{"class":108,"line":28},[106,156208,30409],{"class":165},[106,156210,117],{"class":116},[106,156212,563],{"class":165},[106,156214,156215],{"class":112}," >=",[106,156217,2030],{"class":165},[106,156219,123],{"class":116},[106,156221,156222,156224,156226,156228,156230,156232],{"class":108,"line":1172},[106,156223,30409],{"class":165},[106,156225,117],{"class":116},[106,156227,563],{"class":165},[106,156229,101544],{"class":112},[106,156231,2075],{"class":165},[106,156233,123],{"class":116},[106,156235,156236,156238,156240,156242,156245,156247],{"class":108,"line":1187},[106,156237,30409],{"class":165},[106,156239,117],{"class":116},[106,156241,563],{"class":165},[106,156243,156244],{"class":112}," !=",[106,156246,2075],{"class":165},[106,156248,123],{"class":116},[14,156250,156251,156252,156254,156255,28379],{},"注意：判断相等用 ",[103,156253,2941],{},"，赋值用 ",[103,156256,162],{},[97,156258,156260],{"className":30372,"code":156259,"language":30374,"meta":25,"style":25},"age = 18       # 赋值\nage == 18      # 判断是否相等\n",[103,156261,156262,156274],{"__ignoreMap":25},[106,156263,156264,156266,156268,156271],{"class":108,"line":109},[106,156265,146531],{"class":116},[106,156267,162],{"class":112},[106,156269,156270],{"class":165}," 18",[106,156272,156273],{"class":175},"       # 赋值\n",[106,156275,156276,156278,156280,156282],{"class":108,"line":28},[106,156277,146531],{"class":116},[106,156279,2941],{"class":112},[106,156281,156270],{"class":165},[106,156283,156284],{"class":175},"      # 判断是否相等\n",[77,156286,156288],{"id":156287},"_274-逻辑运算符","2.7.4 逻辑运算符",[254,156290,156291,156299],{},[257,156292,156293],{},[260,156294,156295,156297],{},[263,156296,155909],{},[263,156298,25863],{},[301,156300,156301,156310,156319],{},[260,156302,156303,156307],{},[306,156304,156305],{},[103,156306,30456],{},[306,156308,156309],{},"并且",[260,156311,156312,156316],{},[306,156313,156314],{},[103,156315,115075],{},[306,156317,156318],{},"或者",[260,156320,156321,156326],{},[306,156322,156323],{},[103,156324,156325],{},"not",[306,156327,156328],{},"取反",[97,156330,156332],{"className":30372,"code":156331,"language":30374,"meta":25,"style":25},"age = 20\nhas_ticket = True\n\nprint(age >= 18 and has_ticket)\nprint(age \u003C 18 or has_ticket)\nprint(not has_ticket)\n",[103,156333,156334,156342,156351,156355,156370,156384],{"__ignoreMap":25},[106,156335,156336,156338,156340],{"class":108,"line":109},[106,156337,146531],{"class":116},[106,156339,162],{"class":112},[106,156341,88059],{"class":165},[106,156343,156344,156347,156349],{"class":108,"line":28},[106,156345,156346],{"class":116},"has_ticket ",[106,156348,162],{"class":112},[106,156350,153584],{"class":165},[106,156352,156353],{"class":108,"line":1172},[106,156354,2392],{"emptyLinePlaceholder":33},[106,156356,156357,156359,156361,156363,156365,156367],{"class":108,"line":1187},[106,156358,30409],{"class":165},[106,156360,155753],{"class":116},[106,156362,1702],{"class":112},[106,156364,156270],{"class":165},[106,156366,120414],{"class":112},[106,156368,156369],{"class":116}," has_ticket)\n",[106,156371,156372,156374,156376,156378,156380,156382],{"class":108,"line":1193},[106,156373,30409],{"class":165},[106,156375,155753],{"class":116},[106,156377,1027],{"class":112},[106,156379,156270],{"class":165},[106,156381,114186],{"class":112},[106,156383,156369],{"class":116},[106,156385,156386,156388,156390,156392],{"class":108,"line":1207},[106,156387,30409],{"class":165},[106,156389,117],{"class":116},[106,156391,156325],{"class":112},[106,156393,156369],{"class":116},[48,156395,156397],{"id":156396},"_28-字符串定义","2.8 字符串定义",[14,156399,156400],{},"三种常见写法：",[97,156402,156404],{"className":30372,"code":156403,"language":30374,"meta":25,"style":25},"name1 = '小明'\nname2 = \"小明\"\ntext = \"\"\"这是多行字符串\n可以换行\"\"\"\n",[103,156405,156406,156416,156425,156435],{"__ignoreMap":25},[106,156407,156408,156411,156413],{"class":108,"line":109},[106,156409,156410],{"class":116},"name1 ",[106,156412,162],{"class":112},[106,156414,156415],{"class":221}," '小明'\n",[106,156417,156418,156421,156423],{"class":108,"line":28},[106,156419,156420],{"class":116},"name2 ",[106,156422,162],{"class":112},[106,156424,149338],{"class":221},[106,156426,156427,156430,156432],{"class":108,"line":1172},[106,156428,156429],{"class":116},"text ",[106,156431,162],{"class":112},[106,156433,156434],{"class":221}," \"\"\"这是多行字符串\n",[106,156436,156437],{"class":108,"line":1187},[106,156438,156439],{"class":221},"可以换行\"\"\"\n",[14,156441,156442],{},"字符串中包含引号：",[97,156444,156446],{"className":30372,"code":156445,"language":30374,"meta":25,"style":25},"msg = \"他说:'你好'\"\nmsg2 = '他说:\"你好\"'\nmsg3 = \"他说:\\\"你好\\\"\"\n",[103,156447,156448,156458,156468],{"__ignoreMap":25},[106,156449,156450,156453,156455],{"class":108,"line":109},[106,156451,156452],{"class":116},"msg ",[106,156454,162],{"class":112},[106,156456,156457],{"class":221}," \"他说:'你好'\"\n",[106,156459,156460,156463,156465],{"class":108,"line":28},[106,156461,156462],{"class":116},"msg2 ",[106,156464,162],{"class":112},[106,156466,156467],{"class":221}," '他说:\"你好\"'\n",[106,156469,156470,156473,156475,156478,156481,156484,156486],{"class":108,"line":1172},[106,156471,156472],{"class":116},"msg3 ",[106,156474,162],{"class":112},[106,156476,156477],{"class":221}," \"他说:",[106,156479,156480],{"class":165},"\\\"",[106,156482,156483],{"class":221},"你好",[106,156485,156480],{"class":165},[106,156487,25127],{"class":221},[14,156489,156490],{},"常见转义字符：",[254,156492,156493,156502],{},[257,156494,156495],{},[260,156496,156497,156500],{},[263,156498,156499],{},"写法",[263,156501,100685],{},[301,156503,156504,156514,156523,156533,156542],{},[260,156505,156506,156511],{},[306,156507,156508],{},[103,156509,156510],{},"\\n",[306,156512,156513],{},"换行",[260,156515,156516,156520],{},[306,156517,156518],{},[103,156519,1223],{},[306,156521,156522],{},"制表符",[260,156524,156525,156530],{},[306,156526,156527],{},[103,156528,156529],{},"\\\\",[306,156531,156532],{},"反斜杠",[260,156534,156535,156539],{},[306,156536,156537],{},[103,156538,156480],{},[306,156540,156541],{},"双引号",[260,156543,156544,156549],{},[306,156545,156546],{},[103,156547,156548],{},"\\'",[306,156550,156551],{},"单引号",[48,156553,156555],{"id":156554},"_29-字符串拼接","2.9 字符串拼接",[97,156557,156559],{"className":30372,"code":156558,"language":30374,"meta":25,"style":25},"name = \"小明\"\nprint(\"你好，\" + name)\n",[103,156560,156561,156569],{"__ignoreMap":25},[106,156562,156563,156565,156567],{"class":108,"line":109},[106,156564,146521],{"class":116},[106,156566,162],{"class":112},[106,156568,149338],{"class":221},[106,156570,156571,156573,156575,156578,156580],{"class":108,"line":28},[106,156572,30409],{"class":165},[106,156574,117],{"class":116},[106,156576,156577],{"class":221},"\"你好，\"",[106,156579,45560],{"class":112},[106,156581,156582],{"class":116}," name)\n",[14,156584,156585],{},"字符串只能和字符串拼接：",[97,156587,156589],{"className":30372,"code":156588,"language":30374,"meta":25,"style":25},"age = 18\nprint(\"年龄:\" + str(age))\n",[103,156590,156591,156599],{"__ignoreMap":25},[106,156592,156593,156595,156597],{"class":108,"line":109},[106,156594,146531],{"class":116},[106,156596,162],{"class":112},[106,156598,146536],{"class":165},[106,156600,156601,156603,156605,156607,156609,156611],{"class":108,"line":28},[106,156602,30409],{"class":165},[106,156604,117],{"class":116},[106,156606,146502],{"class":221},[106,156608,45560],{"class":112},[106,156610,73913],{"class":165},[106,156612,156613],{"class":116},"(age))\n",[14,156615,156616],{},"更推荐使用格式化字符串。",[48,156618,156620],{"id":156619},"_210-字符串格式化","2.10 字符串格式化",[77,156622,156624],{"id":156623},"_2101-百分号格式化","2.10.1 百分号格式化",[97,156626,156628],{"className":30372,"code":156627,"language":30374,"meta":25,"style":25},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(\"姓名:%s 年龄:%d 分数:%.1f\" % (name, age, score))\n",[103,156629,156630,156638,156646,156655,156659],{"__ignoreMap":25},[106,156631,156632,156634,156636],{"class":108,"line":109},[106,156633,146521],{"class":116},[106,156635,162],{"class":112},[106,156637,149338],{"class":221},[106,156639,156640,156642,156644],{"class":108,"line":28},[106,156641,146531],{"class":116},[106,156643,162],{"class":112},[106,156645,146536],{"class":165},[106,156647,156648,156650,156652],{"class":108,"line":1172},[106,156649,155343],{"class":116},[106,156651,162],{"class":112},[106,156653,156654],{"class":165}," 95.5\n",[106,156656,156657],{"class":108,"line":1187},[106,156658,2392],{"emptyLinePlaceholder":33},[106,156660,156661,156663,156665,156668,156671,156674,156677,156680,156683,156685,156687],{"class":108,"line":1193},[106,156662,30409],{"class":165},[106,156664,117],{"class":116},[106,156666,156667],{"class":221},"\"姓名:",[106,156669,156670],{"class":165},"%s",[106,156672,156673],{"class":221}," 年龄:",[106,156675,156676],{"class":165},"%d",[106,156678,156679],{"class":221}," 分数:",[106,156681,156682],{"class":165},"%.1f",[106,156684,368],{"class":221},[106,156686,156066],{"class":112},[106,156688,156689],{"class":116}," (name, age, score))\n",[14,156691,156692],{},"常用占位符：",[254,156694,156695,156704],{},[257,156696,156697],{},[260,156698,156699,156702],{},[263,156700,156701],{},"占位符",[263,156703,25863],{},[301,156705,156706,156714,156722],{},[260,156707,156708,156712],{},[306,156709,156710],{},[103,156711,156670],{},[306,156713,155209],{},[260,156715,156716,156720],{},[306,156717,156718],{},[103,156719,156676],{},[306,156721,155187],{},[260,156723,156724,156729],{},[306,156725,156726],{},[103,156727,156728],{},"%f",[306,156730,155198],{},[14,156732,156733],{},"精度控制：",[97,156735,156737],{"className":30372,"code":156736,"language":30374,"meta":25,"style":25},"price = 12.3456\nprint(\"%.2f\" % price)\n",[103,156738,156739,156748],{"__ignoreMap":25},[106,156740,156741,156743,156745],{"class":108,"line":109},[106,156742,146666],{"class":116},[106,156744,162],{"class":112},[106,156746,156747],{"class":165}," 12.3456\n",[106,156749,156750,156752,156754,156756,156759,156761,156763],{"class":108,"line":28},[106,156751,30409],{"class":165},[106,156753,117],{"class":116},[106,156755,368],{"class":221},[106,156757,156758],{"class":165},"%.2f",[106,156760,368],{"class":221},[106,156762,156066],{"class":112},[106,156764,156765],{"class":116}," price)\n",[77,156767,156769],{"id":156768},"_2102-format方法","2.10.2 format方法",[97,156771,156773],{"className":30372,"code":156772,"language":30374,"meta":25,"style":25},"name = \"小明\"\nage = 18\n\nprint(\"姓名:{} 年龄:{}\".format(name, age))\nprint(\"姓名:{0} 年龄:{1}\".format(name, age))\nprint(\"姓名:{name} 年龄:{age}\".format(name=name, age=age))\n",[103,156774,156775,156783,156791,156795,156814,156834],{"__ignoreMap":25},[106,156776,156777,156779,156781],{"class":108,"line":109},[106,156778,146521],{"class":116},[106,156780,162],{"class":112},[106,156782,149338],{"class":221},[106,156784,156785,156787,156789],{"class":108,"line":28},[106,156786,146531],{"class":116},[106,156788,162],{"class":112},[106,156790,146536],{"class":165},[106,156792,156793],{"class":108,"line":1172},[106,156794,2392],{"emptyLinePlaceholder":33},[106,156796,156797,156799,156801,156803,156805,156807,156809,156811],{"class":108,"line":1187},[106,156798,30409],{"class":165},[106,156800,117],{"class":116},[106,156802,156667],{"class":221},[106,156804,32453],{"class":165},[106,156806,156673],{"class":221},[106,156808,32453],{"class":165},[106,156810,368],{"class":221},[106,156812,156813],{"class":116},".format(name, age))\n",[106,156815,156816,156818,156820,156822,156825,156827,156830,156832],{"class":108,"line":1193},[106,156817,30409],{"class":165},[106,156819,117],{"class":116},[106,156821,156667],{"class":221},[106,156823,156824],{"class":165},"{0}",[106,156826,156673],{"class":221},[106,156828,156829],{"class":165},"{1}",[106,156831,368],{"class":221},[106,156833,156813],{"class":116},[106,156835,156836,156838,156840,156842,156845,156847,156850,156852,156855,156857,156859,156862,156864,156866],{"class":108,"line":1207},[106,156837,30409],{"class":165},[106,156839,117],{"class":116},[106,156841,156667],{"class":221},[106,156843,156844],{"class":165},"{name}",[106,156846,156673],{"class":221},[106,156848,156849],{"class":165},"{age}",[106,156851,368],{"class":221},[106,156853,156854],{"class":116},".format(",[106,156856,79804],{"class":5209},[106,156858,162],{"class":112},[106,156860,156861],{"class":116},"name, ",[106,156863,70215],{"class":5209},[106,156865,162],{"class":112},[106,156867,156868],{"class":116},"age))\n",[77,156870,156872],{"id":156871},"_2103-f-string","2.10.3 f-string",[14,156874,156875],{},"推荐写法：",[97,156877,156879],{"className":30372,"code":156878,"language":30374,"meta":25,"style":25},"name = \"小明\"\nage = 18\nscore = 95.5\n\nprint(f\"姓名:{name} 年龄:{age} 分数:{score:.1f}\")\n",[103,156880,156881,156889,156897,156905,156909],{"__ignoreMap":25},[106,156882,156883,156885,156887],{"class":108,"line":109},[106,156884,146521],{"class":116},[106,156886,162],{"class":112},[106,156888,149338],{"class":221},[106,156890,156891,156893,156895],{"class":108,"line":28},[106,156892,146531],{"class":116},[106,156894,162],{"class":112},[106,156896,146536],{"class":165},[106,156898,156899,156901,156903],{"class":108,"line":1172},[106,156900,155343],{"class":116},[106,156902,162],{"class":112},[106,156904,156654],{"class":165},[106,156906,156907],{"class":108,"line":1187},[106,156908,2392],{"emptyLinePlaceholder":33},[106,156910,156911,156913,156915,156917,156919,156921,156923,156925,156927,156929,156931,156933,156935,156937,156940,156943,156945,156947],{"class":108,"line":1193},[106,156912,30409],{"class":165},[106,156914,117],{"class":116},[106,156916,169],{"class":112},[106,156918,156667],{"class":221},[106,156920,1013],{"class":165},[106,156922,79804],{"class":116},[106,156924,1063],{"class":165},[106,156926,156673],{"class":221},[106,156928,1013],{"class":165},[106,156930,70215],{"class":116},[106,156932,1063],{"class":165},[106,156934,156679],{"class":221},[106,156936,1013],{"class":165},[106,156938,156939],{"class":116},"score",[106,156941,156942],{"class":112},":.1f",[106,156944,1063],{"class":165},[106,156946,368],{"class":221},[106,156948,123],{"class":116},[14,156950,156951],{},"表达式也可以放进去：",[97,156953,156955],{"className":30372,"code":156954,"language":30374,"meta":25,"style":25},"price = 8\ncount = 5\nprint(f\"总价:{price * count}元\")\n",[103,156956,156957,156965,156973],{"__ignoreMap":25},[106,156958,156959,156961,156963],{"class":108,"line":109},[106,156960,146666],{"class":116},[106,156962,162],{"class":112},[106,156964,146671],{"class":165},[106,156966,156967,156969,156971],{"class":108,"line":28},[106,156968,146676],{"class":116},[106,156970,162],{"class":112},[106,156972,54421],{"class":165},[106,156974,156975,156977,156979,156981,156984,156986,156988,156990,156993,156995,156998],{"class":108,"line":1172},[106,156976,30409],{"class":165},[106,156978,117],{"class":116},[106,156980,169],{"class":112},[106,156982,156983],{"class":221},"\"总价:",[106,156985,1013],{"class":165},[106,156987,146666],{"class":116},[106,156989,572],{"class":112},[106,156991,156992],{"class":116}," count",[106,156994,1063],{"class":165},[106,156996,156997],{"class":221},"元\"",[106,156999,123],{"class":116},[48,157001,157003],{"id":157002},"_211-input输入","2.11 input输入",[14,157005,157006,157009],{},[103,157007,157008],{},"input()"," 会暂停程序，等待用户输入。",[97,157011,157013],{"className":30372,"code":157012,"language":30374,"meta":25,"style":25},"name = input(\"请输入姓名:\")\nprint(f\"你好，{name}\")\n",[103,157014,157015,157029],{"__ignoreMap":25},[106,157016,157017,157019,157021,157023,157025,157027],{"class":108,"line":109},[106,157018,146521],{"class":116},[106,157020,162],{"class":112},[106,157022,60599],{"class":165},[106,157024,117],{"class":116},[106,157026,152364],{"class":221},[106,157028,123],{"class":116},[106,157030,157031,157033,157035,157037,157040,157042,157044,157046,157048],{"class":108,"line":28},[106,157032,30409],{"class":165},[106,157034,117],{"class":116},[106,157036,169],{"class":112},[106,157038,157039],{"class":221},"\"你好，",[106,157041,1013],{"class":165},[106,157043,79804],{"class":116},[106,157045,1063],{"class":165},[106,157047,368],{"class":221},[106,157049,123],{"class":116},[14,157051,157052],{},"输入整数：",[97,157054,157056],{"className":30372,"code":157055,"language":30374,"meta":25,"style":25},"age = int(input(\"请输入年龄:\"))\nprint(f\"明年你{age + 1}岁\")\n",[103,157057,157058,157076],{"__ignoreMap":25},[106,157059,157060,157062,157064,157066,157068,157070,157072,157074],{"class":108,"line":109},[106,157061,146531],{"class":116},[106,157063,162],{"class":112},[106,157065,2374],{"class":165},[106,157067,117],{"class":116},[106,157069,53815],{"class":165},[106,157071,117],{"class":116},[106,157073,152379],{"class":221},[106,157075,30491],{"class":116},[106,157077,157078,157080,157082,157084,157087,157089,157091,157093,157096,157098],{"class":108,"line":28},[106,157079,30409],{"class":165},[106,157081,117],{"class":116},[106,157083,169],{"class":112},[106,157085,157086],{"class":221},"\"明年你",[106,157088,1013],{"class":165},[106,157090,146531],{"class":116},[106,157092,598],{"class":112},[106,157094,157095],{"class":165}," 1}",[106,157097,149389],{"class":221},[106,157099,123],{"class":116},[14,157101,157102],{},"输入小数：",[97,157104,157106],{"className":30372,"code":157105,"language":30374,"meta":25,"style":25},"height = float(input(\"请输入身高:\"))\nprint(f\"身高:{height:.2f}米\")\n",[103,157107,157108,157127],{"__ignoreMap":25},[106,157109,157110,157112,157114,157116,157118,157120,157122,157125],{"class":108,"line":109},[106,157111,155316],{"class":116},[106,157113,162],{"class":112},[106,157115,109782],{"class":165},[106,157117,117],{"class":116},[106,157119,53815],{"class":165},[106,157121,117],{"class":116},[106,157123,157124],{"class":221},"\"请输入身高:\"",[106,157126,30491],{"class":116},[106,157128,157129,157131,157133,157135,157138,157140,157142,157145,157147,157150],{"class":108,"line":28},[106,157130,30409],{"class":165},[106,157132,117],{"class":116},[106,157134,169],{"class":112},[106,157136,157137],{"class":221},"\"身高:",[106,157139,1013],{"class":165},[106,157141,24975],{"class":116},[106,157143,157144],{"class":112},":.2f",[106,157146,1063],{"class":165},[106,157148,157149],{"class":221},"米\"",[106,157151,123],{"class":116},[48,157153,157155],{"id":157154},"_212-小案例购物金额计算","2.12 小案例：购物金额计算",[14,157157,123277],{},[60,157159,157160,157163,157166,157169],{},[63,157161,157162],{},"输入商品单价。",[63,157164,157165],{},"输入购买数量。",[63,157167,157168],{},"输入折扣，例如 0.8 表示八折。",[63,157170,157171],{},"输出最终金额，保留两位小数。",[14,157173,10028],{},[97,157175,157177],{"className":30372,"code":157176,"language":30374,"meta":25,"style":25},"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",[103,157178,157179,157198,157217,157237,157241,157261,157265,157288,157309,157331],{"__ignoreMap":25},[106,157180,157181,157183,157185,157187,157189,157191,157193,157196],{"class":108,"line":109},[106,157182,146666],{"class":116},[106,157184,162],{"class":112},[106,157186,109782],{"class":165},[106,157188,117],{"class":116},[106,157190,53815],{"class":165},[106,157192,117],{"class":116},[106,157194,157195],{"class":221},"\"请输入商品单价:\"",[106,157197,30491],{"class":116},[106,157199,157200,157202,157204,157206,157208,157210,157212,157215],{"class":108,"line":28},[106,157201,146676],{"class":116},[106,157203,162],{"class":112},[106,157205,2374],{"class":165},[106,157207,117],{"class":116},[106,157209,53815],{"class":165},[106,157211,117],{"class":116},[106,157213,157214],{"class":221},"\"请输入购买数量:\"",[106,157216,30491],{"class":116},[106,157218,157219,157222,157224,157226,157228,157230,157232,157235],{"class":108,"line":1172},[106,157220,157221],{"class":116},"discount ",[106,157223,162],{"class":112},[106,157225,109782],{"class":165},[106,157227,117],{"class":116},[106,157229,53815],{"class":165},[106,157231,117],{"class":116},[106,157233,157234],{"class":221},"\"请输入折扣:\"",[106,157236,30491],{"class":116},[106,157238,157239],{"class":108,"line":1187},[106,157240,2392],{"emptyLinePlaceholder":33},[106,157242,157243,157246,157248,157251,157253,157256,157258],{"class":108,"line":1193},[106,157244,157245],{"class":116},"total ",[106,157247,162],{"class":112},[106,157249,157250],{"class":116}," price ",[106,157252,572],{"class":112},[106,157254,157255],{"class":116}," count ",[106,157257,572],{"class":112},[106,157259,157260],{"class":116}," discount\n",[106,157262,157263],{"class":108,"line":1207},[106,157264,2392],{"emptyLinePlaceholder":33},[106,157266,157267,157269,157271,157273,157276,157278,157280,157282,157284,157286],{"class":108,"line":1213},[106,157268,30409],{"class":165},[106,157270,117],{"class":116},[106,157272,169],{"class":112},[106,157274,157275],{"class":221},"\"商品单价:",[106,157277,1013],{"class":165},[106,157279,79809],{"class":116},[106,157281,157144],{"class":112},[106,157283,1063],{"class":165},[106,157285,368],{"class":221},[106,157287,123],{"class":116},[106,157289,157290,157292,157294,157296,157299,157301,157303,157305,157307],{"class":108,"line":1304},[106,157291,30409],{"class":165},[106,157293,117],{"class":116},[106,157295,169],{"class":112},[106,157297,157298],{"class":221},"\"购买数量:",[106,157300,1013],{"class":165},[106,157302,84428],{"class":116},[106,157304,1063],{"class":165},[106,157306,368],{"class":221},[106,157308,123],{"class":116},[106,157310,157311,157313,157315,157317,157320,157322,157325,157327,157329],{"class":108,"line":1310},[106,157312,30409],{"class":165},[106,157314,117],{"class":116},[106,157316,169],{"class":112},[106,157318,157319],{"class":221},"\"折扣:",[106,157321,1013],{"class":165},[106,157323,157324],{"class":116},"discount",[106,157326,1063],{"class":165},[106,157328,368],{"class":221},[106,157330,123],{"class":116},[106,157332,157333,157335,157337,157339,157342,157344,157347,157349,157351,157353],{"class":108,"line":1322},[106,157334,30409],{"class":165},[106,157336,117],{"class":116},[106,157338,169],{"class":112},[106,157340,157341],{"class":221},"\"应付金额:",[106,157343,1013],{"class":165},[106,157345,157346],{"class":116},"total",[106,157348,157144],{"class":112},[106,157350,1063],{"class":165},[106,157352,156997],{"class":221},[106,157354,123],{"class":116},[48,157356,157358],{"id":157357},"_213-易错点","2.13 易错点",[60,157360,157361,157366,157372,157380,157383],{},[63,157362,157363,157365],{},[103,157364,157008],{}," 的结果是字符串，做运算前要转换。",[63,157367,157368,157369,28379],{},"字符串拼接时，数字要先 ",[103,157370,157371],{},"str()",[63,157373,157374,157376,157377,157379],{},[103,157375,162],{}," 是赋值，",[103,157378,2941],{}," 是比较。",[63,157381,157382],{},"Python 没有自增自减运算符。",[63,157384,157385],{},"浮点数计算可能有精度误差：",[97,157387,157389],{"className":30372,"code":157388,"language":30374,"meta":25,"style":25},"print(0.1 + 0.2)\n",[103,157390,157391],{"__ignoreMap":25},[106,157392,157393,157395,157397,157399,157401,157404],{"class":108,"line":109},[106,157394,30409],{"class":165},[106,157396,117],{"class":116},[106,157398,86204],{"class":165},[106,157400,45560],{"class":112},[106,157402,157403],{"class":165}," 0.2",[106,157405,123],{"class":116},[14,157407,157408,157409,157412],{},"金额计算如果要求严格，可以后续学习 ",[103,157410,157411],{},"decimal"," 模块。",[48,157414,157416],{"id":157415},"_214-本章练习","2.14 本章练习",[60,157418,157419,157422,157425,157428,157431],{},[63,157420,157421],{},"输入姓名、年龄、身高，使用 f-string 输出个人信息。",[63,157423,157424],{},"输入圆的半径，计算面积，保留两位小数。",[63,157426,157427],{},"输入工资和奖金，计算总收入。",[63,157429,157430],{},"输入摄氏温度，转换为华氏温度。",[63,157432,157433],{},"写一个 BMI 计算程序：",[97,157435,157438],{"className":157436,"code":157437,"language":5180,"meta":25},[5178],"BMI = 体重kg \u002F 身高m ** 2\n",[103,157439,157437],{"__ignoreMap":25},[5119,157441,157442],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":28,"depth":28,"links":157444},[157445,157446,157447,157448,157449,157450,157451,157457,157458,157459,157464,157465,157466,157467],{"id":155006,"depth":28,"text":155007},{"id":155115,"depth":28,"text":155116},{"id":155286,"depth":28,"text":155287},{"id":155363,"depth":28,"text":155364},{"id":50725,"depth":28,"text":50726},{"id":155669,"depth":28,"text":155670},{"id":155895,"depth":28,"text":155896,"children":157452},[157453,157454,157455,157456],{"id":155899,"depth":1172,"text":155900},{"id":156093,"depth":1172,"text":156094},{"id":156181,"depth":1172,"text":156182},{"id":156287,"depth":1172,"text":156288},{"id":156396,"depth":28,"text":156397},{"id":156554,"depth":28,"text":156555},{"id":156619,"depth":28,"text":156620,"children":157460},[157461,157462,157463],{"id":156623,"depth":1172,"text":156624},{"id":156768,"depth":1172,"text":156769},{"id":156871,"depth":1172,"text":156872},{"id":157002,"depth":28,"text":157003},{"id":157154,"depth":28,"text":157155},{"id":157357,"depth":28,"text":157358},{"id":157415,"depth":28,"text":157416},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch2",{"title":154998,"description":30},"wiki\u002F2024-10-10-python教程\u002Fch2-基础语法变量与字符串","I4Lu1y1Wu68M1sbt4yv1esO-sQz1pWvuN3Svu2Ad3mo",{"id":157474,"title":157475,"body":157476,"description":30,"extension":31,"meta":159112,"navigation":33,"path":159113,"seo":159114,"stem":159115,"__hash__":159116},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch3-判断语句.md","3. 判断语句",{"type":7,"value":157477,"toc":159093},[157478,157481,157485,157488,157503,157506,157534,157538,157588,157590,157606,157609,157635,157638,157642,157709,157712,157728,157732,157735,157853,157856,157863,157912,157918,157922,157925,158038,158041,158045,158049,158052,158102,158106,158109,158159,158163,158166,158204,158208,158211,158257,158260,158295,158299,158304,158307,158353,158355,158422,158426,158432,158543,158552,158556,158558,158569,158571,158737,158741,158743,158757,158759,158973,158977,158996,159013,159016,159062,159066,159090],[10,157479,157475],{"id":157480},"_3-判断语句",[48,157482,157484],{"id":157483},"_31-布尔值","3.1 布尔值",[14,157486,157487],{},"判断语句依赖布尔值：",[97,157489,157491],{"className":30372,"code":157490,"language":30374,"meta":25,"style":25},"True\nFalse\n",[103,157492,157493,157498],{"__ignoreMap":25},[106,157494,157495],{"class":108,"line":109},[106,157496,157497],{"class":165},"True\n",[106,157499,157500],{"class":108,"line":28},[106,157501,157502],{"class":165},"False\n",[14,157504,157505],{},"比较表达式会产生布尔值：",[97,157507,157509],{"className":30372,"code":157508,"language":30374,"meta":25,"style":25},"age = 18\nprint(age >= 18)  # True\n",[103,157510,157511,157519],{"__ignoreMap":25},[106,157512,157513,157515,157517],{"class":108,"line":109},[106,157514,146531],{"class":116},[106,157516,162],{"class":112},[106,157518,146536],{"class":165},[106,157520,157521,157523,157525,157527,157529,157531],{"class":108,"line":28},[106,157522,30409],{"class":165},[106,157524,155753],{"class":116},[106,157526,1702],{"class":112},[106,157528,156270],{"class":165},[106,157530,45802],{"class":116},[106,157532,157533],{"class":175},"# True\n",[48,157535,157537],{"id":157536},"_32-if基础语法","3.2 if基础语法",[97,157539,157541],{"className":30372,"code":157540,"language":30374,"meta":25,"style":25},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"可以进入网吧\")\n",[103,157542,157543,157561,157565,157577],{"__ignoreMap":25},[106,157544,157545,157547,157549,157551,157553,157555,157557,157559],{"class":108,"line":109},[106,157546,146531],{"class":116},[106,157548,162],{"class":112},[106,157550,2374],{"class":165},[106,157552,117],{"class":116},[106,157554,53815],{"class":165},[106,157556,117],{"class":116},[106,157558,152379],{"class":221},[106,157560,30491],{"class":116},[106,157562,157563],{"class":108,"line":28},[106,157564,2392],{"emptyLinePlaceholder":33},[106,157566,157567,157569,157571,157573,157575],{"class":108,"line":1172},[106,157568,1523],{"class":112},[106,157570,15700],{"class":116},[106,157572,1702],{"class":112},[106,157574,156270],{"class":165},[106,157576,3731],{"class":116},[106,157578,157579,157581,157583,157586],{"class":108,"line":1187},[106,157580,31293],{"class":165},[106,157582,117],{"class":116},[106,157584,157585],{"class":221},"\"可以进入网吧\"",[106,157587,123],{"class":116},[14,157589,9018],{},[60,157591,157592,157597,157600,157603],{},[63,157593,157594,157596],{},[103,157595,1523],{}," 后面是条件表达式。",[63,157598,157599],{},"条件后面必须写冒号。",[63,157601,157602],{},"条件成立时执行缩进代码块。",[63,157604,157605],{},"Python 用缩进表示代码层级，一般使用 4 个空格。",[14,157607,157608],{},"错误示例：",[97,157610,157612],{"className":30372,"code":157611,"language":30374,"meta":25,"style":25},"if age >= 18\n    print(\"可以进入\")\n",[103,157613,157614,157624],{"__ignoreMap":25},[106,157615,157616,157618,157620,157622],{"class":108,"line":109},[106,157617,1523],{"class":112},[106,157619,15700],{"class":116},[106,157621,1702],{"class":112},[106,157623,146536],{"class":165},[106,157625,157626,157628,157630,157633],{"class":108,"line":28},[106,157627,31293],{"class":165},[106,157629,117],{"class":116},[106,157631,157632],{"class":221},"\"可以进入\"",[106,157634,123],{"class":116},[14,157636,157637],{},"缺少冒号。",[48,157639,157641],{"id":157640},"_33-if-else","3.3 if else",[97,157643,157645],{"className":30372,"code":157644,"language":30374,"meta":25,"style":25},"age = int(input(\"请输入年龄:\"))\n\nif age >= 18:\n    print(\"成年人\")\nelse:\n    print(\"未成年人\")\n",[103,157646,157647,157665,157669,157681,157692,157698],{"__ignoreMap":25},[106,157648,157649,157651,157653,157655,157657,157659,157661,157663],{"class":108,"line":109},[106,157650,146531],{"class":116},[106,157652,162],{"class":112},[106,157654,2374],{"class":165},[106,157656,117],{"class":116},[106,157658,53815],{"class":165},[106,157660,117],{"class":116},[106,157662,152379],{"class":221},[106,157664,30491],{"class":116},[106,157666,157667],{"class":108,"line":28},[106,157668,2392],{"emptyLinePlaceholder":33},[106,157670,157671,157673,157675,157677,157679],{"class":108,"line":1172},[106,157672,1523],{"class":112},[106,157674,15700],{"class":116},[106,157676,1702],{"class":112},[106,157678,156270],{"class":165},[106,157680,3731],{"class":116},[106,157682,157683,157685,157687,157690],{"class":108,"line":1187},[106,157684,31293],{"class":165},[106,157686,117],{"class":116},[106,157688,157689],{"class":221},"\"成年人\"",[106,157691,123],{"class":116},[106,157693,157694,157696],{"class":108,"line":1193},[106,157695,1693],{"class":112},[106,157697,3731],{"class":116},[106,157699,157700,157702,157704,157707],{"class":108,"line":1207},[106,157701,31293],{"class":165},[106,157703,117],{"class":116},[106,157705,157706],{"class":221},"\"未成年人\"",[106,157708,123],{"class":116},[14,157710,157711],{},"执行逻辑：",[60,157713,157714,157720,157725],{},[63,157715,157716,157717,157719],{},"条件成立，执行 ",[103,157718,1523],{}," 代码块。",[63,157721,157722,157723,157719],{},"条件不成立，执行 ",[103,157724,1693],{},[63,157726,157727],{},"两个代码块只会执行其中一个。",[48,157729,157731],{"id":157730},"_34-if-elif-else","3.4 if elif else",[14,157733,157734],{},"多条件判断：",[97,157736,157738],{"className":30372,"code":157737,"language":30374,"meta":25,"style":25},"score = int(input(\"请输入成绩:\"))\n\nif score >= 90:\n    print(\"优秀\")\nelif score >= 80:\n    print(\"良好\")\nelif score >= 60:\n    print(\"及格\")\nelse:\n    print(\"不及格\")\n",[103,157739,157740,157758,157762,157776,157787,157801,157812,157825,157836,157842],{"__ignoreMap":25},[106,157741,157742,157744,157746,157748,157750,157752,157754,157756],{"class":108,"line":109},[106,157743,155343],{"class":116},[106,157745,162],{"class":112},[106,157747,2374],{"class":165},[106,157749,117],{"class":116},[106,157751,53815],{"class":165},[106,157753,117],{"class":116},[106,157755,152394],{"class":221},[106,157757,30491],{"class":116},[106,157759,157760],{"class":108,"line":28},[106,157761,2392],{"emptyLinePlaceholder":33},[106,157763,157764,157766,157769,157771,157774],{"class":108,"line":1172},[106,157765,1523],{"class":112},[106,157767,157768],{"class":116}," score ",[106,157770,1702],{"class":112},[106,157772,157773],{"class":165}," 90",[106,157775,3731],{"class":116},[106,157777,157778,157780,157782,157785],{"class":108,"line":1187},[106,157779,31293],{"class":165},[106,157781,117],{"class":116},[106,157783,157784],{"class":221},"\"优秀\"",[106,157786,123],{"class":116},[106,157788,157789,157792,157794,157796,157799],{"class":108,"line":1193},[106,157790,157791],{"class":112},"elif",[106,157793,157768],{"class":116},[106,157795,1702],{"class":112},[106,157797,157798],{"class":165}," 80",[106,157800,3731],{"class":116},[106,157802,157803,157805,157807,157810],{"class":108,"line":1207},[106,157804,31293],{"class":165},[106,157806,117],{"class":116},[106,157808,157809],{"class":221},"\"良好\"",[106,157811,123],{"class":116},[106,157813,157814,157816,157818,157820,157823],{"class":108,"line":1213},[106,157815,157791],{"class":112},[106,157817,157768],{"class":116},[106,157819,1702],{"class":112},[106,157821,157822],{"class":165}," 60",[106,157824,3731],{"class":116},[106,157826,157827,157829,157831,157834],{"class":108,"line":1304},[106,157828,31293],{"class":165},[106,157830,117],{"class":116},[106,157832,157833],{"class":221},"\"及格\"",[106,157835,123],{"class":116},[106,157837,157838,157840],{"class":108,"line":1310},[106,157839,1693],{"class":112},[106,157841,3731],{"class":116},[106,157843,157844,157846,157848,157851],{"class":108,"line":1322},[106,157845,31293],{"class":165},[106,157847,117],{"class":116},[106,157849,157850],{"class":221},"\"不及格\"",[106,157852,123],{"class":116},[14,157854,157855],{},"注意判断顺序很重要。",[14,157857,157858,157859,157862],{},"如果把 ",[103,157860,157861],{},"score >= 60"," 放在最前面：",[97,157864,157866],{"className":30372,"code":157865,"language":30374,"meta":25,"style":25},"if score >= 60:\n    print(\"及格\")\nelif score >= 90:\n    print(\"优秀\")\n",[103,157867,157868,157880,157890,157902],{"__ignoreMap":25},[106,157869,157870,157872,157874,157876,157878],{"class":108,"line":109},[106,157871,1523],{"class":112},[106,157873,157768],{"class":116},[106,157875,1702],{"class":112},[106,157877,157822],{"class":165},[106,157879,3731],{"class":116},[106,157881,157882,157884,157886,157888],{"class":108,"line":28},[106,157883,31293],{"class":165},[106,157885,117],{"class":116},[106,157887,157833],{"class":221},[106,157889,123],{"class":116},[106,157891,157892,157894,157896,157898,157900],{"class":108,"line":1172},[106,157893,157791],{"class":112},[106,157895,157768],{"class":116},[106,157897,1702],{"class":112},[106,157899,157773],{"class":165},[106,157901,3731],{"class":116},[106,157903,157904,157906,157908,157910],{"class":108,"line":1187},[106,157905,31293],{"class":165},[106,157907,117],{"class":116},[106,157909,157784],{"class":221},[106,157911,123],{"class":116},[14,157913,157914,157915,157917],{},"成绩 95 会先满足 ",[103,157916,157861],{},"，后面的优秀分支就不会执行。",[48,157919,157921],{"id":157920},"_35-判断语句嵌套","3.5 判断语句嵌套",[14,157923,157924],{},"嵌套判断就是在一个判断内部再写判断。",[97,157926,157928],{"className":30372,"code":157927,"language":30374,"meta":25,"style":25},"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",[103,157929,157930,157948,157963,157967,157979,157993,158003,158010,158021,158027],{"__ignoreMap":25},[106,157931,157932,157934,157936,157938,157940,157942,157944,157946],{"class":108,"line":109},[106,157933,146531],{"class":116},[106,157935,162],{"class":112},[106,157937,2374],{"class":165},[106,157939,117],{"class":116},[106,157941,53815],{"class":165},[106,157943,117],{"class":116},[106,157945,152379],{"class":221},[106,157947,30491],{"class":116},[106,157949,157950,157952,157954,157956,157958,157961],{"class":108,"line":28},[106,157951,156346],{"class":116},[106,157953,162],{"class":112},[106,157955,60599],{"class":165},[106,157957,117],{"class":116},[106,157959,157960],{"class":221},"\"是否有票(y\u002Fn):\"",[106,157962,123],{"class":116},[106,157964,157965],{"class":108,"line":1172},[106,157966,2392],{"emptyLinePlaceholder":33},[106,157968,157969,157971,157973,157975,157977],{"class":108,"line":1187},[106,157970,1523],{"class":112},[106,157972,15700],{"class":116},[106,157974,1702],{"class":112},[106,157976,156270],{"class":165},[106,157978,3731],{"class":116},[106,157980,157981,157983,157986,157988,157991],{"class":108,"line":1193},[106,157982,3093],{"class":112},[106,157984,157985],{"class":116}," has_ticket ",[106,157987,2941],{"class":112},[106,157989,157990],{"class":221}," \"y\"",[106,157992,3731],{"class":116},[106,157994,157995,157997,157999,158001],{"class":108,"line":1207},[106,157996,32445],{"class":165},[106,157998,117],{"class":116},[106,158000,157632],{"class":221},[106,158002,123],{"class":116},[106,158004,158005,158008],{"class":108,"line":1213},[106,158006,158007],{"class":112},"    else",[106,158009,3731],{"class":116},[106,158011,158012,158014,158016,158019],{"class":108,"line":1304},[106,158013,32445],{"class":165},[106,158015,117],{"class":116},[106,158017,158018],{"class":221},"\"请先买票\"",[106,158020,123],{"class":116},[106,158022,158023,158025],{"class":108,"line":1310},[106,158024,1693],{"class":112},[106,158026,3731],{"class":116},[106,158028,158029,158031,158033,158036],{"class":108,"line":1322},[106,158030,31293],{"class":165},[106,158032,117],{"class":116},[106,158034,158035],{"class":221},"\"未成年人禁止进入\"",[106,158037,123],{"class":116},[14,158039,158040],{},"嵌套层级不要太深，超过 3 层就应该考虑拆成函数或调整条件。",[48,158042,158044],{"id":158043},"_36-逻辑运算组合条件","3.6 逻辑运算组合条件",[77,158046,158048],{"id":158047},"_361-and","3.6.1 and",[14,158050,158051],{},"两个条件都成立才成立。",[97,158053,158055],{"className":30372,"code":158054,"language":30374,"meta":25,"style":25},"age = 20\nhas_ticket = True\n\nif age >= 18 and has_ticket:\n    print(\"可以进入\")\n",[103,158056,158057,158065,158073,158077,158092],{"__ignoreMap":25},[106,158058,158059,158061,158063],{"class":108,"line":109},[106,158060,146531],{"class":116},[106,158062,162],{"class":112},[106,158064,88059],{"class":165},[106,158066,158067,158069,158071],{"class":108,"line":28},[106,158068,156346],{"class":116},[106,158070,162],{"class":112},[106,158072,153584],{"class":165},[106,158074,158075],{"class":108,"line":1172},[106,158076,2392],{"emptyLinePlaceholder":33},[106,158078,158079,158081,158083,158085,158087,158089],{"class":108,"line":1187},[106,158080,1523],{"class":112},[106,158082,15700],{"class":116},[106,158084,1702],{"class":112},[106,158086,156270],{"class":165},[106,158088,120414],{"class":112},[106,158090,158091],{"class":116}," has_ticket:\n",[106,158093,158094,158096,158098,158100],{"class":108,"line":1193},[106,158095,31293],{"class":165},[106,158097,117],{"class":116},[106,158099,157632],{"class":221},[106,158101,123],{"class":116},[77,158103,158105],{"id":158104},"_362-or","3.6.2 or",[14,158107,158108],{},"只要一个条件成立就成立。",[97,158110,158112],{"className":30372,"code":158111,"language":30374,"meta":25,"style":25},"is_vip = False\ncoupon = True\n\nif is_vip or coupon:\n    print(\"可以享受优惠\")\n",[103,158113,158114,158123,158132,158136,158148],{"__ignoreMap":25},[106,158115,158116,158119,158121],{"class":108,"line":109},[106,158117,158118],{"class":116},"is_vip ",[106,158120,162],{"class":112},[106,158122,125792],{"class":165},[106,158124,158125,158128,158130],{"class":108,"line":28},[106,158126,158127],{"class":116},"coupon ",[106,158129,162],{"class":112},[106,158131,153584],{"class":165},[106,158133,158134],{"class":108,"line":1172},[106,158135,2392],{"emptyLinePlaceholder":33},[106,158137,158138,158140,158143,158145],{"class":108,"line":1187},[106,158139,1523],{"class":112},[106,158141,158142],{"class":116}," is_vip ",[106,158144,115075],{"class":112},[106,158146,158147],{"class":116}," coupon:\n",[106,158149,158150,158152,158154,158157],{"class":108,"line":1193},[106,158151,31293],{"class":165},[106,158153,117],{"class":116},[106,158155,158156],{"class":221},"\"可以享受优惠\"",[106,158158,123],{"class":116},[77,158160,158162],{"id":158161},"_363-not","3.6.3 not",[14,158164,158165],{},"取反。",[97,158167,158169],{"className":30372,"code":158168,"language":30374,"meta":25,"style":25},"is_closed = False\n\nif not is_closed:\n    print(\"店铺营业中\")\n",[103,158170,158171,158180,158184,158193],{"__ignoreMap":25},[106,158172,158173,158176,158178],{"class":108,"line":109},[106,158174,158175],{"class":116},"is_closed ",[106,158177,162],{"class":112},[106,158179,125792],{"class":165},[106,158181,158182],{"class":108,"line":28},[106,158183,2392],{"emptyLinePlaceholder":33},[106,158185,158186,158188,158190],{"class":108,"line":1172},[106,158187,1523],{"class":112},[106,158189,38924],{"class":112},[106,158191,158192],{"class":116}," is_closed:\n",[106,158194,158195,158197,158199,158202],{"class":108,"line":1187},[106,158196,31293],{"class":165},[106,158198,117],{"class":116},[106,158200,158201],{"class":221},"\"店铺营业中\"",[106,158203,123],{"class":116},[48,158205,158207],{"id":158206},"_37-链式比较","3.7 链式比较",[14,158209,158210],{},"Python 支持链式比较：",[97,158212,158214],{"className":30372,"code":158213,"language":30374,"meta":25,"style":25},"score = 85\n\nif 0 \u003C= score \u003C= 100:\n    print(\"成绩合法\")\n",[103,158215,158216,158225,158229,158246],{"__ignoreMap":25},[106,158217,158218,158220,158222],{"class":108,"line":109},[106,158219,155343],{"class":116},[106,158221,162],{"class":112},[106,158223,158224],{"class":165}," 85\n",[106,158226,158227],{"class":108,"line":28},[106,158228,2392],{"emptyLinePlaceholder":33},[106,158230,158231,158233,158235,158238,158240,158242,158244],{"class":108,"line":1172},[106,158232,1523],{"class":112},[106,158234,4085],{"class":165},[106,158236,158237],{"class":112}," \u003C=",[106,158239,157768],{"class":116},[106,158241,1580],{"class":112},[106,158243,5747],{"class":165},[106,158245,3731],{"class":116},[106,158247,158248,158250,158252,158255],{"class":108,"line":1187},[106,158249,31293],{"class":165},[106,158251,117],{"class":116},[106,158253,158254],{"class":221},"\"成绩合法\"",[106,158256,123],{"class":116},[14,158258,158259],{},"等价于：",[97,158261,158263],{"className":30372,"code":158262,"language":30374,"meta":25,"style":25},"if score >= 0 and score \u003C= 100:\n    print(\"成绩合法\")\n",[103,158264,158265,158285],{"__ignoreMap":25},[106,158266,158267,158269,158271,158273,158275,158277,158279,158281,158283],{"class":108,"line":109},[106,158268,1523],{"class":112},[106,158270,157768],{"class":116},[106,158272,1702],{"class":112},[106,158274,4085],{"class":165},[106,158276,120414],{"class":112},[106,158278,157768],{"class":116},[106,158280,1580],{"class":112},[106,158282,5747],{"class":165},[106,158284,3731],{"class":116},[106,158286,158287,158289,158291,158293],{"class":108,"line":28},[106,158288,31293],{"class":165},[106,158290,117],{"class":116},[106,158292,158254],{"class":221},[106,158294,123],{"class":116},[48,158296,158298],{"id":158297},"_38-真值和假值","3.8 真值和假值",[14,158300,116452,158301,158303],{},[103,158302,1523],{}," 中，不只有布尔值能做条件。很多对象也能被判断为真或假。",[14,158305,158306],{},"假值：",[97,158308,158310],{"className":30372,"code":158309,"language":30374,"meta":25,"style":25},"False\nNone\n0\n0.0\n\"\"\n[]\n()\n{}\nset()\n",[103,158311,158312,158316,158321,158325,158329,158334,158338,158342,158347],{"__ignoreMap":25},[106,158313,158314],{"class":108,"line":109},[106,158315,157502],{"class":165},[106,158317,158318],{"class":108,"line":28},[106,158319,158320],{"class":165},"None\n",[106,158322,158323],{"class":108,"line":1172},[106,158324,3077],{"class":165},[106,158326,158327],{"class":108,"line":1187},[106,158328,32336],{"class":165},[106,158330,158331],{"class":108,"line":1193},[106,158332,158333],{"class":221},"\"\"\n",[106,158335,158336],{"class":108,"line":1207},[106,158337,32351],{"class":116},[106,158339,158340],{"class":108,"line":1213},[106,158341,1968],{"class":116},[106,158343,158344],{"class":108,"line":1304},[106,158345,158346],{"class":116},"{}\n",[106,158348,158349,158351],{"class":108,"line":1310},[106,158350,155275],{"class":165},[106,158352,1968],{"class":116},[14,158354,15128],{},[97,158356,158358],{"className":30372,"code":158357,"language":30374,"meta":25,"style":25},"name = input(\"请输入姓名:\")\n\nif name:\n    print(f\"你好，{name}\")\nelse:\n    print(\"姓名不能为空\")\n",[103,158359,158360,158374,158378,158385,158405,158411],{"__ignoreMap":25},[106,158361,158362,158364,158366,158368,158370,158372],{"class":108,"line":109},[106,158363,146521],{"class":116},[106,158365,162],{"class":112},[106,158367,60599],{"class":165},[106,158369,117],{"class":116},[106,158371,152364],{"class":221},[106,158373,123],{"class":116},[106,158375,158376],{"class":108,"line":28},[106,158377,2392],{"emptyLinePlaceholder":33},[106,158379,158380,158382],{"class":108,"line":1172},[106,158381,1523],{"class":112},[106,158383,158384],{"class":116}," name:\n",[106,158386,158387,158389,158391,158393,158395,158397,158399,158401,158403],{"class":108,"line":1187},[106,158388,31293],{"class":165},[106,158390,117],{"class":116},[106,158392,169],{"class":112},[106,158394,157039],{"class":221},[106,158396,1013],{"class":165},[106,158398,79804],{"class":116},[106,158400,1063],{"class":165},[106,158402,368],{"class":221},[106,158404,123],{"class":116},[106,158406,158407,158409],{"class":108,"line":1193},[106,158408,1693],{"class":112},[106,158410,3731],{"class":116},[106,158412,158413,158415,158417,158420],{"class":108,"line":1207},[106,158414,31293],{"class":165},[106,158416,117],{"class":116},[106,158418,158419],{"class":221},"\"姓名不能为空\"",[106,158421,123],{"class":116},[48,158423,158425],{"id":158424},"_39-match语句","3.9 match语句",[14,158427,158428,158429,158431],{},"Python 3.10 开始支持 ",[103,158430,71259],{},"。它适合处理固定选项。",[97,158433,158435],{"className":30372,"code":158434,"language":30374,"meta":25,"style":25},"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",[103,158436,158437,158453,158457,158464,158474,158485,158494,158505,158514,158525,158532],{"__ignoreMap":25},[106,158438,158439,158442,158444,158446,158448,158451],{"class":108,"line":109},[106,158440,158441],{"class":116},"command ",[106,158443,162],{"class":112},[106,158445,60599],{"class":165},[106,158447,117],{"class":116},[106,158449,158450],{"class":221},"\"请输入命令:\"",[106,158452,123],{"class":116},[106,158454,158455],{"class":108,"line":28},[106,158456,2392],{"emptyLinePlaceholder":33},[106,158458,158459,158461],{"class":108,"line":1172},[106,158460,71259],{"class":112},[106,158462,158463],{"class":116}," command:\n",[106,158465,158466,158469,158472],{"class":108,"line":1187},[106,158467,158468],{"class":112},"    case",[106,158470,158471],{"class":221}," \"start\"",[106,158473,3731],{"class":116},[106,158475,158476,158478,158480,158483],{"class":108,"line":1193},[106,158477,32445],{"class":165},[106,158479,117],{"class":116},[106,158481,158482],{"class":221},"\"启动\"",[106,158484,123],{"class":116},[106,158486,158487,158489,158492],{"class":108,"line":1207},[106,158488,158468],{"class":112},[106,158490,158491],{"class":221}," \"stop\"",[106,158493,3731],{"class":116},[106,158495,158496,158498,158500,158503],{"class":108,"line":1213},[106,158497,32445],{"class":165},[106,158499,117],{"class":116},[106,158501,158502],{"class":221},"\"停止\"",[106,158504,123],{"class":116},[106,158506,158507,158509,158512],{"class":108,"line":1304},[106,158508,158468],{"class":112},[106,158510,158511],{"class":221}," \"restart\"",[106,158513,3731],{"class":116},[106,158515,158516,158518,158520,158523],{"class":108,"line":1310},[106,158517,32445],{"class":165},[106,158519,117],{"class":116},[106,158521,158522],{"class":221},"\"重启\"",[106,158524,123],{"class":116},[106,158526,158527,158529],{"class":108,"line":1322},[106,158528,158468],{"class":112},[106,158530,158531],{"class":116}," _:\n",[106,158533,158534,158536,158538,158541],{"class":108,"line":1604},[106,158535,32445],{"class":165},[106,158537,117],{"class":116},[106,158539,158540],{"class":221},"\"未知命令\"",[106,158542,123],{"class":116},[14,158544,158545,158546,158548,158549,158551],{},"入门阶段掌握 ",[103,158547,154643],{}," 更重要，",[103,158550,71259],{}," 可以作为补充。",[48,158553,158555],{"id":158554},"_310-小案例成绩等级","3.10 小案例：成绩等级",[14,158557,123277],{},[60,158559,158560,158563,158566],{},[63,158561,158562],{},"输入成绩。",[63,158564,158565],{},"判断成绩是否合法。",[63,158567,158568],{},"输出等级。",[14,158570,10028],{},[97,158572,158574],{"className":30372,"code":158573,"language":30374,"meta":25,"style":25},"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",[103,158575,158576,158594,158598,158616,158627,158639,158650,158662,158673,158686,158697,158709,158720,158726],{"__ignoreMap":25},[106,158577,158578,158580,158582,158584,158586,158588,158590,158592],{"class":108,"line":109},[106,158579,155343],{"class":116},[106,158581,162],{"class":112},[106,158583,109782],{"class":165},[106,158585,117],{"class":116},[106,158587,53815],{"class":165},[106,158589,117],{"class":116},[106,158591,152394],{"class":221},[106,158593,30491],{"class":116},[106,158595,158596],{"class":108,"line":28},[106,158597,2392],{"emptyLinePlaceholder":33},[106,158599,158600,158602,158604,158606,158608,158610,158612,158614],{"class":108,"line":1172},[106,158601,1523],{"class":112},[106,158603,38924],{"class":112},[106,158605,4085],{"class":165},[106,158607,158237],{"class":112},[106,158609,157768],{"class":116},[106,158611,1580],{"class":112},[106,158613,5747],{"class":165},[106,158615,3731],{"class":116},[106,158617,158618,158620,158622,158625],{"class":108,"line":1187},[106,158619,31293],{"class":165},[106,158621,117],{"class":116},[106,158623,158624],{"class":221},"\"成绩不合法\"",[106,158626,123],{"class":116},[106,158628,158629,158631,158633,158635,158637],{"class":108,"line":1193},[106,158630,157791],{"class":112},[106,158632,157768],{"class":116},[106,158634,1702],{"class":112},[106,158636,157773],{"class":165},[106,158638,3731],{"class":116},[106,158640,158641,158643,158645,158648],{"class":108,"line":1207},[106,158642,31293],{"class":165},[106,158644,117],{"class":116},[106,158646,158647],{"class":221},"\"等级:A\"",[106,158649,123],{"class":116},[106,158651,158652,158654,158656,158658,158660],{"class":108,"line":1213},[106,158653,157791],{"class":112},[106,158655,157768],{"class":116},[106,158657,1702],{"class":112},[106,158659,157798],{"class":165},[106,158661,3731],{"class":116},[106,158663,158664,158666,158668,158671],{"class":108,"line":1304},[106,158665,31293],{"class":165},[106,158667,117],{"class":116},[106,158669,158670],{"class":221},"\"等级:B\"",[106,158672,123],{"class":116},[106,158674,158675,158677,158679,158681,158684],{"class":108,"line":1310},[106,158676,157791],{"class":112},[106,158678,157768],{"class":116},[106,158680,1702],{"class":112},[106,158682,158683],{"class":165}," 70",[106,158685,3731],{"class":116},[106,158687,158688,158690,158692,158695],{"class":108,"line":1322},[106,158689,31293],{"class":165},[106,158691,117],{"class":116},[106,158693,158694],{"class":221},"\"等级:C\"",[106,158696,123],{"class":116},[106,158698,158699,158701,158703,158705,158707],{"class":108,"line":1604},[106,158700,157791],{"class":112},[106,158702,157768],{"class":116},[106,158704,1702],{"class":112},[106,158706,157822],{"class":165},[106,158708,3731],{"class":116},[106,158710,158711,158713,158715,158718],{"class":108,"line":1609},[106,158712,31293],{"class":165},[106,158714,117],{"class":116},[106,158716,158717],{"class":221},"\"等级:D\"",[106,158719,123],{"class":116},[106,158721,158722,158724],{"class":108,"line":1615},[106,158723,1693],{"class":112},[106,158725,3731],{"class":116},[106,158727,158728,158730,158732,158735],{"class":108,"line":1620},[106,158729,31293],{"class":165},[106,158731,117],{"class":116},[106,158733,158734],{"class":221},"\"等级:E\"",[106,158736,123],{"class":116},[48,158738,158740],{"id":158739},"_311-小案例会员折扣","3.11 小案例：会员折扣",[14,158742,123277],{},[60,158744,158745,158748,158751,158754],{},[63,158746,158747],{},"输入消费金额。",[63,158749,158750],{},"输入会员等级，普通、银卡、金卡。",[63,158752,158753],{},"普通不打折，银卡 9 折，金卡 8 折。",[63,158755,158756],{},"满 500 再减 50。",[14,158758,10028],{},[97,158760,158762],{"className":30372,"code":158761,"language":30374,"meta":25,"style":25},"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",[103,158763,158764,158784,158800,158804,158812,158816,158830,158840,158853,158862,158875,158883,158889,158900,158904,158918,158922,158936,158946,158950],{"__ignoreMap":25},[106,158765,158766,158769,158771,158773,158775,158777,158779,158782],{"class":108,"line":109},[106,158767,158768],{"class":116},"amount ",[106,158770,162],{"class":112},[106,158772,109782],{"class":165},[106,158774,117],{"class":116},[106,158776,53815],{"class":165},[106,158778,117],{"class":116},[106,158780,158781],{"class":221},"\"请输入消费金额:\"",[106,158783,30491],{"class":116},[106,158785,158786,158789,158791,158793,158795,158798],{"class":108,"line":28},[106,158787,158788],{"class":116},"level ",[106,158790,162],{"class":112},[106,158792,60599],{"class":165},[106,158794,117],{"class":116},[106,158796,158797],{"class":221},"\"请输入会员等级(普通\u002F银卡\u002F金卡):\"",[106,158799,123],{"class":116},[106,158801,158802],{"class":108,"line":1172},[106,158803,2392],{"emptyLinePlaceholder":33},[106,158805,158806,158808,158810],{"class":108,"line":1187},[106,158807,157221],{"class":116},[106,158809,162],{"class":112},[106,158811,55693],{"class":165},[106,158813,158814],{"class":108,"line":1193},[106,158815,2392],{"emptyLinePlaceholder":33},[106,158817,158818,158820,158823,158825,158828],{"class":108,"line":1207},[106,158819,1523],{"class":112},[106,158821,158822],{"class":116}," level ",[106,158824,2941],{"class":112},[106,158826,158827],{"class":221}," \"银卡\"",[106,158829,3731],{"class":116},[106,158831,158832,158835,158837],{"class":108,"line":1213},[106,158833,158834],{"class":116},"    discount ",[106,158836,162],{"class":112},[106,158838,158839],{"class":165}," 0.9\n",[106,158841,158842,158844,158846,158848,158851],{"class":108,"line":1304},[106,158843,157791],{"class":112},[106,158845,158822],{"class":116},[106,158847,2941],{"class":112},[106,158849,158850],{"class":221}," \"金卡\"",[106,158852,3731],{"class":116},[106,158854,158855,158857,158859],{"class":108,"line":1310},[106,158856,158834],{"class":116},[106,158858,162],{"class":112},[106,158860,158861],{"class":165}," 0.8\n",[106,158863,158864,158866,158868,158870,158873],{"class":108,"line":1322},[106,158865,157791],{"class":112},[106,158867,158822],{"class":116},[106,158869,2941],{"class":112},[106,158871,158872],{"class":221}," \"普通\"",[106,158874,3731],{"class":116},[106,158876,158877,158879,158881],{"class":108,"line":1604},[106,158878,158834],{"class":116},[106,158880,162],{"class":112},[106,158882,55693],{"class":165},[106,158884,158885,158887],{"class":108,"line":1609},[106,158886,1693],{"class":112},[106,158888,3731],{"class":116},[106,158890,158891,158893,158895,158898],{"class":108,"line":1615},[106,158892,31293],{"class":165},[106,158894,117],{"class":116},[106,158896,158897],{"class":221},"\"会员等级输入错误，按普通会员计算\"",[106,158899,123],{"class":116},[106,158901,158902],{"class":108,"line":1620},[106,158903,2392],{"emptyLinePlaceholder":33},[106,158905,158906,158909,158911,158914,158916],{"class":108,"line":1634},[106,158907,158908],{"class":116},"pay ",[106,158910,162],{"class":112},[106,158912,158913],{"class":116}," amount ",[106,158915,572],{"class":112},[106,158917,157260],{"class":116},[106,158919,158920],{"class":108,"line":1639},[106,158921,2392],{"emptyLinePlaceholder":33},[106,158923,158924,158926,158929,158931,158934],{"class":108,"line":1645},[106,158925,1523],{"class":112},[106,158927,158928],{"class":116}," pay ",[106,158930,1702],{"class":112},[106,158932,158933],{"class":165}," 500",[106,158935,3731],{"class":116},[106,158937,158938,158941,158943],{"class":108,"line":1666},[106,158939,158940],{"class":116},"    pay ",[106,158942,150237],{"class":112},[106,158944,158945],{"class":165}," 50\n",[106,158947,158948],{"class":108,"line":1671},[106,158949,2392],{"emptyLinePlaceholder":33},[106,158951,158952,158954,158956,158958,158960,158962,158965,158967,158969,158971],{"class":108,"line":1685},[106,158953,30409],{"class":165},[106,158955,117],{"class":116},[106,158957,169],{"class":112},[106,158959,157341],{"class":221},[106,158961,1013],{"class":165},[106,158963,158964],{"class":116},"pay",[106,158966,157144],{"class":112},[106,158968,1063],{"class":165},[106,158970,156997],{"class":221},[106,158972,123],{"class":116},[48,158974,158976],{"id":158975},"_312-易错点","3.12 易错点",[60,158978,158979,158982,158985,158988,158993],{},[63,158980,158981],{},"冒号不能漏。",[63,158983,158984],{},"缩进必须统一，不能一会儿 Tab 一会儿空格。",[63,158986,158987],{},"多分支判断要注意顺序。",[63,158989,158990,158991,28379],{},"判断相等用 ",[103,158992,2941],{},[63,158994,158995],{},"字符串比较区分大小写：",[97,158997,158999],{"className":30372,"code":158998,"language":30374,"meta":25,"style":25},"\"Y\" == \"y\"  # False\n",[103,159000,159001],{"__ignoreMap":25},[106,159002,159003,159006,159008,159010],{"class":108,"line":109},[106,159004,159005],{"class":221},"\"Y\"",[106,159007,101544],{"class":112},[106,159009,157990],{"class":221},[106,159011,159012],{"class":175},"  # False\n",[14,159014,159015],{},"可转换后再判断：",[97,159017,159019],{"className":30372,"code":159018,"language":30374,"meta":25,"style":25},"answer = input(\"是否继续(y\u002Fn):\").lower()\nif answer == \"y\":\n    print(\"继续\")\n",[103,159020,159021,159038,159051],{"__ignoreMap":25},[106,159022,159023,159026,159028,159030,159032,159035],{"class":108,"line":109},[106,159024,159025],{"class":116},"answer ",[106,159027,162],{"class":112},[106,159029,60599],{"class":165},[106,159031,117],{"class":116},[106,159033,159034],{"class":221},"\"是否继续(y\u002Fn):\"",[106,159036,159037],{"class":116},").lower()\n",[106,159039,159040,159042,159045,159047,159049],{"class":108,"line":28},[106,159041,1523],{"class":112},[106,159043,159044],{"class":116}," answer ",[106,159046,2941],{"class":112},[106,159048,157990],{"class":221},[106,159050,3731],{"class":116},[106,159052,159053,159055,159057,159060],{"class":108,"line":1172},[106,159054,31293],{"class":165},[106,159056,117],{"class":116},[106,159058,159059],{"class":221},"\"继续\"",[106,159061,123],{"class":116},[48,159063,159065],{"id":159064},"_313-本章练习","3.13 本章练习",[60,159067,159068,159071,159074,159077,159087],{},[63,159069,159070],{},"输入年龄，判断是否成年。",[63,159072,159073],{},"输入年份，判断是否为闰年。",[63,159075,159076],{},"输入三个数字，输出最大值。",[63,159078,159079,159080,159083,159084,159086],{},"写登录判断：用户名是 ",[103,159081,159082],{},"admin"," 且密码是 ",[103,159085,15077],{}," 才登录成功。",[63,159088,159089],{},"写 BMI 判断程序，根据 BMI 输出偏瘦、正常、偏胖、肥胖。",[5119,159091,159092],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":25,"searchDepth":28,"depth":28,"links":159094},[159095,159096,159097,159098,159099,159100,159105,159106,159107,159108,159109,159110,159111],{"id":157483,"depth":28,"text":157484},{"id":157536,"depth":28,"text":157537},{"id":157640,"depth":28,"text":157641},{"id":157730,"depth":28,"text":157731},{"id":157920,"depth":28,"text":157921},{"id":158043,"depth":28,"text":158044,"children":159101},[159102,159103,159104],{"id":158047,"depth":1172,"text":158048},{"id":158104,"depth":1172,"text":158105},{"id":158161,"depth":1172,"text":158162},{"id":158206,"depth":28,"text":158207},{"id":158297,"depth":28,"text":158298},{"id":158424,"depth":28,"text":158425},{"id":158554,"depth":28,"text":158555},{"id":158739,"depth":28,"text":158740},{"id":158975,"depth":28,"text":158976},{"id":159064,"depth":28,"text":159065},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch3",{"title":157475,"description":30},"wiki\u002F2024-10-10-python教程\u002Fch3-判断语句","oDk8-y3MbhdWOUdgOWXuIP5YOyzaLgeTq9n7H6mCe_M",{"id":159118,"title":159119,"body":159120,"description":30,"extension":31,"meta":160889,"navigation":33,"path":160890,"seo":160891,"stem":160892,"__hash__":160893},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch4-循环语句.md","4. 循环语句",{"type":7,"value":159121,"toc":160869},[159122,159125,159129,159135,159138,159155,159159,159161,159178,159180,159225,159227,159244,159248,159251,159317,159320,159338,159342,159503,159512,159516,159520,159525,159572,159574,159580,159584,159589,159636,159638,159644,159648,159653,159689,159692,159739,159743,159749,159807,159812,159843,159848,159852,159907,159910,159982,159985,160044,160048,160051,160126,160129,160133,160239,160242,160268,160272,160284,160353,160356,160448,160452,160454,160465,160467,160597,160601,160803,160811,160815,160845,160849,160866],[10,159123,159119],{"id":159124},"_4-循环语句",[48,159126,159128],{"id":159127},"_41-为什么需要循环","4.1 为什么需要循环",[14,159130,159131,159132,159134],{},"如果要输出 1 到 100，不应该写 100 行 ",[103,159133,146457],{},"，而应该用循环。",[14,159136,159137],{},"循环适合处理重复任务：",[60,159139,159140,159143,159146,159149,159152],{},[63,159141,159142],{},"重复输出。",[63,159144,159145],{},"重复输入。",[63,159147,159148],{},"遍历数据。",[63,159150,159151],{},"持续执行菜单。",[63,159153,159154],{},"批量处理文件或数据。",[48,159156,159158],{"id":159157},"_42-while循环","4.2 while循环",[14,159160,5174],{},[97,159162,159164],{"className":30372,"code":159163,"language":30374,"meta":25,"style":25},"while 条件:\n    循环体\n",[103,159165,159166,159173],{"__ignoreMap":25},[106,159167,159168,159170],{"class":108,"line":109},[106,159169,108648],{"class":112},[106,159171,159172],{"class":116}," 条件:\n",[106,159174,159175],{"class":108,"line":28},[106,159176,159177],{"class":116},"    循环体\n",[14,159179,15128],{},[97,159181,159183],{"className":30372,"code":159182,"language":30374,"meta":25,"style":25},"i = 1\n\nwhile i \u003C= 5:\n    print(i)\n    i += 1\n",[103,159184,159185,159193,159197,159209,159216],{"__ignoreMap":25},[106,159186,159187,159189,159191],{"class":108,"line":109},[106,159188,100133],{"class":116},[106,159190,162],{"class":112},[106,159192,55693],{"class":165},[106,159194,159195],{"class":108,"line":28},[106,159196,2392],{"emptyLinePlaceholder":33},[106,159198,159199,159201,159203,159205,159207],{"class":108,"line":1172},[106,159200,108648],{"class":112},[106,159202,9431],{"class":116},[106,159204,1580],{"class":112},[106,159206,2140],{"class":165},[106,159208,3731],{"class":116},[106,159210,159211,159213],{"class":108,"line":1187},[106,159212,31293],{"class":165},[106,159214,159215],{"class":116},"(i)\n",[106,159217,159218,159221,159223],{"class":108,"line":1193},[106,159219,159220],{"class":116},"    i ",[106,159222,9470],{"class":112},[106,159224,55693],{"class":165},[14,159226,80923],{},[60,159228,159229,159235,159238,159241],{},[63,159230,159231,159232,28379],{},"判断条件 ",[103,159233,159234],{},"i \u003C= 5",[63,159236,159237],{},"条件成立，执行循环体。",[63,159239,159240],{},"执行完后回到条件判断。",[63,159242,159243],{},"条件不成立，退出循环。",[48,159245,159247],{"id":159246},"_43-while累加","4.3 while累加",[14,159249,159250],{},"计算 1 到 100 的和：",[97,159252,159254],{"className":30372,"code":159253,"language":30374,"meta":25,"style":25},"i = 1\ntotal = 0\n\nwhile i \u003C= 100:\n    total += i\n    i += 1\n\nprint(total)\n",[103,159255,159256,159264,159272,159276,159288,159298,159306,159310],{"__ignoreMap":25},[106,159257,159258,159260,159262],{"class":108,"line":109},[106,159259,100133],{"class":116},[106,159261,162],{"class":112},[106,159263,55693],{"class":165},[106,159265,159266,159268,159270],{"class":108,"line":28},[106,159267,157245],{"class":116},[106,159269,162],{"class":112},[106,159271,47327],{"class":165},[106,159273,159274],{"class":108,"line":1172},[106,159275,2392],{"emptyLinePlaceholder":33},[106,159277,159278,159280,159282,159284,159286],{"class":108,"line":1187},[106,159279,108648],{"class":112},[106,159281,9431],{"class":116},[106,159283,1580],{"class":112},[106,159285,5747],{"class":165},[106,159287,3731],{"class":116},[106,159289,159290,159293,159295],{"class":108,"line":1193},[106,159291,159292],{"class":116},"    total ",[106,159294,9470],{"class":112},[106,159296,159297],{"class":116}," i\n",[106,159299,159300,159302,159304],{"class":108,"line":1207},[106,159301,159220],{"class":116},[106,159303,9470],{"class":112},[106,159305,55693],{"class":165},[106,159307,159308],{"class":108,"line":1213},[106,159309,2392],{"emptyLinePlaceholder":33},[106,159311,159312,159314],{"class":108,"line":1304},[106,159313,30409],{"class":165},[106,159315,159316],{"class":116},"(total)\n",[14,159318,159319],{},"核心思想：",[60,159321,159322,159327,159332],{},[63,159323,159324,159326],{},[103,159325,558],{}," 控制循环次数。",[63,159328,159329,159331],{},[103,159330,157346],{}," 保存累加结果。",[63,159333,159334,159335,159337],{},"每轮循环都要更新 ",[103,159336,558],{},"，否则可能死循环。",[48,159339,159341],{"id":159340},"_44-while猜数字","4.4 while猜数字",[97,159343,159345],{"className":30372,"code":159344,"language":30374,"meta":25,"style":25},"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",[103,159346,159347,159353,159357,159374,159382,159386,159394,159414,159423,159427,159439,159450,159460,159471,159477,159499],{"__ignoreMap":25},[106,159348,159349,159351],{"class":108,"line":109},[106,159350,30386],{"class":112},[106,159352,45322],{"class":116},[106,159354,159355],{"class":108,"line":28},[106,159356,2392],{"emptyLinePlaceholder":33},[106,159358,159359,159361,159363,159366,159368,159370,159372],{"class":108,"line":1172},[106,159360,159025],{"class":116},[106,159362,162],{"class":112},[106,159364,159365],{"class":116}," random.randint(",[106,159367,334],{"class":165},[106,159369,12428],{"class":116},[106,159371,428],{"class":165},[106,159373,123],{"class":116},[106,159375,159376,159378,159380],{"class":108,"line":1187},[106,159377,146676],{"class":116},[106,159379,162],{"class":112},[106,159381,47327],{"class":165},[106,159383,159384],{"class":108,"line":1193},[106,159385,2392],{"emptyLinePlaceholder":33},[106,159387,159388,159390,159392],{"class":108,"line":1207},[106,159389,108648],{"class":112},[106,159391,95277],{"class":165},[106,159393,3731],{"class":116},[106,159395,159396,159399,159401,159403,159405,159407,159409,159412],{"class":108,"line":1213},[106,159397,159398],{"class":116},"    guess ",[106,159400,162],{"class":112},[106,159402,2374],{"class":165},[106,159404,117],{"class":116},[106,159406,53815],{"class":165},[106,159408,117],{"class":116},[106,159410,159411],{"class":221},"\"请输入1到100之间的数字:\"",[106,159413,30491],{"class":116},[106,159415,159416,159419,159421],{"class":108,"line":1304},[106,159417,159418],{"class":116},"    count ",[106,159420,9470],{"class":112},[106,159422,55693],{"class":165},[106,159424,159425],{"class":108,"line":1310},[106,159426,2392],{"emptyLinePlaceholder":33},[106,159428,159429,159431,159434,159436],{"class":108,"line":1322},[106,159430,3093],{"class":112},[106,159432,159433],{"class":116}," guess ",[106,159435,1077],{"class":112},[106,159437,159438],{"class":116}," answer:\n",[106,159440,159441,159443,159445,159448],{"class":108,"line":1604},[106,159442,32445],{"class":165},[106,159444,117],{"class":116},[106,159446,159447],{"class":221},"\"猜大了\"",[106,159449,123],{"class":116},[106,159451,159452,159454,159456,159458],{"class":108,"line":1609},[106,159453,39287],{"class":112},[106,159455,159433],{"class":116},[106,159457,1027],{"class":112},[106,159459,159438],{"class":116},[106,159461,159462,159464,159466,159469],{"class":108,"line":1615},[106,159463,32445],{"class":165},[106,159465,117],{"class":116},[106,159467,159468],{"class":221},"\"猜小了\"",[106,159470,123],{"class":116},[106,159472,159473,159475],{"class":108,"line":1620},[106,159474,158007],{"class":112},[106,159476,3731],{"class":116},[106,159478,159479,159481,159483,159485,159488,159490,159492,159494,159497],{"class":108,"line":1634},[106,159480,32445],{"class":165},[106,159482,117],{"class":116},[106,159484,169],{"class":112},[106,159486,159487],{"class":221},"\"猜对了，一共猜了",[106,159489,1013],{"class":165},[106,159491,84428],{"class":116},[106,159493,1063],{"class":165},[106,159495,159496],{"class":221},"次\"",[106,159498,123],{"class":116},[106,159500,159501],{"class":108,"line":1639},[106,159502,31621],{"class":112},[14,159504,159505,159508,159509,159511],{},[103,159506,159507],{},"while True"," 表示无限循环，通常配合 ",[103,159510,2045],{}," 使用。",[48,159513,159515],{"id":159514},"_45-break和continue","4.5 break和continue",[77,159517,159519],{"id":159518},"_451-break","4.5.1 break",[14,159521,159522,159524],{},[103,159523,2045],{}," 直接结束整个循环。",[97,159526,159528],{"className":30372,"code":159527,"language":30374,"meta":25,"style":25},"for i in range(1, 6):\n    if i == 3:\n        break\n    print(i)\n",[103,159529,159530,159550,159562,159566],{"__ignoreMap":25},[106,159531,159532,159534,159536,159538,159540,159542,159544,159546,159548],{"class":108,"line":109},[106,159533,3017],{"class":112},[106,159535,9431],{"class":116},[106,159537,26037],{"class":112},[106,159539,32437],{"class":165},[106,159541,117],{"class":116},[106,159543,334],{"class":165},[106,159545,12428],{"class":116},[106,159547,461],{"class":165},[106,159549,30780],{"class":116},[106,159551,159552,159554,159556,159558,159560],{"class":108,"line":28},[106,159553,3093],{"class":112},[106,159555,9431],{"class":116},[106,159557,2941],{"class":112},[106,159559,78064],{"class":165},[106,159561,3731],{"class":116},[106,159563,159564],{"class":108,"line":1172},[106,159565,31621],{"class":112},[106,159567,159568,159570],{"class":108,"line":1187},[106,159569,31293],{"class":165},[106,159571,159215],{"class":116},[14,159573,146442],{},[97,159575,159578],{"className":159576,"code":159577,"language":5180,"meta":25},[5178],"1\n2\n",[103,159579,159577],{"__ignoreMap":25},[77,159581,159583],{"id":159582},"_452-continue","4.5.2 continue",[14,159585,159586,159588],{},[103,159587,154657],{}," 跳过本轮剩余代码，进入下一轮循环。",[97,159590,159592],{"className":30372,"code":159591,"language":30374,"meta":25,"style":25},"for i in range(1, 6):\n    if i == 3:\n        continue\n    print(i)\n",[103,159593,159594,159614,159626,159630],{"__ignoreMap":25},[106,159595,159596,159598,159600,159602,159604,159606,159608,159610,159612],{"class":108,"line":109},[106,159597,3017],{"class":112},[106,159599,9431],{"class":116},[106,159601,26037],{"class":112},[106,159603,32437],{"class":165},[106,159605,117],{"class":116},[106,159607,334],{"class":165},[106,159609,12428],{"class":116},[106,159611,461],{"class":165},[106,159613,30780],{"class":116},[106,159615,159616,159618,159620,159622,159624],{"class":108,"line":28},[106,159617,3093],{"class":112},[106,159619,9431],{"class":116},[106,159621,2941],{"class":112},[106,159623,78064],{"class":165},[106,159625,3731],{"class":116},[106,159627,159628],{"class":108,"line":1172},[106,159629,148497],{"class":112},[106,159631,159632,159634],{"class":108,"line":1187},[106,159633,31293],{"class":165},[106,159635,159215],{"class":116},[14,159637,146442],{},[97,159639,159642],{"className":159640,"code":159641,"language":5180,"meta":25},[5178],"1\n2\n4\n5\n",[103,159643,159641],{"__ignoreMap":25},[48,159645,159647],{"id":159646},"_46-for循环","4.6 for循环",[14,159649,159650,159652],{},[103,159651,3017],{}," 常用于遍历序列。",[97,159654,159656],{"className":30372,"code":159655,"language":30374,"meta":25,"style":25},"name = \"python\"\n\nfor ch in name:\n    print(ch)\n",[103,159657,159658,159667,159671,159682],{"__ignoreMap":25},[106,159659,159660,159662,159664],{"class":108,"line":109},[106,159661,146521],{"class":116},[106,159663,162],{"class":112},[106,159665,159666],{"class":221}," \"python\"\n",[106,159668,159669],{"class":108,"line":28},[106,159670,2392],{"emptyLinePlaceholder":33},[106,159672,159673,159675,159678,159680],{"class":108,"line":1172},[106,159674,3017],{"class":112},[106,159676,159677],{"class":116}," ch ",[106,159679,26037],{"class":112},[106,159681,158384],{"class":116},[106,159683,159684,159686],{"class":108,"line":1187},[106,159685,31293],{"class":165},[106,159687,159688],{"class":116},"(ch)\n",[14,159690,159691],{},"遍历列表：",[97,159693,159695],{"className":30372,"code":159694,"language":30374,"meta":25,"style":25},"students = [\"小明\", \"小红\", \"小刚\"]\n\nfor student in students:\n    print(student)\n",[103,159696,159697,159719,159723,159733],{"__ignoreMap":25},[106,159698,159699,159702,159704,159706,159708,159710,159712,159714,159717],{"class":108,"line":109},[106,159700,159701],{"class":116},"students ",[106,159703,162],{"class":112},[106,159705,52220],{"class":116},[106,159707,149873],{"class":221},[106,159709,12428],{"class":116},[106,159711,150921],{"class":221},[106,159713,12428],{"class":116},[106,159715,159716],{"class":221},"\"小刚\"",[106,159718,33240],{"class":116},[106,159720,159721],{"class":108,"line":28},[106,159722,2392],{"emptyLinePlaceholder":33},[106,159724,159725,159727,159729,159731],{"class":108,"line":1172},[106,159726,3017],{"class":112},[106,159728,152122],{"class":116},[106,159730,26037],{"class":112},[106,159732,152127],{"class":116},[106,159734,159735,159737],{"class":108,"line":1187},[106,159736,31293],{"class":165},[106,159738,150027],{"class":116},[48,159740,159742],{"id":159741},"_47-range函数","4.7 range函数",[14,159744,159745,159748],{},[103,159746,159747],{},"range()"," 用于生成整数序列。",[97,159750,159752],{"className":30372,"code":159751,"language":30374,"meta":25,"style":25},"range(5)          # 0,1,2,3,4\nrange(1, 5)       # 1,2,3,4\nrange(1, 10, 2)   # 1,3,5,7,9\n",[103,159753,159754,159768,159786],{"__ignoreMap":25},[106,159755,159756,159758,159760,159762,159765],{"class":108,"line":109},[106,159757,33410],{"class":165},[106,159759,117],{"class":116},[106,159761,436],{"class":165},[106,159763,159764],{"class":116},")          ",[106,159766,159767],{"class":175},"# 0,1,2,3,4\n",[106,159769,159770,159772,159774,159776,159778,159780,159783],{"class":108,"line":28},[106,159771,33410],{"class":165},[106,159773,117],{"class":116},[106,159775,334],{"class":165},[106,159777,12428],{"class":116},[106,159779,436],{"class":165},[106,159781,159782],{"class":116},")       ",[106,159784,159785],{"class":175},"# 1,2,3,4\n",[106,159787,159788,159790,159792,159794,159796,159798,159800,159802,159804],{"class":108,"line":1172},[106,159789,33410],{"class":165},[106,159791,117],{"class":116},[106,159793,334],{"class":165},[106,159795,12428],{"class":116},[106,159797,563],{"class":165},[106,159799,12428],{"class":116},[106,159801,194],{"class":165},[106,159803,155646],{"class":116},[106,159805,159806],{"class":175},"# 1,3,5,7,9\n",[14,159808,159809,159810,24612],{},"配合 ",[103,159811,3017],{},[97,159813,159815],{"className":30372,"code":159814,"language":30374,"meta":25,"style":25},"for i in range(1, 6):\n    print(i)\n",[103,159816,159817,159837],{"__ignoreMap":25},[106,159818,159819,159821,159823,159825,159827,159829,159831,159833,159835],{"class":108,"line":109},[106,159820,3017],{"class":112},[106,159822,9431],{"class":116},[106,159824,26037],{"class":112},[106,159826,32437],{"class":165},[106,159828,117],{"class":116},[106,159830,334],{"class":165},[106,159832,12428],{"class":116},[106,159834,461],{"class":165},[106,159836,30780],{"class":116},[106,159838,159839,159841],{"class":108,"line":28},[106,159840,31293],{"class":165},[106,159842,159215],{"class":116},[14,159844,9018,159845,159847],{},[103,159846,33410],{}," 的结束值不包含在内。",[48,159849,159851],{"id":159850},"_48-for循环求和","4.8 for循环求和",[97,159853,159855],{"className":30372,"code":159854,"language":30374,"meta":25,"style":25},"total = 0\n\nfor i in range(1, 101):\n    total += i\n\nprint(total)\n",[103,159856,159857,159865,159869,159889,159897,159901],{"__ignoreMap":25},[106,159858,159859,159861,159863],{"class":108,"line":109},[106,159860,157245],{"class":116},[106,159862,162],{"class":112},[106,159864,47327],{"class":165},[106,159866,159867],{"class":108,"line":28},[106,159868,2392],{"emptyLinePlaceholder":33},[106,159870,159871,159873,159875,159877,159879,159881,159883,159885,159887],{"class":108,"line":1172},[106,159872,3017],{"class":112},[106,159874,9431],{"class":116},[106,159876,26037],{"class":112},[106,159878,32437],{"class":165},[106,159880,117],{"class":116},[106,159882,334],{"class":165},[106,159884,12428],{"class":116},[106,159886,454],{"class":165},[106,159888,30780],{"class":116},[106,159890,159891,159893,159895],{"class":108,"line":1187},[106,159892,159292],{"class":116},[106,159894,9470],{"class":112},[106,159896,159297],{"class":116},[106,159898,159899],{"class":108,"line":1193},[106,159900,2392],{"emptyLinePlaceholder":33},[106,159902,159903,159905],{"class":108,"line":1207},[106,159904,30409],{"class":165},[106,159906,159316],{"class":116},[14,159908,159909],{},"求偶数和：",[97,159911,159913],{"className":30372,"code":159912,"language":30374,"meta":25,"style":25},"total = 0\n\nfor i in range(1, 101):\n    if i % 2 == 0:\n        total += i\n\nprint(total)\n",[103,159914,159915,159923,159927,159947,159963,159972,159976],{"__ignoreMap":25},[106,159916,159917,159919,159921],{"class":108,"line":109},[106,159918,157245],{"class":116},[106,159920,162],{"class":112},[106,159922,47327],{"class":165},[106,159924,159925],{"class":108,"line":28},[106,159926,2392],{"emptyLinePlaceholder":33},[106,159928,159929,159931,159933,159935,159937,159939,159941,159943,159945],{"class":108,"line":1172},[106,159930,3017],{"class":112},[106,159932,9431],{"class":116},[106,159934,26037],{"class":112},[106,159936,32437],{"class":165},[106,159938,117],{"class":116},[106,159940,334],{"class":165},[106,159942,12428],{"class":116},[106,159944,454],{"class":165},[106,159946,30780],{"class":116},[106,159948,159949,159951,159953,159955,159957,159959,159961],{"class":108,"line":1187},[106,159950,3093],{"class":112},[106,159952,9431],{"class":116},[106,159954,445],{"class":112},[106,159956,14748],{"class":165},[106,159958,101544],{"class":112},[106,159960,4085],{"class":165},[106,159962,3731],{"class":116},[106,159964,159965,159968,159970],{"class":108,"line":1193},[106,159966,159967],{"class":116},"        total ",[106,159969,9470],{"class":112},[106,159971,159297],{"class":116},[106,159973,159974],{"class":108,"line":1207},[106,159975,2392],{"emptyLinePlaceholder":33},[106,159977,159978,159980],{"class":108,"line":1213},[106,159979,30409],{"class":165},[106,159981,159316],{"class":116},[14,159983,159984],{},"也可以：",[97,159986,159988],{"className":30372,"code":159987,"language":30374,"meta":25,"style":25},"total = 0\n\nfor i in range(2, 101, 2):\n    total += i\n\nprint(total)\n",[103,159989,159990,159998,160002,160026,160034,160038],{"__ignoreMap":25},[106,159991,159992,159994,159996],{"class":108,"line":109},[106,159993,157245],{"class":116},[106,159995,162],{"class":112},[106,159997,47327],{"class":165},[106,159999,160000],{"class":108,"line":28},[106,160001,2392],{"emptyLinePlaceholder":33},[106,160003,160004,160006,160008,160010,160012,160014,160016,160018,160020,160022,160024],{"class":108,"line":1172},[106,160005,3017],{"class":112},[106,160007,9431],{"class":116},[106,160009,26037],{"class":112},[106,160011,32437],{"class":165},[106,160013,117],{"class":116},[106,160015,194],{"class":165},[106,160017,12428],{"class":116},[106,160019,454],{"class":165},[106,160021,12428],{"class":116},[106,160023,194],{"class":165},[106,160025,30780],{"class":116},[106,160027,160028,160030,160032],{"class":108,"line":1187},[106,160029,159292],{"class":116},[106,160031,9470],{"class":112},[106,160033,159297],{"class":116},[106,160035,160036],{"class":108,"line":1193},[106,160037,2392],{"emptyLinePlaceholder":33},[106,160039,160040,160042],{"class":108,"line":1207},[106,160041,30409],{"class":165},[106,160043,159316],{"class":116},[48,160045,160047],{"id":160046},"_49-循环嵌套","4.9 循环嵌套",[14,160049,160050],{},"嵌套循环就是循环里面再写循环。",[97,160052,160054],{"className":30372,"code":160053,"language":30374,"meta":25,"style":25},"for i in range(1, 4):\n    for j in range(1, 4):\n        print(f\"i={i}, j={j}\")\n",[103,160055,160056,160076,160096],{"__ignoreMap":25},[106,160057,160058,160060,160062,160064,160066,160068,160070,160072,160074],{"class":108,"line":109},[106,160059,3017],{"class":112},[106,160061,9431],{"class":116},[106,160063,26037],{"class":112},[106,160065,32437],{"class":165},[106,160067,117],{"class":116},[106,160069,334],{"class":165},[106,160071,12428],{"class":116},[106,160073,410],{"class":165},[106,160075,30780],{"class":116},[106,160077,160078,160080,160082,160084,160086,160088,160090,160092,160094],{"class":108,"line":28},[106,160079,3193],{"class":112},[106,160081,9493],{"class":116},[106,160083,26037],{"class":112},[106,160085,32437],{"class":165},[106,160087,117],{"class":116},[106,160089,334],{"class":165},[106,160091,12428],{"class":116},[106,160093,410],{"class":165},[106,160095,30780],{"class":116},[106,160097,160098,160100,160102,160104,160107,160109,160111,160113,160116,160118,160120,160122,160124],{"class":108,"line":1172},[106,160099,32445],{"class":165},[106,160101,117],{"class":116},[106,160103,169],{"class":112},[106,160105,160106],{"class":221},"\"i=",[106,160108,1013],{"class":165},[106,160110,558],{"class":116},[106,160112,1063],{"class":165},[106,160114,160115],{"class":221},", j=",[106,160117,1013],{"class":165},[106,160119,584],{"class":116},[106,160121,1063],{"class":165},[106,160123,368],{"class":221},[106,160125,123],{"class":116},[14,160127,160128],{},"外层循环执行一次，内层循环执行完整一轮。",[48,160130,160132],{"id":160131},"_410-九九乘法表","4.10 九九乘法表",[97,160134,160136],{"className":30372,"code":160135,"language":30374,"meta":25,"style":25},"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",[103,160137,160138,160158,160181,160233],{"__ignoreMap":25},[106,160139,160140,160142,160144,160146,160148,160150,160152,160154,160156],{"class":108,"line":109},[106,160141,3017],{"class":112},[106,160143,9431],{"class":116},[106,160145,26037],{"class":112},[106,160147,32437],{"class":165},[106,160149,117],{"class":116},[106,160151,334],{"class":165},[106,160153,12428],{"class":116},[106,160155,563],{"class":165},[106,160157,30780],{"class":116},[106,160159,160160,160162,160164,160166,160168,160170,160172,160175,160177,160179],{"class":108,"line":28},[106,160161,3193],{"class":112},[106,160163,9493],{"class":116},[106,160165,26037],{"class":112},[106,160167,32437],{"class":165},[106,160169,117],{"class":116},[106,160171,334],{"class":165},[106,160173,160174],{"class":116},", i ",[106,160176,598],{"class":112},[106,160178,25112],{"class":165},[106,160180,30780],{"class":116},[106,160182,160183,160185,160187,160189,160191,160193,160195,160197,160199,160201,160203,160205,160207,160209,160211,160213,160215,160217,160219,160221,160223,160225,160227,160229,160231],{"class":108,"line":1172},[106,160184,32445],{"class":165},[106,160186,117],{"class":116},[106,160188,169],{"class":112},[106,160190,368],{"class":221},[106,160192,1013],{"class":165},[106,160194,584],{"class":116},[106,160196,1063],{"class":165},[106,160198,572],{"class":221},[106,160200,1013],{"class":165},[106,160202,558],{"class":116},[106,160204,1063],{"class":165},[106,160206,162],{"class":221},[106,160208,1013],{"class":165},[106,160210,100133],{"class":116},[106,160212,572],{"class":112},[106,160214,3402],{"class":116},[106,160216,1063],{"class":165},[106,160218,368],{"class":221},[106,160220,12428],{"class":116},[106,160222,45795],{"class":5209},[106,160224,162],{"class":112},[106,160226,368],{"class":221},[106,160228,1223],{"class":165},[106,160230,368],{"class":221},[106,160232,123],{"class":116},[106,160234,160235,160237],{"class":108,"line":1187},[106,160236,31293],{"class":165},[106,160238,1968],{"class":116},[14,160240,160241],{},"关键点：",[60,160243,160244,160250,160256,160262],{},[63,160245,160246,160247,160249],{},"外层 ",[103,160248,558],{}," 控制行。",[63,160251,160252,160253,160255],{},"内层 ",[103,160254,584],{}," 控制列。",[63,160257,160258,160259,160261],{},"每行结束后用 ",[103,160260,146457],{}," 换行。",[63,160263,160264,160267],{},[103,160265,160266],{},"end=\"\\t\""," 让同一行的内容横向排列。",[48,160269,160271],{"id":160270},"_411-循环else","4.11 循环else",[14,160273,160274,160275,160277,160278,160280,160281,160283],{},"Python 的循环可以带 ",[103,160276,1693],{},"。当循环正常结束时执行 ",[103,160279,1693],{},"，如果被 ",[103,160282,2045],{}," 打断，则不执行。",[97,160285,160287],{"className":30372,"code":160286,"language":30374,"meta":25,"style":25},"for i in range(1, 6):\n    if i == 10:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[103,160288,160289,160309,160321,160332,160336,160342],{"__ignoreMap":25},[106,160290,160291,160293,160295,160297,160299,160301,160303,160305,160307],{"class":108,"line":109},[106,160292,3017],{"class":112},[106,160294,9431],{"class":116},[106,160296,26037],{"class":112},[106,160298,32437],{"class":165},[106,160300,117],{"class":116},[106,160302,334],{"class":165},[106,160304,12428],{"class":116},[106,160306,461],{"class":165},[106,160308,30780],{"class":116},[106,160310,160311,160313,160315,160317,160319],{"class":108,"line":28},[106,160312,3093],{"class":112},[106,160314,9431],{"class":116},[106,160316,2941],{"class":112},[106,160318,2030],{"class":165},[106,160320,3731],{"class":116},[106,160322,160323,160325,160327,160330],{"class":108,"line":1172},[106,160324,32445],{"class":165},[106,160326,117],{"class":116},[106,160328,160329],{"class":221},"\"找到了\"",[106,160331,123],{"class":116},[106,160333,160334],{"class":108,"line":1187},[106,160335,31621],{"class":112},[106,160337,160338,160340],{"class":108,"line":1193},[106,160339,1693],{"class":112},[106,160341,3731],{"class":116},[106,160343,160344,160346,160348,160351],{"class":108,"line":1207},[106,160345,31293],{"class":165},[106,160347,117],{"class":116},[106,160349,160350],{"class":221},"\"没找到\"",[106,160352,123],{"class":116},[14,160354,160355],{},"常用于搜索。",[97,160357,160359],{"className":30372,"code":160358,"language":30374,"meta":25,"style":25},"names = [\"小明\", \"小红\", \"小刚\"]\ntarget = \"小李\"\n\nfor name in names:\n    if name == target:\n        print(\"找到了\")\n        break\nelse:\n    print(\"没找到\")\n",[103,160360,160361,160382,160391,160395,160407,160418,160428,160432,160438],{"__ignoreMap":25},[106,160362,160363,160366,160368,160370,160372,160374,160376,160378,160380],{"class":108,"line":109},[106,160364,160365],{"class":116},"names ",[106,160367,162],{"class":112},[106,160369,52220],{"class":116},[106,160371,149873],{"class":221},[106,160373,12428],{"class":116},[106,160375,150921],{"class":221},[106,160377,12428],{"class":116},[106,160379,159716],{"class":221},[106,160381,33240],{"class":116},[106,160383,160384,160386,160388],{"class":108,"line":28},[106,160385,111563],{"class":116},[106,160387,162],{"class":112},[106,160389,160390],{"class":221}," \"小李\"\n",[106,160392,160393],{"class":108,"line":1172},[106,160394,2392],{"emptyLinePlaceholder":33},[106,160396,160397,160399,160402,160404],{"class":108,"line":1187},[106,160398,3017],{"class":112},[106,160400,160401],{"class":116}," name ",[106,160403,26037],{"class":112},[106,160405,160406],{"class":116}," names:\n",[106,160408,160409,160411,160413,160415],{"class":108,"line":1193},[106,160410,3093],{"class":112},[106,160412,160401],{"class":116},[106,160414,2941],{"class":112},[106,160416,160417],{"class":116}," target:\n",[106,160419,160420,160422,160424,160426],{"class":108,"line":1207},[106,160421,32445],{"class":165},[106,160423,117],{"class":116},[106,160425,160329],{"class":221},[106,160427,123],{"class":116},[106,160429,160430],{"class":108,"line":1213},[106,160431,31621],{"class":112},[106,160433,160434,160436],{"class":108,"line":1304},[106,160435,1693],{"class":112},[106,160437,3731],{"class":116},[106,160439,160440,160442,160444,160446],{"class":108,"line":1310},[106,160441,31293],{"class":165},[106,160443,117],{"class":116},[106,160445,160350],{"class":221},[106,160447,123],{"class":116},[48,160449,160451],{"id":160450},"_412-小案例登录重试","4.12 小案例：登录重试",[14,160453,123277],{},[60,160455,160456,160459,160462],{},[63,160457,160458],{},"用户最多输入 3 次密码。",[63,160460,160461],{},"密码正确则登录成功。",[63,160463,160464],{},"3 次都错误则锁定账号。",[14,160466,10028],{},[97,160468,160470],{"className":30372,"code":160469,"language":30374,"meta":25,"style":25},"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",[103,160471,160472,160482,160486,160502,160518,160522,160534,160545,160549,160555,160580,160586],{"__ignoreMap":25},[106,160473,160474,160477,160479],{"class":108,"line":109},[106,160475,160476],{"class":116},"password ",[106,160478,162],{"class":112},[106,160480,160481],{"class":221}," \"123456\"\n",[106,160483,160484],{"class":108,"line":28},[106,160485,2392],{"emptyLinePlaceholder":33},[106,160487,160488,160490,160492,160494,160496,160498,160500],{"class":108,"line":1172},[106,160489,3017],{"class":112},[106,160491,9431],{"class":116},[106,160493,26037],{"class":112},[106,160495,32437],{"class":165},[106,160497,117],{"class":116},[106,160499,188],{"class":165},[106,160501,30780],{"class":116},[106,160503,160504,160507,160509,160511,160513,160516],{"class":108,"line":1187},[106,160505,160506],{"class":116},"    user_password ",[106,160508,162],{"class":112},[106,160510,60599],{"class":165},[106,160512,117],{"class":116},[106,160514,160515],{"class":221},"\"请输入密码:\"",[106,160517,123],{"class":116},[106,160519,160520],{"class":108,"line":1193},[106,160521,2392],{"emptyLinePlaceholder":33},[106,160523,160524,160526,160529,160531],{"class":108,"line":1207},[106,160525,3093],{"class":112},[106,160527,160528],{"class":116}," user_password ",[106,160530,2941],{"class":112},[106,160532,160533],{"class":116}," password:\n",[106,160535,160536,160538,160540,160543],{"class":108,"line":1213},[106,160537,32445],{"class":165},[106,160539,117],{"class":116},[106,160541,160542],{"class":221},"\"登录成功\"",[106,160544,123],{"class":116},[106,160546,160547],{"class":108,"line":1304},[106,160548,31621],{"class":112},[106,160550,160551,160553],{"class":108,"line":1310},[106,160552,158007],{"class":112},[106,160554,3731],{"class":116},[106,160556,160557,160559,160561,160563,160566,160569,160571,160573,160575,160578],{"class":108,"line":1322},[106,160558,32445],{"class":165},[106,160560,117],{"class":116},[106,160562,169],{"class":112},[106,160564,160565],{"class":221},"\"密码错误，还剩",[106,160567,160568],{"class":165},"{2",[106,160570,52265],{"class":112},[106,160572,3024],{"class":116},[106,160574,1063],{"class":165},[106,160576,160577],{"class":221},"次机会\"",[106,160579,123],{"class":116},[106,160581,160582,160584],{"class":108,"line":1604},[106,160583,1693],{"class":112},[106,160585,3731],{"class":116},[106,160587,160588,160590,160592,160595],{"class":108,"line":1609},[106,160589,31293],{"class":165},[106,160591,117],{"class":116},[106,160593,160594],{"class":221},"\"账号已锁定\"",[106,160596,123],{"class":116},[48,160598,160600],{"id":160599},"_413-小案例菜单程序","4.13 小案例：菜单程序",[97,160602,160604],{"className":30372,"code":160603,"language":30374,"meta":25,"style":25},"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",[103,160605,160606,160614,160625,160636,160647,160658,160669,160673,160688,160692,160704,160715,160727,160738,160750,160761,160773,160783,160787,160793],{"__ignoreMap":25},[106,160607,160608,160610,160612],{"class":108,"line":109},[106,160609,108648],{"class":112},[106,160611,95277],{"class":165},[106,160613,3731],{"class":116},[106,160615,160616,160618,160620,160623],{"class":108,"line":28},[106,160617,31293],{"class":165},[106,160619,117],{"class":116},[106,160621,160622],{"class":221},"\"====== 菜单 ======\"",[106,160624,123],{"class":116},[106,160626,160627,160629,160631,160634],{"class":108,"line":1172},[106,160628,31293],{"class":165},[106,160630,117],{"class":116},[106,160632,160633],{"class":221},"\"1. 查询余额\"",[106,160635,123],{"class":116},[106,160637,160638,160640,160642,160645],{"class":108,"line":1187},[106,160639,31293],{"class":165},[106,160641,117],{"class":116},[106,160643,160644],{"class":221},"\"2. 存款\"",[106,160646,123],{"class":116},[106,160648,160649,160651,160653,160656],{"class":108,"line":1193},[106,160650,31293],{"class":165},[106,160652,117],{"class":116},[106,160654,160655],{"class":221},"\"3. 取款\"",[106,160657,123],{"class":116},[106,160659,160660,160662,160664,160667],{"class":108,"line":1207},[106,160661,31293],{"class":165},[106,160663,117],{"class":116},[106,160665,160666],{"class":221},"\"0. 退出\"",[106,160668,123],{"class":116},[106,160670,160671],{"class":108,"line":1213},[106,160672,2392],{"emptyLinePlaceholder":33},[106,160674,160675,160678,160680,160682,160684,160686],{"class":108,"line":1304},[106,160676,160677],{"class":116},"    choice ",[106,160679,162],{"class":112},[106,160681,60599],{"class":165},[106,160683,117],{"class":116},[106,160685,153058],{"class":221},[106,160687,123],{"class":116},[106,160689,160690],{"class":108,"line":1310},[106,160691,2392],{"emptyLinePlaceholder":33},[106,160693,160694,160696,160698,160700,160702],{"class":108,"line":1322},[106,160695,3093],{"class":112},[106,160697,153071],{"class":116},[106,160699,2941],{"class":112},[106,160701,153076],{"class":221},[106,160703,3731],{"class":116},[106,160705,160706,160708,160710,160713],{"class":108,"line":1604},[106,160707,32445],{"class":165},[106,160709,117],{"class":116},[106,160711,160712],{"class":221},"\"余额为1000元\"",[106,160714,123],{"class":116},[106,160716,160717,160719,160721,160723,160725],{"class":108,"line":1609},[106,160718,39287],{"class":112},[106,160720,153071],{"class":116},[106,160722,2941],{"class":112},[106,160724,153095],{"class":221},[106,160726,3731],{"class":116},[106,160728,160729,160731,160733,160736],{"class":108,"line":1615},[106,160730,32445],{"class":165},[106,160732,117],{"class":116},[106,160734,160735],{"class":221},"\"存款功能\"",[106,160737,123],{"class":116},[106,160739,160740,160742,160744,160746,160748],{"class":108,"line":1620},[106,160741,39287],{"class":112},[106,160743,153071],{"class":116},[106,160745,2941],{"class":112},[106,160747,153113],{"class":221},[106,160749,3731],{"class":116},[106,160751,160752,160754,160756,160759],{"class":108,"line":1634},[106,160753,32445],{"class":165},[106,160755,117],{"class":116},[106,160757,160758],{"class":221},"\"取款功能\"",[106,160760,123],{"class":116},[106,160762,160763,160765,160767,160769,160771],{"class":108,"line":1639},[106,160764,39287],{"class":112},[106,160766,153071],{"class":116},[106,160768,2941],{"class":112},[106,160770,153167],{"class":221},[106,160772,3731],{"class":116},[106,160774,160775,160777,160779,160781],{"class":108,"line":1645},[106,160776,32445],{"class":165},[106,160778,117],{"class":116},[106,160780,153178],{"class":221},[106,160782,123],{"class":116},[106,160784,160785],{"class":108,"line":1666},[106,160786,31621],{"class":112},[106,160788,160789,160791],{"class":108,"line":1671},[106,160790,158007],{"class":112},[106,160792,3731],{"class":116},[106,160794,160795,160797,160799,160801],{"class":108,"line":1685},[106,160796,32445],{"class":165},[106,160798,117],{"class":116},[106,160800,153199],{"class":221},[106,160802,123],{"class":116},[14,160804,160805,160806,160808,160809,28379],{},"菜单类程序通常使用 ",[103,160807,159507],{},"，用户选择退出时 ",[103,160810,2045],{},[48,160812,160814],{"id":160813},"_414-易错点","4.14 易错点",[60,160816,160817,160822,160828,160836,160842],{},[63,160818,160819,160821],{},[103,160820,108648],{}," 循环必须更新控制变量。",[63,160823,160824,160827],{},[103,160825,160826],{},"range(1, 10)"," 不包含 10。",[63,160829,160830,160832,160833,160835],{},[103,160831,2045],{}," 结束整个循环，",[103,160834,154657],{}," 只跳过本轮。",[63,160837,160838,160839,160841],{},"嵌套循环中，",[103,160840,2045],{}," 只跳出当前所在的一层循环。",[63,160843,160844],{},"不要在循环中频繁写重复代码，能封装函数就封装函数。",[48,160846,160848],{"id":160847},"_415-本章练习","4.15 本章练习",[60,160850,160851,160854,160857,160860,160863],{},[63,160852,160853],{},"输出 1 到 100。",[63,160855,160856],{},"计算 1 到 100 的偶数和。",[63,160858,160859],{},"输出 100 以内能被 3 和 5 同时整除的数。",[63,160861,160862],{},"编写猜数字游戏，限制最多猜 7 次。",[63,160864,160865],{},"编写菜单程序，实现查看余额、存款、取款、退出。",[5119,160867,160868],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":28,"depth":28,"links":160870},[160871,160872,160873,160874,160875,160879,160880,160881,160882,160883,160884,160885,160886,160887,160888],{"id":159127,"depth":28,"text":159128},{"id":159157,"depth":28,"text":159158},{"id":159246,"depth":28,"text":159247},{"id":159340,"depth":28,"text":159341},{"id":159514,"depth":28,"text":159515,"children":160876},[160877,160878],{"id":159518,"depth":1172,"text":159519},{"id":159582,"depth":1172,"text":159583},{"id":159646,"depth":28,"text":159647},{"id":159741,"depth":28,"text":159742},{"id":159850,"depth":28,"text":159851},{"id":160046,"depth":28,"text":160047},{"id":160131,"depth":28,"text":160132},{"id":160270,"depth":28,"text":160271},{"id":160450,"depth":28,"text":160451},{"id":160599,"depth":28,"text":160600},{"id":160813,"depth":28,"text":160814},{"id":160847,"depth":28,"text":160848},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch4",{"title":159119,"description":30},"wiki\u002F2024-10-10-python教程\u002Fch4-循环语句","lNHBoZHnAH-b1ogDfanr4dZuyXln9CGVy502nnjUB3Q",{"id":160895,"title":160896,"body":160897,"description":30,"extension":31,"meta":162902,"navigation":33,"path":162903,"seo":162904,"stem":162905,"__hash__":162906},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch5-函数基础.md","5. 函数基础",{"type":7,"value":160898,"toc":162882},[160899,160902,160906,160909,160912,160926,160929,160943,160947,160949,160968,160970,161017,161019,161033,161037,161111,161114,161118,161121,161180,161188,161191,161244,161247,161251,161256,161311,161319,161369,161373,161378,161386,161485,161491,161495,161500,161503,161514,161555,161568,161572,161575,161611,161614,161627,161630,161690,161694,161698,161701,161752,161756,161759,161806,161812,161878,161881,161885,161888,162004,162007,162011,162014,162120,162124,162127,162165,162168,162210,162213,162273,162276,162280,162744,162747,162751,162778,162784,162845,162849,162879],[10,160900,160896],{"id":160901},"_5-函数基础",[48,160903,160905],{"id":160904},"_51-为什么需要函数","5.1 为什么需要函数",[14,160907,160908],{},"函数用于封装一段可以重复使用的代码。",[14,160910,160911],{},"不使用函数的问题：",[60,160913,160914,160917,160920,160923],{},[63,160915,160916],{},"重复代码多。",[63,160918,160919],{},"修改逻辑时容易漏改。",[63,160921,160922],{},"主流程不清晰。",[63,160924,160925],{},"程序越写越长，难以维护。",[14,160927,160928],{},"使用函数后的好处：",[60,160930,160931,160934,160937,160940],{},[63,160932,160933],{},"提高复用性。",[63,160935,160936],{},"提高可读性。",[63,160938,160939],{},"便于调试。",[63,160941,160942],{},"便于分工。",[48,160944,160946],{"id":160945},"_52-函数定义","5.2 函数定义",[14,160948,5174],{},[97,160950,160952],{"className":30372,"code":160951,"language":30374,"meta":25,"style":25},"def 函数名():\n    函数体\n",[103,160953,160954,160963],{"__ignoreMap":25},[106,160955,160956,160958,160961],{"class":108,"line":109},[106,160957,31941],{"class":112},[106,160959,160960],{"class":1955}," 函数名",[106,160962,31947],{"class":116},[106,160964,160965],{"class":108,"line":28},[106,160966,160967],{"class":116},"    函数体\n",[14,160969,15128],{},[97,160971,160973],{"className":30372,"code":160972,"language":30374,"meta":25,"style":25},"def say_hello():\n    print(\"hello\")\n    print(\"python\")\n\n\nsay_hello()\n",[103,160974,160975,160984,160994,161004,161008,161012],{"__ignoreMap":25},[106,160976,160977,160979,160982],{"class":108,"line":109},[106,160978,31941],{"class":112},[106,160980,160981],{"class":1955}," say_hello",[106,160983,31947],{"class":116},[106,160985,160986,160988,160990,160992],{"class":108,"line":28},[106,160987,31293],{"class":165},[106,160989,117],{"class":116},[106,160991,5837],{"class":221},[106,160993,123],{"class":116},[106,160995,160996,160998,161000,161002],{"class":108,"line":1172},[106,160997,31293],{"class":165},[106,160999,117],{"class":116},[106,161001,146624],{"class":221},[106,161003,123],{"class":116},[106,161005,161006],{"class":108,"line":1187},[106,161007,2392],{"emptyLinePlaceholder":33},[106,161009,161010],{"class":108,"line":1193},[106,161011,2392],{"emptyLinePlaceholder":33},[106,161013,161014],{"class":108,"line":1207},[106,161015,161016],{"class":116},"say_hello()\n",[14,161018,9018],{},[60,161020,161021,161024,161027,161030],{},[63,161022,161023],{},"函数必须先定义，再调用。",[63,161025,161026],{},"函数名遵循变量命名规则。",[63,161028,161029],{},"函数体需要缩进。",[63,161031,161032],{},"函数不调用就不会执行。",[48,161034,161036],{"id":161035},"_53-函数调用","5.3 函数调用",[97,161038,161040],{"className":30372,"code":161039,"language":30374,"meta":25,"style":25},"def print_menu():\n    print(\"1. 查询\")\n    print(\"2. 添加\")\n    print(\"3. 删除\")\n    print(\"0. 退出\")\n\n\nprint_menu()\nprint_menu()\n",[103,161041,161042,161051,161062,161073,161084,161094,161098,161102,161107],{"__ignoreMap":25},[106,161043,161044,161046,161049],{"class":108,"line":109},[106,161045,31941],{"class":112},[106,161047,161048],{"class":1955}," print_menu",[106,161050,31947],{"class":116},[106,161052,161053,161055,161057,161060],{"class":108,"line":28},[106,161054,31293],{"class":165},[106,161056,117],{"class":116},[106,161058,161059],{"class":221},"\"1. 查询\"",[106,161061,123],{"class":116},[106,161063,161064,161066,161068,161071],{"class":108,"line":1172},[106,161065,31293],{"class":165},[106,161067,117],{"class":116},[106,161069,161070],{"class":221},"\"2. 添加\"",[106,161072,123],{"class":116},[106,161074,161075,161077,161079,161082],{"class":108,"line":1187},[106,161076,31293],{"class":165},[106,161078,117],{"class":116},[106,161080,161081],{"class":221},"\"3. 删除\"",[106,161083,123],{"class":116},[106,161085,161086,161088,161090,161092],{"class":108,"line":1193},[106,161087,31293],{"class":165},[106,161089,117],{"class":116},[106,161091,160666],{"class":221},[106,161093,123],{"class":116},[106,161095,161096],{"class":108,"line":1207},[106,161097,2392],{"emptyLinePlaceholder":33},[106,161099,161100],{"class":108,"line":1213},[106,161101,2392],{"emptyLinePlaceholder":33},[106,161103,161104],{"class":108,"line":1304},[106,161105,161106],{"class":116},"print_menu()\n",[106,161108,161109],{"class":108,"line":1310},[106,161110,161106],{"class":116},[14,161112,161113],{},"函数可以多次调用，每次调用都会执行函数体。",[48,161115,161117],{"id":161116},"_54-参数","5.4 参数",[14,161119,161120],{},"参数用于向函数传递数据。",[97,161122,161124],{"className":30372,"code":161123,"language":30374,"meta":25,"style":25},"def say_hello(name):\n    print(f\"你好，{name}\")\n\n\nsay_hello(\"小明\")\nsay_hello(\"小红\")\n",[103,161125,161126,161135,161155,161159,161163,161172],{"__ignoreMap":25},[106,161127,161128,161130,161132],{"class":108,"line":109},[106,161129,31941],{"class":112},[106,161131,160981],{"class":1955},[106,161133,161134],{"class":116},"(name):\n",[106,161136,161137,161139,161141,161143,161145,161147,161149,161151,161153],{"class":108,"line":28},[106,161138,31293],{"class":165},[106,161140,117],{"class":116},[106,161142,169],{"class":112},[106,161144,157039],{"class":221},[106,161146,1013],{"class":165},[106,161148,79804],{"class":116},[106,161150,1063],{"class":165},[106,161152,368],{"class":221},[106,161154,123],{"class":116},[106,161156,161157],{"class":108,"line":1172},[106,161158,2392],{"emptyLinePlaceholder":33},[106,161160,161161],{"class":108,"line":1187},[106,161162,2392],{"emptyLinePlaceholder":33},[106,161164,161165,161168,161170],{"class":108,"line":1193},[106,161166,161167],{"class":116},"say_hello(",[106,161169,149873],{"class":221},[106,161171,123],{"class":116},[106,161173,161174,161176,161178],{"class":108,"line":1207},[106,161175,161167],{"class":116},[106,161177,150921],{"class":221},[106,161179,123],{"class":116},[14,161181,161182,161184,161185,161187],{},[103,161183,79804],{}," 是形参，",[103,161186,149873],{}," 是实参。",[14,161189,161190],{},"多个参数：",[97,161192,161194],{"className":30372,"code":161193,"language":30374,"meta":25,"style":25},"def add(a, b):\n    result = a + b\n    print(result)\n\n\nadd(10, 20)\n",[103,161195,161196,161204,161217,161223,161227,161231],{"__ignoreMap":25},[106,161197,161198,161200,161202],{"class":108,"line":109},[106,161199,31941],{"class":112},[106,161201,5202],{"class":1955},[106,161203,151078],{"class":116},[106,161205,161206,161209,161211,161213,161215],{"class":108,"line":28},[106,161207,161208],{"class":116},"    result ",[106,161210,162],{"class":112},[106,161212,10862],{"class":116},[106,161214,598],{"class":112},[106,161216,151089],{"class":116},[106,161218,161219,161221],{"class":108,"line":1172},[106,161220,31293],{"class":165},[106,161222,76579],{"class":116},[106,161224,161225],{"class":108,"line":1187},[106,161226,2392],{"emptyLinePlaceholder":33},[106,161228,161229],{"class":108,"line":1193},[106,161230,2392],{"emptyLinePlaceholder":33},[106,161232,161233,161236,161238,161240,161242],{"class":108,"line":1207},[106,161234,161235],{"class":116},"add(",[106,161237,563],{"class":165},[106,161239,12428],{"class":116},[106,161241,817],{"class":165},[106,161243,123],{"class":116},[14,161245,161246],{},"调用时参数数量必须匹配。",[48,161248,161250],{"id":161249},"_55-返回值","5.5 返回值",[14,161252,161253,161255],{},[103,161254,17039],{}," 用于把函数内部的结果返回给调用者。",[97,161257,161259],{"className":30372,"code":161258,"language":30374,"meta":25,"style":25},"def add(a, b):\n    return a + b\n\n\nresult = add(10, 20)\nprint(result)\n",[103,161260,161261,161269,161279,161283,161287,161305],{"__ignoreMap":25},[106,161262,161263,161265,161267],{"class":108,"line":109},[106,161264,31941],{"class":112},[106,161266,5202],{"class":1955},[106,161268,151078],{"class":116},[106,161270,161271,161273,161275,161277],{"class":108,"line":28},[106,161272,4082],{"class":112},[106,161274,10862],{"class":116},[106,161276,598],{"class":112},[106,161278,151089],{"class":116},[106,161280,161281],{"class":108,"line":1172},[106,161282,2392],{"emptyLinePlaceholder":33},[106,161284,161285],{"class":108,"line":1187},[106,161286,2392],{"emptyLinePlaceholder":33},[106,161288,161289,161292,161294,161297,161299,161301,161303],{"class":108,"line":1193},[106,161290,161291],{"class":116},"result ",[106,161293,162],{"class":112},[106,161295,161296],{"class":116}," add(",[106,161298,563],{"class":165},[106,161300,12428],{"class":116},[106,161302,817],{"class":165},[106,161304,123],{"class":116},[106,161306,161307,161309],{"class":108,"line":1207},[106,161308,30409],{"class":165},[106,161310,76579],{"class":116},[14,161312,161313,161314,161316,161317,28379],{},"如果函数没有写 ",[103,161315,17039],{},"，默认返回 ",[103,161318,95671],{},[97,161320,161322],{"className":30372,"code":161321,"language":30374,"meta":25,"style":25},"def say_hello():\n    print(\"hello\")\n\n\nresult = say_hello()\nprint(result)  # None\n",[103,161323,161324,161332,161342,161346,161350,161359],{"__ignoreMap":25},[106,161325,161326,161328,161330],{"class":108,"line":109},[106,161327,31941],{"class":112},[106,161329,160981],{"class":1955},[106,161331,31947],{"class":116},[106,161333,161334,161336,161338,161340],{"class":108,"line":28},[106,161335,31293],{"class":165},[106,161337,117],{"class":116},[106,161339,5837],{"class":221},[106,161341,123],{"class":116},[106,161343,161344],{"class":108,"line":1172},[106,161345,2392],{"emptyLinePlaceholder":33},[106,161347,161348],{"class":108,"line":1187},[106,161349,2392],{"emptyLinePlaceholder":33},[106,161351,161352,161354,161356],{"class":108,"line":1193},[106,161353,161291],{"class":116},[106,161355,162],{"class":112},[106,161357,161358],{"class":116}," say_hello()\n",[106,161360,161361,161363,161366],{"class":108,"line":1207},[106,161362,30409],{"class":165},[106,161364,161365],{"class":116},"(result)  ",[106,161367,161368],{"class":175},"# None\n",[48,161370,161372],{"id":161371},"_56-return的作用","5.6 return的作用",[14,161374,161375,161377],{},[103,161376,17039],{}," 有两个作用：",[60,161379,161380,161383],{},[63,161381,161382],{},"返回结果。",[63,161384,161385],{},"结束函数。",[97,161387,161389],{"className":30372,"code":161388,"language":30374,"meta":25,"style":25},"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",[103,161390,161391,161401,161413,161420,161424,161436,161443,161447,161454,161458,161462,161473],{"__ignoreMap":25},[106,161392,161393,161395,161398],{"class":108,"line":109},[106,161394,31941],{"class":112},[106,161396,161397],{"class":1955}," check_age",[106,161399,161400],{"class":116},"(age):\n",[106,161402,161403,161405,161407,161409,161411],{"class":108,"line":28},[106,161404,3093],{"class":112},[106,161406,15700],{"class":116},[106,161408,1027],{"class":112},[106,161410,4085],{"class":165},[106,161412,3731],{"class":116},[106,161414,161415,161417],{"class":108,"line":1172},[106,161416,14745],{"class":112},[106,161418,161419],{"class":221}," \"年龄不合法\"\n",[106,161421,161422],{"class":108,"line":1187},[106,161423,2392],{"emptyLinePlaceholder":33},[106,161425,161426,161428,161430,161432,161434],{"class":108,"line":1193},[106,161427,3093],{"class":112},[106,161429,15700],{"class":116},[106,161431,1702],{"class":112},[106,161433,156270],{"class":165},[106,161435,3731],{"class":116},[106,161437,161438,161440],{"class":108,"line":1207},[106,161439,14745],{"class":112},[106,161441,161442],{"class":221}," \"成年人\"\n",[106,161444,161445],{"class":108,"line":1213},[106,161446,2392],{"emptyLinePlaceholder":33},[106,161448,161449,161451],{"class":108,"line":1304},[106,161450,4082],{"class":112},[106,161452,161453],{"class":221}," \"未成年人\"\n",[106,161455,161456],{"class":108,"line":1310},[106,161457,2392],{"emptyLinePlaceholder":33},[106,161459,161460],{"class":108,"line":1322},[106,161461,2392],{"emptyLinePlaceholder":33},[106,161463,161464,161466,161469,161471],{"class":108,"line":1604},[106,161465,30409],{"class":165},[106,161467,161468],{"class":116},"(check_age(",[106,161470,817],{"class":165},[106,161472,30491],{"class":116},[106,161474,161475,161477,161479,161481,161483],{"class":108,"line":1609},[106,161476,30409],{"class":165},[106,161478,161468],{"class":116},[106,161480,649],{"class":112},[106,161482,334],{"class":165},[106,161484,30491],{"class":116},[14,161486,161487,161488,161490],{},"函数执行到 ",[103,161489,17039],{}," 后，后面的代码不会继续执行。",[48,161492,161494],{"id":161493},"_57-none","5.7 None",[14,161496,161497,161499],{},[103,161498,95671],{}," 表示空值或没有结果。",[14,161501,161502],{},"常见使用场景：",[60,161504,161505,161508,161511],{},[63,161506,161507],{},"函数没有返回值。",[63,161509,161510],{},"变量暂时没有具体值。",[63,161512,161513],{},"表示查询不到结果。",[97,161515,161517],{"className":30372,"code":161516,"language":30374,"meta":25,"style":25},"result = None\n\nif result is None:\n    print(\"没有数据\")\n",[103,161518,161519,161527,161531,161544],{"__ignoreMap":25},[106,161520,161521,161523,161525],{"class":108,"line":109},[106,161522,161291],{"class":116},[106,161524,162],{"class":112},[106,161526,152157],{"class":165},[106,161528,161529],{"class":108,"line":28},[106,161530,2392],{"emptyLinePlaceholder":33},[106,161532,161533,161535,161538,161540,161542],{"class":108,"line":1172},[106,161534,1523],{"class":112},[106,161536,161537],{"class":116}," result ",[106,161539,38921],{"class":112},[106,161541,38927],{"class":165},[106,161543,3731],{"class":116},[106,161545,161546,161548,161550,161553],{"class":108,"line":1187},[106,161547,31293],{"class":165},[106,161549,117],{"class":116},[106,161551,161552],{"class":221},"\"没有数据\"",[106,161554,123],{"class":116},[14,161556,161557,161558,161560,161561,161564,161565,28379],{},"判断 ",[103,161559,95671],{}," 推荐使用 ",[103,161562,161563],{},"is None","，不要写成 ",[103,161566,161567],{},"== None",[48,161569,161571],{"id":161570},"_58-函数文档字符串","5.8 函数文档字符串",[14,161573,161574],{},"函数内部第一行可以写文档字符串，用来说明函数用途。",[97,161576,161578],{"className":30372,"code":161577,"language":30374,"meta":25,"style":25},"def calculate_bmi(weight, height):\n    \"\"\"根据体重和身高计算BMI。\"\"\"\n    return weight \u002F height ** 2\n",[103,161579,161580,161590,161595],{"__ignoreMap":25},[106,161581,161582,161584,161587],{"class":108,"line":109},[106,161583,31941],{"class":112},[106,161585,161586],{"class":1955}," calculate_bmi",[106,161588,161589],{"class":116},"(weight, height):\n",[106,161591,161592],{"class":108,"line":28},[106,161593,161594],{"class":221},"    \"\"\"根据体重和身高计算BMI。\"\"\"\n",[106,161596,161597,161599,161602,161604,161607,161609],{"class":108,"line":1172},[106,161598,4082],{"class":112},[106,161600,161601],{"class":116}," weight ",[106,161603,701],{"class":112},[106,161605,161606],{"class":116}," height ",[106,161608,10654],{"class":112},[106,161610,47717],{"class":165},[14,161612,161613],{},"查看说明：",[97,161615,161617],{"className":30372,"code":161616,"language":30374,"meta":25,"style":25},"help(calculate_bmi)\n",[103,161618,161619],{"__ignoreMap":25},[106,161620,161621,161624],{"class":108,"line":109},[106,161622,161623],{"class":165},"help",[106,161625,161626],{"class":116},"(calculate_bmi)\n",[14,161628,161629],{},"较完整的写法：",[97,161631,161633],{"className":30372,"code":161632,"language":30374,"meta":25,"style":25},"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",[103,161634,161635,161643,161648,161653,161657,161662,161667,161672,161676],{"__ignoreMap":25},[106,161636,161637,161639,161641],{"class":108,"line":109},[106,161638,31941],{"class":112},[106,161640,161586],{"class":1955},[106,161642,161589],{"class":116},[106,161644,161645],{"class":108,"line":28},[106,161646,161647],{"class":221},"    \"\"\"\n",[106,161649,161650],{"class":108,"line":1172},[106,161651,161652],{"class":221},"    计算BMI。\n",[106,161654,161655],{"class":108,"line":1187},[106,161656,2392],{"emptyLinePlaceholder":33},[106,161658,161659],{"class":108,"line":1193},[106,161660,161661],{"class":221},"    :param weight: 体重，单位kg\n",[106,161663,161664],{"class":108,"line":1207},[106,161665,161666],{"class":221},"    :param height: 身高，单位m\n",[106,161668,161669],{"class":108,"line":1213},[106,161670,161671],{"class":221},"    :return: BMI数值\n",[106,161673,161674],{"class":108,"line":1304},[106,161675,161647],{"class":221},[106,161677,161678,161680,161682,161684,161686,161688],{"class":108,"line":1310},[106,161679,4082],{"class":112},[106,161681,161601],{"class":116},[106,161683,701],{"class":112},[106,161685,161606],{"class":116},[106,161687,10654],{"class":112},[106,161689,47717],{"class":165},[48,161691,161693],{"id":161692},"_59-变量作用域","5.9 变量作用域",[77,161695,161697],{"id":161696},"_591-局部变量","5.9.1 局部变量",[14,161699,161700],{},"在函数内部定义的变量，只能在函数内部使用。",[97,161702,161704],{"className":30372,"code":161703,"language":30374,"meta":25,"style":25},"def test():\n    num = 10\n    print(num)\n\n\ntest()\nprint(num)  # 报错\n",[103,161705,161706,161715,161723,161729,161733,161737,161742],{"__ignoreMap":25},[106,161707,161708,161710,161713],{"class":108,"line":109},[106,161709,31941],{"class":112},[106,161711,161712],{"class":1955}," test",[106,161714,31947],{"class":116},[106,161716,161717,161719,161721],{"class":108,"line":28},[106,161718,45587],{"class":116},[106,161720,162],{"class":112},[106,161722,58422],{"class":165},[106,161724,161725,161727],{"class":108,"line":1172},[106,161726,31293],{"class":165},[106,161728,130],{"class":116},[106,161730,161731],{"class":108,"line":1187},[106,161732,2392],{"emptyLinePlaceholder":33},[106,161734,161735],{"class":108,"line":1193},[106,161736,2392],{"emptyLinePlaceholder":33},[106,161738,161739],{"class":108,"line":1207},[106,161740,161741],{"class":116},"test()\n",[106,161743,161744,161746,161749],{"class":108,"line":1213},[106,161745,30409],{"class":165},[106,161747,161748],{"class":116},"(num)  ",[106,161750,161751],{"class":175},"# 报错\n",[77,161753,161755],{"id":161754},"_592-全局变量","5.9.2 全局变量",[14,161757,161758],{},"在函数外部定义的变量，可以在函数内部读取。",[97,161760,161762],{"className":30372,"code":161761,"language":30374,"meta":25,"style":25},"name = \"小明\"\n\n\ndef say_hello():\n    print(name)\n\n\nsay_hello()\n",[103,161763,161764,161772,161776,161780,161788,161794,161798,161802],{"__ignoreMap":25},[106,161765,161766,161768,161770],{"class":108,"line":109},[106,161767,146521],{"class":116},[106,161769,162],{"class":112},[106,161771,149338],{"class":221},[106,161773,161774],{"class":108,"line":28},[106,161775,2392],{"emptyLinePlaceholder":33},[106,161777,161778],{"class":108,"line":1172},[106,161779,2392],{"emptyLinePlaceholder":33},[106,161781,161782,161784,161786],{"class":108,"line":1187},[106,161783,31941],{"class":112},[106,161785,160981],{"class":1955},[106,161787,31947],{"class":116},[106,161789,161790,161792],{"class":108,"line":1193},[106,161791,31293],{"class":165},[106,161793,150645],{"class":116},[106,161795,161796],{"class":108,"line":1207},[106,161797,2392],{"emptyLinePlaceholder":33},[106,161799,161800],{"class":108,"line":1213},[106,161801,2392],{"emptyLinePlaceholder":33},[106,161803,161804],{"class":108,"line":1304},[106,161805,161016],{"class":116},[14,161807,161808,161809,28379],{},"如果要在函数内部修改全局变量，需要 ",[103,161810,161811],{},"global",[97,161813,161815],{"className":30372,"code":161814,"language":30374,"meta":25,"style":25},"count = 0\n\n\ndef add_count():\n    global count\n    count += 1\n\n\nadd_count()\nprint(count)\n",[103,161816,161817,161825,161829,161833,161842,161850,161858,161862,161866,161871],{"__ignoreMap":25},[106,161818,161819,161821,161823],{"class":108,"line":109},[106,161820,146676],{"class":116},[106,161822,162],{"class":112},[106,161824,47327],{"class":165},[106,161826,161827],{"class":108,"line":28},[106,161828,2392],{"emptyLinePlaceholder":33},[106,161830,161831],{"class":108,"line":1172},[106,161832,2392],{"emptyLinePlaceholder":33},[106,161834,161835,161837,161840],{"class":108,"line":1187},[106,161836,31941],{"class":112},[106,161838,161839],{"class":1955}," add_count",[106,161841,31947],{"class":116},[106,161843,161844,161847],{"class":108,"line":1193},[106,161845,161846],{"class":112},"    global",[106,161848,161849],{"class":116}," count\n",[106,161851,161852,161854,161856],{"class":108,"line":1207},[106,161853,159418],{"class":116},[106,161855,9470],{"class":112},[106,161857,55693],{"class":165},[106,161859,161860],{"class":108,"line":1213},[106,161861,2392],{"emptyLinePlaceholder":33},[106,161863,161864],{"class":108,"line":1304},[106,161865,2392],{"emptyLinePlaceholder":33},[106,161867,161868],{"class":108,"line":1310},[106,161869,161870],{"class":116},"add_count()\n",[106,161872,161873,161875],{"class":108,"line":1322},[106,161874,30409],{"class":165},[106,161876,161877],{"class":116},"(count)\n",[14,161879,161880],{},"不建议大量使用全局变量，项目变大后很难维护。",[48,161882,161884],{"id":161883},"_510-函数嵌套调用","5.10 函数嵌套调用",[14,161886,161887],{},"一个函数中可以调用另一个函数。",[97,161889,161891],{"className":30372,"code":161890,"language":30374,"meta":25,"style":25},"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",[103,161892,161893,161902,161916,161920,161924,161933,161938,161958,161979,161983,161987,161991],{"__ignoreMap":25},[106,161894,161895,161897,161900],{"class":108,"line":109},[106,161896,31941],{"class":112},[106,161898,161899],{"class":1955}," print_line",[106,161901,31947],{"class":116},[106,161903,161904,161906,161908,161910,161912,161914],{"class":108,"line":28},[106,161905,31293],{"class":165},[106,161907,117],{"class":116},[106,161909,32477],{"class":221},[106,161911,6511],{"class":112},[106,161913,78659],{"class":165},[106,161915,123],{"class":116},[106,161917,161918],{"class":108,"line":1172},[106,161919,2392],{"emptyLinePlaceholder":33},[106,161921,161922],{"class":108,"line":1187},[106,161923,2392],{"emptyLinePlaceholder":33},[106,161925,161926,161928,161931],{"class":108,"line":1193},[106,161927,31941],{"class":112},[106,161929,161930],{"class":1955}," print_info",[106,161932,149360],{"class":116},[106,161934,161935],{"class":108,"line":1207},[106,161936,161937],{"class":116},"    print_line()\n",[106,161939,161940,161942,161944,161946,161948,161950,161952,161954,161956],{"class":108,"line":1213},[106,161941,31293],{"class":165},[106,161943,117],{"class":116},[106,161945,169],{"class":112},[106,161947,156667],{"class":221},[106,161949,1013],{"class":165},[106,161951,79804],{"class":116},[106,161953,1063],{"class":165},[106,161955,368],{"class":221},[106,161957,123],{"class":116},[106,161959,161960,161962,161964,161966,161969,161971,161973,161975,161977],{"class":108,"line":1304},[106,161961,31293],{"class":165},[106,161963,117],{"class":116},[106,161965,169],{"class":112},[106,161967,161968],{"class":221},"\"年龄:",[106,161970,1013],{"class":165},[106,161972,70215],{"class":116},[106,161974,1063],{"class":165},[106,161976,368],{"class":221},[106,161978,123],{"class":116},[106,161980,161981],{"class":108,"line":1310},[106,161982,161937],{"class":116},[106,161984,161985],{"class":108,"line":1322},[106,161986,2392],{"emptyLinePlaceholder":33},[106,161988,161989],{"class":108,"line":1604},[106,161990,2392],{"emptyLinePlaceholder":33},[106,161992,161993,161996,161998,162000,162002],{"class":108,"line":1609},[106,161994,161995],{"class":116},"print_info(",[106,161997,149873],{"class":221},[106,161999,12428],{"class":116},[106,162001,767],{"class":165},[106,162003,123],{"class":116},[14,162005,162006],{},"这种方式可以把小功能组合成大功能。",[48,162008,162010],{"id":162009},"_511-参数检查","5.11 参数检查",[14,162012,162013],{},"函数内部可以检查参数是否合法。",[97,162015,162017],{"className":30372,"code":162016,"language":30374,"meta":25,"style":25},"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",[103,162018,162019,162028,162040,162046,162056,162060,162064,162081,162085,162097,162108,162114],{"__ignoreMap":25},[106,162020,162021,162023,162026],{"class":108,"line":109},[106,162022,31941],{"class":112},[106,162024,162025],{"class":1955}," divide",[106,162027,151078],{"class":116},[106,162029,162030,162032,162034,162036,162038],{"class":108,"line":28},[106,162031,3093],{"class":112},[106,162033,10875],{"class":116},[106,162035,2941],{"class":112},[106,162037,4085],{"class":165},[106,162039,3731],{"class":116},[106,162041,162042,162044],{"class":108,"line":1172},[106,162043,14745],{"class":112},[106,162045,152157],{"class":165},[106,162047,162048,162050,162052,162054],{"class":108,"line":1187},[106,162049,4082],{"class":112},[106,162051,10862],{"class":116},[106,162053,701],{"class":112},[106,162055,151089],{"class":116},[106,162057,162058],{"class":108,"line":1193},[106,162059,2392],{"emptyLinePlaceholder":33},[106,162061,162062],{"class":108,"line":1207},[106,162063,2392],{"emptyLinePlaceholder":33},[106,162065,162066,162068,162070,162073,162075,162077,162079],{"class":108,"line":1213},[106,162067,161291],{"class":116},[106,162069,162],{"class":112},[106,162071,162072],{"class":116}," divide(",[106,162074,563],{"class":165},[106,162076,12428],{"class":116},[106,162078,308],{"class":165},[106,162080,123],{"class":116},[106,162082,162083],{"class":108,"line":1304},[106,162084,2392],{"emptyLinePlaceholder":33},[106,162086,162087,162089,162091,162093,162095],{"class":108,"line":1310},[106,162088,1523],{"class":112},[106,162090,161537],{"class":116},[106,162092,38921],{"class":112},[106,162094,38927],{"class":165},[106,162096,3731],{"class":116},[106,162098,162099,162101,162103,162106],{"class":108,"line":1322},[106,162100,31293],{"class":165},[106,162102,117],{"class":116},[106,162104,162105],{"class":221},"\"除数不能为0\"",[106,162107,123],{"class":116},[106,162109,162110,162112],{"class":108,"line":1604},[106,162111,1693],{"class":112},[106,162113,3731],{"class":116},[106,162115,162116,162118],{"class":108,"line":1609},[106,162117,31293],{"class":165},[106,162119,76579],{"class":116},[48,162121,162123],{"id":162122},"_512-类型提示","5.12 类型提示",[14,162125,162126],{},"类型提示不会强制限制运行，但能让编辑器提示更准确。",[97,162128,162130],{"className":30372,"code":162129,"language":30374,"meta":25,"style":25},"def add(a: int, b: int) -> int:\n    return a + b\n",[103,162131,162132,162155],{"__ignoreMap":25},[106,162133,162134,162136,162138,162141,162143,162146,162148,162151,162153],{"class":108,"line":109},[106,162135,31941],{"class":112},[106,162137,5202],{"class":1955},[106,162139,162140],{"class":116},"(a: ",[106,162142,120],{"class":165},[106,162144,162145],{"class":116},", b: ",[106,162147,120],{"class":165},[106,162149,162150],{"class":116},") -> ",[106,162152,120],{"class":165},[106,162154,3731],{"class":116},[106,162156,162157,162159,162161,162163],{"class":108,"line":28},[106,162158,4082],{"class":112},[106,162160,10862],{"class":116},[106,162162,598],{"class":112},[106,162164,151089],{"class":116},[14,162166,162167],{},"字符串参数：",[97,162169,162171],{"className":30372,"code":162170,"language":30374,"meta":25,"style":25},"def say_hello(name: str) -> None:\n    print(f\"你好，{name}\")\n",[103,162172,162173,162190],{"__ignoreMap":25},[106,162174,162175,162177,162179,162182,162184,162186,162188],{"class":108,"line":109},[106,162176,31941],{"class":112},[106,162178,160981],{"class":1955},[106,162180,162181],{"class":116},"(name: ",[106,162183,1292],{"class":165},[106,162185,162150],{"class":116},[106,162187,95671],{"class":165},[106,162189,3731],{"class":116},[106,162191,162192,162194,162196,162198,162200,162202,162204,162206,162208],{"class":108,"line":28},[106,162193,31293],{"class":165},[106,162195,117],{"class":116},[106,162197,169],{"class":112},[106,162199,157039],{"class":221},[106,162201,1013],{"class":165},[106,162203,79804],{"class":116},[106,162205,1063],{"class":165},[106,162207,368],{"class":221},[106,162209,123],{"class":116},[14,162211,162212],{},"列表参数：",[97,162214,162216],{"className":30372,"code":162215,"language":30374,"meta":25,"style":25},"def get_total(numbers: list[int]) -> int:\n    total = 0\n    for number in numbers:\n        total += number\n    return total\n",[103,162217,162218,162237,162245,162257,162266],{"__ignoreMap":25},[106,162219,162220,162222,162225,162228,162230,162233,162235],{"class":108,"line":109},[106,162221,31941],{"class":112},[106,162223,162224],{"class":1955}," get_total",[106,162226,162227],{"class":116},"(numbers: list[",[106,162229,120],{"class":165},[106,162231,162232],{"class":116},"]) -> ",[106,162234,120],{"class":165},[106,162236,3731],{"class":116},[106,162238,162239,162241,162243],{"class":108,"line":28},[106,162240,159292],{"class":116},[106,162242,162],{"class":112},[106,162244,47327],{"class":165},[106,162246,162247,162249,162252,162254],{"class":108,"line":1172},[106,162248,3193],{"class":112},[106,162250,162251],{"class":116}," number ",[106,162253,26037],{"class":112},[106,162255,162256],{"class":116}," numbers:\n",[106,162258,162259,162261,162263],{"class":108,"line":1187},[106,162260,159967],{"class":116},[106,162262,9470],{"class":112},[106,162264,162265],{"class":116}," number\n",[106,162267,162268,162270],{"class":108,"line":1193},[106,162269,4082],{"class":112},[106,162271,162272],{"class":116}," total\n",[14,162274,162275],{},"学习初期可以先掌握基础语法，后续写项目时逐渐加类型提示。",[48,162277,162279],{"id":162278},"_513-小案例atm函数拆分","5.13 小案例：ATM函数拆分",[97,162281,162283],{"className":30372,"code":162282,"language":30374,"meta":25,"style":25},"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",[103,162284,162285,162295,162299,162303,162311,162322,162332,162342,162352,162362,162366,162370,162379,162401,162405,162409,162418,162424,162444,162456,162467,162471,162480,162491,162496,162500,162504,162513,162519,162538,162550,162560,162564,162575,162585,162589,162597,162608,162612,162616,162620,162628,162633,162647,162651,162663,162668,162680,162685,162697,162702,162714,162724,162728,162734],{"__ignoreMap":25},[106,162286,162287,162290,162292],{"class":108,"line":109},[106,162288,162289],{"class":116},"balance ",[106,162291,162],{"class":112},[106,162293,162294],{"class":165}," 1000\n",[106,162296,162297],{"class":108,"line":28},[106,162298,2392],{"emptyLinePlaceholder":33},[106,162300,162301],{"class":108,"line":1172},[106,162302,2392],{"emptyLinePlaceholder":33},[106,162304,162305,162307,162309],{"class":108,"line":1187},[106,162306,31941],{"class":112},[106,162308,152018],{"class":1955},[106,162310,31947],{"class":116},[106,162312,162313,162315,162317,162320],{"class":108,"line":1193},[106,162314,31293],{"class":165},[106,162316,117],{"class":116},[106,162318,162319],{"class":221},"\"====== ATM ======\"",[106,162321,123],{"class":116},[106,162323,162324,162326,162328,162330],{"class":108,"line":1207},[106,162325,31293],{"class":165},[106,162327,117],{"class":116},[106,162329,160633],{"class":221},[106,162331,123],{"class":116},[106,162333,162334,162336,162338,162340],{"class":108,"line":1213},[106,162335,31293],{"class":165},[106,162337,117],{"class":116},[106,162339,160644],{"class":221},[106,162341,123],{"class":116},[106,162343,162344,162346,162348,162350],{"class":108,"line":1304},[106,162345,31293],{"class":165},[106,162347,117],{"class":116},[106,162349,160655],{"class":221},[106,162351,123],{"class":116},[106,162353,162354,162356,162358,162360],{"class":108,"line":1310},[106,162355,31293],{"class":165},[106,162357,117],{"class":116},[106,162359,160666],{"class":221},[106,162361,123],{"class":116},[106,162363,162364],{"class":108,"line":1322},[106,162365,2392],{"emptyLinePlaceholder":33},[106,162367,162368],{"class":108,"line":1604},[106,162369,2392],{"emptyLinePlaceholder":33},[106,162371,162372,162374,162377],{"class":108,"line":1609},[106,162373,31941],{"class":112},[106,162375,162376],{"class":1955}," show_balance",[106,162378,31947],{"class":116},[106,162380,162381,162383,162385,162387,162390,162392,162395,162397,162399],{"class":108,"line":1615},[106,162382,31293],{"class":165},[106,162384,117],{"class":116},[106,162386,169],{"class":112},[106,162388,162389],{"class":221},"\"当前余额:",[106,162391,1013],{"class":165},[106,162393,162394],{"class":116},"balance",[106,162396,1063],{"class":165},[106,162398,156997],{"class":221},[106,162400,123],{"class":116},[106,162402,162403],{"class":108,"line":1620},[106,162404,2392],{"emptyLinePlaceholder":33},[106,162406,162407],{"class":108,"line":1634},[106,162408,2392],{"emptyLinePlaceholder":33},[106,162410,162411,162413,162416],{"class":108,"line":1639},[106,162412,31941],{"class":112},[106,162414,162415],{"class":1955}," save_money",[106,162417,31947],{"class":116},[106,162419,162420,162422],{"class":108,"line":1645},[106,162421,161846],{"class":112},[106,162423,150084],{"class":116},[106,162425,162426,162429,162431,162433,162435,162437,162439,162442],{"class":108,"line":1666},[106,162427,162428],{"class":116},"    money ",[106,162430,162],{"class":112},[106,162432,109782],{"class":165},[106,162434,117],{"class":116},[106,162436,53815],{"class":165},[106,162438,117],{"class":116},[106,162440,162441],{"class":221},"\"请输入存款金额:\"",[106,162443,30491],{"class":116},[106,162445,162446,162448,162450,162452,162454],{"class":108,"line":1671},[106,162447,3093],{"class":112},[106,162449,150127],{"class":116},[106,162451,1580],{"class":112},[106,162453,4085],{"class":165},[106,162455,3731],{"class":116},[106,162457,162458,162460,162462,162465],{"class":108,"line":1685},[106,162459,32445],{"class":165},[106,162461,117],{"class":116},[106,162463,162464],{"class":221},"\"金额必须大于0\"",[106,162466,123],{"class":116},[106,162468,162469],{"class":108,"line":1690},[106,162470,152346],{"class":112},[106,162472,162473,162476,162478],{"class":108,"line":1719},[106,162474,162475],{"class":116},"    balance ",[106,162477,9470],{"class":112},[106,162479,150160],{"class":116},[106,162481,162482,162484,162486,162489],{"class":108,"line":1724},[106,162483,31293],{"class":165},[106,162485,117],{"class":116},[106,162487,162488],{"class":221},"\"存款成功\"",[106,162490,123],{"class":116},[106,162492,162493],{"class":108,"line":1741},[106,162494,162495],{"class":116},"    show_balance()\n",[106,162497,162498],{"class":108,"line":1746},[106,162499,2392],{"emptyLinePlaceholder":33},[106,162501,162502],{"class":108,"line":1751},[106,162503,2392],{"emptyLinePlaceholder":33},[106,162505,162506,162508,162511],{"class":108,"line":1756},[106,162507,31941],{"class":112},[106,162509,162510],{"class":1955}," withdraw_money",[106,162512,31947],{"class":116},[106,162514,162515,162517],{"class":108,"line":1770},[106,162516,161846],{"class":112},[106,162518,150084],{"class":116},[106,162520,162521,162523,162525,162527,162529,162531,162533,162536],{"class":108,"line":1775},[106,162522,162428],{"class":116},[106,162524,162],{"class":112},[106,162526,109782],{"class":165},[106,162528,117],{"class":116},[106,162530,53815],{"class":165},[106,162532,117],{"class":116},[106,162534,162535],{"class":221},"\"请输入取款金额:\"",[106,162537,30491],{"class":116},[106,162539,162540,162542,162544,162546,162548],{"class":108,"line":2569},[106,162541,3093],{"class":112},[106,162543,150127],{"class":116},[106,162545,1580],{"class":112},[106,162547,4085],{"class":165},[106,162549,3731],{"class":116},[106,162551,162552,162554,162556,162558],{"class":108,"line":2583},[106,162553,32445],{"class":165},[106,162555,117],{"class":116},[106,162557,162464],{"class":221},[106,162559,123],{"class":116},[106,162561,162562],{"class":108,"line":2591},[106,162563,152346],{"class":112},[106,162565,162566,162568,162570,162572],{"class":108,"line":2596},[106,162567,3093],{"class":112},[106,162569,150127],{"class":116},[106,162571,1077],{"class":112},[106,162573,162574],{"class":116}," balance:\n",[106,162576,162577,162579,162581,162583],{"class":108,"line":2602},[106,162578,32445],{"class":165},[106,162580,117],{"class":116},[106,162582,150222],{"class":221},[106,162584,123],{"class":116},[106,162586,162587],{"class":108,"line":2608},[106,162588,152346],{"class":112},[106,162590,162591,162593,162595],{"class":108,"line":2613},[106,162592,162475],{"class":116},[106,162594,150237],{"class":112},[106,162596,150160],{"class":116},[106,162598,162599,162601,162603,162606],{"class":108,"line":7941},[106,162600,31293],{"class":165},[106,162602,117],{"class":116},[106,162604,162605],{"class":221},"\"取款成功\"",[106,162607,123],{"class":116},[106,162609,162610],{"class":108,"line":7965},[106,162611,162495],{"class":116},[106,162613,162614],{"class":108,"line":7970},[106,162615,2392],{"emptyLinePlaceholder":33},[106,162617,162618],{"class":108,"line":7976},[106,162619,2392],{"emptyLinePlaceholder":33},[106,162621,162622,162624,162626],{"class":108,"line":8003},[106,162623,108648],{"class":112},[106,162625,95277],{"class":165},[106,162627,3731],{"class":116},[106,162629,162630],{"class":108,"line":8008},[106,162631,162632],{"class":116},"    show_menu()\n",[106,162634,162635,162637,162639,162641,162643,162645],{"class":108,"line":8014},[106,162636,160677],{"class":116},[106,162638,162],{"class":112},[106,162640,60599],{"class":165},[106,162642,117],{"class":116},[106,162644,153058],{"class":221},[106,162646,123],{"class":116},[106,162648,162649],{"class":108,"line":8026},[106,162650,2392],{"emptyLinePlaceholder":33},[106,162652,162653,162655,162657,162659,162661],{"class":108,"line":8038},[106,162654,3093],{"class":112},[106,162656,153071],{"class":116},[106,162658,2941],{"class":112},[106,162660,153076],{"class":221},[106,162662,3731],{"class":116},[106,162664,162665],{"class":108,"line":8050},[106,162666,162667],{"class":116},"        show_balance()\n",[106,162669,162670,162672,162674,162676,162678],{"class":108,"line":9709},[106,162671,39287],{"class":112},[106,162673,153071],{"class":116},[106,162675,2941],{"class":112},[106,162677,153095],{"class":221},[106,162679,3731],{"class":116},[106,162681,162682],{"class":108,"line":9734},[106,162683,162684],{"class":116},"        save_money()\n",[106,162686,162687,162689,162691,162693,162695],{"class":108,"line":9757},[106,162688,39287],{"class":112},[106,162690,153071],{"class":116},[106,162692,2941],{"class":112},[106,162694,153113],{"class":221},[106,162696,3731],{"class":116},[106,162698,162699],{"class":108,"line":9781},[106,162700,162701],{"class":116},"        withdraw_money()\n",[106,162703,162704,162706,162708,162710,162712],{"class":108,"line":9786},[106,162705,39287],{"class":112},[106,162707,153071],{"class":116},[106,162709,2941],{"class":112},[106,162711,153167],{"class":221},[106,162713,3731],{"class":116},[106,162715,162716,162718,162720,162722],{"class":108,"line":9791},[106,162717,32445],{"class":165},[106,162719,117],{"class":116},[106,162721,153178],{"class":221},[106,162723,123],{"class":116},[106,162725,162726],{"class":108,"line":9796},[106,162727,31621],{"class":112},[106,162729,162730,162732],{"class":108,"line":9805},[106,162731,158007],{"class":112},[106,162733,3731],{"class":116},[106,162735,162736,162738,162740,162742],{"class":108,"line":9810},[106,162737,32445],{"class":165},[106,162739,117],{"class":116},[106,162741,153199],{"class":221},[106,162743,123],{"class":116},[14,162745,162746],{},"这个案例展示了函数拆分的价值：主流程只负责调度，具体业务交给函数。",[48,162748,162750],{"id":162749},"_514-易错点","5.14 易错点",[60,162752,162753,162756,162759,162764,162769,162772],{},[63,162754,162755],{},"函数定义后必须调用才会执行。",[63,162757,162758],{},"函数名后面有括号才是调用。",[63,162760,162761,162763],{},[103,162762,17039],{}," 后面的代码不会执行。",[63,162765,162766,162767,28379],{},"没有返回值的函数默认返回 ",[103,162768,95671],{},[63,162770,162771],{},"局部变量不能在函数外部访问。",[63,162773,162774,162775,162777],{},"不要滥用 ",[103,162776,161811],{},"，更好的方式是让函数返回新值。",[14,162779,162780,162781,162783],{},"例如不用 ",[103,162782,161811],{}," 改写存款：",[97,162785,162787],{"className":30372,"code":162786,"language":30374,"meta":25,"style":25},"def save_money(balance, money):\n    return balance + money\n\n\nbalance = 1000\nbalance = save_money(balance, 200)\nprint(balance)\n",[103,162788,162789,162798,162809,162813,162817,162825,162838],{"__ignoreMap":25},[106,162790,162791,162793,162795],{"class":108,"line":109},[106,162792,31941],{"class":112},[106,162794,162415],{"class":1955},[106,162796,162797],{"class":116},"(balance, money):\n",[106,162799,162800,162802,162805,162807],{"class":108,"line":28},[106,162801,4082],{"class":112},[106,162803,162804],{"class":116}," balance ",[106,162806,598],{"class":112},[106,162808,150160],{"class":116},[106,162810,162811],{"class":108,"line":1172},[106,162812,2392],{"emptyLinePlaceholder":33},[106,162814,162815],{"class":108,"line":1187},[106,162816,2392],{"emptyLinePlaceholder":33},[106,162818,162819,162821,162823],{"class":108,"line":1193},[106,162820,162289],{"class":116},[106,162822,162],{"class":112},[106,162824,162294],{"class":165},[106,162826,162827,162829,162831,162834,162836],{"class":108,"line":1207},[106,162828,162289],{"class":116},[106,162830,162],{"class":112},[106,162832,162833],{"class":116}," save_money(balance, ",[106,162835,1714],{"class":165},[106,162837,123],{"class":116},[106,162839,162840,162842],{"class":108,"line":1213},[106,162841,30409],{"class":165},[106,162843,162844],{"class":116},"(balance)\n",[48,162846,162848],{"id":162847},"_515-本章练习","5.15 本章练习",[60,162850,162851,162858,162864,162870,162876],{},[63,162852,162853,162854,162857],{},"定义函数 ",[103,162855,162856],{},"print_student(name, age)","，输出学生信息。",[63,162859,162853,162860,162863],{},[103,162861,162862],{},"get_max(a, b, c)","，返回三个数中的最大值。",[63,162865,162853,162866,162869],{},[103,162867,162868],{},"is_even(num)","，判断一个数是否为偶数。",[63,162871,162853,162872,162875],{},[103,162873,162874],{},"calculate_bmi(weight, height)","，返回 BMI。",[63,162877,162878],{},"把第 4 章的菜单程序拆分成多个函数。",[5119,162880,162881],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":25,"searchDepth":28,"depth":28,"links":162883},[162884,162885,162886,162887,162888,162889,162890,162891,162892,162896,162897,162898,162899,162900,162901],{"id":160904,"depth":28,"text":160905},{"id":160945,"depth":28,"text":160946},{"id":161035,"depth":28,"text":161036},{"id":161116,"depth":28,"text":161117},{"id":161249,"depth":28,"text":161250},{"id":161371,"depth":28,"text":161372},{"id":161493,"depth":28,"text":161494},{"id":161570,"depth":28,"text":161571},{"id":161692,"depth":28,"text":161693,"children":162893},[162894,162895],{"id":161696,"depth":1172,"text":161697},{"id":161754,"depth":1172,"text":161755},{"id":161883,"depth":28,"text":161884},{"id":162009,"depth":28,"text":162010},{"id":162122,"depth":28,"text":162123},{"id":162278,"depth":28,"text":162279},{"id":162749,"depth":28,"text":162750},{"id":162847,"depth":28,"text":162848},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch5",{"title":160896,"description":30},"wiki\u002F2024-10-10-python教程\u002Fch5-函数基础","Eht1XzIe9875ocKpFbsjhzVr6wLsbs8TqR7KqoAw9_M",{"id":162908,"title":162909,"body":162910,"description":30,"extension":31,"meta":165954,"navigation":33,"path":165955,"seo":165956,"stem":165957,"__hash__":165958},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch6-数据容器.md","6. 数据容器",{"type":7,"value":162911,"toc":165935},[162912,162915,162919,162922,162925,163029,163032,163036,163039,163119,163122,163126,163129,163189,163192,163228,163231,163246,163250,163323,163326,163381,163384,163454,163457,163541,163551,163609,163613,163658,163661,163687,163690,163796,163800,163803,163845,163848,163912,163915,163919,163922,163983,163986,164016,164019,164057,164061,164064,164073,164076,164200,164203,164244,164248,164251,164262,164302,164305,164320,164325,164328,164395,164398,164488,164492,164495,164543,164546,164573,164575,164605,164608,164628,164631,164662,164665,164698,164702,164705,164729,164732,164756,164759,164783,164787,164790,164920,164923,165003,165006,165081,165085,165088,165138,165141,165183,165186,165210,165212,165236,165239,165294,165297,165363,165367,165370,165373,165411,165414,165467,165470,165516,165519,165552,165555,165559,165878,165882,165911,165915,165932],[10,162913,162909],{"id":162914},"_6-数据容器",[48,162916,162918],{"id":162917},"_61-什么是数据容器","6.1 什么是数据容器",[14,162920,162921],{},"数据容器用于一次保存多个数据。",[14,162923,162924],{},"常见容器：",[254,162926,162927,162944],{},[257,162928,162929],{},[260,162930,162931,162933,162936,162939,162942],{},[263,162932,25765],{},[263,162934,162935],{},"是否有序",[263,162937,162938],{},"是否可变",[263,162940,162941],{},"是否允许重复",[263,162943,27486],{},[301,162945,162946,162964,162980,162995,163012],{},[260,162947,162948,162951,162954,162957,162960],{},[306,162949,162950],{},"list列表",[306,162952,162953],{},"有序",[306,162955,162956],{},"可变",[306,162958,162959],{},"允许",[306,162961,162962],{},[103,162963,155242],{},[260,162965,162966,162969,162971,162974,162976],{},[306,162967,162968],{},"tuple元组",[306,162970,162953],{},[306,162972,162973],{},"不可变",[306,162975,162959],{},[306,162977,162978],{},[103,162979,155255],{},[260,162981,162982,162985,162987,162989,162991],{},[306,162983,162984],{},"str字符串",[306,162986,162953],{},[306,162988,162973],{},[306,162990,162959],{},[306,162992,162993],{},[103,162994,155865],{},[260,162996,162997,163000,163003,163005,163008],{},[306,162998,162999],{},"set集合",[306,163001,163002],{},"无序",[306,163004,162956],{},[306,163006,163007],{},"不允许",[306,163009,163010],{},[103,163011,155280],{},[260,163013,163014,163017,163019,163021,163024],{},[306,163015,163016],{},"dict字典",[306,163018,162953],{},[306,163020,162956],{},[306,163022,163023],{},"key不允许重复",[306,163025,163026],{},[103,163027,163028],{},"{\"name\": \"小明\"}",[14,163030,163031],{},"Python 3.7 之后，字典保持插入顺序。",[48,163033,163035],{"id":163034},"_62-列表list","6.2 列表list",[14,163037,163038],{},"列表用于保存一组有顺序的数据。",[97,163040,163042],{"className":30372,"code":163041,"language":30374,"meta":25,"style":25},"names = [\"小明\", \"小红\", \"小刚\"]\nnumbers = [1, 2, 3, 4]\nmixed = [\"小明\", 18, True]\nempty = []\n",[103,163043,163044,163064,163089,163110],{"__ignoreMap":25},[106,163045,163046,163048,163050,163052,163054,163056,163058,163060,163062],{"class":108,"line":109},[106,163047,160365],{"class":116},[106,163049,162],{"class":112},[106,163051,52220],{"class":116},[106,163053,149873],{"class":221},[106,163055,12428],{"class":116},[106,163057,150921],{"class":221},[106,163059,12428],{"class":116},[106,163061,159716],{"class":221},[106,163063,33240],{"class":116},[106,163065,163066,163069,163071,163073,163075,163077,163079,163081,163083,163085,163087],{"class":108,"line":28},[106,163067,163068],{"class":116},"numbers ",[106,163070,162],{"class":112},[106,163072,52220],{"class":116},[106,163074,334],{"class":165},[106,163076,12428],{"class":116},[106,163078,194],{"class":165},[106,163080,12428],{"class":116},[106,163082,188],{"class":165},[106,163084,12428],{"class":116},[106,163086,410],{"class":165},[106,163088,33240],{"class":116},[106,163090,163091,163094,163096,163098,163100,163102,163104,163106,163108],{"class":108,"line":1172},[106,163092,163093],{"class":116},"mixed ",[106,163095,162],{"class":112},[106,163097,52220],{"class":116},[106,163099,149873],{"class":221},[106,163101,12428],{"class":116},[106,163103,767],{"class":165},[106,163105,12428],{"class":116},[106,163107,31470],{"class":165},[106,163109,33240],{"class":116},[106,163111,163112,163115,163117],{"class":108,"line":1187},[106,163113,163114],{"class":116},"empty ",[106,163116,162],{"class":112},[106,163118,51832],{"class":116},[14,163120,163121],{},"推荐一个列表中保存同类数据，代码更清晰。",[48,163123,163125],{"id":163124},"_63-列表索引","6.3 列表索引",[14,163127,163128],{},"正向索引从 0 开始：",[97,163130,163132],{"className":30372,"code":163131,"language":30374,"meta":25,"style":25},"names = [\"小明\", \"小红\", \"小刚\"]\n\nprint(names[0])\nprint(names[1])\nprint(names[2])\n",[103,163133,163134,163154,163158,163169,163179],{"__ignoreMap":25},[106,163135,163136,163138,163140,163142,163144,163146,163148,163150,163152],{"class":108,"line":109},[106,163137,160365],{"class":116},[106,163139,162],{"class":112},[106,163141,52220],{"class":116},[106,163143,149873],{"class":221},[106,163145,12428],{"class":116},[106,163147,150921],{"class":221},[106,163149,12428],{"class":116},[106,163151,159716],{"class":221},[106,163153,33240],{"class":116},[106,163155,163156],{"class":108,"line":28},[106,163157,2392],{"emptyLinePlaceholder":33},[106,163159,163160,163162,163165,163167],{"class":108,"line":1172},[106,163161,30409],{"class":165},[106,163163,163164],{"class":116},"(names[",[106,163166,308],{"class":165},[106,163168,4649],{"class":116},[106,163170,163171,163173,163175,163177],{"class":108,"line":1187},[106,163172,30409],{"class":165},[106,163174,163164],{"class":116},[106,163176,334],{"class":165},[106,163178,4649],{"class":116},[106,163180,163181,163183,163185,163187],{"class":108,"line":1193},[106,163182,30409],{"class":165},[106,163184,163164],{"class":116},[106,163186,194],{"class":165},[106,163188,4649],{"class":116},[14,163190,163191],{},"反向索引从 -1 开始：",[97,163193,163195],{"className":30372,"code":163194,"language":30374,"meta":25,"style":25},"print(names[-1])  # 小刚\nprint(names[-2])  # 小红\n",[103,163196,163197,163213],{"__ignoreMap":25},[106,163198,163199,163201,163203,163205,163207,163210],{"class":108,"line":109},[106,163200,30409],{"class":165},[106,163202,163164],{"class":116},[106,163204,649],{"class":112},[106,163206,334],{"class":165},[106,163208,163209],{"class":116},"])  ",[106,163211,163212],{"class":175},"# 小刚\n",[106,163214,163215,163217,163219,163221,163223,163225],{"class":108,"line":28},[106,163216,30409],{"class":165},[106,163218,163164],{"class":116},[106,163220,649],{"class":112},[106,163222,194],{"class":165},[106,163224,163209],{"class":116},[106,163226,163227],{"class":175},"# 小红\n",[14,163229,163230],{},"索引越界会报错：",[97,163232,163234],{"className":30372,"code":163233,"language":30374,"meta":25,"style":25},"print(names[3])\n",[103,163235,163236],{"__ignoreMap":25},[106,163237,163238,163240,163242,163244],{"class":108,"line":109},[106,163239,30409],{"class":165},[106,163241,163164],{"class":116},[106,163243,188],{"class":165},[106,163245,4649],{"class":116},[48,163247,163249],{"id":163248},"_64-列表常用方法","6.4 列表常用方法",[97,163251,163253],{"className":30372,"code":163252,"language":30374,"meta":25,"style":25},"names = [\"小明\", \"小红\"]\n\nnames.append(\"小刚\")\nnames.insert(1, \"小李\")\nnames.extend([\"小王\", \"小赵\"])\n\nprint(names)\n",[103,163254,163255,163271,163275,163284,163298,163312,163316],{"__ignoreMap":25},[106,163256,163257,163259,163261,163263,163265,163267,163269],{"class":108,"line":109},[106,163258,160365],{"class":116},[106,163260,162],{"class":112},[106,163262,52220],{"class":116},[106,163264,149873],{"class":221},[106,163266,12428],{"class":116},[106,163268,150921],{"class":221},[106,163270,33240],{"class":116},[106,163272,163273],{"class":108,"line":28},[106,163274,2392],{"emptyLinePlaceholder":33},[106,163276,163277,163280,163282],{"class":108,"line":1172},[106,163278,163279],{"class":116},"names.append(",[106,163281,159716],{"class":221},[106,163283,123],{"class":116},[106,163285,163286,163289,163291,163293,163296],{"class":108,"line":1187},[106,163287,163288],{"class":116},"names.insert(",[106,163290,334],{"class":165},[106,163292,12428],{"class":116},[106,163294,163295],{"class":221},"\"小李\"",[106,163297,123],{"class":116},[106,163299,163300,163303,163305,163307,163310],{"class":108,"line":1193},[106,163301,163302],{"class":116},"names.extend([",[106,163304,8676],{"class":221},[106,163306,12428],{"class":116},[106,163308,163309],{"class":221},"\"小赵\"",[106,163311,4649],{"class":116},[106,163313,163314],{"class":108,"line":1207},[106,163315,2392],{"emptyLinePlaceholder":33},[106,163317,163318,163320],{"class":108,"line":1213},[106,163319,30409],{"class":165},[106,163321,163322],{"class":116},"(names)\n",[14,163324,163325],{},"删除元素：",[97,163327,163329],{"className":30372,"code":163328,"language":30374,"meta":25,"style":25},"names.remove(\"小红\")\nlast = names.pop()\nfirst = names.pop(0)\ndel names[0]\nnames.clear()\n",[103,163330,163331,163340,163350,163364,163376],{"__ignoreMap":25},[106,163332,163333,163336,163338],{"class":108,"line":109},[106,163334,163335],{"class":116},"names.remove(",[106,163337,150921],{"class":221},[106,163339,123],{"class":116},[106,163341,163342,163345,163347],{"class":108,"line":28},[106,163343,163344],{"class":116},"last ",[106,163346,162],{"class":112},[106,163348,163349],{"class":116}," names.pop()\n",[106,163351,163352,163355,163357,163360,163362],{"class":108,"line":1172},[106,163353,163354],{"class":116},"first ",[106,163356,162],{"class":112},[106,163358,163359],{"class":116}," names.pop(",[106,163361,308],{"class":165},[106,163363,123],{"class":116},[106,163365,163366,163369,163372,163374],{"class":108,"line":1187},[106,163367,163368],{"class":112},"del",[106,163370,163371],{"class":116}," names[",[106,163373,308],{"class":165},[106,163375,33240],{"class":116},[106,163377,163378],{"class":108,"line":1193},[106,163379,163380],{"class":116},"names.clear()\n",[14,163382,163383],{},"查询和统计：",[97,163385,163387],{"className":30372,"code":163386,"language":30374,"meta":25,"style":25},"numbers = [1, 2, 3, 2, 4]\n\nprint(numbers.index(3))\nprint(numbers.count(2))\nprint(len(numbers))\n",[103,163388,163389,163417,163421,163432,163443],{"__ignoreMap":25},[106,163390,163391,163393,163395,163397,163399,163401,163403,163405,163407,163409,163411,163413,163415],{"class":108,"line":109},[106,163392,163068],{"class":116},[106,163394,162],{"class":112},[106,163396,52220],{"class":116},[106,163398,334],{"class":165},[106,163400,12428],{"class":116},[106,163402,194],{"class":165},[106,163404,12428],{"class":116},[106,163406,188],{"class":165},[106,163408,12428],{"class":116},[106,163410,194],{"class":165},[106,163412,12428],{"class":116},[106,163414,410],{"class":165},[106,163416,33240],{"class":116},[106,163418,163419],{"class":108,"line":28},[106,163420,2392],{"emptyLinePlaceholder":33},[106,163422,163423,163425,163428,163430],{"class":108,"line":1172},[106,163424,30409],{"class":165},[106,163426,163427],{"class":116},"(numbers.index(",[106,163429,188],{"class":165},[106,163431,30491],{"class":116},[106,163433,163434,163436,163439,163441],{"class":108,"line":1187},[106,163435,30409],{"class":165},[106,163437,163438],{"class":116},"(numbers.count(",[106,163440,194],{"class":165},[106,163442,30491],{"class":116},[106,163444,163445,163447,163449,163451],{"class":108,"line":1193},[106,163446,30409],{"class":165},[106,163448,117],{"class":116},[106,163450,7351],{"class":165},[106,163452,163453],{"class":116},"(numbers))\n",[14,163455,163456],{},"排序：",[97,163458,163460],{"className":30372,"code":163459,"language":30374,"meta":25,"style":25},"numbers = [3, 1, 5, 2]\n\nnumbers.sort()\nprint(numbers)\n\nnumbers.sort(reverse=True)\nprint(numbers)\n\nnumbers.reverse()\nprint(numbers)\n",[103,163461,163462,163486,163490,163495,163502,163506,163520,163526,163530,163535],{"__ignoreMap":25},[106,163463,163464,163466,163468,163470,163472,163474,163476,163478,163480,163482,163484],{"class":108,"line":109},[106,163465,163068],{"class":116},[106,163467,162],{"class":112},[106,163469,52220],{"class":116},[106,163471,188],{"class":165},[106,163473,12428],{"class":116},[106,163475,334],{"class":165},[106,163477,12428],{"class":116},[106,163479,436],{"class":165},[106,163481,12428],{"class":116},[106,163483,194],{"class":165},[106,163485,33240],{"class":116},[106,163487,163488],{"class":108,"line":28},[106,163489,2392],{"emptyLinePlaceholder":33},[106,163491,163492],{"class":108,"line":1172},[106,163493,163494],{"class":116},"numbers.sort()\n",[106,163496,163497,163499],{"class":108,"line":1187},[106,163498,30409],{"class":165},[106,163500,163501],{"class":116},"(numbers)\n",[106,163503,163504],{"class":108,"line":1193},[106,163505,2392],{"emptyLinePlaceholder":33},[106,163507,163508,163511,163514,163516,163518],{"class":108,"line":1207},[106,163509,163510],{"class":116},"numbers.sort(",[106,163512,163513],{"class":5209},"reverse",[106,163515,162],{"class":112},[106,163517,31470],{"class":165},[106,163519,123],{"class":116},[106,163521,163522,163524],{"class":108,"line":1213},[106,163523,30409],{"class":165},[106,163525,163501],{"class":116},[106,163527,163528],{"class":108,"line":1304},[106,163529,2392],{"emptyLinePlaceholder":33},[106,163531,163532],{"class":108,"line":1310},[106,163533,163534],{"class":116},"numbers.reverse()\n",[106,163536,163537,163539],{"class":108,"line":1322},[106,163538,30409],{"class":165},[106,163540,163501],{"class":116},[14,163542,163543,163546,163547,163550],{},[103,163544,163545],{},"sort()"," 会修改原列表，",[103,163548,163549],{},"sorted()"," 返回新列表。",[97,163552,163554],{"className":30372,"code":163553,"language":30374,"meta":25,"style":25},"numbers = [3, 1, 5, 2]\nnew_numbers = sorted(numbers)\n\nprint(numbers)\nprint(new_numbers)\n",[103,163555,163556,163580,163592,163596,163602],{"__ignoreMap":25},[106,163557,163558,163560,163562,163564,163566,163568,163570,163572,163574,163576,163578],{"class":108,"line":109},[106,163559,163068],{"class":116},[106,163561,162],{"class":112},[106,163563,52220],{"class":116},[106,163565,188],{"class":165},[106,163567,12428],{"class":116},[106,163569,334],{"class":165},[106,163571,12428],{"class":116},[106,163573,436],{"class":165},[106,163575,12428],{"class":116},[106,163577,194],{"class":165},[106,163579,33240],{"class":116},[106,163581,163582,163585,163587,163590],{"class":108,"line":28},[106,163583,163584],{"class":116},"new_numbers ",[106,163586,162],{"class":112},[106,163588,163589],{"class":165}," sorted",[106,163591,163501],{"class":116},[106,163593,163594],{"class":108,"line":1172},[106,163595,2392],{"emptyLinePlaceholder":33},[106,163597,163598,163600],{"class":108,"line":1187},[106,163599,30409],{"class":165},[106,163601,163501],{"class":116},[106,163603,163604,163606],{"class":108,"line":1193},[106,163605,30409],{"class":165},[106,163607,163608],{"class":116},"(new_numbers)\n",[48,163610,163612],{"id":163611},"_65-列表遍历","6.5 列表遍历",[97,163614,163616],{"className":30372,"code":163615,"language":30374,"meta":25,"style":25},"names = [\"小明\", \"小红\", \"小刚\"]\n\nfor name in names:\n    print(name)\n",[103,163617,163618,163638,163642,163652],{"__ignoreMap":25},[106,163619,163620,163622,163624,163626,163628,163630,163632,163634,163636],{"class":108,"line":109},[106,163621,160365],{"class":116},[106,163623,162],{"class":112},[106,163625,52220],{"class":116},[106,163627,149873],{"class":221},[106,163629,12428],{"class":116},[106,163631,150921],{"class":221},[106,163633,12428],{"class":116},[106,163635,159716],{"class":221},[106,163637,33240],{"class":116},[106,163639,163640],{"class":108,"line":28},[106,163641,2392],{"emptyLinePlaceholder":33},[106,163643,163644,163646,163648,163650],{"class":108,"line":1172},[106,163645,3017],{"class":112},[106,163647,160401],{"class":116},[106,163649,26037],{"class":112},[106,163651,160406],{"class":116},[106,163653,163654,163656],{"class":108,"line":1187},[106,163655,31293],{"class":165},[106,163657,150645],{"class":116},[14,163659,163660],{},"需要索引时：",[97,163662,163664],{"className":30372,"code":163663,"language":30374,"meta":25,"style":25},"for index, name in enumerate(names):\n    print(index, name)\n",[103,163665,163666,163680],{"__ignoreMap":25},[106,163667,163668,163670,163673,163675,163677],{"class":108,"line":109},[106,163669,3017],{"class":112},[106,163671,163672],{"class":116}," index, name ",[106,163674,26037],{"class":112},[106,163676,31600],{"class":165},[106,163678,163679],{"class":116},"(names):\n",[106,163681,163682,163684],{"class":108,"line":28},[106,163683,31293],{"class":165},[106,163685,163686],{"class":116},"(index, name)\n",[14,163688,163689],{},"统计总分：",[97,163691,163693],{"className":30372,"code":163692,"language":30374,"meta":25,"style":25},"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",[103,163694,163695,163720,163728,163732,163743,163751,163755,163772],{"__ignoreMap":25},[106,163696,163697,163700,163702,163704,163706,163708,163710,163712,163714,163716,163718],{"class":108,"line":109},[106,163698,163699],{"class":116},"scores ",[106,163701,162],{"class":112},[106,163703,52220],{"class":116},[106,163705,979],{"class":165},[106,163707,12428],{"class":116},[106,163709,853],{"class":165},[106,163711,12428],{"class":116},[106,163713,371],{"class":165},[106,163715,12428],{"class":116},[106,163717,678],{"class":165},[106,163719,33240],{"class":116},[106,163721,163722,163724,163726],{"class":108,"line":28},[106,163723,157245],{"class":116},[106,163725,162],{"class":112},[106,163727,47327],{"class":165},[106,163729,163730],{"class":108,"line":1172},[106,163731,2392],{"emptyLinePlaceholder":33},[106,163733,163734,163736,163738,163740],{"class":108,"line":1187},[106,163735,3017],{"class":112},[106,163737,157768],{"class":116},[106,163739,26037],{"class":112},[106,163741,163742],{"class":116}," scores:\n",[106,163744,163745,163747,163749],{"class":108,"line":1193},[106,163746,159292],{"class":116},[106,163748,9470],{"class":112},[106,163750,1571],{"class":116},[106,163752,163753],{"class":108,"line":1207},[106,163754,2392],{"emptyLinePlaceholder":33},[106,163756,163757,163760,163762,163765,163767,163769],{"class":108,"line":1213},[106,163758,163759],{"class":116},"avg ",[106,163761,162],{"class":112},[106,163763,163764],{"class":116}," total ",[106,163766,701],{"class":112},[106,163768,7324],{"class":165},[106,163770,163771],{"class":116},"(scores)\n",[106,163773,163774,163776,163778,163780,163783,163785,163788,163790,163792,163794],{"class":108,"line":1304},[106,163775,30409],{"class":165},[106,163777,117],{"class":116},[106,163779,169],{"class":112},[106,163781,163782],{"class":221},"\"平均分:",[106,163784,1013],{"class":165},[106,163786,163787],{"class":116},"avg",[106,163789,157144],{"class":112},[106,163791,1063],{"class":165},[106,163793,368],{"class":221},[106,163795,123],{"class":116},[48,163797,163799],{"id":163798},"_66-元组tuple","6.6 元组tuple",[14,163801,163802],{},"元组和列表类似，但不可修改。",[97,163804,163806],{"className":30372,"code":163805,"language":30374,"meta":25,"style":25},"point = (10, 20)\ninfo = (\"小明\", 18, \"北京\")\n",[103,163807,163808,163825],{"__ignoreMap":25},[106,163809,163810,163813,163815,163817,163819,163821,163823],{"class":108,"line":109},[106,163811,163812],{"class":116},"point ",[106,163814,162],{"class":112},[106,163816,1650],{"class":116},[106,163818,563],{"class":165},[106,163820,12428],{"class":116},[106,163822,817],{"class":165},[106,163824,123],{"class":116},[106,163826,163827,163829,163831,163833,163835,163837,163839,163841,163843],{"class":108,"line":28},[106,163828,116299],{"class":116},[106,163830,162],{"class":112},[106,163832,1650],{"class":116},[106,163834,149873],{"class":221},[106,163836,12428],{"class":116},[106,163838,767],{"class":165},[106,163840,12428],{"class":116},[106,163842,69263],{"class":221},[106,163844,123],{"class":116},[14,163846,163847],{},"单元素元组必须加逗号：",[97,163849,163851],{"className":30372,"code":163850,"language":30374,"meta":25,"style":25},"t1 = (10,)\nt2 = (10)\n\nprint(type(t1))  # tuple\nprint(type(t2))  # int\n",[103,163852,163853,163867,163880,163884,163898],{"__ignoreMap":25},[106,163854,163855,163858,163860,163862,163864],{"class":108,"line":109},[106,163856,163857],{"class":116},"t1 ",[106,163859,162],{"class":112},[106,163861,1650],{"class":116},[106,163863,563],{"class":165},[106,163865,163866],{"class":116},",)\n",[106,163868,163869,163872,163874,163876,163878],{"class":108,"line":28},[106,163870,163871],{"class":116},"t2 ",[106,163873,162],{"class":112},[106,163875,1650],{"class":116},[106,163877,563],{"class":165},[106,163879,123],{"class":116},[106,163881,163882],{"class":108,"line":1172},[106,163883,2392],{"emptyLinePlaceholder":33},[106,163885,163886,163888,163890,163892,163895],{"class":108,"line":1187},[106,163887,30409],{"class":165},[106,163889,117],{"class":116},[106,163891,103092],{"class":165},[106,163893,163894],{"class":116},"(t1))  ",[106,163896,163897],{"class":175},"# tuple\n",[106,163899,163900,163902,163904,163906,163909],{"class":108,"line":1193},[106,163901,30409],{"class":165},[106,163903,117],{"class":116},[106,163905,103092],{"class":165},[106,163907,163908],{"class":116},"(t2))  ",[106,163910,163911],{"class":175},"# int\n",[14,163913,163914],{},"元组适合保存不希望被修改的数据，如坐标、配置项。",[48,163916,163918],{"id":163917},"_67-字符串str","6.7 字符串str",[14,163920,163921],{},"字符串也是序列，可以索引、切片和遍历。",[97,163923,163925],{"className":30372,"code":163924,"language":30374,"meta":25,"style":25},"text = \"python\"\n\nprint(text[0])\nprint(text[-1])\n\nfor ch in text:\n    print(ch)\n",[103,163926,163927,163935,163939,163950,163962,163966,163977],{"__ignoreMap":25},[106,163928,163929,163931,163933],{"class":108,"line":109},[106,163930,156429],{"class":116},[106,163932,162],{"class":112},[106,163934,159666],{"class":221},[106,163936,163937],{"class":108,"line":28},[106,163938,2392],{"emptyLinePlaceholder":33},[106,163940,163941,163943,163946,163948],{"class":108,"line":1172},[106,163942,30409],{"class":165},[106,163944,163945],{"class":116},"(text[",[106,163947,308],{"class":165},[106,163949,4649],{"class":116},[106,163951,163952,163954,163956,163958,163960],{"class":108,"line":1187},[106,163953,30409],{"class":165},[106,163955,163945],{"class":116},[106,163957,649],{"class":112},[106,163959,334],{"class":165},[106,163961,4649],{"class":116},[106,163963,163964],{"class":108,"line":1193},[106,163965,2392],{"emptyLinePlaceholder":33},[106,163967,163968,163970,163972,163974],{"class":108,"line":1207},[106,163969,3017],{"class":112},[106,163971,159677],{"class":116},[106,163973,26037],{"class":112},[106,163975,163976],{"class":116}," text:\n",[106,163978,163979,163981],{"class":108,"line":1213},[106,163980,31293],{"class":165},[106,163982,159688],{"class":116},[14,163984,163985],{},"字符串不可变：",[97,163987,163989],{"className":30372,"code":163988,"language":30374,"meta":25,"style":25},"text = \"python\"\ntext[0] = \"P\"  # 报错\n",[103,163990,163991,163999],{"__ignoreMap":25},[106,163992,163993,163995,163997],{"class":108,"line":109},[106,163994,156429],{"class":116},[106,163996,162],{"class":112},[106,163998,159666],{"class":221},[106,164000,164001,164004,164006,164008,164010,164013],{"class":108,"line":28},[106,164002,164003],{"class":116},"text[",[106,164005,308],{"class":165},[106,164007,4435],{"class":116},[106,164009,162],{"class":112},[106,164011,164012],{"class":221}," \"P\"",[106,164014,164015],{"class":175},"  # 报错\n",[14,164017,164018],{},"如果要得到新字符串：",[97,164020,164022],{"className":30372,"code":164021,"language":30374,"meta":25,"style":25},"text = \"python\"\ntext = \"P\" + text[1:]\nprint(text)\n",[103,164023,164024,164032,164050],{"__ignoreMap":25},[106,164025,164026,164028,164030],{"class":108,"line":109},[106,164027,156429],{"class":116},[106,164029,162],{"class":112},[106,164031,159666],{"class":221},[106,164033,164034,164036,164038,164040,164042,164045,164047],{"class":108,"line":28},[106,164035,156429],{"class":116},[106,164037,162],{"class":112},[106,164039,164012],{"class":221},[106,164041,45560],{"class":112},[106,164043,164044],{"class":116}," text[",[106,164046,334],{"class":165},[106,164048,164049],{"class":116},":]\n",[106,164051,164052,164054],{"class":108,"line":1172},[106,164053,30409],{"class":165},[106,164055,164056],{"class":116},"(text)\n",[48,164058,164060],{"id":164059},"_68-切片","6.8 切片",[14,164062,164063],{},"切片用于从序列中取一部分。",[97,164065,164067],{"className":30372,"code":164066,"language":30374,"meta":25,"style":25},"序列[开始:结束:步长]\n",[103,164068,164069],{"__ignoreMap":25},[106,164070,164071],{"class":108,"line":109},[106,164072,164066],{"class":116},[14,164074,164075],{},"结束位置不包含。",[97,164077,164079],{"className":30372,"code":164078,"language":30374,"meta":25,"style":25},"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",[103,164080,164081,164118,164122,164141,164156,164170,164184],{"__ignoreMap":25},[106,164082,164083,164086,164088,164090,164092,164094,164096,164098,164100,164102,164104,164106,164108,164110,164112,164114,164116],{"class":108,"line":109},[106,164084,164085],{"class":116},"nums ",[106,164087,162],{"class":112},[106,164089,52220],{"class":116},[106,164091,308],{"class":165},[106,164093,12428],{"class":116},[106,164095,334],{"class":165},[106,164097,12428],{"class":116},[106,164099,194],{"class":165},[106,164101,12428],{"class":116},[106,164103,188],{"class":165},[106,164105,12428],{"class":116},[106,164107,410],{"class":165},[106,164109,12428],{"class":116},[106,164111,436],{"class":165},[106,164113,12428],{"class":116},[106,164115,461],{"class":165},[106,164117,33240],{"class":116},[106,164119,164120],{"class":108,"line":28},[106,164121,2392],{"emptyLinePlaceholder":33},[106,164123,164124,164126,164129,164131,164133,164135,164138],{"class":108,"line":1172},[106,164125,30409],{"class":165},[106,164127,164128],{"class":116},"(nums[",[106,164130,334],{"class":165},[106,164132,976],{"class":116},[106,164134,410],{"class":165},[106,164136,164137],{"class":116},"])    ",[106,164139,164140],{"class":175},"# [1, 2, 3]\n",[106,164142,164143,164145,164148,164150,164153],{"class":108,"line":1187},[106,164144,30409],{"class":165},[106,164146,164147],{"class":116},"(nums[:",[106,164149,188],{"class":165},[106,164151,164152],{"class":116},"])     ",[106,164154,164155],{"class":175},"# [0, 1, 2]\n",[106,164157,164158,164160,164162,164164,164167],{"class":108,"line":1193},[106,164159,30409],{"class":165},[106,164161,164128],{"class":116},[106,164163,188],{"class":165},[106,164165,164166],{"class":116},":])     ",[106,164168,164169],{"class":175},"# [3, 4, 5, 6]\n",[106,164171,164172,164174,164177,164179,164181],{"class":108,"line":1207},[106,164173,30409],{"class":165},[106,164175,164176],{"class":116},"(nums[::",[106,164178,194],{"class":165},[106,164180,164137],{"class":116},[106,164182,164183],{"class":175},"# [0, 2, 4, 6]\n",[106,164185,164186,164188,164190,164192,164194,164197],{"class":108,"line":1213},[106,164187,30409],{"class":165},[106,164189,164176],{"class":116},[106,164191,649],{"class":112},[106,164193,334],{"class":165},[106,164195,164196],{"class":116},"])   ",[106,164198,164199],{"class":175},"# 反转\n",[14,164201,164202],{},"字符串切片：",[97,164204,164206],{"className":30372,"code":164205,"language":30374,"meta":25,"style":25},"text = \"abcdef\"\nprint(text[1:4])\nprint(text[::-1])\n",[103,164207,164208,164217,164231],{"__ignoreMap":25},[106,164209,164210,164212,164214],{"class":108,"line":109},[106,164211,156429],{"class":116},[106,164213,162],{"class":112},[106,164215,164216],{"class":221}," \"abcdef\"\n",[106,164218,164219,164221,164223,164225,164227,164229],{"class":108,"line":28},[106,164220,30409],{"class":165},[106,164222,163945],{"class":116},[106,164224,334],{"class":165},[106,164226,976],{"class":116},[106,164228,410],{"class":165},[106,164230,4649],{"class":116},[106,164232,164233,164235,164238,164240,164242],{"class":108,"line":1172},[106,164234,30409],{"class":165},[106,164236,164237],{"class":116},"(text[::",[106,164239,649],{"class":112},[106,164241,334],{"class":165},[106,164243,4649],{"class":116},[48,164245,164247],{"id":164246},"_69-集合set","6.9 集合set",[14,164249,164250],{},"集合特点：",[60,164252,164253,164256,164259],{},[63,164254,164255],{},"无序。",[63,164257,164258],{},"元素不重复。",[63,164260,164261],{},"可以做交集、并集、差集。",[97,164263,164265],{"className":30372,"code":164264,"language":30374,"meta":25,"style":25},"nums = {1, 2, 3, 3, 4}\nprint(nums)\n",[103,164266,164267,164295],{"__ignoreMap":25},[106,164268,164269,164271,164273,164275,164277,164279,164281,164283,164285,164287,164289,164291,164293],{"class":108,"line":109},[106,164270,164085],{"class":116},[106,164272,162],{"class":112},[106,164274,4440],{"class":116},[106,164276,334],{"class":165},[106,164278,12428],{"class":116},[106,164280,194],{"class":165},[106,164282,12428],{"class":116},[106,164284,188],{"class":165},[106,164286,12428],{"class":116},[106,164288,188],{"class":165},[106,164290,12428],{"class":116},[106,164292,410],{"class":165},[106,164294,1557],{"class":116},[106,164296,164297,164299],{"class":108,"line":28},[106,164298,30409],{"class":165},[106,164300,164301],{"class":116},"(nums)\n",[14,164303,164304],{},"创建空集合：",[97,164306,164308],{"className":30372,"code":164307,"language":30374,"meta":25,"style":25},"s = set()\n",[103,164309,164310],{"__ignoreMap":25},[106,164311,164312,164314,164316,164318],{"class":108,"line":109},[106,164313,10572],{"class":116},[106,164315,162],{"class":112},[106,164317,119707],{"class":165},[106,164319,1968],{"class":116},[14,164321,9018,164322,164324],{},[103,164323,32453],{}," 是空字典，不是空集合。",[14,164326,164327],{},"集合常用操作：",[97,164329,164331],{"className":30372,"code":164330,"language":30374,"meta":25,"style":25},"s = {1, 2, 3}\n\ns.add(4)\ns.remove(2)\ns.discard(10)\nprint(len(s))\n",[103,164332,164333,164353,164357,164366,164375,164384],{"__ignoreMap":25},[106,164334,164335,164337,164339,164341,164343,164345,164347,164349,164351],{"class":108,"line":109},[106,164336,10572],{"class":116},[106,164338,162],{"class":112},[106,164340,4440],{"class":116},[106,164342,334],{"class":165},[106,164344,12428],{"class":116},[106,164346,194],{"class":165},[106,164348,12428],{"class":116},[106,164350,188],{"class":165},[106,164352,1557],{"class":116},[106,164354,164355],{"class":108,"line":28},[106,164356,2392],{"emptyLinePlaceholder":33},[106,164358,164359,164362,164364],{"class":108,"line":1172},[106,164360,164361],{"class":116},"s.add(",[106,164363,410],{"class":165},[106,164365,123],{"class":116},[106,164367,164368,164371,164373],{"class":108,"line":1187},[106,164369,164370],{"class":116},"s.remove(",[106,164372,194],{"class":165},[106,164374,123],{"class":116},[106,164376,164377,164380,164382],{"class":108,"line":1193},[106,164378,164379],{"class":116},"s.discard(",[106,164381,563],{"class":165},[106,164383,123],{"class":116},[106,164385,164386,164388,164390,164392],{"class":108,"line":1207},[106,164387,30409],{"class":165},[106,164389,117],{"class":116},[106,164391,7351],{"class":165},[106,164393,164394],{"class":116},"(s))\n",[14,164396,164397],{},"交并差：",[97,164399,164401],{"className":30372,"code":164400,"language":30374,"meta":25,"style":25},"a = {1, 2, 3}\nb = {3, 4, 5}\n\nprint(a & b)  # 交集\nprint(a | b)  # 并集\nprint(a - b)  # 差集\n",[103,164402,164403,164423,164443,164447,164462,164475],{"__ignoreMap":25},[106,164404,164405,164407,164409,164411,164413,164415,164417,164419,164421],{"class":108,"line":109},[106,164406,10912],{"class":116},[106,164408,162],{"class":112},[106,164410,4440],{"class":116},[106,164412,334],{"class":165},[106,164414,12428],{"class":116},[106,164416,194],{"class":165},[106,164418,12428],{"class":116},[106,164420,188],{"class":165},[106,164422,1557],{"class":116},[106,164424,164425,164427,164429,164431,164433,164435,164437,164439,164441],{"class":108,"line":28},[106,164426,10938],{"class":116},[106,164428,162],{"class":112},[106,164430,4440],{"class":116},[106,164432,188],{"class":165},[106,164434,12428],{"class":116},[106,164436,410],{"class":165},[106,164438,12428],{"class":116},[106,164440,436],{"class":165},[106,164442,1557],{"class":116},[106,164444,164445],{"class":108,"line":1172},[106,164446,2392],{"emptyLinePlaceholder":33},[106,164448,164449,164451,164454,164456,164459],{"class":108,"line":1187},[106,164450,30409],{"class":165},[106,164452,164453],{"class":116},"(a ",[106,164455,470],{"class":112},[106,164457,164458],{"class":116}," b)  ",[106,164460,164461],{"class":175},"# 交集\n",[106,164463,164464,164466,164468,164470,164472],{"class":108,"line":1193},[106,164465,30409],{"class":165},[106,164467,164453],{"class":116},[106,164469,1038],{"class":112},[106,164471,164458],{"class":116},[106,164473,164474],{"class":175},"# 并集\n",[106,164476,164477,164479,164481,164483,164485],{"class":108,"line":1207},[106,164478,30409],{"class":165},[106,164480,164453],{"class":116},[106,164482,649],{"class":112},[106,164484,164458],{"class":116},[106,164486,164487],{"class":175},"# 差集\n",[48,164489,164491],{"id":164490},"_610-字典dict","6.10 字典dict",[14,164493,164494],{},"字典通过 key-value 保存数据。",[97,164496,164498],{"className":30372,"code":164497,"language":30374,"meta":25,"style":25},"student = {\n    \"name\": \"小明\",\n    \"age\": 18,\n    \"score\": 95\n}\n",[103,164499,164500,164508,164518,164529,164539],{"__ignoreMap":25},[106,164501,164502,164504,164506],{"class":108,"line":109},[106,164503,149466],{"class":116},[106,164505,162],{"class":112},[106,164507,15565],{"class":116},[106,164509,164510,164512,164514,164516],{"class":108,"line":28},[106,164511,147005],{"class":221},[106,164513,51431],{"class":116},[106,164515,149873],{"class":221},[106,164517,31460],{"class":116},[106,164519,164520,164523,164525,164527],{"class":108,"line":1172},[106,164521,164522],{"class":221},"    \"age\"",[106,164524,51431],{"class":116},[106,164526,767],{"class":165},[106,164528,31460],{"class":116},[106,164530,164531,164534,164536],{"class":108,"line":1187},[106,164532,164533],{"class":221},"    \"score\"",[106,164535,51431],{"class":116},[106,164537,164538],{"class":165},"95\n",[106,164540,164541],{"class":108,"line":1193},[106,164542,1557],{"class":116},[14,164544,164545],{},"获取值：",[97,164547,164549],{"className":30372,"code":164548,"language":30374,"meta":25,"style":25},"print(student[\"name\"])\nprint(student.get(\"name\"))\n",[103,164550,164551,164562],{"__ignoreMap":25},[106,164552,164553,164555,164558,164560],{"class":108,"line":109},[106,164554,30409],{"class":165},[106,164556,164557],{"class":116},"(student[",[106,164559,62673],{"class":221},[106,164561,4649],{"class":116},[106,164563,164564,164566,164569,164571],{"class":108,"line":28},[106,164565,30409],{"class":165},[106,164567,164568],{"class":116},"(student.get(",[106,164570,62673],{"class":221},[106,164572,30491],{"class":116},[14,164574,15381],{},[97,164576,164578],{"className":30372,"code":164577,"language":30374,"meta":25,"style":25},"student[\"address\"]     # key不存在会报错\nstudent.get(\"address\") # key不存在返回None\n",[103,164579,164580,164593],{"__ignoreMap":25},[106,164581,164582,164584,164587,164590],{"class":108,"line":109},[106,164583,152844],{"class":116},[106,164585,164586],{"class":221},"\"address\"",[106,164588,164589],{"class":116},"]     ",[106,164591,164592],{"class":175},"# key不存在会报错\n",[106,164594,164595,164598,164600,164602],{"class":108,"line":28},[106,164596,164597],{"class":116},"student.get(",[106,164599,164586],{"class":221},[106,164601,13707],{"class":116},[106,164603,164604],{"class":175},"# key不存在返回None\n",[14,164606,164607],{},"设置默认值：",[97,164609,164611],{"className":30372,"code":164610,"language":30374,"meta":25,"style":25},"print(student.get(\"address\", \"未知\"))\n",[103,164612,164613],{"__ignoreMap":25},[106,164614,164615,164617,164619,164621,164623,164626],{"class":108,"line":109},[106,164616,30409],{"class":165},[106,164618,164568],{"class":116},[106,164620,164586],{"class":221},[106,164622,12428],{"class":116},[106,164624,164625],{"class":221},"\"未知\"",[106,164627,30491],{"class":116},[14,164629,164630],{},"新增和修改：",[97,164632,164634],{"className":30372,"code":164633,"language":30374,"meta":25,"style":25},"student[\"age\"] = 19\nstudent[\"address\"] = \"北京\"\n",[103,164635,164636,164649],{"__ignoreMap":25},[106,164637,164638,164640,164642,164644,164646],{"class":108,"line":109},[106,164639,152844],{"class":116},[106,164641,69118],{"class":221},[106,164643,4435],{"class":116},[106,164645,162],{"class":112},[106,164647,164648],{"class":165}," 19\n",[106,164650,164651,164653,164655,164657,164659],{"class":108,"line":28},[106,164652,152844],{"class":116},[106,164654,164586],{"class":221},[106,164656,4435],{"class":116},[106,164658,162],{"class":112},[106,164660,164661],{"class":221}," \"北京\"\n",[14,164663,164664],{},"删除：",[97,164666,164668],{"className":30372,"code":164667,"language":30374,"meta":25,"style":25},"score = student.pop(\"score\")\ndel student[\"age\"]\nstudent.clear()\n",[103,164669,164670,164683,164693],{"__ignoreMap":25},[106,164671,164672,164674,164676,164679,164681],{"class":108,"line":109},[106,164673,155343],{"class":116},[106,164675,162],{"class":112},[106,164677,164678],{"class":116}," student.pop(",[106,164680,151457],{"class":221},[106,164682,123],{"class":116},[106,164684,164685,164687,164689,164691],{"class":108,"line":28},[106,164686,163368],{"class":112},[106,164688,152134],{"class":116},[106,164690,69118],{"class":221},[106,164692,33240],{"class":116},[106,164694,164695],{"class":108,"line":1172},[106,164696,164697],{"class":116},"student.clear()\n",[48,164699,164701],{"id":164700},"_611-字典遍历","6.11 字典遍历",[14,164703,164704],{},"遍历 key：",[97,164706,164708],{"className":30372,"code":164707,"language":30374,"meta":25,"style":25},"for key in student:\n    print(key, student[key])\n",[103,164709,164710,164722],{"__ignoreMap":25},[106,164711,164712,164714,164717,164719],{"class":108,"line":109},[106,164713,3017],{"class":112},[106,164715,164716],{"class":116}," key ",[106,164718,26037],{"class":112},[106,164720,164721],{"class":116}," student:\n",[106,164723,164724,164726],{"class":108,"line":28},[106,164725,31293],{"class":165},[106,164727,164728],{"class":116},"(key, student[key])\n",[14,164730,164731],{},"遍历 value：",[97,164733,164735],{"className":30372,"code":164734,"language":30374,"meta":25,"style":25},"for value in student.values():\n    print(value)\n",[103,164736,164737,164749],{"__ignoreMap":25},[106,164738,164739,164741,164744,164746],{"class":108,"line":109},[106,164740,3017],{"class":112},[106,164742,164743],{"class":116}," value ",[106,164745,26037],{"class":112},[106,164747,164748],{"class":116}," student.values():\n",[106,164750,164751,164753],{"class":108,"line":28},[106,164752,31293],{"class":165},[106,164754,164755],{"class":116},"(value)\n",[14,164757,164758],{},"遍历 key 和 value：",[97,164760,164762],{"className":30372,"code":164761,"language":30374,"meta":25,"style":25},"for key, value in student.items():\n    print(key, value)\n",[103,164763,164764,164776],{"__ignoreMap":25},[106,164765,164766,164768,164771,164773],{"class":108,"line":109},[106,164767,3017],{"class":112},[106,164769,164770],{"class":116}," key, value ",[106,164772,26037],{"class":112},[106,164774,164775],{"class":116}," student.items():\n",[106,164777,164778,164780],{"class":108,"line":28},[106,164779,31293],{"class":165},[106,164781,164782],{"class":116},"(key, value)\n",[48,164784,164786],{"id":164785},"_612-嵌套容器","6.12 嵌套容器",[14,164788,164789],{},"列表中保存字典，是项目中最常见的结构之一。",[97,164791,164793],{"className":30372,"code":164792,"language":30374,"meta":25,"style":25},"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",[103,164794,164795,164803,164831,164859,164887,164891,164895,164905],{"__ignoreMap":25},[106,164796,164797,164799,164801],{"class":108,"line":109},[106,164798,159701],{"class":116},[106,164800,162],{"class":112},[106,164802,55441],{"class":116},[106,164804,164805,164807,164809,164811,164813,164815,164817,164819,164821,164823,164825,164827,164829],{"class":108,"line":28},[106,164806,148370],{"class":116},[106,164808,62673],{"class":221},[106,164810,51431],{"class":116},[106,164812,149873],{"class":221},[106,164814,12428],{"class":116},[106,164816,69118],{"class":221},[106,164818,51431],{"class":116},[106,164820,767],{"class":165},[106,164822,12428],{"class":116},[106,164824,151457],{"class":221},[106,164826,51431],{"class":116},[106,164828,1106],{"class":165},[106,164830,4922],{"class":116},[106,164832,164833,164835,164837,164839,164841,164843,164845,164847,164849,164851,164853,164855,164857],{"class":108,"line":1172},[106,164834,148370],{"class":116},[106,164836,62673],{"class":221},[106,164838,51431],{"class":116},[106,164840,150921],{"class":221},[106,164842,12428],{"class":116},[106,164844,69118],{"class":221},[106,164846,51431],{"class":116},[106,164848,742],{"class":165},[106,164850,12428],{"class":116},[106,164852,151457],{"class":221},[106,164854,51431],{"class":116},[106,164856,928],{"class":165},[106,164858,4922],{"class":116},[106,164860,164861,164863,164865,164867,164869,164871,164873,164875,164877,164879,164881,164883,164885],{"class":108,"line":1187},[106,164862,148370],{"class":116},[106,164864,62673],{"class":221},[106,164866,51431],{"class":116},[106,164868,159716],{"class":221},[106,164870,12428],{"class":116},[106,164872,69118],{"class":221},[106,164874,51431],{"class":116},[106,164876,792],{"class":165},[106,164878,12428],{"class":116},[106,164880,151457],{"class":221},[106,164882,51431],{"class":116},[106,164884,523],{"class":165},[106,164886,4922],{"class":116},[106,164888,164889],{"class":108,"line":1193},[106,164890,33240],{"class":116},[106,164892,164893],{"class":108,"line":1207},[106,164894,2392],{"emptyLinePlaceholder":33},[106,164896,164897,164899,164901,164903],{"class":108,"line":1213},[106,164898,3017],{"class":112},[106,164900,152122],{"class":116},[106,164902,26037],{"class":112},[106,164904,152127],{"class":116},[106,164906,164907,164909,164911,164913,164916,164918],{"class":108,"line":1304},[106,164908,31293],{"class":165},[106,164910,164557],{"class":116},[106,164912,62673],{"class":221},[106,164914,164915],{"class":116},"], student[",[106,164917,151457],{"class":221},[106,164919,4649],{"class":116},[14,164921,164922],{},"统计平均分：",[97,164924,164926],{"className":30372,"code":164925,"language":30374,"meta":25,"style":25},"total = 0\n\nfor student in students:\n    total += student[\"score\"]\n\navg = total \u002F len(students)\nprint(f\"平均分:{avg:.2f}\")\n",[103,164927,164928,164936,164940,164950,164962,164966,164981],{"__ignoreMap":25},[106,164929,164930,164932,164934],{"class":108,"line":109},[106,164931,157245],{"class":116},[106,164933,162],{"class":112},[106,164935,47327],{"class":165},[106,164937,164938],{"class":108,"line":28},[106,164939,2392],{"emptyLinePlaceholder":33},[106,164941,164942,164944,164946,164948],{"class":108,"line":1172},[106,164943,3017],{"class":112},[106,164945,152122],{"class":116},[106,164947,26037],{"class":112},[106,164949,152127],{"class":116},[106,164951,164952,164954,164956,164958,164960],{"class":108,"line":1187},[106,164953,159292],{"class":116},[106,164955,9470],{"class":112},[106,164957,152134],{"class":116},[106,164959,151457],{"class":221},[106,164961,33240],{"class":116},[106,164963,164964],{"class":108,"line":1193},[106,164965,2392],{"emptyLinePlaceholder":33},[106,164967,164968,164970,164972,164974,164976,164978],{"class":108,"line":1207},[106,164969,163759],{"class":116},[106,164971,162],{"class":112},[106,164973,163764],{"class":116},[106,164975,701],{"class":112},[106,164977,7324],{"class":165},[106,164979,164980],{"class":116},"(students)\n",[106,164982,164983,164985,164987,164989,164991,164993,164995,164997,164999,165001],{"class":108,"line":1213},[106,164984,30409],{"class":165},[106,164986,117],{"class":116},[106,164988,169],{"class":112},[106,164990,163782],{"class":221},[106,164992,1013],{"class":165},[106,164994,163787],{"class":116},[106,164996,157144],{"class":112},[106,164998,1063],{"class":165},[106,165000,368],{"class":221},[106,165002,123],{"class":116},[14,165004,165005],{},"查找学生：",[97,165007,165009],{"className":30372,"code":165008,"language":30374,"meta":25,"style":25},"target = input(\"请输入学生姓名:\")\n\nfor student in students:\n    if student[\"name\"] == target:\n        print(student)\n        break\nelse:\n    print(\"没有找到\")\n",[103,165010,165011,165026,165030,165040,165054,165060,165064,165070],{"__ignoreMap":25},[106,165012,165013,165015,165017,165019,165021,165024],{"class":108,"line":109},[106,165014,111563],{"class":116},[106,165016,162],{"class":112},[106,165018,60599],{"class":165},[106,165020,117],{"class":116},[106,165022,165023],{"class":221},"\"请输入学生姓名:\"",[106,165025,123],{"class":116},[106,165027,165028],{"class":108,"line":28},[106,165029,2392],{"emptyLinePlaceholder":33},[106,165031,165032,165034,165036,165038],{"class":108,"line":1172},[106,165033,3017],{"class":112},[106,165035,152122],{"class":116},[106,165037,26037],{"class":112},[106,165039,152127],{"class":116},[106,165041,165042,165044,165046,165048,165050,165052],{"class":108,"line":1187},[106,165043,3093],{"class":112},[106,165045,152134],{"class":116},[106,165047,62673],{"class":221},[106,165049,4435],{"class":116},[106,165051,2941],{"class":112},[106,165053,160417],{"class":116},[106,165055,165056,165058],{"class":108,"line":1193},[106,165057,32445],{"class":165},[106,165059,150027],{"class":116},[106,165061,165062],{"class":108,"line":1207},[106,165063,31621],{"class":112},[106,165065,165066,165068],{"class":108,"line":1213},[106,165067,1693],{"class":112},[106,165069,3731],{"class":116},[106,165071,165072,165074,165076,165079],{"class":108,"line":1304},[106,165073,31293],{"class":165},[106,165075,117],{"class":116},[106,165077,165078],{"class":221},"\"没有找到\"",[106,165080,123],{"class":116},[48,165082,165084],{"id":165083},"_613-容器通用操作","6.13 容器通用操作",[14,165086,165087],{},"长度：",[97,165089,165091],{"className":30372,"code":165090,"language":30374,"meta":25,"style":25},"len([1, 2, 3])\nlen(\"abc\")\nlen({\"name\": \"小明\"})\n",[103,165092,165093,165112,165122],{"__ignoreMap":25},[106,165094,165095,165097,165100,165102,165104,165106,165108,165110],{"class":108,"line":109},[106,165096,7351],{"class":165},[106,165098,165099],{"class":116},"([",[106,165101,334],{"class":165},[106,165103,12428],{"class":116},[106,165105,194],{"class":165},[106,165107,12428],{"class":116},[106,165109,188],{"class":165},[106,165111,4649],{"class":116},[106,165113,165114,165116,165118,165120],{"class":108,"line":28},[106,165115,7351],{"class":165},[106,165117,117],{"class":116},[106,165119,155865],{"class":221},[106,165121,123],{"class":116},[106,165123,165124,165126,165129,165131,165133,165135],{"class":108,"line":1172},[106,165125,7351],{"class":165},[106,165127,165128],{"class":116},"({",[106,165130,62673],{"class":221},[106,165132,51431],{"class":116},[106,165134,149873],{"class":221},[106,165136,165137],{"class":116},"})\n",[14,165139,165140],{},"最大最小：",[97,165142,165144],{"className":30372,"code":165143,"language":30374,"meta":25,"style":25},"max([1, 2, 3])\nmin([1, 2, 3])\n",[103,165145,165146,165164],{"__ignoreMap":25},[106,165147,165148,165150,165152,165154,165156,165158,165160,165162],{"class":108,"line":109},[106,165149,6008],{"class":165},[106,165151,165099],{"class":116},[106,165153,334],{"class":165},[106,165155,12428],{"class":116},[106,165157,194],{"class":165},[106,165159,12428],{"class":116},[106,165161,188],{"class":165},[106,165163,4649],{"class":116},[106,165165,165166,165169,165171,165173,165175,165177,165179,165181],{"class":108,"line":28},[106,165167,165168],{"class":165},"min",[106,165170,165099],{"class":116},[106,165172,334],{"class":165},[106,165174,12428],{"class":116},[106,165176,194],{"class":165},[106,165178,12428],{"class":116},[106,165180,188],{"class":165},[106,165182,4649],{"class":116},[14,165184,165185],{},"求和：",[97,165187,165189],{"className":30372,"code":165188,"language":30374,"meta":25,"style":25},"sum([1, 2, 3])\n",[103,165190,165191],{"__ignoreMap":25},[106,165192,165193,165196,165198,165200,165202,165204,165206,165208],{"class":108,"line":109},[106,165194,165195],{"class":165},"sum",[106,165197,165099],{"class":116},[106,165199,334],{"class":165},[106,165201,12428],{"class":116},[106,165203,194],{"class":165},[106,165205,12428],{"class":116},[106,165207,188],{"class":165},[106,165209,4649],{"class":116},[14,165211,163456],{},[97,165213,165215],{"className":30372,"code":165214,"language":30374,"meta":25,"style":25},"sorted([3, 1, 2])\n",[103,165216,165217],{"__ignoreMap":25},[106,165218,165219,165222,165224,165226,165228,165230,165232,165234],{"class":108,"line":109},[106,165220,165221],{"class":165},"sorted",[106,165223,165099],{"class":116},[106,165225,188],{"class":165},[106,165227,12428],{"class":116},[106,165229,334],{"class":165},[106,165231,12428],{"class":116},[106,165233,194],{"class":165},[106,165235,4649],{"class":116},[14,165237,165238],{},"类型转换：",[97,165240,165242],{"className":30372,"code":165241,"language":30374,"meta":25,"style":25},"list(\"abc\")\ntuple([1, 2, 3])\nset([1, 1, 2, 3])\n",[103,165243,165244,165254,165272],{"__ignoreMap":25},[106,165245,165246,165248,165250,165252],{"class":108,"line":109},[106,165247,154055],{"class":165},[106,165249,117],{"class":116},[106,165251,155865],{"class":221},[106,165253,123],{"class":116},[106,165255,165256,165258,165260,165262,165264,165266,165268,165270],{"class":108,"line":28},[106,165257,155250],{"class":165},[106,165259,165099],{"class":116},[106,165261,334],{"class":165},[106,165263,12428],{"class":116},[106,165265,194],{"class":165},[106,165267,12428],{"class":116},[106,165269,188],{"class":165},[106,165271,4649],{"class":116},[106,165273,165274,165276,165278,165280,165282,165284,165286,165288,165290,165292],{"class":108,"line":1172},[106,165275,155275],{"class":165},[106,165277,165099],{"class":116},[106,165279,334],{"class":165},[106,165281,12428],{"class":116},[106,165283,334],{"class":165},[106,165285,12428],{"class":116},[106,165287,194],{"class":165},[106,165289,12428],{"class":116},[106,165291,188],{"class":165},[106,165293,4649],{"class":116},[14,165295,165296],{},"成员判断：",[97,165298,165300],{"className":30372,"code":165299,"language":30374,"meta":25,"style":25},"print(\"a\" in \"abc\")\nprint(1 in [1, 2, 3])\nprint(\"name\" in {\"name\": \"小明\"})\n",[103,165301,165302,165319,165343],{"__ignoreMap":25},[106,165303,165304,165306,165308,165311,165314,165317],{"class":108,"line":109},[106,165305,30409],{"class":165},[106,165307,117],{"class":116},[106,165309,165310],{"class":221},"\"a\"",[106,165312,165313],{"class":112}," in",[106,165315,165316],{"class":221}," \"abc\"",[106,165318,123],{"class":116},[106,165320,165321,165323,165325,165327,165329,165331,165333,165335,165337,165339,165341],{"class":108,"line":28},[106,165322,30409],{"class":165},[106,165324,117],{"class":116},[106,165326,334],{"class":165},[106,165328,165313],{"class":112},[106,165330,52220],{"class":116},[106,165332,334],{"class":165},[106,165334,12428],{"class":116},[106,165336,194],{"class":165},[106,165338,12428],{"class":116},[106,165340,188],{"class":165},[106,165342,4649],{"class":116},[106,165344,165345,165347,165349,165351,165353,165355,165357,165359,165361],{"class":108,"line":1172},[106,165346,30409],{"class":165},[106,165348,117],{"class":116},[106,165350,62673],{"class":221},[106,165352,165313],{"class":112},[106,165354,4440],{"class":116},[106,165356,62673],{"class":221},[106,165358,51431],{"class":116},[106,165360,149873],{"class":221},[106,165362,165137],{"class":116},[48,165364,165366],{"id":165365},"_614-推导式","6.14 推导式",[14,165368,165369],{},"推导式用于快速生成容器。",[14,165371,165372],{},"列表推导式：",[97,165374,165376],{"className":30372,"code":165375,"language":30374,"meta":25,"style":25},"nums = [i for i in range(1, 6)]\nprint(nums)\n",[103,165377,165378,165405],{"__ignoreMap":25},[106,165379,165380,165382,165384,165387,165389,165391,165393,165395,165397,165399,165401,165403],{"class":108,"line":109},[106,165381,164085],{"class":116},[106,165383,162],{"class":112},[106,165385,165386],{"class":116}," [i ",[106,165388,3017],{"class":112},[106,165390,9431],{"class":116},[106,165392,26037],{"class":112},[106,165394,32437],{"class":165},[106,165396,117],{"class":116},[106,165398,334],{"class":165},[106,165400,12428],{"class":116},[106,165402,461],{"class":165},[106,165404,97285],{"class":116},[106,165406,165407,165409],{"class":108,"line":28},[106,165408,30409],{"class":165},[106,165410,164301],{"class":116},[14,165412,165413],{},"带条件：",[97,165415,165417],{"className":30372,"code":165416,"language":30374,"meta":25,"style":25},"even_nums = [i for i in range(1, 101) if i % 2 == 0]\nprint(even_nums)\n",[103,165418,165419,165460],{"__ignoreMap":25},[106,165420,165421,165424,165426,165428,165430,165432,165434,165436,165438,165440,165442,165444,165446,165448,165450,165452,165454,165456,165458],{"class":108,"line":109},[106,165422,165423],{"class":116},"even_nums ",[106,165425,162],{"class":112},[106,165427,165386],{"class":116},[106,165429,3017],{"class":112},[106,165431,9431],{"class":116},[106,165433,26037],{"class":112},[106,165435,32437],{"class":165},[106,165437,117],{"class":116},[106,165439,334],{"class":165},[106,165441,12428],{"class":116},[106,165443,454],{"class":165},[106,165445,13707],{"class":116},[106,165447,1523],{"class":112},[106,165449,9431],{"class":116},[106,165451,445],{"class":112},[106,165453,14748],{"class":165},[106,165455,101544],{"class":112},[106,165457,4085],{"class":165},[106,165459,33240],{"class":116},[106,165461,165462,165464],{"class":108,"line":28},[106,165463,30409],{"class":165},[106,165465,165466],{"class":116},"(even_nums)\n",[14,165468,165469],{},"字典推导式：",[97,165471,165473],{"className":30372,"code":165472,"language":30374,"meta":25,"style":25},"squares = {i: i ** 2 for i in range(1, 6)}\nprint(squares)\n",[103,165474,165475,165509],{"__ignoreMap":25},[106,165476,165477,165480,165482,165485,165487,165489,165492,165494,165496,165498,165500,165502,165504,165506],{"class":108,"line":109},[106,165478,165479],{"class":116},"squares ",[106,165481,162],{"class":112},[106,165483,165484],{"class":116}," {i: i ",[106,165486,10654],{"class":112},[106,165488,14748],{"class":165},[106,165490,165491],{"class":112}," for",[106,165493,9431],{"class":116},[106,165495,26037],{"class":112},[106,165497,32437],{"class":165},[106,165499,117],{"class":116},[106,165501,334],{"class":165},[106,165503,12428],{"class":116},[106,165505,461],{"class":165},[106,165507,165508],{"class":116},")}\n",[106,165510,165511,165513],{"class":108,"line":28},[106,165512,30409],{"class":165},[106,165514,165515],{"class":116},"(squares)\n",[14,165517,165518],{},"集合推导式：",[97,165520,165522],{"className":30372,"code":165521,"language":30374,"meta":25,"style":25},"chars = {ch for ch in \"hello\"}\nprint(chars)\n",[103,165523,165524,165545],{"__ignoreMap":25},[106,165525,165526,165529,165531,165534,165536,165538,165540,165543],{"class":108,"line":109},[106,165527,165528],{"class":116},"chars ",[106,165530,162],{"class":112},[106,165532,165533],{"class":116}," {ch ",[106,165535,3017],{"class":112},[106,165537,159677],{"class":116},[106,165539,26037],{"class":112},[106,165541,165542],{"class":221}," \"hello\"",[106,165544,1557],{"class":116},[106,165546,165547,165549],{"class":108,"line":28},[106,165548,30409],{"class":165},[106,165550,165551],{"class":116},"(chars)\n",[14,165553,165554],{},"推导式适合简单逻辑，复杂逻辑还是写普通循环。",[48,165556,165558],{"id":165557},"_615-小案例学生成绩统计","6.15 小案例：学生成绩统计",[97,165560,165562],{"className":30372,"code":165561,"language":30374,"meta":25,"style":25},"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",[103,165563,165564,165572,165592,165612,165632,165652,165656,165660,165668,165682,165691,165695,165705,165717,165721,165741,165750,165754,165770,165775,165779,165793,165797,165819,165855],{"__ignoreMap":25},[106,165565,165566,165568,165570],{"class":108,"line":109},[106,165567,159701],{"class":116},[106,165569,162],{"class":112},[106,165571,55441],{"class":116},[106,165573,165574,165576,165578,165580,165582,165584,165586,165588,165590],{"class":108,"line":28},[106,165575,148370],{"class":116},[106,165577,62673],{"class":221},[106,165579,51431],{"class":116},[106,165581,149873],{"class":221},[106,165583,12428],{"class":116},[106,165585,151457],{"class":221},[106,165587,51431],{"class":116},[106,165589,1106],{"class":165},[106,165591,4922],{"class":116},[106,165593,165594,165596,165598,165600,165602,165604,165606,165608,165610],{"class":108,"line":1172},[106,165595,148370],{"class":116},[106,165597,62673],{"class":221},[106,165599,51431],{"class":116},[106,165601,150921],{"class":221},[106,165603,12428],{"class":116},[106,165605,151457],{"class":221},[106,165607,51431],{"class":116},[106,165609,928],{"class":165},[106,165611,4922],{"class":116},[106,165613,165614,165616,165618,165620,165622,165624,165626,165628,165630],{"class":108,"line":1187},[106,165615,148370],{"class":116},[106,165617,62673],{"class":221},[106,165619,51431],{"class":116},[106,165621,159716],{"class":221},[106,165623,12428],{"class":116},[106,165625,151457],{"class":221},[106,165627,51431],{"class":116},[106,165629,523],{"class":165},[106,165631,4922],{"class":116},[106,165633,165634,165636,165638,165640,165642,165644,165646,165648,165650],{"class":108,"line":1193},[106,165635,148370],{"class":116},[106,165637,62673],{"class":221},[106,165639,51431],{"class":116},[106,165641,163295],{"class":221},[106,165643,12428],{"class":116},[106,165645,151457],{"class":221},[106,165647,51431],{"class":116},[106,165649,999],{"class":165},[106,165651,4922],{"class":116},[106,165653,165654],{"class":108,"line":1207},[106,165655,33240],{"class":116},[106,165657,165658],{"class":108,"line":1213},[106,165659,2392],{"emptyLinePlaceholder":33},[106,165661,165662,165664,165666],{"class":108,"line":1304},[106,165663,157245],{"class":116},[106,165665,162],{"class":112},[106,165667,47327],{"class":165},[106,165669,165670,165673,165675,165678,165680],{"class":108,"line":1310},[106,165671,165672],{"class":116},"max_student ",[106,165674,162],{"class":112},[106,165676,165677],{"class":116}," students[",[106,165679,308],{"class":165},[106,165681,33240],{"class":116},[106,165683,165684,165687,165689],{"class":108,"line":1322},[106,165685,165686],{"class":116},"passed ",[106,165688,162],{"class":112},[106,165690,51832],{"class":116},[106,165692,165693],{"class":108,"line":1604},[106,165694,2392],{"emptyLinePlaceholder":33},[106,165696,165697,165699,165701,165703],{"class":108,"line":1609},[106,165698,3017],{"class":112},[106,165700,152122],{"class":116},[106,165702,26037],{"class":112},[106,165704,152127],{"class":116},[106,165706,165707,165709,165711,165713,165715],{"class":108,"line":1615},[106,165708,159292],{"class":116},[106,165710,9470],{"class":112},[106,165712,152134],{"class":116},[106,165714,151457],{"class":221},[106,165716,33240],{"class":116},[106,165718,165719],{"class":108,"line":1620},[106,165720,2392],{"emptyLinePlaceholder":33},[106,165722,165723,165725,165727,165729,165731,165733,165736,165738],{"class":108,"line":1634},[106,165724,3093],{"class":112},[106,165726,152134],{"class":116},[106,165728,151457],{"class":221},[106,165730,4435],{"class":116},[106,165732,1077],{"class":112},[106,165734,165735],{"class":116}," max_student[",[106,165737,151457],{"class":221},[106,165739,165740],{"class":116},"]:\n",[106,165742,165743,165746,165748],{"class":108,"line":1639},[106,165744,165745],{"class":116},"        max_student ",[106,165747,162],{"class":112},[106,165749,152150],{"class":116},[106,165751,165752],{"class":108,"line":1645},[106,165753,2392],{"emptyLinePlaceholder":33},[106,165755,165756,165758,165760,165762,165764,165766,165768],{"class":108,"line":1666},[106,165757,3093],{"class":112},[106,165759,152134],{"class":116},[106,165761,151457],{"class":221},[106,165763,4435],{"class":116},[106,165765,1702],{"class":112},[106,165767,157822],{"class":165},[106,165769,3731],{"class":116},[106,165771,165772],{"class":108,"line":1671},[106,165773,165774],{"class":116},"        passed.append(student)\n",[106,165776,165777],{"class":108,"line":1685},[106,165778,2392],{"emptyLinePlaceholder":33},[106,165780,165781,165783,165785,165787,165789,165791],{"class":108,"line":1690},[106,165782,163759],{"class":116},[106,165784,162],{"class":112},[106,165786,163764],{"class":116},[106,165788,701],{"class":112},[106,165790,7324],{"class":165},[106,165792,164980],{"class":116},[106,165794,165795],{"class":108,"line":1719},[106,165796,2392],{"emptyLinePlaceholder":33},[106,165798,165799,165801,165803,165805,165807,165809,165811,165813,165815,165817],{"class":108,"line":1724},[106,165800,30409],{"class":165},[106,165802,117],{"class":116},[106,165804,169],{"class":112},[106,165806,163782],{"class":221},[106,165808,1013],{"class":165},[106,165810,163787],{"class":116},[106,165812,157144],{"class":112},[106,165814,1063],{"class":165},[106,165816,368],{"class":221},[106,165818,123],{"class":116},[106,165820,165821,165823,165825,165827,165830,165832,165835,165837,165839,165841,165843,165845,165847,165849,165851,165853],{"class":108,"line":1741},[106,165822,30409],{"class":165},[106,165824,117],{"class":116},[106,165826,169],{"class":112},[106,165828,165829],{"class":221},"\"最高分学生:",[106,165831,1013],{"class":165},[106,165833,165834],{"class":116},"max_student[",[106,165836,152867],{"class":221},[106,165838,1057],{"class":116},[106,165840,1063],{"class":165},[106,165842,4440],{"class":165},[106,165844,165834],{"class":116},[106,165846,152905],{"class":221},[106,165848,1057],{"class":116},[106,165850,1063],{"class":165},[106,165852,368],{"class":221},[106,165854,123],{"class":116},[106,165856,165857,165859,165861,165863,165866,165869,165872,165874,165876],{"class":108,"line":1746},[106,165858,30409],{"class":165},[106,165860,117],{"class":116},[106,165862,169],{"class":112},[106,165864,165865],{"class":221},"\"及格人数:",[106,165867,165868],{"class":165},"{len",[106,165870,165871],{"class":116},"(passed)",[106,165873,1063],{"class":165},[106,165875,368],{"class":221},[106,165877,123],{"class":116},[48,165879,165881],{"id":165880},"_616-易错点","6.16 易错点",[60,165883,165884,165887,165890,165893,165899,165908],{},[63,165885,165886],{},"列表可变，元组和字符串不可变。",[63,165888,165889],{},"切片结束位置不包含。",[63,165891,165892],{},"字典通过 key 取值，不是通过索引。",[63,165894,165895,165896,28379],{},"空集合要用 ",[103,165897,165898],{},"set()",[63,165900,104351,165901,165904,165905,28379],{},[103,165902,165903],{},"student[\"key\"]"," 前要确认 key 存在，或用 ",[103,165906,165907],{},"get()",[63,165909,165910],{},"嵌套容器要先看清楚每一层是什么类型。",[48,165912,165914],{"id":165913},"_617-本章练习","6.17 本章练习",[60,165916,165917,165920,165923,165926,165929],{},[63,165918,165919],{},"定义列表保存 5 个成绩，计算最高分、最低分、平均分。",[63,165921,165922],{},"输入一句话，统计每个字符出现次数。",[63,165924,165925],{},"使用集合去除列表中的重复元素。",[63,165927,165928],{},"使用字典保存一个学生的信息，并实现修改成绩。",[63,165930,165931],{},"使用列表字典结构保存多个学生，实现按姓名查询。",[5119,165933,165934],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":28,"depth":28,"links":165936},[165937,165938,165939,165940,165941,165942,165943,165944,165945,165946,165947,165948,165949,165950,165951,165952,165953],{"id":162917,"depth":28,"text":162918},{"id":163034,"depth":28,"text":163035},{"id":163124,"depth":28,"text":163125},{"id":163248,"depth":28,"text":163249},{"id":163611,"depth":28,"text":163612},{"id":163798,"depth":28,"text":163799},{"id":163917,"depth":28,"text":163918},{"id":164059,"depth":28,"text":164060},{"id":164246,"depth":28,"text":164247},{"id":164490,"depth":28,"text":164491},{"id":164700,"depth":28,"text":164701},{"id":164785,"depth":28,"text":164786},{"id":165083,"depth":28,"text":165084},{"id":165365,"depth":28,"text":165366},{"id":165557,"depth":28,"text":165558},{"id":165880,"depth":28,"text":165881},{"id":165913,"depth":28,"text":165914},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch6",{"title":162909,"description":30},"wiki\u002F2024-10-10-python教程\u002Fch6-数据容器","T8eCc8Q5mua2_dsYsMoauSCMOs5j-QG3lppjk0eGwro",{"id":165960,"title":165961,"body":165962,"description":30,"extension":31,"meta":168134,"navigation":33,"path":168135,"seo":168136,"stem":168137,"__hash__":168138},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch7-函数进阶.md","7. 函数进阶",{"type":7,"value":165963,"toc":168109},[165964,165967,165971,165974,166054,166057,166078,166081,166085,166088,166150,166153,166170,166174,166177,166222,166224,166232,166236,166239,166321,166324,166327,166352,166355,166378,166382,166385,166387,166449,166452,166454,166505,166509,166513,166519,166624,166628,166634,166705,166709,166712,166780,166783,166863,166867,166873,166909,166912,166915,167025,167031,167035,167038,167110,167113,167117,167121,167126,167188,167192,167197,167265,167269,167274,167390,167394,167397,167477,167480,167484,167487,167591,167593,167608,167611,167615,167753,167761,167765,167767,167778,167780,168038,168042,168074,168078,168106],[10,165965,165961],{"id":165966},"_7-函数进阶",[48,165968,165970],{"id":165969},"_71-多返回值","7.1 多返回值",[14,165972,165973],{},"Python 函数可以返回多个值，本质上返回的是元组。",[97,165975,165977],{"className":30372,"code":165976,"language":30374,"meta":25,"style":25},"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",[103,165978,165979,165988,165996,166004,166013,166020,166024,166028,166037,166043],{"__ignoreMap":25},[106,165980,165981,165983,165986],{"class":108,"line":109},[106,165982,31941],{"class":112},[106,165984,165985],{"class":1955}," get_info",[106,165987,31947],{"class":116},[106,165989,165990,165992,165994],{"class":108,"line":28},[106,165991,152355],{"class":116},[106,165993,162],{"class":112},[106,165995,149338],{"class":221},[106,165997,165998,166000,166002],{"class":108,"line":1172},[106,165999,152371],{"class":116},[106,166001,162],{"class":112},[106,166003,146536],{"class":165},[106,166005,166006,166008,166010],{"class":108,"line":1187},[106,166007,152386],{"class":116},[106,166009,162],{"class":112},[106,166011,166012],{"class":165}," 95\n",[106,166014,166015,166017],{"class":108,"line":1193},[106,166016,4082],{"class":112},[106,166018,166019],{"class":116}," name, age, score\n",[106,166021,166022],{"class":108,"line":1207},[106,166023,2392],{"emptyLinePlaceholder":33},[106,166025,166026],{"class":108,"line":1213},[106,166027,2392],{"emptyLinePlaceholder":33},[106,166029,166030,166032,166034],{"class":108,"line":1304},[106,166031,161291],{"class":116},[106,166033,162],{"class":112},[106,166035,166036],{"class":116}," get_info()\n",[106,166038,166039,166041],{"class":108,"line":1310},[106,166040,30409],{"class":165},[106,166042,76579],{"class":116},[106,166044,166045,166047,166049,166051],{"class":108,"line":1322},[106,166046,30409],{"class":165},[106,166048,117],{"class":116},[106,166050,103092],{"class":165},[106,166052,166053],{"class":116},"(result))\n",[14,166055,166056],{},"可以直接解包：",[97,166058,166060],{"className":30372,"code":166059,"language":30374,"meta":25,"style":25},"name, age, score = get_info()\nprint(name, age, score)\n",[103,166061,166062,166071],{"__ignoreMap":25},[106,166063,166064,166067,166069],{"class":108,"line":109},[106,166065,166066],{"class":116},"name, age, score ",[106,166068,162],{"class":112},[106,166070,166036],{"class":116},[106,166072,166073,166075],{"class":108,"line":28},[106,166074,30409],{"class":165},[106,166076,166077],{"class":116},"(name, age, score)\n",[14,166079,166080],{},"返回多个值适合函数需要同时给出多个结果时使用。",[48,166082,166084],{"id":166083},"_72-位置参数","7.2 位置参数",[14,166086,166087],{},"位置参数按顺序传递。",[97,166089,166091],{"className":30372,"code":166090,"language":30374,"meta":25,"style":25},"def introduce(name, age):\n    print(f\"我叫{name}，今年{age}岁\")\n\n\nintroduce(\"小明\", 18)\n",[103,166092,166093,166101,166129,166133,166137],{"__ignoreMap":25},[106,166094,166095,166097,166099],{"class":108,"line":109},[106,166096,31941],{"class":112},[106,166098,149357],{"class":1955},[106,166100,149360],{"class":116},[106,166102,166103,166105,166107,166109,166111,166113,166115,166117,166119,166121,166123,166125,166127],{"class":108,"line":28},[106,166104,31293],{"class":165},[106,166106,117],{"class":116},[106,166108,169],{"class":112},[106,166110,149371],{"class":221},[106,166112,1013],{"class":165},[106,166114,79804],{"class":116},[106,166116,1063],{"class":165},[106,166118,149380],{"class":221},[106,166120,1013],{"class":165},[106,166122,70215],{"class":116},[106,166124,1063],{"class":165},[106,166126,149389],{"class":221},[106,166128,123],{"class":116},[106,166130,166131],{"class":108,"line":1172},[106,166132,2392],{"emptyLinePlaceholder":33},[106,166134,166135],{"class":108,"line":1187},[106,166136,2392],{"emptyLinePlaceholder":33},[106,166138,166139,166142,166144,166146,166148],{"class":108,"line":1193},[106,166140,166141],{"class":116},"introduce(",[106,166143,149873],{"class":221},[106,166145,12428],{"class":116},[106,166147,767],{"class":165},[106,166149,123],{"class":116},[14,166151,166152],{},"顺序错了就会得到错误含义：",[97,166154,166156],{"className":30372,"code":166155,"language":30374,"meta":25,"style":25},"introduce(18, \"小明\")\n",[103,166157,166158],{"__ignoreMap":25},[106,166159,166160,166162,166164,166166,166168],{"class":108,"line":109},[106,166161,166141],{"class":116},[106,166163,767],{"class":165},[106,166165,12428],{"class":116},[106,166167,149873],{"class":221},[106,166169,123],{"class":116},[48,166171,166173],{"id":166172},"_73-关键字参数","7.3 关键字参数",[14,166175,166176],{},"关键字参数按参数名传递。",[97,166178,166180],{"className":30372,"code":166179,"language":30374,"meta":25,"style":25},"introduce(name=\"小明\", age=18)\nintroduce(age=18, name=\"小明\")\n",[103,166181,166182,166202],{"__ignoreMap":25},[106,166183,166184,166186,166188,166190,166192,166194,166196,166198,166200],{"class":108,"line":109},[106,166185,166141],{"class":116},[106,166187,79804],{"class":5209},[106,166189,162],{"class":112},[106,166191,149873],{"class":221},[106,166193,12428],{"class":116},[106,166195,70215],{"class":5209},[106,166197,162],{"class":112},[106,166199,767],{"class":165},[106,166201,123],{"class":116},[106,166203,166204,166206,166208,166210,166212,166214,166216,166218,166220],{"class":108,"line":28},[106,166205,166141],{"class":116},[106,166207,70215],{"class":5209},[106,166209,162],{"class":112},[106,166211,767],{"class":165},[106,166213,12428],{"class":116},[106,166215,79804],{"class":5209},[106,166217,162],{"class":112},[106,166219,149873],{"class":221},[106,166221,123],{"class":116},[14,166223,117919],{},[60,166225,166226,166229],{},[63,166227,166228],{},"顺序不容易错。",[63,166230,166231],{},"调用时可读性更强。",[48,166233,166235],{"id":166234},"_74-默认参数","7.4 默认参数",[14,166237,166238],{},"默认参数给参数设置默认值。",[97,166240,166242],{"className":30372,"code":166241,"language":30374,"meta":25,"style":25},"def connect(host, port=3306):\n    print(f\"连接{host}:{port}\")\n\n\nconnect(\"localhost\")\nconnect(\"localhost\", 6379)\n",[103,166243,166244,166260,166290,166294,166298,166308],{"__ignoreMap":25},[106,166245,166246,166248,166250,166253,166255,166258],{"class":108,"line":109},[106,166247,31941],{"class":112},[106,166249,122078],{"class":1955},[106,166251,166252],{"class":116},"(host, port",[106,166254,162],{"class":112},[106,166256,166257],{"class":165},"3306",[106,166259,30780],{"class":116},[106,166261,166262,166264,166266,166268,166271,166273,166275,166277,166279,166281,166284,166286,166288],{"class":108,"line":28},[106,166263,31293],{"class":165},[106,166265,117],{"class":116},[106,166267,169],{"class":112},[106,166269,166270],{"class":221},"\"连接",[106,166272,1013],{"class":165},[106,166274,27389],{"class":116},[106,166276,1063],{"class":165},[106,166278,976],{"class":221},[106,166280,1013],{"class":165},[106,166282,166283],{"class":116},"port",[106,166285,1063],{"class":165},[106,166287,368],{"class":221},[106,166289,123],{"class":116},[106,166291,166292],{"class":108,"line":1172},[106,166293,2392],{"emptyLinePlaceholder":33},[106,166295,166296],{"class":108,"line":1187},[106,166297,2392],{"emptyLinePlaceholder":33},[106,166299,166300,166303,166306],{"class":108,"line":1193},[106,166301,166302],{"class":116},"connect(",[106,166304,166305],{"class":221},"\"localhost\"",[106,166307,123],{"class":116},[106,166309,166310,166312,166314,166316,166319],{"class":108,"line":1207},[106,166311,166302],{"class":116},[106,166313,166305],{"class":221},[106,166315,12428],{"class":116},[106,166317,166318],{"class":165},"6379",[106,166320,123],{"class":116},[14,166322,166323],{},"注意：默认参数必须放在非默认参数后面。",[14,166325,166326],{},"错误：",[97,166328,166330],{"className":30372,"code":166329,"language":30374,"meta":25,"style":25},"def connect(port=3306, host):\n    pass\n",[103,166331,166332,166348],{"__ignoreMap":25},[106,166333,166334,166336,166338,166341,166343,166345],{"class":108,"line":109},[106,166335,31941],{"class":112},[106,166337,122078],{"class":1955},[106,166339,166340],{"class":116},"(port",[106,166342,162],{"class":112},[106,166344,166257],{"class":165},[106,166346,166347],{"class":116},", host):\n",[106,166349,166350],{"class":108,"line":28},[106,166351,149522],{"class":112},[14,166353,166354],{},"正确：",[97,166356,166358],{"className":30372,"code":166357,"language":30374,"meta":25,"style":25},"def connect(host, port=3306):\n    pass\n",[103,166359,166360,166374],{"__ignoreMap":25},[106,166361,166362,166364,166366,166368,166370,166372],{"class":108,"line":109},[106,166363,31941],{"class":112},[106,166365,122078],{"class":1955},[106,166367,166252],{"class":116},[106,166369,162],{"class":112},[106,166371,166257],{"class":165},[106,166373,30780],{"class":116},[106,166375,166376],{"class":108,"line":28},[106,166377,149522],{"class":112},[48,166379,166381],{"id":166380},"_75-默认参数的坑","7.5 默认参数的坑",[14,166383,166384],{},"不要使用可变对象作为默认参数。",[14,166386,157608],{},[97,166388,166390],{"className":30372,"code":166389,"language":30374,"meta":25,"style":25},"def add_item(item, items=[]):\n    items.append(item)\n    return items\n\n\nprint(add_item(\"a\"))\nprint(add_item(\"b\"))\n",[103,166391,166392,166407,166412,166419,166423,166427,166438],{"__ignoreMap":25},[106,166393,166394,166396,166399,166402,166404],{"class":108,"line":109},[106,166395,31941],{"class":112},[106,166397,166398],{"class":1955}," add_item",[106,166400,166401],{"class":116},"(item, items",[106,166403,162],{"class":112},[106,166405,166406],{"class":116},"[]):\n",[106,166408,166409],{"class":108,"line":28},[106,166410,166411],{"class":116},"    items.append(item)\n",[106,166413,166414,166416],{"class":108,"line":1172},[106,166415,4082],{"class":112},[106,166417,166418],{"class":116}," items\n",[106,166420,166421],{"class":108,"line":1187},[106,166422,2392],{"emptyLinePlaceholder":33},[106,166424,166425],{"class":108,"line":1193},[106,166426,2392],{"emptyLinePlaceholder":33},[106,166428,166429,166431,166434,166436],{"class":108,"line":1207},[106,166430,30409],{"class":165},[106,166432,166433],{"class":116},"(add_item(",[106,166435,165310],{"class":221},[106,166437,30491],{"class":116},[106,166439,166440,166442,166444,166447],{"class":108,"line":1213},[106,166441,30409],{"class":165},[106,166443,166433],{"class":116},[106,166445,166446],{"class":221},"\"b\"",[106,166448,30491],{"class":116},[14,166450,166451],{},"第二次调用会复用第一次的列表。",[14,166453,155873],{},[97,166455,166457],{"className":30372,"code":166456,"language":30374,"meta":25,"style":25},"def add_item(item, items=None):\n    if items is None:\n        items = []\n    items.append(item)\n    return items\n",[103,166458,166459,166473,166486,166495,166499],{"__ignoreMap":25},[106,166460,166461,166463,166465,166467,166469,166471],{"class":108,"line":109},[106,166462,31941],{"class":112},[106,166464,166398],{"class":1955},[106,166466,166401],{"class":116},[106,166468,162],{"class":112},[106,166470,95671],{"class":165},[106,166472,30780],{"class":116},[106,166474,166475,166477,166480,166482,166484],{"class":108,"line":28},[106,166476,3093],{"class":112},[106,166478,166479],{"class":116}," items ",[106,166481,38921],{"class":112},[106,166483,38927],{"class":165},[106,166485,3731],{"class":116},[106,166487,166488,166491,166493],{"class":108,"line":1172},[106,166489,166490],{"class":116},"        items ",[106,166492,162],{"class":112},[106,166494,51832],{"class":116},[106,166496,166497],{"class":108,"line":1187},[106,166498,166411],{"class":116},[106,166500,166501,166503],{"class":108,"line":1193},[106,166502,4082],{"class":112},[106,166504,166418],{"class":116},[48,166506,166508],{"id":166507},"_76-不定长参数","7.6 不定长参数",[77,166510,166512],{"id":166511},"_761-args","7.6.1 *args",[14,166514,166515,166518],{},[103,166516,166517],{},"*args"," 接收任意数量的位置参数，得到元组。",[97,166520,166522],{"className":30372,"code":166521,"language":30374,"meta":25,"style":25},"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",[103,166523,166524,166537,166545,166556,166565,166571,166575,166579,166598],{"__ignoreMap":25},[106,166525,166526,166528,166530,166532,166534],{"class":108,"line":109},[106,166527,31941],{"class":112},[106,166529,5202],{"class":1955},[106,166531,117],{"class":116},[106,166533,572],{"class":112},[106,166535,166536],{"class":116},"args):\n",[106,166538,166539,166541,166543],{"class":108,"line":28},[106,166540,159292],{"class":116},[106,166542,162],{"class":112},[106,166544,47327],{"class":165},[106,166546,166547,166549,166551,166553],{"class":108,"line":1172},[106,166548,3193],{"class":112},[106,166550,156165],{"class":116},[106,166552,26037],{"class":112},[106,166554,166555],{"class":116}," args:\n",[106,166557,166558,166560,166562],{"class":108,"line":1187},[106,166559,159967],{"class":116},[106,166561,9470],{"class":112},[106,166563,166564],{"class":116}," num\n",[106,166566,166567,166569],{"class":108,"line":1193},[106,166568,4082],{"class":112},[106,166570,162272],{"class":116},[106,166572,166573],{"class":108,"line":1207},[106,166574,2392],{"emptyLinePlaceholder":33},[106,166576,166577],{"class":108,"line":1213},[106,166578,2392],{"emptyLinePlaceholder":33},[106,166580,166581,166583,166586,166588,166590,166592,166594,166596],{"class":108,"line":1304},[106,166582,30409],{"class":165},[106,166584,166585],{"class":116},"(add(",[106,166587,334],{"class":165},[106,166589,12428],{"class":116},[106,166591,194],{"class":165},[106,166593,12428],{"class":116},[106,166595,188],{"class":165},[106,166597,30491],{"class":116},[106,166599,166600,166602,166604,166606,166608,166610,166612,166614,166616,166618,166620,166622],{"class":108,"line":1310},[106,166601,30409],{"class":165},[106,166603,166585],{"class":116},[106,166605,334],{"class":165},[106,166607,12428],{"class":116},[106,166609,194],{"class":165},[106,166611,12428],{"class":116},[106,166613,188],{"class":165},[106,166615,12428],{"class":116},[106,166617,410],{"class":165},[106,166619,12428],{"class":116},[106,166621,436],{"class":165},[106,166623,30491],{"class":116},[77,166625,166627],{"id":166626},"_762-kwargs","7.6.2 **kwargs",[14,166629,166630,166633],{},[103,166631,166632],{},"**kwargs"," 接收任意数量的关键字参数，得到字典。",[97,166635,166637],{"className":30372,"code":166636,"language":30374,"meta":25,"style":25},"def print_info(**kwargs):\n    for key, value in kwargs.items():\n        print(key, value)\n\n\nprint_info(name=\"小明\", age=18, city=\"北京\")\n",[103,166638,166639,166652,166663,166669,166673,166677],{"__ignoreMap":25},[106,166640,166641,166643,166645,166647,166649],{"class":108,"line":109},[106,166642,31941],{"class":112},[106,166644,161930],{"class":1955},[106,166646,117],{"class":116},[106,166648,10654],{"class":112},[106,166650,166651],{"class":116},"kwargs):\n",[106,166653,166654,166656,166658,166660],{"class":108,"line":28},[106,166655,3193],{"class":112},[106,166657,164770],{"class":116},[106,166659,26037],{"class":112},[106,166661,166662],{"class":116}," kwargs.items():\n",[106,166664,166665,166667],{"class":108,"line":1172},[106,166666,32445],{"class":165},[106,166668,164782],{"class":116},[106,166670,166671],{"class":108,"line":1187},[106,166672,2392],{"emptyLinePlaceholder":33},[106,166674,166675],{"class":108,"line":1193},[106,166676,2392],{"emptyLinePlaceholder":33},[106,166678,166679,166681,166683,166685,166687,166689,166691,166693,166695,166697,166699,166701,166703],{"class":108,"line":1207},[106,166680,161995],{"class":116},[106,166682,79804],{"class":5209},[106,166684,162],{"class":112},[106,166686,149873],{"class":221},[106,166688,12428],{"class":116},[106,166690,70215],{"class":5209},[106,166692,162],{"class":112},[106,166694,767],{"class":165},[106,166696,12428],{"class":116},[106,166698,70266],{"class":5209},[106,166700,162],{"class":112},[106,166702,69263],{"class":221},[106,166704,123],{"class":116},[48,166706,166708],{"id":166707},"_77-参数解包","7.7 参数解包",[14,166710,166711],{},"列表或元组解包为位置参数：",[97,166713,166715],{"className":30372,"code":166714,"language":30374,"meta":25,"style":25},"def add(a, b, c):\n    return a + b + c\n\n\nnums = [1, 2, 3]\nprint(add(*nums))\n",[103,166716,166717,166726,166741,166745,166749,166769],{"__ignoreMap":25},[106,166718,166719,166721,166723],{"class":108,"line":109},[106,166720,31941],{"class":112},[106,166722,5202],{"class":1955},[106,166724,166725],{"class":116},"(a, b, c):\n",[106,166727,166728,166730,166732,166734,166736,166738],{"class":108,"line":28},[106,166729,4082],{"class":112},[106,166731,10862],{"class":116},[106,166733,598],{"class":112},[106,166735,10875],{"class":116},[106,166737,598],{"class":112},[106,166739,166740],{"class":116}," c\n",[106,166742,166743],{"class":108,"line":1172},[106,166744,2392],{"emptyLinePlaceholder":33},[106,166746,166747],{"class":108,"line":1187},[106,166748,2392],{"emptyLinePlaceholder":33},[106,166750,166751,166753,166755,166757,166759,166761,166763,166765,166767],{"class":108,"line":1193},[106,166752,164085],{"class":116},[106,166754,162],{"class":112},[106,166756,52220],{"class":116},[106,166758,334],{"class":165},[106,166760,12428],{"class":116},[106,166762,194],{"class":165},[106,166764,12428],{"class":116},[106,166766,188],{"class":165},[106,166768,33240],{"class":116},[106,166770,166771,166773,166775,166777],{"class":108,"line":1207},[106,166772,30409],{"class":165},[106,166774,166585],{"class":116},[106,166776,572],{"class":112},[106,166778,166779],{"class":116},"nums))\n",[14,166781,166782],{},"字典解包为关键字参数：",[97,166784,166786],{"className":30372,"code":166785,"language":30374,"meta":25,"style":25},"def introduce(name, age):\n    print(f\"{name} {age}\")\n\n\ninfo = {\"name\": \"小明\", \"age\": 18}\nintroduce(**info)\n",[103,166787,166788,166796,166822,166826,166830,166854],{"__ignoreMap":25},[106,166789,166790,166792,166794],{"class":108,"line":109},[106,166791,31941],{"class":112},[106,166793,149357],{"class":1955},[106,166795,149360],{"class":116},[106,166797,166798,166800,166802,166804,166806,166808,166810,166812,166814,166816,166818,166820],{"class":108,"line":28},[106,166799,31293],{"class":165},[106,166801,117],{"class":116},[106,166803,169],{"class":112},[106,166805,368],{"class":221},[106,166807,1013],{"class":165},[106,166809,79804],{"class":116},[106,166811,1063],{"class":165},[106,166813,4440],{"class":165},[106,166815,70215],{"class":116},[106,166817,1063],{"class":165},[106,166819,368],{"class":221},[106,166821,123],{"class":116},[106,166823,166824],{"class":108,"line":1172},[106,166825,2392],{"emptyLinePlaceholder":33},[106,166827,166828],{"class":108,"line":1187},[106,166829,2392],{"emptyLinePlaceholder":33},[106,166831,166832,166834,166836,166838,166840,166842,166844,166846,166848,166850,166852],{"class":108,"line":1193},[106,166833,116299],{"class":116},[106,166835,162],{"class":112},[106,166837,4440],{"class":116},[106,166839,62673],{"class":221},[106,166841,51431],{"class":116},[106,166843,149873],{"class":221},[106,166845,12428],{"class":116},[106,166847,69118],{"class":221},[106,166849,51431],{"class":116},[106,166851,767],{"class":165},[106,166853,1557],{"class":116},[106,166855,166856,166858,166860],{"class":108,"line":1207},[106,166857,166141],{"class":116},[106,166859,10654],{"class":112},[106,166861,166862],{"class":116},"info)\n",[48,166864,166866],{"id":166865},"_78-匿名函数lambda","7.8 匿名函数lambda",[14,166868,166869,166872],{},[103,166870,166871],{},"lambda"," 用于定义简单匿名函数。",[97,166874,166876],{"className":30372,"code":166875,"language":30374,"meta":25,"style":25},"add = lambda a, b: a + b\nprint(add(1, 2))\n",[103,166877,166878,166895],{"__ignoreMap":25},[106,166879,166880,166883,166885,166888,166891,166893],{"class":108,"line":109},[106,166881,166882],{"class":116},"add ",[106,166884,162],{"class":112},[106,166886,166887],{"class":112}," lambda",[106,166889,166890],{"class":116}," a, b: a ",[106,166892,598],{"class":112},[106,166894,151089],{"class":116},[106,166896,166897,166899,166901,166903,166905,166907],{"class":108,"line":28},[106,166898,30409],{"class":165},[106,166900,166585],{"class":116},[106,166902,334],{"class":165},[106,166904,12428],{"class":116},[106,166906,194],{"class":165},[106,166908,30491],{"class":116},[14,166910,166911],{},"常和排序、过滤等函数一起使用。",[14,166913,166914],{},"按分数排序：",[97,166916,166918],{"className":30372,"code":166917,"language":30374,"meta":25,"style":25},"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",[103,166919,166920,166928,166948,166968,166988,166992,166996,167019],{"__ignoreMap":25},[106,166921,166922,166924,166926],{"class":108,"line":109},[106,166923,159701],{"class":116},[106,166925,162],{"class":112},[106,166927,55441],{"class":116},[106,166929,166930,166932,166934,166936,166938,166940,166942,166944,166946],{"class":108,"line":28},[106,166931,148370],{"class":116},[106,166933,62673],{"class":221},[106,166935,51431],{"class":116},[106,166937,149873],{"class":221},[106,166939,12428],{"class":116},[106,166941,151457],{"class":221},[106,166943,51431],{"class":116},[106,166945,1106],{"class":165},[106,166947,4922],{"class":116},[106,166949,166950,166952,166954,166956,166958,166960,166962,166964,166966],{"class":108,"line":1172},[106,166951,148370],{"class":116},[106,166953,62673],{"class":221},[106,166955,51431],{"class":116},[106,166957,150921],{"class":221},[106,166959,12428],{"class":116},[106,166961,151457],{"class":221},[106,166963,51431],{"class":116},[106,166965,928],{"class":165},[106,166967,4922],{"class":116},[106,166969,166970,166972,166974,166976,166978,166980,166982,166984,166986],{"class":108,"line":1187},[106,166971,148370],{"class":116},[106,166973,62673],{"class":221},[106,166975,51431],{"class":116},[106,166977,159716],{"class":221},[106,166979,12428],{"class":116},[106,166981,151457],{"class":221},[106,166983,51431],{"class":116},[106,166985,523],{"class":165},[106,166987,4922],{"class":116},[106,166989,166990],{"class":108,"line":1193},[106,166991,33240],{"class":116},[106,166993,166994],{"class":108,"line":1207},[106,166995,2392],{"emptyLinePlaceholder":33},[106,166997,166998,167001,167003,167005,167007,167009,167011,167013,167015,167017],{"class":108,"line":1213},[106,166999,167000],{"class":116},"students.sort(",[106,167002,153931],{"class":5209},[106,167004,153934],{"class":112},[106,167006,153937],{"class":116},[106,167008,151457],{"class":221},[106,167010,112187],{"class":116},[106,167012,163513],{"class":5209},[106,167014,162],{"class":112},[106,167016,31470],{"class":165},[106,167018,123],{"class":116},[106,167020,167021,167023],{"class":108,"line":1304},[106,167022,30409],{"class":165},[106,167024,164980],{"class":116},[14,167026,167027,167028,167030],{},"如果逻辑复杂，不要硬写 ",[103,167029,166871],{},"，定义普通函数更清晰。",[48,167032,167034],{"id":167033},"_79-函数作为参数","7.9 函数作为参数",[14,167036,167037],{},"函数可以作为参数传给另一个函数。",[97,167039,167041],{"className":30372,"code":167040,"language":30374,"meta":25,"style":25},"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",[103,167042,167043,167051,167061,167065,167069,167079,167086,167090,167094],{"__ignoreMap":25},[106,167044,167045,167047,167049],{"class":108,"line":109},[106,167046,31941],{"class":112},[106,167048,5202],{"class":1955},[106,167050,151078],{"class":116},[106,167052,167053,167055,167057,167059],{"class":108,"line":28},[106,167054,4082],{"class":112},[106,167056,10862],{"class":116},[106,167058,598],{"class":112},[106,167060,151089],{"class":116},[106,167062,167063],{"class":108,"line":1172},[106,167064,2392],{"emptyLinePlaceholder":33},[106,167066,167067],{"class":108,"line":1187},[106,167068,2392],{"emptyLinePlaceholder":33},[106,167070,167071,167073,167076],{"class":108,"line":1193},[106,167072,31941],{"class":112},[106,167074,167075],{"class":1955}," calculate",[106,167077,167078],{"class":116},"(a, b, func):\n",[106,167080,167081,167083],{"class":108,"line":1207},[106,167082,4082],{"class":112},[106,167084,167085],{"class":116}," func(a, b)\n",[106,167087,167088],{"class":108,"line":1213},[106,167089,2392],{"emptyLinePlaceholder":33},[106,167091,167092],{"class":108,"line":1304},[106,167093,2392],{"emptyLinePlaceholder":33},[106,167095,167096,167098,167101,167103,167105,167107],{"class":108,"line":1310},[106,167097,30409],{"class":165},[106,167099,167100],{"class":116},"(calculate(",[106,167102,563],{"class":165},[106,167104,12428],{"class":116},[106,167106,817],{"class":165},[106,167108,167109],{"class":116},", add))\n",[14,167111,167112],{},"这种思想在排序、回调、框架中经常出现。",[48,167114,167116],{"id":167115},"_710-mapfiltersorted","7.10 map、filter、sorted",[77,167118,167120],{"id":167119},"_7101-map","7.10.1 map",[14,167122,167123,167125],{},[103,167124,74038],{}," 对每个元素执行函数。",[97,167127,167129],{"className":30372,"code":167128,"language":30374,"meta":25,"style":25},"nums = [1, 2, 3, 4]\nresult = map(lambda x: x * 2, nums)\nprint(list(result))\n",[103,167130,167131,167155,167178],{"__ignoreMap":25},[106,167132,167133,167135,167137,167139,167141,167143,167145,167147,167149,167151,167153],{"class":108,"line":109},[106,167134,164085],{"class":116},[106,167136,162],{"class":112},[106,167138,52220],{"class":116},[106,167140,334],{"class":165},[106,167142,12428],{"class":116},[106,167144,194],{"class":165},[106,167146,12428],{"class":116},[106,167148,188],{"class":165},[106,167150,12428],{"class":116},[106,167152,410],{"class":165},[106,167154,33240],{"class":116},[106,167156,167157,167159,167161,167164,167166,167168,167171,167173,167175],{"class":108,"line":28},[106,167158,161291],{"class":116},[106,167160,162],{"class":112},[106,167162,167163],{"class":165}," map",[106,167165,117],{"class":116},[106,167167,166871],{"class":112},[106,167169,167170],{"class":116}," x: x ",[106,167172,572],{"class":112},[106,167174,14748],{"class":165},[106,167176,167177],{"class":116},", nums)\n",[106,167179,167180,167182,167184,167186],{"class":108,"line":1172},[106,167181,30409],{"class":165},[106,167183,117],{"class":116},[106,167185,154055],{"class":165},[106,167187,166053],{"class":116},[77,167189,167191],{"id":167190},"_7102-filter","7.10.2 filter",[14,167193,167194,167196],{},[103,167195,80045],{}," 保留满足条件的元素。",[97,167198,167200],{"className":30372,"code":167199,"language":30374,"meta":25,"style":25},"nums = [1, 2, 3, 4, 5]\nresult = filter(lambda x: x % 2 == 0, nums)\nprint(list(result))\n",[103,167201,167202,167230,167255],{"__ignoreMap":25},[106,167203,167204,167206,167208,167210,167212,167214,167216,167218,167220,167222,167224,167226,167228],{"class":108,"line":109},[106,167205,164085],{"class":116},[106,167207,162],{"class":112},[106,167209,52220],{"class":116},[106,167211,334],{"class":165},[106,167213,12428],{"class":116},[106,167215,194],{"class":165},[106,167217,12428],{"class":116},[106,167219,188],{"class":165},[106,167221,12428],{"class":116},[106,167223,410],{"class":165},[106,167225,12428],{"class":116},[106,167227,436],{"class":165},[106,167229,33240],{"class":116},[106,167231,167232,167234,167236,167239,167241,167243,167245,167247,167249,167251,167253],{"class":108,"line":28},[106,167233,161291],{"class":116},[106,167235,162],{"class":112},[106,167237,167238],{"class":165}," filter",[106,167240,117],{"class":116},[106,167242,166871],{"class":112},[106,167244,167170],{"class":116},[106,167246,445],{"class":112},[106,167248,14748],{"class":165},[106,167250,101544],{"class":112},[106,167252,4085],{"class":165},[106,167254,167177],{"class":116},[106,167256,167257,167259,167261,167263],{"class":108,"line":1172},[106,167258,30409],{"class":165},[106,167260,117],{"class":116},[106,167262,154055],{"class":165},[106,167264,166053],{"class":116},[77,167266,167268],{"id":167267},"_7103-sorted","7.10.3 sorted",[14,167270,167271,167273],{},[103,167272,165221],{}," 返回排序后的新列表。",[97,167275,167277],{"className":30372,"code":167276,"language":30374,"meta":25,"style":25},"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",[103,167278,167279,167287,167307,167327,167347,167351,167355,167384],{"__ignoreMap":25},[106,167280,167281,167283,167285],{"class":108,"line":109},[106,167282,159701],{"class":116},[106,167284,162],{"class":112},[106,167286,55441],{"class":116},[106,167288,167289,167291,167293,167295,167297,167299,167301,167303,167305],{"class":108,"line":28},[106,167290,148370],{"class":116},[106,167292,62673],{"class":221},[106,167294,51431],{"class":116},[106,167296,149873],{"class":221},[106,167298,12428],{"class":116},[106,167300,151457],{"class":221},[106,167302,51431],{"class":116},[106,167304,1106],{"class":165},[106,167306,4922],{"class":116},[106,167308,167309,167311,167313,167315,167317,167319,167321,167323,167325],{"class":108,"line":1172},[106,167310,148370],{"class":116},[106,167312,62673],{"class":221},[106,167314,51431],{"class":116},[106,167316,150921],{"class":221},[106,167318,12428],{"class":116},[106,167320,151457],{"class":221},[106,167322,51431],{"class":116},[106,167324,928],{"class":165},[106,167326,4922],{"class":116},[106,167328,167329,167331,167333,167335,167337,167339,167341,167343,167345],{"class":108,"line":1187},[106,167330,148370],{"class":116},[106,167332,62673],{"class":221},[106,167334,51431],{"class":116},[106,167336,159716],{"class":221},[106,167338,12428],{"class":116},[106,167340,151457],{"class":221},[106,167342,51431],{"class":116},[106,167344,523],{"class":165},[106,167346,4922],{"class":116},[106,167348,167349],{"class":108,"line":1193},[106,167350,33240],{"class":116},[106,167352,167353],{"class":108,"line":1207},[106,167354,2392],{"emptyLinePlaceholder":33},[106,167356,167357,167359,167361,167363,167366,167368,167370,167372,167374,167376,167378,167380,167382],{"class":108,"line":1213},[106,167358,161291],{"class":116},[106,167360,162],{"class":112},[106,167362,163589],{"class":165},[106,167364,167365],{"class":116},"(students, ",[106,167367,153931],{"class":5209},[106,167369,153934],{"class":112},[106,167371,153937],{"class":116},[106,167373,151457],{"class":221},[106,167375,112187],{"class":116},[106,167377,163513],{"class":5209},[106,167379,162],{"class":112},[106,167381,31470],{"class":165},[106,167383,123],{"class":116},[106,167385,167386,167388],{"class":108,"line":1304},[106,167387,30409],{"class":165},[106,167389,76579],{"class":116},[48,167391,167393],{"id":167392},"_711-闭包入门","7.11 闭包入门",[14,167395,167396],{},"闭包指内部函数使用了外部函数的变量，并且外部函数返回内部函数。",[97,167398,167400],{"className":30372,"code":167399,"language":30374,"meta":25,"style":25},"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",[103,167401,167402,167412,167422,167433,167437,167444,167448,167452,167466],{"__ignoreMap":25},[106,167403,167404,167406,167409],{"class":108,"line":109},[106,167405,31941],{"class":112},[106,167407,167408],{"class":1955}," outer",[106,167410,167411],{"class":116},"(base):\n",[106,167413,167414,167416,167419],{"class":108,"line":28},[106,167415,30795],{"class":112},[106,167417,167418],{"class":1955}," inner",[106,167420,167421],{"class":116},"(num):\n",[106,167423,167424,167426,167429,167431],{"class":108,"line":1172},[106,167425,14745],{"class":112},[106,167427,167428],{"class":116}," base ",[106,167430,598],{"class":112},[106,167432,166564],{"class":116},[106,167434,167435],{"class":108,"line":1187},[106,167436,2392],{"emptyLinePlaceholder":33},[106,167438,167439,167441],{"class":108,"line":1193},[106,167440,4082],{"class":112},[106,167442,167443],{"class":116}," inner\n",[106,167445,167446],{"class":108,"line":1207},[106,167447,2392],{"emptyLinePlaceholder":33},[106,167449,167450],{"class":108,"line":1213},[106,167451,2392],{"emptyLinePlaceholder":33},[106,167453,167454,167457,167459,167462,167464],{"class":108,"line":1304},[106,167455,167456],{"class":116},"add_10 ",[106,167458,162],{"class":112},[106,167460,167461],{"class":116}," outer(",[106,167463,563],{"class":165},[106,167465,123],{"class":116},[106,167467,167468,167470,167473,167475],{"class":108,"line":1310},[106,167469,30409],{"class":165},[106,167471,167472],{"class":116},"(add_10(",[106,167474,436],{"class":165},[106,167476,30491],{"class":116},[14,167478,167479],{},"闭包常用于保存状态、构造函数工厂。入门阶段了解即可。",[48,167481,167483],{"id":167482},"_712-装饰器入门","7.12 装饰器入门",[14,167485,167486],{},"装饰器用于在不修改原函数代码的情况下，给函数增加功能。",[97,167488,167490],{"className":30372,"code":167489,"language":30374,"meta":25,"style":25},"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",[103,167491,167492,167501,167510,167521,167526,167537,167541,167548,167552,167556,167561,167569,167579,167583,167587],{"__ignoreMap":25},[106,167493,167494,167496,167498],{"class":108,"line":109},[106,167495,31941],{"class":112},[106,167497,87185],{"class":1955},[106,167499,167500],{"class":116},"(func):\n",[106,167502,167503,167505,167508],{"class":108,"line":28},[106,167504,30795],{"class":112},[106,167506,167507],{"class":1955}," wrapper",[106,167509,31947],{"class":116},[106,167511,167512,167514,167516,167519],{"class":108,"line":1172},[106,167513,32445],{"class":165},[106,167515,117],{"class":116},[106,167517,167518],{"class":221},"\"函数开始执行\"",[106,167520,123],{"class":116},[106,167522,167523],{"class":108,"line":1187},[106,167524,167525],{"class":116},"        func()\n",[106,167527,167528,167530,167532,167535],{"class":108,"line":1193},[106,167529,32445],{"class":165},[106,167531,117],{"class":116},[106,167533,167534],{"class":221},"\"函数执行结束\"",[106,167536,123],{"class":116},[106,167538,167539],{"class":108,"line":1207},[106,167540,2392],{"emptyLinePlaceholder":33},[106,167542,167543,167545],{"class":108,"line":1213},[106,167544,4082],{"class":112},[106,167546,167547],{"class":116}," wrapper\n",[106,167549,167550],{"class":108,"line":1304},[106,167551,2392],{"emptyLinePlaceholder":33},[106,167553,167554],{"class":108,"line":1310},[106,167555,2392],{"emptyLinePlaceholder":33},[106,167557,167558],{"class":108,"line":1322},[106,167559,167560],{"class":1955},"@log\n",[106,167562,167563,167565,167567],{"class":108,"line":1604},[106,167564,31941],{"class":112},[106,167566,160981],{"class":1955},[106,167568,31947],{"class":116},[106,167570,167571,167573,167575,167577],{"class":108,"line":1609},[106,167572,31293],{"class":165},[106,167574,117],{"class":116},[106,167576,5837],{"class":221},[106,167578,123],{"class":116},[106,167580,167581],{"class":108,"line":1615},[106,167582,2392],{"emptyLinePlaceholder":33},[106,167584,167585],{"class":108,"line":1620},[106,167586,2392],{"emptyLinePlaceholder":33},[106,167588,167589],{"class":108,"line":1634},[106,167590,161016],{"class":116},[14,167592,158259],{},[97,167594,167596],{"className":30372,"code":167595,"language":30374,"meta":25,"style":25},"say_hello = log(say_hello)\n",[103,167597,167598],{"__ignoreMap":25},[106,167599,167600,167603,167605],{"class":108,"line":109},[106,167601,167602],{"class":116},"say_hello ",[106,167604,162],{"class":112},[106,167606,167607],{"class":116}," log(say_hello)\n",[14,167609,167610],{},"装饰器在 Web 框架、权限校验、日志统计中很常见。",[48,167612,167614],{"id":167613},"_713-带参数函数的装饰器","7.13 带参数函数的装饰器",[97,167616,167618],{"className":30372,"code":167617,"language":30374,"meta":25,"style":25},"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",[103,167619,167620,167628,167645,167655,167674,167684,167691,167695,167701,167705,167709,167713,167721,167731,167735,167739],{"__ignoreMap":25},[106,167621,167622,167624,167626],{"class":108,"line":109},[106,167623,31941],{"class":112},[106,167625,87185],{"class":1955},[106,167627,167500],{"class":116},[106,167629,167630,167632,167634,167636,167638,167641,167643],{"class":108,"line":28},[106,167631,30795],{"class":112},[106,167633,167507],{"class":1955},[106,167635,117],{"class":116},[106,167637,572],{"class":112},[106,167639,167640],{"class":116},"args, ",[106,167642,10654],{"class":112},[106,167644,166651],{"class":116},[106,167646,167647,167649,167651,167653],{"class":108,"line":1172},[106,167648,32445],{"class":165},[106,167650,117],{"class":116},[106,167652,167518],{"class":221},[106,167654,123],{"class":116},[106,167656,167657,167660,167662,167665,167667,167669,167671],{"class":108,"line":1187},[106,167658,167659],{"class":116},"        result ",[106,167661,162],{"class":112},[106,167663,167664],{"class":116}," func(",[106,167666,572],{"class":112},[106,167668,167640],{"class":116},[106,167670,10654],{"class":112},[106,167672,167673],{"class":116},"kwargs)\n",[106,167675,167676,167678,167680,167682],{"class":108,"line":1193},[106,167677,32445],{"class":165},[106,167679,117],{"class":116},[106,167681,167534],{"class":221},[106,167683,123],{"class":116},[106,167685,167686,167688],{"class":108,"line":1207},[106,167687,14745],{"class":112},[106,167689,167690],{"class":116}," result\n",[106,167692,167693],{"class":108,"line":1213},[106,167694,2392],{"emptyLinePlaceholder":33},[106,167696,167697,167699],{"class":108,"line":1304},[106,167698,4082],{"class":112},[106,167700,167547],{"class":116},[106,167702,167703],{"class":108,"line":1310},[106,167704,2392],{"emptyLinePlaceholder":33},[106,167706,167707],{"class":108,"line":1322},[106,167708,2392],{"emptyLinePlaceholder":33},[106,167710,167711],{"class":108,"line":1604},[106,167712,167560],{"class":1955},[106,167714,167715,167717,167719],{"class":108,"line":1609},[106,167716,31941],{"class":112},[106,167718,5202],{"class":1955},[106,167720,151078],{"class":116},[106,167722,167723,167725,167727,167729],{"class":108,"line":1615},[106,167724,4082],{"class":112},[106,167726,10862],{"class":116},[106,167728,598],{"class":112},[106,167730,151089],{"class":116},[106,167732,167733],{"class":108,"line":1620},[106,167734,2392],{"emptyLinePlaceholder":33},[106,167736,167737],{"class":108,"line":1634},[106,167738,2392],{"emptyLinePlaceholder":33},[106,167740,167741,167743,167745,167747,167749,167751],{"class":108,"line":1639},[106,167742,30409],{"class":165},[106,167744,166585],{"class":116},[106,167746,563],{"class":165},[106,167748,12428],{"class":116},[106,167750,817],{"class":165},[106,167752,30491],{"class":116},[14,167754,167755,167756,101003,167758,167760],{},"这个写法使用 ",[103,167757,166517],{},[103,167759,166632],{}," 接收原函数的所有参数。",[48,167762,167764],{"id":167763},"_714-小案例通用统计函数","7.14 小案例：通用统计函数",[14,167766,123277],{},[60,167768,167769,167772,167775],{},[63,167770,167771],{},"给定一组学生数据。",[63,167773,167774],{},"封装函数，根据传入规则筛选学生。",[63,167776,167777],{},"筛选及格、优秀、未成年学生。",[14,167779,10028],{},[97,167781,167783],{"className":30372,"code":167782,"language":30374,"meta":25,"style":25},"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",[103,167784,167785,167793,167821,167849,167877,167881,167885,167889,167899,167907,167917,167924,167929,167935,167939,167943,167967,167990,168013,168017,168024,168031],{"__ignoreMap":25},[106,167786,167787,167789,167791],{"class":108,"line":109},[106,167788,159701],{"class":116},[106,167790,162],{"class":112},[106,167792,55441],{"class":116},[106,167794,167795,167797,167799,167801,167803,167805,167807,167809,167811,167813,167815,167817,167819],{"class":108,"line":28},[106,167796,148370],{"class":116},[106,167798,62673],{"class":221},[106,167800,51431],{"class":116},[106,167802,149873],{"class":221},[106,167804,12428],{"class":116},[106,167806,69118],{"class":221},[106,167808,51431],{"class":116},[106,167810,767],{"class":165},[106,167812,12428],{"class":116},[106,167814,151457],{"class":221},[106,167816,51431],{"class":116},[106,167818,1106],{"class":165},[106,167820,4922],{"class":116},[106,167822,167823,167825,167827,167829,167831,167833,167835,167837,167839,167841,167843,167845,167847],{"class":108,"line":1172},[106,167824,148370],{"class":116},[106,167826,62673],{"class":221},[106,167828,51431],{"class":116},[106,167830,150921],{"class":221},[106,167832,12428],{"class":116},[106,167834,69118],{"class":221},[106,167836,51431],{"class":116},[106,167838,742],{"class":165},[106,167840,12428],{"class":116},[106,167842,151457],{"class":221},[106,167844,51431],{"class":116},[106,167846,928],{"class":165},[106,167848,4922],{"class":116},[106,167850,167851,167853,167855,167857,167859,167861,167863,167865,167867,167869,167871,167873,167875],{"class":108,"line":1187},[106,167852,148370],{"class":116},[106,167854,62673],{"class":221},[106,167856,51431],{"class":116},[106,167858,159716],{"class":221},[106,167860,12428],{"class":116},[106,167862,69118],{"class":221},[106,167864,51431],{"class":116},[106,167866,792],{"class":165},[106,167868,12428],{"class":116},[106,167870,151457],{"class":221},[106,167872,51431],{"class":116},[106,167874,999],{"class":165},[106,167876,4922],{"class":116},[106,167878,167879],{"class":108,"line":1193},[106,167880,33240],{"class":116},[106,167882,167883],{"class":108,"line":1207},[106,167884,2392],{"emptyLinePlaceholder":33},[106,167886,167887],{"class":108,"line":1213},[106,167888,2392],{"emptyLinePlaceholder":33},[106,167890,167891,167893,167896],{"class":108,"line":1304},[106,167892,31941],{"class":112},[106,167894,167895],{"class":1955}," filter_students",[106,167897,167898],{"class":116},"(students, condition):\n",[106,167900,167901,167903,167905],{"class":108,"line":1310},[106,167902,161208],{"class":116},[106,167904,162],{"class":112},[106,167906,51832],{"class":116},[106,167908,167909,167911,167913,167915],{"class":108,"line":1322},[106,167910,3193],{"class":112},[106,167912,152122],{"class":116},[106,167914,26037],{"class":112},[106,167916,152127],{"class":116},[106,167918,167919,167921],{"class":108,"line":1604},[106,167920,2489],{"class":112},[106,167922,167923],{"class":116}," condition(student):\n",[106,167925,167926],{"class":108,"line":1609},[106,167927,167928],{"class":116},"            result.append(student)\n",[106,167930,167931,167933],{"class":108,"line":1615},[106,167932,4082],{"class":112},[106,167934,167690],{"class":116},[106,167936,167937],{"class":108,"line":1620},[106,167938,2392],{"emptyLinePlaceholder":33},[106,167940,167941],{"class":108,"line":1634},[106,167942,2392],{"emptyLinePlaceholder":33},[106,167944,167945,167947,167949,167952,167954,167957,167959,167961,167963,167965],{"class":108,"line":1639},[106,167946,165686],{"class":116},[106,167948,162],{"class":112},[106,167950,167951],{"class":116}," filter_students(students, ",[106,167953,166871],{"class":112},[106,167955,167956],{"class":116}," s: s[",[106,167958,151457],{"class":221},[106,167960,4435],{"class":116},[106,167962,1702],{"class":112},[106,167964,157822],{"class":165},[106,167966,123],{"class":116},[106,167968,167969,167972,167974,167976,167978,167980,167982,167984,167986,167988],{"class":108,"line":1645},[106,167970,167971],{"class":116},"excellent ",[106,167973,162],{"class":112},[106,167975,167951],{"class":116},[106,167977,166871],{"class":112},[106,167979,167956],{"class":116},[106,167981,151457],{"class":221},[106,167983,4435],{"class":116},[106,167985,1702],{"class":112},[106,167987,157773],{"class":165},[106,167989,123],{"class":116},[106,167991,167992,167995,167997,167999,168001,168003,168005,168007,168009,168011],{"class":108,"line":1666},[106,167993,167994],{"class":116},"under_age ",[106,167996,162],{"class":112},[106,167998,167951],{"class":116},[106,168000,166871],{"class":112},[106,168002,167956],{"class":116},[106,168004,69118],{"class":221},[106,168006,4435],{"class":116},[106,168008,1027],{"class":112},[106,168010,156270],{"class":165},[106,168012,123],{"class":116},[106,168014,168015],{"class":108,"line":1671},[106,168016,2392],{"emptyLinePlaceholder":33},[106,168018,168019,168021],{"class":108,"line":1685},[106,168020,30409],{"class":165},[106,168022,168023],{"class":116},"(passed)\n",[106,168025,168026,168028],{"class":108,"line":1690},[106,168027,30409],{"class":165},[106,168029,168030],{"class":116},"(excellent)\n",[106,168032,168033,168035],{"class":108,"line":1719},[106,168034,30409],{"class":165},[106,168036,168037],{"class":116},"(under_age)\n",[48,168039,168041],{"id":168040},"_715-易错点","7.15 易错点",[60,168043,168044,168047,168055,168060,168071],{},[63,168045,168046],{},"默认参数不要写可变对象。",[63,168048,168049,168051,168052,168054],{},[103,168050,166517],{}," 是元组，",[103,168053,166632],{}," 是字典。",[63,168056,168057,168059],{},[103,168058,166871],{}," 只适合简单表达式。",[63,168061,168062,101003,168064,168066,168067,168070],{},[103,168063,74038],{},[103,168065,80045],{}," 的结果是迭代器，常用 ",[103,168068,168069],{},"list()"," 转换查看。",[63,168072,168073],{},"装饰器会改变函数调用链，初学时先理解执行顺序。",[48,168075,168077],{"id":168076},"_716-本章练习","7.16 本章练习",[60,168079,168080,168087,168093,168098,168103],{},[63,168081,168082,168083,168086],{},"写函数 ",[103,168084,168085],{},"calc(*args)","，返回所有数字的和、最大值、最小值。",[63,168088,168082,168089,168092],{},[103,168090,168091],{},"print_user(**kwargs)","，输出用户所有字段。",[63,168094,104351,168095,168097],{},[103,168096,166871],{}," 对学生列表按年龄排序。",[63,168099,104351,168100,168102],{},[103,168101,80045],{}," 找出成绩不及格的学生。",[63,168104,168105],{},"写一个装饰器，统计函数执行前后的提示信息。",[5119,168107,168108],{},"html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":28,"depth":28,"links":168110},[168111,168112,168113,168114,168115,168116,168120,168121,168122,168123,168128,168129,168130,168131,168132,168133],{"id":165969,"depth":28,"text":165970},{"id":166083,"depth":28,"text":166084},{"id":166172,"depth":28,"text":166173},{"id":166234,"depth":28,"text":166235},{"id":166380,"depth":28,"text":166381},{"id":166507,"depth":28,"text":166508,"children":168117},[168118,168119],{"id":166511,"depth":1172,"text":166512},{"id":166626,"depth":1172,"text":166627},{"id":166707,"depth":28,"text":166708},{"id":166865,"depth":28,"text":166866},{"id":167033,"depth":28,"text":167034},{"id":167115,"depth":28,"text":167116,"children":168124},[168125,168126,168127],{"id":167119,"depth":1172,"text":167120},{"id":167190,"depth":1172,"text":167191},{"id":167267,"depth":1172,"text":167268},{"id":167392,"depth":28,"text":167393},{"id":167482,"depth":28,"text":167483},{"id":167613,"depth":28,"text":167614},{"id":167763,"depth":28,"text":167764},{"id":168040,"depth":28,"text":168041},{"id":168076,"depth":28,"text":168077},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch7",{"title":165961,"description":30},"wiki\u002F2024-10-10-python教程\u002Fch7-函数进阶","vkwD4uN4GcTXYEVJo4HqYbW1G2UwuNGXsRcL7zWXd5Q",{"id":168140,"title":168141,"body":168142,"description":30,"extension":31,"meta":170661,"navigation":33,"path":170662,"seo":170663,"stem":170664,"__hash__":170665},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch8-文件操作.md","8. 文件操作",{"type":7,"value":168143,"toc":170636},[168144,168147,168151,168154,168157,168188,168192,168196,168199,168226,168230,168233,168284,168287,168302,168305,168340,168344,168346,168370,168373,168433,168437,168441,168444,168501,168504,168524,168528,168531,168594,168598,168601,168657,168664,168688,168692,168695,168758,168762,168767,168818,168821,168825,168830,168897,168900,168982,168986,168991,169042,169045,169049,169052,169055,169063,169066,169112,169115,169161,169165,169171,169215,169218,169264,169267,169307,169310,169371,169375,169378,169468,169471,169613,169616,169683,169687,169690,169693,169834,169837,169915,169918,170094,170098,170100,170111,170113,170312,170316,170560,170564,170598,170602,170633],[10,168145,168141],{"id":168146},"_8-文件操作",[48,168148,168150],{"id":168149},"_81-文件操作的意义","8.1 文件操作的意义",[14,168152,168153],{},"程序运行时，变量保存在内存中。程序结束后，内存数据通常会消失。文件可以把数据保存到磁盘，实现持久化。",[14,168155,168156],{},"常见文件类型：",[60,168158,168159,168165,168171,168177,168183],{},[63,168160,168161,168164],{},[103,168162,168163],{},".txt","：普通文本。",[63,168166,168167,168170],{},[103,168168,168169],{},".csv","：表格文本。",[63,168172,168173,168176],{},[103,168174,168175],{},".json","：结构化数据。",[63,168178,168179,168182],{},[103,168180,168181],{},".log","：日志文件。",[63,168184,168185,168187],{},[103,168186,146337],{},"：Python 源代码。",[48,168189,168191],{"id":168190},"_82-路径","8.2 路径",[77,168193,168195],{"id":168194},"_821-相对路径","8.2.1 相对路径",[14,168197,168198],{},"相对当前运行目录：",[97,168200,168202],{"className":30372,"code":168201,"language":30374,"meta":25,"style":25},"open(\"data.txt\", \"r\", encoding=\"utf-8\")\n",[103,168203,168204],{"__ignoreMap":25},[106,168205,168206,168208,168210,168212,168214,168216,168218,168220,168222,168224],{"class":108,"line":109},[106,168207,86909],{"class":165},[106,168209,117],{"class":116},[106,168211,146781],{"class":221},[106,168213,12428],{"class":116},[106,168215,146786],{"class":221},[106,168217,12428],{"class":116},[106,168219,146791],{"class":5209},[106,168221,162],{"class":112},[106,168223,146796],{"class":221},[106,168225,123],{"class":116},[77,168227,168229],{"id":168228},"_822-绝对路径","8.2.2 绝对路径",[14,168231,168232],{},"从根目录或盘符开始：",[97,168234,168236],{"className":30372,"code":168235,"language":30374,"meta":25,"style":25},"open(\"\u002Fhome\u002Fuser\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\nopen(\"D:\u002Fdata\u002Fdata.txt\", \"r\", encoding=\"utf-8\")\n",[103,168237,168238,168261],{"__ignoreMap":25},[106,168239,168240,168242,168244,168247,168249,168251,168253,168255,168257,168259],{"class":108,"line":109},[106,168241,86909],{"class":165},[106,168243,117],{"class":116},[106,168245,168246],{"class":221},"\"\u002Fhome\u002Fuser\u002Fdata.txt\"",[106,168248,12428],{"class":116},[106,168250,146786],{"class":221},[106,168252,12428],{"class":116},[106,168254,146791],{"class":5209},[106,168256,162],{"class":112},[106,168258,146796],{"class":221},[106,168260,123],{"class":116},[106,168262,168263,168265,168267,168270,168272,168274,168276,168278,168280,168282],{"class":108,"line":28},[106,168264,86909],{"class":165},[106,168266,117],{"class":116},[106,168268,168269],{"class":221},"\"D:\u002Fdata\u002Fdata.txt\"",[106,168271,12428],{"class":116},[106,168273,146786],{"class":221},[106,168275,12428],{"class":116},[106,168277,146791],{"class":5209},[106,168279,162],{"class":112},[106,168281,146796],{"class":221},[106,168283,123],{"class":116},[14,168285,168286],{},"Windows 路径建议写成：",[97,168288,168290],{"className":30372,"code":168289,"language":30374,"meta":25,"style":25},"path = \"D:\u002Fdata\u002Fdata.txt\"\n",[103,168291,168292],{"__ignoreMap":25},[106,168293,168294,168297,168299],{"class":108,"line":109},[106,168295,168296],{"class":116},"path ",[106,168298,162],{"class":112},[106,168300,168301],{"class":221}," \"D:\u002Fdata\u002Fdata.txt\"\n",[14,168303,168304],{},"或原始字符串：",[97,168306,168308],{"className":30372,"code":168307,"language":30374,"meta":25,"style":25},"path = r\"D:\\data\\data.txt\"\n",[103,168309,168310],{"__ignoreMap":25},[106,168311,168312,168314,168316,168318,168320,168323,168326,168329,168331,168333,168335,168338],{"class":108,"line":109},[106,168313,168296],{"class":116},[106,168315,162],{"class":112},[106,168317,17114],{"class":112},[106,168319,368],{"class":221},[106,168321,168322],{"class":47971},"D:",[106,168324,168325],{"class":165},"\\d",[106,168327,168328],{"class":47971},"ata",[106,168330,168325],{"class":165},[106,168332,168328],{"class":47971},[106,168334,675],{"class":165},[106,168336,168337],{"class":47971},"txt",[106,168339,25127],{"class":221},[48,168341,168343],{"id":168342},"_83-open函数","8.3 open函数",[14,168345,5174],{},[97,168347,168349],{"className":30372,"code":168348,"language":30374,"meta":25,"style":25},"file = open(文件路径, 打开模式, encoding=\"utf-8\")\n",[103,168350,168351],{"__ignoreMap":25},[106,168352,168353,168355,168357,168359,168362,168364,168366,168368],{"class":108,"line":109},[106,168354,45348],{"class":5209},[106,168356,13557],{"class":112},[106,168358,146776],{"class":165},[106,168360,168361],{"class":116},"(文件路径, 打开模式, ",[106,168363,146791],{"class":5209},[106,168365,162],{"class":112},[106,168367,146796],{"class":221},[106,168369,123],{"class":116},[14,168371,168372],{},"常见模式：",[254,168374,168375,168384],{},[257,168376,168377],{},[260,168378,168379,168382],{},[263,168380,168381],{},"模式",[263,168383,25863],{},[301,168385,168386,168395,168404,168413,168423],{},[260,168387,168388,168392],{},[306,168389,168390],{},[103,168391,787],{},[306,168393,168394],{},"只读，文件不存在会报错",[260,168396,168397,168401],{},[306,168398,168399],{},[103,168400,912],{},[306,168402,168403],{},"只写，文件不存在会创建，存在会清空",[260,168405,168406,168410],{},[306,168407,168408],{},[103,168409,355],{},[306,168411,168412],{},"追加，文件不存在会创建",[260,168414,168415,168420],{},[306,168416,168417],{},[103,168418,168419],{},"rb",[306,168421,168422],{},"二进制只读",[260,168424,168425,168430],{},[306,168426,168427],{},[103,168428,168429],{},"wb",[306,168431,168432],{},"二进制只写",[48,168434,168436],{"id":168435},"_84-读取文件","8.4 读取文件",[77,168438,168440],{"id":168439},"_841-read","8.4.1 read",[14,168442,168443],{},"一次读取全部内容：",[97,168445,168447],{"className":30372,"code":168446,"language":30374,"meta":25,"style":25},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\ncontent = file.read()\nprint(content)\nfile.close()\n",[103,168448,168449,168475,168487,168494],{"__ignoreMap":25},[106,168450,168451,168453,168455,168457,168459,168461,168463,168465,168467,168469,168471,168473],{"class":108,"line":109},[106,168452,45348],{"class":5209},[106,168454,13557],{"class":112},[106,168456,146776],{"class":165},[106,168458,117],{"class":116},[106,168460,146781],{"class":221},[106,168462,12428],{"class":116},[106,168464,146786],{"class":221},[106,168466,12428],{"class":116},[106,168468,146791],{"class":5209},[106,168470,162],{"class":112},[106,168472,146796],{"class":221},[106,168474,123],{"class":116},[106,168476,168477,168480,168482,168484],{"class":108,"line":28},[106,168478,168479],{"class":116},"content ",[106,168481,162],{"class":112},[106,168483,148138],{"class":5209},[106,168485,168486],{"class":116},".read()\n",[106,168488,168489,168491],{"class":108,"line":1172},[106,168490,30409],{"class":165},[106,168492,168493],{"class":116},"(content)\n",[106,168495,168496,168498],{"class":108,"line":1187},[106,168497,45348],{"class":5209},[106,168499,168500],{"class":116},".close()\n",[14,168502,168503],{},"可以指定读取字符数：",[97,168505,168507],{"className":30372,"code":168506,"language":30374,"meta":25,"style":25},"content = file.read(10)\n",[103,168508,168509],{"__ignoreMap":25},[106,168510,168511,168513,168515,168517,168520,168522],{"class":108,"line":109},[106,168512,168479],{"class":116},[106,168514,162],{"class":112},[106,168516,148138],{"class":5209},[106,168518,168519],{"class":116},".read(",[106,168521,563],{"class":165},[106,168523,123],{"class":116},[77,168525,168527],{"id":168526},"_842-readline","8.4.2 readline",[14,168529,168530],{},"一次读取一行：",[97,168532,168534],{"className":30372,"code":168533,"language":30374,"meta":25,"style":25},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nline = file.readline()\nprint(line)\n\nfile.close()\n",[103,168535,168536,168562,168566,168577,168584,168588],{"__ignoreMap":25},[106,168537,168538,168540,168542,168544,168546,168548,168550,168552,168554,168556,168558,168560],{"class":108,"line":109},[106,168539,45348],{"class":5209},[106,168541,13557],{"class":112},[106,168543,146776],{"class":165},[106,168545,117],{"class":116},[106,168547,146781],{"class":221},[106,168549,12428],{"class":116},[106,168551,146786],{"class":221},[106,168553,12428],{"class":116},[106,168555,146791],{"class":5209},[106,168557,162],{"class":112},[106,168559,146796],{"class":221},[106,168561,123],{"class":116},[106,168563,168564],{"class":108,"line":28},[106,168565,2392],{"emptyLinePlaceholder":33},[106,168567,168568,168570,168572,168574],{"class":108,"line":1172},[106,168569,147237],{"class":116},[106,168571,162],{"class":112},[106,168573,148138],{"class":5209},[106,168575,168576],{"class":116},".readline()\n",[106,168578,168579,168581],{"class":108,"line":1187},[106,168580,30409],{"class":165},[106,168582,168583],{"class":116},"(line)\n",[106,168585,168586],{"class":108,"line":1193},[106,168587,2392],{"emptyLinePlaceholder":33},[106,168589,168590,168592],{"class":108,"line":1207},[106,168591,45348],{"class":5209},[106,168593,168500],{"class":116},[77,168595,168597],{"id":168596},"_843-readlines","8.4.3 readlines",[14,168599,168600],{},"读取所有行，返回列表：",[97,168602,168604],{"className":30372,"code":168603,"language":30374,"meta":25,"style":25},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\nlines = file.readlines()\nprint(lines)\nfile.close()\n",[103,168605,168606,168632,168644,168651],{"__ignoreMap":25},[106,168607,168608,168610,168612,168614,168616,168618,168620,168622,168624,168626,168628,168630],{"class":108,"line":109},[106,168609,45348],{"class":5209},[106,168611,13557],{"class":112},[106,168613,146776],{"class":165},[106,168615,117],{"class":116},[106,168617,146781],{"class":221},[106,168619,12428],{"class":116},[106,168621,146786],{"class":221},[106,168623,12428],{"class":116},[106,168625,146791],{"class":5209},[106,168627,162],{"class":112},[106,168629,146796],{"class":221},[106,168631,123],{"class":116},[106,168633,168634,168637,168639,168641],{"class":108,"line":28},[106,168635,168636],{"class":116},"lines ",[106,168638,162],{"class":112},[106,168640,148138],{"class":5209},[106,168642,168643],{"class":116},".readlines()\n",[106,168645,168646,168648],{"class":108,"line":1172},[106,168647,30409],{"class":165},[106,168649,168650],{"class":116},"(lines)\n",[106,168652,168653,168655],{"class":108,"line":1187},[106,168654,45348],{"class":5209},[106,168656,168500],{"class":116},[14,168658,168659,168660,168663],{},"每一行通常带有换行符，可以用 ",[103,168661,168662],{},"strip()"," 去掉：",[97,168665,168667],{"className":30372,"code":168666,"language":30374,"meta":25,"style":25},"for line in lines:\n    print(line.strip())\n",[103,168668,168669,168681],{"__ignoreMap":25},[106,168670,168671,168673,168676,168678],{"class":108,"line":109},[106,168672,3017],{"class":112},[106,168674,168675],{"class":116}," line ",[106,168677,26037],{"class":112},[106,168679,168680],{"class":116}," lines:\n",[106,168682,168683,168685],{"class":108,"line":28},[106,168684,31293],{"class":165},[106,168686,168687],{"class":116},"(line.strip())\n",[77,168689,168691],{"id":168690},"_844-直接遍历文件对象","8.4.4 直接遍历文件对象",[14,168693,168694],{},"推荐读取大文件时使用：",[97,168696,168698],{"className":30372,"code":168697,"language":30374,"meta":25,"style":25},"file = open(\"data.txt\", \"r\", encoding=\"utf-8\")\n\nfor line in file:\n    print(line.strip())\n\nfile.close()\n",[103,168699,168700,168726,168730,168742,168748,168752],{"__ignoreMap":25},[106,168701,168702,168704,168706,168708,168710,168712,168714,168716,168718,168720,168722,168724],{"class":108,"line":109},[106,168703,45348],{"class":5209},[106,168705,13557],{"class":112},[106,168707,146776],{"class":165},[106,168709,117],{"class":116},[106,168711,146781],{"class":221},[106,168713,12428],{"class":116},[106,168715,146786],{"class":221},[106,168717,12428],{"class":116},[106,168719,146791],{"class":5209},[106,168721,162],{"class":112},[106,168723,146796],{"class":221},[106,168725,123],{"class":116},[106,168727,168728],{"class":108,"line":28},[106,168729,2392],{"emptyLinePlaceholder":33},[106,168731,168732,168734,168736,168738,168740],{"class":108,"line":1172},[106,168733,3017],{"class":112},[106,168735,168675],{"class":116},[106,168737,26037],{"class":112},[106,168739,148138],{"class":5209},[106,168741,3731],{"class":116},[106,168743,168744,168746],{"class":108,"line":1187},[106,168745,31293],{"class":165},[106,168747,168687],{"class":116},[106,168749,168750],{"class":108,"line":1193},[106,168751,2392],{"emptyLinePlaceholder":33},[106,168753,168754,168756],{"class":108,"line":1207},[106,168755,45348],{"class":5209},[106,168757,168500],{"class":116},[48,168759,168761],{"id":168760},"_85-with语句","8.5 with语句",[14,168763,168764,168766],{},[103,168765,107818],{}," 会自动关闭文件，推荐使用。",[97,168768,168770],{"className":30372,"code":168769,"language":30374,"meta":25,"style":25},"with open(\"data.txt\", \"r\", encoding=\"utf-8\") as file:\n    content = file.read()\n    print(content)\n",[103,168771,168772,168802,168812],{"__ignoreMap":25},[106,168773,168774,168776,168778,168780,168782,168784,168786,168788,168790,168792,168794,168796,168798,168800],{"class":108,"line":109},[106,168775,107818],{"class":112},[106,168777,146776],{"class":165},[106,168779,117],{"class":116},[106,168781,146781],{"class":221},[106,168783,12428],{"class":116},[106,168785,146786],{"class":221},[106,168787,12428],{"class":116},[106,168789,146791],{"class":5209},[106,168791,162],{"class":112},[106,168793,146796],{"class":221},[106,168795,13707],{"class":116},[106,168797,31377],{"class":112},[106,168799,148138],{"class":5209},[106,168801,3731],{"class":116},[106,168803,168804,168806,168808,168810],{"class":108,"line":28},[106,168805,146808],{"class":116},[106,168807,162],{"class":112},[106,168809,148138],{"class":5209},[106,168811,168486],{"class":116},[106,168813,168814,168816],{"class":108,"line":1172},[106,168815,31293],{"class":165},[106,168817,168493],{"class":116},[14,168819,168820],{},"等价于打开文件、读取、最后关闭，但更安全。",[48,168822,168824],{"id":168823},"_86-写入文件","8.6 写入文件",[14,168826,168827,168829],{},[103,168828,912],{}," 模式会清空原文件。",[97,168831,168833],{"className":30372,"code":168832,"language":30374,"meta":25,"style":25},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"hello\\n\")\n    file.write(\"python\\n\")\n",[103,168834,168835,168865,168882],{"__ignoreMap":25},[106,168836,168837,168839,168841,168843,168845,168847,168849,168851,168853,168855,168857,168859,168861,168863],{"class":108,"line":109},[106,168838,107818],{"class":112},[106,168840,146776],{"class":165},[106,168842,117],{"class":116},[106,168844,146781],{"class":221},[106,168846,12428],{"class":116},[106,168848,151961],{"class":221},[106,168850,12428],{"class":116},[106,168852,146791],{"class":5209},[106,168854,162],{"class":112},[106,168856,146796],{"class":221},[106,168858,13707],{"class":116},[106,168860,31377],{"class":112},[106,168862,148138],{"class":5209},[106,168864,3731],{"class":116},[106,168866,168867,168870,168873,168876,168878,168880],{"class":108,"line":28},[106,168868,168869],{"class":5209},"    file",[106,168871,168872],{"class":116},".write(",[106,168874,168875],{"class":221},"\"hello",[106,168877,156510],{"class":165},[106,168879,368],{"class":221},[106,168881,123],{"class":116},[106,168883,168884,168886,168888,168891,168893,168895],{"class":108,"line":1172},[106,168885,168869],{"class":5209},[106,168887,168872],{"class":116},[106,168889,168890],{"class":221},"\"python",[106,168892,156510],{"class":165},[106,168894,368],{"class":221},[106,168896,123],{"class":116},[14,168898,168899],{},"写入多行：",[97,168901,168903],{"className":30372,"code":168902,"language":30374,"meta":25,"style":25},"lines = [\"小明,18\\n\", \"小红,17\\n\", \"小刚,19\\n\"]\n\nwith open(\"students.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.writelines(lines)\n",[103,168904,168905,168940,168944,168975],{"__ignoreMap":25},[106,168906,168907,168909,168911,168913,168916,168918,168920,168922,168925,168927,168929,168931,168934,168936,168938],{"class":108,"line":109},[106,168908,168636],{"class":116},[106,168910,162],{"class":112},[106,168912,52220],{"class":116},[106,168914,168915],{"class":221},"\"小明,18",[106,168917,156510],{"class":165},[106,168919,368],{"class":221},[106,168921,12428],{"class":116},[106,168923,168924],{"class":221},"\"小红,17",[106,168926,156510],{"class":165},[106,168928,368],{"class":221},[106,168930,12428],{"class":116},[106,168932,168933],{"class":221},"\"小刚,19",[106,168935,156510],{"class":165},[106,168937,368],{"class":221},[106,168939,33240],{"class":116},[106,168941,168942],{"class":108,"line":28},[106,168943,2392],{"emptyLinePlaceholder":33},[106,168945,168946,168948,168950,168952,168955,168957,168959,168961,168963,168965,168967,168969,168971,168973],{"class":108,"line":1172},[106,168947,107818],{"class":112},[106,168949,146776],{"class":165},[106,168951,117],{"class":116},[106,168953,168954],{"class":221},"\"students.txt\"",[106,168956,12428],{"class":116},[106,168958,151961],{"class":221},[106,168960,12428],{"class":116},[106,168962,146791],{"class":5209},[106,168964,162],{"class":112},[106,168966,146796],{"class":221},[106,168968,13707],{"class":116},[106,168970,31377],{"class":112},[106,168972,148138],{"class":5209},[106,168974,3731],{"class":116},[106,168976,168977,168979],{"class":108,"line":1187},[106,168978,168869],{"class":5209},[106,168980,168981],{"class":116},".writelines(lines)\n",[48,168983,168985],{"id":168984},"_87-追加文件","8.7 追加文件",[14,168987,168988,168990],{},[103,168989,355],{}," 模式不会清空原内容，而是在末尾追加。",[97,168992,168994],{"className":30372,"code":168993,"language":30374,"meta":25,"style":25},"with open(\"log.txt\", \"a\", encoding=\"utf-8\") as file:\n    file.write(\"程序启动\\n\")\n",[103,168995,168996,169027],{"__ignoreMap":25},[106,168997,168998,169000,169002,169004,169007,169009,169011,169013,169015,169017,169019,169021,169023,169025],{"class":108,"line":109},[106,168999,107818],{"class":112},[106,169001,146776],{"class":165},[106,169003,117],{"class":116},[106,169005,169006],{"class":221},"\"log.txt\"",[106,169008,12428],{"class":116},[106,169010,165310],{"class":221},[106,169012,12428],{"class":116},[106,169014,146791],{"class":5209},[106,169016,162],{"class":112},[106,169018,146796],{"class":221},[106,169020,13707],{"class":116},[106,169022,31377],{"class":112},[106,169024,148138],{"class":5209},[106,169026,3731],{"class":116},[106,169028,169029,169031,169033,169036,169038,169040],{"class":108,"line":28},[106,169030,168869],{"class":5209},[106,169032,168872],{"class":116},[106,169034,169035],{"class":221},"\"程序启动",[106,169037,156510],{"class":165},[106,169039,368],{"class":221},[106,169041,123],{"class":116},[14,169043,169044],{},"日志类文件常用追加模式。",[48,169046,169048],{"id":169047},"_88-文件编码","8.8 文件编码",[14,169050,169051],{},"编码决定文字如何保存为字节。",[14,169053,169054],{},"常见编码：",[60,169056,169057,169060],{},[63,169058,169059],{},"UTF-8：推荐。",[63,169061,169062],{},"GBK：部分 Windows 中文文件常见。",[14,169064,169065],{},"读取文件乱码时，可以尝试：",[97,169067,169069],{"className":30372,"code":169068,"language":30374,"meta":25,"style":25},"with open(\"data.txt\", \"r\", encoding=\"gbk\") as file:\n    content = file.read()\n",[103,169070,169071,169102],{"__ignoreMap":25},[106,169072,169073,169075,169077,169079,169081,169083,169085,169087,169089,169091,169094,169096,169098,169100],{"class":108,"line":109},[106,169074,107818],{"class":112},[106,169076,146776],{"class":165},[106,169078,117],{"class":116},[106,169080,146781],{"class":221},[106,169082,12428],{"class":116},[106,169084,146786],{"class":221},[106,169086,12428],{"class":116},[106,169088,146791],{"class":5209},[106,169090,162],{"class":112},[106,169092,169093],{"class":221},"\"gbk\"",[106,169095,13707],{"class":116},[106,169097,31377],{"class":112},[106,169099,148138],{"class":5209},[106,169101,3731],{"class":116},[106,169103,169104,169106,169108,169110],{"class":108,"line":28},[106,169105,146808],{"class":116},[106,169107,162],{"class":112},[106,169109,148138],{"class":5209},[106,169111,168486],{"class":116},[14,169113,169114],{},"写文件时建议统一 UTF-8：",[97,169116,169118],{"className":30372,"code":169117,"language":30374,"meta":25,"style":25},"with open(\"data.txt\", \"w\", encoding=\"utf-8\") as file:\n    file.write(\"中文内容\")\n",[103,169119,169120,169150],{"__ignoreMap":25},[106,169121,169122,169124,169126,169128,169130,169132,169134,169136,169138,169140,169142,169144,169146,169148],{"class":108,"line":109},[106,169123,107818],{"class":112},[106,169125,146776],{"class":165},[106,169127,117],{"class":116},[106,169129,146781],{"class":221},[106,169131,12428],{"class":116},[106,169133,151961],{"class":221},[106,169135,12428],{"class":116},[106,169137,146791],{"class":5209},[106,169139,162],{"class":112},[106,169141,146796],{"class":221},[106,169143,13707],{"class":116},[106,169145,31377],{"class":112},[106,169147,148138],{"class":5209},[106,169149,3731],{"class":116},[106,169151,169152,169154,169156,169159],{"class":108,"line":28},[106,169153,168869],{"class":5209},[106,169155,168872],{"class":116},[106,169157,169158],{"class":221},"\"中文内容\"",[106,169160,123],{"class":116},[48,169162,169164],{"id":169163},"_89-pathlib","8.9 pathlib",[14,169166,169167,169170],{},[103,169168,169169],{},"pathlib"," 是现代 Python 推荐的路径处理方式。",[97,169172,169174],{"className":30372,"code":169173,"language":30374,"meta":25,"style":25},"from pathlib import Path\n\npath = Path(\"data\") \u002F \"students.txt\"\nprint(path)\n",[103,169175,169176,169186,169190,169208],{"__ignoreMap":25},[106,169177,169178,169180,169182,169184],{"class":108,"line":109},[106,169179,30731],{"class":112},[106,169181,108296],{"class":116},[106,169183,30386],{"class":112},[106,169185,108301],{"class":116},[106,169187,169188],{"class":108,"line":28},[106,169189,2392],{"emptyLinePlaceholder":33},[106,169191,169192,169194,169196,169198,169201,169203,169205],{"class":108,"line":1172},[106,169193,168296],{"class":116},[106,169195,162],{"class":112},[106,169197,108530],{"class":116},[106,169199,169200],{"class":221},"\"data\"",[106,169202,13707],{"class":116},[106,169204,701],{"class":112},[106,169206,169207],{"class":221}," \"students.txt\"\n",[106,169209,169210,169212],{"class":108,"line":1187},[106,169211,30409],{"class":165},[106,169213,169214],{"class":116},"(path)\n",[14,169216,169217],{},"创建目录：",[97,169219,169221],{"className":30372,"code":169220,"language":30374,"meta":25,"style":25},"from pathlib import Path\n\ndata_dir = Path(\"data\")\ndata_dir.mkdir(exist_ok=True)\n",[103,169222,169223,169233,169237,169250],{"__ignoreMap":25},[106,169224,169225,169227,169229,169231],{"class":108,"line":109},[106,169226,30731],{"class":112},[106,169228,108296],{"class":116},[106,169230,30386],{"class":112},[106,169232,108301],{"class":116},[106,169234,169235],{"class":108,"line":28},[106,169236,2392],{"emptyLinePlaceholder":33},[106,169238,169239,169242,169244,169246,169248],{"class":108,"line":1172},[106,169240,169241],{"class":116},"data_dir ",[106,169243,162],{"class":112},[106,169245,108530],{"class":116},[106,169247,169200],{"class":221},[106,169249,123],{"class":116},[106,169251,169252,169255,169258,169260,169262],{"class":108,"line":1187},[106,169253,169254],{"class":116},"data_dir.mkdir(",[106,169256,169257],{"class":5209},"exist_ok",[106,169259,162],{"class":112},[106,169261,31470],{"class":165},[106,169263,123],{"class":116},[14,169265,169266],{},"判断文件是否存在：",[97,169268,169270],{"className":30372,"code":169269,"language":30374,"meta":25,"style":25},"path = Path(\"data\u002Fstudents.txt\")\n\nif path.exists():\n    print(\"文件存在\")\n",[103,169271,169272,169285,169289,169296],{"__ignoreMap":25},[106,169273,169274,169276,169278,169280,169283],{"class":108,"line":109},[106,169275,168296],{"class":116},[106,169277,162],{"class":112},[106,169279,108530],{"class":116},[106,169281,169282],{"class":221},"\"data\u002Fstudents.txt\"",[106,169284,123],{"class":116},[106,169286,169287],{"class":108,"line":28},[106,169288,2392],{"emptyLinePlaceholder":33},[106,169290,169291,169293],{"class":108,"line":1172},[106,169292,1523],{"class":112},[106,169294,169295],{"class":116}," path.exists():\n",[106,169297,169298,169300,169302,169305],{"class":108,"line":1187},[106,169299,31293],{"class":165},[106,169301,117],{"class":116},[106,169303,169304],{"class":221},"\"文件存在\"",[106,169306,123],{"class":116},[14,169308,169309],{},"读写文本：",[97,169311,169313],{"className":30372,"code":169312,"language":30374,"meta":25,"style":25},"path = Path(\"data.txt\")\n\npath.write_text(\"hello python\", encoding=\"utf-8\")\ncontent = path.read_text(encoding=\"utf-8\")\nprint(content)\n",[103,169314,169315,169327,169331,169348,169365],{"__ignoreMap":25},[106,169316,169317,169319,169321,169323,169325],{"class":108,"line":109},[106,169318,168296],{"class":116},[106,169320,162],{"class":112},[106,169322,108530],{"class":116},[106,169324,146781],{"class":221},[106,169326,123],{"class":116},[106,169328,169329],{"class":108,"line":28},[106,169330,2392],{"emptyLinePlaceholder":33},[106,169332,169333,169336,169338,169340,169342,169344,169346],{"class":108,"line":1172},[106,169334,169335],{"class":116},"path.write_text(",[106,169337,145861],{"class":221},[106,169339,12428],{"class":116},[106,169341,146791],{"class":5209},[106,169343,162],{"class":112},[106,169345,146796],{"class":221},[106,169347,123],{"class":116},[106,169349,169350,169352,169354,169357,169359,169361,169363],{"class":108,"line":1187},[106,169351,168479],{"class":116},[106,169353,162],{"class":112},[106,169355,169356],{"class":116}," path.read_text(",[106,169358,146791],{"class":5209},[106,169360,162],{"class":112},[106,169362,146796],{"class":221},[106,169364,123],{"class":116},[106,169366,169367,169369],{"class":108,"line":1193},[106,169368,30409],{"class":165},[106,169370,168493],{"class":116},[48,169372,169374],{"id":169373},"_810-json文件","8.10 JSON文件",[14,169376,169377],{},"JSON 是常见的数据交换格式，适合保存列表、字典这类结构化数据。",[97,169379,169381],{"className":30372,"code":169380,"language":30374,"meta":25,"style":25},"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",[103,169382,169383,169389,169393,169401,169411,169421,169429,169433,169437,169462],{"__ignoreMap":25},[106,169384,169385,169387],{"class":108,"line":109},[106,169386,30386],{"class":112},[106,169388,147076],{"class":116},[106,169390,169391],{"class":108,"line":28},[106,169392,2392],{"emptyLinePlaceholder":33},[106,169394,169395,169397,169399],{"class":108,"line":1172},[106,169396,149466],{"class":116},[106,169398,162],{"class":112},[106,169400,15565],{"class":116},[106,169402,169403,169405,169407,169409],{"class":108,"line":1187},[106,169404,147005],{"class":221},[106,169406,51431],{"class":116},[106,169408,149873],{"class":221},[106,169410,31460],{"class":116},[106,169412,169413,169415,169417,169419],{"class":108,"line":1193},[106,169414,164522],{"class":221},[106,169416,51431],{"class":116},[106,169418,767],{"class":165},[106,169420,31460],{"class":116},[106,169422,169423,169425,169427],{"class":108,"line":1207},[106,169424,164533],{"class":221},[106,169426,51431],{"class":116},[106,169428,164538],{"class":165},[106,169430,169431],{"class":108,"line":1213},[106,169432,1557],{"class":116},[106,169434,169435],{"class":108,"line":1304},[106,169436,2392],{"emptyLinePlaceholder":33},[106,169438,169439,169441,169443,169446,169448,169450,169452,169454,169456,169458,169460],{"class":108,"line":1310},[106,169440,156429],{"class":116},[106,169442,162],{"class":112},[106,169444,169445],{"class":116}," json.dumps(student, ",[106,169447,147122],{"class":5209},[106,169449,162],{"class":112},[106,169451,33981],{"class":165},[106,169453,12428],{"class":116},[106,169455,151997],{"class":5209},[106,169457,162],{"class":112},[106,169459,194],{"class":165},[106,169461,123],{"class":116},[106,169463,169464,169466],{"class":108,"line":1322},[106,169465,30409],{"class":165},[106,169467,164056],{"class":116},[14,169469,169470],{},"写入 JSON 文件：",[97,169472,169474],{"className":30372,"code":169473,"language":30374,"meta":25,"style":25},"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",[103,169475,169476,169482,169486,169494,169522,169550,169554,169558,169588],{"__ignoreMap":25},[106,169477,169478,169480],{"class":108,"line":109},[106,169479,30386],{"class":112},[106,169481,147076],{"class":116},[106,169483,169484],{"class":108,"line":28},[106,169485,2392],{"emptyLinePlaceholder":33},[106,169487,169488,169490,169492],{"class":108,"line":1172},[106,169489,159701],{"class":116},[106,169491,162],{"class":112},[106,169493,55441],{"class":116},[106,169495,169496,169498,169500,169502,169504,169506,169508,169510,169512,169514,169516,169518,169520],{"class":108,"line":1187},[106,169497,148370],{"class":116},[106,169499,62673],{"class":221},[106,169501,51431],{"class":116},[106,169503,149873],{"class":221},[106,169505,12428],{"class":116},[106,169507,69118],{"class":221},[106,169509,51431],{"class":116},[106,169511,767],{"class":165},[106,169513,12428],{"class":116},[106,169515,151457],{"class":221},[106,169517,51431],{"class":116},[106,169519,1106],{"class":165},[106,169521,4922],{"class":116},[106,169523,169524,169526,169528,169530,169532,169534,169536,169538,169540,169542,169544,169546,169548],{"class":108,"line":1193},[106,169525,148370],{"class":116},[106,169527,62673],{"class":221},[106,169529,51431],{"class":116},[106,169531,150921],{"class":221},[106,169533,12428],{"class":116},[106,169535,69118],{"class":221},[106,169537,51431],{"class":116},[106,169539,742],{"class":165},[106,169541,12428],{"class":116},[106,169543,151457],{"class":221},[106,169545,51431],{"class":116},[106,169547,928],{"class":165},[106,169549,4922],{"class":116},[106,169551,169552],{"class":108,"line":1207},[106,169553,33240],{"class":116},[106,169555,169556],{"class":108,"line":1213},[106,169557,2392],{"emptyLinePlaceholder":33},[106,169559,169560,169562,169564,169566,169568,169570,169572,169574,169576,169578,169580,169582,169584,169586],{"class":108,"line":1304},[106,169561,107818],{"class":112},[106,169563,146776],{"class":165},[106,169565,117],{"class":116},[106,169567,151816],{"class":221},[106,169569,12428],{"class":116},[106,169571,151961],{"class":221},[106,169573,12428],{"class":116},[106,169575,146791],{"class":5209},[106,169577,162],{"class":112},[106,169579,146796],{"class":221},[106,169581,13707],{"class":116},[106,169583,31377],{"class":112},[106,169585,148138],{"class":5209},[106,169587,3731],{"class":116},[106,169589,169590,169593,169595,169597,169599,169601,169603,169605,169607,169609,169611],{"class":108,"line":1310},[106,169591,169592],{"class":116},"    json.dump(students, ",[106,169594,45348],{"class":5209},[106,169596,12428],{"class":116},[106,169598,147122],{"class":5209},[106,169600,162],{"class":112},[106,169602,33981],{"class":165},[106,169604,12428],{"class":116},[106,169606,151997],{"class":5209},[106,169608,162],{"class":112},[106,169610,194],{"class":165},[106,169612,123],{"class":116},[14,169614,169615],{},"读取 JSON 文件：",[97,169617,169619],{"className":30372,"code":169618,"language":30374,"meta":25,"style":25},"import json\n\nwith open(\"students.json\", \"r\", encoding=\"utf-8\") as file:\n    students = json.load(file)\n\nprint(students)\n",[103,169620,169621,169627,169631,169661,169673,169677],{"__ignoreMap":25},[106,169622,169623,169625],{"class":108,"line":109},[106,169624,30386],{"class":112},[106,169626,147076],{"class":116},[106,169628,169629],{"class":108,"line":28},[106,169630,2392],{"emptyLinePlaceholder":33},[106,169632,169633,169635,169637,169639,169641,169643,169645,169647,169649,169651,169653,169655,169657,169659],{"class":108,"line":1172},[106,169634,107818],{"class":112},[106,169636,146776],{"class":165},[106,169638,117],{"class":116},[106,169640,151816],{"class":221},[106,169642,12428],{"class":116},[106,169644,146786],{"class":221},[106,169646,12428],{"class":116},[106,169648,146791],{"class":5209},[106,169650,162],{"class":112},[106,169652,146796],{"class":221},[106,169654,13707],{"class":116},[106,169656,31377],{"class":112},[106,169658,148138],{"class":5209},[106,169660,3731],{"class":116},[106,169662,169663,169665,169667,169669,169671],{"class":108,"line":1187},[106,169664,153022],{"class":116},[106,169666,162],{"class":112},[106,169668,148149],{"class":116},[106,169670,45348],{"class":5209},[106,169672,123],{"class":116},[106,169674,169675],{"class":108,"line":1193},[106,169676,2392],{"emptyLinePlaceholder":33},[106,169678,169679,169681],{"class":108,"line":1207},[106,169680,30409],{"class":165},[106,169682,164980],{"class":116},[48,169684,169686],{"id":169685},"_811-csv文件","8.11 CSV文件",[14,169688,169689],{},"CSV 是逗号分隔值，常用于表格数据。",[14,169691,169692],{},"写入 CSV：",[97,169694,169696],{"className":30372,"code":169695,"language":30374,"meta":25,"style":25},"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",[103,169697,169698,169705,169709,169717,169735,169751,169767,169771,169775,169815,169829],{"__ignoreMap":25},[106,169699,169700,169702],{"class":108,"line":109},[106,169701,30386],{"class":112},[106,169703,169704],{"class":116}," csv\n",[106,169706,169707],{"class":108,"line":28},[106,169708,2392],{"emptyLinePlaceholder":33},[106,169710,169711,169713,169715],{"class":108,"line":1172},[106,169712,159701],{"class":116},[106,169714,162],{"class":112},[106,169716,55441],{"class":116},[106,169718,169719,169722,169724,169726,169728,169730,169733],{"class":108,"line":1187},[106,169720,169721],{"class":116},"    [",[106,169723,73093],{"class":221},[106,169725,12428],{"class":116},[106,169727,73126],{"class":221},[106,169729,12428],{"class":116},[106,169731,169732],{"class":221},"\"成绩\"",[106,169734,87830],{"class":116},[106,169736,169737,169739,169741,169743,169745,169747,169749],{"class":108,"line":1193},[106,169738,169721],{"class":116},[106,169740,149873],{"class":221},[106,169742,12428],{"class":116},[106,169744,767],{"class":165},[106,169746,12428],{"class":116},[106,169748,1106],{"class":165},[106,169750,87830],{"class":116},[106,169752,169753,169755,169757,169759,169761,169763,169765],{"class":108,"line":1207},[106,169754,169721],{"class":116},[106,169756,150921],{"class":221},[106,169758,12428],{"class":116},[106,169760,742],{"class":165},[106,169762,12428],{"class":116},[106,169764,928],{"class":165},[106,169766,87830],{"class":116},[106,169768,169769],{"class":108,"line":1213},[106,169770,33240],{"class":116},[106,169772,169773],{"class":108,"line":1304},[106,169774,2392],{"emptyLinePlaceholder":33},[106,169776,169777,169779,169781,169783,169786,169788,169790,169792,169794,169796,169798,169800,169803,169805,169807,169809,169811,169813],{"class":108,"line":1310},[106,169778,107818],{"class":112},[106,169780,146776],{"class":165},[106,169782,117],{"class":116},[106,169784,169785],{"class":221},"\"students.csv\"",[106,169787,12428],{"class":116},[106,169789,151961],{"class":221},[106,169791,12428],{"class":116},[106,169793,146791],{"class":5209},[106,169795,162],{"class":112},[106,169797,146796],{"class":221},[106,169799,12428],{"class":116},[106,169801,169802],{"class":5209},"newline",[106,169804,162],{"class":112},[106,169806,7645],{"class":221},[106,169808,13707],{"class":116},[106,169810,31377],{"class":112},[106,169812,148138],{"class":5209},[106,169814,3731],{"class":116},[106,169816,169817,169820,169822,169825,169827],{"class":108,"line":1322},[106,169818,169819],{"class":116},"    writer ",[106,169821,162],{"class":112},[106,169823,169824],{"class":116}," csv.writer(",[106,169826,45348],{"class":5209},[106,169828,123],{"class":116},[106,169830,169831],{"class":108,"line":1604},[106,169832,169833],{"class":116},"    writer.writerows(students)\n",[14,169835,169836],{},"读取 CSV：",[97,169838,169840],{"className":30372,"code":169839,"language":30374,"meta":25,"style":25},"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",[103,169841,169842,169848,169852,169882,169896,169908],{"__ignoreMap":25},[106,169843,169844,169846],{"class":108,"line":109},[106,169845,30386],{"class":112},[106,169847,169704],{"class":116},[106,169849,169850],{"class":108,"line":28},[106,169851,2392],{"emptyLinePlaceholder":33},[106,169853,169854,169856,169858,169860,169862,169864,169866,169868,169870,169872,169874,169876,169878,169880],{"class":108,"line":1172},[106,169855,107818],{"class":112},[106,169857,146776],{"class":165},[106,169859,117],{"class":116},[106,169861,169785],{"class":221},[106,169863,12428],{"class":116},[106,169865,146786],{"class":221},[106,169867,12428],{"class":116},[106,169869,146791],{"class":5209},[106,169871,162],{"class":112},[106,169873,146796],{"class":221},[106,169875,13707],{"class":116},[106,169877,31377],{"class":112},[106,169879,148138],{"class":5209},[106,169881,3731],{"class":116},[106,169883,169884,169887,169889,169892,169894],{"class":108,"line":1187},[106,169885,169886],{"class":116},"    reader ",[106,169888,162],{"class":112},[106,169890,169891],{"class":116}," csv.reader(",[106,169893,45348],{"class":5209},[106,169895,123],{"class":116},[106,169897,169898,169900,169903,169905],{"class":108,"line":1193},[106,169899,3193],{"class":112},[106,169901,169902],{"class":116}," row ",[106,169904,26037],{"class":112},[106,169906,169907],{"class":116}," reader:\n",[106,169909,169910,169912],{"class":108,"line":1207},[106,169911,32445],{"class":165},[106,169913,169914],{"class":116},"(row)\n",[14,169916,169917],{},"使用字典写入：",[97,169919,169921],{"className":30372,"code":169920,"language":30374,"meta":25,"style":25},"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",[103,169922,169923,169929,169933,169941,169969,169997,170001,170005,170043,170064,170085,170090],{"__ignoreMap":25},[106,169924,169925,169927],{"class":108,"line":109},[106,169926,30386],{"class":112},[106,169928,169704],{"class":116},[106,169930,169931],{"class":108,"line":28},[106,169932,2392],{"emptyLinePlaceholder":33},[106,169934,169935,169937,169939],{"class":108,"line":1172},[106,169936,159701],{"class":116},[106,169938,162],{"class":112},[106,169940,55441],{"class":116},[106,169942,169943,169945,169947,169949,169951,169953,169955,169957,169959,169961,169963,169965,169967],{"class":108,"line":1187},[106,169944,148370],{"class":116},[106,169946,62673],{"class":221},[106,169948,51431],{"class":116},[106,169950,149873],{"class":221},[106,169952,12428],{"class":116},[106,169954,69118],{"class":221},[106,169956,51431],{"class":116},[106,169958,767],{"class":165},[106,169960,12428],{"class":116},[106,169962,151457],{"class":221},[106,169964,51431],{"class":116},[106,169966,1106],{"class":165},[106,169968,4922],{"class":116},[106,169970,169971,169973,169975,169977,169979,169981,169983,169985,169987,169989,169991,169993,169995],{"class":108,"line":1193},[106,169972,148370],{"class":116},[106,169974,62673],{"class":221},[106,169976,51431],{"class":116},[106,169978,150921],{"class":221},[106,169980,12428],{"class":116},[106,169982,69118],{"class":221},[106,169984,51431],{"class":116},[106,169986,742],{"class":165},[106,169988,12428],{"class":116},[106,169990,151457],{"class":221},[106,169992,51431],{"class":116},[106,169994,928],{"class":165},[106,169996,4922],{"class":116},[106,169998,169999],{"class":108,"line":1207},[106,170000,33240],{"class":116},[106,170002,170003],{"class":108,"line":1213},[106,170004,2392],{"emptyLinePlaceholder":33},[106,170006,170007,170009,170011,170013,170015,170017,170019,170021,170023,170025,170027,170029,170031,170033,170035,170037,170039,170041],{"class":108,"line":1304},[106,170008,107818],{"class":112},[106,170010,146776],{"class":165},[106,170012,117],{"class":116},[106,170014,169785],{"class":221},[106,170016,12428],{"class":116},[106,170018,151961],{"class":221},[106,170020,12428],{"class":116},[106,170022,146791],{"class":5209},[106,170024,162],{"class":112},[106,170026,146796],{"class":221},[106,170028,12428],{"class":116},[106,170030,169802],{"class":5209},[106,170032,162],{"class":112},[106,170034,7645],{"class":221},[106,170036,13707],{"class":116},[106,170038,31377],{"class":112},[106,170040,148138],{"class":5209},[106,170042,3731],{"class":116},[106,170044,170045,170048,170050,170052,170054,170056,170058,170060,170062],{"class":108,"line":1310},[106,170046,170047],{"class":116},"    fieldnames ",[106,170049,162],{"class":112},[106,170051,52220],{"class":116},[106,170053,62673],{"class":221},[106,170055,12428],{"class":116},[106,170057,69118],{"class":221},[106,170059,12428],{"class":116},[106,170061,151457],{"class":221},[106,170063,33240],{"class":116},[106,170065,170066,170068,170070,170073,170075,170077,170080,170082],{"class":108,"line":1322},[106,170067,169819],{"class":116},[106,170069,162],{"class":112},[106,170071,170072],{"class":116}," csv.DictWriter(",[106,170074,45348],{"class":5209},[106,170076,12428],{"class":116},[106,170078,170079],{"class":5209},"fieldnames",[106,170081,162],{"class":112},[106,170083,170084],{"class":116},"fieldnames)\n",[106,170086,170087],{"class":108,"line":1604},[106,170088,170089],{"class":116},"    writer.writeheader()\n",[106,170091,170092],{"class":108,"line":1609},[106,170093,169833],{"class":116},[48,170095,170097],{"id":170096},"_812-小案例文本词频统计","8.12 小案例：文本词频统计",[14,170099,123277],{},[60,170101,170102,170105,170108],{},[63,170103,170104],{},"读取文本文件。",[63,170106,170107],{},"统计每个单词出现次数。",[63,170109,170110],{},"输出出现次数最多的前 10 个单词。",[14,170112,10028],{},[97,170114,170116],{"className":30372,"code":170115,"language":30374,"meta":25,"style":25},"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",[103,170117,170118,170128,170132,170145,170161,170165,170175,170184,170188,170200,170220,170229,170233,170251,170255,170285,170289,170305],{"__ignoreMap":25},[106,170119,170120,170122,170124,170126],{"class":108,"line":109},[106,170121,30731],{"class":112},[106,170123,108296],{"class":116},[106,170125,30386],{"class":112},[106,170127,108301],{"class":116},[106,170129,170130],{"class":108,"line":28},[106,170131,2392],{"emptyLinePlaceholder":33},[106,170133,170134,170136,170138,170140,170143],{"class":108,"line":1172},[106,170135,168296],{"class":116},[106,170137,162],{"class":112},[106,170139,108530],{"class":116},[106,170141,170142],{"class":221},"\"article.txt\"",[106,170144,123],{"class":116},[106,170146,170147,170149,170151,170153,170155,170157,170159],{"class":108,"line":1187},[106,170148,168479],{"class":116},[106,170150,162],{"class":112},[106,170152,169356],{"class":116},[106,170154,146791],{"class":5209},[106,170156,162],{"class":112},[106,170158,146796],{"class":221},[106,170160,123],{"class":116},[106,170162,170163],{"class":108,"line":1193},[106,170164,2392],{"emptyLinePlaceholder":33},[106,170166,170167,170170,170172],{"class":108,"line":1207},[106,170168,170169],{"class":116},"words ",[106,170171,162],{"class":112},[106,170173,170174],{"class":116}," content.lower().split()\n",[106,170176,170177,170180,170182],{"class":108,"line":1213},[106,170178,170179],{"class":116},"counter ",[106,170181,162],{"class":112},[106,170183,87862],{"class":116},[106,170185,170186],{"class":108,"line":1304},[106,170187,2392],{"emptyLinePlaceholder":33},[106,170189,170190,170192,170195,170197],{"class":108,"line":1310},[106,170191,3017],{"class":112},[106,170193,170194],{"class":116}," word ",[106,170196,26037],{"class":112},[106,170198,170199],{"class":116}," words:\n",[106,170201,170202,170205,170207,170210,170213,170215,170218],{"class":108,"line":1322},[106,170203,170204],{"class":116},"    word ",[106,170206,162],{"class":112},[106,170208,170209],{"class":116}," word.strip(",[106,170211,170212],{"class":221},"\".,!?;:",[106,170214,156480],{"class":165},[106,170216,170217],{"class":221},"'()[]\"",[106,170219,123],{"class":116},[106,170221,170222,170224,170226],{"class":108,"line":1604},[106,170223,3093],{"class":112},[106,170225,38924],{"class":112},[106,170227,170228],{"class":116}," word:\n",[106,170230,170231],{"class":108,"line":1609},[106,170232,148497],{"class":112},[106,170234,170235,170238,170240,170243,170245,170247,170249],{"class":108,"line":1615},[106,170236,170237],{"class":116},"    counter[word] ",[106,170239,162],{"class":112},[106,170241,170242],{"class":116}," counter.get(word, ",[106,170244,308],{"class":165},[106,170246,13707],{"class":116},[106,170248,598],{"class":112},[106,170250,55693],{"class":165},[106,170252,170253],{"class":108,"line":1620},[106,170254,2392],{"emptyLinePlaceholder":33},[106,170256,170257,170260,170262,170264,170267,170269,170271,170273,170275,170277,170279,170281,170283],{"class":108,"line":1634},[106,170258,170259],{"class":116},"items ",[106,170261,162],{"class":112},[106,170263,163589],{"class":165},[106,170265,170266],{"class":116},"(counter.items(), ",[106,170268,153931],{"class":5209},[106,170270,153934],{"class":112},[106,170272,153937],{"class":116},[106,170274,334],{"class":165},[106,170276,112187],{"class":116},[106,170278,163513],{"class":5209},[106,170280,162],{"class":112},[106,170282,31470],{"class":165},[106,170284,123],{"class":116},[106,170286,170287],{"class":108,"line":1639},[106,170288,2392],{"emptyLinePlaceholder":33},[106,170290,170291,170293,170296,170298,170301,170303],{"class":108,"line":1645},[106,170292,3017],{"class":112},[106,170294,170295],{"class":116}," word, count ",[106,170297,26037],{"class":112},[106,170299,170300],{"class":116}," items[:",[106,170302,563],{"class":165},[106,170304,165740],{"class":116},[106,170306,170307,170309],{"class":108,"line":1666},[106,170308,31293],{"class":165},[106,170310,170311],{"class":116},"(word, count)\n",[48,170313,170315],{"id":170314},"_813-小案例学生信息持久化","8.13 小案例：学生信息持久化",[97,170317,170319],{"className":30372,"code":170318,"language":30374,"meta":25,"style":25},"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",[103,170320,170321,170327,170337,170341,170353,170357,170361,170369,170379,170385,170389,170419,170429,170433,170437,170445,170475,170499,170503,170507,170515,170544,170549],{"__ignoreMap":25},[106,170322,170323,170325],{"class":108,"line":109},[106,170324,30386],{"class":112},[106,170326,147076],{"class":116},[106,170328,170329,170331,170333,170335],{"class":108,"line":28},[106,170330,30731],{"class":112},[106,170332,108296],{"class":116},[106,170334,30386],{"class":112},[106,170336,108301],{"class":116},[106,170338,170339],{"class":108,"line":1172},[106,170340,2392],{"emptyLinePlaceholder":33},[106,170342,170343,170345,170347,170349,170351],{"class":108,"line":1187},[106,170344,151809],{"class":165},[106,170346,13557],{"class":112},[106,170348,108530],{"class":116},[106,170350,151816],{"class":221},[106,170352,123],{"class":116},[106,170354,170355],{"class":108,"line":1193},[106,170356,2392],{"emptyLinePlaceholder":33},[106,170358,170359],{"class":108,"line":1207},[106,170360,2392],{"emptyLinePlaceholder":33},[106,170362,170363,170365,170367],{"class":108,"line":1213},[106,170364,31941],{"class":112},[106,170366,151833],{"class":1955},[106,170368,31947],{"class":116},[106,170370,170371,170373,170375,170377],{"class":108,"line":1304},[106,170372,3093],{"class":112},[106,170374,38924],{"class":112},[106,170376,151844],{"class":165},[106,170378,151847],{"class":116},[106,170380,170381,170383],{"class":108,"line":1310},[106,170382,14745],{"class":112},[106,170384,51832],{"class":116},[106,170386,170387],{"class":108,"line":1322},[106,170388,2392],{"emptyLinePlaceholder":33},[106,170390,170391,170393,170395,170397,170399,170401,170403,170405,170407,170409,170411,170413,170415,170417],{"class":108,"line":1604},[106,170392,34172],{"class":112},[106,170394,146776],{"class":165},[106,170396,117],{"class":116},[106,170398,151809],{"class":165},[106,170400,12428],{"class":116},[106,170402,146786],{"class":221},[106,170404,12428],{"class":116},[106,170406,146791],{"class":5209},[106,170408,162],{"class":112},[106,170410,146796],{"class":221},[106,170412,13707],{"class":116},[106,170414,31377],{"class":112},[106,170416,148138],{"class":5209},[106,170418,3731],{"class":116},[106,170420,170421,170423,170425,170427],{"class":108,"line":1609},[106,170422,14745],{"class":112},[106,170424,148149],{"class":116},[106,170426,45348],{"class":5209},[106,170428,123],{"class":116},[106,170430,170431],{"class":108,"line":1615},[106,170432,2392],{"emptyLinePlaceholder":33},[106,170434,170435],{"class":108,"line":1620},[106,170436,2392],{"emptyLinePlaceholder":33},[106,170438,170439,170441,170443],{"class":108,"line":1634},[106,170440,31941],{"class":112},[106,170442,151943],{"class":1955},[106,170444,151946],{"class":116},[106,170446,170447,170449,170451,170453,170455,170457,170459,170461,170463,170465,170467,170469,170471,170473],{"class":108,"line":1639},[106,170448,34172],{"class":112},[106,170450,146776],{"class":165},[106,170452,117],{"class":116},[106,170454,151809],{"class":165},[106,170456,12428],{"class":116},[106,170458,151961],{"class":221},[106,170460,12428],{"class":116},[106,170462,146791],{"class":5209},[106,170464,162],{"class":112},[106,170466,146796],{"class":221},[106,170468,13707],{"class":116},[106,170470,31377],{"class":112},[106,170472,148138],{"class":5209},[106,170474,3731],{"class":116},[106,170476,170477,170479,170481,170483,170485,170487,170489,170491,170493,170495,170497],{"class":108,"line":1645},[106,170478,151982],{"class":116},[106,170480,45348],{"class":5209},[106,170482,12428],{"class":116},[106,170484,147122],{"class":5209},[106,170486,162],{"class":112},[106,170488,33981],{"class":165},[106,170490,12428],{"class":116},[106,170492,151997],{"class":5209},[106,170494,162],{"class":112},[106,170496,194],{"class":165},[106,170498,123],{"class":116},[106,170500,170501],{"class":108,"line":1666},[106,170502,2392],{"emptyLinePlaceholder":33},[106,170504,170505],{"class":108,"line":1671},[106,170506,2392],{"emptyLinePlaceholder":33},[106,170508,170509,170511,170513],{"class":108,"line":1685},[106,170510,159701],{"class":116},[106,170512,162],{"class":112},[106,170514,153027],{"class":116},[106,170516,170517,170520,170522,170524,170526,170528,170530,170532,170534,170536,170538,170540,170542],{"class":108,"line":1690},[106,170518,170519],{"class":116},"students.append({",[106,170521,62673],{"class":221},[106,170523,51431],{"class":116},[106,170525,149873],{"class":221},[106,170527,12428],{"class":116},[106,170529,69118],{"class":221},[106,170531,51431],{"class":116},[106,170533,767],{"class":165},[106,170535,12428],{"class":116},[106,170537,151457],{"class":221},[106,170539,51431],{"class":116},[106,170541,1106],{"class":165},[106,170543,165137],{"class":116},[106,170545,170546],{"class":108,"line":1719},[106,170547,170548],{"class":116},"save_students(students)\n",[106,170550,170551,170553,170555,170558],{"class":108,"line":1724},[106,170552,30409],{"class":165},[106,170554,117],{"class":116},[106,170556,170557],{"class":221},"\"保存成功\"",[106,170559,123],{"class":116},[48,170561,170563],{"id":170562},"_814-易错点","8.14 易错点",[60,170565,170566,170570,170576,170581,170588,170595],{},[63,170567,170568,168829],{},[103,170569,912],{},[63,170571,170572,170573,28379],{},"读写中文要指定 ",[103,170574,170575],{},"encoding=\"utf-8\"",[63,170577,170578,170579,28379],{},"打开文件后要关闭，推荐使用 ",[103,170580,107818],{},[63,170582,170583,170584,170587],{},"读取大文件不要直接 ",[103,170585,170586],{},"read()"," 全部内容。",[63,170589,170590,170591,170594],{},"Windows 写 CSV 时建议加 ",[103,170592,170593],{},"newline=\"\"","，避免空行。",[63,170596,170597],{},"JSON 只能保存基础数据类型，不能直接保存函数、文件对象等。",[48,170599,170601],{"id":170600},"_815-本章练习","8.15 本章练习",[60,170603,170604,170611,170616,170619,170622],{},[63,170605,170606,170607,170610],{},"写入一个 ",[103,170608,170609],{},"students.txt","，每行保存一个学生姓名。",[63,170612,104340,170613,170615],{},[103,170614,170609],{}," 并输出所有学生。",[63,170617,170618],{},"把学生列表保存为 JSON 文件。",[63,170620,170621],{},"从 JSON 文件读取学生数据，计算平均分。",[63,170623,170624,170625,170628,170629,170632],{},"写一个日志函数 ",[103,170626,170627],{},"write_log(message)","，每次调用向 ",[103,170630,170631],{},"app.log"," 追加一行。",[5119,170634,170635],{},"html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sA_wV, html code.shiki .sA_wV{--shiki-default:#032F62;--shiki-dark:#DBEDFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}",{"title":25,"searchDepth":28,"depth":28,"links":170637},[170638,170639,170643,170644,170650,170651,170652,170653,170654,170655,170656,170657,170658,170659,170660],{"id":168149,"depth":28,"text":168150},{"id":168190,"depth":28,"text":168191,"children":170640},[170641,170642],{"id":168194,"depth":1172,"text":168195},{"id":168228,"depth":1172,"text":168229},{"id":168342,"depth":28,"text":168343},{"id":168435,"depth":28,"text":168436,"children":170645},[170646,170647,170648,170649],{"id":168439,"depth":1172,"text":168440},{"id":168526,"depth":1172,"text":168527},{"id":168596,"depth":1172,"text":168597},{"id":168690,"depth":1172,"text":168691},{"id":168760,"depth":28,"text":168761},{"id":168823,"depth":28,"text":168824},{"id":168984,"depth":28,"text":168985},{"id":169047,"depth":28,"text":169048},{"id":169163,"depth":28,"text":169164},{"id":169373,"depth":28,"text":169374},{"id":169685,"depth":28,"text":169686},{"id":170096,"depth":28,"text":170097},{"id":170314,"depth":28,"text":170315},{"id":170562,"depth":28,"text":170563},{"id":170600,"depth":28,"text":170601},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch8",{"title":168141,"description":30},"wiki\u002F2024-10-10-python教程\u002Fch8-文件操作","TCxYv9FRIlOsuS2LeUSgcbxHSxHOruKUW4ZecWBr6Yo",{"id":170667,"title":170668,"body":170669,"description":30,"extension":31,"meta":172855,"navigation":33,"path":172856,"seo":172857,"stem":172858,"__hash__":172859},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包.md","9. 异常、模块与包",{"type":7,"value":170670,"toc":172822},[170671,170674,170678,170681,170684,170776,170778,170797,170802,170806,170809,170812,170841,170848,170851,170855,170858,170887,170889,170941,170947,171000,171004,171102,171105,171172,171176,171233,171235,171241,171245,171250,171256,171347,171352,171356,171359,171437,171440,171478,171482,171600,171603,171607,171610,171655,171658,171662,171667,171673,171723,171726,171757,171761,171765,171795,171799,171834,171838,171873,171913,171917,171933,171936,171940,171944,172023,172027,172068,172072,172127,172131,172165,172169,172199,172208,172215,172221,172278,172281,172289,172292,172296,172303,172306,172312,172315,172332,172337,172341,172347,172360,172363,172400,172403,172414,172417,172431,172434,172448,172452,172459,172492,172495,172497,172503,172506,172510,172512,172518,172523,172696,172700,172763,172767,172791,172795,172819],[10,170672,170668],{"id":170673},"_9-异常模块与包",[48,170675,170677],{"id":170676},"_91-什么是异常","9.1 什么是异常",[14,170679,170680],{},"异常是程序运行过程中出现的错误。",[14,170682,170683],{},"常见异常：",[254,170685,170686,170695],{},[257,170687,170688],{},[260,170689,170690,170693],{},[263,170691,170692],{},"异常",[263,170694,25863],{},[301,170696,170697,170707,170717,170726,170736,170746,170756,170766],{},[260,170698,170699,170704],{},[306,170700,170701],{},[103,170702,170703],{},"NameError",[306,170705,170706],{},"使用了未定义变量",[260,170708,170709,170714],{},[306,170710,170711],{},[103,170712,170713],{},"TypeError",[306,170715,170716],{},"类型不匹配",[260,170718,170719,170723],{},[306,170720,170721],{},[103,170722,154819],{},[306,170724,170725],{},"值不合法",[260,170727,170728,170733],{},[306,170729,170730],{},[103,170731,170732],{},"IndexError",[306,170734,170735],{},"列表索引越界",[260,170737,170738,170743],{},[306,170739,170740],{},[103,170741,170742],{},"KeyError",[306,170744,170745],{},"字典 key 不存在",[260,170747,170748,170753],{},[306,170749,170750],{},[103,170751,170752],{},"FileNotFoundError",[306,170754,170755],{},"文件不存在",[260,170757,170758,170763],{},[306,170759,170760],{},[103,170761,170762],{},"ZeroDivisionError",[306,170764,170765],{},"除数为 0",[260,170767,170768,170773],{},[306,170769,170770],{},[103,170771,170772],{},"ImportError",[306,170774,170775],{},"导入失败",[14,170777,15128],{},[97,170779,170781],{"className":30372,"code":170780,"language":30374,"meta":25,"style":25},"num = int(\"abc\")\n",[103,170782,170783],{"__ignoreMap":25},[106,170784,170785,170787,170789,170791,170793,170795],{"class":108,"line":109},[106,170786,155772],{"class":116},[106,170788,162],{"class":112},[106,170790,2374],{"class":165},[106,170792,117],{"class":116},[106,170794,155865],{"class":221},[106,170796,123],{"class":116},[14,170798,170799,170800,28379],{},"会触发 ",[103,170801,154819],{},[48,170803,170805],{"id":170804},"_92-为什么要处理异常","9.2 为什么要处理异常",[14,170807,170808],{},"如果不处理异常，程序会直接终止。",[14,170810,170811],{},"例如用户输入年龄：",[97,170813,170815],{"className":30372,"code":170814,"language":30374,"meta":25,"style":25},"age = int(input(\"请输入年龄:\"))\nprint(age)\n",[103,170816,170817,170835],{"__ignoreMap":25},[106,170818,170819,170821,170823,170825,170827,170829,170831,170833],{"class":108,"line":109},[106,170820,146531],{"class":116},[106,170822,162],{"class":112},[106,170824,2374],{"class":165},[106,170826,117],{"class":116},[106,170828,53815],{"class":165},[106,170830,117],{"class":116},[106,170832,152379],{"class":221},[106,170834,30491],{"class":116},[106,170836,170837,170839],{"class":108,"line":28},[106,170838,30409],{"class":165},[106,170840,155746],{"class":116},[14,170842,170843,170844,170847],{},"用户输入 ",[103,170845,170846],{},"abc","，程序就会报错退出。",[14,170849,170850],{},"异常处理可以让程序在出错时给出友好提示，并继续运行。",[48,170852,170854],{"id":170853},"_93-try-except","9.3 try except",[14,170856,170857],{},"基础语法：",[97,170859,170861],{"className":30372,"code":170860,"language":30374,"meta":25,"style":25},"try:\n    可能出错的代码\nexcept:\n    出错后的处理代码\n",[103,170862,170863,170870,170875,170882],{"__ignoreMap":25},[106,170864,170865,170868],{"class":108,"line":109},[106,170866,170867],{"class":112},"try",[106,170869,3731],{"class":116},[106,170871,170872],{"class":108,"line":28},[106,170873,170874],{"class":116},"    可能出错的代码\n",[106,170876,170877,170880],{"class":108,"line":1172},[106,170878,170879],{"class":112},"except",[106,170881,3731],{"class":116},[106,170883,170884],{"class":108,"line":1187},[106,170885,170886],{"class":116},"    出错后的处理代码\n",[14,170888,15128],{},[97,170890,170892],{"className":30372,"code":170891,"language":30374,"meta":25,"style":25},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept:\n    print(\"年龄必须是数字\")\n",[103,170893,170894,170900,170918,170924,170930],{"__ignoreMap":25},[106,170895,170896,170898],{"class":108,"line":109},[106,170897,170867],{"class":112},[106,170899,3731],{"class":116},[106,170901,170902,170904,170906,170908,170910,170912,170914,170916],{"class":108,"line":28},[106,170903,152371],{"class":116},[106,170905,162],{"class":112},[106,170907,2374],{"class":165},[106,170909,117],{"class":116},[106,170911,53815],{"class":165},[106,170913,117],{"class":116},[106,170915,152379],{"class":221},[106,170917,30491],{"class":116},[106,170919,170920,170922],{"class":108,"line":1172},[106,170921,31293],{"class":165},[106,170923,155746],{"class":116},[106,170925,170926,170928],{"class":108,"line":1187},[106,170927,170879],{"class":112},[106,170929,3731],{"class":116},[106,170931,170932,170934,170936,170939],{"class":108,"line":1193},[106,170933,31293],{"class":165},[106,170935,117],{"class":116},[106,170937,170938],{"class":221},"\"年龄必须是数字\"",[106,170940,123],{"class":116},[14,170942,170943,170944,170946],{},"不建议裸写 ",[103,170945,170879],{},"，最好指定异常类型。",[97,170948,170950],{"className":30372,"code":170949,"language":30374,"meta":25,"style":25},"try:\n    age = int(input(\"请输入年龄:\"))\n    print(age)\nexcept ValueError:\n    print(\"年龄必须是数字\")\n",[103,170951,170952,170958,170976,170982,170990],{"__ignoreMap":25},[106,170953,170954,170956],{"class":108,"line":109},[106,170955,170867],{"class":112},[106,170957,3731],{"class":116},[106,170959,170960,170962,170964,170966,170968,170970,170972,170974],{"class":108,"line":28},[106,170961,152371],{"class":116},[106,170963,162],{"class":112},[106,170965,2374],{"class":165},[106,170967,117],{"class":116},[106,170969,53815],{"class":165},[106,170971,117],{"class":116},[106,170973,152379],{"class":221},[106,170975,30491],{"class":116},[106,170977,170978,170980],{"class":108,"line":1172},[106,170979,31293],{"class":165},[106,170981,155746],{"class":116},[106,170983,170984,170986,170988],{"class":108,"line":1187},[106,170985,170879],{"class":112},[106,170987,152211],{"class":165},[106,170989,3731],{"class":116},[106,170991,170992,170994,170996,170998],{"class":108,"line":1193},[106,170993,31293],{"class":165},[106,170995,117],{"class":116},[106,170997,170938],{"class":221},[106,170999,123],{"class":116},[48,171001,171003],{"id":171002},"_94-捕获多个异常","9.4 捕获多个异常",[97,171005,171007],{"className":30372,"code":171006,"language":30374,"meta":25,"style":25},"try:\n    nums = [1, 2, 3]\n    index = int(input(\"请输入索引:\"))\n    print(nums[index])\nexcept ValueError:\n    print(\"索引必须是整数\")\nexcept IndexError:\n    print(\"索引越界\")\n",[103,171008,171009,171015,171036,171056,171063,171071,171082,171091],{"__ignoreMap":25},[106,171010,171011,171013],{"class":108,"line":109},[106,171012,170867],{"class":112},[106,171014,3731],{"class":116},[106,171016,171017,171020,171022,171024,171026,171028,171030,171032,171034],{"class":108,"line":28},[106,171018,171019],{"class":116},"    nums ",[106,171021,162],{"class":112},[106,171023,52220],{"class":116},[106,171025,334],{"class":165},[106,171027,12428],{"class":116},[106,171029,194],{"class":165},[106,171031,12428],{"class":116},[106,171033,188],{"class":165},[106,171035,33240],{"class":116},[106,171037,171038,171041,171043,171045,171047,171049,171051,171054],{"class":108,"line":1172},[106,171039,171040],{"class":116},"    index ",[106,171042,162],{"class":112},[106,171044,2374],{"class":165},[106,171046,117],{"class":116},[106,171048,53815],{"class":165},[106,171050,117],{"class":116},[106,171052,171053],{"class":221},"\"请输入索引:\"",[106,171055,30491],{"class":116},[106,171057,171058,171060],{"class":108,"line":1187},[106,171059,31293],{"class":165},[106,171061,171062],{"class":116},"(nums[index])\n",[106,171064,171065,171067,171069],{"class":108,"line":1193},[106,171066,170879],{"class":112},[106,171068,152211],{"class":165},[106,171070,3731],{"class":116},[106,171072,171073,171075,171077,171080],{"class":108,"line":1207},[106,171074,31293],{"class":165},[106,171076,117],{"class":116},[106,171078,171079],{"class":221},"\"索引必须是整数\"",[106,171081,123],{"class":116},[106,171083,171084,171086,171089],{"class":108,"line":1213},[106,171085,170879],{"class":112},[106,171087,171088],{"class":165}," IndexError",[106,171090,3731],{"class":116},[106,171092,171093,171095,171097,171100],{"class":108,"line":1304},[106,171094,31293],{"class":165},[106,171096,117],{"class":116},[106,171098,171099],{"class":221},"\"索引越界\"",[106,171101,123],{"class":116},[14,171103,171104],{},"多个异常使用相同处理逻辑：",[97,171106,171108],{"className":30372,"code":171107,"language":30374,"meta":25,"style":25},"try:\n    num = int(input(\"请输入数字:\"))\n    print(10 \u002F num)\nexcept (ValueError, ZeroDivisionError):\n    print(\"输入不合法\")\n",[103,171109,171110,171116,171134,171147,171161],{"__ignoreMap":25},[106,171111,171112,171114],{"class":108,"line":109},[106,171113,170867],{"class":112},[106,171115,3731],{"class":116},[106,171117,171118,171120,171122,171124,171126,171128,171130,171132],{"class":108,"line":28},[106,171119,45587],{"class":116},[106,171121,162],{"class":112},[106,171123,2374],{"class":165},[106,171125,117],{"class":116},[106,171127,53815],{"class":165},[106,171129,117],{"class":116},[106,171131,155781],{"class":221},[106,171133,30491],{"class":116},[106,171135,171136,171138,171140,171142,171144],{"class":108,"line":1172},[106,171137,31293],{"class":165},[106,171139,117],{"class":116},[106,171141,563],{"class":165},[106,171143,156031],{"class":112},[106,171145,171146],{"class":116}," num)\n",[106,171148,171149,171151,171153,171155,171157,171159],{"class":108,"line":1187},[106,171150,170879],{"class":112},[106,171152,1650],{"class":116},[106,171154,154819],{"class":165},[106,171156,12428],{"class":116},[106,171158,170762],{"class":165},[106,171160,30780],{"class":116},[106,171162,171163,171165,171167,171170],{"class":108,"line":1193},[106,171164,31293],{"class":165},[106,171166,117],{"class":116},[106,171168,171169],{"class":221},"\"输入不合法\"",[106,171171,123],{"class":116},[48,171173,171175],{"id":171174},"_95-获取异常信息","9.5 获取异常信息",[97,171177,171179],{"className":30372,"code":171178,"language":30374,"meta":25,"style":25},"try:\n    num = int(\"abc\")\nexcept ValueError as e:\n    print(f\"出错了:{e}\")\n",[103,171180,171181,171187,171201,171212],{"__ignoreMap":25},[106,171182,171183,171185],{"class":108,"line":109},[106,171184,170867],{"class":112},[106,171186,3731],{"class":116},[106,171188,171189,171191,171193,171195,171197,171199],{"class":108,"line":28},[106,171190,45587],{"class":116},[106,171192,162],{"class":112},[106,171194,2374],{"class":165},[106,171196,117],{"class":116},[106,171198,155865],{"class":221},[106,171200,123],{"class":116},[106,171202,171203,171205,171207,171209],{"class":108,"line":1172},[106,171204,170879],{"class":112},[106,171206,152211],{"class":165},[106,171208,64598],{"class":112},[106,171210,171211],{"class":116}," e:\n",[106,171213,171214,171216,171218,171220,171223,171225,171227,171229,171231],{"class":108,"line":1187},[106,171215,31293],{"class":165},[106,171217,117],{"class":116},[106,171219,169],{"class":112},[106,171221,171222],{"class":221},"\"出错了:",[106,171224,1013],{"class":165},[106,171226,191],{"class":116},[106,171228,1063],{"class":165},[106,171230,368],{"class":221},[106,171232,123],{"class":116},[14,171234,146442],{},[97,171236,171239],{"className":171237,"code":171238,"language":5180,"meta":25},[5178],"出错了:invalid literal for int() with base 10: 'abc'\n",[103,171240,171238],{"__ignoreMap":25},[48,171242,171244],{"id":171243},"_96-else和finally","9.6 else和finally",[14,171246,171247,171249],{},[103,171248,1693],{},"：没有异常时执行。",[14,171251,171252,171255],{},[103,171253,171254],{},"finally","：无论是否异常都会执行。",[97,171257,171259],{"className":30372,"code":171258,"language":30374,"meta":25,"style":25},"try:\n    num = int(input(\"请输入数字:\"))\nexcept ValueError:\n    print(\"输入错误\")\nelse:\n    print(f\"输入正确:{num}\")\nfinally:\n    print(\"程序结束\")\n",[103,171260,171261,171267,171285,171293,171303,171309,171330,171336],{"__ignoreMap":25},[106,171262,171263,171265],{"class":108,"line":109},[106,171264,170867],{"class":112},[106,171266,3731],{"class":116},[106,171268,171269,171271,171273,171275,171277,171279,171281,171283],{"class":108,"line":28},[106,171270,45587],{"class":116},[106,171272,162],{"class":112},[106,171274,2374],{"class":165},[106,171276,117],{"class":116},[106,171278,53815],{"class":165},[106,171280,117],{"class":116},[106,171282,155781],{"class":221},[106,171284,30491],{"class":116},[106,171286,171287,171289,171291],{"class":108,"line":1172},[106,171288,170879],{"class":112},[106,171290,152211],{"class":165},[106,171292,3731],{"class":116},[106,171294,171295,171297,171299,171301],{"class":108,"line":1187},[106,171296,31293],{"class":165},[106,171298,117],{"class":116},[106,171300,153199],{"class":221},[106,171302,123],{"class":116},[106,171304,171305,171307],{"class":108,"line":1193},[106,171306,1693],{"class":112},[106,171308,3731],{"class":116},[106,171310,171311,171313,171315,171317,171320,171322,171324,171326,171328],{"class":108,"line":1207},[106,171312,31293],{"class":165},[106,171314,117],{"class":116},[106,171316,169],{"class":112},[106,171318,171319],{"class":221},"\"输入正确:",[106,171321,1013],{"class":165},[106,171323,1657],{"class":116},[106,171325,1063],{"class":165},[106,171327,368],{"class":221},[106,171329,123],{"class":116},[106,171331,171332,171334],{"class":108,"line":1213},[106,171333,171254],{"class":112},[106,171335,3731],{"class":116},[106,171337,171338,171340,171342,171345],{"class":108,"line":1304},[106,171339,31293],{"class":165},[106,171341,117],{"class":116},[106,171343,171344],{"class":221},"\"程序结束\"",[106,171346,123],{"class":116},[14,171348,171349,171351],{},[103,171350,171254],{}," 常用于释放资源，如关闭文件、关闭网络连接。",[48,171353,171355],{"id":171354},"_97-抛出异常","9.7 抛出异常",[14,171357,171358],{},"程序可以主动抛出异常。",[97,171360,171362],{"className":30372,"code":171361,"language":30374,"meta":25,"style":25},"def set_age(age):\n    if age \u003C 0:\n        raise ValueError(\"年龄不能为负数\")\n    print(f\"年龄:{age}\")\n\n\nset_age(-1)\n",[103,171363,171364,171373,171385,171398,171418,171422,171426],{"__ignoreMap":25},[106,171365,171366,171368,171371],{"class":108,"line":109},[106,171367,31941],{"class":112},[106,171369,171370],{"class":1955}," set_age",[106,171372,161400],{"class":116},[106,171374,171375,171377,171379,171381,171383],{"class":108,"line":28},[106,171376,3093],{"class":112},[106,171378,15700],{"class":116},[106,171380,1027],{"class":112},[106,171382,4085],{"class":165},[106,171384,3731],{"class":116},[106,171386,171387,171389,171391,171393,171396],{"class":108,"line":1172},[106,171388,103417],{"class":112},[106,171390,152211],{"class":165},[106,171392,117],{"class":116},[106,171394,171395],{"class":221},"\"年龄不能为负数\"",[106,171397,123],{"class":116},[106,171399,171400,171402,171404,171406,171408,171410,171412,171414,171416],{"class":108,"line":1187},[106,171401,31293],{"class":165},[106,171403,117],{"class":116},[106,171405,169],{"class":112},[106,171407,161968],{"class":221},[106,171409,1013],{"class":165},[106,171411,70215],{"class":116},[106,171413,1063],{"class":165},[106,171415,368],{"class":221},[106,171417,123],{"class":116},[106,171419,171420],{"class":108,"line":1193},[106,171421,2392],{"emptyLinePlaceholder":33},[106,171423,171424],{"class":108,"line":1207},[106,171425,2392],{"emptyLinePlaceholder":33},[106,171427,171428,171431,171433,171435],{"class":108,"line":1213},[106,171429,171430],{"class":116},"set_age(",[106,171432,649],{"class":112},[106,171434,334],{"class":165},[106,171436,123],{"class":116},[14,171438,171439],{},"调用者可以捕获：",[97,171441,171443],{"className":30372,"code":171442,"language":30374,"meta":25,"style":25},"try:\n    set_age(-1)\nexcept ValueError as e:\n    print(e)\n",[103,171444,171445,171451,171462,171472],{"__ignoreMap":25},[106,171446,171447,171449],{"class":108,"line":109},[106,171448,170867],{"class":112},[106,171450,3731],{"class":116},[106,171452,171453,171456,171458,171460],{"class":108,"line":28},[106,171454,171455],{"class":116},"    set_age(",[106,171457,649],{"class":112},[106,171459,334],{"class":165},[106,171461,123],{"class":116},[106,171463,171464,171466,171468,171470],{"class":108,"line":1172},[106,171465,170879],{"class":112},[106,171467,152211],{"class":165},[106,171469,64598],{"class":112},[106,171471,171211],{"class":116},[106,171473,171474,171476],{"class":108,"line":1187},[106,171475,31293],{"class":165},[106,171477,66993],{"class":116},[48,171479,171481],{"id":171480},"_98-自定义异常","9.8 自定义异常",[97,171483,171485],{"className":30372,"code":171484,"language":30374,"meta":25,"style":25},"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",[103,171486,171487,171501,171505,171509,171513,171521,171531,171542,171552,171556,171560,171566,171583,171594],{"__ignoreMap":25},[106,171488,171489,171491,171494,171496,171499],{"class":108,"line":109},[106,171490,14687],{"class":112},[106,171492,171493],{"class":1955}," BalanceNotEnoughError",[106,171495,117],{"class":116},[106,171497,171498],{"class":165},"Exception",[106,171500,30780],{"class":116},[106,171502,171503],{"class":108,"line":28},[106,171504,149522],{"class":112},[106,171506,171507],{"class":108,"line":1172},[106,171508,2392],{"emptyLinePlaceholder":33},[106,171510,171511],{"class":108,"line":1187},[106,171512,2392],{"emptyLinePlaceholder":33},[106,171514,171515,171517,171519],{"class":108,"line":1193},[106,171516,31941],{"class":112},[106,171518,150171],{"class":1955},[106,171520,162797],{"class":116},[106,171522,171523,171525,171527,171529],{"class":108,"line":1207},[106,171524,3093],{"class":112},[106,171526,150127],{"class":116},[106,171528,1077],{"class":112},[106,171530,162574],{"class":116},[106,171532,171533,171535,171538,171540],{"class":108,"line":1213},[106,171534,103417],{"class":112},[106,171536,171537],{"class":116}," BalanceNotEnoughError(",[106,171539,150222],{"class":221},[106,171541,123],{"class":116},[106,171543,171544,171546,171548,171550],{"class":108,"line":1304},[106,171545,4082],{"class":112},[106,171547,162804],{"class":116},[106,171549,649],{"class":112},[106,171551,150160],{"class":116},[106,171553,171554],{"class":108,"line":1310},[106,171555,2392],{"emptyLinePlaceholder":33},[106,171557,171558],{"class":108,"line":1322},[106,171559,2392],{"emptyLinePlaceholder":33},[106,171561,171562,171564],{"class":108,"line":1604},[106,171563,170867],{"class":112},[106,171565,3731],{"class":116},[106,171567,171568,171570,171572,171575,171577,171579,171581],{"class":108,"line":1609},[106,171569,162475],{"class":116},[106,171571,162],{"class":112},[106,171573,171574],{"class":116}," withdraw(",[106,171576,428],{"class":165},[106,171578,12428],{"class":116},[106,171580,1714],{"class":165},[106,171582,123],{"class":116},[106,171584,171585,171587,171590,171592],{"class":108,"line":1615},[106,171586,170879],{"class":112},[106,171588,171589],{"class":116}," BalanceNotEnoughError ",[106,171591,31377],{"class":112},[106,171593,171211],{"class":116},[106,171595,171596,171598],{"class":108,"line":1620},[106,171597,31293],{"class":165},[106,171599,66993],{"class":116},[14,171601,171602],{},"入门阶段大多数情况使用内置异常即可。",[48,171604,171606],{"id":171605},"_99-traceback","9.9 traceback",[14,171608,171609],{},"调试时可以输出完整异常堆栈。",[97,171611,171613],{"className":30372,"code":171612,"language":30374,"meta":25,"style":25},"import traceback\n\ntry:\n    int(\"abc\")\nexcept ValueError:\n    traceback.print_exc()\n",[103,171614,171615,171622,171626,171632,171642,171650],{"__ignoreMap":25},[106,171616,171617,171619],{"class":108,"line":109},[106,171618,30386],{"class":112},[106,171620,171621],{"class":116}," traceback\n",[106,171623,171624],{"class":108,"line":28},[106,171625,2392],{"emptyLinePlaceholder":33},[106,171627,171628,171630],{"class":108,"line":1172},[106,171629,170867],{"class":112},[106,171631,3731],{"class":116},[106,171633,171634,171636,171638,171640],{"class":108,"line":1187},[106,171635,1977],{"class":165},[106,171637,117],{"class":116},[106,171639,155865],{"class":221},[106,171641,123],{"class":116},[106,171643,171644,171646,171648],{"class":108,"line":1193},[106,171645,170879],{"class":112},[106,171647,152211],{"class":165},[106,171649,3731],{"class":116},[106,171651,171652],{"class":108,"line":1207},[106,171653,171654],{"class":116},"    traceback.print_exc()\n",[14,171656,171657],{},"日志系统中常把异常堆栈记录到文件。",[48,171659,171661],{"id":171660},"_910-什么是模块","9.10 什么是模块",[14,171663,171664,171665,125968],{},"模块就是一个 ",[103,171666,146337],{},[14,171668,171669,171670,24612],{},"例如创建 ",[103,171671,171672],{},"my_math.py",[97,171674,171676],{"className":30372,"code":171675,"language":30374,"meta":25,"style":25},"def add(a, b):\n    return a + b\n\n\ndef sub(a, b):\n    return a - b\n",[103,171677,171678,171686,171696,171700,171704,171713],{"__ignoreMap":25},[106,171679,171680,171682,171684],{"class":108,"line":109},[106,171681,31941],{"class":112},[106,171683,5202],{"class":1955},[106,171685,151078],{"class":116},[106,171687,171688,171690,171692,171694],{"class":108,"line":28},[106,171689,4082],{"class":112},[106,171691,10862],{"class":116},[106,171693,598],{"class":112},[106,171695,151089],{"class":116},[106,171697,171698],{"class":108,"line":1172},[106,171699,2392],{"emptyLinePlaceholder":33},[106,171701,171702],{"class":108,"line":1187},[106,171703,2392],{"emptyLinePlaceholder":33},[106,171705,171706,171708,171711],{"class":108,"line":1193},[106,171707,31941],{"class":112},[106,171709,171710],{"class":1955}," sub",[106,171712,151078],{"class":116},[106,171714,171715,171717,171719,171721],{"class":108,"line":1207},[106,171716,4082],{"class":112},[106,171718,10862],{"class":116},[106,171720,649],{"class":112},[106,171722,151089],{"class":116},[14,171724,171725],{},"在另一个文件中导入：",[97,171727,171729],{"className":30372,"code":171728,"language":30374,"meta":25,"style":25},"import my_math\n\nprint(my_math.add(1, 2))\n",[103,171730,171731,171738,171742],{"__ignoreMap":25},[106,171732,171733,171735],{"class":108,"line":109},[106,171734,30386],{"class":112},[106,171736,171737],{"class":116}," my_math\n",[106,171739,171740],{"class":108,"line":28},[106,171741,2392],{"emptyLinePlaceholder":33},[106,171743,171744,171746,171749,171751,171753,171755],{"class":108,"line":1172},[106,171745,30409],{"class":165},[106,171747,171748],{"class":116},"(my_math.add(",[106,171750,334],{"class":165},[106,171752,12428],{"class":116},[106,171754,194],{"class":165},[106,171756,30491],{"class":116},[48,171758,171760],{"id":171759},"_911-import导入","9.11 import导入",[77,171762,171764],{"id":171763},"_9111-导入模块","9.11.1 导入模块",[97,171766,171768],{"className":30372,"code":171767,"language":30374,"meta":25,"style":25},"import random\n\nprint(random.randint(1, 10))\n",[103,171769,171770,171776,171780],{"__ignoreMap":25},[106,171771,171772,171774],{"class":108,"line":109},[106,171773,30386],{"class":112},[106,171775,45322],{"class":116},[106,171777,171778],{"class":108,"line":28},[106,171779,2392],{"emptyLinePlaceholder":33},[106,171781,171782,171784,171787,171789,171791,171793],{"class":108,"line":1172},[106,171783,30409],{"class":165},[106,171785,171786],{"class":116},"(random.randint(",[106,171788,334],{"class":165},[106,171790,12428],{"class":116},[106,171792,563],{"class":165},[106,171794,30491],{"class":116},[77,171796,171798],{"id":171797},"_9112-导入指定内容","9.11.2 导入指定内容",[97,171800,171802],{"className":30372,"code":171801,"language":30374,"meta":25,"style":25},"from random import randint\n\nprint(randint(1, 10))\n",[103,171803,171804,171815,171819],{"__ignoreMap":25},[106,171805,171806,171808,171810,171812],{"class":108,"line":109},[106,171807,30731],{"class":112},[106,171809,57790],{"class":116},[106,171811,30386],{"class":112},[106,171813,171814],{"class":116}," randint\n",[106,171816,171817],{"class":108,"line":28},[106,171818,2392],{"emptyLinePlaceholder":33},[106,171820,171821,171823,171826,171828,171830,171832],{"class":108,"line":1172},[106,171822,30409],{"class":165},[106,171824,171825],{"class":116},"(randint(",[106,171827,334],{"class":165},[106,171829,12428],{"class":116},[106,171831,563],{"class":165},[106,171833,30491],{"class":116},[77,171835,171837],{"id":171836},"_9113-起别名","9.11.3 起别名",[97,171839,171841],{"className":30372,"code":171840,"language":30374,"meta":25,"style":25},"import random as rd\n\nprint(rd.randint(1, 10))\n",[103,171842,171843,171854,171858],{"__ignoreMap":25},[106,171844,171845,171847,171849,171851],{"class":108,"line":109},[106,171846,30386],{"class":112},[106,171848,57790],{"class":116},[106,171850,31377],{"class":112},[106,171852,171853],{"class":116}," rd\n",[106,171855,171856],{"class":108,"line":28},[106,171857,2392],{"emptyLinePlaceholder":33},[106,171859,171860,171862,171865,171867,171869,171871],{"class":108,"line":1172},[106,171861,30409],{"class":165},[106,171863,171864],{"class":116},"(rd.randint(",[106,171866,334],{"class":165},[106,171868,12428],{"class":116},[106,171870,563],{"class":165},[106,171872,30491],{"class":116},[97,171874,171876],{"className":30372,"code":171875,"language":30374,"meta":25,"style":25},"from random import randint as rint\n\nprint(rint(1, 10))\n",[103,171877,171878,171894,171898],{"__ignoreMap":25},[106,171879,171880,171882,171884,171886,171889,171891],{"class":108,"line":109},[106,171881,30731],{"class":112},[106,171883,57790],{"class":116},[106,171885,30386],{"class":112},[106,171887,171888],{"class":116}," randint ",[106,171890,31377],{"class":112},[106,171892,171893],{"class":116}," rint\n",[106,171895,171896],{"class":108,"line":28},[106,171897,2392],{"emptyLinePlaceholder":33},[106,171899,171900,171902,171905,171907,171909,171911],{"class":108,"line":1172},[106,171901,30409],{"class":165},[106,171903,171904],{"class":116},"(rint(",[106,171906,334],{"class":165},[106,171908,12428],{"class":116},[106,171910,563],{"class":165},[106,171912,30491],{"class":116},[77,171914,171916],{"id":171915},"_9114-不推荐星号导入","9.11.4 不推荐星号导入",[97,171918,171920],{"className":30372,"code":171919,"language":30374,"meta":25,"style":25},"from random import *\n",[103,171921,171922],{"__ignoreMap":25},[106,171923,171924,171926,171928,171930],{"class":108,"line":109},[106,171925,30731],{"class":112},[106,171927,57790],{"class":116},[106,171929,30386],{"class":112},[106,171931,171932],{"class":112}," *\n",[14,171934,171935],{},"这种写法会让当前文件多出很多名字，容易冲突，不利于阅读。",[48,171937,171939],{"id":171938},"_912-常用内置模块","9.12 常用内置模块",[77,171941,171943],{"id":171942},"_9121-random","9.12.1 random",[97,171945,171947],{"className":30372,"code":171946,"language":30374,"meta":25,"style":25},"import random\n\nprint(random.randint(1, 10))\nprint(random.choice([\"小明\", \"小红\", \"小刚\"]))\nprint(random.sample([1, 2, 3, 4, 5], 2))\n",[103,171948,171949,171955,171959,171973,171992],{"__ignoreMap":25},[106,171950,171951,171953],{"class":108,"line":109},[106,171952,30386],{"class":112},[106,171954,45322],{"class":116},[106,171956,171957],{"class":108,"line":28},[106,171958,2392],{"emptyLinePlaceholder":33},[106,171960,171961,171963,171965,171967,171969,171971],{"class":108,"line":1172},[106,171962,30409],{"class":165},[106,171964,171786],{"class":116},[106,171966,334],{"class":165},[106,171968,12428],{"class":116},[106,171970,563],{"class":165},[106,171972,30491],{"class":116},[106,171974,171975,171977,171980,171982,171984,171986,171988,171990],{"class":108,"line":1187},[106,171976,30409],{"class":165},[106,171978,171979],{"class":116},"(random.choice([",[106,171981,149873],{"class":221},[106,171983,12428],{"class":116},[106,171985,150921],{"class":221},[106,171987,12428],{"class":116},[106,171989,159716],{"class":221},[106,171991,33137],{"class":116},[106,171993,171994,171996,171999,172001,172003,172005,172007,172009,172011,172013,172015,172017,172019,172021],{"class":108,"line":1193},[106,171995,30409],{"class":165},[106,171997,171998],{"class":116},"(random.sample([",[106,172000,334],{"class":165},[106,172002,12428],{"class":116},[106,172004,194],{"class":165},[106,172006,12428],{"class":116},[106,172008,188],{"class":165},[106,172010,12428],{"class":116},[106,172012,410],{"class":165},[106,172014,12428],{"class":116},[106,172016,436],{"class":165},[106,172018,112187],{"class":116},[106,172020,194],{"class":165},[106,172022,30491],{"class":116},[77,172024,172026],{"id":172025},"_9122-time","9.12.2 time",[97,172028,172030],{"className":30372,"code":172029,"language":30374,"meta":25,"style":25},"import time\n\nprint(time.time())\ntime.sleep(1)\nprint(\"1秒后执行\")\n",[103,172031,172032,172038,172042,172049,172057],{"__ignoreMap":25},[106,172033,172034,172036],{"class":108,"line":109},[106,172035,30386],{"class":112},[106,172037,31823],{"class":116},[106,172039,172040],{"class":108,"line":28},[106,172041,2392],{"emptyLinePlaceholder":33},[106,172043,172044,172046],{"class":108,"line":1172},[106,172045,30409],{"class":165},[106,172047,172048],{"class":116},"(time.time())\n",[106,172050,172051,172053,172055],{"class":108,"line":1187},[106,172052,95065],{"class":116},[106,172054,334],{"class":165},[106,172056,123],{"class":116},[106,172058,172059,172061,172063,172066],{"class":108,"line":1193},[106,172060,30409],{"class":165},[106,172062,117],{"class":116},[106,172064,172065],{"class":221},"\"1秒后执行\"",[106,172067,123],{"class":116},[77,172069,172071],{"id":172070},"_9123-datetime","9.12.3 datetime",[97,172073,172075],{"className":30372,"code":172074,"language":30374,"meta":25,"style":25},"from datetime import datetime\n\nnow = datetime.now()\nprint(now)\nprint(now.strftime(\"%Y-%m-%d %H:%M:%S\"))\n",[103,172076,172077,172089,172093,172103,172110],{"__ignoreMap":25},[106,172078,172079,172081,172084,172086],{"class":108,"line":109},[106,172080,30731],{"class":112},[106,172082,172083],{"class":116}," datetime ",[106,172085,30386],{"class":112},[106,172087,172088],{"class":116}," datetime\n",[106,172090,172091],{"class":108,"line":28},[106,172092,2392],{"emptyLinePlaceholder":33},[106,172094,172095,172098,172100],{"class":108,"line":1172},[106,172096,172097],{"class":116},"now ",[106,172099,162],{"class":112},[106,172101,172102],{"class":116}," datetime.now()\n",[106,172104,172105,172107],{"class":108,"line":1187},[106,172106,30409],{"class":165},[106,172108,172109],{"class":116},"(now)\n",[106,172111,172112,172114,172117,172120,172122,172125],{"class":108,"line":1193},[106,172113,30409],{"class":165},[106,172115,172116],{"class":116},"(now.strftime(",[106,172118,172119],{"class":221},"\"%Y-%m-",[106,172121,156676],{"class":165},[106,172123,172124],{"class":221}," %H:%M:%S\"",[106,172126,30491],{"class":116},[77,172128,172130],{"id":172129},"_9124-os","9.12.4 os",[97,172132,172134],{"className":30372,"code":172133,"language":30374,"meta":25,"style":25},"import os\n\nprint(os.getcwd())\nprint(os.listdir(\".\"))\n",[103,172135,172136,172142,172146,172153],{"__ignoreMap":25},[106,172137,172138,172140],{"class":108,"line":109},[106,172139,30386],{"class":112},[106,172141,45299],{"class":116},[106,172143,172144],{"class":108,"line":28},[106,172145,2392],{"emptyLinePlaceholder":33},[106,172147,172148,172150],{"class":108,"line":1172},[106,172149,30409],{"class":165},[106,172151,172152],{"class":116},"(os.getcwd())\n",[106,172154,172155,172157,172160,172163],{"class":108,"line":1187},[106,172156,30409],{"class":165},[106,172158,172159],{"class":116},"(os.listdir(",[106,172161,172162],{"class":221},"\".\"",[106,172164,30491],{"class":116},[77,172166,172168],{"id":172167},"_9125-sys","9.12.5 sys",[97,172170,172172],{"className":30372,"code":172171,"language":30374,"meta":25,"style":25},"import sys\n\nprint(sys.version)\nprint(sys.path)\n",[103,172173,172174,172181,172185,172192],{"__ignoreMap":25},[106,172175,172176,172178],{"class":108,"line":109},[106,172177,30386],{"class":112},[106,172179,172180],{"class":116}," sys\n",[106,172182,172183],{"class":108,"line":28},[106,172184,2392],{"emptyLinePlaceholder":33},[106,172186,172187,172189],{"class":108,"line":1172},[106,172188,30409],{"class":165},[106,172190,172191],{"class":116},"(sys.version)\n",[106,172193,172194,172196],{"class":108,"line":1187},[106,172195,30409],{"class":165},[106,172197,172198],{"class":116},"(sys.path)\n",[48,172200,172202,172203,172205,172206,368],{"id":172201},"_913-if-name-main","9.13 if ",[266,172204,79804],{}," == \"",[266,172207,102043],{},[14,172209,172210,172211,172214],{},"模块被直接运行和被导入时，",[103,172212,172213],{},"__name__"," 的值不同。",[14,172216,172217,172218,24612],{},"创建 ",[103,172219,172220],{},"my_module.py",[97,172222,172224],{"className":30372,"code":172223,"language":30374,"meta":25,"style":25},"def add(a, b):\n    return a + b\n\n\nif __name__ == \"__main__\":\n    print(add(1, 2))\n",[103,172225,172226,172234,172244,172248,172252,172264],{"__ignoreMap":25},[106,172227,172228,172230,172232],{"class":108,"line":109},[106,172229,31941],{"class":112},[106,172231,5202],{"class":1955},[106,172233,151078],{"class":116},[106,172235,172236,172238,172240,172242],{"class":108,"line":28},[106,172237,4082],{"class":112},[106,172239,10862],{"class":116},[106,172241,598],{"class":112},[106,172243,151089],{"class":116},[106,172245,172246],{"class":108,"line":1172},[106,172247,2392],{"emptyLinePlaceholder":33},[106,172249,172250],{"class":108,"line":1187},[106,172251,2392],{"emptyLinePlaceholder":33},[106,172253,172254,172256,172258,172260,172262],{"class":108,"line":1193},[106,172255,1523],{"class":112},[106,172257,31214],{"class":165},[106,172259,101544],{"class":112},[106,172261,101547],{"class":221},[106,172263,3731],{"class":116},[106,172265,172266,172268,172270,172272,172274,172276],{"class":108,"line":1207},[106,172267,31293],{"class":165},[106,172269,166585],{"class":116},[106,172271,334],{"class":165},[106,172273,12428],{"class":116},[106,172275,194],{"class":165},[106,172277,30491],{"class":116},[14,172279,172280],{},"作用：",[60,172282,172283,172286],{},[63,172284,172285],{},"直接运行该文件时，执行测试代码。",[63,172287,172288],{},"被其他文件导入时，不执行测试代码。",[14,172290,172291],{},"这是写模块时很常用的习惯。",[48,172293,172295],{"id":172294},"_914-包","9.14 包",[14,172297,172298,172299,172302],{},"包是包含 ",[103,172300,172301],{},"__init__.py"," 的目录，用于组织多个模块。",[14,172304,172305],{},"目录结构：",[97,172307,172310],{"className":172308,"code":172309,"language":5180,"meta":25},[5178],"project\u002F\n  main.py\n  utils\u002F\n    __init__.py\n    file_utils.py\n    string_utils.py\n",[103,172311,172309],{"__ignoreMap":25},[14,172313,172314],{},"导入：",[97,172316,172318],{"className":30372,"code":172317,"language":30374,"meta":25,"style":25},"from utils.file_utils import read_file\n",[103,172319,172320],{"__ignoreMap":25},[106,172321,172322,172324,172327,172329],{"class":108,"line":109},[106,172323,30731],{"class":112},[106,172325,172326],{"class":116}," utils.file_utils ",[106,172328,30386],{"class":112},[106,172330,172331],{"class":116}," read_file\n",[14,172333,172334,172336],{},[103,172335,172301],{}," 可以为空，也可以写包初始化逻辑。",[48,172338,172340],{"id":172339},"_915-第三方包","9.15 第三方包",[14,172342,172343,172344,172346],{},"第三方包通过 ",[103,172345,23824],{}," 安装。",[97,172348,172350],{"className":23815,"code":172349,"language":23817,"meta":25,"style":25},"pip install requests\n",[103,172351,172352],{"__ignoreMap":25},[106,172353,172354,172356,172358],{"class":108,"line":109},[106,172355,23824],{"class":1955},[106,172357,23827],{"class":221},[106,172359,146083],{"class":221},[14,172361,172362],{},"使用：",[97,172364,172366],{"className":30372,"code":172365,"language":30374,"meta":25,"style":25},"import requests\n\nresponse = requests.get(\"https:\u002F\u002Fwww.example.com\")\nprint(response.status_code)\n",[103,172367,172368,172374,172378,172393],{"__ignoreMap":25},[106,172369,172370,172372],{"class":108,"line":109},[106,172371,30386],{"class":112},[106,172373,146083],{"class":116},[106,172375,172376],{"class":108,"line":28},[106,172377,2392],{"emptyLinePlaceholder":33},[106,172379,172380,172383,172385,172388,172391],{"class":108,"line":1172},[106,172381,172382],{"class":116},"response ",[106,172384,162],{"class":112},[106,172386,172387],{"class":116}," requests.get(",[106,172389,172390],{"class":221},"\"https:\u002F\u002Fwww.example.com\"",[106,172392,123],{"class":116},[106,172394,172395,172397],{"class":108,"line":1187},[106,172396,30409],{"class":165},[106,172398,172399],{"class":116},"(response.status_code)\n",[14,172401,172402],{},"查看已安装包：",[97,172404,172406],{"className":23815,"code":172405,"language":23817,"meta":25,"style":25},"pip list\n",[103,172407,172408],{"__ignoreMap":25},[106,172409,172410,172412],{"class":108,"line":109},[106,172411,23824],{"class":1955},[106,172413,118940],{"class":221},[14,172415,172416],{},"导出项目依赖：",[97,172418,172419],{"className":23815,"code":146278,"language":23817,"meta":25,"style":25},[103,172420,172421],{"__ignoreMap":25},[106,172422,172423,172425,172427,172429],{"class":108,"line":109},[106,172424,23824],{"class":1955},[106,172426,146287],{"class":221},[106,172428,26216],{"class":112},[106,172430,146292],{"class":221},[14,172432,172433],{},"安装项目依赖：",[97,172435,172436],{"className":23815,"code":146298,"language":23817,"meta":25,"style":25},[103,172437,172438],{"__ignoreMap":25},[106,172439,172440,172442,172444,172446],{"class":108,"line":109},[106,172441,23824],{"class":1955},[106,172443,23827],{"class":221},[106,172445,119624],{"class":165},[106,172447,146292],{"class":221},[48,172449,172451],{"id":172450},"_916-模块搜索路径","9.16 模块搜索路径",[14,172453,172454,172455,172458],{},"Python 导入模块时会在 ",[103,172456,172457],{},"sys.path"," 中查找。",[97,172460,172462],{"className":30372,"code":172461,"language":30374,"meta":25,"style":25},"import sys\n\nfor path in sys.path:\n    print(path)\n",[103,172463,172464,172470,172474,172486],{"__ignoreMap":25},[106,172465,172466,172468],{"class":108,"line":109},[106,172467,30386],{"class":112},[106,172469,172180],{"class":116},[106,172471,172472],{"class":108,"line":28},[106,172473,2392],{"emptyLinePlaceholder":33},[106,172475,172476,172478,172481,172483],{"class":108,"line":1172},[106,172477,3017],{"class":112},[106,172479,172480],{"class":116}," path ",[106,172482,26037],{"class":112},[106,172484,172485],{"class":116}," sys.path:\n",[106,172487,172488,172490],{"class":108,"line":1187},[106,172489,31293],{"class":165},[106,172491,169214],{"class":116},[14,172493,172494],{},"优先查找当前运行目录，所以文件名不要和标准库同名。",[14,172496,157608],{},[97,172498,172501],{"className":172499,"code":172500,"language":5180,"meta":25},[5178],"random.py\njson.py\ntime.py\n",[103,172502,172500],{"__ignoreMap":25},[14,172504,172505],{},"这些文件名可能导致导入异常。",[48,172507,172509],{"id":172508},"_917-小案例工具包拆分","9.17 小案例：工具包拆分",[14,172511,172305],{},[97,172513,172516],{"className":172514,"code":172515,"language":5180,"meta":25},[5178],"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",[103,172517,172515],{"__ignoreMap":25},[14,172519,172520,24612],{},[103,172521,172522],{},"utils\u002Ffile_utils.py",[97,172524,172526],{"className":30372,"code":172525,"language":30374,"meta":25,"style":25},"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",[103,172527,172528,172534,172544,172548,172552,172562,172572,172580,172586,172590,172617,172627,172631,172635,172645,172671],{"__ignoreMap":25},[106,172529,172530,172532],{"class":108,"line":109},[106,172531,30386],{"class":112},[106,172533,147076],{"class":116},[106,172535,172536,172538,172540,172542],{"class":108,"line":28},[106,172537,30731],{"class":112},[106,172539,108296],{"class":116},[106,172541,30386],{"class":112},[106,172543,108301],{"class":116},[106,172545,172546],{"class":108,"line":1172},[106,172547,2392],{"emptyLinePlaceholder":33},[106,172549,172550],{"class":108,"line":1187},[106,172551,2392],{"emptyLinePlaceholder":33},[106,172553,172554,172556,172559],{"class":108,"line":1193},[106,172555,31941],{"class":112},[106,172557,172558],{"class":1955}," read_json",[106,172560,172561],{"class":116},"(path):\n",[106,172563,172564,172567,172569],{"class":108,"line":1207},[106,172565,172566],{"class":116},"    path ",[106,172568,162],{"class":112},[106,172570,172571],{"class":116}," Path(path)\n",[106,172573,172574,172576,172578],{"class":108,"line":1213},[106,172575,3093],{"class":112},[106,172577,38924],{"class":112},[106,172579,169295],{"class":116},[106,172581,172582,172584],{"class":108,"line":1304},[106,172583,14745],{"class":112},[106,172585,51832],{"class":116},[106,172587,172588],{"class":108,"line":1310},[106,172589,2392],{"emptyLinePlaceholder":33},[106,172591,172592,172594,172596,172599,172601,172603,172605,172607,172609,172611,172613,172615],{"class":108,"line":1322},[106,172593,34172],{"class":112},[106,172595,146776],{"class":165},[106,172597,172598],{"class":116},"(path, ",[106,172600,146786],{"class":221},[106,172602,12428],{"class":116},[106,172604,146791],{"class":5209},[106,172606,162],{"class":112},[106,172608,146796],{"class":221},[106,172610,13707],{"class":116},[106,172612,31377],{"class":112},[106,172614,148138],{"class":5209},[106,172616,3731],{"class":116},[106,172618,172619,172621,172623,172625],{"class":108,"line":1604},[106,172620,14745],{"class":112},[106,172622,148149],{"class":116},[106,172624,45348],{"class":5209},[106,172626,123],{"class":116},[106,172628,172629],{"class":108,"line":1609},[106,172630,2392],{"emptyLinePlaceholder":33},[106,172632,172633],{"class":108,"line":1615},[106,172634,2392],{"emptyLinePlaceholder":33},[106,172636,172637,172639,172642],{"class":108,"line":1620},[106,172638,31941],{"class":112},[106,172640,172641],{"class":1955}," write_json",[106,172643,172644],{"class":116},"(path, data):\n",[106,172646,172647,172649,172651,172653,172655,172657,172659,172661,172663,172665,172667,172669],{"class":108,"line":1634},[106,172648,34172],{"class":112},[106,172650,146776],{"class":165},[106,172652,172598],{"class":116},[106,172654,151961],{"class":221},[106,172656,12428],{"class":116},[106,172658,146791],{"class":5209},[106,172660,162],{"class":112},[106,172662,146796],{"class":221},[106,172664,13707],{"class":116},[106,172666,31377],{"class":112},[106,172668,148138],{"class":5209},[106,172670,3731],{"class":116},[106,172672,172673,172676,172678,172680,172682,172684,172686,172688,172690,172692,172694],{"class":108,"line":1639},[106,172674,172675],{"class":116},"        json.dump(data, ",[106,172677,45348],{"class":5209},[106,172679,12428],{"class":116},[106,172681,147122],{"class":5209},[106,172683,162],{"class":112},[106,172685,33981],{"class":165},[106,172687,12428],{"class":116},[106,172689,151997],{"class":5209},[106,172691,162],{"class":112},[106,172693,194],{"class":165},[106,172695,123],{"class":116},[14,172697,172698,24612],{},[103,172699,154592],{},[97,172701,172703],{"className":30372,"code":172702,"language":30374,"meta":25,"style":25},"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",[103,172704,172705,172716,172720,172733,172753],{"__ignoreMap":25},[106,172706,172707,172709,172711,172713],{"class":108,"line":109},[106,172708,30731],{"class":112},[106,172710,172326],{"class":116},[106,172712,30386],{"class":112},[106,172714,172715],{"class":116}," read_json, write_json\n",[106,172717,172718],{"class":108,"line":28},[106,172719,2392],{"emptyLinePlaceholder":33},[106,172721,172722,172724,172726,172729,172731],{"class":108,"line":1172},[106,172723,159701],{"class":116},[106,172725,162],{"class":112},[106,172727,172728],{"class":116}," read_json(",[106,172730,151816],{"class":221},[106,172732,123],{"class":116},[106,172734,172735,172737,172739,172741,172743,172745,172747,172749,172751],{"class":108,"line":1187},[106,172736,170519],{"class":116},[106,172738,62673],{"class":221},[106,172740,51431],{"class":116},[106,172742,149873],{"class":221},[106,172744,12428],{"class":116},[106,172746,151457],{"class":221},[106,172748,51431],{"class":116},[106,172750,1106],{"class":165},[106,172752,165137],{"class":116},[106,172754,172755,172758,172760],{"class":108,"line":1193},[106,172756,172757],{"class":116},"write_json(",[106,172759,151816],{"class":221},[106,172761,172762],{"class":116},", students)\n",[48,172764,172766],{"id":172765},"_918-易错点","9.18 易错点",[60,172768,172769,172772,172777,172782,172785,172788],{},[63,172770,172771],{},"异常处理不要把所有错误都吞掉，至少要输出提示。",[63,172773,172774,172775,28379],{},"能指定异常类型就不要裸写 ",[103,172776,170879],{},[63,172778,172779,172781],{},[103,172780,171254],{}," 无论是否出错都会执行。",[63,172783,172784],{},"模块文件名不要和标准库重名。",[63,172786,172787],{},"导入自己写的模块时，要注意运行目录。",[63,172789,172790],{},"第三方包要安装到当前解释器或虚拟环境中。",[48,172792,172794],{"id":172793},"_919-本章练习","9.19 本章练习",[60,172796,172797,172800,172803,172809,172816],{},[63,172798,172799],{},"写一个安全输入整数函数，输入错误时提示并重新输入。",[63,172801,172802],{},"写函数读取文件，如果文件不存在则返回空字符串。",[63,172804,172217,172805,172808],{},[103,172806,172807],{},"math_utils.py","，实现加减乘除函数并导入使用。",[63,172810,172811,172812,172815],{},"创建一个 ",[103,172813,172814],{},"utils"," 包，把 JSON 读写函数放进去。",[63,172817,172818],{},"写一个程序，捕获除零异常和输入格式异常。",[5119,172820,172821],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":25,"searchDepth":28,"depth":28,"links":172823},[172824,172825,172826,172827,172828,172829,172830,172831,172832,172833,172834,172840,172847,172849,172850,172851,172852,172853,172854],{"id":170676,"depth":28,"text":170677},{"id":170804,"depth":28,"text":170805},{"id":170853,"depth":28,"text":170854},{"id":171002,"depth":28,"text":171003},{"id":171174,"depth":28,"text":171175},{"id":171243,"depth":28,"text":171244},{"id":171354,"depth":28,"text":171355},{"id":171480,"depth":28,"text":171481},{"id":171605,"depth":28,"text":171606},{"id":171660,"depth":28,"text":171661},{"id":171759,"depth":28,"text":171760,"children":172835},[172836,172837,172838,172839],{"id":171763,"depth":1172,"text":171764},{"id":171797,"depth":1172,"text":171798},{"id":171836,"depth":1172,"text":171837},{"id":171915,"depth":1172,"text":171916},{"id":171938,"depth":28,"text":171939,"children":172841},[172842,172843,172844,172845,172846],{"id":171942,"depth":1172,"text":171943},{"id":172025,"depth":1172,"text":172026},{"id":172070,"depth":1172,"text":172071},{"id":172129,"depth":1172,"text":172130},{"id":172167,"depth":1172,"text":172168},{"id":172201,"depth":28,"text":172848},"9.13 if name == \"main\"",{"id":172294,"depth":28,"text":172295},{"id":172339,"depth":28,"text":172340},{"id":172450,"depth":28,"text":172451},{"id":172508,"depth":28,"text":172509},{"id":172765,"depth":28,"text":172766},{"id":172793,"depth":28,"text":172794},{},"\u002Fwiki\u002F2024-10-10-python\u002Fch9",{"title":170668,"description":30},"wiki\u002F2024-10-10-python教程\u002Fch9-异常模块与包","8DoHUbhjhl_mmNCItpRjdgW7aUS0tCEWZltQGpr-eIk",{"id":172861,"title":172862,"body":172863,"description":173026,"extension":31,"meta":173027,"navigation":33,"path":173028,"seo":173029,"stem":173030,"__hash__":173031},"wiki\u002Fwiki\u002F2024-10-10-python教程\u002Findex.md","Python教程",{"type":7,"value":172864,"toc":173021},[172865,172868,172871,172874,172885,172887,172961,172964,172967,172970,172973,172976,172979,172982,172985,172988,172991],[10,172866,172862],{"id":172867},"python教程",[14,172869,172870],{},"这份笔记参考黑马程序员 Python 快速入门课程的学习路线整理，内容按“先能写、再写对、最后能做小项目”的顺序展开。笔记不是课程逐字稿，而是把知识点、代码模板、易错点和练习整理成适合复习的版本。(用于回顾复习，初版)",[14,172872,172873],{},"建议学习环境：",[60,172875,172876,172879,172882],{},[63,172877,172878],{},"Python 版本：Python 3.10 及以上。",[63,172880,172881],{},"编辑器：PyCharm、VS Code 或系统终端均可。",[63,172883,172884],{},"学习方式：每章先看概念，再手敲代码，最后完成练习。",[48,172886,117063],{"id":117063},[60,172888,172889,172895,172901,172907,172913,172919,172925,172931,172937,172943,172949,172955],{},[63,172890,172891],{},[355,172892,172894],{"href":172893},".\u002Fch1-Python","Python环境与第一个程序",[63,172896,172897],{},[355,172898,172900],{"href":172899},".\u002Fch2","基础语法、变量与字符串",[63,172902,172903],{},[355,172904,172906],{"href":172905},".\u002Fch3","判断语句",[63,172908,172909],{},[355,172910,172912],{"href":172911},".\u002Fch4","循环语句",[63,172914,172915],{},[355,172916,172918],{"href":172917},".\u002Fch5","函数基础",[63,172920,172921],{},[355,172922,172924],{"href":172923},".\u002Fch6","数据容器",[63,172926,172927],{},[355,172928,172930],{"href":172929},".\u002Fch7","函数进阶",[63,172932,172933],{},[355,172934,172936],{"href":172935},".\u002Fch8","文件操作",[63,172938,172939],{},[355,172940,172942],{"href":172941},".\u002Fch9","异常、模块与包",[63,172944,172945],{},[355,172946,172948],{"href":172947},".\u002Fch10-JSONpyecharts","JSON与pyecharts折线图",[63,172950,172951],{},[355,172952,172954],{"href":172953},".\u002Fch11","面向对象基础",[63,172956,172957],{},[355,172958,172960],{"href":172959},".\u002Fch12","综合案例与复习路线",[48,172962,172963],{"id":172963},"学习路线",[14,172965,172966],{},"第一阶段：能运行程序。",[14,172968,172969],{},"重点是安装 Python、理解解释器、掌握变量、输入输出、字符串格式化、判断和循环。完成这一阶段后，应该能写出猜数字、成绩等级、九九乘法表、简单菜单程序。",[14,172971,172972],{},"第二阶段：能组织数据。",[14,172974,172975],{},"重点是列表、元组、字符串、集合、字典、切片、遍历、通用函数和推导式。完成这一阶段后，应该能处理一批学生信息、订单数据、文本统计数据。",[14,172977,172978],{},"第三阶段：能封装逻辑。",[14,172980,172981],{},"重点是函数定义、参数、返回值、作用域、lambda、函数作为参数传递。完成这一阶段后，应该开始把重复代码拆成函数，而不是把所有逻辑写在一个文件里。",[14,172983,172984],{},"第四阶段：能做小项目。",[14,172986,172987],{},"重点是文件读写、JSON、异常处理、模块包、第三方库、面向对象和可视化。完成这一阶段后，应该能写学生管理系统、账单统计、疫情或销售数据可视化这类入门项目。",[48,172989,172990],{"id":172990},"参考资料",[60,172992,172993,173000,173007,173014],{},[63,172994,172995,172996],{},"黑马程序员 Python 入门教程推荐：",[355,172997,172998],{"href":172998,"rel":172999},"https:\u002F\u002Fwww.itheima.com\u002Fnews\u002F20230425\u002F174034.html",[23858],[63,173001,173002,173003],{},"Python 官方中文教程：",[355,173004,173005],{"href":173005,"rel":173006},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Ftutorial\u002Findex.html",[23858],[63,173008,173009,173010],{},"Python 标准库文档：",[355,173011,173012],{"href":173012,"rel":173013},"https:\u002F\u002Fdocs.python.org\u002Fzh-cn\u002F3\u002Flibrary\u002Findex.html",[23858],[63,173015,173016,173017],{},"pyecharts 文档：",[355,173018,173019],{"href":173019,"rel":173020},"https:\u002F\u002Fpyecharts.org\u002F",[23858],{"title":25,"searchDepth":28,"depth":28,"links":173022},[173023,173024,173025],{"id":117063,"depth":28,"text":117063},{"id":172963,"depth":28,"text":172963},{"id":172990,"depth":28,"text":172990},"参考黑马程序员 Python 快速入门路线整理的零基础到综合案例笔记",{"category":23371},"\u002Fwiki\u002F2024-10-10-python",{"title":172862,"description":173026},"wiki\u002F2024-10-10-python教程\u002Findex","yzEa8npVBj3xNU8x-4oSrDG7SfzITAVZlXDa1SwCYiA",1781331457061]